diff --git a/space-exploration-extension/control.lua b/space-exploration-extension/control.lua new file mode 100644 index 0000000..117c929 --- /dev/null +++ b/space-exploration-extension/control.lua @@ -0,0 +1,2 @@ +--control.lua + diff --git a/space-exploration-extension/data.lua b/space-exploration-extension/data.lua new file mode 100644 index 0000000..a5ed8cd --- /dev/null +++ b/space-exploration-extension/data.lua @@ -0,0 +1,194 @@ +--data.lua + + + + +data:extend({ + --[[{ + type = "recipe", + name = "se-delivery-cannon-capsule", + result = "se-delivery-cannon-capsule", + enabled = false, + energy_required = 10, + ingredients = { + { "low-density-structure", 1 }, + { "se-heat-shielding", 1 }, + { "explosives", 5 }, + { "copper-cable", 10 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + },]]-- + --[[{ + type = "recipe", + name = "se-delivery-cannon-capsule-ftobler", + result = "se-delivery-cannon-capsule", + enabled = true, + energy_required = 10, + ingredients = { + { "steel-plate", 4 }, + { "copper-cable", 10 }, + { "copper-plate", 10 }, + { "stone-brick", 10 }, + { "electronic-circuit", 4 }, + { "iron-plate", 10 }, + { "plastic-bar", 10 }, + { "pipe", 10 }, + { "uranium-238", 10 }, + { "explosives", 10 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + },]]-- + { + type = "recipe", + name = "se-delivery-cannon-capsule-ironless", + result = "se-delivery-cannon-capsule", + enabled = true, + energy_required = 10, + ingredients = { + { "copper-cable", 80 }, + { "copper-plate", 10 }, + { "glass", 10 }, + { "explosives", 20 }, + { "plastic-bar", 10 }, + { "electronic-circuit", 5 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = "se-delivery-cannon-capsule-stoneless", + result = "se-delivery-cannon-capsule", + enabled = true, + energy_required = 10, + ingredients = { + { "explosives", 12 }, + { "copper-cable", 10 }, + { "copper-plate", 10 }, + { "plastic-bar", 20 }, + { "steel-plate", 5 }, + { "iron-stick", 40 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = "se-delivery-cannon-capsule-oilless", + result = "se-delivery-cannon-capsule", + enabled = true, + energy_required = 10, + ingredients = { + { "copper-cable", 10 }, + { "steel-plate", 4 }, + { "iron-plate", 10 }, + { "copper-plate", 20 }, + { "glass", 10 }, + { "stone-brick", 1 }, + { "iron-stick", 1 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = "se-delivery-cannon-capsule-copperless", + result = "se-delivery-cannon-capsule", + enabled = true, + energy_required = 10, + ingredients = { + { "steel-plate", 3 }, + { "iron-plate", 5 }, + { "iron-gear-wheel", 5 }, + { "se-heat-shielding", 2 }, + { "explosives", 15 }, + { "glass", 5 }, + { "grenade", 1 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = "se-delivery-cannon-capsule-uran", + result = "se-delivery-cannon-capsule", + enabled = true, + energy_required = 10, + ingredients = { + { "uranium-238", 13 }, + { "steel-plate", 4 }, + { "copper-plate", 10 }, + { "copper-cable", 10 }, + { "iron-gear-wheel", 2 }, + { "iron-stick", 2 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = "se-delivery-cannon-capsule-stone", + result = "se-delivery-cannon-capsule", + enabled = true, + energy_required = 10, + ingredients = { + { "concrete", 13 }, + { "landfill", 6 }, + { "steel-plate", 2 }, + { "iron-stick", 2 }, + { "coal", 5 }, + { "plastic-bar", 4 }, + { "sulfur", 6 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = "se-delivery-cannon-capsule-iron-oil", + result = "se-delivery-cannon-capsule", + enabled = true, + energy_required = 10, + ingredients = { + { "steel-plate", 25 }, + { "iron-stick", 2 }, + { "iron-gear-wheel", 5 }, + { "iron-plate", 5 }, + { "coal", 5 }, + { "plastic-bar", 24 }, + { "sulfur", 26 }, + { "explosives", 30 }, + { "land-mine", 10 }, + { "empty-barrel", 2 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = "se-delivery-cannon-capsule-copper-stone", + result = "se-delivery-cannon-capsule", + enabled = true, + energy_required = 10, + ingredients = { + { "copper-cable", 100 }, + { "copper-plate", 40 }, + { "glass", 5 }, + { "stone-tablet", 5 }, + { "sand", 50 }, + { "landfill", 6 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, +}) + + +--create a new receipe array or reuse existing one +se_delivery_cannon_recipes = se_delivery_cannon_recipes or {} +se_delivery_cannon_recipes["battery"] = {name="battery"} +se_delivery_cannon_recipes["electronic-circuit"] = {name="electronic-circuit"} +se_delivery_cannon_recipes["advanced-circuit"] = {name="advanced-circuit"} +se_delivery_cannon_recipes["processing-unit"] = {name="processing-unit"} \ No newline at end of file diff --git a/space-exploration-extension/info.json b/space-exploration-extension/info.json new file mode 100644 index 0000000..b3123f3 --- /dev/null +++ b/space-exploration-extension/info.json @@ -0,0 +1,9 @@ +{ + "name": "space-exploration-extension", + "version": "0.1.0", + "title": "Space Exploration Extensions", + "author": "ftobler", + "factorio_version": "1.1", + "dependencies": ["space-exploration >= 0.5.58"], + "description": "some stuff I tweaked" + } \ No newline at end of file diff --git a/space-exploration-extension/locale/en/locale.cfg b/space-exploration-extension/locale/en/locale.cfg new file mode 100644 index 0000000..c321174 --- /dev/null +++ b/space-exploration-extension/locale/en/locale.cfg @@ -0,0 +1,5 @@ +[item-name] +fire-armor=Fire armor + +[item-description] +fire-armor=An armor that seems to catch the ground itself on fire when you take a step. It's warm to the touch. \ No newline at end of file diff --git a/space-exploration_0.5.80/space-exploration/.documentation/global.txt b/space-exploration_0.5.80/space-exploration/.documentation/global.txt new file mode 100644 index 0000000..79bac7b --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/.documentation/global.txt @@ -0,0 +1,364 @@ +-- Zones have an inheritace chain: + Zone -- anomaly, asteroid-field, asteroid-belt, orbit + Zone:Body -- star planet or moon + Zone:Body:Star -- stellar_position, children, asteroid_belts, star_gravity_well, orbit, has no own surface (uses orbit) + Zone:Body:Planet -- star_gravity_well, planet_gravity_well, children, orbit + Zone:Body:Moon -- star_gravity_well, planet_gravity_well, orbit + Zone:BlackHole -- has no stellar position. Loophole: equal distance to all stars + Zone:AsteroidBelt -- star_gravity_well + Zone:AsteroidField -- stellar_position + +-- Locations specify a point in the world: +Location { + index = int, -- zone index or spaceship index or star zone index + position = {x,y} -- position in the zone + type = "spaceship" or "zone" or "interstellar" or "system" -- the type of location this is + name = string -- a nice name for this location +} + + +global { + seed = nauvis.map_gen_settings.seed, + version=3112, -- for on_configuration_changed phase migration code. Is more flexible than the normal system. + tick_task_next_id = int, + tick_tasks = dictionary{ + -- tick tacks are objects that have per-tick functionality for systems that are not usually per-tick systems. + -- used for animations, solar flares, rocket launches and landings, special weapon fx, etc. + -- for example, the tesla gun spawns a tick task when it fires, the arcs of electrivity are genrated per frame until the effect ends. + tick_task_id = { + id = tick_task_next_id, + type = "keyword determines secondary function call or removeal" + valid = true, -- needs to stay valid or be removed + otherdata... + } + }, + astronomical = dictionary{ -- the structured map of the universe. + stars = array { + 1 = Zone:Body:Star { + type = "star", + name = "body_name", + index = zone_index, + star_gravity_well = float, -- how far in star gravity well + surface_index = nil or surface_index, + orbit = Zone:Orbit{ + type = "orbit", + name = "body_name" .. " Orbit", + controls = {control_name = {frequency, scale, richness}}, -- resource controls + parent = Star, + surface_index = nil or surface_index, + }, + children = array{ + 1 = Zone:AsteroidBelt{ + type = "asteroid-belt", + name = star.name .. " Asteroid Belt ".. 1, + controls = {control_name = {frequency, scale, richness}}, -- resource controls + index = zone_index, + parent = Star, + star_gravity_well = float, -- how far in star gravity well + }, + 2 = Zone:Body:Planet { + type = "planet", + name = "body_name", + index = zone_index, + radius_multiplier = 0.2 to 1, + radius = 2000 to 10000, + parent = Star, + star_gravity_well = float, -- how far in star gravity well + planet_gravity_well = float, -- how far in planet gravity well + controls = {control_name = {frequency, scale, richness}}, -- climate and resource controls + resources = {primary resource}, + fragment_name = "se-core-fragment-iron-ore", + tags = {"water_none"}, -- climate generation tags + biome_replacements = { + {replace={"all-dirt", "all-sand", "all-volcanic"}, with="sand-red"}, + {replace={"all-vegetation", "all-frozen"}, with="vegetation-red"} + }, + tile_replacements = { + ["tile-a"] = "tile-b", + }, + core_miners = array( + 1 = CoreMinerStruct{} + ), + glyph = glyph, + vault_pyramid = LuaEntity, + surface_index = nil or surface_index, + orbit = Zone:Orbit{ + type = "orbit", + name = "body_name" .. " Orbit", + controls = {control_name = {frequency, scale, richness}}, -- resource controls + parent = Planet, + surface_index = nil or surface_index, + }, + children = array { + 1 = Zone:Body:Moon{ + type = "moon", + name = "body_name", + index = zone_index, + radius_multiplier = 0.2 to 1, + radius = 5000 to 400, (can't be more than 50% of planet size) + star_gravity_well = float, -- how far in star gravity well + planet_gravity_well = float, -- how far in planet gravity well + star_gravity_well = float, -- how far in star gravity well + planet_gravity_well = float, -- how far in planet gravity well + controls = {control_name = {frequency, scale, richness}}, -- climate and resource controls + resources = {primary resource}, + fragment_name = "se-core-fragment-iron-ore", + tags = {"water_none"}, -- climate generation tags + biome_replacements = { + {replace={"all-dirt", "all-sand", "all-volcanic"}, with="sand-red"}, + {replace={"all-vegetation", "all-frozen"}, with="vegetation-red"} + }, + tile_replacements = { + ["tile-a"] = "tile-b", + }, + parent = Planet, + core_miners = array( + 1 = CoreMinerStruct{} + ), + surface_index = nil or surface_index, + orbit = Zone:Orbit{ + type = "orbit", + name = "body_name" .. " Orbit", + controls = {control_name = {frequency, scale, richness}}, -- resource controls + parent = Moon, + surface_index = nil or surface_index, + }, + } + } + } + }, + }, + }, + black_hole = Zone:BlackHole{ -- only 1 of these, not in the 2d layer, equal disance in 3rd layer + type = "anomaly", + index = zone_index, -- 3 + name = "Foenestra" -- window, loophole, Hole, breach, opening + surface_index = nil or surface_index, + }, + space_zones = array{ + 1 = Zone:AsteroidField{ + type = "asteroid-field", + name = "zone-name", + index = zone_index, + controls = {control_name = {frequency, scale, richness}}, -- resource controls + stellar_position = {x = x, y = y}, + surface_index = nil or surface_index, + } + }, + zones_by_name -- this gets moved out of stellar cluster after formation + }, -- end stellar cluster + zone_index = array{ + 1 = Zone{ ... allzones by their zone_index = zone.index } + }, + zones_by_name = array{ + name = Zone { Zone(deep space), Star, Planet, or Moon, Orbit } + }, + zones_by_surface = array{ -- links a surface index to a zone + surface_index = Zone { Zone(deep space), Star, Planet, or Moon, Orbit } + }, + zones_alphabetised = array{ + + }, + zones_by_resource_options = array{ + homeworld = {}, + planet = {}, -- and moons, not homeworlds + anomaly = {}, + ["asteroid-belt"] = {}, + ["asteroid-field"] = {}, + orbit = {}, -- any orbit type or star + }, + spaceships = array{ + 1 = Spaceship{ + index = i, + name = "Unique Name", + force_name, + console = LuaEntity or nil, -- can only be nil if in own space + space_distortion = 0-1 + stellar_position = {x = x, y = y}, + star_gravity_well = float, + planet_gravity_well = float, + zone_index = -- landed zone, + near = {type = "zone" / "spaceship", index = int}, or nil. -- at location ready to land + destination = {type = "zone" / "spaceship", index = int}, or nil. + own_surface_index =, + known_tiles = {} + check_tiles, + pending_tiles, + is_landing + is_launching + is_stopped + console + + } + }, + glyph_vaults = array{ + 1 (glyph id) = vaults { + zone_id = { + glyph = int, + zone_index = int, + surface_index = int, -- only exists if surface is made. + } + } + }, + playerdata = array{ + player_index = PlayerData{ + zero_velocity = true, optional, used to zero velocity on the next tick (after teleportation) + velocity = {x = 0, y = 0}, + last_postition = {x = 0, y = 0}, -- position last tick + postition = {x = 0, y = 0}, -- current position + set_postition = {x = 0, y = 0}, -- the position as set by script, deviation from it means that the player caused movement, used for thrust in zero-G + opened = nil or Entity, + opened_gui_type = nil or GuiType(int), + remote_view_active = nil or true, + remote_view_zone_name = nil or Zone Name, + character = LuaEntity, -- store link while in remote view + saved_swaps = dictionary{ -- saved locations for quick swapping in remote view + saved_swap_id = { + signal = SignalID -- the icon + location_reference = Location -- the location that this swap is + } + id = int -- the next available unique index to assign to a newly created saved location + } + saved_hotkeys = dictionary{ -- what saved location each quick swap hotkey goes to + hotkey_dropdown_index -> saved_swap_id -- maps the index in the hotkey dropdown to the saved_swap_id it swaps to + } + quick_swap_opened_item_name -- what quick swap is being viewed in the editing modal + quick_swap_selected_hotkey -- what hotkey index is set in the editing modal dropdown + } + }, + chart_tag_buffer array{ -- array of chart_tag_definitions that add map markers when the area has been charted (marker fails if not charted) + chart_tag_next_id = chart_tag_definition { + surface_name (optional) + force_name + position + surface = LuaSurface + icon_type (item/virtual) + icon_name + text + chart_range (optional) + } + }, + chart_tag_next_id = int, + rocket_launch_pads = array{ + unit_number = RocketLaunchPad{} + }, + rocket_landing_pads = array{ + unit_number = RocketLandingPad{} + }, + forces = dictionary{ + force_name = { + force_name = string, + zones_discovered_count = 1, -- planets and moons discovered + zones_discovered = dictionary{ + zone_index = { + [455]={ -- Note: orbits are not discovered, the parent zone is. + discovered_at=16798383 + }, + [457]={ + discovered_at=16798383 + }, + } + }, + satellites_launched = count by silo mk1, + cargo_rockets_launched =- count of launches, + cargo_rockets_crashed = count of launches that crashed, + rocket_landing_pad_names = dictionary { + rocket_landing_pad_name = array{ + unit_number = RocketLandingPad{ + type = name_rocket_landing_pad + valid = true, + force_name -- string + unit_number -- uint + name -- string + container -- primary entity + inbound_rocket -- bool + zone = Zone{}, -- the zone occupied + } + } + } + zone_assets = dictionary{ + zone_index = dictionary{ + rocket_launch_pad_names = dictionary { -- is it really necessary to have these named? + rocket_launch_pad_name = array{ + unit_number = RocketLaunchPad { + type = name_rocket_launch_pad + valid = true, + force_name -- string + unit_number -- uint + name -- string + container -- container primary entity + section_input -- vehicle entity nullable + tank -- storage tank entity + silo -- rocket silo entity + combinator -- combinator entity + seats[] -- entity + settings -- speaker + rocket_sections -- unit + crew_capsules -- unit + lua_fuel -- float - additional fuel otherwise fuel tank would need to be huge. + required_fuel -- cached for ui + total_fuel -- cached for ui, lua_fuel + tank fuel + launch_status -- int: -1 when not ready, ticks up while launching so things can be timed + zone = Zone{}, -- the zone occupied + destination = nil or Destination{ -- make deepcopy safe + type = "zone" or "landing-pad", + zone = Zone, + landing_pad_name = "Pad Name" -- "landing-pad" type only + } -- as above + launching_to_destination = nil + or LockedDestination{ + type = "zone" or "landing-pad", + zone = Zone, + position = {x=x,y=y} -- set once launch is locked and there is no landing pad + landing_pad_name = "Landing Pad Name", -- optional, sets attempt to land at a landing pad with this name in the target zone + landing_pad = LandingPad{}, -- set once launch is locked to a landing pad + } + launch_trigger -- string: none / fuel_full / cargo_full / signal + } + } + }, + rocket_landing_pad_names = dictionary { + rocket_landing_pad_name = array{ + unit_number = RocketLandingPad{ + type = name_rocket_landing_pad + valid = true, + force_name -- string + unit_number -- uint + name -- string + container -- primary entity + inbound_rocket -- bool + zone = Zone{}, -- the zone occupied + } + } + } + } + } + nauvis_satellite = Position, + zone_priorities = { + zone_index = priority(int) + }, + first_entered_vault = Zone, + homeworld_index = zone_index, + + } + }, + space_capsule_launches = array { + vehicle.unit_number = { + force_name = vehicle.force.name, + unit_number = vehicle.unit_number, + vehicle = vehicle, + shadow = shadow, + light = light, + start_position = vehicle.position, + launch_progress = 1, + destination_zone = target_zone, + destination_position = find_zone_landing_position(target_zone), + passengers = passenger_indexes, + } + }, + resources_and_controls = { + -- saves settings related to surface and resource generation. + -- If settings change between save/load then parts of + + } +} diff --git a/space-exploration_0.5.80/space-exploration/.documentation/tiles.txt b/space-exploration_0.5.80/space-exploration/.documentation/tiles.txt new file mode 100644 index 0000000..fa2a5a0 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/.documentation/tiles.txt @@ -0,0 +1,44 @@ +Converting from map_gen_setting:planet_size:frequency to planet radius: +planet_size ranges from 17% min, 100% default, 600% max (0.17, 1, 6) +percent_of_max = (6 + log(percent_of_max/6, 2)) / 6 +percent_of_max converts: +17% -> 14% +100% -> 50% +600% -> 100% + +planet_radius = percent_of_max * max_planet_size +max_planet_size is 10000 +17% -> 1431 +100% -> 5000 +600% -> 10000 + +final formulas for scale: +planet_radius = 10000 / 6 * (6 + log(planet_size/6, 2)) + +planet_size = 6 * 2 ^ (planet_radius / 10000 * 6 - 6) + +actual impementations use frequency: +planet_radius = 10000 / 6 * (6 + log(1/planet_frequency/6, 2)) + +planet_frequency = 1 / 6 / 2 ^ (planet_radius * 6 / 10000 - 6) + + +Planets: + Plant tile generation follows rules set by other mods + At a certain radius the planet-size setting kicks in and tiles spawn as out-of-map + This makes circular planets. + Planets have altered map-gen settings for climate: temperature, moisture, aux + +Space: + The planet-size setting should be set to something extremely large so out-of-tile are unlikely to be reached + Space tiles spawn with extreme influence were planet-size is set to a normally unreachable setting (100) + All non-space tiles must have an upper limit on their influence less than space tiles. + + Natural space tiles are: + Space + Asteroid + + Artificial space tiles are: + Space Platform Scaffold + Space Platform Plating + Spaceship floor (has own layer) diff --git a/space-exploration_0.5.80/space-exploration/README.md b/space-exploration_0.5.80/space-exploration/README.md new file mode 100644 index 0000000..9bea461 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/README.md @@ -0,0 +1,6 @@ +# space-exploration +Factorio Space Exploration + +This is **NOT** an open source project, please check the licence file. + +If you would like to contribute please contact Earendel on Discord first: https://discord.gg/ymjUVMv diff --git a/space-exploration_0.5.80/space-exploration/changelog.txt b/space-exploration_0.5.80/space-exploration/changelog.txt new file mode 100644 index 0000000..d5b3fec --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/changelog.txt @@ -0,0 +1,4010 @@ +--------------------------------------------------------------------------------------------------- +Version: 0.5.80 +Date: 13. 09. 2021 + Bugfixes: + - Fixed crash if a ruin failed to spawn certain entities. + - Allow the use of productivity modules for cryonite slush. + - Fix rocket reusability research returning more cargo rocket sections than it should have between levels 3–19. + - Fixed a crash if a pin had and invalid signal. + - Fixed neural gel pipe-flow colours. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.79 +Date: 30. 08. 2021 + Changes: + - Added new planet or moons: Coniferous & Lendiana. + + Bugfixes: + - Fixed crash if a ruin failed to spawn certain entities. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.78 +Date: 28. 08. 2021 + Changes: + - Lowered requester chest paste multiplier for structures built in a space manufactory. + + Bugfixes: + - Fixed crash when a spaceship launched or landed with a vehicle that contained multiple players. + - Fixed spaceships with multiple booster tanks consuming less energy to launch than indicated in the UI. To compensate for this fix, spaceship launch costs have been reduced by 10% overall. + + Locale: + - Localized zone types. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.77 +Date: 21. 07. 2021 + Changes: + - Energy beam weapon is slightly faster at low energies and slower at high energies. + - The plague now works differently. Biters will now send attack waves while the plague slowly kills them. + - Plague max runtime setting: minimum increased to 5 minutes, and default increased to 30 minutes (enough time for a few revenge waves). + - Plague now destroys Vitamelange. + - Meteors that land on Vitamelange worlds can contain organic material. + - Beacon overload now has a custom alert. + + Bugfixes: + - Fixed rocket silo not requiring big electric motors. + + Optimizations: + - Energy beam weapon damage is 10x more UPS efficient at high powers. + - The plague now works in a scripted way instead of a cascading particle system in the engine. The max UPS usage is greatly reduced. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.76 +Date: 18. 07. 2021 + Bugfixes: + - Fixed some vitamelange planets resetting to 0 threat when their surface was created. + + Locale: + - Updated Russian translation thanks to Shadow_Man. + - Updated Japansese translation thanks to kylon1207. + - Updated Turkish translation thanks to superbnoobster. + - Updated Chinese translation thanks to Ph.X. + - Updated Spanish translation thanks to SpiderLove. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.75 +Date: 18. 07. 2021 + Changes: + - Increased ion booster tank launch efficiency. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.74 +Date: 17. 07. 2021 + Bugfixes: + - Fixed wrong file path for ion booster tank shadow in low-res graphics mode. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.73 +Date: 17. 07. 2021 + Changes: + - Iridite and Naquitie are now considered "hard" resources and require a larger drill (area mining drill). + - Vitamelange planets now have a minimum threat level (they always ahve a few biters). Already generated surfaces are not affected but you can choose to fix this by running the command: /c remote.call("space-exploration", "update_zones_minimum_threat", { update_existing_surfaces = true}) + - The launch cost to launch a spaceship from a space zone has returned. + - Added an ion booster tank that can be used to launch from space only. + + Bugfixes: + - Fixed a crash if the tesla gun hit something that was not an entity_with_health type. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.72 +Date: 11. 07. 2021 + Bugfixes: + - Cryonite slush does not appear as a gas in fluid tanks. + - Fixed shield projector not appearing in a ruin. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.71 +Date: 04. 07. 2021 + Bugfixes: + - Fixed certain entities (such as cliffs, rocket silo rockets, and ghost tiles) being moved by spaceships. + + Locale: + - Changed most of the remaining text to use the localisation system so it can be translated. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.70 +Date: 01. 07. 2021 + Bugfixes: + - Fixed problem loading with the previous ruin change. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.69 +Date: 01. 07. 2021 + Bugfixes: + - Fixed a problem that let you upgrade walls to ruined versions. + + Locale: + - Added Brazilian Portuguese translation thanks to vagner1000. + - Added partial Turkish translation thanks to superbnoobster. + - Updated Russian translation thanks to Shadow_Man. + - Updated Chinese translation thanks to Mumu. + - Updated French translation thanks to bev. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.68 +Date: 01. 07. 2021 + Changes: + - Improved the delivery cannon and energy beam guis. + - Meteor point defence and delivery cannons can now be placed on spaceships. + + Bugfixes: + - Fixed a problem with inserters and pumps being disabled if a spaceship changed surfaces twice in 2 ticks. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.67 +Date: 19. 06. 2021 + Bugfixes: + - Fixed a new spaceship bug caused by over-optimisation. + + Locale: + - German translation update thanks to King Jo. + - Russian translation update thanks to Shadow_Man. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.66 +Date: 19. 06. 2021 + Changes: + - Added more spaceship gui tooltips. + - More GUIs can be closed by pressing E or esc. + - Visual cleanup in tech tree (does not affect gameplay). + - Gravimetrics facility moved to after astro 1 instead of before astro 1 (it was not being used in astro 1 anyway). + - Slight recipe change to Gravimetrics facility in response to different tech tree position (now requires aeroframe poles). + - Added missing technology descriptions. + - Updated heavy assembly recipe and added as an ingredient to high temperature turbines, antimatter engines, and the nexus. + + Bugfixes: + - Fixed situation where player could disconnect the spaceship clamp internal pole from the wire conneciton point. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.65 +Date: 15. 06. 2021 + Changes: + - Reduced supercomputer graphic size to not obscure the tiles above as much. + + Bugfixes: + - Fixed spaceship clamps connecting to unwanted power poles after changing surfaces. + - Fixed problem with v0.5.60 migration if a spaceship clamp had no saved signal. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.64 +Date: 15. 06. 2021 + Changes: + - Most interstellar map buttons are now context-based starmap buttons, taking you to the local star system map first if applicable, then the interstellar map if clicked again. + + Bugfixes: + - Fixed target speed reduction to speed not applying propelry at low speeds. + - Fixed CMEs landing at the wrong time of day, will not apply to CMEs that already have timers. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.63 +Date: 14. 06. 2021 + Changes: + - Updated some code so a spaceship can better understand where it is if its surface is created before launching as part of a delayed (automated) launch. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.62 +Date: 14. 06. 2021 + Bugfixes: + - Fixed problem with landing spaceships to clamps automatiaclly. + - Fixed problem with launching spaaceships automatically (during the delay). + +--------------------------------------------------------------------------------------------------- +Version: 0.5.61 +Date: 14. 06. 2021 + Bugfixes: + - Fixed that you could not connect wires the the spaceship clamp base. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.60 +Date: 13. 06. 2021 + Changes: + - Added spaceship ion engines. + - Removed launch cost for launching a spaceship from a space zone. + - Spaceship travel asteroids don't always move directly south, deviation increased from 0% to 3%. + - Spaceships moving near asteroid belts and asteroid fields now have more asteroids, asteroid count reduced elsewhere. + - Spaceship target speed can now be set directly from the GUI. Different target speeds for normal travel vs travel in asteroid belts and asteroid fields can be set in the GUI. + - There is now a danger zones toggle in the interstellar map that shows the area in which spaceships encounter more asteroids. + - Asteroid belt and field graphics have been updated. + - Spaceship GUI now has collapsible panels. + - Cargo rockets heading to asteroid belts and asteroid fields have more difficulty delivering their cargo safely. + - Spaceship clamps now pass through power and circuit signals when anchored (thanks Atraxi). + - Laser turrets (mostly) no longer attack asteroids that won't hit the spaceship. + - The Nexus now applies 2000 container integrity stress. + - Condenser turbine and big turbine internal tanks don't contribute to container stress. + - Booster tanks have a 75% stress discount, storage tanks have a 50% discount unless they contain steam, other fluid storage has no discount. + - Cargo wagon and locomotive trunks now count to container stress, but at a 90% discount. + - Deployed vehicle equipment grids now contribute to integrity and container stress. + - Walls reduces structural stress by 0.75 (base). + - Very long thin ships are less sturdy. + - Ships with spindly middle sections are less sturdy. + - Nexus dimension drive power required reduced from 8GW to 6GW. + - Spaceship victory required duration increased from 60s to 600s. + - Spaceship blocked vs not-blocked engine thrust now scales based on the number of empty tiles behind the engine and displays efficiency % text. + - Asteroids have different sizes on the minimap based on their size. + - Automated integrity checks have slightly reduced performance-cost (thanks walter). + - Open in Informatron buttons added to most Space Exploration GUIs. These buttons directly open relevant informatron pages. + - Spaceship engines now have a smoke effect. + - Automated spaceship launches are no longer immediate. There is now a short (no more than 10 second) launching period (helps with performance). + - Spaceship will try to dock to an empty clamp if there are multiple clamps with the same ID at the destination. + - Spaceships won't try to dock to an anchor clamp that has a red signal linked to its base. + + Bugfixes: + - Fixed an issue where players in fluid wagons would be left behind when a spaceship launched. + - Fixed an issue where players that were passengers of a spidertron would be left behind when a spaceship launched. + - Spaceships no longer ignore player requests to stop when they are being passed a speed signal. + - Fixed an issue where a spaceship could not be boarded from another spaceship if they were on their way too or from a special zone. + - Fixed long pipes contributing to spaceship container stress. + - Various missing tooltips have been added. + + Optimizations: + - Spaceships performance-cost while in transit reduced. + - Automated spaceships performance-cost while in transit further reduced. + - Spaceship launch/land hangs less. + - UPS improvements for spaceship anchor scouting. + - Integrity check performance in-general improved. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.59 +Date: 11. 06. 2021 + Compatibility: + - Marked Clockwork as incompatible as it breaks surface day/night and solar settings. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.58 +Date: 07. 06. 2021 + Changes: + - Update for graphics mod being split into multiple parts. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.57 +Date: 06. 06. 2021 + Bugfixes: + - Fix crash when placing a delivery cannon. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.56 +Date: 06. 06. 2021 + Changes: + - Copy/pasting settings on an Energy Transmitter now copies the destination and mode. + - Energy Transmitters retain destination and mode when blueprinted. + - Energy Transmitter GUI moved from the left of the screen to the entity window in the screen center. + - Energy Transmitter GUI now shows a preview of the destination (disabled with the same setting as other previews) + - Map view for stars and interstellar space has a background now. + + Bugfixes: + - Fixed dramatic UPS slowdown if energy beamer set to auto-glaive could not find a structure to target. + - High Temperature Turbine fan now spins while operating. + - Entity previews will not cut off parts of SE buildings for (almost) all buildings. + - Fixed a problem with arcopshere returns. + - Fixed a crash if an arcopshere processing machine had all recipes removed. + + Locale: + - Capitalization is now consistent with vanilla factorio for english locale (thanks Flood). + + Compatibility: + - Remote view now allows all types of spidertron remotes to be made for free. + - Compatibility with Space Factorissimo. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.55 +Date: 21. 05. 2021 + Bugfixes: + - Fixed crash if copy-pasting cannon settings from a cannon that had no coordinate set. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.54 +Date: 21. 05. 2021 + Bugfixes: + - Fixed crash if delivery cannon entity was destroyed while the gui was open. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.53 +Date: 21. 05. 2021 + Changes: + - Improved clarity in spaceship informatron page for automated usage. + - Copy/pasting settings on a Delivery Cannon now copies the destination in addition to recipe. + - Delivery Cannons retain destinations when blueprinted. + - Delivery Cannon GUI moved from the left of the screen to the entity window in the screen center. + - Delivery Cannon GUI now shows a preview of the destination (disabled with the same setting as other previews) + - Copy/pasting settings on a Rocket Landing Pad now copies the name. + - Rocket Landing Pads retain names when blueprinted. + - Rocket Landing Pad GUI moved from the left of the screen to the entity window in the screen center. + - Rocket Landing Pad GUI now has a dropdown for names. + - Migrated an older approach to settings copy/paste. This will cause your game to display that `se-...-settings` entities were removed. This is expected behavior. + + Bugfixes: + - Fixed an issue where a certain endgame chest could be placed on spaceships that were in-transit. + - Fixed an issue where delivery cannon capsule creation was being counted as resource consumption in production stats. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.52 +Date: 10. 05. 2021 + Bugfixes: + - Fixed an issue where the Universe Explorer GUI wasn't closeable + + Changes: + - UPS improvement when scouting for a spaceship anchor spot. + + Locale: + - Fixed various typos. + - Updated Chinese translation thanks to Ph.X. + - Updated Russian translation thanks to Shadow_Man. + - Updated French translation thanks to Heinarc and Bev. + - Updated Korean translation thanks to PolarZero. + + Scripting: + - Remote interface for navigation satellite functions (start, stop, is_active, is_unlocked). + +--------------------------------------------------------------------------------------------------- +Version: 0.5.51 +Date: 08. 05. 2021 + Changes: + - Medpacks can now heal friends (Requires Space Exploration Postprocess 0.5.13+). + + Bugfixes: + - Fixed that shield projector walls wouldn't block units or characters. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.50 +Date: 07. 05. 2021 + Bugfixes: + - Fixed error in satellite view location history when a spaceship was destroyed. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.49 +Date: 05. 05. 2021 + Changes: + - Moved spaceship pins to a special row for all spaceships. + - Rocket debris now does meteor damage instead of explosion damage. + - Cargo pods are now immune to meteor damage. + + Bugfixes: + - Fixed error is using the pins hotkey when no pins are set. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.48 +Date: 04. 05. 2021 + Bugfixes: + - GUI elements relying on gui.screen will no longer be cleared when the Universe Explorer is opened. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.47 +Date: 04. 05. 2021 + Changes: + - Added Previous and Next buttons for navigating history of satellite view locations. Also added keyboard shortcuts. + - "Currently viewing" zone path icons are now clickable. + - "Currently viewing" zone path now always includes orbit but highlights the planet if the planet is being viewed. + - Added Navigation satellite 'pinned' locations that you can jump to with keyboard shortcuts. + - You now start the game with a biter capsule, so you have a friend to help defend you at the start of the game. + + Bugfixes: + - Fixed zone discovery UI buttons changing size after click. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.46 +Date: 01. 05. 2021 + Bugfixes: + - Fixed zone discovery UI error from missing style. + - Fixed zone discovery UI buttons changing size after click. + + Compatibility: + - Fix for deadlock's burner lamp. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.45 +Date: 30. 04. 2021 + Changes: + - You can no longer enter satellite mode while in editor mode (because you die). + - Reduced ingot to plate crafting time from 15s to 8s. + - Removed material science as a requirement of Spaceships, updated recipes to match. + - Spaceship floor now requires heat shielding instead of space platform plating. + - Added iridium delivery cannon capsule. + + Bugfixes: + - Fixed problem loading if default map gen was removed. + - Fixed some composite icon sizes in map view. + - Fixed CME text wrapping. + - Fixed a problem with tile placement if the tile placement kills you. + - Many recipes are now excluded from recipe "total raw" calculations. + + Compatibility: + - Marked "UnlimitedProductivity" as incompatible because it won't work with Space Exploration's modules and zone-based productivity system. You can remove the "UnlimitedProductivity" line from info.json if you don't care about that but don't report any bugs that result. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.44 +Date: 16. 04. 2021 + Bugfixes: + - Fixed problem with automated enemy target selection. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.43 +Date: 12. 04. 2021 + Bugfixes: + - Mining productivity levels 11 onward now correctly use Biological Science Pack 4 instead of Biological Science Pack 1. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.42 +Date: 07. 04. 2021 + Compatibility: + - Stopped PickerDollied from breaking some entities. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.41 +Date: 05. 04. 2021 + Bugfixes: + - Fixed a secret thing wouldn't power up properly after energy input limit was reduced. + + Compatibility: + - Landfill won't collide with resources is water also doesn't (for mods with water resources). + + Locale: + - Updated Russian translation thanks to Shadow_Man. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.40 +Date: 01. 04. 2021 + Changes: + - Added new planet or moon: Mirage. + - Added resource icons to new game autoplace control names. + - Reduced energy usage of a secret thing. + + Bugfixes: + - Fixed spawner description. + - Fixed exploit with boarding spaceships. + + Locale: + - Updated Russian translation thanks to Shadow_Man. + - Updated French translation thanks to Heinarc. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.39 +Date: 14. 03. 2021 + Changes: + - Data card formatting 1 now uses cool thermofluid instead of cold. This means that it can be used as soon as the recipe is researched (cold thermofluid was still locked). + - Data card formatting 2 now uses cold thermofluid instead of supercooled. + - CMEs now target the end of the sunrise phase of the day of the surface they target, snapped to the next minute. Existing timers are not affected. + + Bugfixes: + - Fixed a problem with the remote interface for get_player_character. + - Fixed CMEs could target surfaces they shouldn't. + - Fixed wong spaceship status message, could claim to be exiting a star gravity well when it was entering it. + - Fixed that spaceships would completely ignore container stress for their mass estimate. It was supposed to be whichever stress value was higher. It is now 75% the original intended value, and 25% the old value (so compact container ships still have some advantage). + + Locale: + - Updated Russian translation thanks to Shadow_Man. + - Updated Korean translation thanks to PolarZero. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.38 +Date: 12. 03. 2021 + Changes: + - Postprocess is now added as a dependency with no forced load order (thanks to base game update). + +--------------------------------------------------------------------------------------------------- +Version: 0.5.37 +Date: 18. 02. 2021 + Bugfixes: + - Fixed equipment background color. + - Fixed rename landing pad button tooltip. + - Fixed non-character players being left in spaceship surfaces during deletion and ending up back on Nauvis. + - Updated tech util code for expanded technology specification format. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.36 +Date: 12. 02. 2021 + Compatibility: + - Krastorio 2: Updates for changes in K2 icon sizes. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.35 +Date: 10. 02. 2021 + Changes: + - Added new planet or moon: Katalos. + - Reduce uranium from generic core fragment by 50%. + + Bugfixes: + - Fixed some hidden techs were not hidden. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.34 +Date: 05. 02. 2021 + Changes: + - Cargo rocket landing pads now have an additional 10 inventory slots to prevent rocket parts deleting cargo if the landing pad fills up completely. + + Compatibility: + - Updated minimum version requirements for mod dependencies. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.33 +Date: 27. 01. 2021 + Changes: + - Spaceship: Negative speed signal now means stop. + - Updated cargo rocket silo specification for new graphic. + + Bugfixes: + - Fixed related underground belt for space belts. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.32 +Date: 21. 01. 2021 + Bugfixes: + - Fixed version number comparison was using string comparison instead of number comparison. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.31 +Date: 21. 01. 2021 + Changes: + - Condenser turbine and high temperature turbine both have inputs filtered to steam only. + - Default plague timeout is now 5 minutes. + + Bugfixes: + - Fixed multiplayer setup script not respecting seed matching setting. + - Fixed issue with spidertron leg function interfering with other mods. + - Fixed crash is a surface is deleted while special weapon scripts are running on the surface. + - Fixed a prolem with spaceship travel time estimation. + - Detatched characters should now keep their player color (multiplayer non-player 1). + + Compatibility: + - Spider leg fix for Klonan. + + Locale: + - Updated fr & zh-CH translations. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.30 +Date: 30. 12. 2020 + Changes: + - Spaceship landing is not blocked by "deconstructible-tile-proxy" entities. + + Bugfixes: + - Fixed spaceship error from previous version. + - Fixed initial reported CME power being incorrect. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.29 +Date: 28. 12. 2020 + Changes: + - Rockets landing at landing pads don't output 0-10 cargo pods anymore (you still get 20+ cargo rocket sections). + + Bugfixes: + - Fixed NAN exception related to 0 spaceship speed in some situations. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.28 +Date: 24. 12. 2020 + Changes: + - Mod option to enable/disable pylon chargin points is now set to disabled by default. + + Compatibility: + - Industrial Revolution 2 is marked as incompatible. Reason: Fails to load with both mods installed. Proper mod compatibility is planned for later. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.27 +Date: 23. 12. 2020 + Changes: + - Material fabricator has built-in modules. It is 10 times faster but uses more energy. Tech and recipe have changed. + - Added glow effects for supercomputer 4 and some science pack icons. + + Bugfixes: + - Fixed High temperature turbine being less efficienct than stated. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.26 +Date: 17. 12. 2020 + Bugfixes: + - Fixed that some surface trim safety measures were not working. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.25 +Date: 17. 12. 2020 + Bugfixes: + - Fixed debug code left in printing "revived" whenever a pylon sub-entity was restored from a ghost. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.24 +Date: 16. 12. 2020 + Changes: + - Auto glaive will switch off if all enemies are removed and give an alert with the emitter location. + - Reduced spaceship floor walking speed. (Less likely to phase through walls with exoskeletons.) + - Tweaked solar forumula to reduce interstellar light. + - A secret thing now has an alternate graphics version. + - Added a few fast belts to early game space platform. + - Moved some material fabricator recipes to other machines. + - Removed normal pipe from space structure recipes. + - Removed assembling machine 2 from space assembling machine recipe. + + Compatibility: + - Structures that are actually cars are not blocked from space if their "effectivity" is 0. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.23 +Date: 13. 12. 2020 + Bugfixes: + - Fixed construction pylons couldn't be deconstructed by hand. + - Fixed addon pylon had outdate collision mask setting. + + Compatibility: + - Vulcanite smelting icons for other mod resources. + + Scripting: + - Added remote interface get_surface_type. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.22 +Date: 11. 12. 2020 + Changes: + - Construction pylons can now have blueprinted wire connections. + - Radar construction pylons now have a 4x4 logistic area, mainly for storage or buffer chests. + + Bugfixes: + - Moved material fabrication back in the tech tree to where you can actually use the recipes. + - Fixed error when trying to enter spoiler. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.21 +Date: 10. 12. 2020 + Changes: + - Spaceship console now outputs the A signal when anchored. The number is the zone id. + - Added beacons InformaTron page. + - Reduced or removed water loops in certain resource processing recipes. + + Bugfixes: + - Fixed changelog parse error. + - Fixed player falling out of capsule during rocket landing. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.20 +Date: 08. 12. 2020 + Changes: + - Updated Vulcanite map colour based on recent hue shift in the graphics mod. + - Added symbol to arcosphere icons. + - Added mini vulcanite icon to smelting-with-vulcanite recipes. + - Respawning now preserves inventory filters for character main, ammo, and weapon inventories. + + Bugfixes: + - Fixed that zone search was not working for delivery cannon UI. + - Fixed crash in spaceship launch code if an entity bacome invalid during the loop processing (spider leg). + +--------------------------------------------------------------------------------------------------- +Version: 0.5.19 +Date: 08. 12. 2020 + Changes: + - Added a spaceship filter to Universe explorer. + + Bugfixes: + - Fixed shpaceships not being assigned priority updates if the value was typed in. + - Fixed crash when launching a spaceship capsule due to the factorio rocket sound being shorter and the sound entity becoming invalid before the launch sequence ends. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.18 +Date: 07. 12. 2020 + Compatibility: + - Fixed spaceship asteroid spawning with Combat Mechanics Overhaul. + - Added remote interfaces for zone_get_surface and zone_get_make_surface. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.17 +Date: 06. 12. 2020 + Changes: + - You can now blueprint spaceship console output connections. + + Bugfixes: + - Fixed spaceship swapped structure fluid connections (grounded/spaced versions). + + Locale: + - Updated french translation thanks to Heinarc. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.16 +Date: 04. 12. 2020 + Bugfixes: + - Fixed error in Informatron display for CME warning peak power. + + Compatibility: + - Updated vehicle collision mask changes. It should be better for flying vehicles. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.15 +Date: 04. 12. 2020 + Changes: + - Collision util update: Added a new named collision mask for car-type vehicles and shuffled more collision mask layers around. This hopefully avoids some oversized train wagon issues. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.14 +Date: 03. 12. 2020 + Bugfixes: + - Fixed typo in Arcolink storage code causing crash on load. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.13 +Date: 03. 12. 2020 + Bugfixes: + - Fixed problem with Arcolink storage code handling events with invalid entities. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.12 +Date: 03. 12. 2020 + Changes: + - Changed to an extended collision mask util system that allows additional named layers and pass-through to the control phase. + - Increased tree collision boxes but the player won't collide with them. + + Bugfixes: + - Fixed problem with Arcolink storage displayed ID after movement. + - Fixed the you couldn't walk over pipes anymore. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.11 +Date: 02. 12. 2020 + Bugfixes: + - Fixed some problems with ruin generation in relation to how tiles are now stored in blueprints. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.10 +Date: 01. 12. 2020 + Changes: + - Experimental feature: Added Arcolink storage. Containers that are linked across space. + - Barrel to steel recycling cannot be done by hand anymore. + - Medpack moved from capsule "subgroup" to "tool". + - Trim surface now tells you the number of chunks removed. + - Added per-player option to disable the "Satellite discovered nothing message." + - Rocket science now needs a "satellite telemetry" from launching a satellite instead of consuming space platform. + - Updated Satellites informatron page. + - CME warning now show expected preak power. + - Made asteroid tile map color darker contrast more with space rails. + + Bugfixes: + - Fixed another "render_layer" requires string issue. + - Fixed scaling issue with core fragment icons. + + Compatibility: + - Marked "SpaceMod" as incompatible to avoid confusion. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.9 +Date: 30. 11. 2020 + Bugfixes: + - Fixed error in new scrapping recipe name and tech assignment. + - Fixed error with a certain space ruin spawning correctly. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.8 +Date: 29. 11. 2020 + Changes: + - Added surface scan update alerts so you don't accidently leave scans running.. + - Added some generic recycling recipes for items the become obsolete (substations, etc). + - Added new landfill recipes. + + Bugfixes: + - Fixed that a NPC would repeatedly say that "freeplay" mode had been unlocked when it already was. + - Fixed a 'ruin' running out of power. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.7 +Date: 29. 11. 2020 + Bugfixes: + - Fixed collision layer mismatch on control phase. + - Fixed losing first logistic slot setting on death. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.6 +Date: 28. 11. 2020 + Changes: + - Updated some collision layer logic. + - You can now drop items on to space transport belt. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.5 +Date: 26. 11. 2020 + Bugfixes: + - Fixed crash on zone priority change (another number in textfield issue). + +--------------------------------------------------------------------------------------------------- +Version: 0.5.4 +Date: 25. 11. 2020 + Bugfixes: + - Forced all (found) instances of all numbers assigned to textfields to strigns first to avoid new Factorio 1.1 error. + - Fixed issues with spaceship console display. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.3 +Date: 25. 11. 2020 + Bugfixes: + - Fixed overhead buttons having broken styling by the Factorio 1.1 update. + - Fixed error on death. + - Fixed error when trying to anchor (you may need top close and open the console to click the button). + - Fixed rocket fuel from water tech icon scaling. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.2 +Date: 25. 11. 2020 + Bugfixes: + - Fixed crash on starmaps and universe explorer due to API changes. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.1 +Date: 24. 11. 2020 + Info: + - Updated for Factorio 1.1. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.51 +Date: 22. 11. 2020 + Bugfixes: + - Fixed deep space transport belt recipe returning 0 belts. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.50 +Date: 22. 11. 2020 + Changes: + - Added Delivery Cannon button to show the structure. + + Bugfixes: + - Fixed issues with placing delivery cannons in moon orbit and certain other locations. + - Fixed issue trimming surface with secret structures. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.49 +Date: 20. 11. 2020 + Changes: + - Added Delivery Cannons Informatron page. + - Added Arcospheres Informatron page. + + Compatibility: + - AbandonedRuins: Fixed issue with previous update. + - Incompatible with Factorio Extended & Factorio Extended. Reason: Community suggestion (balance and different game direction). Can be bypassed by removing "! FactorioExtended-Core" and "! FactorioExtended-Plus-Core" from info.json (not recommended, you won't get any support for issues). + +--------------------------------------------------------------------------------------------------- +Version: 0.4.48 +Date: 19. 11. 2020 + Changes: + - Important: Changed universe resource alloation to ignore resource-locked worlds from the distribution quotas. On existing games it may cause roughly 1% of planets or moons to change their primary resource but the changes won't take effect unless something else changes reosurces in the future and triggers the resource distribution code. You can use the following command to force the changes now, this is advisable if you have not settled many worlds. + - /c remote.call("space-exploration", "rebuild_universe_resource_assignments", {}) + - Logging out of multiplayer now exits satellite mode and puts you back in your character. + - Ghost entities no longer prevent surface deletion. + - Reduced wood growth returned water to 125 from 250. + + Bugfixes: + - Fixed issue with star and asteroid belt distribution code moving the whole universe down by about 200 interstellar units. + - Fixed that after the ruins update multiplayer new planet starts could overlap ruins. + - Fixed that particle collider and material fabricator had wrong glow colours. + + Compatibility: + - AbandonedRuins: Excluded more surfaces by name. + + Locale: + - Updated zh-Cn translation. + - Updated pl translation. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.47 +Date: 10. 11. 2020 + Bugfixes: + - Fixed that spaceship speed control from signals stopped working. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.46 +Date: 10. 11. 2020 + Bugfixes: + - Fixed issue with previous update, spaceships losing track of engines. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.45 +Date: 09. 11. 2020 + Bugfixes: + - Fixed issue if spaceship engine is removed/invalid while flying. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.44 +Date: 07. 11. 2020 + Changes: + - Spaceship engines now get a thrust boost if they have empty space behind them. + + Compatibility: + - Krastorio 2: Singularity reactor now applies structural stress to spaceships. + + Locale: + - Fixed some typos. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.43 +Date: 04. 11. 2020 + Changes: + - Changed some code related to teleporting a character not attached to a player to a different surface. + - Added exploration journal entries for players that have met the victory conditions (requires completion after this update). + - Recycling scrap is faster. + + Bugfixes: + - Fixed crash in WDC auto-bombardment code. + - Fixed other zones inheriting Nauvis width/height (fix will not affect already generated surfaces). + +--------------------------------------------------------------------------------------------------- +Version: 0.4.42 +Date: 03. 11. 2020 + Changes: + - Added Trim Surface button (use with caution). + + Bugfixes: + - Fixed crash if satellite-mode inventory was changed while a non-entity inventory was opened. + - Fixed issue if tiles became invalid during spaceship integrity check. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.41 +Date: 31. 10. 2020 + Changes: + - Moved steam to water recipe to electric boiler tech (pre-rocket science). + - Moved water ice to water to cryonite processing tech (pre-rocket science). + + Bugfixes: + - Fixed issue opening secret console. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.40 +Date: 27. 10. 2020 + Changes: + - Added automaic Weapons Delivery Cannon retargeting option. + + Bugfixes: + - Fixed duplicate tile refund issue. + - Fixed a performance issue with the final catch-all step of glaive target finding on large fully-explored planets (20000ms down to 200ms in tests). + +--------------------------------------------------------------------------------------------------- +Version: 0.4.39 +Date: 27. 10. 2020 + Bugfixes: + - Hotfix for interior tiles spawning on planet surfaces. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.38 +Date: 26. 10. 2020 + Bugfixes: + - Hotfix for satellite mode issue. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.37 +Date: 26. 10. 2020 + Changes: + - Flying bots won't stop spaceship landings. + + Bugfixes: + - Fixed crash when winning a minigame but inventory was full. + + Compatibility: + - Support for "spidertron-remote-waypoint" and "spidertron-remote-patrol" in satellite mode. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.36 +Date: 24. 10. 2020 + Info: + - Ruins update + + Changes: + - A new system for ruins and other sites found on planets surfaces. The new system can support non-blueprintable items, terrain modification, scripted updates, new exploration mechanics, and new capture mechanics. + - 3 ruins have been added in this update. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.35 +Date: 23. 10. 2020 + Changes: + - Most specialist science pack recipe yields have been increased, but they now require some of the associated resource manufactured items. + + Bugfixes: + - Fixed crash with scripts setting tiles. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.34 +Date: 23. 10. 2020 + Changes: + - Updated Informatron page for cargo rockets. + - Increased significant data from simulation. + - Added 7-length long junction pipe. + - Added 15-length long straight pipe. + - Reduced long pipe craft time. + - Moved Naquium heat pipe to naquium processing temporarily. + - Added polished data substrate via chemical gel recipe. + - Delivery cannons now lose their target coordinates when you change the target zone. This means that when you start to choose a target you default to the last-viewed location for the new surface instead of a coordinate relative to the previous surface. + - Fixed neural supercomputers not upgrading to the higher tier using the upgrade planner. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.33 +Date: 19. 10. 2020 + Changes: + - Increased core miner resistances (vs meteors in particular). + - Decreased delivery cannon chest explosion resistance from 99% to 75%. + + Bugfixes: + - Fixed crash if energy beam switches surfaces while active and in auto mode. + - Fixed spaceships dropping of the solar system map if their destination is another spaceship. + + Compatibility: + - Fixed ruins from the AbandonedRuins appearing is certain zones. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.32 +Date: 17. 10. 2020 + Changes: + - Increased insight returned from higher tier recipes. + - Reduce naquium cost of cubes. + - Reduce vitalic acid cost of naquim plate. + + Bugfixes: + - Fixed crash if cargo pod become invalid during landing/disassembly sequence. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.31 +Date: 15. 10. 2020 + Bugfixes: + - Fixed problem with arcosphere collection record assignment. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.30 +Date: 14. 10. 2020 + Changes: + - Superchargers now have a setting for individual charging port rates, defaulting to 90 MW per port (charges a vanilla robot to full in one tick). + + Bugfixes: + - Fixed crash if someone had a specific permission group, they entered sat-nav mode, their previous permission group was deleted, then they exited sat-nav mode. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.29 +Date: 09. 10. 2020 + Bugfixes: + - Fixed crash if opening the universe explorer after a detatched character became invalid. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.28 +Date: 09. 10. 2020 + Changes: + - Added weapons delivery cannon Plague rocket recipe. + - Simplified weapons delivery cannon Atomic bomb recipe. + + Bugfixes: + - Fixed issue with meteor timers. + - Fixed issue where the technology screen could be forced over the spaceship anchor mode and trap you in the technology screen. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.27 +Date: 08. 10. 2020 + Bugfixes: + - Fix occasional crash when spaceship takes off/lands while a shield projector barrier was invalid. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.26 +Date: 07. 10. 2020 + Changes: + - Improved spaceships and shield projectors UPS performance + - Spaceships can't land on non-neutral entities. + - Condenser turbines can now accept multiple temperatures. + - Meteors have zone-specific timers instead of a universal timer. + + Bugfixes: + - Fix for arcopshere polarisation. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.25 +Date: 04. 10. 2020 + Locale: + - Fixed Earnded -> Earned + + Changes: + - Updated recommended mod list in Informatron to match the wiki. + - Added section about experimental status to Informatron. + + Compatibility: + - Removed the incompatibility flag for fluid-memory-storage and deep-storage-unit (previous issue should be resolved by an upcoming change in those mods, memory element should also appear later in the tech tree). + +--------------------------------------------------------------------------------------------------- +Version: 0.4.24 +Date: 04. 10. 2020 + Changes: + - Renamed laboratories to facilities (except the space lab). + - Added a new climate tag for universe generation. + - Added planet Vorlon for new universes. + + Bugfixes: + - Added a secondary failsafe to some secret code. + + Compatibility: + - Marked fluid-memory-storage and deep-storage-unit as incompatible due to cloning bug and other spaceship issues. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.23 +Date: 02. 10. 2020 + Bugfixes: + - Fixed crash from delivery cannon being built by bots. + - Fixed missing locale for mode toggle change. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.22 +Date: 02. 10. 2020 + Changes: + - Scanning via satellite now works differently. It doesn't request a large area and let the factorio internal buffer work through it anymore. Instead it uses an scripted search cursor and custom search patern with mod options to control scan speed. The search buffer lets it skip through already scanned tiles. The chart buffer lets it scan more chunks in parallel. + + Bugfixes: + - Fixed issue if rocket launched with modded items and the mod was removed before landing. + - Fixed advanced neural gel recipe returning an extra card. + - Fixed typo, orgianic is not a word. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.21 +Date: 01. 10. 2020 + Changes: + - Nexus now ramps up to the final power level as speed increases. + + Bugfixes: + - Fixes nexus phantom power draw after landing the spaceship (part of the composite entity was left behind). + - Fixed issue with condenser turbine and big turbine internal storage tanks (part of the composite entity). + +--------------------------------------------------------------------------------------------------- +Version: 0.4.20 +Date: 30. 09. 2020 + Changes: + - When a spaceship launches/lands all inserters and pump are paused for 1 tick. This avoids Factorio's issue with cloned circuit networks not having signals for 1 tick. (The same fix can't be used for transport belts without some weird hacks.) + + Bugfixes: + - Fixed that homeworlds overwriting waterless planets still had waterless planet restrictions. + - Fixed error on CME if there was a deleted force in the game. + - Shield projector shields triggered damaged entity alerts. + - Fixed Nexus Dimension Drive recipe was not displaying the recipe name properly. + + Compatibility: + - Miniloaders: Added a fix for miniloaders after area cloning command (spaceship surface change). + +--------------------------------------------------------------------------------------------------- +Version: 0.4.19 +Date: 29. 09. 2020 + Changes: + - Buffed accumulators. + - Reduced Nexus critical speed back to 250 and Distortion Drive power draw to 8GW. + - Reduced Factory Spaceship tech cost. + - Glacier ammo on moving spaceship now slides backwards. + - Glacier ammo does not use the generic slowdown sticker anymore (uses an invisible version instead). + - Increased default meteor max interval to 30 minutes. + - Added some naquium processors to a secret thing. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.18 +Date: 28. 09. 2020 + Changes: + - Added Universe Explorer text explaining resource estimates and tile requirements. + + Bugfixes: + - Fixed crash if someone died with an inventory filter, logged out of multiplayer, the mod that created the item for the filtered slot was removed, then the player logged back in and respawned. + - Fixed issue with multiplayer multi-planet start: starting mini-resource-patches were not spawning properly. + - Fixed crash from delivery cannon on secret surface. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.17 +Date: 27. 09. 2020 + Changes: + - Arcosphere collection now benefits from collection from different asteroid fields. + + Bugfixes: + - Fixed crash if space capsule shadow got unexpectedly deleted. + - Fixed issue with multiplayer multi-planet start system not overwriting the original planet's seed fully (so may have responded to changes in resource settings, or additional homeworlds being added, changing the resource distribution differently from nauvis). + +--------------------------------------------------------------------------------------------------- +Version: 0.4.16 +Date: 27. 09. 2020 + Bugfixes: + - Fixed problem with earlier migration code. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.15 +Date: 25. 09. 2020 + Bugfixes: + - Fixed some DSS science and catalogue crafting times. + - Fixed condenser turbine process icon size. + - Fixed issue with multiplayer multi-planet test code. + + Compatibility: + - Added match_nauvis_seed as a flag for the test multiplayer multi-planet code: /c remote.call("space-exploration", "setup_multiplayer_test", { force_name = "player-2", players = {game.player}, match_nauvis_seed = false}) + +--------------------------------------------------------------------------------------------------- +Version: 0.4.14 +Date: 25. 09. 2020 + Changes: + - Changed arcosphere polarisation to not give a random number of results. + + Bugfixes: + - Fixed issue with cargo rocket silo destination list. + - Fixed wrong prototype type check in delivery cannon code (only affected mod compatibility). + - Updated remaining icon changes to include the mipmaps specification. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.13 +Date: 25. 09. 2020 + Changes: + - Added 2 additional arcosphere recipes folding recipes. + + Bugfixes: + - Fixed issue with getting detination list for cargo rocket silo with no destination. + - Fixed some issues with merging forces. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.12 +Date: 24. 09. 2020 + Changes: + - AAI Signal Transmission is now required. This was requested a lot, if you don't want it just edit the info.json file. + - Moved fluid isothermic generator earlier in the tech tree. + - Spaceship streamlining is easier, especially for smaller ships. + + Bugfixes: + - Fixed typo in delivery cannon code (only affected mod compatibility). + +--------------------------------------------------------------------------------------------------- +Version: 0.4.11 +Date: 22. 09. 2020 + Changes: + - Increased output slots of space probe silo.. + - Items that stack to 1 are now perfectly safe in rockets. + + Bugfixes: + - Fixed problem with migration script from v0.3 to v0.4 relating to factory spaceship techs. + - Fixed the DSS1 returned neural gel and other packs did not require it at all. + - Fixed DSS catalogues required wrong temperature of thermofluid. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.10 +Date: 22. 09. 2020 + Changes: + - Added a warning if a space probe is launched from the wrong location. + + Bugfixes: + - Fixed that antimatter spaceship engine and booster still required naquium procesor. + + Locale: + - Removed duplicate key from Polish translation. + + Compatibility: + - Added remote interface for get_on_player_respawned_event. on_player_respawned returns the player index after the player has been given a fresh character on the proper surface. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.9 +Date: 21. 09. 2020 + Bugfixes: + - Fixed that you could enter interstellar map mode any time you did not have a character attached. + - Fixed some spaceship event were not triggering when placing entities. + - Fixed CMEs could target star surface directly (should only be solar orbit). + - Fixed overhead buttons would not appear immediately. + + Locale: + - Removed duplicate key from zh-CN translation. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.8 +Date: 20. 09. 2020 + Bugfixes: + - Fixes issue loading in low-resolution mode. + - Fixed issue with certain v3 techs being locked on transition to v4. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.7 +Date: 19. 09. 2020 + Changes: + - Added solar system map and updated interstellar map (thanks to contributions from wladekb). + - Deep space zones now have a minimum distance between them. + - Moons are now more evenly distributed in the planet gravity well. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.6 +Date: 17. 09. 2020 + Changes: + - Increased space probe rocket cost. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.5 +Date: 17. 09. 2020 + Changes: + - Added space probe rocket silo. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.4 +Date: 15. 09. 2020 + Bugfixes: + - Fixed some inconsistencies with the tech tree. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.3 +Date: 14. 09. 2020 + Bugfixes: + - Fixed some inconsistencies with the tech tree and recipes. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.2 +Date: 13. 09. 2020 + Changes: + - Decreased cost of nanomaterial (result count from 10 to 16). + - Decreased vitalic acid cost of naquium powder from 10 to 5. + - Added basic streamline description to spaceships Informatron page. + - Fixed some broken image links in Informatron. + - Added migration code to change Universal Catalogue to Deep Space Catalogue 1. + - Added added migration code to preserve factory spaceship levels up to level 4. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.1 +Date: 12. 09. 2020 + Info: + - The DSS Update (Deep Space Science overhaul) + + Changes: + - There is now a Spaceship Victory Condition. Build a high speed spaceship and power a special device to win the game. + - There are now 4 tiers of Deep space science. Most useful stuff is unlocked in tiers 1 and 2, but tier 4 is required for the spaceship victory. + - Added some new and unique ways to make data. + - The final tier of energy science requires sending probes into stars. + - The final tier of astronomic science requires sending probes around asteroid belts. + - Some data can only be generated on a moving spaceship. + - Arcospheres can be collected from the interstellar void with diminishing returns. They are never consumed and only act as catalysts, but are difficult to cycle. + - Many deep space science level recipes have been rebalanced. + - Spaceships now have a streamline mechanic (you may have noticed that this area of space has a lot of rocks), so cut those corners off your box ships for some extra speed. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.140 +Date: 20. 09. 2020 + Bugfixes: + - Fixes error if assigning a player to the neutral force. + + Compatibility: + - Fixed issue placing transport drones road on Nauvis. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.139 +Date: 19. 09. 2020 + Bugfixes: + - Fixes issue preventing space platform placement. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.138 +Date: 19. 09. 2020 + Bugfixes: + - Fixes that small starting resource patches could generate an error if trying to place an entity with a resource value above 0 but less than 1. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.137 +Date: 19. 09. 2020 + Bugfixes: + - Fixed issue where personal roboport active status would get reset by spaceship landing. + - Fixed electric boiler water pass-though. + + Compatibility: + - Fixed Transport Drones mod would let you place land in space. + - Fixed crash if a mod remove some of the starting resource eneities from the game. + + Locale: + - Fixed duplicate keys in Czech locale. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.136 +Date: 16. 09. 2020 + Bugfixes: + - Fixed K2 atmospheric condensers crashing on placement on zones that do not have zone tags (ex. Nauvis). + +--------------------------------------------------------------------------------------------------- +Version: 0.3.135 +Date: 16. 09. 2020 + Changes: + - Added electric boiler active heat / lighting effects. + - Internal force data now tracks whether or not a force has had players. This is used for CME events and prevents timers from being reset by players switching forces in single player. + + Compatibility: + - Prevents K2 atmospheric condensers on planets/moons with no water/atmosphere (I know you should need lifesupport on these planets but that is coming later). + +--------------------------------------------------------------------------------------------------- +Version: 0.3.134 +Date: 16. 09. 2020 + Bugfixes: + - Fixed that delivery cannons could not target moon orbits. + - Fixed electric boiler was restricted to land by type change. + - Reduced mixed core fragment (from Nauvis) vulcanite yeild in line with other resources. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.133 +Date: 15. 09. 2020 + Changes: + - Removed Beryllium from planet and moon orbits. This will trigger the "resources have changed" warning but don't worry about that. + - Added some small starting resource patches that have a guaranteed resource value and are close together. These patches are scripted so won't appear on the pre-game preview, and can be disabled with a mod setting. + - Changed core mining output to be proportional to planet size. For an average Nauvis this means roughly double the fragments. + - Mixed core fragment (from Nauvis) has reduced vaues for most resources (-50%). + - Removed setting for electric boiler. + - Electric boiler is now a crafting machine and you can choose the steam temperature (or evaporate away water). + - Added a logging system for some secret stuff. + + Bugfixes: + - Fixed issue with spaceship distance output stuck at -3. + - Fixed issue where spaceship with signals to land on a deleted surfaces would cause the deleted surfaces to respawn. + - Dying now plays the game lost sound from vanilla (was missing due to the respawn mechanic). + + Compatibility: + - se_allow_in_space now works for containers. + - Marked ModMash as incompatible due to crashes. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.132 +Date: 12. 09. 2020 + Bugfixes: + - Fixed a spacehip crash if an entity became invalid mid-script. + - Fixed a spacehip crash if the destination surface was deleted while checking for docking clamps. + + Locale: + - Czech translations thansk to xXmirechekXx. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.131 +Date: 07. 09. 2020 + Changes: + - Optimised some on_configuration_changed code it is around 428x faster now. + + Bugfixes: + - Reduced popping sound when looping secret structure's audio. + - Fixed that jetpack could get disabled after entering and exiting a rocket silo without launching. If you can't use jetpack it will fix itself after you ride a rocket, or use the command: /c remote.call("jetpack", "unblock_jetpack", {character=game.player.character}) + +--------------------------------------------------------------------------------------------------- +Version: 0.3.130 +Date: 06. 09. 2020 + Changes: + - Preliminary support for the merge_forces command. + + Bugfixes: + - Deleted leftover permission groups from previous versions. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.129 +Date: 06. 09. 2020 + Bugfixes: + - Fixed permission states of players that may be stuck with satellite permissions while not in satellite mode. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.128 +Date: 06. 09. 2020 + Bugfixes: + - Satellite mode no longer forgets prior permissions mistakenly. If you have used satellite view in 0.3.127, please check over permissions. If you're unsure, just run the command "/c game.player.permission_group = nil" when outside of nav view. -ACTingKris + +--------------------------------------------------------------------------------------------------- +Version: 0.3.127 +Date: 06. 09. 2020 + Changes: + - Satellite mode now inherits the player's existing permissions group, clones the settings, then applies additional restrictions. When the mode ends the player is set back to the previous permissions group. + + Bugfixes: + - Fixed that you couldn't stay in a cargo rocket silo during launch if the entrance was on empty space. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.126 +Date: 04. 09. 2020 + Changes: + - Updated Space Exploration map gen settings preset: Larger starting area, reduced evolution. + + Bugfixes: + - Fixed issue boarding one spaceship from another. + - Fixed Calidus (and other homeworld systems) skipping asteroid field 2 (this won't fix existing saves as changing the name can cause issues). + - Fixed issues with legacy tech trees after configuration changes (Note: It is not recommended to add SE to existing games). + - Fixed that Umbrellas on the same surface would not share the load. + + Locale: + - Several spelling and grammar fixes and improvements (by ACTingKris). + +--------------------------------------------------------------------------------------------------- +Version: 0.3.125 +Date: 31. 08. 2020 + Bugfixes: + - Fixed crash when checking for defence against delivery cannon projectiles but a defence was invalid. + - Fixed invalid gps tag surface name for rocket crash on Nauvis. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.124 +Date: 29. 08. 2020 + Changes: + - Forces added by other mods that don't have any players (e.g. K2 radiation force) won't have their own Coronal Mass Ejection timers. + - Corpses (includes scorch mark entities) do not block tile deconstruction orders. + - Random landing pad and random spaceship respawn options have been replaced with closest landing pad and closest spaceship respawn options (by ACTingKris). + +--------------------------------------------------------------------------------------------------- +Version: 0.3.123 +Date: 27. 08. 2020 + Changes: + - Reduced meteor defence power draw. + - Added Iridium Piledriver recipe to Weapons delivery cannon. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.122 +Date: 25. 08. 2020 + Bugfixes: + - Fixed missing passive draw from meteor defences. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.121 +Date: 25. 08. 2020 + Changes: + - Deconstruction of tiles is canceled if an entity over it would be destroyed. + + Bugfixes: + - Fixed incorrect Coronal mass ejection power requirement in space. + - If a surface is deleted then any player last-looked locations are cleared (in case the surface ID is used for something else). + - Fixed that meteor defences power supply area was reduced in the previous update. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.120 +Date: 25. 08. 2020 + Changes: + - Added overchage mode to point defence, 'rotate' them to enable a low idle power draw, high recharge mode. Warning - Causes base brownouts while recharging. Energy per shot unchanged. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.119 +Date: 23. 08. 2020 + Bugfixes: + - Fixed issuse with Coronal mass ejection zone selection code. + + Locale: + - Fixed some typos. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.118 +Date: 23. 08. 2020 + Bugfixes: + - Fixed issue with new CME formula not returning a value. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.117 +Date: 23. 08. 2020 + Changes: + - Coronal mass ejection cannot target deep space zones. + - Reduced Coronal mass ejection strength in space (does not get the 5x solar power boost so is similar to the strength on the planet below). + - Increased minimum Coronal mass ejection timer when updating existing games. + - Updated locale to state that only one umbrella is needed per surface vs Coronal mass ejections. + + Bugfixes: + - Fixed that Weapons delivery cannon could not be placed in space. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.116 +Date: 23. 08. 2020 + Bugfixes: + - Fixed that the live update of Coronal mass ejection warning would not be given an expected energy value and default to the locale substitution index (3). + +--------------------------------------------------------------------------------------------------- +Version: 0.3.115 +Date: 23. 08. 2020 + Bugfixes: + - Fixed crash on energy beaming informatron page. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.114 +Date: 23. 08. 2020 + Changes: + - Added Energy beaming, can be used as a weapon across surfaces, or to beam power. + - Added Coronal mass ejections a dangerous new threat that is rare and has early warnings. + - Added Umbrella: Energy beam defence, to defend against energy beam weapons and coronal mass ejections. + - Added Weapons delivery cannons, can fire nukes at surfaces. + - Delivery cannons now have an off switch. + - Meteor defences now shoot down enemy delivery capsules. + - Space accumulators can now used on the ground, renamed based on material. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.113 +Date: 21. 08. 2020 + Changes: + - Added alternate processing unit recipe using holmium cable (by ACTingKris). + +--------------------------------------------------------------------------------------------------- +Version: 0.3.112 +Date: 16. 08. 2020 + Bugfixes: + - Fixed issue with migration code where landed spaceships could cause areas of space to appear on land. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.111 +Date: 16. 08. 2020 + Changes: + - Players are now put back into vehicle they were in before a shaceship changed surfaces. + - Trains now remember automatic/manual state when changing surfaces via spaceship. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.110 +Date: 15. 08. 2020 + Changes: + - Moved processed fuels into the same area. + - Spidertron can now be deployed from cargo rockets. + + Bugfixes: + - Fixed crash when spaceship tries to update console signals but console was destroyed. + - Added cleanup code to fix broken tiles on surfaces. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.109 +Date: 15. 08. 2020 + Changes: + - Players are now ejected from vehicles if they are on a spaceship when it changes surfaces (prevents loss of character). + - Spaceship now takes fuel more evenly from booster tanks. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.108 +Date: 14. 08. 2020 + Changes: + - Allowed Spidetron remote from satellite view. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.107 +Date: 14. 08. 2020 + Changes: + - Allowed Spidertron in space. + - Increased turret damage vs spaceship obstacles, increase spaceship obstacle hp, decreased spaceship obstacle resistances. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.106 +Date: 14. 08. 2020 + Changes: + - Spidertron update. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.105 +Date: 10. 08. 2020 + Changes: + - Rocket crashes now provide a gps tag. + - Meteor alert gps tags now include the surface. + - Altered meteor random landing so that it has a chance to hit bases that are constructed a long way from the surface origin. + + Bugfixes: + - Fixed that mining naquium heat pipe retuned normal heat pipe. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.104 +Date: 09. 08. 2020 + Bugfixes: + - Hotfix for rocket crash code. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.103 +Date: 09. 08. 2020 + Changes: + - Spaceship floor ghost is now automatically placed if spaceship floor is removed by asteroid collisions. + + Bugfixes: + - Fixed most situations where composite entities (Condenser turbine) would get broken due to spaceship floor removal (asteroid damage). + +--------------------------------------------------------------------------------------------------- +Version: 0.3.102 +Date: 09. 08. 2020 + Locale: + - Added Polish translation. + + Bugfixes: + - Fixed that beacon overload caused a crash. + - Off-course rockets now track cargo pods as consumed. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.101 +Date: 06. 08. 2020 + Bugfixes: + - Fixed that if a beacon overloaded entity was enabled by another mod it could get a 2nd permanent overload icon. + - Fixed missing prerequisite on thruster suit 4: self seling gel. + + Compatibility: + - Orbital ion cannon remote can now be used from satellite mode. + - Fixed incompatibility with mods using different tech complexity format. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.100 +Date: 29. 07. 2020 + Bugfixes: + - Fixed issue with previosu migration code. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.99 +Date: 29. 07. 2020 + Bugfixes: + - Fixed remaining issues left in game saves resulting from a previous issue. Some saves may have secret content re-shuffled. This is not a problem unless you have additional notes outside the game, in which case they may not match you game save anymore. If a shuffle took place the text will be "Migrate.v0_3_99" in your log file. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.98 +Date: 28. 07. 2020 + Bugfixes: + - Fixed issue with mapping some secret things to some other secret things. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.97 +Date: 27. 07. 2020 + Changes: + - Decreased radar pylon update scan frequency (improves UPS). + - Added mod option to remove charging points from construction pylons. This helps control bot charging behaviour, but you may need to add other charging options along long distance routes. + + Bugfixes: + - Fixed that cargo rocket silos were not properly resetting the sections and capsules consumed. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.96 +Date: 26. 07. 2020 + Changes: + - Reduced the number of situations where beacon overload affects other modded entities (e.g. transport drone structures). + - Spaceship console output now updates immediatly after a manual destination change via the UI. + - Added next-upgade definitions for Space Solar Panels and Wide Area Beacons. (Thanks to Mylon) + - Improved Cargo rocket part tracking. (Thanks to Mylon) + + Locale: + - Changed all instances of Bio Sludge to Biosludge. + + Scripting: + - Added an interface call for on_entity_activated after beacon overload is stopped so other mods can disable the entity for other reasons. + + Bugfixes: + - Fixed spaceship clamps not being deconstructible. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.95 +Date: 20. 07. 2020 + Changes: + - Reduced width of Universe Explorer (zonelist). + - Beacons won't overload entities that can't benefit from beacons (e.g. steel furnace). + + Bugfixes: + - Fixed missing description on spaceship clamp item. + - Fixed pylon internal roboport connection distance (64 to 32 tiles). + +--------------------------------------------------------------------------------------------------- +Version: 0.3.94 +Date: 18. 07. 2020 + Changes: + - Changed auto-scanning routine for planets and moons (better fits the circle instead of scanning a square). + + Bugfixes: + - Fixed problem with discovering some moons which could cause no zones to be discovered by a satellite even when there were moons left to discover. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.93 +Date: 15. 07. 2020 + Changes: + - Conditionally changed the plague sticker graphic for furutre Factorio update (would otherwise break when the update hits). + + Bugfixes: + - Fixed GPS tag behaviour for when satellite is still locked. + - Removed hidden flags from railgun. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.92 +Date: 13. 07. 2020 + Changes: + - Lifesupport Informatron page. + - Naquim tessaract now requires nano material. + + Bugfixes: + - Fixed that some recipes required nano material but did not have the tech as a prerequisite. + - Fix for jetpack while flying around moving spaceship. + - Fixed some material fusion card return rates. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.91 +Date: 10. 07. 2020 + Changes: + - If satellite mode is unlocked, clicking a GPS tag activates nav-view at the specified location. (Cannot work for damage alerts due to engine limitation - no event is fired.) + - Added potential planet/moon Marquardt. + + Bugfixes: + - Fixed spaceship solar power transition to interstellar space. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.90 +Date: 09. 07. 2020 + Scripting: + - Added remote interfaces for: lock_player_respawn_location, unlock_player_respawn_location, get_known_zones. + + Bugfixes: + - Fixed Astrobionic Simulation took 90 seconds instead of 120 like the other tier 3 simulations. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.89 +Date: 07. 07. 2020 + Changes: + - Cargo rocket silos with variable destinations now display safety percentages as "Variable" instead of worst-case values. + + Bugfixes: + - Fixed issue with cargo rocket item loss. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.88 +Date: 07. 07. 2020 + Changes: + - The first meteor of the game had a timer reduction, this has been removed (was 7.5 minutes, now up to 15). + + Bugfixes: + - Removed debug code from Core miner (sorry about that). + +--------------------------------------------------------------------------------------------------- +Version: 0.3.87 +Date: 30. 06. 2020 + Changes: + - Particle stream recipe now requires 5 sand, yield increased from 100 to 200. + - Material fabrication loss of data card recuced from 5% to 1%. + - Changed addon power pole collision layer to layer-13 (same as walls block spitters) projectile collision. This means that they can be placed on more entities, but not directly on walls or certain tiles or entities modified by other mods. + + Compatibility: + - Ruin remnant entities now support modded entities with the .icons format. + - Krastorio 2: Removed Imersium and Mineral water from generic core fragment. + - Krastorio 2: Added ability to get matter from sand. + + Bugfixes: + - Fixed issue with core miners being revived by bots not mining (existing broken entities need to be replaced). + - Fixed error when trying to board another spaceship. + - Fix for low-solar surfaces having solar multiplier that was lower than intended. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.86 +Date: 29. 06. 2020 + Bugfixes: + - Fixed bug with low-solar space zones having 0 solar dut to incorrect time of day. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.85 +Date: 27. 06. 2020 + Changes: + - Planet size now has a slight negative impact on the solar value of a surface. + + Bugfixes: + - Fixed some inaccurate solar % display values. + - Fixed potential issue with respawn code and logistic slots. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.84 +Date: 22. 06. 2020 + Bugfixes: + - Fixed some iridium moons having an invalid climate tag (moisture_very_low should be moisture_low). Surfaces already settled won't be corrected, the effect on gameplay is not significant. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.83 +Date: 22. 06. 2020 + Changes: + - Added mod setting for deep space belt speed. + - Alternate medpack 1 recipe uses only resources that can be automated. + + Bugfixes: + - Fixed updaetd factorio beacon not displaying contained modules in alt mode. + - Fixed that starting satellite would always spawn in Nauvis orbit for multiplayer multi-planet setting. + - Fixed issue deleting a surface when a player was viewing the surface via satelliate: that player was sent back to Nauvis instead of their homeworld. + - Fixed error placing tiles in editor mode. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.82 +Date: 17. 06. 2020 + Changes: + - Placed tiles should (normally) not remove resources anymore. There will be the usual excpetions for water-based resources + landfill, etc. + + Bugfixes: + - Fixed some code where the Universe Explorer was able to find the default or previously selected zone for the sidepanel. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.81 +Date: 16. 06. 2020 + Bugfixes: + - Added missing locale for cryogun attack modifiers. + - Fixed issue with setting up multiplayer homeworld. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.80 +Date: 15. 06. 2020 + Changes: + - Railgun has incresed damage, decresed cooldown, and reduced movement penalty. + + Bugfixes: + - Fixed multiplayer homeworlds not inheriting the nauvis planet radius setting (map gen should have been correct though). + +--------------------------------------------------------------------------------------------------- +Version: 0.3.79 +Date: 12. 06. 2020 + Changes: + - Improved reliability of spaceship console returned signals. + - Spaceship console now returns distance of -1 if arrived but not anchored, -2 if anchored at the destination, or -3 if no destinationis set. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.78 +Date: 11. 06. 2020 + Bugfixes: + - Fixed issues with spaceship clamps checking the wrong tiles. + - Fixed universe explorer close button stipped working. + + Changes: + - Spaceship clamps now flash red the problem tiles if they cannot be placed. + - Spaceship asteroids are more resistant to personal laser defense. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.77 +Date: 10. 06. 2020 + Changes: + - Added filters to Universe Explorer (can exclude planet and moon orbits for example). + - Added a basic display for planet climate tags (WIP). + - Added alert icon to machines with beacon overload. + + Bugfixes: + - If doing multiplanet multiplayer, you now respawn on the correct planet. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.76 +Date: 09. 06. 2020 + Changes: + - Cargo rocket silo can now move items with data (blueprints, equipment, etc) without clearing internal data. + - Optimisation: Updated some code to use Factorio built-in events instead of virtual events for player opened and selected. (Built-in events were's available when oiginal code was written). + - Optimisation: Updated cargo rocket silo code to use some new inventory functions. + + Bugfixes: + - Fixed a crash on spaces/grounded entity swap. + - Fixed incorrect module tier 2 and 3 crafting times. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.75 +Date: 09. 06. 2020 + Bugfixes: + - Fixed invalid image link in Informatron. + + Changes: + - Decreased cost of naquium cube (1 catalogue per 16 cubes instead of per 4). + - Decreased cost of deep space science pack (produces 10 packs instead of 4). + +--------------------------------------------------------------------------------------------------- +Version: 0.3.74 +Date: 08. 06. 2020 + Bugfixes: + - Fixed a crash with lifesupport gui when on an unknown surface. + - Issue with Nauvis having climate tags on some saves that prevents waterfill. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.73 +Date: 04. 06. 2020 + Changes: + - Increased base density of uranium, copper, stone, and coal. + - Added more functions for multi-planet start multiplayer. There is an experimental test function in scripts/remote-interface.lua (setup_multiplayer_test). + - Added upgrade planner path from Thermal radiator 1 to 2. + + Compatibility: + - Added some more Krastorio2 compatibility features (delivery cannon recipes, recpe changes, resource settings, core fragment yeields). There is still a lot of work to do on the tech tree especially in regard to removing optimization science from certain techs to move them back up the tech tree. + - If a mod adds radiation damage then thruster suits now have some resistnace to it. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.72 +Date: 04. 06. 2020 + Bugfixes: + - Fixed that medpack still needed logistic science pack. + + Compatibility: + - Added code to log the mods list, if other mods have the same code the list will be logged only once. If other mods also elog the mods list it is encouraged to read and write the logged_mods_once flag so it won't get logged multiple times. Other mod makers can copy the collowing line: + - if not logged_mods_once then logged_mods_once = true log("Log mods once: "..serpent.block(mods)) end + +--------------------------------------------------------------------------------------------------- +Version: 0.3.71 +Date: 03. 06. 2020 + Changes: + - Moved space lab module icons down. + - Updated code to check if a tech has an ingredient (thanks to walter). + - Added some code to prevent infinite water sources on planets that are specifically waterless (e.g. volcano worlds) + + Compatibility: + - Altered some code so that if some important entities on planets are destroyed due to tile changes under them (waterfill) it won't crash or break saved data. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.70 +Date: 03. 06. 2020 + Changes: + - Changed the basic medpack recipes. + + Bugfixes: + - Fixed an ingredient in the expensive version of space pipe. + - Fixed a tech unlock problem. + + Compatibility: + - Made Krastorio2's Imersite a non-homeworld resource. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.69 +Date: 01. 06. 2020 + Bugfixes: + - Fixed problem with a game-breaking test item being left in a blueprint. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.68 +Date: 01. 06. 2020 + Bugfixes: + - Fixed problem with a game-breaking test item being left in a blueprint. + - Fixed error when mods add a multi-level tech without a number suffix. + - Fixed error on launching a rocket where the launch pad would be left with exactly 0 fuel. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.67 +Date: 31. 05. 2020 + Compatibility: + - Marked some bobs mods as compatible (testers reported they work without additional compatibility code needed). + + Locale: + - Added Chinese translation thanks to Frost. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.66 +Date: 29. 05. 2020 + Changes: + - Increased base density of stone (only affects new chunks). + - Added more Close [X] buttons to various GUIs. + - Renamed Space solar panel to Flat solar panel, can now be placed on planets. + - Added mod setting to disable the zone preview window. (Note: If you are having FPS issues when it is open they may be due to debug overlays displaying in the window.) + + Bugfixes: + - Material catalogue 4 requires electrical shielding instead of explosive shielding data. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.65 +Date: 27. 05. 2020 + Compatibility: + - Better compatibility with quality of life research mod. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.64 +Date: 26. 05. 2020 + Info: + - Updates for Factorio 0.18.27 + + Changes: + - Increased the cargo rocket silo fluid box (so fluid can be loaded faster). + - Delivery cannon deals double damage when "delivering" explosives. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.63 +Date: 23. 05. 2020 + Bugfixes: + - Fixed migration issue for new cliff settings. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.62 +Date: 23. 05. 2020 + Changes: + - Planets now have cliff settings. + - Non-homeworld planets now have a small starting area even if Nauvis had a large starting area. + - Space zones now have no starting area. + - Added a new default space science behaviour: Replace: replaces space science pack with rocket science pack. + + Bugfixes: + - Fixed an issue with small moon resource frequency compensation not being applied to resources if the resources were reset by the addition or removal of new resource types. + + Compatibility: + - Krastorio 2 now not marked as incompatible, there are still compatibility improvements to make but the main game-breaking issues have been resolved. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.61 +Date: 18. 05. 2020 + Changes: + - Buffed medpacks now that you can have enough health to make use of larger heals. + - Added chance of uranium ore to meteors. + - Bio upgrade strength 5 now gives an inventory bonus of 10. + - Cargo rocket silo was outputting a rocket item when completed, but that item was supposed to be a hidden internal one. That has been fixed, so the silo now outputs the signal from the virtual signals tab. If you used that items as a combinator condition you should update the combinators. + - Switched to the mine_entity function for the invalid entity build cancel script to preserve the entity's item data (vehicle grids). + + Bugfixes: + - Fixed stated number or module slots in beacon description. + - Fixed crash on placing a core miner of the core fragment type had not been initialised properly. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.60 +Date: 18. 05. 2020 + Bugfixes: + - Fixed space platform plating recipe. + - Fixed crashes related to being in editor mode and trying to use tesla gun, pheromone darts, or lifesupport. + - Fixed crash if the spaceship boarding UI is open and the target spaceship becomes invalid. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.59 +Date: 18. 05. 2020 + Changes: + - Added bio gun. + - Added bloatburst ammo. + - Added pheromone dart. + - Added Bio upgrade: Constitution. Increases character health. + - Added Bio upgrade: Strength. Increases inventory slots. + - Added Bio upgrade: Agility. Increases movement speed. + - Added Bio upgrade: Dexterity. Increases character crafting speed. + - Added Bio upgrade: Intelligence. Increases lab productivity. + - Changed the way that light is calculated for surfaces. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.58 +Date: 17. 05. 2020 + Bugfixes: + - Fixed no lab input for rocket science. + - Fixed crash on launch first satellite if space science was set to be removed. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.57 +Date: 16. 05. 2020 + Changes: + - Added collision to addon power poles so that can't stack on top of each other. They should still be able to attach to most buildings. + - Space science, if not altered by another mod, can either by removed completely or have a fallback recipe as a mod option. You should select the option you want before loading an existing game as removal will remove the existing packs. + - Added mod option to never show lifesupport GUI. + - Mylon's meteor changes: defences get credited kills, meteor defence ammo consumption statistics. + + Bugfixes: + - Fixed that rocket science was needed to unlock rocket science. + - Fixed supercharge collision to not be 2x2. + - Fixed spaceship console output entity not being removed. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.56 +Date: 15. 05. 2020 + Changes: + - Added productivity to some ground recipes that were lacking it. + - Added sulfuric acid to vitalic acid recipe. + - Added vulcanite brick recipe to the vulcanite processing tech. + - Added vulcanite glass recipe (and added to vulcanite processing tech). + - To avoid conflicts with other mods, the rocket science pack is now not based on the space science pack. The space science pack is now called optimisation science pack and is used for the same things as the vanilla space science pack, but other mods are free to use it for different things. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.55 +Date: 14. 05. 2020 + Changes: + - Changed Vulcanite iron/copper smelting recipes again (buff). + - Added vulcanite brick recipe. + - Reduced vulcanite from Nauvis core fragment. + - Moved power armor and early equipment closer to vanilla positions in tech tree. + - Added new planet/moon: Tarn. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.54 +Date: 14. 05. 2020 + Changes: + - Increased base uranium spots per km2 from 1.5 to 2 (only affects new chunks). + - Reduced Vulcanite from omni fragment. + - Increased Vulcanite requirement for Vulcanite smelting of iron and copper. + - Shield projectors are now 4x4 entities and have a greater range. + - Added spaceship clamps, required for spaceship automatic landing. + - Added spaceship automation, you control target speed, set destination, trigger launch, and trigger landing that matches 2 specific clamps (See Informatron). + - Spaceship console are now 4x4 entities. + - The changes to spaceships may cause existing spaceships to lose existing settings and wire connections. + + Bugfixes: + - Fixed wide area beacon 2 not being placeable in space. + - Fixed incorrect space manufactory research time. + - Fixed collision issue with gravimetric lab. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.53 +Date: 12. 05. 2020 + Changes: + - Removed naquim ore from resource discovery preferences. + - Added scrap and contaminated scrap to delivery cannon list. + - Added length indicator to long pipe icons. + - Added core fragments to delivery cannon list. + - Improved ordering of delivery cannon recipes. + - Added productivity to alternate low density structure and heat shield recipes (there may be others that still need to be updated). + - Changed multipliers on procedural tech changes so deep space science addition makes the tech cheaper (values subject to further changes). + + Bugfixes: + - Fixed typos in Informatron for spaceships and navigation satellite. + - Fixed that switching to flying mode would cause fast healing. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.52 +Date: 10. 05. 2020 + Changes: + - Fixed recycling recipe categories so that are available again. + - Fixed decompression resistance data recipe icon. + - Crushed cryonite and vulcanite are now more compressed (for transport). + + Bugfixes: + - Fixed low solar issue. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.51 +Date: 10. 05. 2020 + Changes: + - Removed always_show_made_in from more crafting recipes. + - Iridium heat shielding recipe is now better. + - Beryllium LDS recipe is now worse. + + Compatibility: + - Marked the main overhaul mods as incompatible in preparation for public testing. If you want to use those mods just edit info.json but I won't be dealing with any compatibility issues from them for at least a few weeks. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.50 +Date: 09. 05. 2020 + Changes: + - Made some compatibility code more robust. + - Removed always_show_made_in from standard crating recipes. + - Zone tooltip pre surface generation now factors in the body size frequency compensation. + - Reduced scrap from locomotive (to not be resource positive). + - Changed the basic biosludge loop so biomass is cheaper and the process is a bit more efficient. + - Tier 1 bio science recipes are cheaper (mostly due to returned by-products). + - Added alternate multispectral mirror recipe (should probably have its own tech). + +--------------------------------------------------------------------------------------------------- +Version: 0.3.49 +Date: 08. 05. 2020 + Changes: + - Added some angles & bobs compatability code. + + Bugfixes: + - Fixed beacons overload issue, may need to replace the affected machines 1 last time. + - Fixed wide are beacon 2 not being unlocked by the tech. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.48 +Date: 08. 05. 2020 + Changes: + - Increased modules slots in basic beacons. + - Decreased transmission efficiency of wide area beacons (back to 50%). + - Increased modules slots of wide area beacons. + - Krastorio is temporarily marked as incompatible but the intention is to fix the issues asap. You should not play on an earlier version of Space Exploration either because the problems permanently affect your progression. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.47 +Date: 08. 05. 2020 + Changes: + - Increased uranium frequency by 50%. + - Delivery cannon can fire plastic bar, sand, glass, low density structure, heat shielding, and explosives. + - Decreased delivery cannon damage (in the future it will be increased if sending explosives). + - Added flags info to Universe Explorer: Has visited in person, has landing pad, etc. + - Reduced Pulveriser crafting time. + - Increased delivery cannon chest size from 10 to 40. + - Resource patches are a bit more cohesive. + - Added unit capsules. + + Bugfixes: + - Fixed that you couldn't select no resource preference for zone discovery. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.46 +Date: 06. 05. 2020 + Changes: + - Exaggerated the differences between cooling recipes. + - Added wide area beacon 2, 75% transmission effect. + - Spaceship cannot land on certain special things. + - Satellite launch now gives you an astronomic science pack. + - Launching a satellite, or completing a discovery tech, should print a message if nothing is found. + + Bugfixes: + - Fixed inventory getting cleared when changing surface in satellite mode. + - Fixed some broken locales. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.45 +Date: 05. 05. 2020 + Changes: + - Added some missing locales. + - Changed alternate thermal radiating recipes, there is now a version faster then default, and one more efficient than default. + - Added new planet/moons: Horaerratum, Ketobar. + + Bugfixes: + - Fixed effectivity module 9 needing wrong catalogue type. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.44 +Date: 03. 05. 2020 + Changes: + - Made starting resource less clustered but a lot more reliable (less likely to overlap). + - Reduced the limitations on which surfaces can be deleted. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.43 +Date: 02. 05. 2020 + Changes: + - Changed supercooled temperature back to -273 (to workaround a suspected base game issue). + - Space solar panel 1 no longer requires energy science or holmium products. + - Core mining no longer requires laser tech. + - Updated the starting satellite. + - Added new planet/moons: Xiada, Drakkett. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.42 +Date: 02. 05. 2020 + Changes: + - Added new planet/moons: Trelos, Sparky. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.41 +Date: 02. 05. 2020 + Bugfixes: + - Fixed Delivery Cannon could not be placed in space. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.40 +Date: 01. 05. 2020 + Changes: + - Added Delivery Cannon. + + Bugfixes: + - Fixed problem recycling mod compatibility. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.39 +Date: 27. 04. 2020 + Changes: + - Adjusted mining and crafting times related to new resources. + - Added matter/resource settings for K2 compatibility. + - Updated Space Exploration map gen preset to excluded non-homeworld resources (thanks to Bilbo). + - Increased cost of biosludge from vitamelange. + - Change Universe generation so that there are some guaranteed planet and moon types in homeworld systems. These are also applied to existing systems. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.38 +Date: 27. 04. 2020 + Changes: + - Changes some of the messages relating to launching satellites. + - Updated some Informatron text relating to space sciences. + - Changed a most of the specialist science recipes so resource costs are more consistent, most of the changers are increasing or decreasing probabilities or return rates. + - Decreased cost of Advanced neural gel. + - Added a patreon support message (hopefully not intrusive). + - Spaced/Grounded versions of entities don't appear in crafting tooltips anymore. + + Bugfixes: + - Fixed missing locale for Thermal radiating. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.37 +Date: 25. 04. 2020 + Scripting: + - Moved resource settings into data.lua and made the settings available so that other mods can control their own resources and override others. + + Bugfixes: + - Fixed an issue loading the universe if a vanilla resource had been removed. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.36 +Date: 25. 04. 2020 + Changes: + - Fixed some specialist science recipes using the wrong resource. + - Increased material fabricator crafting speed by 4x. + + Scripting: + - Added a remote interface for other mods to read the zone index. (Needed for multiplayer PVP homeworld generation.) + +--------------------------------------------------------------------------------------------------- +Version: 0.3.35 +Date: 24. 04. 2020 + Changes: + - Matter fabricator can't benefit from effectivity. + - Reduced material cost of antimatter production by 50%. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.34 +Date: 23. 04. 2020 + Changes: + - Added recipe to make water ice with cryonite. + - Added recipe to make water from steam. + - Tweaked resource autoplace settings to make starting resources more reliable. + + Bugfixes: + - Fixed condenser turbine accepting low temperature steam. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.33 +Date: 22. 04. 2020 + Changes: + - Changed the procedural tech update system to use multiple tiers of specialist science. + - Added a system for other mods to add exclusion from the procedural tech system so they can be updated manually as part of mod compatibility code. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.32 +Date: 20. 04. 2020 + Changes: + - Added a system for other mods to specify crafting machines that are valid for space. + - Split crafting machines in the production tabs into rows by role (chemistry, assembling, telescopes, etc). + - Material fabricator is now the source of antimatter. It uses more energy as a result. + - Antimatter production is now 10x faster by using the material fabricator. + - Swapped particle collider and material fabricator graphics (as material fabricator is now the antimatter producer). + - Added some additional material fabrication recipes for other materials. They are not worthwhile unless you are stuck in space and have no other options. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.31 +Date: 20. 04. 2020 + Changes: + - Removed space tab. + - Added Science tab. + - Added Resources tab. + - Renamed Intermediate Products tab to Manufacturing. + - Renamed Combat tab to Equipment & Combat. + - Moved recipes to appropriate tabs. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.30 +Date: 18. 04. 2020 + Changes: + - Added Addon power poles, that don't collide with other entities. + - Reduced module costs. + - Distance now affects rocket survivability and cargo loss. Stats are show on the rocket silo side panel. + - Moved pure science recipes to their own tab. + - Tweaked high temperature heat exchanger/turbine/condenser turbine ratios. + - Implemented zone discovery research and resource preference UI. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.29 +Date: 16. 04. 2020 + Changes: + - Added a large high temperature heat exchanger. + - Added a large high temperature turbine generator. + - Changed long heat pipe and long space pipe lengths. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.28 +Date: 09. 04. 2020 + Changes: + - New icons for data cards. + - Catalogues now use an icon that indicated 4 grouped cards, and all are made of 4 data cards. Insight recipes adjected accordingly. + - Specialist space science packs now use the old catalogue canister-style graphics. + - Specialist space science packs are now tiered so there is more of a steady progression, you can't jump straight from T1 to T4. + - Early bio science is cheaper based on Prdfndr's suggestions. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.27 +Date: 05. 04. 2020 + Bugfixes: + - Fixed error caused when trying to fix an invalid resource generation control. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.26 +Date: 05. 04. 2020 + Bugfixes: + - Fixed error loading deep space belt graphics in low resolution. + - Fixed deep space belts mining into normal space belts. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.25 +Date: 05. 04. 2020 + Changes: + - Huge changes to resource distribution. The new system essentially ignores the game's current state and generates a procedural distribution. There will be a big changes in resources shifting to this system, but things will be less affected by resource changes in the future, especially if mods that change resources are added and/or removed multiple types. + - Cryonite hypercooling 2x faster. + - Tweaked shield generator mechanics for smoother power curves. + + Bugfixes: + - Fixed that rotatable long heat pipes blocked player. + - Fixed condenser turbines sub-entities getting reversed. + - Fixed bots would try to repair shields. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.24 +Date: 04. 04. 2020 + Changes: + - Gave long space pipe extra connection points. + - Long naquium heat pipe is now one rotatable entity. + + Bugfixes: + - Fixed locale issue. + - Fixed deep space belts not placeable in space. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.23 +Date: 03. 04. 2020 + Changes: + - Increased average resource values for non-homeworlds. + - Reduced shield projector passive draw to 2MW. + - Fixed shields on spaceships. + - Added deep space transport belts. + - Reverted thermofluid kelvin changes. + - Minor balance changes to bio and material tier 2 recipes. + - Added Cryonite slush recipe for hypercooling. + - Added radiator 2. + - Added a WIP interface to help with finding zones with the resources you want. + - Can now place pylons in empty space. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.22 +Date: 02. 04. 2020 + Changes: + - Changed basic beacon module slots to 4. + - Added Shield Projector. + - Added Naquium heat pipe which is a huge improvement over normal heat pipes, plus additional extended horizontal and vertical versions that are even better for longer heat transfers. + - Update to ruins code thanks to LEitK. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.21 +Date: 28. 03. 2020 + Changes: + - Changed space science recipe to require vulcanite blocks. + - Increased vulcanite in core fragments + - Reduce number of core fragments required per pulverising cycle from 20 to 16. + - Increased vulcanite blocks for rocket fuel to 8 + - Reduced vulcanite smelting bonus to +50% + - Reduced number of satellite rocket parts to 50. + - Decreased satellite cost. + - Removed experimental material prototype and recipes that used it. + - Moved nanomaterial to just before deep space science and now requires the 4 specialist sciences + - Material science recipes adjusted to use iridium products (still need balancing). + - Gravimetrics lab is not required for Astro science until T2, recipes are otherwise the same. + - Changed timespace anomaly experiment to not require energy science cards. + - Moved the conductivity and superconductivity data to energy science. + - Superconductive cable no longer requires material science, just needs energy science, holmium and cryonite. + - Reduced iridium stack sizes, it is very dense. + - Increases beryllium stack sizes, it is very light. + - Renamed orbital data to machine learning data. + - Machine learning data is now used for T4 modules. + - Electromagnetic field data is not pert of T1 energy science. + + Bugfixes: + - Fixed space science needing 36 data cards. + - Fixed crash when launching to first discovered space platform. + - Fixed crash related to jetpack character interaction. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.20 +Date: 26. 03. 2020 + Bugfixes: + - Fixed spaceships wouldn't provide lifesupport on plague planets. + - Fixed a rounding error. + - Changed the way some of the tech triggers work. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.19 +Date: 24. 03. 2020 + Changes: + - Updated the space science recipe again. Now requires a small amount of vulcanite, supercomputing and simple thermofluid infrastructure. + - Reorganised the tech tree so a few techs are now before space science (radiator, supercomputer, manufactory). + - Increased beryllium processing speed in chemical labs. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.18 +Date: 22. 03. 2020 + Changes: + - One moon of Nauvis is guaranteed to be biter-free (only affects new games). + - Changed the fragile bio items stack sizes from 1 to 5. + - Changed Naquium end-products stack size to 1. + - Changed thermofluid names/description to use Kelvin (based on suggestions), not sure if it is easier or harder to understand. + - Increased energy shield equipment power efficiency. + - Updated energy shield recipes with new items. + - Landfill and space platform now collide with resources. If resources are regenerated they won't spawn on these areas. + - Entities that can't be placed on spaceships are now blocked based on "layer-15" instead of "resource-layer". This solves some issue but may cause new mod incompatibilities. + + Bugfixes: + - Fixed a crash related to surface transition and jetpack. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.17 +Date: 17. 03. 2020 + Changes: + - Changes for Factorio 0.18.13 + - 4x more beryllium hydroxide from beryllium sulfate + - Reduced beryllium plates required for observation frames. + - Changed all canister stack sizes from 20 to 50 + - Increased antimatter per antimatter canister by 2x. + - Plagued planets/moons now require lifesupport. + - Added Pylon, Pylon Substation, Construction Pylon, and Radar Construction Pylon. + - Added Supercharger. + + Modding: + - Other mods can now change core fragment resource values and fragment type generation. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.15 +Date: 12. 03. 2020 + Changes: + - Updated some specialist science data recipes to use associated resource products. + - Increased speed of genetics and growth facility. + - Added space accumulators tier 2. + + Bugfixes: + - Fixed anchoring spaceship while jetpacking. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.14 +Date: 11. 03. 2020 + Bugfixes: + - Fixed cryogun error. + - Added cryogun locale. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.13 +Date: 11. 03. 2020 + Changes: + - Added cryogun. + - Added a 3rd tier of space solar panels. + - Changed most space science research unit times to 60s. + - Spaceships now output their speed as an S signal, or -1 if stopped. + - Changed spaceship flight dynamics to have slower acceleration / deceleration (easier to control speed). + + Bugfixes: + - Fixed that space assembling machine could be placed on planets. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.12 +Date: 10. 03. 2020 + Changes: + - Restricted secondary resource to not be allowed higher than 90% of the primary resource. + - If as part of universe generation a resource with climate restrictions is assigned to an unsuitable climate then the planet is altered to fit the climate requirements. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.11 +Date: 09. 03. 2020 + Bugfixes: + - Fixed issue where updating from an old game save, some old zones had assigned surface control settings that were different from the zone climate tags and ended up with incorrect resource assignments. The fix forces climate tags to override existing settings but may cause any regenerated surfaces to have different climates than before. + - Fixed glyph order issue. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.10 +Date: 07. 03. 2020 + Changes: + - Thruster suit movement code moved into a new mod: Jetpack (required). + - Fixed thruster suit 1 recipe. + - Reduced energy shield power requirements. + + Bugfixes: + - Fixed lifesupport error when making a blueprint. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.9 +Date: 05. 03. 2020 + Changes: + - Changed the way that the lifesupport UI appears, and added a close button. + - Corrected some lifesupport tooltips. + - Increased deep space solar panel efficiency. + - Removed lifesupport canisters from all thruster suit tiers. + - Washing vulcanite yields steam. + - Changed max zone priority to 999. + - Naquium ingot requires Naquium powder. + + Bugfixes: + - Fixed a couple of lifesupport issues relating to remote view and spaceship landing. + - Fixed crash if loading the game without the hr graphics mod. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.8 +Date: 04. 03. 2020 + Changes: + - Added lifesupport equipment. + - Lifesupport canisters are now consumed while in space. The UI still needs to be improved. In the future some planets will also need lifesupport. + - Changed part of a secret process (also needs some further UI improvements). + +--------------------------------------------------------------------------------------------------- +Version: 0.3.7 +Date: 03. 03. 2020 + Changes: + - Beacons no longer require utility, space, and energy science packs to research, but can't stack modifiers. + - A new wide area beacon has been added with a 32x32 tile area, 10 module slots. It can be used in space or on the ground but requires energy science to research. + + Bugfixes: + - Fixed that zone surface index was not being cleared when zone surfaces were deleted. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.6 +Date: 02. 03. 2020 + Changes: + - Updated Holmium, Iridium, & Naquium processing. + - Changed Railgun and Tesla gun recipes and tech tree position. + - Added more detail to Universe Explorer resource bars. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.5 +Date: 01. 03. 2020 + Changes: + - Fixed an issue with a secret thing's power draw. + - Fixed a crash if you go into space without a space suit. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.4 +Date: 29. 02. 2020 + Changes: + - Changed beryllium processing. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.3 +Date: 29. 02. 2020 + Changes: + - Fixed some errors relating to secret content, including one that accidently traps you. + - Added the ability to automatically scan a surface, and stop active scans. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.2 +Date: 28. 02. 2020 + Changes: + - Fixed secret things spawning. + - Fixed planet/moon climate tags not being added. + - Added temporary debug text to see climate tags below delete surface button. + - Fixed climate-based resources not attaching to some zone properly. + - Fixed issues related to surface fixing in the migration script (needs to load from a pre 3.x version to work). + - Fixed some missing locales and typos. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.1 +Date: 26. 02. 2020 + Info: + - Major update focussed on new resources, tech tree changes, and some end-game exploration puzzle solving. + + Changes: + - Informatron is now required. + - AAI Industry is required (again). + - Removed nauvis resource slider limitations. + - New resources: Beryllium, Holmium, Iridium, Naquium, Vitamelange, Cryonite, and Vulcanite. + - Resource distribution change: universe resource balance rules and new surface resource noise expressions. Many surface resources will be regenerated as a result. + - Some recipes changed to use the new resources. + - Core fragment processor change to Pulveriser. + - Space science pack recipe changed, now made in space. + - Added Informatron pages (Press I). + - Reduced base healing rate. + - Characters spawn with a medpack. + - Navigation satellite view has a more minimalistic window. + - Added a new Universe Explorer UI, that lets you view lots of zone more easily, and see resource balance before generating the surface. + - Added some other secret stuff for exploration. + +--------------------------------------------------------------------------------------------------- +Version: 0.2.14 +Date: 05. 04. 2020 + Bugfixes: + - Fixed issue with meteor defence structures not being destroyed properly. + +--------------------------------------------------------------------------------------------------- +Version: 0.2.13 +Date: 04. 04. 2020 + Bugfixes: + - Fixed crash with launching rocket with player to random empty space with no floor. + +--------------------------------------------------------------------------------------------------- +Version: 0.2.12 +Date: 28. 03. 2020 + Bugfixes: + - Fixed exploit allowing teleportation via spaceships. + +--------------------------------------------------------------------------------------------------- +Version: 0.2.11 +Date: 25. 03. 2020 + Bugfixes: + - Fixed issue with angels bio processing icon. + +--------------------------------------------------------------------------------------------------- +Version: 0.2.10 +Date: 07. 03. 2020 + Info: + - Changes for Factorio 0.18.13 + + Bugfixes: + - Fixed an issue with space capsule and jetpack interaction. + +--------------------------------------------------------------------------------------------------- +Version: 0.2.9 +Date: 07. 03. 2020 + Bugfixes: + - Fixed a crash relating to space capsule sounds being unexpectedly destroyed, thanks to Telkine2018. + +--------------------------------------------------------------------------------------------------- +Version: 0.2.8 +Date: 06. 03. 2020 + Changes: + - Update for jetpack mod. + +--------------------------------------------------------------------------------------------------- +Version: 0.2.7 +Date: 02. 03. 2020 + Changes: + - Core miner has better orientation preservation in blueprints and can be pipetted. + +--------------------------------------------------------------------------------------------------- +Version: 0.2.6 +Date: 20. 02. 2020 + Info: + - Updated for Factorio 0.18.8. + +--------------------------------------------------------------------------------------------------- +Version: 0.2.5 +Date: 28. 01. 2020 + Info: + - Updated for Factorio 0.18.4. + +--------------------------------------------------------------------------------------------------- +Version: 0.2.4 +Date: 31. 01. 2020 + Bugfixes: + - Fixed multilayered icons that combined 32px and 64px icons. + +--------------------------------------------------------------------------------------------------- +Version: 0.2.3 +Date: 31. 01. 2020 + Bugfixes: + - Spaceship hotfix. + +--------------------------------------------------------------------------------------------------- +Version: 0.2.2 +Date: 28. 01. 2020 + Bugfixes: + - 0.18 bug, when landing a spaceship, players on the spaceship lose their body. + + Scripting: + - Added remote interface (by request) for "cancel_entity_creation". Can remove an entity, put the item back in the player or drop to ground, and display flying text. + +--------------------------------------------------------------------------------------------------- +Version: 0.2.1 +Date: 28. 01. 2020 + Info: + - Updated for Factorio 0.18. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.149 +Date: 24. 11. 2019 + Changes: + - Added a collision layer to all rails to add support for cargo ships and similar mods (requires postprocess mod to be updated too). + - Added some development tools for contributors. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.148 +Date: 20. 11. 2019 + Bugfixes: + - Put space rails into their own fast replace group so they don't conflict with other mods that add rails. + + Locale: + - Added translation for Japanese by iicyan. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.147 +Date: 27. 10. 2019 + Changes: + - Reduced nutrient vat recipe from 10s to 5s. + + Locale: + - Updated translation for Russian by EternalDragon. + - Added translation for Italian by Firestorm. + + Bugfixes: + - Fixed wrong icon for part of the condenser turbine entities. + - Fix for rare case where some tiles around launched spaceships are 'out-of-map' tiles and can't be built on or flown over. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.146 +Date: 22. 10. 2019 + Bugfixes: + - Corrected typo on item name quantumn to quantum. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.145 +Date: 16. 10. 2019 + Bugfixes: + - Potential bug fix for script error on rocket launch with invalid rocket silo. + - Fix for script error when landing with a capsule but the light got destroyed somehow. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.144 +Date: 11. 10. 2019 + Bugfixes: + - Fixed issue where cutting composite entities in "/editor" mode could leave partial remnants of the building. This may also help with some other issues relating to script-based entity deletion. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.143 +Date: 08. 10. 2019 + Changes: + - Reduced meteor point defence power draw while charged by 50%. + - Added an "Are you sure?" warning for respawning. + + Bugfixes: + - Fixed an issue with using a specific combination of navigation view and respawning. + - Made new productivity module limitations match existing productivity module limitations if those were changed by other mods (added modded recipes). + +--------------------------------------------------------------------------------------------------- +Version: 0.1.142 +Date: 20. 09. 2019 + Scripting: + - Added commands to assign other planets as homeworlds making them match nauvis in terms of size, resources, and core mining. This is the first step towards supporting multiplayer with different planet starts. + + Changes: + - Increased space biochemical lab crafting speed from 2 to 3. + - Increased space growth facility to crafting speed from 1 to 2. + - Increased space genetics facility to crafting speed from 1 to 2. + - Increased space decontamination facility to crafting speed from 1 to 2. + - Reduced nutrient gel vat recipe time from 10s to 5s. + - Reduce all thermofluid heat radiating recipe times by 33%. + - Reduced data card formatting time by 50%. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.141 +Date: 12. 09. 2019 + Changes: + - Significant specimen recipe now returns 2/7/1 significant/experimental/waste instead of 1/8/1. + + Bugfixes: + - Fixed crash on robot placing invalid tile. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.140 +Date: 08. 09. 2019 + Changes: + - Cargo Rocket Silo output signals are updated immediately upon launch (previously there could be a 1s delay if launched via a trigger). + - Added a working light to Space Manufactory. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.139 +Date: 04. 09. 2019 + Bugfixes: + - Found a workaround for condenser turbines sometimes stopping working in certain orientations after switching surfaces with a spaceship. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.138 +Date: 04. 09. 2019 + Changes: + - Updates antimatter reactor prototype to match Factorio nuclear reactor changes (relating to heap pipe glow). + +--------------------------------------------------------------------------------------------------- +Version: 0.1.137 +Date: 29. 08. 2019 + Bugfixes: + - Fixed issue with command to change existing resource values, eg: /c remote.call("space-exploration", "multiply_nauvis_resource", {surface = game.player.surface, resource_name = "uranium-ore", multiplier=2}) + +--------------------------------------------------------------------------------------------------- +Version: 0.1.136 +Date: 21. 08. 2019 + Changes: + - Cargo rocket silo adds item consumption data to production statistics. + + Bugfixes: + - Fixed issue with uranium settings on repeated mod configuration changes. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.135 +Date: 19. 08. 2019 + Changes: + - Added zone radius to zone tooltip. + + Bugfixes: + - Fixed issue with boarding spaceships. + - Fixed issue with capsule trying to land in ungenerated chunks. + - Fixed that asteroid fields were not considered for closest zone calculation. + - Added code to handle surfaces left after uninstalling and reinstalling the mod. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.134 +Date: 11. 08. 2019 + Changes: + - Most space fluids are now 'compressed': All recipes involving the fluids have fluid values approximately divided by 10. Where this would cause significant rounding error other approaches are taken. In general this means pipe throughput is less of an issue in space. You may want to adjust fluid conditions and remove storage tanks. + - Telescope recipes don't destroy thermofluid anymore. + - Reduced output count of observation frame recipe. + - Added recipe to scrap cargo pods. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.133 +Date: 08. 08. 2019 + Bugfixes: + - Hotfix: Factorio 0.17.63 changes fluid boxes which broke condenser turbines. + + Changes: + - Krastorio resources "imersite" and "menarite" are excluded from asteroids as part of a compatibility request. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.132 +Date: 04. 08. 2019 + Bugfixes: + - Fixed landing pad script error if landing pad was unexpectedly deconstructed. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.131 +Date: 02. 08. 2019 + Changes: + - Decreased core mining energy cost from 80MW to 50MW. + - Decreased core fragment processing cycle time from 50 to 20 and core fragments per processing cycle from 50 to 20. + - Decreased specialised core fragment return of mixed resource core fragment per cycle from 10 to 5. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.130 +Date: 01. 08. 2019 + Bugfixes: + - Hotfix: Migration function name was not updated properly and caused crash on update. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.129 +Date: 30. 07. 2019 + Changes: + - Doubled brightness and solar output in close solar orbit. + + Bugfixes: + - Added some code to prevent assembling machine related load errors when some other mod was installed. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.128 +Date: 29. 07. 2019 + Changes: + - Improved Tier 4 insight recipes, they require blank data cards and output more insights. + - Improved dark energy data success chance. + + Scripting: + - Added remote interface "multiply_nauvis_resource" that can be used to revert parts of recent resource changes. It should not be used unless you are sure the available resources on nauvis are insufficient to set up a few moon mining bases. /c remote.call("space-exploration", "multiply_nauvis_resource", {resource_name = "iron-ore", multiplier=0.9}) + +--------------------------------------------------------------------------------------------------- +Version: 0.1.127 +Date: 26. 07. 2019 + Scripting: + - Added remote interface "get_player_character" to get the character from a player, even if they are detached from the character. + + Changes: + - Data card and gamma ray detectors recipes now require copper plate. + - Data card advanced circuit requirement reduced. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.126 +Date: 26. 07. 2019 + Bugfixes: + - Hotfix: Previous update accidently optimised away resource spawning in space surfaces. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.125 +Date: 25. 07. 2019 + Changes: + - Increased Cargo rocket capacity from 400 to 500. + - Increased Landing pad capacity from 500 to 600. + - Decreased all cargo rocket fuel requirements by 20%. + - Reduced rocket part recovery research from +5% to +4% per level. + - Increased base rocket part recovery by 20%. + - Reduce Nauvis resource overabundance, no effect on default or low resource settings. + - Uranium is now a rare resource on Nauvis surface (Core mining is not affected). + - Huge improvement to space terrain generation speed. + - Small improvement to planet and moon surface terrain generation speed. + - Launching spaceships requires less of a UPS spike (due to terrain generation). + - Added migration code to update existing surface settings (required to for terrain generation speed improvements to affect existing surfaces). + +--------------------------------------------------------------------------------------------------- +Version: 0.1.124 +Date: 24. 07. 2019 + Changes: + - Specialised core fragments now return 10 generic core fragments instead of 5, meaning more resource variety from core mining. + - Core mining speed increased by 50%. + - Changed rocket part recovery formula to be less influenced by RNG, an improvement for high research levels that can hit the max 100% return value. + - Decreased level 1 and level 2 data card reformatting times. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.123 +Date: 23. 07. 2019 + Changes: + - Updated science pack icons to 64x64px + + Bugfixes: + - Fixed spaceship UI displaying time to destination at current speed but using the max speed value. + - Reverted some changes that blocked bobs pumps from space. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.122 +Date: 22. 07. 2019 + Changes: + - Increased railgun dart damage from 100 to 200. + - Increased tesla gun ammo dart damage from 20 to 25. + - Changed Thruster Suit MK3 grid from 13x13 to 14x12. + - Decreases observation frame recipe output from 100 to 50. + - Decreased space mirror cost. + - Removed single-spectral astrometric analysis recipes. + - Rescaled outputs of multispectral astrometric analysis recipes. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.121 +Date: 20. 07. 2019 + Changes: + - Reduced deep space science pack cost. + - Halved genetics lab recipe times. + - Increased biochemical lab crafting speed. + - Decreased power output of Fluid Isothermal Generator. + + Bugfixes: + - Removed leftover debugging code. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.120 +Date: 17. 07. 2019 + Changes: + - Allowed productivity for material testing pack if made on the ground. + - Decreased uranium yield from core mining. + - Decreased water yield from core mining. + - Increased core mining speed. + - Altered some procedural collision settings, this will hopefully prevent things like water wells. + + Bugfixes: + - Added some checks around getting force data for invalid player forces (enemy, neutral). + +--------------------------------------------------------------------------------------------------- +Version: 0.1.119 +Date: 14. 07. 2019 + Bugfixes: + - Fixed error when riding a space capsule launched from a spaceship and it gets destroyed before landing. + + Locale: + - Updated translations for German, Spanish, and Korean. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.118 +Date: 10. 07. 2019 + Changes: + - Core miners won't emit their efficiency text on game load if the value has not changed. + - Energy weapons research requires energy science packs instead of material science packs. + - If a rocket aiming for a landing pad crashes, the space capsule will always thrust to the target pad (and won't need to be manually deconstructed). + - Increased nuke cost. (Was initially forgotten from changelog.) + + Bugfixes: + - Fixed rocket reusability research stating it is multiplicative. It is not multiplicative, it is an additive 5% (i.e. roughly 5) to the number of cargo rocket sections you can get back per level. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.117 +Date: 8. 07. 2019 + Changes: + - Players spawning to a surface without a position specified now default to their force's spawn default spawn position instead of the world origin. + + Bugfixes: + - Fixed problem with new forces setup. + - Fixed problem with space capsule landing with an invalid passenger. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.116 +Date: 7. 07. 2019 + Bugfixes: + - Fixed problem with code that with rocket silo prerequisites unlock code. + - Fixed subatomic data recipe returning too many data cards. + - Fixed the multiple spaceships on the same surface with intersecting bounding boxes were considering overlapping tiles of the other ship as their own tiles for integrity stress calculation. + + Changes: + - Fluid resources from the Geothermal mod can now be infinite (thanks to SlippyCheeze). + + Locale: + - Added missing string for railgun shooting speed. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.115 +Date: 5. 07. 2019 + Bugfixes: + - Fixed error with required fuel signal output if required fuel is unknown. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.114 +Date: 4. 07. 2019 + Changes: + - Cargo rocket silo now outputs signals: E for empty slots, F for full slots, L for Liquid rocket fuel required, and 'Cargo Rocket' if the rocket is complete (i.e. 1 capsule and 100 rocket sections). + - Made the key text in the 'postprocess mod is not installed' error message more obvious. + + Bugfixes: + - Fixed that satellite view couldn't ghost-place rails. + - Fixed that not all levels of cargo safety and cargo reusability were applying fully. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.113 +Date: 2. 07. 2019 + Bugfixes: + - Forced space accumulators to not have a fast replace group for cases where one was added to accumulators by another mod. + - Fixed issue relating to universe resources updating. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.112 +Date: 1. 07. 2019 + Bugfixes: + - Fixed that nutrient gel from methane recipe could not be unlocked. + - Fixed multiple issues relating to Factorio 0.17.53 collision/upgrade rules. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.111 +Date: 30. 06. 2019 + Changes: + - Changed damage type of meteors, certain entity types can now have meteor-specific resistances (train rails now have 99.75% meteor resistance). + + Locale: + - Spaceship UIs can now be translated (70+ new strings added). + +--------------------------------------------------------------------------------------------------- +Version: 0.1.110 +Date: 30. 06. 2019 + Changes: + - Added a 2nd bar to spaceship integrity stress so you can see structural vs container stress. + + Bugfixes: + - Fixed issue relating to boarding a spaceship from a spaceship that you are not in. + + Locale: + - Added missing locale for railgun damage bonus. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.109 +Date: 30. 06. 2019 + Changes: + - Doubled thermodynamics lab effective smelting speed. + - Thermofluid base cooling time reduced from 8 to 6. + + Locale: + - Spanish translation updates thanks to Abarel. + - French translation updates thanks to TheKoopa and Dae. + - Hebrew translation updates thanks to Multytint + - German translation updates thanks to Moertschi + +--------------------------------------------------------------------------------------------------- +Version: 0.1.108 +Date: 29. 06. 2019 + Changes: + - Characters in a moving cargo rocket or space capsule are indestructible. + + Bugfixes: + - Fixed electric boiler south orientation sprite offset. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.107 +Date: 28. 06. 2019 + Features: + - Added 6 new tiers of modules up to tier 9. The modules are balanced around being used together, efficiency becomes an important part of negating excessive power usage. Thanks to Ironic Toblerone for assistance with initial prototyping. + + Changes: + - Techs for module tiers 1-3 have been redistributed back to their vanilla positions. + - Increased thermal radiator module slots from 1 to 2. + - Added cargo rocket silo launch trigger for cargo full OR green signal. + + Bugfixes: + - Fixed crash caused by remote-landing a spaceship via satellite, exiting satellite mode while still scouting for anchor placement, then exiting landing mode. + - Fixed that starmap has a day/night cycle. + + Scripting: + - Added remote interface: get_zone_icon requires data.zone_index. + - Added remote interface: get_zone_is_solid requires data.zone_index. + - Added remote interface: get_zone_is_space requires data.zone_index. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.106 +Date: 28. 06. 2019 + Changes: + - Increased planet upper limit for random resource range from +300% size/richness to +400% size/richness. + + Bugfixes: + - Fixed that space belts were using express belt icons in some interfaces. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.105 +Date: 27. 06. 2019 + Changes: + - Renamed Space science pack to Rocket science pack. This is mainly because many people call the in-space sciences "space science" so the terminology was getting confusing. + + Locale: + - Korean translation thanks to PolarZero. + + Bugfixes: + - Made sure space pipe does not have an upgrade if the express transport belt had been modified with one by another mod. (Bobs logistics compatibility) + +--------------------------------------------------------------------------------------------------- +Version: 0.1.104 + Changes: + - Space pipe and space belt are no longer the same fast-replace-groups as the ground versions because it allowed an exploit to have ground versions in space. + + Bugfixes: + - Fixed issue relating to placing space tiles on invalid surfaces with bots. + + Locale: + - Spanish translation thanks to Abarel. + - French translation thanks to TheKoopa and Dae. + - Hebrew translation thanks to Multytint + +--------------------------------------------------------------------------------------------------- +Version: 0.1.103 + Features: + - Added electric boiler, prototype code thanks to Ironic Toblerone. + + Bugfixes: + - Fixed issue with meteor defence if an entity becomes invalid. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.102 + Bugfixes: + - Fixed incorrect collision box on meteor defence facility that prevented automatic ammo insertion. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.101 + Changes: + - Meteor point defence now shows the protected area on the map and while placing the entity. + - Meteor point defence and Meteor defence facilities now only accept the correct ammo type. + - Meteor point defence and Meteor defence facilities now show a no ammo alert when charged but out of ammo. + + Bugfixes: + - Fixed issue caused by deconstructing a spaceship during transit. + + Locale: + - German translation thanks to Moertschi. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.100 + Changes: + - There is now a mod setting to set the space pipe fluid capacity between 50 and 200, default is 100. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.99 + Changes: + - Increased space pipe capacity to 200. + - Increased antimatter booster tank capacity from 20k to 50k. + + Bugfixes: + - Fixed issue with planet resource system that prevented bobs lithia water from spawning. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.98 + Changes: + - Corpse markers are removed when the corpse is removed. + - Two-part simulation techs require hypercooling 2 tech. + - Increased particle collider power consumption. + - Decreased most particle collider recipe times. + + Bugfixes: + - Fixed issues relating to dying while in satellite mode. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.97 + Changes: + - Fixed error relating to rocket passengers dying during transit. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.96 + Changes: + - Tesla gun is properly affected by energy weapons damage upgrades. + - Railgun is affected by bullet weapons damage upgrades. + - Increased railgun range from 24 to 100. + - Spaceship integrity stress from cargo now includes vehicle inventories and storage tanks. + - Base spaceship integrity increased from +200 to +300. + - Spaceship integrity 7 tech removed. + - Updated entity pollution format to latest spec. + - Reduced concrete cost of nanomaterial testing recipe. + - Railgun is now affected by bullet damage and shooting speed tech. + + Bugfixes: + - Fixed some collision settings that allowed some structures to be placed in empty space. + - Fixed crash in case where capsule shadow gets destroyed during landing sequence. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.95 + Bugfixes: + - Forced Nauvis to not list a primary resource. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.94 + Bugfixes: + - If the radar tech is disabled in the game state it is re-enabled for all forces. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.93 + Changes: + - Disabled rail being upgradeable because it was preventing the ability to hand-place rail intersections. + - Cargo rocket sections can't be packed/unpacked by hand due to base game issue return incorrect number of items. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.92 + Changes: + - Space rail can now be placed on empty space. + - Enabled the vanilla radar technology. it exists in vanilla but is disabled but that was causing problems. + + Bugfixes: + - Fixed problem with low numbers of core miners on a planet not outputting the expected resources per second. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.91 + Changes: + - The first meteor in a meteor shower does not have a random offset if relative to the meteor shower. + + Bugfixes: + - Fixed crash when player is killed during rocket landing sequence. + - Fixed when player died and had logistic requests or inventory filters, then the mod for that filter item was removed before the player respawned. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.90 + Changes: + - Fixed crash when spaceship takes damage at the location of a character but the character is invalid. + - Fixed crash when trying to respawn at a destroyed landing pad. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.89 + Changes: + - Internal restructuring of landing pad data storage. + - Cargo rockets can now be sent to landing pads without specifying a specific destination, the silo is fuelled up to the highest destination fuel cost but a random available landing pad is chosen on launch. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.88 + Changes: + - Allowed bobs pumps in space. + - Added plamsa canister emptying recipe. + - Added recipe to make nutrient gel with methane instead of coal. + + Bugfixes: + - Fixed crash on script deletion of landing pad while GUI was open. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.87 + Changes: + - Increased deep space science pack recipe output count. + - Reduced biomass recipe contaminated water and contaminated biosludge byproducts from 500 to 400. + + Bugfixes: + - Fixed issue with higher levels of rocket survivability research having a reduced effect, + - Fixed crash when respawning character has less request slots than deceased character. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.86 + Changes: + - Planets and moons now have different day/night cycles. + - Decreased crafting time for data card components. + - Decreased genetics recipe times. + - Allowed angels silos in space. + - Added unlock for methane conversion to angels refining version. + + Bugfixes: + - Fixed that high tier material catalogues required cold instead of supercooled thermofluid. + - Fixed condenser turbines getting stuck at 99% filled due to base game rounding problem. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.85 + Changes: + - Decreased core miner pollution by 50%. + - Decreased genetics recipe times. + - Added a conversion from space exploration methane gas to angels methane gas. + - Added angels crushing crafting category to mechanical laboratory. + + Bugfixes: + - Fixed that containers outside of a spaceship but inside the spaceship bounding box affected integrity stress. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.84 + Bugfixes: + - Hotfix for error on rocket crash. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.83 + Changes: + - Added "currently viewing" text to the satellite UI. + - If landing with a capsule at a random location, if there is no valid spot in range of the first attempt it will try a place nearer to the planet origin. + - If the cargo rocket silo storage tank is removed it is automatically replaced. + - Changed rounding of displayed cargo pods lost, actual item loss is unaffected. + - Spaceships structure stress is influenced by container slot capacity. Each slot is 0.5 stress but this is not added to the existing stress, the higher value is used. The starting spaceship is limited to the same slot equivalent of the cargo rocket. Spaceship integrity research increases the amount you can carry. If you have a spaceship filled with chests it is recommended that you land the spaceship before updating. + - Added recipe to pack and unpack stacks of cargo rocket sections so they are easier to deliver to other planets via rocket. + - Increased RTG 1 power output. + - Renamed fluid burner generator to fluid isothermic generator as it is designed to burn rocket fuel to power spaceships and shouldn't sound like a simple burner entity. + - Added incompatibility with train tunnels mod, it needs to respect connecting surface restrictions to be compatible (e.g: no interstellar tunnels). + +--------------------------------------------------------------------------------------------------- +Version: 0.1.82 + Changes: + - Changed spaceship integrity check pulse to once every 10 minutes. + - You must launch a satellite before launching a cargo rocket. + - Space platform plating requires material science. + - Space rail requires energy science. + - Fluid burner generator requires energy science. + - Cargo rocket silos nearly full with fuel load fuel faster. + - Added unlock for bio processing recipe for methane gas to crude oil. + - Doubled thermodynamics lab crafting speed and doubled thermodynamics recipes duration (thermodynamics recipes are effectively unchanged but smelting is twice as fast). + +--------------------------------------------------------------------------------------------------- +Version: 0.1.81 + Changes: + - Updated code relating to resources being added/removed mid game. + - Added water ice as a space-only resource. + - Added water ice to water recipe. + - Added methane ice as a space-only resource. + - Added methane ice to methane gas recipe. + - Added bio processing recipe for methane gas to crude oil. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.80 + Bugfixes: + - Fixed problem with auto-space-collision settings affecting cargo rocket silo sub-entities. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.79 + Changes: + - Moved space solar panel to energy science. + + Bugfixes: + - Fixed initial spaceship tech integrity description value. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.78 + Bugfixes: + - Fixed crash if space capsule was destroyed while landing. + - Fixed wire shortcuts mod and satellite view causing wire dropping. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.77 + Changes: + - Decreased thruster suit 2 tech cost. + - Rocket silos can't be placed on spaceships. + - Increases effective growth facility speed by recipes using increased batch sizes. + + Bugfixes: + - Fixed that some material fabricator recipes would consume too much thermofluid. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.76 + Changes: + - Reduced space mirror lubricant requirement. + - Reduced heat shielding sulfur requirement. + - Allowed pipe valve entities from other mods in space. + + Bugfixes: + - Fixed science pack recipes generating extra junk data. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.75 + Changes: + - Update to automatic space collision. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.74 + Changes: + - When switching surfaces via satellite your last position is remembered. + - Reduced tech costs for rocket upgrades. + - Reduced fluid burner generator output from 5MW to 4MW + +--------------------------------------------------------------------------------------------------- +Version: 0.1.73 + Changes: + - Reduced gravity wave data craft time. + - Adjusted imaged observation frame crafting times. + - Allowed ghost-placing landfill from satellite. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.72 + Bugfixes: + - Fixed particle collider probability recipes. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.71 + Changes: + - Updated data catalogue tech costs. + + Bugfixes: + - Fixed that mining an antimatter booster would return a rocket booster. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.70 + Changes: + - Reduced core mining drill energy cost to 80MW. + - Added more tiers of mining productivity and artillery techs so that science packs can be added more gradually. + - Moved plague rocket further back in the tech tree. + - Increased plague rocket recipe cost. + - Rough data storage substrate can use productivity if made on a planet. + + Bugfixes: + - Bio catalogue 4 requires decompression resistance data instead of decompression data + - Remove spaces from ru locale. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.69 + Bugfixes: + - Fixed script error in satellite uplink interface if button gets removed unexpectedly. + - Fixed that character could get disassociated from player when landing a spaceship in satellite view. + - Fixed that sometimes a satellite could launch and not discover anything when there are still things to discover. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.68 + Changes: + - Added a max runtime for the plague. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.67 + Changes: + - Added inventory to space capsule + - Added space capsule scrapping and empty barrel reprocessing. + + Bugfixes: + - Fixed error in satellite uplink code. + - When using the wire shortcuts mod, does not spill wires to the ground if in satellite mode. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.66 + Bugfixes: + - Fixed error in migration code. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.65 + Changes: + - Improved support for entities being built via script. + + Bugfixes: + - Fixed that planet enemy setting weren't applied properly. + - Removed biters from planets with 0% lifesigns. + - Corrected factory spaceship description from +200 to +500. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.64 + Locale: + - Russian translation by EternalDragon. + + Changes: + - Changed internal name of factory spaceship tech to match display name. + - Updated factory spaceship tech bonus integrity to +500. + - Changes required for updated thermofluid icons. + - Updated thermofluid recipe names and descriptions. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.63 + Bugfixes: + - Fixed the cargo full trigger would not fire sometimes. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.62 + Bugfixes: + - Fixed error in spaceship integrity check code. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.61 + Changes: + - Improved ability to use special tools from satellite uplink mode, such as artillery remote and upgrade planner. + + Bugfixes: + - Changing recipes while in satellite uplink mode drops items and incompatible modules to ground for deconstruction instead of putting them in an unrecoverable inventory. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.60 + Bugfixes: + - Requires higher version of robot attrition due to updated remote interface. + + Changes: + - Print meteor alerts to console option now includes a location link. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.59 + Features: + - Surfaces now have special robot attrition factors visible through the satellite uplink button tooltips. + + Changes: + - Increased space science pack cost. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.58 + Changes: + - Decreased cargo rocket section cost (roughly -25%). + - Decreased astronomic, material, energy, and biological science pack cost (roughly -45%). + - Landed cargo pods are automatically marked for deconstruction. + + Bugfixes: + - Fixed that no-spacesuit warning would print for players entering a rocket that had a valid space suit. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.57 + Changes: + - Increased space belt cost to be closer to blue belt. + + Bugfixes: + - Fixed space assembling machine could use productivity modules. + - Fixed issue with rail selection priory priority. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.56 + Bugfixes: + - Fixed crafting time on rocket fuel from water recipe. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.55 + Changes: + - Recycling machine can be crafted normally (not only be space manufactory). + + Bugfixes: + - Fixed that some techs hand science packs as ingredients that were not tech prerequisites (progression is unaffected, the tech tree is just clearer). + +--------------------------------------------------------------------------------------------------- +Version: 0.1.54 + Bugfixes: + - Fixed that a debug print line was left in a released version. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.53 + Changes: + - Biomechanical resistance data and bio combustion resistance data require experimental specimens not significant specimens. + + Bugfixes: + - Fixed the normal rail could be placed in space. + - Fixed that core miner could not be rotated after reloading the game. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.52 + Bugfixes: + - Fixed cargo rocket silo combinator icons too big. + - Fixed cargo rocket launch manual override not working. + - Fixed cargo rocket launch trigger green signal when rocket cargo full not working. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.51 + Changes: + - Player cannot craft lifesupport recipes anymore (many of them required fluid and weren't hand craftable anyway). + + Bugfixes: + - Set fuel refinery to require stone bricks not concrete. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.50 + Changes: + - When a cargo rocket silo is deconstructed items are generated for the space capsule and rocket sections that were consumed. Rocket fuel is still lost, but can be pumped out first. + - Added corpse markers. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.49 + Changes: + - Reduced space science requirement for robot speed research. + - Allowed productivity for Space Science Pack recipe. + + Bugfixes: + - Fixed that MK4 and MK5 energy shield recipes required themselves. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.48 + Changes: + - Added more specific status messages to launchpad GUI. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.47 + Bugfixes: + - Fixed cargo rocket silo signal output sending incorrect (higher) fuel value. + - Fixed cargo rocket silo siphoning the last 0.1% of required fuel very slowly. + - Reverted change to belts that prevented items from being dropped on them. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.46 + Features: + - Added 5 tiers of Adaptive armour. Fills a similar role to energy shields with lower power requirements but much slower regeneration. Not as good for sustained combat or skirmishing but has lower tech requirements. + - Added 6 tiers (4 new tiers) of Energy shield equipment. Energy shields charge quickly but are power hungry. Higher tier versions will be difficult to use effectively until the personal antimatter reactor equipment is added. + + Changes: + - Code changes required to have hr graphics in a separate mod that is not a required mod. + - Added cargo rocket silo launch event thanks to MFerrari. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.45 + Features: + - Added Fuel Refinery structure and technology. + - Added Rocket fuel from water recipe. + + Changes: + - Added empty barrel scrapping recipe. + - Solid fuel recipes and rocket fuel recipes are now part of fuel refining, this will break you existing solid fuel setups. + - Fuel refining recipes have had their crafting times have been reduced to 1/4, the fuel refinery is effectively 4 times faster but keeps a crafting speed of 1 to keep tooltips simple. + + Bugfixes: + - Fixed a problem with spaceship launch sequence when integrity stress exceeded maximum. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.44 + Changes: + - Added some optimizations to cargo rocket silo and landing pad GUIS. + - Removed space science prerequisite from power armor mk2. + + Bugfixes: + - Switched Fluid Burner Generators graphics back to SR (fixed) versions. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.43 + Bugfixes: + - Quick fix: Normal resolution Fluid Burner Generator sprites didn't process correctly, switching to hr Fluid Burner Generators graphics for all resolutions as a temporary workaround. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.42 + Features: + - Added Antimatter Reactors. Antimatter can be manufactured where there is abundant energy (like a star), and used to power somewhere energy poor (like deep space). + - Added Fluid Burner Generators. Can burn fluid with an energy value to generate electricity. Simple and compact but lacks the energy efficiency of steam setups. Allows spaceships to burn rocket fuel for power. + + Changes: + - Renamed supercomputer MK2 and MK3 to Quantum supercomputer and Neural supercomputer. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.41 + Changes: + - There are now 4 tiers of medpack. + - Added player respawn event call to respawn function. + - Reduced stack size of meteor defence 50 -> 20, and meteor point defence ammo 100->50. You may want to rescue the items before updating, or spawn them in if you lost out. + - Meteor point defence does not require explosives. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.40 + Changes: + - Meteors that fall in water don't leave remnants. + - Inventory filters, logistic request slots, and auto-trash filters are saved on death so your successor is created with the same settings. + + Bugfixes: + - Fixed meteor alert having completely wrong structure totals. + + Locale: + - Added string for se-core-miner-drill + +--------------------------------------------------------------------------------------------------- +Version: 0.1.39 + Changes: + - Supercomputers can now be upgraded in place. + + Bugfixes: + - Added missing unlock for bio combustion data. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.38 + Changes: + - Changed planet core mining to use a different method that does not require continuous updates via script. They are now like electric mining drills and output in the same way. You may need to remove inserters and add belts to collect the fragments. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.37 + Bugfixes: + - Fixed meteor point defence being unplaceable in space. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.36 + Bugfixes: + - Fixed collision problem with spaceship doors. + - Fixed 2 spaceship script errors. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.35 + Features: + - Added meter point defence radius visualisation on entity open and entity hover (can't add while placing the item unfortunately). + - Added spaceship launch / landing sound effects. + + Changes: + - Reduced satellite accumulator and solar panel cost + - Reduced space capsule accumulator and solar panel cost + +--------------------------------------------------------------------------------------------------- +Version: 0.1.34 + Features: + - Added Meteor point defence, a cheaper more basic meteor defence option. Has limited range, but can fire 4 times and has a much lower power requirement. + - Added custom meteor event sound. + - Added a custom alert for meteors so it does not make the annoying sound that happens when something gets printed to the console. + - Added a per-player setting for meteor alerts to be printed to the console (so you can look back later to see stats, but you get the annoying noise), off by default. + + Changes: + - Space science is now required on average 1 tech later in many tech lines. + - Rocket silo research is now cheaper and faster. + - Meteor defence installation accuracy reduced to 80%. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.33 + Bugfixes: + - Improved the on/off flicker of space science labs but it is still not perfect. The graphics still need to be redone to remove the flicker completely, but the graphics need to be updated anyway to remove the pipes. + - Fixed that cargo pods couldn't be placed in space, and therefore would be destroyed by the game engine if the tile under them was changed while in space. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.32 + Bugfixes: + - Fixed supercomputer in SR using HR graphics that got cut off. + + Changes: + - Reduced electric furnace heat shield requirement. + - Increased default meteor interval to 20 minutes. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.31 + Features: + - Fixed that higher tier thruster suits would display unarmoured character. + - Fixed angels barreling pump could not be placed space. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.30 + Features: + - Thruster suit tiers, includes different spacewalking thrust per suit + - RTG equipment to bridge the long wait for fusion reactor equipment. + + Locale: + - Added zh-CN translation by Frost. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.29 + Info: + - IMPORTANT: Compatibility patches and a few other things are being moved to a separate mod (space-exploration-postprocess). It is required, but I can't list it as a dependency. Please make sure you install it when updating (assuming you read changelogs). + - Moved all graphics to a separate package (also required but I can list it as a dependency without causing a dependency loop). This is to allow people to download code updates without repeatedly downloading 200MB of images. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.28 + Bugfixes: + - Fixed that particle accelerator had become impossible to research after shuffling some things around. + + Changes: + - Steam is no longer considered a raw ingredient for water. + + Modding: + - Bobs modules and nanobots are excluded from auto-science-pack additions. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.27 + Changes: + - Increased minimum random planet size. + - If additional fluid resources are added by mods the omni core fragment is restricted to 4 fluids, water is removed first. + + Scripting: + - Updated remote interface: begin_meteor_shower. Can now specify number of data.meteors along with data.entity or (data.zone_name and data.position) + - Added remote interface: get_zone_from_name requires data.zone_name + - Added remote interface: get_zone_from_surface_index requires data.surface_index + - Added remote interface: get_zone_from_zone_index requires data.zone_index note: this allows you to traverse the zone tree + +--------------------------------------------------------------------------------------------------- +Version: 0.1.26 + Bugfixes: + - Fixes that the cargo rocket silo and landing pad got blocked from space by a collision change. + - Fixes that sometimes Nauvis would get assigned a core fragment other than Omni. + - Fixes that spaceship launch would consume incorrect fuel. + - Fixes Spaceship console required stone instead of glass. (A leftover from the early attempt to remove AAI). + +--------------------------------------------------------------------------------------------------- +Version: 0.1.25 + Bugfixes: + - Fixed that meteors showers get stuck in pairs instead of the chances: 50% 1, 25% 2, 12.5% 3, 6.25% 4, etc... + +--------------------------------------------------------------------------------------------------- +Version: 0.1.24 + Bugfixes: + - Fixed meteors keep landing close to player. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.23 + Bugfixes: + - Fixed meteor defence ammo couldn't be inserted automatically. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.22 + Features: + - Added meteor defence. + + Changes: + - Increased stone resource generation. + - Allowed productivity for heat shielding + +--------------------------------------------------------------------------------------------------- +Version: 0.1.21 + Bugfixes: + - Fixed that lifesupport facility required space-assembling-machine. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.20 + Bugfixes: + - Potentially fixed a desync with spaceships. More testing required. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.19 + Bugfixes: + - Fixed that glass and sand recipes weren't unlockable. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.18 + Bugfixes: + - Fixed that sometimes the spaceship landing position was incorrectly offset. + - Fixed an exploit what allowed you to place space platform anywhere. + - Fixed the core mining could not be researched. + + Changes: + - Increased meteor selection priority. + - Meteors and rocket fragments now count as rocks as far as the deconstruction planner is concerned. + + Graphics: + - Improves space rail alignment and endings. + - Updated astrometric and gravimetric lab pipe connections. + + Locale: + - Added missing tech names and descriptions. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.17 + Bugfixes: + - Fixed technology loop after bobs mods changed space science to require radars-4. + + Changes: + - The space capsule return launch will now take you to a random friendly landing pad if there is one at the destination. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.16 + Bugfixes: + - Prevents Angel's fish from spawning in space. + - Fixed that entering a space capsule around a star would cause a crash. + + Graphics: + - Improved supercomputer pipe connection graphics. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.15 + Bugfixes: + - Fixed that a mod adding and removing a force on the same tick would cause a crash. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.14 + Changes: + - Increased the size of the Biological Laboratory, it needed new graphics for the all pipe connections. + - Removed AAI Industry as a dependency BUT some parts of the mod had to be copied in to Space Exploration, and it is still strongly recommended to play with that mod installed. + + Bugfixes: + - Fixed that support for Reverse Factory could break if mod load order changed. + - Fixed an incompatibility with bobs power. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.13 + Bugfixes: + - Fixed crash on renaming spaceships. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.12 + Graphics: + - Fixed pipe connections for Growth Facility + + Changes: + - Moved heat shielding in the tech tree. + - Added support for Simple Silicon. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.11 + Bugfixes: + - Fixed crash on changing resources by changing loaded mods + + Changes: + - Added more event handling for script-created entities. + - Added some more unique planet settings. + - Added support for Reverse Factory. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.10 + Bugfixes: + - Fixed crash on clicking the uplink back button. + + Changes: + - Swapped rocket fuel solid->liquid production order so it will fit more easily with other mods recipe changes. + - Better angels petrochem support. diff --git a/space-exploration_0.5.80/space-exploration/collision-mask-util-extended/control/collision-mask-util-control.lua b/space-exploration_0.5.80/space-exploration/collision-mask-util-extended/control/collision-mask-util-control.lua new file mode 100644 index 0000000..9dd31dd --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/collision-mask-util-extended/control/collision-mask-util-control.lua @@ -0,0 +1,67 @@ +-- File Licence: You can copy and distribute this file regardless of the mod's general licence. This licence exception does not affect other files of this mod. +local collision_mask_util_extended = {} + +-- see collision_mask_util_extended_extended.lua for full instructions. +--[[ +-- Example usage + +local collision_mask_util_extended = require("collision-mask-util-control") +function check_collision_layers() + collision_mask_util_extended.named_collision_mask_integrity_check() + local flying_layer = collision_mask_util_extended.get_named_collision_mask("flying-layer") +end + +script.on_init(check_collision_layers) +script.on_configuration_changed(check_collision_layers) + +function find_flying_entities(surface) + local flying_layer = collision_mask_util_extended.get_named_collision_mask("flying-layer") + return surface.find_entities_filtered{collision_mask={flying_layer}} +end +]] + +function collision_mask_util_extended.get_named_collision_mask(mask_name) + local prototype = game.entity_prototypes["collision-mask-"..mask_name] + if prototype then + local layer + for mask_name, collides in pairs(prototype.collision_mask) do + if layer then + error("\n\n\nA reserved collision mask object "..mask_name.." has been compromised by 1 or more of your installed mods. Object must have only 1 collision mask.\n\n") + else + layer = mask_name + end + end + if not layer then + error("\n\n\nA reserved collision mask object "..mask_name.." has been compromised by 1 or more of your installed mods. Object is missing collision_mask.\n\n") + end + return layer + else + error("\n\n\nA reserved collision mask object "..mask_name.." has been removed.\n\n") + end +end + +function collision_mask_util_extended.named_collision_mask_integrity_check() + -- This function will check that collision mask marker objects have 1 collision mask + -- Run this on the events: on_init and on_configuration_changed + -- It will not detect collision mask marker objects that have been removed from the game + -- However: collision_mask_util_extended.get_named_collision_mask(mask_name) will + local prototypes = game.get_filtered_entity_prototypes({{filter = "type", type = "arrow"}}) + for _, prototype in pairs(prototypes) do + if string.find(prototype.name, "collision-mask-") then + local layer + for mask_name, collides in pairs(prototype.collision_mask) do + if layer then + error("\n\n\nA reserved collision mask object "..mask_name.." has been compromised by 1 or more of your installed mods. Object must have only 1 collision mask.\n\n") + else + layer = mask_name + end + end + if not layer then + error("\n\n\nA reserved collision mask object "..mask_name.." has been compromised by 1 or more of your installed mods. Object is missing collision_mask.\n\n") + end + end + end + +end + +return collision_mask_util_extended diff --git a/space-exploration_0.5.80/space-exploration/collision-mask-util-extended/data/collision-mask-util-extended.lua b/space-exploration_0.5.80/space-exploration/collision-mask-util-extended/data/collision-mask-util-extended.lua new file mode 100644 index 0000000..a48e3bd --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/collision-mask-util-extended/data/collision-mask-util-extended.lua @@ -0,0 +1,184 @@ +-- File Licence: You can copy and distribute this file regardless of the mod's general licence. This licence exception does not affect other files of this mod. +local collision_mask_util_extended = require("__core__/lualib/collision-mask-util") + +--[[ + +Named collision masks allow a collision mask to be passed to the control phase. +The arrow object used to stor the mask is accessible under: game.entity_prototypes["collision-mask-flying-layer"] +The layer used is therefore: game.entity_prototypes["collision-mask-flying-layer"].collision_mask .. something + +-------------------------------------------------------------------------------- +-- INSTRUCTIONS +-------------------------------------------------------------------------------- + +-- flying-layer example: +-- data phase ------------------------------------------------------------------ +(data.lua data-updates.lua data-final-fixes.lua etc) get/make a layer: + +-- load the modified util +local collision_mask_util_extended = require("collision-mask-util-extended") + +-- get a collision layer by name, if the name is not assigned to a layer it will assign one +local flying_layer = collision_mask_util_extended.get_make_named_collision_mask("flying-layer") + +-- control phase --------------------------------------------------------------- +(conrtol.lua) Note: most mods don't need to know collision layers in control code. +local collision_mask_util_extended = require("collision-mask-util-control") + +-- Example usage +local flying_layer = collision_mask_util_extended.get_named_collision_mask("flying-layer") +local entities = surface.find_entities_filtered{collision_mask={flying_layer}} + +-------------------------------------------------------------------------------- +-- Additional named layers +-------------------------------------------------------------------------------- +"flying-layer" +-- local collision_mask_flying_layer = get_make_named_collision_mask("flying-layer") +Flying vehicles, units, and characters. +It is useful to also set the mask "not-colliding-with-itself" to prefent air-air collisions. +The mask can also be added to interior walls that are full height so can't be flown over. + +"projectile-layer" +-- local collision_mask_projectile_layer = get_make_named_collision_mask("projectile-layer") +Projectiles. The the projectile should have the layers or most things it can hit (flying-layer). +Walls and shields can also use this layer to block the projectile. +Note: Projectiles use hit_collision_mask not collision_mask. force_condition = "not-friend" means it won't hit your stuff. +Note: Streams can't collide. + +"vehicle-layer" +-- local collision_mask_vehicle_layer = get_make_named_collision_mask("vehicle-layer") +Car type vehicles and things that collide with them. Allows separation of vehicle-layer and player-layer in certain situations. Add to cars, trees, pipes + +"space-tile" +-- local collision_mask_space_tile = get_make_named_collision_mask("space-tile") +All tiles in space zones (orbit/asteroid fields) including empty space and space platform. + +"empty-space-tile" +-- local collision_mask_empty_space_tile = get_make_named_collision_mask("empty-space-tile") +tiles in space without flooring. +Different from void becuase there is no grravity and stuff can float there. + +"interior-tile" +-- local collision_mask_interior_tile = get_make_named_collision_mask("interior-tile") +Tiles that represent interior spaces and don't have sky, like underground, factory building interiors, etc. +Rocket silos, artillery, telescopes, and space elevators may not be appropriate here. + +"moving-tile" +-- local collision_mask_moving_tile = get_make_named_collision_mask("moving-tile") +Tiles that might change surface, such as spaceship tiles or warp structures. + +"void-tile" +-- local collision_mask_void_tile = get_make_named_collision_mask("void-tile") +Tiles where there is a drop in to the ground (so you can't walk over or build on) but you can fly/jump over. + +]] +local collision_flags = +{ + "consider-tile-transitions", + "not-colliding-with-itself", + "colliding-with-tiles-only" +} +collision_mask_util_extended.collision_flags = table.deepcopy(collision_flags) + +collision_mask_util_extended.vanilla_named_collision_masks = { + ["ground-tile"] = "ground-tile", + ["water-tile"] = "water-tile", + ["resource-layer"] = "resource-layer", + ["doodad-layer"] = "doodad-layer", + ["floor-layer"] = "floor-layer", + ["item-layer"] = "item-layer", + ["ghost-layer"] = "ghost-layer", + ["object-layer"] = "object-layer", + ["player-layer"] = "player-layer", + ["train-layer"] = "train-layer", + ["rail-layer"] = "rail-layer", + ["transport-belt-layer"] = "transport-belt-layer" +} + +-- fix issue reported in F1.1.5 +collision_mask_util_extended.get_default_mask_vanilla = collision_mask_util_extended.get_default_mask +collision_mask_util_extended.get_default_mask = function (type) + if type == "unit" then + return {"player-layer", "train-layer", "not-colliding-with-itself"} + else + return collision_mask_util_extended.get_default_mask_vanilla(type) + end +end + +_named_collision_masks = _named_collision_masks or table.deepcopy(collision_mask_util_extended.vanilla_named_collision_masks) -- do not modify directly +named_collision_masks = table.deepcopy(_named_collision_masks) -- readonly +collision_mask_util_extended.named_collision_masks = named_collision_masks +-- tracks mod layers only. format: named_collision_masks[mask_name] == "layer-"..x + +function collision_mask_util_extended.get_named_collision_mask(mask_name) + return _named_collision_masks[mask_name] +end + +function collision_mask_util_extended.get_make_named_collision_mask(mask_name) + local layer = collision_mask_util_extended.get_named_collision_mask(mask_name) + if not layer then + layer = collision_mask_util_extended.get_first_unused_layer() + log("Named collision layer ["..mask_name .."] set to layer ["..layer.."]") + data:extend({ + { + type = "arrow", + name = "collision-mask-"..mask_name, + collision_mask = {layer}, + flags = {"placeable-off-grid", "not-on-map"}, + circle_picture = { filename = "__core__/graphics/empty.png", priority = "low", width = 1, height = 1}, + arrow_picture = { filename = "__core__/graphics/empty.png", priority = "low", width = 1, height = 1} + } + }) + end + _named_collision_masks[mask_name] = layer + named_collision_masks = table.deepcopy(_named_collision_masks) -- readonly + collision_mask_util_extended.named_collision_masks = named_collision_masks + return layer +end + +function collision_mask_util_extended.named_collision_mask_integrity_check() + -- This function will check that collision mask marker objects have 1 collision mask + for mask_name, layer_name in pairs(_named_collision_masks) do + if not collision_mask_util_extended.vanilla_named_collision_masks[mask_name] then + local mask_bearer = data.raw.arrow["collision-mask-"..mask_name] + local layer + if mask_bearer then + if mask_bearer.collision_mask then + for i, mask in pairs(mask_bearer.collision_mask) do + if i == 1 then + if mask == "not-colliding-with-itself" + or mask == "consider-tile-transitions" + or mask == "colliding-with-tiles-only" then + error("\n\n\nA reserved collision mask object "..mask_name.." has been compromised by 1 or more of your installed mods. Collision mask must be a collision layer, not a collision option.\n\n") + end + layer = mask + else + error("\n\n\nA reserved collision mask object "..mask_name.." has been compromised by 1 or more of your installed mods. Object must have only 1 collision mask.\n\n") + end + end + else + error("\n\n\nA reserved collision mask object "..mask_name.." has been compromised by 1 or more of your installed mods. Object is missing collision_mask.\n\n") + end + else + error("\n\n\nA reserved collision mask object "..mask_name.." has been removed.\n\n") + end + end + end +end + +function collision_mask_util_extended.is_mask_empty(mask) + for _, layer in pairs(mask) do + local is_flag = false + for _, option in pairs(collision_flags) do + if layer == option then + is_flag = true + end + end + if not is_flag then + return false + end + end + return true +end + +return collision_mask_util_extended diff --git a/space-exploration_0.5.80/space-exploration/control.lua b/space-exploration_0.5.80/space-exploration/control.lua new file mode 100644 index 0000000..7296148 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/control.lua @@ -0,0 +1,2072 @@ +require("stdlib/table") +require("stdlib/string") +mod_gui = require("__core__/lualib/mod-gui") +collision_mask_util_extended = require("__space-exploration__/collision-mask-util-extended/control/collision-mask-util-control") + +version = 0005073 -- 0.5.073 +local mod_display_name = "Space Exploration" +is_debug_mode = false + +Util = require("scripts/util") util = Util +sha2 = require('scripts/sha2') +Essential = require('scripts/essential') + +Log = require('scripts/log') +Event = require('scripts/event') +Profiler = require( 'scripts/profiler') + +Shared = require("shared") +UniverseRaw = require("scripts/universe-raw") +Universe = require("scripts/universe") +Location = require('scripts/location') +Pin = require('scripts/pin') +RemoteView = require('scripts/remote-view') +SpaceshipObstacles = require('scripts/spaceship-obstacles') +MapView = require( 'scripts/map-view') +Respawn = require('scripts/respawn') +LaunchpadGUI = require('scripts/launchpad-gui') +Launchpad = require('scripts/launchpad') +LandingpadGUI = require('scripts/landingpad-gui') +Landingpad = require('scripts/landingpad') +Capsule = require('scripts/capsule') +Zone = require('scripts/zone') +Zonelist = require('scripts/zonelist') +Weapon = require('scripts/weapon') +Medpack = require('scripts/medpack') +SpaceshipClamp = require('scripts/spaceship-clamp') +SpaceshipClone = require('scripts/spaceship-clone') +SpaceshipGUI = require('scripts/spaceship-gui') +Spaceship = require('scripts/spaceship') +Coreminer = require('scripts/core-miner') +CondenserTurbine = require('scripts/condenser-turbine') +BigTurbine = require('scripts/big-turbine') +Meteor = require('scripts/meteor') +Beacon = require('scripts/beacon') +Lifesupport = require('scripts/lifesupport') +DeliveryCannonGUI = require('scripts/delivery-cannon-gui') +DeliveryCannon = require('scripts/delivery-cannon') +Composites = require('scripts/composites') +EnergyBeamGUI = require('scripts/energy-beam-gui.lua') +EnergyBeam = require('scripts/energy-beam') +EnergyBeamDefence = require('scripts/energy-beam-defence') +SolarFlare = require('scripts/solar-flare') +Nexus = require('scripts/nexus') +Arco = require('scripts/arco') +Interburbulator = require('scripts/interburbulator') +LinkedContainer = require('scripts/linked-container') + +Ancient = require('scripts/ancient') +DAnchor = require('scripts/dimensional-anchor') +Ruin = require('scripts/ruin') + +Informatron = require('scripts/informatron') + +require('scripts/compatibility/miniloaders') +EntityMove = require('scripts/compatibility/entity-move') +AbandonedRuins = require('scripts/compatibility/abandoned-ruins') + +Migrate = require('scripts/migrate') + +sp_tile_scaffold = mod_prefix.."space-platform-scaffold" +sp_tile_plate = mod_prefix.."space-platform-plating" +name_space_tile = mod_prefix.."space" +name_out_of_map_tile = "out-of-map" +space_tiles = { + name_space_tile +} +name_asteroid_tile = mod_prefix.."asteroid" + +tiles_allowed_in_space = { + name_out_of_map_tile, + name_space_tile, + name_asteroid_tile, + sp_tile_scaffold, + sp_tile_plate, + mod_prefix .. "spaceship-floor", + "transport-drone-road", + "transport-drone-proxy-tile", +} + +name_fluid_rocket_fuel = mod_prefix.."liquid-rocket-fuel" +name_thermofluid_hot = mod_prefix.."space-coolant-hot" +name_thermofluid_supercooled = mod_prefix.."space-coolant-supercooled" +name_suffix_spaced = "-spaced" +name_suffix_grounded = "-grounded" + +name_thruster_suits = { + mod_prefix.."thruster-suit", + mod_prefix.."thruster-suit-2", + mod_prefix.."thruster-suit-3", + mod_prefix.."thruster-suit-4", +} +base_space_thrust = 1 +thruster_suit_thrust = { + [mod_prefix.."thruster-suit"] = 2, + [mod_prefix.."thruster-suit-2"] = 3, + [mod_prefix.."thruster-suit-3"] = 4, + [mod_prefix.."thruster-suit-4"] = 5, +} + +first_starting_item_stacks = { + {name = mod_prefix.."medpack", count = 5}, + {name = mod_prefix.."capsule-big-biter", count = 1}, +} +starting_item_stacks = { + {name = mod_prefix.."medpack", count = 1} +} + +suffocation_interval = 120 + +collision_player = mod_prefix.."collision-player" +collision_player_not_space = mod_prefix.."collision-player-not-space" +collision_rocket_destination_surface = mod_prefix.."collision-rocket-destination-surface" +collision_rocket_destination_orbit = mod_prefix.."collision-rocket-destination-orbital" + + +function get_make_playerdata(player) + global.playerdata = global.playerdata or {} + global.playerdata[player.index] = global.playerdata[player.index] or {} + return global.playerdata[player.index] +end + +function player_set_dropdown_values(player, key, values) + local playerdata = get_make_playerdata(player) + playerdata.dropdown_values = playerdata.dropdown_values or {} + playerdata.dropdown_values[key] = values +end + +function player_get_dropdown_value(player, key, index) + local playerdata = get_make_playerdata(player) + if playerdata.dropdown_values and playerdata.dropdown_values[key] then + return playerdata.dropdown_values[key][index] + end +end + +function player_clear_dropdown_values(player, key) + local playerdata = get_make_playerdata(player) + if playerdata.dropdown_values then playerdata.dropdown_values[key] = nil end +end + +function player_clear_all_dropdown_values(player) + local playerdata = get_make_playerdata(player) + playerdata.dropdown_values = nil +end + +function player_get_character(player) + if player.character then return player.character end + local playerdata = get_make_playerdata(player) + if playerdata.character then + if playerdata.character.valid then + return playerdata.character + else + playerdata.character = nil + end + end +end + +-- creation must contain position +-- returns entity, position +function create_non_colliding(surface, creation, radius, precision) + radius = radius or 32 + precision = precision or 1 + local try_pos = creation.position + local safe_pos = surface.find_non_colliding_position(creation.name, try_pos, radius, 1)or try_pos + creation.position = safe_pos + return surface.create_entity(creation), safe_pos +end + +-- returns entity, position +function teleport_non_colliding(entity, position, radius, precision) + if entity then + radius = radius or 32 + precision = precision or 1 + local try_pos = position + local safe_pos = entity.surface.find_non_colliding_position(entity.name, try_pos, radius, 1) or try_pos + entity.teleport(safe_pos) + return entity, safe_pos + end +end + +function teleport_non_colliding_player(player, position, surface, radius, precision) + surface = surface or player.surface + radius = radius or 32 + precision = precision or 1 + local try_pos = position + local safe_pos = surface.find_non_colliding_position(player.character.name, try_pos, radius, 1) or try_pos + player.teleport(safe_pos, surface) + return player, safe_pos +end + +function teleport_character_to_surface(character, surface, position) + local try_pos = position + local safe_pos = surface.find_non_colliding_position(character.name, try_pos, 32, 1) or try_pos + if surface == character.surface then + -- easy + character.teleport(safe_pos) + return character, safe_pos + end + local zone = Zone.from_surface(surface) + if zone then + Zone.discover(character.force.name, zone) + end + if character.player then + -- use the player to do it + local player = character.player + player.teleport(safe_pos, surface) -- surface change breaks character reference + local playerdata = get_make_playerdata(player) + playerdata.last_position = nil + playerdata.set_postition = nil + playerdata.velocity = nil + return player.character, safe_pos + end + + -- attach a player to do it + for player_index, playerdata in pairs(global.playerdata) do + local player = game.players[player_index] + if player and player.connected then + if RemoteView.is_active(player) and playerdata.character and playerdata.character == character then + local player_pos = player.position + local player_surface = player.surface + player.teleport(playerdata.character.position, playerdata.character.surface) + player.set_controller{type = defines.controllers.character, character = playerdata.character} + player.teleport(safe_pos, surface) -- surface change breaks character reference + playerdata.character = player.character + player.set_controller{type = defines.controllers.ghost} + --player.set_controller{type = defines.controllers.spectator} + player.teleport(player_pos, player_surface) + playerdata.last_position = nil + playerdata.set_postition = nil + playerdata.velocity = nil + Log.trace("character moved by reassociation") + return playerdata.character, safe_pos + end + end + end + + -- clone the character and destroy the original + -- what could possibly go wrong? + surface.clone_entities{ + entities = {character}, + destination_offset = util.vectors_delta(character.position, safe_pos), + destination_surface = surface, + destination_force = character.force, + snap_to_grid = false + } + local candidate = surface.find_entity(character.name, safe_pos) + if candidate and candidate.player == nil + and candidate.color.r == character.color.r + and candidate.color.g == character.color.g + and candidate.color.b == character.color.b then + candidate.teleport(safe_pos) + for player_index, playerdata in pairs(global.playerdata) do + if playerdata.character and playerdata.character == character then + playerdata.character = candidate + end + end + character.destroy() + Log.trace("character moved by cloning") + return clone, safe_pos + end + local candidates = surface.find_entities_filtered{ + type = character.type, + name = character.name, + force = character.force + } + for _, candidate in pairs(candidates) do + if candidate.player == nil + and candidate.color.r == character.color.r + and candidate.color.g == character.color.g + and candidate.color.b == character.color.b then + candidate.teleport(safe_pos) + + for player_index, playerdata in pairs(global.playerdata) do + if playerdata.character and playerdata.character == character then + playerdata.character = candidate + end + end + character.destroy() + Log.trace("character moved by cloning") + return clone, safe_pos + end + end + + Log.trace("character move by cloning but failed") + -- failed + return nil, safe_pos +end + +function surface_set_area_tiles(data) + -- data.surface + -- data.name (tile type) + -- data.area + if not (data.surface and data.name and data.area) then return end + + local tiles = {} + for y = data.area.left_top.y, data.area.right_bottom.y, 1 do + for x = data.area.left_top.x, data.area.right_bottom.x, 1 do + table.insert(tiles, { + name = data.name, + position = {x = x, y = y}}) + end + end + data.surface.set_tiles(tiles, true) +end + +function surface_set_space_tiles(data) + -- data.surface + -- data.area + if not (data.surface and data.area) then return end + + local tiles = {} + for y = data.area.left_top.y, data.area.right_bottom.y, 1 do + for x = data.area.left_top.x, data.area.right_bottom.x, 1 do + table.insert(tiles, { + name = name_space_tile, + position = {x = x, y = y}}) + end + end + data.surface.set_tiles(tiles, true) +end + +function position_2d_array_add(array, position) + if not array[position.y] then array[position.y] = {} end + if not array[position.y][position.x] then array[position.y][position.x] = position end +end + +function position_2d_array_add_range(array, position, range) + for y = position.y - range, position.y + range, 1 do + for x = position.x - range, position.x + range, 1 do + position_2d_array_add(array, {x = x, y = y}) + end + end +end + +function tile_is_space(tile) + for _, name in pairs(space_tiles) do + if tile.name == name then return true end + end + return false +end + +function tile_is_space_platform(tile) + return tile.name == sp_tile_plate or tile.name == sp_tile_scaffold +end + +function tile_is_space_platform(tile) + return tile.name == sp_tile_plate or tile.name == sp_tile_scaffold +end + + +--[[function on_player_created(event) + --local player = game.players[event.player_index] + --TODO: capsule crash sequence +end +Event.addListener(defines.events.on_player_created, on_player_created)]]-- + +function close_own_guis(player) + -- NOTE: don't close remote view gui here + Capsule.gui_close(player) + SpaceshipGUI.gui_close(player) + --player_clear_all_dropdown_values(player) +end + + +--[[ + tag: { + surface_name (optional) + force_name + position + icon_type (item/virtual) + icon_name + text + chart_range (optional) + } +]] +function chart_tag_buffer_add(tag) + local surface = tag.surface + local force_name = tag.force_name + local force = game.forces[force_name] + local range = tag.chart_range or Zone.discovery_scan_radius + + force.chart(surface, util.position_to_area(tag.position, range)) + + global.chart_tag_buffer = global.chart_tag_buffer or {} + global.chart_tag_next_id = (global.chart_tag_next_id or 0) + 1 + global.chart_tag_buffer[global.chart_tag_next_id] = tag +end + +function process_chart_tag_buffer() + if global.chart_tag_buffer then + local tags_remaining = 0 + for _, tag in pairs(global.chart_tag_buffer) do + local surface = tag.surface + local force_name = tag.force_name + local force = game.forces[force_name] + if force then + local chart_tag = force.add_chart_tag(surface, { + icon = {type = tag.icon_type, name = tag.icon_name}, + position = tag.position, + text = tag.text + }) + if chart_tag then + global.chart_tag_buffer[_] = nil + else + tags_remaining = tags_remaining + 1 + end + else + global.chart_tag_buffer[_] = nil + end + end + if tags_remaining == 0 then + -- cleanup + global.chart_tag_buffer = nil + global.chart_tag_next_id = nil + end + end +end + +function player_capture_selected(player) + local playerdata = get_make_playerdata(player) + if playerdata.capture_text and rendering.is_valid(playerdata.capture_text) then + rendering.destroy(playerdata.capture_text) + end + local entity = player.selected + if entity and (entity.force.name == "capture" or entity.force.name == "conquest") and entity.type ~= "wall" then + local range = 1 + local box = entity.bounding_box + local pos = player.position + if player.character and pos.x > box.left_top.x - range + and pos.x < box.right_bottom.x + range + and pos.y > box.left_top.y - range + and pos.y < box.right_bottom.y + range then + local blocker = entity.surface.find_nearest_enemy{position=entity.position, max_distance=32, force=player.force} + if blocker then + entity.surface.create_entity{ + name = "flying-text", + position = entity.position, + text = {"space-exploration.capture-blocked"}, + render_player_index = player.index, + } + else + entity.force = player.force + local zone = Zone.from_surface(entity.surface) + if zone then + local inventory = entity.get_inventory(defines.inventory.chest) + if inventory then + for _, item_name in pairs(Ruin.track_loot_items) do + local count = inventory.get_item_count(item_name) + if count > 0 then + zone.looted_items = zone.looted_items or {} + zone.looted_items[item_name] = (zone.looted_items[item_name] or 0) + count + end + end + end + end + end + else + if not Util.table_contains( + {"turret", "ammo-turret", "electric-turret", "fluid-turret", "artillery-turret", + "combat-robot", "logistic-robot", "construction-robot", + "wall", "gate"}, entity.type) then + playerdata.capture_text = rendering.draw_text{ + text = {"space-exploration.touch-to-capture"}, + surface = entity.surface, + target = entity, + target_offset = {0, -0.5}, + players={player}, + color={r=0.8,g=0.8,b=0.8,a=0.8}, + alignment="center", + scale = (1 + box.right_bottom.x-box.left_top.x)/3, + } + end + end + end +end + +function on_selected_entity_changed(event) + local player = game.players[event.player_index] + player_capture_selected(player) +end +Event.addListener(defines.events.on_selected_entity_changed, on_selected_entity_changed) + + +function get_selected_index(array, current) + local i = 0 + for _, item in ipairs(array) do + i = i + 1 + if item == current then return i end + end +end + +function get_dropdown_string(element, relevant_value) + if not relevant_value then relevant_value = 1 end + if element.selected_index and element.items[element.selected_index] then + local selected = element.items[element.selected_index] + if type(selected) == "string" then + return selected + elseif type(selected) == "table" and selected[relevant_value] then + return selected[relevant_value] + end + end +end + +function selected_name_from_dropdown_preset(element, preset) + -- options eg: destination_type_options + + local selected_string = get_dropdown_string(element) + for _, option in pairs(preset) do + if type(option.display) == "string" then + if option.display == selected_string then + return option.name + end + elseif type(option.display) == "table" and option.display[1] == selected_string then + return option.name + end + end +end + +function dropdown_from_preset(preset, current) + -- options eg: destination_type_options + local selected_index + local list = {} + for _, option in pairs(preset) do + table.insert(list, option.display) + if option.name == current then selected_index = #list end + end + return list, selected_index +end + +function count_inventory_slots_used(inv) + return #inv - inv.count_empty_stacks() +end + +function gui_element_or_parent(element, name) + if not (element and element.valid) then return end + if element.name == name then + return element + elseif element.parent then + return gui_element_or_parent(element.parent, name) + end +end + +function on_tick_player(player) + + local playerdata = get_make_playerdata(player) + + --on_tick_player_gui(player) + + -- save position + playerdata.surface_positions = playerdata.surface_positions or {} + playerdata.surface_positions[player.surface.index] = player.position +end + +function on_surface_deleted(event) + if global.playerdata then + for _, playerdata in pairs(global.playerdata) do + if playerdata.surface_positions then + playerdata.surface_positions[event.surface_index] = nil + end + end + end + Zone.rebuild_surface_index() +end +Event.addListener(defines.events.on_surface_deleted, on_surface_deleted) + + +function on_marked_for_deconstruction(event) + if event.entity and event.entity.valid and event.entity.type == "deconstructible-tile-proxy" then + local position = event.entity.position + local area = Util.tile_to_area(position) + local surface = event.entity.surface + local tile_under = surface.get_hidden_tile(position) + if tile_under then + local tile_proto = game.tile_prototypes[tile_under] + local collision_mask = {} + for name, blocks in pairs(tile_proto.collision_mask) do + if blocks then table.insert(collision_mask, name) end + end + local blocking_entities = 0 + for _, entity in pairs(event.entity.surface.find_entities_filtered{area = area, collision_mask = collision_mask}) do + if entity.type ~= "deconstructible-tile-proxy" and entity.type ~= "corpse" then + blocking_entities = blocking_entities + 1 + end + end + if blocking_entities > 0 then + event.entity.destroy() + --[[surface.create_entity{ + name = "flying-text", + position = position, + text = "Blocked", + render_player_index = event.player_index, + }]] + end + end + end +end +Event.addListener(defines.events.on_marked_for_deconstruction, on_marked_for_deconstruction) + +function is_character_passenger(character) + if character and character.vehicle then return true end + if global.tick_tasks then + for _, tick_task in pairs(global.tick_tasks) do + if tick_task.passengers then + for _, passenger in pairs(tick_task.passengers) do + if passenger == character then + return true + end + end + end + end + end + return false +end + +function on_player_changed_position(event) + local player = game.players[event.player_index] + if not player.character then return end + local playerdata = get_make_playerdata(player) + player_capture_selected(player) + local zone = Zone.from_surface(player.surface) + if zone then + if player.vehicle and player.vehicle.type == "spider-vehicle" then + local tile = player.surface.get_tile(player.vehicle.position) + if tile.name == "interior-divider" then + playerdata.interior_divider_collisions = (playerdata.interior_divider_collisions or 0) + 1 + local max_health = player.vehicle.prototype.max_health + player.vehicle.health = math.min(max_health - max_health * playerdata.interior_divider_collisions / 10, player.vehicle.health - player.vehicle.health / 10) + if player.vehicle.health <= 1 then + player.vehicle.die() + playerdata.interior_divider_collisions = nil + teleport_non_colliding_player(player, player.position) + end + end + end + -- track visited + if not playerdata.visited_zone then playerdata.visited_zone = {} end + if zone.type ~= "spaceship" and not playerdata.visited_zone[zone.index] then playerdata.visited_zone[zone.index] = game.tick end + + if (not playerdata.has_entered_anomaly) and zone.type == "anomaly" and player.character then + playerdata.has_entered_anomaly = true + player.print({"space-exploration.galaxy_ship_authenticated"}) + for _, entity in pairs(player.surface.find_entities_filtered{force="ignore"}) do + entity.force = "friendly" + end + player.force.chart(player.surface, util.position_to_area(Ancient.galaxy_ship_default_position, 2)) + player.force.chart_all(player.surface) + end + if zone.vault_pyramid_position then + if (not player.vehicle) then + if not (zone.vault_pyramid and zone.vault_pyramid.valid) then + -- make the pyramid again. + Ancient.make_vault_exterior(zone) + end + -- check if touching the pyramid + local x_test = Ancient.pyramid_width/2 + local y_test = Ancient.pyramid_height/2 + local buffer = 1 + if player.position.x < zone.vault_pyramid_position.x + x_test + buffer + and player.position.x > zone.vault_pyramid_position.x - x_test - buffer + and player.position.y < zone.vault_pyramid_position.y + y_test + buffer + and player.position.y > zone.vault_pyramid_position.y - y_test - buffer then + if (not string.find(player.character.name, "jetpack", 1, true)) and (not is_character_passenger(player.character)) then + Ancient.make_vault_interior(zone) + local vault = global.glyph_vaults[zone.glyph][zone.index] + local vault_surface = game.surfaces[vault.surface_index] + player.teleport({0, Ancient.cartouche_path_end-2}, vault_surface) + local corpses = vault_surface.find_entities_filtered{type="corpse"} + for _, corpse in pairs(corpses) do corpse.destroy() end + if not playerdata.first_entered_vault then + playerdata.first_entered_vault = zone + end + end + end + end + end + else -- no zone + local vault = Ancient.vault_from_surface(player.surface) + if vault then + -- check if on the entrance/exit section + if player.position.x <=4 and player.position.x >= -4 and player.position.y > Ancient.cartouche_path_end -1 and player.position.y < Ancient.cartouche_path_end +1 then + local zone = Zone.from_zone_index(vault.zone_index) + local zone_surface = Zone.get_make_surface(zone) + local pos = table.deepcopy(zone.vault_pyramid_position) or {x = 0, y = 0} + pos.y = pos.y + Ancient.pyramid_height/2 + 1 + teleport_character_to_surface(player.character, zone_surface, pos) + end + end + end +end +Event.addListener(defines.events.on_player_changed_position, on_player_changed_position) + + +function on_trigger_created_entity(event) + if event.entity and event.entity.valid and event.entity.name == mod_prefix.."trigger-movable-debris" then + -- meteor and rocket fragments + + local surface = event.entity.surface + local deconstruct = false + for force in pairs(game.forces) do + local networks = surface.find_logistic_networks_by_construction_area(event.entity.position, force) + if networks and #networks > 0 then + for _, network in pairs(networks) do + if network.storages and #network.storages > 1 then + local entities = surface.find_entities_filtered{position = event.entity.position, type = "simple-entity"} + for _, entity in pairs(entities) do + entity.order_deconstruction(force) + deconstruct = true + end + end + end + end + end + local tile = surface.get_tile(event.entity.position.x, event.entity.position.y) + local meteors = surface.find_entities_filtered{ type = "simple-entity", area = Util.position_to_area(event.entity.position, 1) } + for _, meteor in pairs(meteors) do + if string.find(meteor.name, "meteor", 1, true) then + if tile.collides_with("player-layer") or tile_is_space(tile) then + meteor.destroy() + else + -- This is a temporary solution. In the future the meteor swarm will be randomy assigned to be biological 30% of the time for vitamelange planets. + local zone = Zone.from_surface(surface) + if zone.controls and zone.controls["se-vitamelange"] and zone.controls["se-vitamelange"].richness > 0 then + local r = math.random() + if r < 0.1 then + surface.create_entity{name="behemoth-worm-turret", force="enemy", position=meteor.position} + elseif r < 0.5 then + surface.create_entity{name="spitter-spawner", force="enemy", position=meteor.position} + else + surface.create_entity{name="biter-spawner", force="enemy", position=meteor.position} + end + meteor.destroy() + end + end + end + end + end +end +Event.addListener(defines.events.on_trigger_created_entity, on_trigger_created_entity) + +function cancel_entity_creation(entity, player_index, message) + -- put an item back in the inventory or drop to ground + -- display flying text + local player + if player_index then + player = game.players[player_index] + end + local inserted = 0 + local item_to_place = entity.prototype.items_to_place_this[1] + local surface = entity.surface + local position = entity.position + if player then + if player.mine_entity(entity, false) then + inserted = 1 + elseif item_to_place and item_to_place.name then + inserted = player.insert{name = item_to_place.name, count = 1} + end + -- play entity cannot build sound + player.play_sound{ + path = "utility/cannot_build", + volume_modifier = 1.0 + } + end + if inserted == 0 and item_to_place and item_to_place.name then + surface.create_entity{ + name = "item-on-ground", + position = position, + stack = {name = item_to_place.name, count = 1} + } + end + surface.create_entity{ + name = "flying-text", + position = position, + text = message, + render_player_index = player_index, + } + if entity and entity.valid then + entity.destroy() + end +end + +function cancel_tile_placement(surface, tile, old_tiles, player_index, message) + -- put an item back in the inventory or drop to ground + -- display flying text + local player + if player_index then + player = game.players[player_index] + if player.controller_type == defines.controllers.editor then + -- tile placement could be allowed for testing but it will create errors further down the line so this should not be enabled. + -- e.g: + -- space platform on a spaceship surface will break cause errors. + -- water and/or land in space will cause entity problems. + -- space surfaces on planets will cause entity problems and maybe errors. + end + end + local set_tiles = {} + for i, old_tile in pairs(old_tiles) do + if tile.items_to_place_this and tile.items_to_place_this[1] then + local inserted = 0 + if player then + inserted = player.insert{name = tile.items_to_place_this[1].name, count = 1} + end + if inserted == 0 then + surface.create_entity{ + name = "item-on-ground", + position = old_tile.position, + --["item-entity"] = {name = tile.items_to_place_this[1].name, count = 1} + stack = {name = tile.items_to_place_this[1].name, count = 1} + } + end + end + if i == 1 then + surface.create_entity{ + name = "flying-text", + position = old_tile.position, + text = message, + render_player_index = player_index, + } + end + local hidden = surface.get_hidden_tile(old_tile.position) + table.insert(set_tiles, {name = hidden or old_tile.old_tile.name, position = old_tile.position}) + end + surface.set_tiles(set_tiles) +end + +function swap_structure(entity, prototype_name) + local surface = entity.surface + local recipe = entity.get_recipe() + local clone = surface.create_entity{ + name = prototype_name, + position = entity.position, + force = entity.force, + direction = entity.direction, + recipe = recipe and recipe.name + } + clone.operable = entity.operable + clone.active = entity.active + clone.destructible = entity.destructible + clone.rotatable = entity.rotatable + local inventories = {} + for _, inv_type in pairs({ + defines.inventory.fuel, + defines.inventory.burnt_result, + defines.inventory.furnace_source, + defines.inventory.furnace_result, + defines.inventory.furnace_modules, + defines.inventory.assembling_machine_input, + defines.inventory.assembling_machine_output, + defines.inventory.assembling_machine_modules + }) do + inventories[inv_type] = inv_type -- no duplicate indexes + end + for _, inv_type in pairs(inventories) do + local inv_a = entity.get_inventory(inv_type) + local inv_b = clone.get_inventory(inv_type) + if inv_a and inv_b then + util.move_inventory_items(inv_a, inv_b) + end + end + entity.destroy() + clone.teleport(clone.position) -- reconnect pipes + return clone +end + +function is_surface_space(surface) + local zone = Zone.from_surface(surface) + if zone and Zone.is_space(zone) then + return true + elseif surface and surface.name and string.starts(surface.name, "Space Factory") then -- Space Factorissimo compatibility + return true + end + return false +end + +function on_entity_created(event) + local entity + if event.entity and event.entity.valid then + entity = event.entity + end + if event.created_entity and event.created_entity.valid then + entity = event.created_entity + end + if (not entity) or entity.type == "entity-ghost" or entity.type == "tile-ghost" then return end + + if entity.type ~= "deconstructible-tile-proxy" and entity.type ~= "car" and entity.type ~= "spider-vehicle" then + local area = entity.bounding_box + local surface = entity.surface + local proxies = surface.find_entities_filtered{area = area, type = "deconstructible-tile-proxy"} + for _, proxy in pairs(proxies) do + proxy.destroy() + end + end + + if is_surface_space(entity.surface) then + if (entity.type == "car") + and (not string.find(entity.name, mod_prefix.."space", 1, true)) + and entity.prototype.effectivity > 0 then + return cancel_entity_creation(entity, event.player_index, {"space-exploration.construction-denied-vehicle-in-space"}) + end + if game.entity_prototypes[entity.name..name_suffix_spaced] then + -- replace with spaced + return swap_structure(entity, entity.name..name_suffix_spaced) + end + if string.find(entity.name, name_suffix_grounded, 1, true) then + -- replace with non-grounded + return swap_structure(entity, util.replace(entity.name, name_suffix_grounded, "")) + end + if entity.type == "offshore-pump" then + return cancel_entity_creation(entity, event.player_index, {"space-exploration.construction-denied"}) + end + else -- not space + if string.find(entity.name, name_suffix_spaced, 1, true) then + -- replace with non-spaced + return swap_structure(entity, util.replace(entity.name, name_suffix_spaced, "")) + end + if game.entity_prototypes[entity.name..name_suffix_grounded] then + -- replace with grounded + return swap_structure(entity, entity.name..name_suffix_grounded) + end + if zone and entity.name == "kr-atmospheric-condenser" and (not zone.is_homeworld) and zone.tags and util.table_contains(zone.tags, "water_none") then + return cancel_entity_creation(entity, event.player_index, {"space-exploration.construction-denied-no-water"}) + end + if zone and entity.type == "offshore-pump" and (not zone.is_homeworld) and zone.tags and util.table_contains(zone.tags, "water_none") then + if entity.prototype.fluid == "water" then -- there is no water on this planet, send via rocket, cannon, or ship + return cancel_entity_creation(entity, event.player_index, {"space-exploration.construction-denied-no-water"}) + end + end + end + +end +Event.addListener(defines.events.on_robot_built_entity, on_entity_created) +Event.addListener(defines.events.on_built_entity, on_entity_created) +Event.addListener(defines.events.script_raised_built, on_entity_created) +Event.addListener(defines.events.script_raised_revive, on_entity_created) + +--[[ +When the player kills themself by placing water under themselves, the on_built_tile event does not fire. +Instead we listen to the on_player_died event, and replace any nearby water tiles with some non-water tile next to it. +]] +function on_pre_player_died(event) + local player = game.players[event.player_index] + local zone = Zone.from_surface(player.surface) + if (not zone) or Zone.is_solid(zone) then -- treat as land + if zone and (not zone.is_homeworld) and (zone.tags and (util.table_contains(zone.tags, "water_none"))) then + -- water should not be here + local area = {left_top = {player.position.x - 20, player.position.y - 20}, right_bottom = {player.position.x + 20, player.position.y + 20}} + local tick_task = new_tick_task("remove-water") + tick_task.delay_until = game.tick + 1 + tick_task.surface = player.surface + tick_task.area = area + tick_task.position = player.position + end + end +end +Event.addListener(defines.events.on_pre_player_died, on_pre_player_died) + +function remove_water_tiles(surface, area, position) + local bad_tiles = {} + local good_tile_name + for _, tile in pairs(surface.find_tiles_filtered({ + area = area + })) do + if string.find(tile.name, "water", 1, true) then + table.insert(bad_tiles, tile) + else + good_tile_name = tile.name + end + end + if not good_tile_name then -- if we cant find a tile type to replace the water with use landfill as a default + good_tile_name = "landfill" + end + if #bad_tiles > 0 then + -- there is no water on this planet, send via rocket, cannon, or ship + surface.create_entity({ + name = "flying-text", + position = position, + text = {"space-exploration.construction-denied-no-water"} + }) + local tiles = {} + for _, tile in pairs(bad_tiles) do + table.insert(tiles, { + name = good_tile_name, + position = tile.position + }) + end + surface.set_tiles(tiles) + end +end + +function on_built_tile(event) + if not event.surface_index then return end + local surface = game.surfaces[event.surface_index] + if not surface then return end + local player + local tile = event.tile -- top left tile + local old_tiles = event.tiles -- all tiles over a large square + local stack = event.stack -- used to create, may be empty + + for _, old_tile in pairs(old_tiles) do + if old_tile.old_tile.name == "interior-divider" then + if tile.name == "transport-drone-proxy-tile" then return error("Invalid map state") end + return cancel_tile_placement(surface, tile, old_tiles, event.player_index, {"space-exploration.construction-denied"}) + end + end + --tile_is_space(tile) + local zone = Zone.from_surface(surface) + -- temp due to issue with transport drones script + if tile.name == "transport-drone-proxy-tile" then return end + + if (not zone) or Zone.is_solid(zone) then -- treat as land + if Util.table_contains(tiles_allowed_in_space, tile.name) and tile.name ~= name_out_of_map_tile and tile.name ~= "transport-drone-road" and tile.name ~= "transport-drone-proxy-tile" then + if not (zone and Util.table_contains(Spaceship.names_spaceship_floors, tile.name)) then + return cancel_tile_placement(surface, tile, old_tiles, event.player_index, {"space-exploration.construction-denied"}) + end + elseif string.find(tile.name, "water", 1, true) then + if zone and (not zone.is_homeworld) and (zone.tags and (util.table_contains(zone.tags, "water_none"))) then + -- should not be here + return cancel_tile_placement(surface, tile, old_tiles, event.player_index, {"space-exploration.construction-denied-no-water"}) + end + end + else -- treat as space + if zone.type == "spaceship" and (not Util.table_contains(Spaceship.names_spaceship_floors, tile.name)) then + return cancel_tile_placement(surface, tile, old_tiles, event.player_index, {"space-exploration.construction-denied"}) + elseif not Util.table_contains(tiles_allowed_in_space, tile.name) then + return cancel_tile_placement(surface, tile, old_tiles, event.player_index, {"space-exploration.construction-denied"}) + end + end +end +Event.addListener(defines.events.on_player_built_tile, on_built_tile) +Event.addListener(defines.events.on_robot_built_tile, on_built_tile) + +function on_script_raised_set_tiles(event) + if not event.surface_index then return end + local surface = game.surfaces[event.surface_index] + if not surface then return end + + local zone = Zone.from_surface(surface) + local set_tiles = {} + for _, tile in pairs(event.tiles) do + if (not zone) or Zone.is_solid(zone) then -- treat as land + if Util.table_contains(tiles_allowed_in_space, tile.name) and tile.name ~= "transport-drone-road" and tile.name ~= "transport-drone-proxy-tile" then + if not (zone and Util.table_contains(Spaceship.names_spaceship_floors, tile.name)) then + table.insert(set_tiles, {name="mineral-black-dirt-1", position=tile.position}) + end + elseif string.find(tile.name, "water", 1, true) then + if zone and (not zone.is_homeworld) and (zone.tags and (util.table_contains(zone.tags, "water_none"))) then + -- should not be here + table.insert(set_tiles, {name="mineral-black-dirt-1", position=tile.position}) + end + end + else -- treat as space + if zone.type == "spaceship" and (not Util.table_contains(Spaceship.names_spaceship_floors, tile.name)) then + table.insert(set_tiles, {name=name_space_tile, position=tile.position}) + elseif not Util.table_contains(tiles_allowed_in_space, tile.name) then + table.insert(set_tiles, {name=name_space_tile, position=tile.position}) + end + end + end + if #set_tiles > 0 then + surface.set_tiles(set_tiles, true) -- DO NOT raise an event or it might cause a loop + end +end +Event.addListener(defines.events.script_raised_set_tiles, on_script_raised_set_tiles) + +function spiral_next(input) + local x = input.x + local y = input.y + local output = table.deepcopy(input) + if x > y and x >= -y then + output.y = y + 1 + elseif -y >= -x and -y > x then + output.x = x + 1 + elseif -x > y and -x > -y then + output.y = y - 1 + elseif y >= -x and y > x then + output.x = x - 1 + else + output.x = x - 1 + end + return output +end + +function zigzag_next(input, y_limit) + local x = input.x + local y = input.y + local output = table.deepcopy(input) + if y > -y_limit then + output.y = y - 1 + elseif x >= 0 then + output.x = -x - 1 + output.y = y_limit + else + output.x = -x + output.y = y_limit + end + return output +end + +function chart_position(force, surface, position) + force.chart(surface, { + { + x = position.x*32, + y = position.y*32 + }, + { + x = (position.x+0.5)*32, -- +1 actually scanes 4 chunks + y = (position.y+0.5)*32 -- +1 actually scanes 4 chunks + } + }) +end +function process_force_scanning(forcedata, force) + if forcedata.is_scanning and forcedata.scanning_zone then + local y_limit = nil + if forcedata.scanning_zone.type == "asteroid-belt" or forcedata.scanning_zone.type == "orbit" then + y_limit = 8 -- changes spiral pattern to different method + if not forcedata.scanning_cursor then + forcedata.scanning_cursor = {x=0,y=16} + end + else + if not forcedata.scanning_cursor then + forcedata.scanning_cursor = {x=0,y=0} + end + end + local surface = Zone.get_surface(forcedata.scanning_zone) + if not surface then + forcedata.is_scanning = nil + forcedata.scanning_zone = nil + forcedata.scanning_cursor = nil + return + end + if forcedata.scanning_zone.radius and -- exit if out of bounds + ((math.abs(forcedata.scanning_cursor.x) - 1.5)*32 > forcedata.scanning_zone.radius + or (math.abs(forcedata.scanning_cursor.y) - 1.5)*32 > forcedata.scanning_zone.radius) then + forcedata.is_scanning = nil + forcedata.scanning_zone = nil + forcedata.scanning_cursor = nil + return + end + local search_budget = settings.global["se-scan-search-budget"].value -- 1000 + local searched = 0 + local chart_budget = settings.global["se-scan-chart-budget"].value -- 10 + local charted = 0 + local cursor = table.deepcopy(forcedata.scanning_cursor) + while searched < search_budget and charted < chart_budget do + searched = searched + 1 + if (not forcedata.scanning_zone.radius) or (Util.vector_length(cursor) - 1.5)*32 < forcedata.scanning_zone.radius then + if force.is_chunk_charted(surface, cursor) then + forcedata.scanning_cursor = cursor + else + charted = charted + 1 + chart_position(force, surface, cursor) + end + else -- outside radius + if charted == 0 then -- skip ahead + forcedata.scanning_cursor = cursor + end + end + if y_limit then + cursor = zigzag_next(cursor, y_limit) + else + cursor = spiral_next(cursor) + end + end + + if settings.global["se-scan-alert-interval"].value > 0 then + if game.tick % (60 * settings.global["se-scan-alert-interval"].value) == 0 then + force.print({"space-exploration.scan-progress-update", forcedata.scanning_zone.name, cursor.x, cursor.y}) + end + end + + end +end + +function process_forces_scanning() + for force_name, forcedata in pairs(global.forces) do + local force = game.forces[force_name] + if not force then + global.forces[force_name] = nil + else + process_force_scanning(forcedata, force) + end + end +end + +function on_tick() + + process_chart_tag_buffer() + + if game.tick % 60 == 0 then -- varaible rate + process_forces_scanning() + end + + for _, player in pairs(game.connected_players) do + on_tick_player(player) + end + + for _, tick_task in pairs(global.tick_tasks) do + if (not tick_task.delay_until) or game.tick >= tick_task.delay_until then + if tick_task.type == "chain-beam" then + Weapon.chain_beam(tick_task) + elseif tick_task.type == "plague-tick" then + Weapon.plague_tick(tick_task) + elseif tick_task.type == "cryogun-unfreeze" then + Weapon.cryogun_unfreeze(tick_task) + elseif tick_task.type == "bind-corpse" then + Respawn.tick_task_bind_corpse(tick_task) + elseif tick_task.type == "launchpad-journey" then + Launchpad.tick_journey(tick_task) + elseif tick_task.type == "grow_energy_tree" then + EnergyBeam.grow_energy_tree(tick_task) + elseif tick_task.type == "solar-flare" then + SolarFlare.tick_flare(tick_task) + elseif tick_task.type == "force-message" then + if tick_task.force_name then + local force = game.forces[tick_task.force_name] + if force then + force.print(tick_task.message) + end + end + tick_task.valid = false + elseif tick_task.type == "remove-water" then + remove_water_tiles(tick_task.surface, tick_task.area, tick_task.position) + tick_task.valid = false + else + tick_task.valid = false + end + if not tick_task.valid then + global.tick_tasks[tick_task.id] = nil + end + end + end + +end +Event.addListener(defines.events.on_tick, on_tick) + +function new_tick_task(type) + global.next_tick_task_id = global.next_tick_task_id or 1 + local new_tick_task = { + id = global.next_tick_task_id, + valid = true, + type = type + } + global.tick_tasks[new_tick_task.id] = new_tick_task + global.next_tick_task_id = global.next_tick_task_id + 1 + return new_tick_task +end + +function on_entity_damaged (event) + if event.entity and event.entity.valid and event.entity.name ~= "shield-projector-barrier" then + if event.entity.health < 0 and event.entity.active == false then + event.entity.destroy() + end + end +end +Event.addListener(defines.events.on_entity_damaged, on_entity_damaged) + +function build_satellite(force_name) + Log.debug_log("build_satellite: " .. force_name) + local home_zone = Zone.get_force_home_zone(force_name) + if not home_zone then home_zone = Zone.get_default() end + local zone = home_zone.orbit + local surface = Zone.get_make_surface(zone) + local satellite_position = Zone.find_zone_landing_position(zone, { + x = (-0.5+math.random()) * 256, + y = (-0.5+math.random()) * 64}) + + surface.request_to_generate_chunks(satellite_position, 2) + surface.force_generate_chunk_requests() -- must be generated to place + + Ruin.build({ + ruin_name = "satellite", + surface_index = surface.index, + position = satellite_position, + force_name_override = force_name + }) + local range = Zone.discovery_scan_radius + game.forces[force_name].chart(surface, { + {satellite_position.x - range, satellite_position.y - range}, + {satellite_position.x + range, satellite_position.y + range} + }) + game.forces[force_name].print({"space-exploration.satellite-discovered-platform", zone.name}) + chart_tag_buffer_add({ + force_name = force_name, + surface = Zone.get_make_surface(zone), + position = satellite_position, + icon_type = "item", + icon_name = "satellite", + text = "Space Platform", + chart_range = Zone.discovery_scan_radius, + }) + global.forces[force_name].nauvis_satellite = satellite_position +end + + +function on_satellite_launched(force_name, surface) + Log.debug_log("on_satellite_launched: " .. force_name) + local starting_zone = Zone.from_surface(surface) + if not starting_zone then + return game.forces[force_name].print({"space-exploration.satellite_invalid_launch_location"}) + end + global.forces[force_name] = global.forces[force_name] or {} + global.forces[force_name].satellites_launched = (global.forces[force_name].satellites_launched or 0) + 1 + + -- discovery options are: + -- discover the satellite (always on 1st launch) either in orbit or deadsapce + -- discover a planet or moon (always on 1st - 5rd launches), 90% chance after + -- if nothing else discovered, discover an asteroid in deadpsace + + local dicovered_something = false + if global.forces[force_name].satellites_launched == 1 then + -- nauvis satellite station + + build_satellite(force_name) + Zone.discover_next_satellite(force_name, {"space-exploration.the_satellite"}, starting_zone) + dicovered_something = true + game.forces[force_name].print({"space-exploration.satellite-view-unlocked"}) + --elseif global.forces[force_name].satellites_launched < 6 + -- or math.random() < 0.9 then + else + dicovered_something = Zone.discover_next_satellite(force_name, {"space-exploration.satellite"}, starting_zone) + if not dicovered_something then + for _, player in pairs(game.forces[force_name].connected_players) do + if player.surface.index == surface.index then + if settings.get_player_settings(player)["se-print-satellite-discovered-nothing"].value then + player.print({"space-exploration.satellite-discovered-nothing"}) + end + end + end + end + end + +end + + +function on_rocket_launched(event) + game.set_game_state{game_finished=false, player_won=false, can_continue=true} + if event.rocket and event.rocket.valid then + if event.rocket.get_item_count("satellite") > 0 then + on_satellite_launched(event.rocket.force.name, event.rocket.surface) + end + end +end +Event.addListener(defines.events.on_rocket_launched, on_rocket_launched) + +function on_rocket_launch_ordered(event) + if event.rocket and event.rocket.valid then + local zone = Zone.from_surface(event.rocket.surface) + if event.rocket.get_item_count(mod_prefix.."star-probe") > 0 then + if not (zone and zone.type == "orbit" and zone.parent.type == "star") then + event.rocket.remove_item({name=mod_prefix.."star-probe", count=1}) + local tick_task = new_tick_task("force-message") + tick_task.force_name = event.rocket.force.name + tick_task.message = {"space-exploration.probe_invalid_launch_star"} + tick_task.delay_until = game.tick + 750 --5s + end + elseif event.rocket.get_item_count(mod_prefix.."belt-probe") > 0 then + if not (zone and zone.type == "asteroid-belt") then + event.rocket.remove_item({name=mod_prefix.."belt-probe", count=1}) + game.print(event.rocket.get_item_count(mod_prefix.."belt-probe")) + local tick_task = new_tick_task("force-message") + tick_task.force_name = event.rocket.force.name + tick_task.message = {"space-exploration.probe_invalid_launch_belt"} + tick_task.delay_until = game.tick + 750 --5s + end + elseif event.rocket.get_item_count(mod_prefix.."void-probe") > 0 then + if not (zone and zone.type == "asteroid-field") then + event.rocket.remove_item({name=mod_prefix.."void-probe", count=1}) + local tick_task = new_tick_task("force-message") + tick_task.force_name = event.rocket.force.name + tick_task.message = {"space-exploration.probe_invalid_launch_field"} + tick_task.delay_until = game.tick + 750 --5s + end + end + end +end +Event.addListener(defines.events.on_rocket_launch_ordered, on_rocket_launch_ordered) + +function setup_force(force) + if is_system_force(force.name) then return end + + local force_name = force.name + if global.forces[force_name] then return end + Log.debug_log("setup_force: "..force_name) + global.forces = global.forces or {} + global.forces[force_name] = { + force_name = force_name, + zones_discovered_count = 0, -- planets and moons discovered + zones_discovered = {}, -- name = ForceZoneData{discovered_at = tick discovered, marker = map marker} + satellites_launched = 0, + cargo_rockets_launched = 0, + cargo_rockets_crashed = 0, + zone_assets = {}, -- zone_index > (rocket_launch_pad_names/ rocket_landing_pad_names) + zone_priorities = {} + } + local homeworld = Zone.from_name("Nauvis") + global.forces[force_name].homeworld_index = homeworld.index + Zone.discover(force_name, homeworld) + Zone.discover(force_name, homeworld.parent) + for _, zone in pairs(global.zone_index) do + if zone.is_homeworld then + global.forces[force_name].zone_priorities[zone.index] = global.forces[force_name].zone_priorities[zone.index] or 1 + end + end + + local friendly = game.forces["friendly"] + if friendly then + friendly.set_friend(force, true) + force.set_friend(friendly, true) + end + + local ignore = game.forces["ignore"] + if ignore then + ignore.set_cease_fire(force, true) + force.set_cease_fire(ignore, true) + end + + local capture = game.forces["capture"] + if capture then + capture.set_cease_fire(force, true) + force.set_cease_fire(capture, true) + end +end + +function allied_forces(force) + local allied_forces = {} + for _, oforce in pairs(game.forces) do + if oforce.name == force.name or force.get_friend(oforce) then + table.insert(allied_forces, oforce.name) + end + end + return allied_forces +end + +function ceasefire_forces(force) + local ceasefire_forces = {} + for _, oforce in pairs(game.forces) do + if oforce.name == force.name or force.get_cease_fire(oforce) then + table.insert(ceasefire_forces, oforce.name) + end + end + return ceasefire_forces +end + +function enemy_forces(force) + local enemy_forces = {} + for _, oforce in pairs(game.forces) do + if oforce ~= force and not force.get_cease_fire(oforce) then + if (not is_system_force(oforce.name)) or oforce.name == "enemy" or oforce.name == "conquest" then + table.insert(enemy_forces, oforce.name) + end + end + end + return enemy_forces +end + +function find_enemy(force, surface, position) + local enemy_forces = enemy_forces(force) + + for _, radius in pairs({8,32,256,1024}) do + local enemies = surface.find_entities_filtered{ + force = enemy_forces, + type = {"unit-spawner", "turret"}, + position = position, + radius = radius + } + if enemies and #enemies > 0 then return enemies[math.random(#enemies)] end + end + + local enemy = surface.find_nearest_enemy{position=position, max_distance=20000, force=force} + if enemy then return enemy end + + -- final try, anything enemy anywhere + local enemies = surface.find_entities_filtered{ force = enemy_forces, type = { + -- taken from https://wiki.factorio.com/Prototype/EntityWithHealth + "accumulator", "artillery-turret", "beacon", "boiler", "burner-generator", "character", + "arithmetic-combinator", "decider-combinator", "constant-combinator", "container", + "logistic-container", "infinity-container", "assembling-machine", "rocket-silo", + "furnace", "electric-energy-interface", "electric-pole", "unit-spawner", + --"fish", + "combat-robot", "construction-robot", "logistic-robot", "gate", "generator", + "heat-interface", "heat-pipe", "inserter", "lab", "lamp", "land-mine", "linked-container", + "market", "mining-drill", "offshore-pump", "pipe", "infinity-pipe", "pipe-to-ground", + "player-port", "power-switch", "programmable-speaker", "pump", "radar", "curved-rail", + "straight-rail", "rail-chain-signal", "rail-signal", "reactor", "roboport", + --"simple-entity", + "simple-entity-with-owner", "simple-entity-with-force", "solar-panel", + --"spider-leg", + "storage-tank", "train-stop", "linked-belt", "loader-1x1", "loader", "splitter", + "transport-belt", "underground-belt", "tree", "turret", "ammo-turret", "electric-turret", + "fluid-turret", "unit", "car", "artillery-wagon", "cargo-wagon", "fluid-wagon", + "locomotive", "spider-vehicle", "wall" + } } + if enemies and #enemies > 0 then + enemy = enemies[math.random(#enemies)] + if enemy.destructible then + return enemy + end + end + + for _, enemy in pairs(enemies) do + if enemy.destructible then + return enemy + end + end + + return false +end + +--/c remote.call("space-exploration", "set_force_homeworld", {zone_name = "Arendel", force_name = "player-2", spawn_position = {x = 0, y = 0}, reset_discoveries = true}) +function set_force_homeworld(data) + local zone = Zone.from_name(data.zone_name) + if not zone then return game.print({"space-exploration.no_zone_found"}) end + if not zone.is_homeworld then return game.print({"space-exploration.zone_must_be_a_homeworld"}) end + + local force = game.forces[data.force_name] + if not force then return game.print({"space-exploration.no_force_found"}) end + + local force_data = global.forces[data.force_name] + if not force_data then return game.print({"space-exploration.no_force_data_found"}) end + + force_data.homeworld_index = zone.index + Zone.get_make_surface(zone) -- make sure the surface exists + force.set_spawn_position(data.spawn_position or {x = 0, y = 0}, zone.surface_index) + + if data.reset_discoveries then + force_reset_discoveries(data.force_name) + end +end + +function force_reset_discoveries(force_name) + local force_data = global.forces[force_name] + if not force_data then return end + game.print({"space-exploration.no_force_data_found", force_name}) + force_data.zones_discovered_count = 0 + force_data.zones_discovered = {} + force_data.satellites_launched = 0 + force_data.zone_priorities = {} + local homeworld = Zone.from_name("Nauvis") + if force_data.homeworld_index then + homeworld = Zone.from_zone_index(force_data.homeworld_index) + end + Zone.discover(force_name, homeworld) + Zone.discover(force_name, homeworld.parent) + for _, zone in pairs(global.zone_index) do + if zone.is_homeworld then + global.forces[force_name].zone_priorities[zone.index] = global.forces[force_name].zone_priorities[zone.index] or 1 + end + end +end + +function is_system_force(force_name) + return force_name == "enemy" + or force_name == "neutral" + or force_name == "capture" + or force_name == "conquest" + or force_name == "ignore" + or force_name == "friendly" +end + +function setup_util_forces() + + if not game.forces["conquest"] then + game.create_force("conquest") -- will shoot at the player, does not show icons, cannot be deconstructed. Has capture mechanic but active entities must be destroyed. + end + local conquest = game.forces["conquest"] + conquest.ai_controllable = true + + if not game.forces["ignore"] then + game.create_force("ignore") -- won't shoot at the player, does not show icons, cannot be deconstructed. + end + local ignore = game.forces["ignore"] + for _, force in pairs(game.forces) do + ignore.set_cease_fire(force, true) + force.set_cease_fire(ignore, true) + end + + if not game.forces["capture"] then + game.create_force("capture") -- won't shoot at the player, does not show icons, cannot be deconstructed. Has capture mechanic. + end + local capture = game.forces["capture"] + for _, force in pairs(game.forces) do + capture.set_cease_fire(force, true) + force.set_cease_fire(capture, true) + end + + if not game.forces["friendly"] then + game.create_force("friendly") -- acts like a player entity, displays power icons, can be deconstructured by player + end + local friendly = game.forces["friendly"] + for _, force in pairs(game.forces) do + friendly.set_friend(force, true) + force.set_friend(friendly, true) + end + + local enemy = game.forces["enemy"] + enemy.set_friend(conquest, true) + conquest.set_friend(enemy, true) + + capture.set_friend(conquest, true) + conquest.set_friend(capture, true) + capture.set_friend(ignore, true) + ignore.set_friend(capture, true) + capture.set_friend(enemy, true) + enemy.set_friend(capture, true) + + ignore.set_friend(conquest, true) + conquest.set_friend(ignore, true) + ignore.set_friend(enemy, true) + enemy.set_friend(ignore, true) +end + +function on_force_created(event) + setup_force(event.force) +end +Event.addListener(defines.events.on_force_created, on_force_created) + +function setup_collision_layers() + + collision_mask_util_extended.named_collision_mask_integrity_check() -- detect non-1 mask entities + + global.named_collision_masks = {} + + -- a full-height wall that you cannot fly though, such as the wall of an underground tunnel. + global.named_collision_masks.flying_layer = collision_mask_util_extended.get_named_collision_mask("flying-layer") + -- things that should block projectiles + global.named_collision_masks.projectile_collision_layer = collision_mask_util_extended.get_named_collision_mask("projectile-layer") + -- empty space only + global.named_collision_masks.empty_space_collision_layer = collision_mask_util_extended.get_named_collision_mask("empty-space-tile") + -- All space tiles have this + global.named_collision_masks.space_collision_layer = collision_mask_util_extended.get_named_collision_mask("space-tile") + -- Spaceship tiles move around + global.named_collision_masks.spaceship_collision_layer = collision_mask_util_extended.get_named_collision_mask("moving-tile") + +end + +function on_configuration_changed() + + setup_collision_layers() + + Essential.enable_critical_techs() -- needed after bad mod removal + + AbandonedRuins.exclude_surfaces() + + Migrate.migrations() + + local zone = Zone.from_name("Nauvis") + zone.fragment_name = "se-core-fragment-omni" + zone.surface_index = 1 + zone.inflated = true + + if global.astronomical then + global.universe = global.astronomical + global.astronomical = nil + end + + global.tick_tasks = global.tick_tasks or {} + + if global.forces then + for force_name in pairs(global.forces) do + local forcedata = global.forces[force_name] + forcedata.force_name = force_name + if (not forcedata.homeworld_index) and not is_system_force(force_name) then + forcedata.homeworld_index = zone.index + end + end + end + + for _, force in pairs(game.forces) do + force.reset_recipes() + if force.technologies["radar"] then + force.technologies["radar"].enabled = true + end + end + + -- enable any recipes that should be unlocked. + -- mainly required for entity-update-externals as a migration file won't work + for _, force in pairs(game.forces) do + for _, tech in pairs(force.technologies) do + if tech.researched then + for _, effect in pairs(tech.effects) do + if effect.type == "unlock-recipe" and force.recipes[effect.recipe] then + force.recipes[effect.recipe].enabled = true + end + end + end + end + end + + -- stop game from ending on launch and tracking of launches + local interface_name = "silo_script" + if remote.interfaces[interface_name] then + if remote.interfaces[interface_name]["set_finish_on_launch"] then + remote.call(interface_name, "set_finish_on_launch", false) + end + if remote.interfaces[interface_name]["set_show_launched_without_satellite"] then + remote.call(interface_name, "set_show_launched_without_satellite", false) + end + if remote.interfaces[interface_name]["remove_tracked_item"] then + remote.call(interface_name, "remove_tracked_item", "satellite") + end + end + + if global.next_meteor_shower and + global.next_meteor_shower > game.tick + 60 * 60 * settings.global["se-meteor-interval"].value then + global.next_meteor_shower = game.tick + math.random() * 60 * 60 * settings.global["se-meteor-interval"].value + end + + Zone.zones_fix_all_tiles() + + Universe.load_resource_data() + + local zone = Zone.from_name("Nauvis") + zone.fragment_name = "se-core-fragment-omni" + zone.surface_index = 1 + zone.inflated = true + zone.resources = {} + zone.ticks_per_day = 25000 + + Coreminer.equalise_all() + + global.cache_travel_delta_v = nil + + if game.technology_prototypes[mod_prefix.."linked-container"] then + for _, force in pairs(game.forces) do + force.technologies[mod_prefix.."teleportation"].enabled = true + end + end + + game.print({"space-exploration.please-consider-patreon"}) + +end +Event.addListener("on_configuration_changed", on_configuration_changed, true) + + +function on_init() + -- When creating a new game, script.on_init() will be called on each mod that has a control.lua file. + -- When loading a save game and the mod did not exist in that save game script.on_init() is called. + + global.version = version + + setup_collision_layers() + + Essential.enable_critical_techs() -- needed after bad mod removal + + -- Astronomical first + global.seed = game.surfaces[1].map_gen_settings.seed + global.next_tick_task_id = 1 + global.tick_tasks = {} + + AbandonedRuins.exclude_surfaces() + + setup_util_forces() + + Universe.build() + + local zone = Zone.from_name("Nauvis") + zone.fragment_name = "se-core-fragment-omni" + zone.surface_index = 1 + zone.inflated = true + zone.resources = {} + zone.ticks_per_day = 25000 + game.surfaces[1].solar_power_multiplier = Zone.solar_multiplier + Zone.set_solar_and_daytime(zone) + local surface = game.surfaces[1] + for resource_name, resource_setting in pairs(global.resources_and_controls.resource_settings) do + surface.regenerate_entity(resource_name) + end + if settings.startup[mod_prefix.."spawn-small-resources"].value then + Zone.spawn_small_resources(surface) + end + + global.zones_by_surface[zone.surface_index] = zone + if game.surfaces[1].map_gen_settings.autoplace_controls["planet-size"] then + -- planet_radius = 10000 / 6 * (6 + log(1/planet_frequency/6, 2)) + -- planet_frequency = 1 / 6 / 2 ^ (planet_radius * 6 / 10000 - 6) + --zone.radius = 10000 / 6 * game.surfaces[1].map_gen_settings.autoplace_controls["planet-size"].frequency + zone.radius = 10000 / 6 * (6 + util.math_log(1/game.surfaces[1].map_gen_settings.autoplace_controls["planet-size"].frequency/6, 2)) + Log.trace(zone.radius) + else + zone.radius = 10000 / 6 * (6 + util.math_log(1/1/6, 2)) + end + + if Log.debug_big_logs then + Log.log_universe_simplified() + Log.log_universe() + end + + -- Other stuff second + global.playerdata = global.playerdata or {} + global.forces = global.forces or {} + + for _, force in pairs(game.forces) do + setup_force(force) + force.reset_recipes() + + -- enable any recipes that should be unlocked. + -- mainly required for entity-update-externals as a migration file won't work + for _, tech in pairs(force.technologies) do + if tech.researched then + for _, effect in pairs(tech.effects) do + if effect.type == "unlock-recipe" and force.recipes[effect.recipe] then + force.recipes[effect.recipe].enabled = true + end + end + end + end + + for tech in pairs(force.technologies['rocket-silo'].prerequisites) do + force.technologies[tech].enabled = true + end + end + + if remote.interfaces["freeplay"] and remote.interfaces["freeplay"]["set_created_items"] and remote.interfaces["freeplay"]["get_created_items"] then + local stacks = remote.call("freeplay", "get_created_items") + for _, starting_item_stack in pairs(first_starting_item_stacks) do + stacks[starting_item_stack.name] = starting_item_stack.count + end + remote.call("freeplay", "set_created_items", stacks) + end + + +end +Event.addListener("on_init", on_init, true) + +function on_player_spawned(event) + local player = game.players[event.player_index] + if player and player.character then + for _, item_stack in pairs(starting_item_stacks) do + player.insert(item_stack) + end + end + local forcedata = global.forces[player.force.name] + if forcedata then + forcedata.has_players = true + end + update_overhead_buttons(player) +end +Event.addListener(defines.events.on_player_respawned, on_player_spawned) + +function on_player_changed_force(event) + local player = game.players[event.player_index] + setup_force(player.force) + local forcedata = global.forces[player.force.name] + if forcedata then + forcedata.has_players = true + end +end +Event.addListener(defines.events.on_player_changed_force, on_player_changed_force) + +function on_player_created(event) + local player = game.players[event.player_index] + if player and player.connected then + player.print({"space-exploration.please-consider-patreon"}) + end + if not player.get_quick_bar_slot(10) then + player.set_quick_bar_slot(10, mod_prefix.."medpack") + end + on_player_spawned(event) +end +Event.addListener(defines.events.on_player_created, on_player_created) + +function on_player_joined_game(event) + local player = game.players[event.player_index] + if player and player.connected then + player.print({"space-exploration.please-consider-patreon"}) + end + local forcedata = global.forces[player.force.name] + if forcedata then + forcedata.has_players = true + end + update_overhead_buttons(player) +end +Event.addListener(defines.events.on_player_joined_game, on_player_joined_game) + +function update_overhead_buttons(player) + -- Fix for Factorio 1.1 + local button_flow = mod_gui.get_button_flow(player) + if button_flow["informatron_overhead"] then + local caption = button_flow["informatron_overhead"].caption + local tooltip = button_flow["informatron_overhead"].tooltip + local sprite = button_flow["informatron_overhead"].sprite + button_flow["informatron_overhead"].destroy() + button_flow.add{type="sprite-button", name="informatron_overhead", sprite = sprite, tooltip = tooltip} + end + + if button_flow[RemoteView.name_button_overhead_satellite] then button_flow[RemoteView.name_button_overhead_satellite].destroy() end + RemoteView.update_overhead_button(player.index) + + if button_flow[MapView.name_button_overhead_interstellar] then button_flow[MapView.name_button_overhead_interstellar].destroy() end + MapView.update_overhead_button(player.index) + + if button_flow[Zonelist.name_button_overhead_explorer] then button_flow[Zonelist.name_button_overhead_explorer].destroy() end + Zonelist.update_overhead_button(player.index) +end + +function on_pre_player_left_game(event) + local player = game.players[event.player_index] + if player then + RemoteView.stop(player) + end +end +Event.addListener(defines.events.on_pre_player_left_game, on_pre_player_left_game) + +function on_forces_merged(event) + -- merge in all of an old force to a new force + -- add things like launch counts + -- merge things like zone assets + -- use a single value for things like satellite position + local source_forcedata = global.forces[event.source_name] + local destination_forcedata = global.forces[event.destination.name] + if source_forcedata and destination_forcedata then + -- zones_discovered + if source_forcedata.zones_discovered then + destination_forcedata.zones_discovered = destination_forcedata.zones_discovered or {} + for a, b in pairs(source_forcedata.zones_discovered) do + if not destination_forcedata.zones_discovered[a] then + destination_forcedata.zones_discovered[a] = b + end + end + destination_forcedata.zones_discovered_count = table_size(destination_forcedata.zones_discovered) + end + --zone_priorities + if source_forcedata.zone_priorities then + destination_forcedata.zone_priorities = destination_forcedata.zone_priorities or {} + for a, b in pairs(source_forcedata.zone_priorities) do + if not destination_forcedata.zone_priorities[a] then + destination_forcedata.zone_priorities[a] = b + else + destination_forcedata.zone_priorities[a] = math.max(destination_forcedata.zone_priorities[a], b) + end + end + end + --satellites_launched + if source_forcedata.satellites_launched then + destination_forcedata.satellites_launched = (destination_forcedata.satellites_launched or 0) + source_forcedata.satellites_launched + end + --cargo_rockets_launched + if source_forcedata.cargo_rockets_launched then + destination_forcedata.cargo_rockets_launched = (destination_forcedata.cargo_rockets_launched or 0) + source_forcedata.cargo_rockets_launched + end + --cargo_rockets_crashed + if source_forcedata.cargo_rockets_crashed then + destination_forcedata.cargo_rockets_crashed = (destination_forcedata.cargo_rockets_crashed or 0) + source_forcedata.cargo_rockets_crashed + end + --first_discovered_vault + if source_forcedata.first_discovered_vault and not destination_forcedata.first_discovered_vault then + destination_forcedata.first_discovered_vault = source_forcedata.first_discovered_vault + end + --first_entered_vault + if source_forcedata.first_entered_vault and not destination_forcedata.first_entered_vault then + destination_forcedata.first_entered_vault = source_forcedata.first_entered_vault + end + --nauvis_satellite + if source_forcedata.nauvis_satellite and not destination_forcedata.nauvis_satellite then + destination_forcedata.nauvis_satellite = source_forcedata.nauvis_satellite + end + --solar_flare + if source_forcedata.solar_flare and not destination_forcedata.solar_flare then + destination_forcedata.solar_flare = source_forcedata.solar_flare + end + + --arcospheres + if source_forcedata.arcosphere_collectors_launched then + destination_forcedata.arcosphere_collectors_launched = (destination_forcedata.arcosphere_collectors_launched or 0) + source_forcedata.arcosphere_collectors_launched + end + if source_forcedata.arcospheres_collected then + destination_forcedata.arcospheres_collected = (destination_forcedata.arcospheres_collected or 0) + source_forcedata.arcospheres_collected + end + + local single_depth_tables = { + "chart_tag_buffer", + "tick_tasks", + "gravimetrics_labs", + "space_capsule_launches", + "delivery_cannons", + "rocket_landing_pads", + "rocket_launch_pads", + "spaceships", + "nexus" + } + for _, table_name in pairs(single_depth_tables) do + if global[table_name] then + for _, thing in pairs(global[table_name]) do + if thing.force_name == event.source_name then + thing.force_name = event.destination.name + end + end + end + end + + -- Zones + for _, zone in pairs(global.zone_index) do + local single_depth_tables = { + "energy_transmitters", + } + for _, table_name in pairs(single_depth_tables) do + if source_forcedata.zone_assets[table_name] then + for _, thing in pairs(global[table_name]) do + if thing.force_name == event.source_name then + thing.force_name = event.destination.name + end + end + end + end + end + + --zone_assets + if source_forcedata.zone_assets then + + local single_depth_tables = { + "energy_beam_defence", + } + for _, table_name in pairs(single_depth_tables) do + if source_forcedata.zone_assets[table_name] then + for _, thing in pairs(global[table_name]) do + if thing.force_name == event.source_name then + thing.force_name = event.destination.name + end + end + end + end + + destination_forcedata.zone_assets = destination_forcedata.zone_assets or {} + for a, b in pairs(source_forcedata.zone_assets) do + if not destination_forcedata.zone_assets[a] then + destination_forcedata.zone_assets[a] = b + else + for table_name, subtable in pairs(b) do + if not destination_forcedata.zone_assets[a][table_name] then + destination_forcedata.zone_assets[a][table_name] = subtable + elseif table_name == "rocket_launch_pad_names" or table_name == "rocket_landing_pad_names" then + for name, structs in pairs(subtable) do + destination_forcedata.zone_assets[a][table_name][name] = destination_forcedata.zone_assets[a][table_name][name] or {} + for unit_number, struct in pairs(structs) do + destination_forcedata.zone_assets[a][table_name][name][unit_number] = struct + end + end + end + end + end + end + destination_forcedata.zones_discovered_count = table_size(destination_forcedata.zones_discovered) + end + --zone_assets + if source_forcedata.rocket_landing_pad_names then + if not destination_forcedata.rocket_landing_pad_names then + destination_forcedata.rocket_landing_pad_names = source_forcedata.rocket_landing_pad_names + else + for name, structs in pairs(source_forcedata.rocket_landing_pad_names) do + destination_forcedata.rocket_landing_pad_names[name] = destination_forcedata.rocket_landing_pad_names[name] or {} + for unit_number, struct in pairs(structs) do + destination_forcedata.rocket_landing_pad_names[name][unit_number] = struct + end + end + end + end + end +end +Event.addListener(defines.events.on_forces_merged, on_forces_merged) + +require('scripts/remote-interface') + +--log( serpent.block( data.raw["projectile"], {comment = false, numformat = '%1.8g' } ) ) +-- /c Log.trace(serpent.block( game.surfaces.nauvis.map_gen_settings.autoplace_controls, {comment = false, numformat = '%1.8g' })) diff --git a/space-exploration_0.5.80/space-exploration/data-final-fixes.lua b/space-exploration_0.5.80/space-exploration/data-final-fixes.lua new file mode 100644 index 0000000..53bda75 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/data-final-fixes.lua @@ -0,0 +1,174 @@ +local data_util = require("data_util") + +collision_mask_util_extended = require("collision-mask-util-extended/data/collision-mask-util-extended") + +require("prototypes/phase-multi/no-recycle") + +require("prototypes/phase-3/recipe") + +require("prototypes/phase-3/technology") +require("prototypes/phase-3/technology-procedural") + +require("prototypes/phase-3/noise-programs") + +require("prototypes/phase-3/collision-common") +require("prototypes/phase-3/space-collision") + +require("prototypes/phase-3/ruin-remnants") +require("prototypes/phase-3/ruins") + +require("prototypes/phase-3/resources") + +require("prototypes/phase-3/core-fragments") + +require("prototypes/phase-3/incompatibility") + +require("prototypes/phase-3/compatibility/angels") +require("prototypes/phase-3/compatibility/notnotmelon") + +require("prototypes/phase-3/character") + +require("prototypes/phase-3/energy-shield-equipment") + +require("prototypes/phase-3/electric-boiling") + +require("prototypes/phase-3/delivery-cannon") + +require("prototypes/phase-3/interior-divider") + +require("prototypes/phase-multi/item-group-assign") + +--require("prototypes/phase-3/compatibility") + +data.raw["heat-pipe"]["heat-pipe"].heat_buffer.max_transfer = "2GW" + +for _, fish in pairs(data.raw.fish) do + if not fish.healing_per_tick then fish.healing_per_tick = 0.01 end + fish.resistances = data_util.resistances_max(fish.resistances, {{type = "meteor", percent = 100}, {type = "fire", percent = 100}}) +end + + +for _, tree in pairs(data.raw.tree) do + tree.trigger_target_mask = tree.trigger_target_mask or {} + table.insert(tree.trigger_target_mask, "flammable") + table.insert(tree.trigger_target_mask, "tree") +end + + +-- undo some alien biomes changes, impotant for asteroid decals +data.raw.tile["se-space"].layer = 0 +data.raw.tile["se-space"].pollution_absorption_per_second = 0.1 +data.raw.tile["se-asteroid"].layer = 5 + +data.raw.tile["out-of-map"].pollution_absorption_per_second = 0.1 + +local function find_orphaned_recipes() + local all_recipes = {} + for _, recipe in pairs(data.raw.recipe) do + if (recipe.enabled == false) or + (recipe.normal and recipe.normal.enabled == false) or + (recipe.expensive and recipe.expensive.enabled == false) then + all_recipes[recipe.name] = true + end + end + for _, tech in pairs(data.raw.technology) do + if tech.effects then + for _, effect in pairs(tech.effects) do + if effect.type == "unlock-recipe" and effect.recipe then + all_recipes[effect.recipe] = nil + end + end + end + end + for recipe_name, valid in pairs(all_recipes) do + log("Orphaned recipe: " .. recipe_name) + end +end + + +-- stop rails from being destroyed by meteors and sky beams +for _, rail_type in pairs({"rail-signal", "rail-chain-signal"}) do + for _, rail in pairs(data.raw[rail_type]) do + rail.resistances = data_util.resistances_max(rail.resistances, {{type = "meteor", percent = 99.9}, {type = "fire", percent = 100}, {type = "laser", percent = 99}, {type = "explosion", percent = 80}}) + end +end +for _, rail_type in pairs({"straight-rail", "curved-rail"}) do + for _, rail in pairs(data.raw[rail_type]) do + rail.selection_priority = 1 + rail.resistances = data_util.resistances_max(rail.resistances, {{type = "meteor", percent = 99.9}, {type = "fire", percent = 100}, {type = "laser", percent = 99}, {type = "explosion", percent = 90}}) + rail.max_health = rail.max_health * 4 + end +end +for _, type in pairs({"locomotive", "cargo-wagon", "fluid-wagon"}) do + for _, prototype in pairs(data.raw[type]) do + prototype.selection_priority = 51 + end +end + +-- satellite +data.raw["god-controller"]["default"].item_pickup_distance = 0 +data.raw["god-controller"]["default"].loot_pickup_distance = 0 +data.raw["god-controller"]["default"].mining_speed = 0.0000001 -- required to remove ghosts but not mine entities. +data.raw["god-controller"]["default"].movement_speed = 1 + +-- dead +data.raw["spectator-controller"]["default"].movement_speed = 1 + +-- this won't work, the furnace recipes are hidden +if data.raw["recipe-category"]["recycle"] then + table.insert(data.raw["assembling-machine"][data_util.mod_prefix .. "recycling-facility"].crafting_categories, "recycle") +end +if data.raw["recipe-category"]["recycle-with-fluids"] then + table.insert(data.raw["assembling-machine"][data_util.mod_prefix .. "recycling-facility"].crafting_categories, "recycle-with-fluids") +end + +for i=4,9 do + data.raw.module["productivity-module-" .. i].limitation = data.raw.module["productivity-module-3"].limitation +end + + +data.raw["map-gen-presets"].default["space-exploration"] = { + --name = "space-exploration", + order = "a", + basic_settings = { + autoplace_controls = { + hot = {size = 0.5}, + cold = {size = 0.5}, + ["se-beryllium-ore"] = {frequency = 0, richness = -1, size = 0}, + ["se-cryonite"] = {frequency = 0, richness = -1, size = 0}, + ["se-holmium-ore"] = {frequency = 0, richness = -1, size = 0}, + ["se-iridium-ore"] = {frequency = 0, richness = -1, size = 0}, + ["se-methane-ice"] = {frequency = 0, richness = -1, size = 0}, + ["se-naquium-ore"] = {frequency = 0, richness = -1, size = 0}, + ["se-vitamelange"] = {frequency = 0, richness = -1, size = 0}, + ["se-vulcanite"] = {frequency = 0, richness = -1, size = 0}, + ["se-water-ice"] = {frequency = 0, richness = -1, size = 0} + }, + property_expression_names = { + ["control-setting:water"] = 1.5, + ["control-setting:moisture:bias"] = 0.05, + ["control-setting:aux:bias"] = -0.35 + }, + starting_area = 2, + }, + advanced_settings = { + enemy_evolution = + { + time_factor = 0.000001, + destroy_factor = 0.001, + pollution_factor = 0.0000005 + }, + pollution = + { + ageing = 0.5, + enemy_attack_pollution_consumption_modifier = 0.5 + }, + }, +} +if data.raw["map-gen-presets"].default and data.raw["map-gen-presets"].default.default then + data.raw["map-gen-presets"].default.default.order = "a-a" +end + +--find_orphaned_recipes() + +--log( serpent.block( data.raw["assembling-machine"][data_util.mod_prefix .. "spaceship-clamp"], {comment = false, numformat = '%1.8g' } ) ) diff --git a/space-exploration_0.5.80/space-exploration/data-updates.lua b/space-exploration_0.5.80/space-exploration/data-updates.lua new file mode 100644 index 0000000..62d6419 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/data-updates.lua @@ -0,0 +1,26 @@ +local data_util = require("data_util") + +require("prototypes/phase-multi/no-recycle") + +require("prototypes/phase-2/recipe-update") +require("prototypes/phase-2/generic-recycling") + +require("prototypes/phase-2/modules") + +require("prototypes/phase-2/capsules") + +require("prototypes/phase-2/compatibility/general") +require("prototypes/phase-2/compatibility/krastorio2/krastorio2") + +-- this is where space science pack goes now in SE, but other mods are more free to change it than when it was a critical mid-game pack. +data_util.tech_add_prerequisites("space-science-pack", {data_util.mod_prefix .. "processing-cryonite", "production-science-pack", "uranium-processing",}) +data_util.tech_add_ingredients("space-science-pack", {"production-science-pack"}, true) + +-- Give burner lamp space collision, because it's a one line fix and getting it done here is easier than trying to get it done in the owner's mod +if data.raw["assembling-machine"]["deadlock-copper-lamp"] then + data.raw["assembling-machine"]["deadlock-copper-lamp"].se_allow_in_space = true +end + +if data.raw["electric-turret"]["laser-turret"] then + data.raw["electric-turret"]["laser-turret"].prepare_range = data.raw["electric-turret"]["laser-turret"].attack_parameters.range + 8 +end diff --git a/space-exploration_0.5.80/space-exploration/data.lua b/space-exploration_0.5.80/space-exploration/data.lua new file mode 100644 index 0000000..90ec03b --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/data.lua @@ -0,0 +1,354 @@ +is_debug_mode = false +debug_log = is_debug_mode and log or function()end + +-- COLLISION MASKS +-- We need to be able to refer to these layers in control.lua so getting a sequential layer from the collision mask util is not ideal +-- remember to update control.lua setup_collision_layers() + -- global scope +collision_mask_util_extended = require("collision-mask-util-extended/data/collision-mask-util-extended") + +-- a full-height wall that you cannot fly though, such as the wall of an underground tunnel. +flying_collision_layer = collision_mask_util_extended.get_make_named_collision_mask("flying-layer") + +-- things that should block projectiles +projectile_collision_layer = collision_mask_util_extended.get_make_named_collision_mask("projectile-layer") + +-- Cars, trees, pipes +vehicle_collision_layer = collision_mask_util_extended.get_make_named_collision_mask("vehicle-layer") + +-- empty space only +empty_space_collision_layer = collision_mask_util_extended.get_make_named_collision_mask("empty-space-tile") + +-- All space tiles have this +space_collision_layer = collision_mask_util_extended.get_make_named_collision_mask("space-tile") + +-- Spaceship tiles move around +spaceship_collision_layer = collision_mask_util_extended.get_make_named_collision_mask("moving-tile") + +-- Composite entity internal circuit connection entities get a separate layer so they don't collide with the main entity +composite_entity_circuit_connection_layer = collision_mask_util_extended.get_make_named_collision_mask("composite-entity-circuit-connection-layer") + +rocket_capacity = 500 +local min_postprocess_version = "0.5.6" +local data_util = require("data_util") +if not logged_mods_once then logged_mods_once = true log("Log mods once: "..serpent.block(mods)) end +--log(serpent.block( mods, {comment = false, numformat = '%1.8g' } )) + +-- SURFACE RESOURCE VALUES ------------------------------------------------------------- +se_resources = se_resources or {} +se_resources["iron-ore"] = se_resources["iron-ore"] or { order = "c-a", base_density = 14, starting_rq_factor_multiplier = 1.5} +se_resources["copper-ore"] = se_resources["copper-ore"] or {order = "c-b", base_density = 12, starting_rq_factor_multiplier = 1.5} +se_resources["stone"] = se_resources["stone"] or {order = "c-c", base_density = 12, starting_rq_factor_multiplier = 1.5} +se_resources["coal"] = se_resources["coal"] or {order = "c-e", base_density = 9, starting_rq_factor_multiplier = 1.5,} +se_resources["uranium-ore"] = se_resources["uranium-ore"] or { + order = "c-d", + has_starting_area_placement = false, + base_density = 1, + base_spots_per_km2 = 2, + random_spot_size_minimum = 2, + random_spot_size_maximum = 4, +} +se_resources["crude-oil"] = se_resources["crude-oil"] or { + order = "e-a", + has_starting_area_placement = false, + base_density = 8, + base_spots_per_km2 = 2, + random_probability = 1/48, + random_spot_size_minimum = 1, + random_spot_size_maximum = 1, -- don't randomize spot size + additional_richness = 220000, -- this increases the total everywhere, so base_density needs to be decreased to compensate + regular_rq_factor_multiplier = 1, + starting_rq_factor_multiplier = 1.5, +} +se_resources[data_util.mod_prefix.."vulcanite"] = se_resources[data_util.mod_prefix.."vulcanite"] or { order = "b-v", base_density = 10, base_spots_per_km2 = 5 } +se_resources[data_util.mod_prefix.."cryonite"] = se_resources[data_util.mod_prefix.."cryonite"] or { order = "b-c", base_density = 10, base_spots_per_km2 = 5 } +se_resources[data_util.mod_prefix.."vitamelange"] = se_resources[data_util.mod_prefix.."vitamelange"] or { order = "a-a", base_density = 10 } +se_resources[data_util.mod_prefix.."iridium-ore"] = se_resources[data_util.mod_prefix.."iridium-ore"] or { order = "a-b" } +se_resources[data_util.mod_prefix.."holmium-ore"] = se_resources[data_util.mod_prefix.."holmium-ore"] or { order = "a-b" } +se_resources[data_util.mod_prefix.."beryllium-ore"] = se_resources[data_util.mod_prefix.."beryllium-ore"] or { order = "a-b" } +se_resources[data_util.mod_prefix.."naquium-ore"] = se_resources[data_util.mod_prefix.."naquium-ore"] or { order = "a-a", base_density = 1 } +se_resources[data_util.mod_prefix.."water-ice"] = se_resources[data_util.mod_prefix.."water-ice"] or { order = "f-a" } +se_resources[data_util.mod_prefix.."methane-ice"] = se_resources[data_util.mod_prefix.."methane-ice"] or { order = "f-b" } + +-- CORE FRAGMENT RESOURCE VALUES ------------------------------------------------------------- +-- allows other mods to alter core fragment resources +se_core_fragment_resources = se_core_fragment_resources or {} +se_core_fragment_resources["water"] = se_core_fragment_resources["water"] or { multiplier = 0, omni_multiplier = 0.1} +se_core_fragment_resources["crude-oil"] = se_core_fragment_resources["crude-oil"] or { multiplier = 1, omni_multiplier = 0.1} +se_core_fragment_resources["stone"] = se_core_fragment_resources["stone"] or { multiplier = 1, omni_multiplier = 0.5} +se_core_fragment_resources["iron-ore"] = se_core_fragment_resources["iron-ore"] or { multiplier = 1.2, omni_multiplier = 0.6} +se_core_fragment_resources["copper-ore"] = se_core_fragment_resources["copper-ore"] or { multiplier = 1, omni_multiplier = 0.5} +se_core_fragment_resources["coal"] = se_core_fragment_resources["coal"] or { multiplier = 1, omni_multiplier = 0.5} +se_core_fragment_resources["uranium-ore"] = se_core_fragment_resources["uranium-ore"] or { multiplier = 0.2, omni_multiplier = 0.005} + +-- Depreciated, don't do this. Add se_allow_in_space =true to the prototype directly instead. -------------------------------------------------------------- +se_allow_in_space = se_allow_in_space or {} +se_allow_in_space[data_util.mod_prefix.."lifesupport-facility"] = true +se_allow_in_space[data_util.mod_prefix.."recycling-facility"] = true +se_allow_in_space[data_util.mod_prefix.."delivery-cannon"] = true + +-- EXCLUDE FROM PROCEDURAL TECHNOLOGY INGREDIENT FUNCTIONS --------------------- +-- These techs won't have science packs dynamically added. +-- If additional technologies are specified your mod should add the appropriate specialist science packs for that stage of the game +se_prodecural_tech_exclusions = se_prodecural_tech_exclusions or {} +table.insert(se_prodecural_tech_exclusions, "productivity-module") +table.insert(se_prodecural_tech_exclusions, "speed-module") +table.insert(se_prodecural_tech_exclusions, "effectivity-module") +table.insert(se_prodecural_tech_exclusions, "nano-speed") +table.insert(se_prodecural_tech_exclusions, "nano-range") +table.insert(se_prodecural_tech_exclusions, "mining-productivity") + +-- DELIVERY CANNON: Should ONLY deliver homogenous resources, nothing manufactured. +-- defaults to stack size for items +se_delivery_cannon_recipes = se_delivery_cannon_recipes or {} +se_delivery_cannon_recipes["water"] = {name="water-barrel"} +se_delivery_cannon_recipes["crude-oil"] = {name="crude-oil-barrel"} +se_delivery_cannon_recipes["heavy-oil"] = {name="heavy-oil-barrel"} +se_delivery_cannon_recipes["light-oil"] = {name="light-oil-barrel"} +se_delivery_cannon_recipes["petroleum-gas"] = {name="petroleum-gas-barrel"} +se_delivery_cannon_recipes["lubricant"] = {name="lubricant-barrel"} +se_delivery_cannon_recipes["sulfuric-acid"] = {name="sulfuric-acid-barrel"} + +se_delivery_cannon_recipes["iron-ore"] = {name="iron-ore"} +se_delivery_cannon_recipes["iron-plate"] = {name="iron-plate"} +se_delivery_cannon_recipes["copper-ore"] = {name="copper-ore"} +se_delivery_cannon_recipes["copper-plate"] = {name="copper-plate"} +se_delivery_cannon_recipes["uranium-ore"] = {name="uranium-ore"} +se_delivery_cannon_recipes["uranium-238"] = {name="uranium-238"} +se_delivery_cannon_recipes["uranium-235"] = {name="uranium-235"} +se_delivery_cannon_recipes["steel-plate"] = {name="steel-plate"} +se_delivery_cannon_recipes["stone"] = {name="stone"} +se_delivery_cannon_recipes["stone-brick"] = {name="stone-brick"} +se_delivery_cannon_recipes["coal"] = {name="coal"} +se_delivery_cannon_recipes["concrete"] = {name="concrete"} +se_delivery_cannon_recipes["plastic-bar"] = {name="plastic-bar"} +se_delivery_cannon_recipes["sulfur"] = {name="sulfur"} +se_delivery_cannon_recipes["wood"] = {name="wood"} +se_delivery_cannon_recipes["fish"] = {name="fish"} +se_delivery_cannon_recipes["rocket-fuel"] = {name="rocket-fuel"} +se_delivery_cannon_recipes["solid-fuel"] = {name="solid-fuel"} +se_delivery_cannon_recipes["processed-fuel"] = {name="processed-fuel"} +se_delivery_cannon_recipes["sand"] = {name="sand"} +se_delivery_cannon_recipes["glass"] = {name="glass"} +se_delivery_cannon_recipes["explosives"] = {name="explosives"} +se_delivery_cannon_recipes["low-density-structure"] = {name="low-density-structure"} +se_delivery_cannon_recipes[data_util.mod_prefix.."heat-shielding"] = {name=data_util.mod_prefix.."heat-shielding"} +se_delivery_cannon_recipes[data_util.mod_prefix.."scrap"] = {name=data_util.mod_prefix.."scrap"} +se_delivery_cannon_recipes[data_util.mod_prefix.."contaminated-scrap"] = {name=data_util.mod_prefix.."contaminated-scrap"} + +se_delivery_cannon_recipes[data_util.mod_prefix.."water-ice"] = {name=data_util.mod_prefix.."water-ice"} +se_delivery_cannon_recipes[data_util.mod_prefix.."methane-ice"] = {name=data_util.mod_prefix.."methane-ice"} +se_delivery_cannon_recipes[data_util.mod_prefix.."beryllium-ore"] = {name=data_util.mod_prefix.."beryllium-ore"} +se_delivery_cannon_recipes[data_util.mod_prefix.."beryllium-ingot"] = {name=data_util.mod_prefix.."beryllium-ingot"} +se_delivery_cannon_recipes[data_util.mod_prefix.."iridium-ore"] = {name=data_util.mod_prefix.."iridium-ore"} +se_delivery_cannon_recipes[data_util.mod_prefix.."iridium-ingot"] = {name=data_util.mod_prefix.."iridium-ingot"} +se_delivery_cannon_recipes[data_util.mod_prefix.."holmium-ore"] = {name=data_util.mod_prefix.."holmium-ore"} +se_delivery_cannon_recipes[data_util.mod_prefix.."holmium-ingot"] = {name=data_util.mod_prefix.."holmium-ingot"} +se_delivery_cannon_recipes[data_util.mod_prefix.."naquium-ore"] = {name=data_util.mod_prefix.."naquium-ore"} +se_delivery_cannon_recipes[data_util.mod_prefix.."naquium-ingot"] = {name=data_util.mod_prefix.."naquium-ingot"} +se_delivery_cannon_recipes[data_util.mod_prefix.."vitamelange"] = {name=data_util.mod_prefix.."vitamelange"} +se_delivery_cannon_recipes[data_util.mod_prefix.."vitamelange-spice"] = {name=data_util.mod_prefix.."vitamelange-spice"} +se_delivery_cannon_recipes[data_util.mod_prefix.."cryonite"] = {name=data_util.mod_prefix.."cryonite"} +se_delivery_cannon_recipes[data_util.mod_prefix.."cryonite-rod"] = {name=data_util.mod_prefix.."cryonite-rod"} +se_delivery_cannon_recipes[data_util.mod_prefix.."vulcanite"] = {name=data_util.mod_prefix.."vulcanite"} +se_delivery_cannon_recipes[data_util.mod_prefix.."vulcanite-block"] = {name=data_util.mod_prefix.."vulcanite-block"} + +se_delivery_cannon_ammo_recipes = se_delivery_cannon_ammo_recipes or {} +se_delivery_cannon_ammo_recipes["atomic-bomb"] = { + type = "ammo", + name="atomic-bomb", + amount = 1, + ingredients = { + { "atomic-bomb", 1}, + { data_util.mod_prefix .. "delivery-cannon-weapon-capsule", 1 } + } +} +se_delivery_cannon_ammo_recipes[data_util.mod_prefix.."plague-bomb"] = { + type = "ammo", + name=data_util.mod_prefix.."plague-bomb", + amount = 1, + ingredients = { + { data_util.mod_prefix .. "plague-bomb", 1}, + { data_util.mod_prefix .. "delivery-cannon-weapon-capsule", 1 } + } +} + +if not mods["space-exploration-postprocess"] then + local message = "\n\n---------------------------------------------------------------------------------------------------" + message = message .. "\n\nPlease install the Space Exploration Postprocess mod." + message = message .. " \n\nYou have the Space Exploration mod installed but not the Space Exploration Postprocess mod. Both are required." + message = message .. " \n\nUnfortunately the postprocess mod can't be listed as a dependency without creating a dependancy loop, sorry for the inconvenience. " + message = message .. " \nTo install the postprocess mod you can disable Space Exploration using the 'disable listed mods' button below and reload the game," + message = message .. " \ndownload Space Exploration Postprocess mod using the in-game interface, then enable both mods. \nAlternatively you can download the postprocess mod directly here:" + message = message .. " \nhttps://mods.factorio.com/mod/space-exploration-postprocess/downloads " + message = message .. "\n\n---------------------------------------------------------------------------------------------------" + error(message) +end +if not data_util.dot_string_greater_than(mods["space-exploration-postprocess"], min_postprocess_version, true) then + local message = "\n\n---------------------------------------------------------------------------------------------------" + message = message .. "\n\nPlease update the Space Exploration Postprocess mod." + message = message .. "\nMinimum version: " .. min_postprocess_version + message = message .. "\n\n---------------------------------------------------------------------------------------------------" + error(message) +end + +resource_autoplace = require("prototypes/resource_autoplace_overrides") -- load the updated functions + +require("prototypes/phase-1/input") +require("prototypes/phase-1/shortcut") + +require("prototypes/phase-1/utility-sprites.lua") + +require("prototypes/phase-1/item/utility") +require("prototypes/phase-1/item/science-pack") + +require("prototypes/phase-1/damage-types") +require("prototypes/phase-1/categories") +require("prototypes/phase-1/item-groups") +require("prototypes/phase-1/signal") +require("prototypes/phase-1/sound") +require("prototypes/phase-1/styles") +--require("prototypes/phase-1/space-structures") + +require("prototypes/phase-1/item/armor") +require("prototypes/phase-1/item/cargo-rocket") +require("prototypes/phase-1/item/condenser-turbine") +require("prototypes/phase-1/item/core-miner") +require("prototypes/phase-1/item/items") +require("prototypes/phase-1/item/gate") +require("prototypes/phase-1/item/meteor-defence") +require("prototypes/phase-1/item/platforms") +require("prototypes/phase-1/item/resources") +require("prototypes/phase-1/item/rocket-landing-pad") +require("prototypes/phase-1/item/rocket-launch-pad") +require("prototypes/phase-1/item/spaceship") +require("prototypes/phase-1/item/structures") +require("prototypes/phase-1/item/medpack") + +require("prototypes/phase-1/item/weapon-tesla") +require("prototypes/phase-1/item/weapon-cryogun") +require("prototypes/phase-1/item/weapon-plague") +require("prototypes/phase-1/item/weapon-railgun") + +require("prototypes/phase-1/item/equipment") + +require("prototypes/phase-1/fluid/fluid") + +require("prototypes/phase-1/recipe/recipe") +require("prototypes/phase-1/recipe/structures") +require("prototypes/phase-1/recipe/astrometrics-laboratory") +require("prototypes/phase-1/recipe/biochemical-laboratory") +require("prototypes/phase-1/recipe/cargo-rocket") +require("prototypes/phase-1/recipe/condenser-turbine") +require("prototypes/phase-1/recipe/core-miner") +require("prototypes/phase-1/recipe/decontamination-facility") +require("prototypes/phase-1/recipe/electromagnetics-laboratory") +require("prototypes/phase-1/recipe/material-fabricator") +require("prototypes/phase-1/recipe/gate") +require("prototypes/phase-1/recipe/genetics-laboratory") +require("prototypes/phase-1/recipe/gravimetrics-laboratory") +require("prototypes/phase-1/recipe/growth-facility") +require("prototypes/phase-1/recipe/hypercooler") +require("prototypes/phase-1/recipe/laser-laboratory") +require("prototypes/phase-1/recipe/lifesupport-facility") +require("prototypes/phase-1/recipe/manufacturing") +require("prototypes/phase-1/recipe/mechanical-laboratory") +require("prototypes/phase-1/recipe/observation") +require("prototypes/phase-1/recipe/particle-accelerator") +require("prototypes/phase-1/recipe/particle-collider") +require("prototypes/phase-1/recipe/plasma-generator") +require("prototypes/phase-1/recipe/platforms") +require("prototypes/phase-1/recipe/resources") +require("prototypes/phase-1/recipe/radiation-laboratory") +require("prototypes/phase-1/recipe/radiator") +require("prototypes/phase-1/recipe/recycling-facility") +require("prototypes/phase-1/recipe/rocket-landing-pad") +require("prototypes/phase-1/recipe/rocket-launch-pad") +require("prototypes/phase-1/recipe/science-lab") +require("prototypes/phase-1/recipe/science") +require("prototypes/phase-1/recipe/supercomputing") +require("prototypes/phase-1/recipe/thermodynamics-laboratory") +require("prototypes/phase-1/recipe/spaceship") +require("prototypes/phase-1/recipe/medpack") + +require("prototypes/phase-1/decorative/crater") +require("prototypes/phase-1/decorative/rocks") + +require("prototypes/phase-1/entity/entity") -- must be first +require("prototypes/phase-1/entity/astrometric-gravimetric") +require("prototypes/phase-1/entity/wide-beacon") +require("prototypes/phase-1/entity/cargo-rocket") +require("prototypes/phase-1/entity/condenser-turbine") +require("prototypes/phase-1/entity/core-miner") +require("prototypes/phase-1/entity/decontamination-lifesupport") +require("prototypes/phase-1/entity/dimensional-anchor") +require("prototypes/phase-1/entity/explosion") +require("prototypes/phase-1/entity/fluid-burner-generator") +require("prototypes/phase-1/entity/fuel-refinery") +require("prototypes/phase-1/entity/gate") +require("prototypes/phase-1/entity/genetics-laboratory") +require("prototypes/phase-1/entity/growth-facility") +require("prototypes/phase-1/entity/laser-radi-thermo") +require("prototypes/phase-1/entity/light") +require("prototypes/phase-1/entity/meteor") +require("prototypes/phase-1/entity/meteor-defence") +require("prototypes/phase-1/entity/recycle-mechanical") +require("prototypes/phase-1/entity/resources") +require("prototypes/phase-1/entity/rocket-fragments") +require("prototypes/phase-1/entity/rocket-landing-pad") +require("prototypes/phase-1/entity/rocket-launch-pad") +require("prototypes/phase-1/entity/particle-acc-col-fab") +require("prototypes/phase-1/entity/pylons") +require("prototypes/phase-1/entity/scaffold") +require("prototypes/phase-1/entity/space-biochemical") +require("prototypes/phase-1/entity/space-capsule") +require("prototypes/phase-1/entity/space-electromagnetics") +require("prototypes/phase-1/entity/space-hypercooler") +require("prototypes/phase-1/entity/space-manufactory") +require("prototypes/phase-1/entity/space-plasma-generator") +require("prototypes/phase-1/entity/space-radiator") +require("prototypes/phase-1/entity/space-supercomputer") +require("prototypes/phase-1/entity/space-science-lab") +require("prototypes/phase-1/entity/spaceship") +require("prototypes/phase-1/entity/spaceship-obstacles") +require("prototypes/phase-1/entity/starmap") +require("prototypes/phase-1/entity/supercharger") +require("prototypes/phase-1/entity/telescopes") +require("prototypes/phase-1/entity/ancient") + +require("prototypes/phase-1/technology/technology") +require("prototypes/phase-1/technology/bio-upgrades") + +require("prototypes/phase-1/combined/arcosphere") +require("prototypes/phase-1/combined/antimatter-reactor") +require("prototypes/phase-1/combined/big-heat-exchanger") +require("prototypes/phase-1/combined/big-turbine") +require("prototypes/phase-1/combined/delivery-cannon") +require("prototypes/phase-1/combined/electric-boiler") +require("prototypes/phase-1/combined/energy-transmitter") +require("prototypes/phase-1/combined/iridium-piledriver") +require("prototypes/phase-1/combined/interburbulator") +require("prototypes/phase-1/combined/lifesupport") +require("prototypes/phase-1/combined/nexus") +require("prototypes/phase-1/combined/pipe") +require("prototypes/phase-1/combined/probe") +require("prototypes/phase-1/combined/rail") +--require("prototypes/phase-1/combined/shield-projector") +require("prototypes/phase-1/combined/transport-belt") +require("prototypes/phase-1/combined/spaceship-clamps") +require("prototypes/phase-1/combined/weapon-bio") +require("prototypes/phase-1/combined/linked-container") + + +require("prototypes/phase-1/tile/space") +require("prototypes/phase-1/tile/regolith") +require("prototypes/phase-1/tile/asteroid") +require("prototypes/phase-1/tile/scaffold") +require("prototypes/phase-1/tile/plating") +require("prototypes/phase-1/tile/spaceship") + +require("prototypes/phase-1/compatibility/qol_research.lua") + +require("prototypes/phase-multi/item-group-assign") + +--log( serpent.block( data.raw["tile"], {comment = false, numformat = '%1.8g' } ) ) diff --git a/space-exploration_0.5.80/space-exploration/data_util.lua b/space-exploration_0.5.80/space-exploration/data_util.lua new file mode 100644 index 0000000..ae8aaae --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/data_util.lua @@ -0,0 +1,1082 @@ +local data_util = {} + +data_util.mod_prefix = "se-" -- update strings.cfg + +data_util.liquid_rocket_fuel_per_solid = 50 + +data_util.console_tint = {r=0, g=0.3, b=1} +data_util.console_alt_tint = {r=1,g=0.5,b=0} + +data_util.coolant_temperature = { + supercooled = -273, + cold = -100, + normal = -10, + hot = 25 +} + +data_util.obs_types = { + ["visible"] = {"visible", 12, 0.98}, + ["infrared"] = {"infrared", 10, 0.85}, + ["uv"] = {"uv", 10, 0.9}, + ["microwave"] = {"microwave", 8, 0.75}, + ["xray"] = {"xray", 4, 0.85}, + ["radio"] = {"radio", 6, 0.6}, + ["gammaray"] = {"gammaray", 3, 0.85}, +} + +data_util.char_to_multiplier = { + m = 0.001, + c = 0.01, + d = 0.1, + h = 100, + k = 1000, + K = 1000, + M = 1000000, + G = 1000000000, + T = 1000000000000, + P = 1000000000000000, +} + + +function data_util.string_to_number (str) + str = ""..str + local number_string = "" + local last_char = nil + for i = 1, #str do + local c = str:sub(i,i) + if c == "." or tonumber(c) ~= nil then + number_string = number_string .. c + else + last_char = c + break + end + end + local number = tonumber(number_string) + if number and last_char and data_util.char_to_multiplier[last_char] then + return number * data_util.char_to_multiplier[last_char] + end + return number +end + +function data_util.string_to_simple_int(str, continues) + str = ""..str + if continues then -- Remove the tech's prefix, to hopefully stop issues with numbers in the prefix. + str = str:gsub ("%w+-", "", 1) + end + local number_string = "" + for i = 1, #str do + local c = str:sub(i,i) + if tonumber(c) ~= nil then + number_string = number_string .. c + --[[ elseif continues then -- discard the numbers found so far if a non-number is found, if the flag is set to true + number_string = ""]] + end + end + local number = tonumber(number_string) + return number +end + +function data_util.string_split (str, sep) + if sep == nil then + sep = "%s" + end + local t={} + for str in string.gmatch(str, "([^"..sep.."]+)") do + table.insert(t, str) + end + return t +end + +function data_util.string_join (str_table, sep) + local str = "" + for _, str_part in pairs(str_table) do + if str ~= "" then + str = str .. sep + end + str = str .. str_part + end + return str +end + +function data_util.dot_string_less_than(a, b, allow_equal) + if allow_equal and a == b then return true end + local a_parts = data_util.string_split(a, ".") + local b_parts = data_util.string_split(b, ".") + for i = 1, #a_parts do + if tonumber(a_parts[i]) < tonumber(b_parts[i]) then + return true + elseif a_parts[i] ~= b_parts[i] then + return false + end + end + return false +end + +function data_util.dot_string_greater_than(a, b, allow_equal) + if allow_equal and a == b then return true end + local a_parts = data_util.string_split(a, ".") + local b_parts = data_util.string_split(b, ".") + for i = 1, #a_parts do + if tonumber(a_parts[i]) > tonumber(b_parts[i]) then + return true + elseif a_parts[i] ~= b_parts[i] then + return false + end + end + return false +end + +function data_util.remove_number_suffix(str) + local parts = data_util.string_split (str, "-") + local int = data_util.string_to_simple_int(parts[#parts]) + if int and int.."" == parts[#parts] then + -- last part was a number + parts[#parts] = nil + return data_util.string_join(parts, "-") + end + return str +end + +function data_util.replace (str, what, with) + what = string.gsub(what, "[%(%)%.%+%-%*%?%[%]%^%$%%]", "%%%1") -- escape pattern + with = string.gsub(with, "[%%]", "%%%%") -- escape replacement + return string.gsub(str, what, with) +end + + +function data_util.remove_from_table(list, item) + local index = 0 + for _,_item in ipairs(list) do + if item == _item then + index = _ + break + end + end + if index > 0 then + table.remove(list, index) + end +end + +function data_util.table_contains(table, check) + for k,v in pairs(table) do if v == check then return true end end + return false +end + +-- return {name = name, amount = amount::float} +function data_util.collapse_product(product) + if product[1] and type(product[1]) == "string" then + if product[2] then + return {name = product[1], amount = product[2]} + else + return {name = product[1], amount = 1} + end + end + if product.name then + local collapsed = {name = product.name, amount = product.amount, type = product.type} + if product.amount_min and product.amount_max then + collapsed.amount = (product.amount_min + product.amount_max) / 2 * (product.probability or 1) + end + return collapsed + end +end + +-- return {name = name, amount = amount::float} +function data_util.collapse_products(products) + local combined = {} + for _, product in pairs(products) do + local collapsed = data_util.collapse_product(product) + if collapsed then + if combined[collapsed.name] then + combined[collapsed.name].amount = combined[collapsed.name].amount + collapsed.amount + else + combined[collapsed.name] = collapsed + end + end + end + return combined +end + +function data_util.result_to_results(recipe_section) + -- transform result style definition to full results definition for a given prototype section + -- recipe_section is either the recipe prrototype, recipe.normal, or recipe.difficult + if not recipe_section.result then return end + local result_count = recipe_section.result_count or 1 + if type(recipe_section.result) == "string" then + recipe_section.results = {{type="item", name= recipe_section.result, amount = result_count}} + elseif recipe_section.result.name then + recipe_section.results = {recipe_section.result} + elseif recipe_section.result[1] then + result_count = recipe_section.result[2] or result_count + recipe_section.results = {{type="item", name= recipe_section.result[1], amount = result_count}} + end + recipe_section.result = nil +end + + +function data_util.get_ingredients_tables(recipe) + local tables = {} + if recipe.ingredients then table.insert(tables, recipe.ingredients) end + if recipe.normal and recipe.normal.ingredients then table.insert(tables, recipe.normal.ingredients) end + if recipe.expensive and recipe.expensive.ingredients then table.insert(tables, recipe.expensive.ingredients) end + return tables +end + +function data_util.conditional_modify(prototype) + -- pass in a partial prototype that includes .type and .name + -- overwrite sections of the raw prototype with the new one + if data.raw[prototype.type] and data.raw[prototype.type][prototype.name] then + local raw = data.raw[prototype.type][prototype.name] + + -- update to new spec + if not raw.normal then + raw.normal = { + enabled = raw.enabled, + energy_required = raw.energy_required, + requester_paste_multiplier = raw.requester_paste_multiplier, + hidden = raw.hidden, + ingredients = raw.ingredients, + results = raw.results, + result = raw.result, + result_count = raw.result_count, + } + raw.enabled = nil + raw.energy_required = nil + raw.requester_paste_multiplier = nil + raw.hidden = nil + raw.ingredients = nil + raw.results = nil + raw.result = nil + raw.result_count = nil + end + if not raw.expensive then + raw.expensive = table.deepcopy(raw.normal) + end + if not raw.normal.results and raw.normal.result then + data_util.result_to_results(raw.normal) + end + if not raw.expensive.results and raw.expensive.result then + data_util.result_to_results(raw.expensive) + end + + for key, property in pairs(prototype) do + if key == "ingredients" then + raw.normal.ingredients = property + raw.expensive.ingredients = property + elseif key ~= "normal" and key ~= "expensive" then + raw[key] = property + end + end + + if prototype.normal then + for key, property in pairs(prototype.normal) do + raw.normal[key] = property + end + end + + if prototype.expensive then + for key, property in pairs(prototype.expensive) do + raw.expensive[key] = property + end + end + + end +end + +function data_util.disable_recipe(recipe_name) + data_util.conditional_modify({ + type = "recipe", + name = recipe_name, + enabled = false, + normal = { + enabled = false + }, + expensive = { + enabled = false + } + }) +end + +function data_util.remove_recipe_from_effects(effects, recipe) + local index = 0 + for _,_item in ipairs(effects) do + if _item.type == "unlock-recipe" and _item.recipe == recipe then + index = _ + break + end + end + if index > 0 then + table.remove(effects, index) + end +end + +function data_util.remove_ingredient_sub(recipe, name) + for i = #recipe.ingredients, 1, -1 do + if recipe.ingredients[i] then + for _, value in pairs(recipe.ingredients[i]) do + if value == name then + table.remove(recipe.ingredients, i) + end + end + end + end +end + +function data_util.add_ingredient_sub(recipe, name, amount) + local found = false + for i = #recipe.ingredients, 1, -1 do + if recipe.ingredients[i] then + for _, value in pairs(recipe.ingredients[i]) do + if value == name then + found = true + recipe.ingredients[i] = {type="item", name=name, amount=amount} + break + end + end + end + end + if not found then + table.insert(recipe.ingredients, {type="item", name=name, amount=amount}) + end +end + +function data_util.replace_or_add_ingredient_sub(recipe, old, new, amount) + -- old can be nil to just add + if old then + data_util.remove_ingredient_sub(recipe, old) + end + data_util.add_ingredient_sub(recipe, new, amount) +end + +function data_util.replace_or_add_ingredient(recipe, old, new, amount) + if type(recipe) == "string" then recipe = data.raw.recipe[recipe] end + if not recipe then return end + if recipe.ingredients then + data_util.replace_or_add_ingredient_sub(recipe, old, new, amount) + end + if recipe.normal and recipe.normal.ingredients then + data_util.replace_or_add_ingredient_sub(recipe.normal, old, new, amount) + end + if recipe.expensive and recipe.expensive.ingredients then + data_util.replace_or_add_ingredient_sub(recipe.expensive, old, new, amount) + end +end + +function data_util.recipe_require_tech(recipe_name, tech_name) + if data.raw.recipe[recipe_name] and data.raw.technology[tech_name] then + data_util.disable_recipe(recipe_name) + for _, tech in pairs(data.raw.technology) do + if tech.effects then + data_util.remove_recipe_from_effects(tech.effects, recipe_name) + end + end + local already = false + data.raw.technology[tech_name].effects = data.raw.technology[tech_name].effects or {} + for _, effect in pairs(data.raw.technology[tech_name].effects) do + if effect.type == "unlock-recipe" and effect.recipe == recipe_name then + already = true + break + end + end + if not already then + table.insert(data.raw.technology[tech_name].effects, { type = "unlock-recipe", recipe = recipe_name}) + end + end +end + +function data_util.tech_split_at_level(tech_name, level) + -- skip if it exists + if data.raw.technology[tech_name.."-"..level] then return end + local last_tech = data.raw.technology[tech_name] + for i = 1, level - 1 do + if data.raw.technology[tech_name.."-"..i] then + last_tech = data.raw.technology[tech_name.."-"..i] + end + end + if last_tech then + local new_tech = table.deepcopy(last_tech) + last_tech.max_level = level - 1 + new_tech.name = tech_name.."-"..level + new_tech.prerequisites = {last_tech.name} + data:extend({new_tech}) + -- make the chain linear + local last_level = new_tech.max_level or level + if last_level ~= "infinite" then + local next_level = last_level + 1 + if data.raw.technology[tech_name.."-"..next_level] then + local next_tech = data.raw.technology[tech_name.."-"..next_level] + for i, prereq in pairs(next_tech.prerequisites) do + if prereq == last_tech.name then + debug_log("Changing tech "..next_tech.name .." prerequisite from " .. last_tech.name.." to "..new_tech.name) + next_tech.prerequisites[i] = new_tech.name + end + end + end + end + return new_tech + end +end + +function data_util.tech_split_at_levels(tech_name, levels) + local techs = {} + for _, level in pairs(levels) do + local tech = data_util.tech_split_at_level(tech_name, level) + if tech then table.insert(techs, tech) end + end + return techs +end + + +function data_util.tech_split_levels(tech_name, max_split_level) + if not max_split_level then max_split_level = 9 end + local max_level = 1 + local prev_tech_template + local prev_tech_name + local techs = {} + local last_i = 0 + for i = 1, max_split_level do + -- prep prerequisites + local prerequisites = {} + local tech_template + + -- load best template + if data.raw.technology[tech_name.."-"..i] then + tech_template = data.raw.technology[tech_name.."-"..i] + if tech_template.prerequisites then + prerequisites = tech_template.prerequisites + end + tech_template.prerequisites = nil + end + if not tech_template then + if prev_tech_template and (max_level == "infinite" or i <= max_level) then + tech_template = prev_tech_template + end + end + + if not tech_template then return end + prev_tech_template = tech_template + last_i = i + + -- link the chain + if prev_tech_name and not data_util.table_contains(prerequisites, prev_tech_name)then + table.insert(prerequisites, prev_tech_name) + end + + -- establish maximum + if max_level ~= "infinite" then + if tech_template.max_level then + if tech_template.max_level == "infinite" then + max_level = "infinite" + elseif tech_template.max_level > max_level then + max_level = tech_template.max_level + end + end + end + + local new_tech = table.deepcopy(tech_template) + new_tech.name = tech_name.."-"..i + new_tech.prerequisites = prerequisites + new_tech.max_level = nil + data:extend({new_tech}) + + prev_tech_name = new_tech.name + table.insert(techs, new_tech) + end + if max_level == "infinite" then + data.raw.technology[tech_name.."-"..last_i].max_level = max_level + else + data.raw.technology[tech_name.."-"..last_i].max_level = math.max(last_i, max_level) + end + return techs +end + +function data_util.tech_lock_recipes(tech_name, recipe_names) + if not data.raw.technology[tech_name] then return end + if type(recipe_names) == "string" then recipe_names = {recipe_names} end + for _, recipe_name in pairs(recipe_names) do + if data.raw.recipe[recipe_name] then + data_util.recipe_require_tech(recipe_name, tech_name) + end + end +end + +function data_util.tech_find_parent_names_cascade(names, prototype_name, cascade) + if not (data.raw.technology[prototype_name] and data.raw.technology[prototype_name].prerequisites) then return end + if data.raw.technology[prototype_name].prerequisites then + for _, prerequisite in pairs(data.raw.technology[prototype_name].prerequisites) do + if not names[prerequisite] then + names[prerequisite] = prerequisite + if cascade then + data_util.tech_find_parent_names_cascade(names, prerequisite, cascade) + end + end + end + end + return names +end + +function data_util.tech_find_parent_names(prototype_name, cascade) + return data_util.tech_find_parent_names_cascade({}, prototype_name, cascade) +end + +function data_util.tech_find_child_names(prototype_name) + local names = {} + for _, tech in pairs(data.raw.technology) do + if tech.prerequisites then + for _, prerequisite in pairs(tech.prerequisites) do + if prerequisite == prototype_name then + table.insert(names, tech.name) + end + end + end + end + return names +end + +function data_util.tech_add_prerequisites(prototype_name, prerequisites) + local prototype = data.raw.technology[prototype_name] + if not prototype then return end + for _, new_prerequisite in pairs(prerequisites) do + local found = false + if prototype.prerequisites then + for _, old_prerequisite in pairs(prototype.prerequisites) do + if old_prerequisite == new_prerequisite then + found = true break + end + end + end + if not found then + prototype.prerequisites = prototype.prerequisites or {} + table.insert(prototype.prerequisites, new_prerequisite) + end + end +end + +function data_util.tech_remove_prerequisites (prototype_name, prerequisites) + local prototype = data.raw.technology[prototype_name] + if not prototype then return end + for _, new_prerequisite in pairs(prerequisites) do + if prototype.prerequisites then + for i = #prototype.prerequisites, 1, -1 do + if prototype.prerequisites[i] == new_prerequisite then + table.remove(prototype.prerequisites, i) + end + end + end + end +end +--[[ +function util.tech_remove_prerequisites (prototype_name, prerequisites) + local prototype = data.raw.technology[prototype_name] + if not prototype then return end + for _, new_prerequisite in pairs(prerequisites) do + for _, old_prerequisite in pairs(prototype.prerequisites) do + if old_prerequisite == new_prerequisite then + prototype.prerequisites[_] = nil + end + end + end +end]]-- + +function data_util.tech_has_ingredient (prototype_name, pack) + local prototype = data.raw.technology[prototype_name] + if prototype then + for _, ingredient in pairs(prototype.unit.ingredients) do + if ingredient[1] == pack or ingredient.name == pack then + return true + end + end + end + return false +end + +function data_util.tech_remove_ingredients_recursive (prototype_name, packs) + if not data.raw.technology[prototype_name] then return end + local names = data_util.tech_find_parent_names(prototype_name, true) + table.insert(names, prototype_name) + + for _, name in pairs(names) do + local prototype = data.raw.technology[name] + if prototype then + for _, pack in pairs(packs) do + for i = #prototype.unit.ingredients, 1, -1 do + if prototype.unit.ingredients[i] and + (prototype.unit.ingredients[i][1] and prototype.unit.ingredients[i][1] == pack + or prototype.unit.ingredients[i].name and prototype.unit.ingredients[i].name == pack) then -- added handling for full format + table.remove(prototype.unit.ingredients, i) + end + end + end + end + end +end + +function data_util.tech_remove_ingredients (prototype_name, packs) + local prototype = data.raw.technology[prototype_name] + if prototype then + for _, pack in pairs(packs) do + for i = #prototype.unit.ingredients, 1, -1 do + if prototype.unit.ingredients[i] and + (prototype.unit.ingredients[i][1] and prototype.unit.ingredients[i][1] == pack + or prototype.unit.ingredients[i].name and prototype.unit.ingredients[i].name == pack) then -- added handling for full format + table.remove(prototype.unit.ingredients, i) + end + end + end + end +end + +function data_util.tech_remove_effects(prototype_name, effects) + --log("tech_remove_effects") + local prototype = data.raw.technology[prototype_name] + if not data.raw.technology[prototype_name] then return end + for _, new_effect in pairs(effects) do + --log("new effect: " .. new_effect.type .. " " .. new_effect.recipe) + for _, old_effect in pairs(prototype.effects) do + --log("old effect: " .. old_effect.type .. " " .. old_effect.recipe) + local match = true + for new_key, new_var in pairs(new_effect) do + if old_effect[new_key] ~= new_var then + --log("compare fails") + match = false break + end + end + if match then + -- log("compare pass") + prototype.effects[_] = nil + end + end + end +end + +-- cascade applies to children too +function data_util.tech_add_ingredients(prototype_name, ingredients, cascade, allow_multiple_specialist, allow_multiple_deep) + --log("tech_add_ingredients: " .. prototype_name) + local prototype = data.raw.technology[prototype_name] + if not prototype then return end + local added = false + for _, new_ingredient in pairs(ingredients) do + local found = false + local specialist_pack = nil + if string.find(new_ingredient, data_util.mod_prefix .. "astronomic-science-pack", 1, true) then + specialist_pack = data_util.mod_prefix .. "astronomic-science-pack" + elseif string.find(new_ingredient, data_util.mod_prefix .. "energy-science-pack", 1, true) then + specialist_pack = data_util.mod_prefix .. "energy-science-pack" + elseif string.find(new_ingredient, data_util.mod_prefix .. "material-science-pack", 1, true) then + specialist_pack = data_util.mod_prefix .. "material-science-pack" + elseif string.find(new_ingredient, data_util.mod_prefix .. "biological-science-pack", 1, true) then + specialist_pack = data_util.mod_prefix .. "biological-science-pack" + end + local deep_pack = nil + if string.find(new_ingredient, data_util.mod_prefix .. "deep-space-science-pack", 1, true) then + deep_pack = data_util.mod_prefix .. "deep-space-science-pack" + end + if specialist_pack and not allow_multiple_specialist then + for _, old_ingredient in pairs(prototype.unit.ingredients) do + if string.find(old_ingredient[1] or old_ingredient.name, specialist_pack, 1, true) then -- added haldling for full format + old_ingredient[1] = new_ingredient + found = true break + end + end + else + if deep_pack and not allow_multiple_deep then + for _, old_ingredient in pairs(prototype.unit.ingredients) do + if string.find(old_ingredient[1] or old_ingredient.name, deep_pack, 1, true) then -- added haldling for full format + old_ingredient[1] = new_ingredient + found = true break + end + end + else + for _, old_ingredient in pairs(prototype.unit.ingredients) do + if old_ingredient[1] and old_ingredient[1] == new_ingredient or old_ingredient.name and old_ingredient.name == new_ingredient then -- added haldling for full format + found = true break + end + end + end + end + if not found then + table.insert(prototype.unit.ingredients, {new_ingredient, 1}) + added = true + end + end + if added and cascade then + local child_techs = data_util.tech_find_child_names(prototype_name) + for _, tech in pairs(child_techs) do + data_util.tech_add_ingredients(tech, ingredients, cascade) + end + end +end + +-- cascade applies to children too +function data_util.tech_add_ingredients_with_prerequisites (prototype_name, ingredients) + -- assumes that ingredient and tech are same name + --log("tech_add_ingredients: " .. prototype_name) + local prototype = data.raw.technology[prototype_name] + if not prototype then return end + for _, ingredient in pairs(ingredients) do + if not data_util.tech_has_ingredient(prototype_name, ingredient) then + data_util.tech_add_prerequisites(prototype_name, {ingredient}) + data_util.tech_add_ingredients(prototype_name, {ingredient}, true) + end + end +end + +function data_util.disallow_productivity(recipe_name) + for _, prototype in pairs(data.raw["module"]) do + if prototype.limitation and string.find(prototype.name, "productivity", 1, true) then + for i = #prototype.limitation, 1, -1 do + if prototype.limitation[i] == recipe_name then + table.remove(prototype.limitation, i) + end + end + end + end +end + +function data_util.allow_productivity(recipe_names) + if type(recipe_names) == "string" then + recipe_names = {recipe_names} + end + for _, recipe_name in pairs(recipe_names) do + if data.raw.recipe[recipe_name] then + for _, prototype in pairs(data.raw["module"]) do + if prototype.limitation and string.find(prototype.name, "productivity", 1, true) then + table.insert(prototype.limitation, recipe_name) + end + end + end + end +end + +function data_util.replace_filenames_recursive(subject, what, with) + if not subject then return end + if subject.filename then + subject.filename = data_util.replace(subject.filename, what, with) + end + for _, sub in pairs(subject) do + if (type(sub) == "table") then + data_util.replace_filenames_recursive(sub, what, with) + end + end +end + +function data_util.tint_recursive(subject, tint) + if not subject then return end + if subject.filename then + subject.tint = tint + end + for _, sub in pairs(subject) do + if (type(sub) == "table") then + data_util.tint_recursive(sub, tint) + end + end +end + +function data_util.blend_mode_recursive(subject, blend_mode) + if not subject then return end + if subject.filename then + subject.blend_mode = blend_mode + end + for _, sub in pairs(subject) do + if (type(sub) == "table") then + data_util.blend_mode_recursive(sub, blend_mode) + end + end +end + +function data_util.shift_recursive(subject, shift) + if not subject then return end + if subject.filename then + subject.shift = shift + end + for _, sub in pairs(subject) do + if (type(sub) == "table") then + data_util.shift_recursive(sub, shift) + end + end +end + +function data_util.replace_sr_with_half_hr(subject) + if not subject then return end + if subject.hr_version then + subject.width = math.floor(subject.hr_version.width/2) + subject.height = math.floor(subject.hr_version.height/2) + if subject.hr_version.x then subject.x = math.floor(subject.hr_version.x/2) end + if subject.hr_version.y then subject.y = math.floor(subject.hr_version.y/2) end + end + for _, sub in pairs(subject) do + if (type(sub) == "table") then + data_util.replace_sr_with_half_hr(sub) + end + end +end + +function data_util.shift_sprite(sprite, shift) + local shifted_sprite = table.deepcopy(sprite) + shifted_sprite.shift = shift + if shifted_sprite.hr_version then + shifted_sprite.hr_version.shift = shift + end + return shifted_sprite +end + +function data_util.make_recipe(proto) + --name is prefixed with data_util.mod_prefix + --energy required deafults to 10 + local name = proto.name + if proto.is_data then name = name .. "-data" end + local def = { + type = "recipe", + name = name, + category = proto.category or nil, + enabled = proto.enabled == true, + energy_required = proto.energy_required or 10, + ingredients = proto.ingredients, + results = proto.results or { { name = name, amount = 1 } }, + icon = proto.icon or nil, + icons = proto.icons or nil, + icon_size = proto.icon_size or 32, + crafting_machine_tint = proto.crafting_machine_tint or nil, + main_product = proto.main_product or nil, + allow_as_intermediate = proto.allow_as_intermediate, + subgroup = proto.subgroup or nil, + order = proto.order or nil, + localised_name = proto.localised_name, + localised_description = proto.localised_description, + always_show_products = true, + always_show_made_in = true, + } + + if (not def.main_product) and #def.results == 1 then + local p_name = def.results[1].name or def.results[1][1] + local p_type = def.results[1].type or "item" + local prod = data.raw[p_type][p_name] + if p_type == "item" and not prod then + p_type = "capsule" + prod = data.raw[p_type][p_name] + end + if prod then + def.main_product = prod.name + end + end + if not (def.icon or def.icons) then + local p_name = def.results[1].name or def.results[1][1] + local p_type = def.results[1].type or "item" + local prod = data.raw[p_type][p_name] + if p_type == "item" and not prod then + p_type = "capsule" + prod = data.raw[p_type][p_name] + end + if prod then + --log("recipe " .. name .. " icon " .. p_type .. "." .. p_name) + if prod.icon then + def.icon = prod.icon + def.icon_size = prod.icon_size + elseif prod.icons then + def.icons = prod.icons + else + --log("recipe " .. name .. " error: items has no icon(s)") + end + elseif p_type and p_name then + --log("recipe " .. name .. " can't find: " .. p_type .. "." .. p_name) + else + --log("recipe " .. name .. " error") + end + end + data:extend({def}) +end + + +function data_util.icon_stack_shift(original_shift, scale, offset) + if original_shift or added_shift then + local shift = original_shift and table.deepcopy(original_shift) or {0,0} + shift[1] = shift[1] * scale + shift[2] = shift[2] * scale + if offset then + shift[1] = shift[1] + offset[1] * 32 + shift[2] = shift[2] + offset[2] * 32 + end + return shift + end +end + +function data_util.multiply_tables(a, b) + if a and b then + local keys = {} + for k,v in pairs(a) do + keys[k]=k + end + for k,v in pairs(b) do + keys[k]=k + end + local mult = {} + for k, v in paits(keys) do + mult[k] = (a[k] or 1) * (b[k] or 1) + end + return mult + end + return a or b +end + +function data_util.add_icons_to_stack(existing_stack, icons_properties) + local stack = existing_stack or {{ icon = "__space-exploration-graphics__/graphics/blank.png", scale = 1, icon_size = 32 }} + for _, icon_properties in pairs(icons_properties) do + if icon_properties.icon then + data_util.add_icon_to_stack(stack, icon_properties.icon, icon_properties.properties) + end + end + return stack +end + +function data_util.add_icon_to_stack(existing_stack, icon_or_prototype, properties) + + -- properties.scale, properties.offset (0-1), tint? + -- assume base layer is 32, as this is forced in all use cases + local stack = existing_stack or {{ icon = "__space-exploration-graphics__/graphics/blank.png", scale = 1, icon_size = 32 }} + + local scale = properties and properties.scale or 1 + local offset = properties and properties.offset -- note, this is in a 0-1 scale, not pixels, ends up being multiplied by 32 + local tint = properties and properties.tint + local default_size = icon_or_prototype.icon_size or 64 -- this can still set the icon_size for icons not just icon + local icons = {} + + if icon_or_prototype.icons then + icons = icon_or_prototype.icons + elseif icon_or_prototype.icon then + table.insert(icons, { + icon = icon_or_prototype.icon, + icon_size = icon_or_prototype.icon_size or 64, + }) + elseif icon_or_prototype[1] and icon_or_prototype[1].icon then + -- format was {{icon = ...}} + icons = icon_or_prototype + end + + for _, icon in pairs(icons) do + if icon.icon then + local icon_size = icon.icon_size or default_size + table.insert(stack, { + icon=icon.icon, + icon_size=icon_size, + scale=(icon.scale or 1) * scale * 32 / icon_size, + shift= data_util.icon_stack_shift(icon.shift, scale, offset), + tint= data_util.multiply_tables(icon.tint, tint) + }) + end + end + return stack +end + +function data_util.transition_icons(icon_from, icon_to) + if icon_to.icon then -- single 'to' icon format + return { + { icon = "__space-exploration-graphics__/graphics/blank.png", scale = 0.5, shift = {0, 0}, icon_size = 64 }, -- to lock scale + { icon = icon_from.icon, scale = 0.33 * 64 / icon_from.icon_size, shift = {8, -8}, icon_size = icon_from.icon_size }, + { icon = icon_to.icon, scale = 0.33 * 64 / icon_to.icon_size, shift = {-8, 8}, icon_size = icon_to.icon_size }, + { icon = "__space-exploration-graphics__/graphics/icons/transition-arrow.png", scale = 0.5, shift = {0, 0}, icon_size = 64 }, -- to overlay + } + else -- multiple 'to' icons + local icons = { + { icon = "__space-exploration-graphics__/graphics/blank.png", scale = 0.5, shift = {0, 0}, icon_size = 64 }, -- to lock scale + { icon = icon_from.icon, scale = 0.33 * 64 / icon_from.icon_size, shift = {8, -8}, icon_size = icon_from.icon_size }, + } + for _, icon_and_size in pairs(icon_to) do + table.insert(icons, { icon = icon_and_size.icon, scale = 0.25 * 64 / icon_and_size.icon_size, shift = {-12 + (_-1) * 8, 12}, icon_size = icon_and_size.icon_size }) + end + table.insert(icons, { icon = "__space-exploration-graphics__/graphics/icons/transition-arrow.png", scale = 0.5, shift = {0, 0}, icon_size = 64 }) + return icons + end +end + +function data_util.auto_sr_hr(hr_version) + local sr_version = table.deepcopy(hr_version) + if not hr_version.scale then + hr_version.scale = 0.5 + end + if not hr_version.priority then + hr_version.priority = "extra-high" + end + sr_version.scale = (hr_version.scale or 0.5) * 2 + sr_version.width = math.floor(hr_version.width/2) + sr_version.height = math.floor(hr_version.height/2) + if hr_version.x then + sr_version.x = math.floor(hr_version.x/2) + end + if hr_version.y then + sr_version.y = math.floor(hr_version.y/2) + end + sr_version.filename = data_util.replace(sr_version.filename, "/hr/", "/sr/") + sr_version.filename = data_util.replace(sr_version.filename, "/hr-", "/") + sr_version.hr_version = hr_version + return sr_version +end + +function data_util.collision_description(prototype) + local disallowed = {} + --if data_util.table_contains(prototype.collision_mask, "water-tile") then + -- table.insert(disallowed, {"space-exploration.collision_mask_water"}) + --end + if not prototype.collision_mask then return end + if data_util.table_contains(prototype.collision_mask, "ground-tile") then + table.insert(disallowed, {"space-exploration.collision_mask_land"}) + end + if data_util.table_contains(prototype.collision_mask, space_collision_layer) then + table.insert(disallowed, {"space-exploration.collision_mask_space_platform"}) + end + if data_util.table_contains(prototype.collision_mask, spaceship_collision_layer) or data_util.table_contains(prototype.collision_mask, space_collision_layer) then + table.insert(disallowed, {"space-exploration.collision_mask_spaceship"}) + end + if #disallowed > 0 then + local disallowed_locale = nil + for _, disallow in pairs(disallowed) do + if disallowed_locale == nil then + disallowed_locale = disallow + log(prototype.name .. " " .. disallow[1]) + else + disallowed_locale = {"space-exploration.comma_separate", disallowed_locale, disallow} + end + end + prototype.localised_description = {"space-exploration.placement_restriction_line", disallowed_locale, prototype.localised_description or {"entity-description."..prototype.name}} + end +end + +function data_util.auto_box(x, y, inset, shift, top_extension) + inset = inset or 0 + shift = shift or {0,0} + top_extension = top_extension or 0 + return {{-x/2+inset+shift[1], -y/2+inset+shift[2]-top_extension},{x/2-inset+shift[1], y/2-inset+shift[2]}} +end + +function data_util.resistances_max(resistances, add_resistances) + local r = table.deepcopy(resistances or {}) + for _, add_resistance in pairs(add_resistances) do + local found = false + for _, resistance in pairs(r) do + if resistance.type == add_resistance.type then + found = true + resistance.percent = math.max(resistance.percent or 0, add_resistances.percent or 0) + resistance.amount = math.max(resistance.amount or 0, add_resistances.amount or 0) + end + end + if not found then + table.insert(r, {type = add_resistance.type, amount = add_resistance.amount, percent = add_resistance.percent}) + end + end + return r +end + +function data_util.extend_style(base_name, new_name, styles) + local base_style = data.raw["gui-style"]["default"][base_name] + local prototype = {type = base_style.type, parent = base_name} + data_util.apply_styles(prototype, styles) + data.raw["gui-style"]["default"][new_name] = prototype + return prototype +end + +function data_util.apply_styles(prototype, styles) + for k, v in pairs(styles) do + prototype[k] = v + end + return prototype +end + +return data_util diff --git a/space-exploration_0.5.80/space-exploration/info.json b/space-exploration_0.5.80/space-exploration/info.json new file mode 100644 index 0000000..b75f344 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/info.json @@ -0,0 +1,101 @@ +{ + "name": "space-exploration", + "version": "0.5.80", + "title": "Space Exploration (Experimental)", + "author": "Earendel", + "dependencies": [ + "base >= 1.1.34", + "aai-industry >= 0.5.3", + "alien-biomes >= 0.6.4", + "jetpack >= 0.2.6", + "robot_attrition >= 0.5.9", + "shield-projector >= 0.1.2", + "space-exploration-graphics >= 0.5.11", + "space-exploration-graphics-2 >= 0.1.1", + "space-exploration-graphics-3 >= 0.1.1", + "space-exploration-graphics-4 >= 0.1.1", + "space-exploration-graphics-5 >= 0.1.2", + "~ space-exploration-postprocess >= 0.5.11", + "informatron >= 0.2.1", + "aai-signal-transmission >= 0.4.1", + + "? space-exploration-hr-graphics >= 0.5.1", + "? aai-containers >= 0.2.7", + "? bullet-trails >= 0.6.1", + "? grappling-gun >= 0.3.1", + "? combat-mechanics-overhaul >= 0.6.15", + "? equipment-gantry >= 0.1.1", + + "! angelsindustries", + "! angelspetrochem", + "! angelsrefining", + "! angelssmelting", + + "! bobelectronics", + "! bobores", + "! bobplates", + "! bobpower", + "! bobrevamp", + "! bobtech", + "! bobvehicleequipment", + "! bobwarfare", + + "! Yuoki", + + "! pycoalprocessing", + "! pyindustry", + "! pyhightech", + + "! ab_logisticscenter", + "! angelsinfiniteores", + "! BasicSeaBlock", + "! BitersBegone", + "! BitersBegoneUpdated", + "! bobmodules", + "! bulkteleport", + "! Clockwork", + "! dangOreus", + "! dark-matter-replicators", + "! dark-matter-replicators-0_17-port", + "! DeepMine", + "! endlessresources", + "! Explosive Excavation", + "! FactorioExtended-Core", + "! FactorioExtended-Plus-Core", + "! IndustrialRevolution", + "! IndustrialRevolution2", + "! inf_res", + "! infinite-resources-depletion", + "! ItemTeleportation", + "! LandfillPainting", + "! modmash", + "! MoreScience", + "! MoreSciencePacks", + "! omnimatter", + "! OnlyReds", + "! PersonalTeleporter", + "! pickerextended", + "! pickerinventorytools", + "! PlacePump", + "! PumpAnywhere", + "! PyBlock", + "! railgun_revival", + "! rso-mod", + "! SeaBlock", + "! SchallMachineScaling", + "! SchallOreConversion", + "! sonaxaton-infinite-resources", + "! SpaceMod", + "! TagToTeleport", + "! TeamCoop", + "! Teleportation_Redux", + "! traintunnels", + "! Unlimited-Resources", + "! UnlimitedProductivity", + "! vtk-deep-core-mining", + "! warptorio" + ], + "description": "Build Cargo Rockets to launch stuff into space. Ride a rocket into space yourself and start spacewalking. Build an orbital space platform to develop difficult data-driven space science. Build a spaceship tile by tile, fly it from a planet surface to other planets, moons, asteroid fields. Build interstellar death rays and deep space mining colonies. Explore ancient ruins on alien planets and relics lost in deep space. Not recommended to play with non-dependency mods while in experimental phase.", + "factorio_version": "1.1", + "homepage": "https://spaceexploration.miraheze.org/wiki/Main_Page" +} diff --git a/space-exploration_0.5.80/space-exploration/licence.txt b/space-exploration_0.5.80/space-exploration/licence.txt new file mode 100644 index 0000000..021a358 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/licence.txt @@ -0,0 +1,21 @@ +FMLDOL +Factorio Mod Limited Distribution Only Licence +https://docs.google.com/document/d/1z-6hZQekEHOu1Pk4z-V5LuwlHnveFLJGTjVAtjYHwMU +This software is provided without warranty and the software author/license owner cannot be held liable for damages. + +Commercial Use: +No. +You are not allowed to make money off this mod or any of the contained assets. +You are allowed to feature the mods in other media, such as Twitch or YouTube. It would be nice if you mentioned Earendel's Patreon https://www.patreon.com/earendel when featuring the mod but this in not a requirement. + +Modification: +Restricted. +You may make alterations for your own private personal use only. +You are not allowed to distribute any content from the mod, or anything altered or derived from this mod with the following exception: +You may post partial modified sections of this mod in Earendel's discord https://discord.gg/ymjUVMv for the purpose of providing bug fixes or enhancements + +Distribution: +You cannot distribute any content of the mod separate from the complete mod package. +You can distribute the complete and unmodified mod package with the following conditions: +The mod must not be modified. (Packaging the mod into a larger zip file does not count as modification. It can be used in mod set packs.) +You must disclose the source by providing a link to the mod on the mod portal https://mods.factorio.com, a link to the Earendel's discord https://discord.gg/ymjUVMv for bug reporting and discussion, and a link to Earendel's Patreon https://www.patreon.com/earendel to support further development. diff --git a/space-exploration_0.5.80/space-exploration/locale/cs/strings.cfg b/space-exploration_0.5.80/space-exploration/locale/cs/strings.cfg new file mode 100644 index 0000000..2eed33e --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/locale/cs/strings.cfg @@ -0,0 +1,1905 @@ +spaceship-integrity100=+100 strukturální integrity vesmírné lodi +spaceship-integrity300=+300 strukturální integrity vesmírné lodi +spaceship-integrity500=+500 strukturální integrity vesmírné lodi +arcosphere-discovery=Sebrat arkosféru z hlubokého mezihvězdného prostoru +core-mining-productivity-5=+5% produktivity těžby jádra +se-zone-discovery-random=Spustí náhodné objevení zóny v okamžiku vyzkoumání. +se-zone-discovery-targeted=Spustí objevení zóny s důrazem na suroviny v okamžiku vyzkoumání. +se-zone-discovery-deep=Spustí objevení zóny v hlubokém vesmíru v okamžiku vyzkoumání. +unlock-spaceship-victory=Odemyká výherní podmínku: Let vesmírnou lodí s integritou vyšší než 3000 a Nexusem v módu distorčního pohonu při rychlosti 250 po dobu 60 sekund v mezihvězdném prostoru. + +[mod-name] +space-exploration=Space Exploration + +[mod-description] +space-exploration=Postav nákladní raketu a pošli svých šest švestek do vesmíru. Nastup si do rakety a prolétni se "tam nahoře". Postav na orbitě vesmírnou stanici a vrhni se do náročného, daty poháněného vesmírného výzkumu. Postav vesmírnou loď kousíček po kousíčku, a doleť s její pomocí na jiné planety, měsíce, pásy asteroidů, a na mnoho dalších míst. Velmi doporučujeme hrát s modifikací AAI Industry. Space Exploration Postprocess je nutný ke spuštění modifikace (nelze ho uvést jako závislý mód, dlouhý příběh). Nedoporučujeme hrát bez modifikací, na kterých je SE závislá, alespoň dokud je modifikace v experimentální fázi. + +[space-exploration] +space-exploration=Space Exploration +menu_space-exploration=Space Exploration +title_space-exploration=Space Exploration +name=Name +rename-something=Rename __1__ +trigger-none=None (Manual) +trigger-fuel-full=Vypustit při plné palivové nádrži +trigger-cargo-full=Vypustit při plném nákladovém prostoru +trigger-fuel-full-signal=Vypustit na zelený signál při plné palivové nádrži +trigger-cargo-full-signal=Vypustit na zelený signál při plném nákladovém prostoru +trigger-cargo-full-or-signal=Vypustit na zelený signál nebo při plném nákladovém prostoru +destination-type-zone=Přibližná poloha +destination-type-landing-pad=Přistávací plocha pro náklad +button-launch=Vypustit +button-launch-disabled=Vypustit (Zakázáno) +destination-crash-warning=Varování: Vyberte přistávací plochu pro náklad ke snížení pravděpodobnosti havárie +recipe-to=__1__ na __2__ +recipe-from=__1__ z __2__ +simple-a-b=__1____2__ +simple-a-b-space=__1__ __2__ +simple-a-b-comma=__1__, __2__ +simple-a-b-break=__1__\n__2__ +remote-view=Uplink navigačního satelitu [__CONTROL__se-remote-view__] +remote-view-window-title=[img=virtual-signal/se-remote-view] Navigační satelit [__CONTROL__se-remote-view__] +interstellar-map=Mezihvězdná mapa +interstellar-space=Mezihvězdný prostor +planetary-system=Systém __1__ +remote-view-currently-viewing=Aktuálně zobrazeno: +remote-view-instruction=Vyšlete více satelitů k objevení většího množství hvězd, planet, měsíců, a dalších zón. +exit-remote-view=Opustit uplink navigačního satelitu [__CONTROL__se-remote-view__] +open-zonelist=Otevřít mapu vesmíru +remote-view-spaceships=__1__ vesmírných lodí +remote-view-spaceships-anchored=__1__ zakotvených vesmírných lodí +remote-view-clamps=__1__ svorek vesmírných lodí +remote-view-show-hide-resources=Zobrazit/skrýt suroviny +remote-view-show-hide-stats=Zobrazit/skrýt statistiky +remote-view-show-hide-anchor-info=Zobrazit/skrýt informace o kotvě +zonelist-window-title=[img=virtual-signal/se-planet-orbit] Mapa vesmíru [__CONTROL__se-universe-explorer__] +priority-icon=[img=virtual-signal/se-accolade] +priority-tooltip=Priorita (k vyfiltrování důležitých zón od těch irelevantních) +delete-zone-button=[img=virtual-signal/se-remove] Odstranit povrch +delete-zone-button-tooltip=Některé povrchy nemohou být odstraněny. +delete-zone-button-no-surface-tooltip=Povrch neexistuje. +scan-zone-button=[img=item/satellite] Skenovat povrch +scan-zone-button-tooltip=Varování: Hra může být v průběhu skenování zpomalena. Skenování může být kdykoli zastaveno. +scan-zone-button-disabled-tooltip=Ke skenování povrchu musíte vyslat satelit. +stop-scan-zone-button=[img=item/satellite] Zastavit veškeré skenování +stop-scan-zone-button-tooltip=Zastaví veškeré skenovací procesy na všech površích. +remote-view-requires-satellite=K používání uplinku navigačního satelitu byste nejdříve museli mít navigační satelit. +satellite-discovered-platform=[color=cyan]Satelit objevil orbitální vesmírnou stanici.[/color]. Otevřete [img=virtual-signal/se-planet-orbit] Mapu vesmíru [__CONTROL__se-universe-explorer__], vyberte __1__, a stiskněte Zobrazit povrch. Mohlo by tam být hodně užitečných věcí. +satellite-view-unlocked=Odemkli jste [color=cyan][img=virtual-signal/se-remote-view] Uplink navigačního satelitu[/color]. To umožňuje zobrazit povrch celé planety, a dalších míst, které jste objevili. Stiskněte [color=green][__CONTROL__se-remote-view__][/color] k aktivaci, nebo použijte tlačítko vedle vašeho "hotbaru". +source-discovered-zone=[color=cyan]__1__ objevil novou __2__: [/color][img=__3__] [color=white]__4__[/color]. Objevené lokace mohou být zobrazeny v [img=virtual-signal/se-planet-orbit] Mapě vesmíru [__CONTROL__se-universe-explorer__]. +discovered-zone=[color=cyan]Byla objevená nová __1__: [img=__2__] [/color][color=white]__3__[/color]. +discovered-anomaly-additional=Byl zjištěn neznámý objekt v [img=virtual-signal/se-anomaly] anomálii. Váš [img=virtual-signal/informatron] Průzkumný deník [__CONTROL__informatron__] byl aktualizován. +satellite-discovered-nothing=Byl vypuštěn nový satelit, ale nenašel nic nového. Více k objevení může být kolem jiných hvězd. +tech-discovered-nothing=Teleskopy nenašly v blízkosti hvězd nic nového. Více k objevení může být v hlubokém vesmíru. +tech-deep-discovered-nothing=Teleskopy nenašly v hlubokém vesmíru nic nového. +galaxy_ship_authenticated=[img=virtual-signal/se-spaceship] Opuštěná vesmírná loď: [color=cyan] Biosignatura ověřena. Přístupový kód ke vzduchovému uzávěru je 2236067964. Odesílám nouzový záložní protokol. [/color] Váš [img=virtual-signal/informatron] Průzkumný deník [__CONTROL__informatron__] byl aktualizován. +space-capsule=Vesmírná kapsle +player-died=__1__ zemřel +launch-suit-warning=Abyste se vyhnuli udušení, prosím zvažte použití skafandru a uložení nádob podpory života do vašeho inventáře. +suffocating-warning=Dusíte se. Dostaňte se do vesmírné kapsle nebo si nasaďte skafandr s nádobami podpory života v inventáři. +rocket_survivability_fail=Nákladní raketa utrpěla při cestě poškození a je mimo kurz. Doporučujeme dodatečný výzkum odolnosti raket a bezpečnosti nákladu. +respawn-if-stranded=Pokud uvíznete, můžete použít zkratku pro znovuzrození [__CONTROL__se-respawn__]. +respawn-options-title=Místo znovuzrození +respawn-button-homeworld=[img=virtual-signal/se-planet] Domovská planeta +respawn-button-landing-pad=[img=item/se-rocket-landing-pad] Náhodná přistávací plocha +respawn-button-spaceship=[img=virtual-signal/se-spaceship] Náhodná vesmírná loď +respawn-confirm-title=Jste si jisti se svým znovuzrozením? +respawn-confirm-yes=[img=virtual-signal/se-death] Znovuzrodit +respawn-confirm-no=Zrušit +search-list=Vyhledat +clear-search=Zrušit +filter-list=Filtr +clear-filter=Zrušit filtr +attrition-type-radiation=Radiace +attrition-type-wind=Vítr +attrition-type-spacial-distortion=Prostorové zakřivení +zonelist-view-surface=Zobrazit povrch +zonelist-heading-hierarchy=Hierarchie +zonelist-heading-type=Typ zóny +zonelist-heading-name=Název +zonelist-heading-radius=Poloměr +zonelist-heading-primary-resource=Primární surovina +zonelist-heading-attrition=Ovlivnění robotů +zonelist-heading-threat=Hrozba +zonelist-heading-solar=Solární energie +zonelist-heading-flags=Označení +zonelist-heading-priority=Priorita +zonelist_filter_star=Zahrnout hvězdy +zonelist_filter_planet=Zahrnout planety +zonelist_filter_planet-orbit=Zahrnout orbity planet +zonelist_filter_moon=Zahrnout měsíce +zonelist_filter_moon-orbit=Zahrnout orbity měsíců +zonelist_filter_asteroid-belt=Zahrnout pásy asteroidů +zonelist_filter_asteroid-field=Zahrnout pole asteroidů +zonelist_filter_anomaly=Zahrnout anomálie +zonelist-resource-bar-tooltip=__1__ __2__\nFrekvence: __3__\nVelikost: __4__\nBohatost: __5__ +zonelist-resource-bar-tooltip-extended=__1__ __2__\nFrekvence: __3__\nVelikost: __4__\nBohatost: __5__\n__6__ +zonelist-resources-disclaimer=Hodnoty surovinových zdrojů jsou pouze odhadem. [?] +zonelist-resources-disclaimer-tooltip=Veškeré hodnoty surovin jsou odhadovány na základě hustoty prvků.\nKorespondují s nastavením generace mapy.\nSkutečná ložiska surovin se mohou lišit a nemusí se vůbec objevit, pokud jim v tom zabrání voda, poloměr tělesa, nebo specifické požadavky na dlaždice. +zone-tooltip-type=Typ zóny: +zone-tooltip-parent=Parent: +zone-tooltip-threat=Hrozba: +zone-tooltip-daynight=Denní cyklus: +zone-tooltip-bot-attrition=Ovlivnění robotů - __1__: +zone-tooltip-radius=Poloměr: +zone-tooltip-solar=Solární energie: +zone-tooltip-flags=Označení: +zone-tooltip-closest=Nejbližší: +zone-tooltip-destination=Destinace: +zone-tooltip-delta-v=∆v z __1__ +resource-terrain-required-se-vulcanite=Vyžaduje vulkanický terén +resource-terrain-required-se-cryonite=Vyžaduje zmrzlý terén +resource-terrain-required-se-vitamelange=Vyžaduje porostlý terén +climate_homeworld=Domovský svět (upravené klima) +construction-denied=Nelze umístit zde. +construction-denied-vehicle-in-space=Nelze umístit pozemní vozidla ve vesmíru. +construction-denied-se-surface=Neplatné umístění, musí být umístěno na povrch ze Space Exploration. +construction-denied-no-water=Žádná voda +currently-viewing=Aktuálně zobrazeno: __1__ +fail-board-no-character=Cannot board target ship, you must be attached to your character to use this action. +construction-denied-spaceship-only=Musí být položeno na podlahu vesmírné lodi. +fail-board-remote-character=Cannot board target ship, your character is not on the ship you are trying to board from. +fail-board-target-anchored=Cannot board an anchored ship, try anchoring to the same location instead. +starmap=Hvězdná mapa +starmap-button=[img=virtual-signal/se-star] Hvězdná mapa +back=Zpět +spaceship=Vesmírná loď +planet=Planeta +moon=Měsíc +star=Hvězda +orbit=Orbita +something_orbit=__1__ orbit +asteroid-belt=Pás asteroidů +asteroid-field=Pole asteroidů +anomaly=Anomálie +spaceship-cannot-set-destination-to-self=Nelze nastavit cílovou destinaci na sebe. +spaceship-launch-energy=Energie startu: __1__ +spaceship-launch-energy-invalid=Energie startu: Vyžaduje platnou kontrolu integrity. +spaceship-streamline=Štíhlost: __1__ +spaceship-speed=Rychlost: __1__ +spaceship-structural-stress-hull=Strukturální stres (Trup): __1__ +spaceship-structural-stress-hull-invalid=Strukturální stres (Trup): NA (vyžadováno uzavření) +spaceship-structural-stress-container=Strukturální stres (Vnitřek): __1__ +spaceship-structural-stress-container-invalid=Strukturální stres (Vnitřek): NA (vyžadováno uzavření) +spaceship-travel-time-unknown=Délka cesty: Neznámá. Otestujte maximální rychlost pro odhad. +spaceship-travel-time-max=Délka cesty: __1__s při maximální rychlosti. +spaceship-travel-time-current=Délka cesty: __1__s při aktuální rychlosti. +spaceship-closest-location=Nejbližší lokace: __1__ +spaceship-location-spatial-distortion=Prostorové zakřivení: __1__ +spaceship-location-stellar-x=Kvadrant X: __1__ +spaceship-location-stellar-y=Kvadrant Y: __1__ +spaceship-location-star-gravity-well=Přitažlivost hvězdy: __1__ +spaceship-location-planet-gravity-well=Přitažlivost planety: __1__ +spaceship-travel-status=Stav cesty: __1__ +spaceship-integrity-status-valid=Stav integrity: Platný: __1__ +spaceship-integrity-status-invalid=Stav integrity: Neplatný: __1__ +spaceship-button-launch=Start +spaceship-button-launch-tooltip=Připraveno ke startu +spaceship-button-launch-disabled=Start (Zakázáno) +spaceship-button-launch-disabled-fuel-tooltip=Vyžaduje palivo v nádržích motorů +spaceship-button-launch-disabled-integrity-tooltip=Vyžaduje platnou kontrolu integrity +spaceship-button-anchor=Ukotvení +spaceship-button-confirm-anchor=Potvrdit ukotvení +spaceship-button-anchor-to=Ukotvit k __1__ +spaceship-button-anchor-on=Zakotvit na __1__ +spaceship-button-stop=Zastavit +spaceship-button-start=Engage +spaceship-button-board=Board __1__ +spaceship-button-scouting-back=Zpět +spaceship-button-scouting-back-tooltip=Cancel anchor scouting +spaceship-name-the=__1__ +spaceship-button-start-integrity-check=Zahájit kontrolu integrity +spaceship-heading-destination=Cílová destinace +list-destinations-alphabetically=Seřadit destinace abecedně +spaceship-travel-message-new-course-plotted=New course plotted. +spaceship-travel-message-exiting-planet-gravity=Opouštění gravitační studny planety +spaceship-travel-message-navigating-planet-gravity=Navigating planet gravity well +spaceship-travel-message-exiting-star-gravity=Opouštění gravitační studny hvězdy +spaceship-travel-message-navigating-star-gravity=Navigating star gravity well +spaceship-travel-message-spatial-distortions=Navigating spatial distortions +spaceship-travel-message-navigating-interstellar=Navigating interstellar space +spaceship-travel-message-at-destination=At destination. +spaceship-check-message-passed=Úspěch: Integrita lodi je platná. +spaceship-check-message-failed-containment=Neúspěch: Ztráta uzavření kolem ovládacího panelu. Ujistěte se, že zdi stojí na podlaze a neexistují skuliny. +spaceship-check-message-failed-console-floor=Ovládací panel musí být položen na podlahu vesmírné lodi. +spaceship-check-message-failed-empty=Nenalezeny žádné dlaždice, které by byly připojeny ke správně uzavřenému ovládacímu panelu. +spaceship-check-message-failed-unknown-bounds=Error: Unknown spaceship bounds. +spaceship-check-message-failed-stress=Neúspěch: Stres strukturální integrity přesahuje technologický limit. +spaceship-check-message-checking-console-floor=Kontrola konekce podlahy. +spaceship-check-message-checking-containment=Kontrola uzavření. +spaceship-check-message-checking-connectivity=Kontrola konekce ovládacího panelu. +spaceship-check-message-no-console=Žádný ovládací panel. +spaceship-check-message-did-not-complete=Kontrola nebyla dokončena. +spaceship-check-message-unstable=Nestabilní: Některé sekce se při manévrování odtrhnou. +spaceship-check-message-valid-but-disconnecting=Platná kontrola, ale loď je nestabilní: Některé sekce se odtrhnout. +spaceship-warning-sections-disconnecting=Sekce se odtrhávají. Zastavte k opravě. +page_space_exploration_text_1=Vítejte ve Space Exploration. Tato modifikace již obsahuje mnoho věcí, ale stále je v experimentální fázi a ve vývoji. Nedoporučujeme hrát v kombinaci s jinými modifikacemi než s těmi doporučenými a vyžadovanými.\n\n\n[font=heading-2]Doporučené modifikace[/font] \n\nAAI Industry: Modifikace Space Exploration byla navržena tak, aby se hrála s AAI Industry a staví na změnách v technologickém stromu. Pokud se rozhodnete hrát bez AAI Industry, bude vám chybět několik změn receptů, což vám mnoho věcí ztíží.\n\nAAI Signal Transmission: Umožní vám přenášet signály napříč povrchy. Bez této modifikace pro vás bude meziplanetární logistika mnohem obtížnější. \n\nGrappling Gun: Přitáhne vás k cíli. Skvělá věcička na překonávání útesů, dostávání se do vesmírných lodí, a také záchrana, pokud spadnete z vesmírné stanice.\n\n\n[font=heading-2]Doporučené nastavení[/font]\n\nJe NEZBYTNÉ mít všechny terény z Alien Biomes zapnuté, jinak vám v určitém bodě bude hra padat.\n\nProtože je hra delší než normálně, doporučujeme snížit evoluční faktory nepřátel.\n\nNeměli byste zvyšovat množství či jiné aspekty surovin, pokud nehrajete hru se zvýšenou obtížností. Pokud budou suroviny nastaveny příliš vysoko, zmenší se tím nutnost expandovat na jiné planety.\n\n\n[font=heading-2]Užitečné odkazy[/font]\n\nOmrkněte Wiki Space Exploration: https://spaceexploration.miraheze.org\n\nPro radu nebo jen pro sledování vývoje modifikace se připojte na Discord: https://discord.gg/ymjUVMv\n\nNa tuto modifikaci padnulo více než 2000 hodin práce. Pokud se vám mód líbí, zvažte, prosím, podporu na Patreonu: https://www.patreon.com/earendel +menu_meteor_defence=[img=virtual-signal/se-meteor] Obrana před meteory +title_meteor_defence=Obrana před meteory +page_meteor_defence_text_1=Meteory padají v náhodných intervalech do většiny zón. Maximální interval mezi údery meteoritů můžete změnit v nastavení modifikace.\n\nČetnost meteorů je rovněž náhodná, 50% pro 1, 25% pro 2, 12,5% pro 3, 6,25% pro 4 a tak dále...\n\nStruktury obrany proti meteorům mohou na meteory střílet. Střílejí postupně, takže novější obranné struktury ani nevystřelí, pokud byly již všechny meteory zničeny. Obranné struktury vyžadují munici, a také přívod elektrické energie při nabíjení. Spotřeba těchto struktur není malá, proto je doporučeno balancovat riziko s energetickou náročností. +menu_coremining=[img=item/se-core-miner] Těžba jádra +title_coremining=Těžba jádra +page_coremining_text_1=Těžba jádra může být realizována pouze na planetách či měsících. Každá planeta či měsíc může vydat jiný typ fragmentu jádra. Nauvis vydává vyrovnanou kombinaci surovin, ale jiná tělesa mají tendenci vydávat převážně jeden typ zdroje. Vrtáky určené pro těžbu jádra jsou energeticky náročné, ale část spotřebované energie je navrácena v podobě uhlí, ropy a uranu.\n\nNejen že vrtáky pro těžbu jádra spotřebovávají mnoho energie, ale také čím víc jich použijete na jedné planetě či měsíci, tím méně jsou efektivní. Jsou mnohem méně energeticky efektivní než normální těžící zařízení, ale mají nevyčerpatelný zdroj surovin. V rané fázi hry je užitečné mít jeden vrták pro těžbu jádra, pokud máte přebytek energie. Pokud začínáte na malé planetě, může být pro vás sestava solárních panelů a těžby jádra jedinou cestou k získání zdrojů ke stavbě rakety.\n\nVrtáky pro těžbu jádra jsou v pozdních fázích hry výhodné hlavně díky bonusům produktivity. Je lepší usilovat o méně vrtáků na více planetách než naopak. +menu_launching_satellites=[img=item/satellite] Vypouštění satelitů +title_launching_satellites=Vypouštění satelitů +page_launching_satellites_text_1=Zatím jste vypustili [color=cyan]__1__[/color] satelitů.\n\n[font=heading-2][img=virtual-signal/se-remote-view] Uplink navigačního satelitu [__CONTROL__se-remote-view__][/font]\n\nKdyž vypustíte navigační satelit, získáte přístup do [img=virtual-signal/se-remote-view] Satelitního zobrazení. Satelitní zobrazení použijete pomocí tlačítka [__CONTROL__se-remote-view__]. V satelitním módu jste odpojeni od vlastní postavy a můžete si rychle prohlížet mapu a dokonce objevovat nové oblasti. Jsou akce, kterých v satelitním módu nedosáhnete, jako například stavby budov nebo ruční těžby. Je ale mnoho věcí, které v satelitním módu lze dělat, jako například používat plány stavby i dekonstrukce, měnit recepty ve strojích, nastavení kombinátorů apod.\n\n[font=heading-2][img=virtual-signal/se-planet-orbit]Prohlížeč vesmíru [__CONTROL__se-universe-explorer__][/font]\n\nSíť navigačních satelitů vám také umožňuje sledovat dění na jiných površích, například na jiných planetách, měsících, pásech asteroidů, polích asteroidů a orbitách. Stiskněte [__CONTROL__se-universe-explorer__] k zobrazení známých zón. Pokud jste vypustili satelit, můžete stisknout Zobrazit povrch, a zjistit, co se na něm děje. Před tím, než se do neznámé oblasti sami vydáte, je možná dobré ji nejdříve prozkoumat na dálku.\n\nVysílání satelitů vám také pomůže s objevováním těles ve vaší hvězdné soustavě (pro více informací mrkněte na Objev zóny). +menu_zone_discovery=[img=virtual-signal/se-planet-orbit] Objev zóny +title_zone_discovery=Objev zóny +page_zone_discovery_text_1=Existuje mnoho hvězd, planet, měsíců, pásů asteroidů a polí asteroidů v téhle části vesmíru, a všechna tato tělesa jen čekají na objevení.\n\n[font=heading-2]Navigační satelit[/font]\nMůžete vypustit navigační satelit a objevit díky němu nové planety, měsíce, nebo pásy asteroidů v solární soustavě, ve které byl satelit vypuštěn. Pokud již v daném sektoru není nic nového k objevení, satelit objeví novou hvězdu, ale nedokáže objevit nic obíhajícího kolem dané hvězdy nebo něco v hlubokém vesmíru. \n\n[font=heading-2]Výzkum Objevení zóny[/font]\nMůžete použít vesmírné teleskopy k hledání nových zón. Toho lze dosáhnout pomocí výzkumu "Objev zóny". Základní výzkum objevení zóny může najít náhodnou hvězdu, planetu, měsíc nebo pás asteroidů.\n\n[font=heading-2]Výzkum "Cílený objev zóny"[/font]\nCílený objev zóny klade důraz na objev preferované suroviny (níže), tudíž existuje mnohem větší šance na nalezení takového místa. Nezapomeňte na to, že planeta může být objevena pouze po objevení její hvězdy, a měsíc nemůže být objeven před objevem planety, kterou obíhá. Nečekejte, že pokaždé najdete to, co hledáte.\n\n[font=heading-2]Výzkum Objevení zóny v hlubokém vesmíru[/font]\nObjevení zóny v hlubokém vesmíru je jediným způsobem, kterým lze najít pásy asteroidů. Pásy asteroidů jsou jediným místem, kde lze najít Naquitit. Objevování zón v hlubokém vesmíru nelze specifikovat pro určitou surovinu.\n\n[font=heading-2]Objevování zóny s preferovanou surovinou:[/font] +menu_cargo_rockets=[img=virtual-signal/se-cargo-rocket] Nákladní rakety +title_cargo_rockets=Nákladní rakety +page_cargo_rockets_text_1=Zatím jste vypustili [color=cyan]__1__[/color] nákladních raket.\n\nNákladní rakety startují z Nákladního raketového sila, aka ze startovací rampy. Ke stavbě nákladní rakety musíte vložit 100 segmentů nákladní rakety a jednu vesmírnou kapsli do nákladního raketového sila.\n\nKe startu rakety také potřebujete natankovat velké množství kapalného raketového paliva jedním z osmi konektorů u rohů sila. Množství potřebného paliva se mění v závislosti na gravitačním vlivu planety, na které se nacházíte, a také na vzdálenosti mezi místem startu rakety a cílovou destinací.\n\nPokud automatizujete nakládání věcí do rakety, dávejte pozor, abyste do nákladového prostoru neukládaly segmenty nákladní rakety. Kabel, který vede ze sila počítá všechny segmenty rakety, včetně těch v nákladovém prostoru, takže ho můžete připojit ke kombinátoru s podmínkou < 100 a zastavit tak vkládání segmentů rakety. (Poznámka vývojáře: Toto řešení není ideální, ale jiné možnosti jsou ještě horší.) +menu_lifesupport=[img=item/se-lifesupport-equipment-1] Podpora života +title_lifesupport=Podpora života +page_lifesupport_text_1=Podpora života je zajištěna pomocí vybavení a nádob podpory života. Potřebujete jak vybavení, tak nádoby podpory život k přežití v nehostinném prostředí.\n\nVybavení a použitelné nádoby mohou být produkovány v Zařízení podpory života.\n\nNádoby podpory života poskytují systému zdroje, které potřebuje k plnění všech svých rolí v podpoře života, a jsou postupně spotřebovávány. Nádoby se spotřebovávají přímo z vašeho inventáře. \n\nVybavení podpory života lze vložit do mřížky brnění, ale pokud používáte skafandr, již máte toto vybavení vestavěné. Přídavné vybavení podpory života vloženo do mřížky brnění či skafandru zvyšuje účinnost systémů podpory života. Pokud používáte vybavení podpory života v jiném typu brnění než ve skafandru, budete chráněni proti nehostinnému prostředí, ale ne proti vakuu vesmíru.\n\n[font=heading-2]Nehostinná prostředí[/font]\nNehostinná prostředí jsou oblasti, ve kterých utrpíte poškození jen kvůli vašemu pobytu. Vybavení podpory života je navrženo tak, aby vás ochránilo před těmito hrozbami tím, že vám zajistí správný tlak, kyslík, vodu, výživu, regulaci teploty a ochranu proti radiaci. Dva hlavní typy nehostinného prostředí jsou:\n\nVesmír: Skafandr je pro pobyt ve vakuu nezbytný. Nestačí vám systémy podpory života, protože se ve vakuu bez skafandru stejně udusíte.\n\nPozemní prostředí: Některé planety a měsíce představují nebezpečí v podobě radiace, extrémního chladu či horka, nebo také kyselé atmosféry, a vyžadují vybavení podpory života. (Již brzy). Vybavení podpory života je také nutné na planetách, kde byly použity biologické zbraně (Morové světy). Podpora života může být v takových oblastech zajištěna skafandrem, či vybavením podpory života, vloženým do jakéhokoli brnění. +menu_space_sciences=[img=item/se-astronomic-science-pack-2] Vesmírný výzkum +title_space_sciences=Vesmírný výzkum +page_space_sciences_text_1=[img=item/se-rocket-science-pack] Prvním vesmírným výzkumem je raketový vědecký balíček. Lze ho produkovat pouze ve vesmíru, takže budete k jeho výrobě muset postavit alespoň malou vesmírnou stanici. Raketové vědecké balíčky a pokročilejší vesmírné vědecké balíčky mohou být použity pouze ve vesmíru, tudíž budete muset do vesmíru posílat i ostatní vědecké balíčky a využívat je ve výkonné Vesmírné vědecké laboratoři.\n\n[font=heading-2]Specializovaný výzkum[/font]\n\nExistují 4 typy specializovaného výzkumu, a to Astronomický, Biologický, Energetický a Materiálový. Všechny jsou poháněny daty, která lze získat prováděním experimentů. Tato data lze poté používat v superpočítačích za účelem vytvoření více a více přesného modelu života, vesmíru, a v podstatě všeho. Všechny jsou přibližně na stejné technologické úrovni, takže je na vás, který zvolíte jako první, ale každý z nich vyžaduje specifické zdroje, takže před rozhodnutím si prohlédněte svůj solární systém.\n\n[img=item/se-astronomic-science-pack-4] Astronomický výzkum se soustředí hlavně na vesmírnou logistiku.\n\n[img=item/se-energy-science-pack-4] Energetický výzkum se soustředí na produkci energie, přenosu elektřiny a výrobu high-tech udělátek.\n\n[img=item/se-material-science-pack-4] Materiálový výzkum se soustředí na těžký průmysl a přímá vylepšení.\n\n[img=item/se-biological-science-pack-4] Biologický výzkum se soustředí na vylepšení hráče, lékařství, podporu života, biologické zbraně a produktivitu.\n\n[font=heading-2]Výzkum hlubokého vesmíru[/font]\n\n[img=item/se-deep-space-science-pack-1] Výzkum hlubokého vesmíru se zaměřuje na mezihvězdnou prázdnotu, antihmotu a zakřivení časoprostoru. +menu_energy_beams=[img=item/se-energy-transmitter-emitter] Energetické paprsky +title_energy_beams=Energetické paprsky +page_energy_beams_text_1=[font=heading-2]Výron koronální hmoty[/font]\nBlízké hvězdy často vyvrhávají nebezpečné proudy částic. Není neobvyklé, že planeta či měsíc se těmto proudům ocitne v cestě. Pokud se vaše základna nachází na ovlivněném povrchu, měli byste se evakuovat, rozdělit a rozprostřít vaše stavby, nebo postavit Deštník s velkou zásobou energie v akumulátorech. Pokud bude nějaký povrch v nebezpečí, budete o výronu vědět minimálně 4 hodiny dopředu. Známé hrozby budou vypsány níže. +page_energy_beam_warning_text=[img=virtual-signal/se-star] Varování: Výron koronální hmoty se blíží k __1__. Odhadovaná energie potřebná k obraně: __3__GJ. ETA: __2__s. +page_energy_beams_text_2=[font=heading-2]Deštník: Obrana před energetickými paprsky[/font]\nZařízení obrany před energetickými paprsky, "Deštník", vás dokáže ochránit před výronem koronální hmoty (tzv. slunečním deštěm), ale také před energetickými útoky z vesmíru. Zařízení tohoto efektu dosahuje uspořádáním magnetických částic do ochranné bubliny, a poté shlukem částic k rozptýlení nebezpečných energetických paprsků. Jediným požadavkem k fungování je energie, základní spotřeba je 10MW, ale ta se zvyšuje podle síly dopadajících proudů částic. Proti obyčejnému výronu koronální hmoty postačí jeden Deštník pro jeden povrch, proti zbraním na bázi energetických paprsků dokáže jeden Deštník odstínit až 500GJ energie. Pro výron koronální hmoty je základní energetická potřeba u planety s poloměrem 5000 a výkonností solárních panelů 100% zhruba 160GJ energie, přičemž doba trvání bude 2 minuty a nejvyšší odběr ze sítě bude činit asi 2GW (tento energetický vrchol nastane po první minutě působení proudu částic). Tyto hodnoty se mění s výkonem solárních panelů na vybraném povrchu, a u pevných těles (planety, měsíce, ...) také záleží na poloměru (výsledné hodnoty lze vypočítat pomocí rovnice přímé úměry). U zářiče energetických paprsků se potřebná obranná energie odhaduje na 1/10 síly paprsku u cíle (po ztrátě účinnosti).\n\n[font=heading-2]Vysílání energie[/font]\nZářič energetických paprsků dokáže vysílat energii na různé povrchy. Je schopen dvou způsobů vysílání energie, buď může poskytovat energii vzdáleným povrchům, "Energizovat", nebo může být použit jako řezák na bázi paprsků, "Kosa". V módu "Kosy" konstantně způsobuje poškození na určitém místě, ale toto místo může být pozměněno, čímž se "vypálí cesta". Poškození, oblast působnosti a rychlost paprsku se zvyšuje v závislosti na vložené energii. Mód "Auto-Kosa" je autonomní selektor cílů.\n\nZářič energetických paprsků má 4 konektory, ke kterým se mohou připojit paprskové komory. Paprskové komory se mohou propojit krátkou stranou, nebo může být jedna připojena krátkou stranou na dlouhou stranu jiné, ale nemohou být propojeny "vedle sebe". Paprskové injektory se připojují po stranách ke komorám. Každý připojený injektor zvyšuje výkon připojeného zářiče. K přijetí energie ze zářiče budete potřebovat paprskový přijímač na cílovém povrchu, a budete tento přijímač muset zvolit v zaměřovači zářiče. Jakmile paprsek dorazí k přijímači, přijímač se začne zahřívat. Toto teplo může být poté vedeno do výměníků tepla a lze tak pohánět turbíny. +menu_spaceships=[img=virtual-signal/se-spaceship] Vesmírné lodě +title_spaceships=Vesmírné lodě +page_spaceships_text_1=Vesmírné lodě jsou obrovská mocná vozidla, která umožňují vysílání různých uzavřených struktur, předmětů, a dokonce hráče do vesmíru, a poté cestovat po solárním systému a přistávat na různých površích.\n\n[font=heading-2]Stavba vesmírných lodí[/font]\nVesmírné lodě jsou tvořeny mnoha částečkami a malými komponenty, které dohromady tvoří vesmírnou loď podle vašich představ. Vesmírnou loď tvoříte téměř jako malou, pohyblivou základnu.\n\nZačněte s plánem podlahy. Nepřežeňte to, vaše první vesmírná loď může být jen malá. Položte zdi kolem okrajů, ujistěte se, že jste nezanechali mezery (ani ty diagonální). Položte řídící panel někde uvnitř, jde o základní část vesmírné lodi, a skrze tento panel budete loď ovládat. Při položení ovládacího panelu se objeví záblesky, protože se zjišťuje, které části jsou správně připevněny, které části jsou správně uzavřeny, a které části odpadnou, pokud se pokusíte zažehnout motory. Pokud se některý čtvereček rozsvítí červeně, je to špatně. Můžete ovládací panel otáčet, abyste ho změnili na asymetrický či symetrický. Budete také potřebovat palivovou nádrž boosteru a motor vesmírné lodě. Nádrž boosteru je to, co zadržuje palivo, které je potřeba k cestě do vesmíru, a poskytuje možnost vertikálního startu a přistání. Motory jsou určeny pro pomalejší pohyb přes velké vzdálenosti vesmíru. Doporučujeme také stavbu obranných struktur vpředu (vždy na severu), protože vesmír je plný sutin.\n\n[font=heading-2]Stres integrity[/font]\nBrzy budete limitováni stresem integrity, a nebudete moci stavět tak velké lodě, jaké byste chtěli. Pokročilejší technologie umožňují stavbu větších vesmírných lodí. Stres integrity je vypočítáván ve 2 částech: A. Velikost vesmírné lodi. B. Nákladní kapacita vesmírné lodi. Konečná stres integrity je ta část, která je větší, hodnoty se nesčítají.\n\n[font=heading-2]Štíhlost[/font]\nTahle část vesmíru je v drsné mlhovině, takže zeštíhlením své lodi ji zrychlíte až o 30%. Měli byste se vyvarovat stavby obyčejné krabice, ale tvar klínu taky není potřeba. Až 1/3 přední části lodi může být placatá a loď to neovlivní. Kulaté lodě jsou také v pořádku. Můžete manuálně spustit kontrolu integrity abyste zjistili, jak jste na tom se štíhlostí lodě.\n\n[font=heading-2]Dlouhé transportní aktivity[/font]\nKdyž zvažujete dlouhou cestu, pamatujte na to, že můžete mnoho věcí udělat již v satelitním módu. Můžete také dávat vesmírným lodím příkazy pomocí satelitů.\n\n[font=heading-2]Montovny[/font]\n[color=#ffaaaa]Varování: Montovny dělané pro použití ve vesmíru mohou vyrábět podle klasických receptů jen, když je vesmírná loď na zemi. Pokud je nastaven vesmírný recept při přistání, suroviny budou ztraceny. Některé pozemní montovny mohou fungovat i ve vesmíru, ale ztrácí poté možnost vložení modulů produktivity. Pokud vesmírná loď odstartuje, a pozemní montovny obsahují moduly produktivity, budou tyto moduly ztraceny.[/color]\n\n[font=heading-2]Signály vesmírné lodi[/font]\nPravá horní část ovládacího panelu vesmírné lodi může být připojena do sítě, vysílá signály:\n[img=item/se-spaceship-console] Číslo panelu označuje ID vesmírné lodi.\n[img=virtual-signal/signal-speed] Signál rychlosti označuje rychlost, kterou se vesmírná loď pohybuje, -1 pokud stojí, -2 pokud je zakotvena.\n[img=virtual-signal/signal-distance] Signál vzdálenosti označuje vzdálenost od cílové destinace, -1 pokud již loď dorazila, -2 pokud je zakotvena, -3 pokud není žádná cílová destinace nastavena.\n[img=virtual-signal/se-planet-orbit] Čtvrtý signál indikuje současnou cílovou destinaci.\n\n[font=heading-2]Automatizace vesmírné lodi[/font]\nHlavní struktura ovládacího panelu může přijímat signály:\n[img=virtual-signal/signal-speed] Signál rychlosti nastavuje rychlost a zažehává motory.\n[img=virtual-signal/se-spaceship-launch] Signál startu vesmírné lodi zahájí start.\n[img=virtual-signal/se-planet-orbit] Signál cílové destinace nastavuje cílovou destinaci (signál zóny můžete zjistit z Prohlížeče vesmíru jakmile sestrojíte vesmírnou loď).\nK přistání vesmírné lodi musí být ovládacímu panelu udělen pár signálů k zakotvení, a to buď [img=virtual-signal/se-anchor-using-left-clamp] "zakotvit pomocí levé svorky" společně s [img=virtual-signal/se-anchor-to-right-clamp] "zakotvit k pravé svorce", nebo [img=virtual-signal/se-anchor-using-right-clamp] "zakotvit pomocí pravé svorky" společně s [img=virtual-signal/se-anchor-to-left-clamp] "zakotvit k levé svorce". Hodnoty signálů se musí rovnat hodnotám svorky na lodi a v cílové destinaci. Tyto hodnoty si můžete zobrazit a měnit je v uživatelském rozhraní svorky. Pokud je nalezena shoda, vesmírná loď se pokusí přistát pomocí dvou svorek. Užívejte opatrně. +menu_exploration_journal=[img=item/se-thruster-suit] Průzkumný deník +title_exploration_journal=Průzkumný deník +page_journal_title_backstory=Probudil jsem se na špatné straně ohnivé koule +page_journal_text_backstory=Zjistil jsem, že je ze mě trosečník, na neznámé planetě, a kolem mě jsou hořící kusy malé vesmírné lodi. Mé tělo bylo pohmožděné, pořezané a spálené, ale vcelku nic vážného. Mé poranění hlavy bylo zřejmě vážnější, otupující bolest a záblesky oslepujícího světla. Nejhorší ale bylo, že jsem si nepamatoval nic, kromě jména a mého účelu... stavět. Přesto jsem si ale nepamatoval, co nebo jak stavět. Zpočátku jsem si myslel, že jsem se praštil do hlavy, a že vzpomínky se časem vrátí, ale do teď se nevrátily. Skutečnost, že mé datové záznamy byly prázdné a reformátované mě dohnala k přemýšlení o jiných vysvětleních. +page_journal_title_satellite_launch=Oko na nebi +page_journal_text_satellite_launch=Podařilo se mi vyslat satelit na orbitu. Je to důležitý milník, důvod k oslavě, ale ještě mi zbývá hodně práce. Tohle je jen začátek. +page_journal_title_cargo_launch=Do nekonečna a ještě dál +page_journal_text_cargo_launch=Nyní se mohu sám dostat do vesmíru. Už nejsem vázaný k tomuhle šutru, kterému jsem se naučil říkat domov. Nebesa volají. +page_journal_title_entered_vault=Lov relikvií +page_journal_text_entered_vault=Vkročil jsem do jeskyně pod výčnělkem pyramidového tvaru na __1__, a našel jsem temnou, očividně nebezpečnou komnatu. V komnatě jsem nalezl dvě kartuše, jednu velkou a jednu malou. Obě měly na svém povrchu několik glyfů, společně s kruhy a čárami. Glyf přímo uprostřed velké kartuše se zdál být nejvýznamnější, ať už se jeho stvořitelé snažili předat jakoukoli informaci. A ať jde o jakoukoli informaci, nikdy jsem neviděl takové formátování. Za kartušemi jsem našel jakýsi válec, ve kterém bylo velmi výkonné zařízení, které mohu použít jako modul. Moduly takové kvality jsou tak cenné, že by nejspíš stálo zato najít více takových struktur. Možná nastal čas na trochu archeologie. +page_journal_title_found_gate=Anomálie +page_journal_text_found_gate=V anomálii byl nalezen jakýsi obrovský prstencovitý artefakt. I z dálky jsou mi jasné dvě věci: 1. Je to prastaré. 2. Jde o technologii, která je od té mé naprosto odlišná. Ať už to je, nebo bylo, cokoli, je to zničeno. +page_journal_title_found_gate_ship=Loď v anomálii +page_journal_text_found_gate_ship=Část poměrně velké, opuštěné vesmírné lodi byla nalezena v anomálii, v blízkosti prstencovitého artefaktu. Technologie lodi je podobná té mé, ale je trochu více... uhlazená. Zřejmě jde o jinou technologii než v případě toho prstence. Tvar trosek vypadá jako by byla loď rozřezána v půlce, a nebo se srazila s prstencem. Možná by stála za záchranu. +page_journal_title_found_gate_ship_authenticated=Autentifikace lodi v anomálii +page_journal_text_found_gate_ship_authenticated=Opuštěná loď uvnitř anomálie mě oskenovala a "autentifikovala mou biosignaturu". Nevím, jestli to znamená, že o mě má specifický záznam, nebo že mě to bere jako lepší volbu, než kousače nebo genocidní roboty. Zpráva uvádí, že kód k vzduchovému uzávěru je 2236067964. Lodní záznamy jsou dostupné, ale velké části chybí nebo jsou poškozeny. +page_journal_title_found_gate_ship_log=Záznamy lodi +page_journal_text_found_gate_ship_log_intro=Demodamas 82B: AAI Hypernetový konstrukční křižník. Obsah lodních záznamů: +page_journal_text_found_gate_ship_log=...'¿s nominální.\nUpozornění: AAI brána Thyris 17: Mezigalaktický prototyp v0.1.93 je utajované zařízení. Je vyžadováno AAI ověření úrovně L90 nebo vyšší. Okamžitě se autentifikujte nebo budete zničeni.\nPřístupový záznam: Přístup k AAI bráně Thyris 17 povolen AAI inženýrovi L97 ID__1__.\nPřístupový záznam: Zahaj¶Ôàtá^...\n...'¿ris brána 17, frekvence 8 projektoru je uzamčená. Energie je na 216% bezpečné úrovně. Stabilita singularity: 99,4%.\nNavigační záznam: AAI brána Thyris 17 se připojila na projekční vektor [SV __2__]. Předpokládaný cíl: Galaxie Wube > Foenestra (anomálie, neprozkoumaná). Autentif¶Ôàtá^...\n...'¿vigační varování: Mezigalaktická hypertrubice (anulována).\nNavigační varování: Žádná hyperbrána v cílové destinaci (anulováno).\nUpozornění: Žádný kontrakt. Dostupné kontrakty: 0.\nPoznámka informatrona: Neexistují dostupné kontrakty se specifikací: "materializace s absencí brány". Jste si jisti, že je to bezpečné? [response.ignore.ignore_always]\nZáznam cesty: Vstup do anomálie Thyris > AAI brána Thyris 17 hypertrubice přiřazena k [SV __2__].\nZáznam cesty: Skok do hypertrubice [SV __2__] dokonč¶Ôàtá^...\n...'¿nam cesty: Aktualizace lokace: Hypertrubice v blízkosti anomálie Thyris, přiřazeno [SV __2__], stabilita 98%, prům¶Ôàtá^...\n...'¿nam cesty: Opouštění hypertrubice v neprozkoumané lokaci anomálie Foenestra.\nVarování: Neočekávaná kolize, srážka s neznámým objektem [4ae4c8d28f2], zahajuji skenování objektu [4ae4c8d28f2].\nZáznam poškození: 13.2% poškozeno. Zdroj: Poškození nárazem v důsledku srážky s neznámým objektem [4ae4c8d28f2].\nZáznam poškození sekcí: Poškozené sekce: A5, A6, A9, B6, B7, B8, C7. Nereagující sekce: A7, A8. (přesnost 86%)\nZáznam inženýrů: Známky života 99%. (přesnost 34%)\nZáznam cesty: Pokus o úhybný manévr RS100LT30.\nZáznam cesty: Opouštění hypertrubice dokončeno s chybami.\nZáznam cesty: Aktualizace lokace: Neprozkoumaná anomálie Foenestra.\nZáznam skenování: Skenování objektu [4ae4c8d28f2] dokončeno, rozlišení 0.002m^2 ve vzdálenosti -48.76m (přesnost 99.9%).\nZáznam detailů skenování: Hmotnost [4ae4c8d28f2] 92.5¶Ôàtá^...\n...'¿%).\nZáznam detailů skenování: [4ae4c8d28f2] Složení: Umělé. 34% Naquia, 29% Holmia, 37% neznámé složky (přesnost 89%).\nZáznam detailů skenování: Velikost [4ae4c8d28f2] : Přibližný průměr 68¶Ôàtá^...\n...'¿ilů skenování: Energetická signatura [4ae4c8d28f2] : Tok 54Gwb, radiační profil 2.8kJ/1.7MJ/1.6MJ/0.62J, profil toku 5.86GJ [051e376392b8d3f8]. (přesnost 98%).\nZáznam detailů skenování: Identifikace [4ae4c8d28f2] : Umělá konstrukce, neznámý výrobce, popis: Přibližně prstencovitý tvar s uzlíky, oktet. (přesnost 0.3%).\nZáznam detailů skenování: Přibližné schopnosti struktury [4ae4c8d28f2] : Hyperbrána (přesnost 47%). Jiné: Zbraň 42%, energetika 35%, výpočetní účely 17%, skenování 12%, průmysl 9%, vesmírná loď 7%, útočiště 2%.\nZáznam poškození: 68.2% poškozeno. Selhání integrity, sekce se oddělují. Zdroj: Sekundární tlakové vlny v důsledku srážky s objektem [4ae4c8d28f2].\nZáznam poškození sekcí: Kritický stav reaktoru. Poškozené sekce: D5, E4, E5, E6, F5. Nereagující sekce: A1, A2, A3, A¶Ôàtá^...\n...'¿lů: Nouzové vypuštění průzkumného letounu 2. Predikce trajektorie: Calidus > Nauvis.\nZáznam poškození: 91.7% poškozeno. Selhání integrity, sekce se odÄïmïŸ... +menu_archeology=[img=entity/se-pyramid-a] Archeologie +title_archeology=Archeologie +page_archeology_text_1=Započal jsem hledání dalších velkých geometrických struktur. Satelity nalezly [color=cyan]__1__[/color] útvarů na těchto planetách: +page_archeology_text_2=Můžete si tyto struktury nechat satelitně zobrazit. +menu_starmapping=[img=technology/se-zone-discovery-random] Mapování vesmíru +title_starmapping=Mapování vesmíru +page_starmapping_text_1=Mapování vesmíru je uskutečněno pomocí výzkumu: [img=technology/se-long-range-star-mapping] [color=cyan]Mapování vesmíru na dlouhé vzdálenosti[/color]. Tento výzkum se soustředí na zajímavé vzorce hvězd v jiných galaxiích. Má to nějaké praktické využití? Pravděpodobně ne.\n\nSouřadnice jsou vydány ve formátu standartních vektorů (SV), jsou přiřazovány na základě radiace kosmického pozadí.\n\nZatím jste zmapovali [color=cyan]__1__[/color] rozpoznatelných vzorců. +technology-unlocked=Byla odemčena nová technologie a je nyní k dispozici ve stromu výzkumu. __1__ __2__ +universe-resources-changed-warning=[img=utility/danger_icon] [color=red]Všechny zdroje byly upraveny na základě nového nastavení. Tento proces je destruktivní. Pokud je to způsobeno aktualizacemi modifikací, je to nevyhnutelné. Pokud je to způsobeno nechtěným přidáním či odebráním modifikací, neukládejte hru.[/color] +starmapping-found-constellation=Vzdálená konstelace identifikována __1__, souřadnice byly uloženy do informatrona. +starmapping-found-constellation-informatron=[font=heading-1]__1__[/font] na souřadnicích [SV __2__] +gate-portal-coordinates=Analýza vektoru zakřivení: [SV __1__] +discovered-glyph-vault=[img=item/satellite] Navigační satelit: Geometrická struktura detekována na __1__. +beacon-overload=Přetížení majáku +beacon-overload-ended=Přetížení majáku skončilo +lifesupport_title=[img=item/se-lifesupport-equipment-1] Podpora života +lifesupport_efficiency_spacesuit=Efektivita podpory života: __1__ +lifesupport_efficiency_no_spacesuit=Efektivita podpory života: __1__ (ve vesmíru 0%). +lifesupport_suit=Délka funkčnosti systémů podpory života: __1__s +lifesupport_reserves=Délka funkčnosti podpory života s nádobami v inventáři: __1__s +lifesupport_suit_est=Délka funkčnosti systémů podpory života: __1__s (ve vesmíru) +lifesupport_reserves_est=Délka funkčnosti podpory života s nádobami v inventáři: __1__s (ve vesmíru) +lifesupport_environment_space=Prostředí: Vesmír +lifesupport_environment_spaceship-interior=Prostředí: Vnitřek vesmírné lodi (podpora života nevyžadována) +lifesupport_environment_planet=Prostředí: Planeta (podpora života není vyžadována) +lifesupport_environment_moon=Prostředí: Měsíc (podpora života není vyžadována) +lifesupport_environment_plague-planet=Prostředí: Morová planeta +lifesupport_environment_plague-moon=Prostředí: Morový měsíc +lifesupport_environment_unknown=Prostředí: Chráněné +player_track_glyphs=[img=item/satellite] Nastavte satelity k hledání podobných struktur. +page_archeology_pyramid_link=[img=entity/se-pyramid-b] Geometrická struktura detekována na __1__ __2__. +discovery_look_for_resource_caption=__1__\n__2__ +discovery_look_for_resource_tooltip=Soustředit na hledání této suroviny. +comma_separate=__1__, __2__ +placement_restriction_line=[font=default-bold][color=#f5cb48]Nelze položit na: __1__[/color][/font]\n__2__ +collision_mask_water=Voda +collision_mask_land=Půda +collision_mask_space_platform=Vesmírná platforma +collision_mask_spaceship=Vesmírná loď +structure_name_grounded=__1__ (uzemněno) +structure_name_spaced=__1__ (vesmír) +structure_description_grounded=__1__\n[color=#ff0000]Některé recepty jsou deaktivovány zatím co jste na zemi.[/color] +structure_description_spaced=__1__\n[color=#ff0000]Nelze použít modul produktivity ve vesmíru.[/color] +tile_warning=[color=red]Změny políček pod entitami mohou zničit entitu.[/color] +please-consider-patreon=[font=heading-1]Baví vás Space Exploration? Prosím, zvažte podporu na Patreonu:[color=#f5cb48]https://www.patreon.com/earendel[/color][/font]\nPatroni mohou získat planetu či měsíc na základě jejich vlastního designu. +delivery_cannon_label_energy=Energie: __1__ +delivery_cannon_label_payload=Náklad: __1__ +delivery-cannon-coordinates-set=Cílové souřadnice nastaveny na [X:__1__ Y:__2__]. Stiskněte [__CONTROL__se-remote-view__] pro ukončení satelitního módu. +unit-capsule=Kapsle s jednotkou (__1__) +climate_water_none=Bezvodý +climate_water_low=Kalužnatý +climate_water_med=Jezerní +climate_water_high=Mořský +climate_water_max=Oceán +climate_moisture_none=Pouštní +climate_moisture_low=Pustý +climate_moisture_med=Mlžný +climate_moisture_high=Vlhký +climate_moisture_max=Nasycený +climate_aux_very_low=Zemitý +climate_aux_low=Neobvyklý +climate_aux_med=Barevný +climate_aux_high=Excentrický +climate_aux_very_high=Exotický +climate_temperature_bland=Nevýrazný +climate_temperature_temperate=Mírný +climate_temperature_balanced=Teplý&Studený +climate_temperature_wild=Horký&Chladný +climate_temperature_extreme=Oheň&Led +climate_temperature_cool=Studený +climate_temperature_cold=Chladný +climate_temperature_vcold=Mrazivý +climate_temperature_frozen=Zmrzlý +climate_temperature_warm=Teplý +climate_temperature_hot=Horký +climate_temperature_vhot=Doutnající +climate_temperature_volcanic=Vulkanický +climate_trees_none=Bez stromů +climate_trees_low=Křovitý +climate_trees_med=Houští +climate_trees_high=Lesnatý +climate_trees_max=Džungle +climate_cliff_none=Rovný +climate_cliff_low=Hladký +climate_cliff_med=Kopcovitý +climate_cliff_high=Kaňony +climate_cliff_max=Hornatý +energy_transmitter_gui_title=[img=entity/se-energy-transmitter-emitter] Energetický paprsek +energy_transmitter_label_transfer=Výkon zářiče: __1__ +energy_transmitter_label_efficiency=Efektivita přenosu: __1__ +energy_transmitter_label_efficiency_atmo=Efektivita přenosu: __1__ (-50% kvůli atmosféře) +energy_transmitter_label_off=Off +energy_transmitter_tooltip_off=Vypnutí paprsku +energy_transmitter_label_energise=Energizovat +energy_transmitter_tooltip_energise=Poskytnutí energie paprskovému přijímači +energy_transmitter_label_glaive=Kosa +energy_transmitter_tooltip_glaive=Paprsek, který lze zaměřit na určité místo a pohybovat s ním, přičemž jeho poškození a rychlost závisí na výkonu zářiče +energy_transmitter_label_auto_glaive=Auto-Kosa +energy_transmitter_tooltip_auto_glaive=Paprsek naprogramován k vyhledání a zničení cíle, poškození se odvíjí od výkonu zářiče +energy-transmitter-coordinates-set=Souřadnice cíle paprsku nastaveny na [X:__1__ Y:__2__]. Stiskněte [__CONTROL__se-remote-view__] k ukončení satelitního módu. +alert-cme-eta=[img=virtual-signal/se-star] Varování: Výron koronální hmoty se blíží k __1__. ETA: __2__s.\nZobrazte si Energetické paprsky v [img=virtual-signal/informatron] Informatronu [__CONTROL__informatron__] pro více detailů. +alert-cme-arrived=[img=virtual-signal/se-star] [color=red]Varování: Výron koronální hmoty dorazil k __1__[/color] +alert-cme-stream=[img=virtual-signal/se-star] Proud částic koronální hmoty detekován __1__ +alert-cme-passed=[img=virtual-signal/se-star] Výron koronální hmoty pominul. +charge-mode-fast=Mód rychlého nabíjení: Nižší nečinnostní spotřeba, vyšší maximální spotřeba, vyrovnávací kapacita zvýšena. Sledujte fluktuaci elektrické sítě. +charge-mode-normal=Mód normálního nabíjení: Nižší maximální spotřeba, vyšší nečinnostní spotřeba, vyrovnávací kapacita snížena. + +[damage-type-name] +cold=Chlad +suffocation=Dušení +meteor=Meteor + +[entity-name] +se-gate-blocker=Nestabilní místo +se-gate-blocker-void=Nestabilní místo +destroyed-cargo-pod=Zničený nákladní kontejner +meteorite=Meteorit +rocket-silo=Satelitní raketové silo +rocket-fragment=Fragment rakety +se-antimatter-reactor=Antihmotový reaktor +se-beryllium-ore=Berylová ruda +se-cargo-rocket-cargo-pod=Nákladní kontejner +se-cryonite=Kryonit +se-condenser-turbine=Kondenzátorová turbína +se-condenser-turbine-tank=Kondenzátorová turbína +se-condenser-turbine-generator=Kondenzátorová turbína +se-core-fragment-processor=Core fragment processor +se-core-miner=Vrták pro těžbu jádra +se-core-miner-drill=Core mining drill +se-cryogun-ice=Ledová zeď +se-dimensional-anchor=Dimenzionální kotva +se-electric-boiler=Elektrický bojler +probe_invalid_launch_star=Neplatná lokace startu: [img=item/se-star-probe] Hvězdná sonda musí být vypuštěna v blízkosti hvězdné orbity. +probe_invalid_launch_belt=Neplatná lokace startu: [img=item/se-belt-probe] Sonda pásu asteroidů musí být vypuštěna z pásu asteroidů. +probe_invalid_launch_field=Neplatná lokace startu: [img=item/se-void-probe] Sonda mezihvězdné prázdnoty musí být vypuštěna z pole asteroidů. +se-fluid-burner-generator=Kapalinový izotermní generátor +se-fuel-refinery=Palivová rafinérie +se-gate-fragment=Fragment artefaktu +se-holmium-ore=Holminit +se-iridium-ore=Iridit +se-meteor-defence-container=Zařízení obrany proti meteorům +se-meteor-defence-charger=Zařízení obrany proti meteorům +se-meteor-point-defence-container=Bodové dělo proti meteorům +victory-message-spaceship=[font=heading-1]Distorční pohon Nexusu dosáhl kritické rychlosti (250).\n[color=#f5cb48]Gratulujeme, dosáhli jste výherní podmínky Space Exploration: Vesmírné lodi![/color][/font]\nPokud jste si tuhle jízdu užili, zvažte, prosím, podporu na Patreonu: [color=#f5cb48]https://www.patreon.com/earendel[/color] +arcosphere-random=Tento recept se bude příležitostně měnit na alternativní verzi stejného názvu. Výsledky receptu jsou náhodné, ale množství arkosfér, které do procesu vchází, z něj i vychází. +se-meteor-point-defence-charger=Meteor point defence +se-methane-ice=Methanový led +se-naquium-ore=Naquitit +se-pulveriser=Drtička +se-rocket-launch-pad=Nákladní raketové silo +se-rocket-launch-pad-tank=Nákladní raketové silo +se-rocket-launch-pad-silo=Nákladní raketové silo +se-rocket-launch-pad-combinator=Nákladní raketové silo +se-rocket-launch-pad-_-seat=Nákladní raketové silo +se-rocket-launch-pad-settings=Nákladní raketové silo +se-rocket-landing-pad=Nákladní přistávací plocha +se-space-accumulator=Vesmírný akumulátor +se-space-accumulator-2=Vesmírný akumulátor 2 +se-space-astrometrics-laboratory=Astrometrická laboratoř +se-space-biochemical-laboratory=Biochemická laboratoř +se-space-assembling-machine=Vesmírná montovna +se-space-capsule-_-vehicle=Vesmírná kapsle +se-space-curved-rail=Zahnutá vesmírná kolej +se-space-decontamination-facility=Dekontaminační zařízení +se-space-electromagnetics-laboratory=Elektromagnetická laboratoř +se-space-genetics-laboratory=Genetická laboratoř +se-space-growth-facility=Růstová laboratoř +se-space-gravimetrics-laboratory=Gravimetrická laboratoř +se-space-hypercooler=Hyperchladič +se-space-laser-laboratory=Laserová laboratoř +se-lifesupport-facility=Zařízení podpory života +se-space-manufactory=Vesmírná manufaktura +se-space-material-fabricator=Material fabricator +se-space-mechanical-laboratory=Mechanical laboratory +se-space-particle-accelerator=Urychlovač částic +se-space-particle-collider=Srážeč částic +se-space-plasma-generator=Generátor plazmy +se-space-radiation-laboratory=Radiační laboratoř +se-space-radiator=Termální radiátor +se-space-radiator-2=Termální radiátor 2 +se-recycling-facility=Recyklační zařízení +se-space-pipe=Vesmírná trubka +se-space-pipe-long=Dlouhá vesmírná trubka +se-space-pipe-long-straight=Dlouhá rovná vesmírná trubka __1__ +se-space-pipe-long-junction=Dlouhá křižovatková vesmírná trubka __1__ +se-space-pipe-to-ground=Podzemní vesmírná trubka +se-space-science-lab=Vesmírná vědecká laboratoř +se-space-solar-panel=Plochý solární panel +se-space-solar-panel-2=Plochý solární panel 2 +se-space-solar-panel-3=Plochý solární panel 3 +se-space-spectrometry-facility=Spektrometrické zařízení +se-space-straight-rail=Rovná vesmírná kolej +se-space-supercomputer-1=Superpočítač +se-space-supercomputer-2=Kvantový superpočítač +se-space-supercomputer-3=Neurální superpočítač +se-space-supercomputer-4=Superpočítač hlubokého vesmíru +se-space-telescope-radio=Radioteleskop +se-space-telescope-microwave=Mikrovlnný teleskop +se-space-telescope=Teleskop +se-space-telescope-xray=Rentgenový teleskop +se-space-telescope-gammaray=Gammateleskop +se-space-thermodynamics-laboratory=Termodynamická laboratoř +se-space-splitter=Vesmírný rozdělovač +se-space-transport-belt=Vesmírný transportní pás +se-space-underground-belt=Vesmírný podzemní pás +se-spaceship-antimatter-engine=Antihmotový motor vesmírné lodi +se-spaceship-antimatter-booster-tank=Antihmotový booster vesmírné lodi +se-spaceship-console=Ovládací panel vesmírné lodi +se-spaceship-console-output=Výstup signálu ovládacího panelu vesmírné lodi +se-spaceship-gate=Dveře vesmírné lodi +se-spaceship-obstacle=Vesmírné sutiny +se-spaceship-rocket-engine=Raketový motor vesmírné lodi +se-spaceship-rocket-booster-tank=Raketový booster vesmírné lodi +se-spaceship-wall=Zeď vesmírné lodi +se-water-ice=Vodní led +se-vitamelange=Vitamelanž +se-vulcanite=Vulkanit +small-asteroid=Malý asteroid +se-gate-part=Část artefaktu +se-gate-platform-scaffold=Artifact jury rig +se-gate-lock-switch=Movable component +se-gate-lock-combinator=Combinator-attachment +se-gate-platform=Artifact augmentation platform +se-gate-platform-combinator=Combinator-attachment +se-gate-energy-interface=Power platform +se-gate-platform-button-switch=Tlačítko +se-gate-tank-input=Vstup kapalin +se-gate-tank-output=Výstup kapalin +se-pyramid-a=Geometrická struktura +se-pyramid-b=Geometrická struktura +se-pyramid-c=Geometrická struktura +se-cartouche-a=Kartuše +se-cartouche-b-a=Kartuše +se-cartouche-b-b=Kartuše +se-cartouche-chest=Prastará truhla +se-glyph=Glyf +glyph=Glyf +se-gate-addon=Artifact augmentation +se-gate-platform-button-middle=Stop +se-gate-platform-button-left=Left +se-gate-platform-button-right=Right +beacon=Základní maják +se-wide-beacon=Maják s dlouhým dosahem +se-wide-beacon-2=Maják s dlouhým dosahem 2 +se-supercharger=Supercharger +se-addon-power-pole=Addon power pole +se-pylon=Pylon +se-pylon-substation=Pylonová rozvodna +se-pylon-construction=Konstrukční pylon +se-pylon-construction-roboport=Konstrukční pylon +se-pylon-construction-radar=Radarový konstrukční pylon +se-pylon-construction-radar-roboport=Radarový konstrukční pylon +se-pylon-construction-radar-radar=Radarový konstrukční pylon +se-shield-projector=Projektor štítů +se-shield-projector-shield-floor-east=Energetický štít +se-shield-projector-shield-floor-north=Energetický štít +se-shield-projector-shield-floor-northeast=Energetický štít +se-shield-projector-shield-floor-northwest=Energetický štít +se-shield-projector-shield-floor-south=Energetický štít +se-shield-projector-shield-floor-southeast=Energetický štít +se-shield-projector-shield-floor-southwest=Energetický štít +se-shield-projector-shield-floor-west=Energetický štít +se-shield-projector-shield-wall-east=Energetický štít +se-shield-projector-shield-wall-north=Energetický štít +se-shield-projector-shield-wall-northeast=Energetický štít +se-shield-projector-shield-wall-northwest=Energetický štít +se-shield-projector-shield-wall-south=Energetický štít +se-shield-projector-shield-wall-southeast=Energetický štít +se-shield-projector-shield-wall-southwest=Energetický štít +se-shield-projector-shield-wall-west=Energetický štít +se-shield-projector-barrier=Energetický štít +se-naquium-heat-pipe=Naquiové tepelné potrubí +se-naquium-heat-pipe-horizontal=Horizontální naquiové tepelné potrubí +se-naquium-heat-pipe-vertical=Vertikální naquiové tepelné potrubí +se-naquium-heat-pipe-long=Dlouhé naquiové tepelné potrubí __1__ +se-deep-space-transport-belt=Transportní pás hlubokého vesmíru +se-deep-space-transport-belt-black=Černý transportní pás hlubokého vesmíru +se-deep-space-transport-belt-white=Bílý transportní pás hlubokého vesmíru +se-deep-space-transport-belt-red=Červený transportní pás hlubokého vesmíru +se-deep-space-transport-belt-yellow=Žlutý transportní pás hlubokého vesmíru +se-deep-space-transport-belt-green=Zelený transportní pás hlubokého vesmíru +se-deep-space-transport-belt-cyan=Tyrkysový transportní pás hlubokého vesmíru +se-deep-space-transport-belt-blue=Modrý transportní pás hlubokého vesmíru +se-deep-space-transport-belt-magenta=Růžový transportní pás hlubokého vesmíru +se-deep-space-underground-belt=Podzemní pás hlubokého vesmíru +se-deep-space-underground-belt-black=Černý podzemní pás hlubokého vesmíru +se-deep-space-underground-belt-white=Bílý podzemní pás hlubokého vesmíru +se-deep-space-underground-belt-red=Červený podzemní pás hlubokého vesmíru +se-deep-space-underground-belt-yellow=Žlutý podzemní pás hlubokého vesmíru +se-deep-space-underground-belt-green=Zelený podzemní pás hlubokého vesmíru +se-deep-space-underground-belt-cyan=Tyrkysový podzemní pás hlubokého vesmíru +se-deep-space-underground-belt-blue=Modrý podzemní pás hlubokého vesmíru +se-deep-space-underground-belt-magenta=Růžový podzemní pás hlubokého vesmíru +se-deep-space-splitter=Rozdělovač hlubokého vesmíru +se-deep-space-splitter-black=Černý rozdělovač hlubokého vesmíru +se-deep-space-splitter-white=Bílý rozdělovač hlubokého vesmíru +se-deep-space-splitter-red=Červený rozdělovač hlubokého vesmíru +se-deep-space-splitter-yellow=Žlutý rozdělovač hlubokého vesmíru +se-deep-space-splitter-green=Zelený rozdělovač hlubokého vesmíru +se-deep-space-splitter-cyan=Tyrkysový rozdělovač hlubokého vesmíru +se-deep-space-splitter-blue=Modrý rozdělovač hlubokého vesmíru +se-deep-space-splitter-magenta=Růžový rozdělovač hlubokého vesmíru +se-core-fissure=Trhlina jádra +se-big-turbine=Vysokoteplotní turbínový generátor +se-big-turbine-generator=Vysokoteplotní turbínový generátor +se-big-turbine-tank=Vysokoteplotní turbínový generátor +se-big-heat-exchanger=Vysokoteplotní tepelný výměník +se-blueprint-registration-point=Blueprint Registration Point +se-delivery-cannon=Dodávkové dělo +se-delivery-cannon-settings=Dodávkové dělo +se-delivery-cannon-energy-interface=Dodávkové dělo +se-delivery-cannon-chest=Truhla dodávkového děla +se-spaceship-clamp=Svorka vesmírné lodi +se-spaceship-clamp-place=Svorka vesmírné lodi +se-bloater-pool-cloud=Bloatburst pool +se-delivery-cannon-weapon=Zbraňové dodávkové dělo +se-delivery-cannon-weapon-settings=Zbraňové dodávkové dělo +se-delivery-cannon-weapon-energy-interface=Zbraňové dodávkové dělo +se-energy-transmitter-emitter=Zářič energetických paprsků +se-energy-transmitter-chamber=Paprsková komora +se-energy-transmitter-injector=Paprskový injektor +se-energy-transmitter-injector-reactor=Paprskový injektor +se-energy-receiver=Paprskový přijímač +se-energy-beam-defence=Deštník +se-nexus=Nexus +se-nexus-charger=Nexus +se-space-probe-rocket-silo=Raketové silo vesmírné sondy + + +[entity-description] +pipe=Distribuce kapalin +pipe-to-ground=Podzemní distribuce kapalin +straight-rail=Rovné koleje +stone-furnace=Taví rudy +steel-furnace=Taví rudy +electric-furnace=Taví rudy +burner-assembling-machine=Automatizovaná výrobní struktura založena na spalování paliva. +assembling-machine-1=Automatizovaná výrobní struktura. +assembling-machine-2=Automatizovaná výrobní struktura. +assembling-machine-3=Automatizovaná výrobní struktura. +oil-refinery=Konvertuje surovou ropu na užitečné produkty. +se-fuel-refinery=Automatizovaná struktura k výrobě paliva. +chemical-plant=Automatizovaná výrobní struktura. +lab=Automatizovaná výzkumná struktura. +burner-lab=Automatizovaná výzkumná struktura založena na spalování paliva. +transport-belt=Dopravník transportující předměty. +fast-transport-belt=Dopravník transportující předměty. +express-transport-belt=Dopravník transportující předměty. +underground-belt=Dopravník transportující předměty pod zemí. +fast-underground-belt=Dopravník transportující předměty pod zemí. +express-underground-belt=Dopravník transportující předměty pod zemí. +splitter=Stroj k rozdělování, spojování, a třídění dopravníků. +fast-splitter=Stroj k rozdělování, spojování, a třídění dopravníků. +express-splitter=Stroj k rozdělování, spojování, a třídění dopravníků. +se-gate-platform-scaffold=Ať už je ten prstenec cokoli, nebude fungovat. This is a construction site to make some repairs, install a few motors, sensors, control interface, and other addons. +se-gate-lock-switch=Stiskněte __CONTROL__rotate__ k manuálnímu pohybu. +se-gate-platform-button-switch=Stiskněte __CONTROL__rotate__ k posunu. +se-gate-lock-combinator=Zatím neimplementováno. +se-gate-platform-combinator=Zatím neimplementováno. +se-gate-energy-interface=Poskytuje artefaktu energii. +rocket-silo=Vypusťte satelit do vesmíru k odemknutí "Navigačního módu" a objevení nových planet, měsíců, a pásů asteroidů ve hvězdném systému, ve kterém byl satelit vypuštěn. Při úplném objevení současného hvězdného systému dojde k objevení nového hvězdného systému. +se-antimatter-reactor=Anihiluje antihmotu hmotou za vývinu extrémního množství tepla. +se-beryllium-ore=Berylliová ruda +se-condenser-turbine=Účinná jen na 75% oproti klasické parní turbíně, ale 99% využité páry je navráceno v podobě vody. +se-core-fragment-processor=Extrahuje suroviny z fragmentů jádra. +se-core-miner=Umožňuje nekonečnou extrakci surovin z planet a měsíců, ale při použití více zařízení na stejném tělese má snižující se výnosy. Spotřebovává 50MW. +se-core-miner-drill=Umožňuje nekonečnou extrakci surovin z planet a měsíců, ale při použití více zařízení na stejném tělese má snižující se výnosy. Spotřebovává 50MW. +se-dimensional-anchor=[font=default-bold][color=#f5cb48]Omezení umístění: Blízká hvězdná orbita[/color][/font]\nVyužívá gravitační studny hvězdy jako stabilizační bod pro prostorovou anomálii. +se-electric-boiler=Produkuje páru z vody pomocí elektrické energie. Má 90% účinnost. +se-fluid-burner-generator=Vyžaduje kapalné palivo s energetickou hodnotou (například kapalné raketové palivo) k produkci elektřiny. Jednoduchý a kompaktní způsob, ale chybí mu efektivita větších, na turbínách založených systémů. Navrženo pro použití ve vesmíru. Spotřeba paliva závisí na energetické hodnotě kapalného paliva. +se-holmium-ore=Holmiová ruda +se-iridium-ore=Iridiová ruda +se-space-probe-rocket=Raketa vesmírné sondy +se-meteor-defence-container=Může bránit celou planetu před meteory, ale střílet jen na jeden najednou. Vyžaduje proti-meteorovou munici a plné nabití. 80% přesnost. Potřebuje nabití po každém výstřelu. Při nabíjení spotřebovává 20MW. +se-meteor-defence-charger=Může bránit celou planetu před meteory, ale střílet jen na jeden najednou. Vyžaduje proti-meteorovou munici a plné nabití. 80% přesnost. Potřebuje nabití po každém výstřelu. Při nabíjení spotřebovává 20MW. +se-meteor-point-defence-container=Brání oblast před meteory. Dokáže vystřelit až na 4 meteory najednou. Vyžaduje bodovou proti-meteorovou munici a plné nabití. Dosah 64, 50% přesnost, po výstřelu je nutná doba k nabití. +se-meteor-point-defence-charger=Brání oblast před meteory. Dokáže vystřelit až na 4 meteory najednou. Vyžaduje bodovou proti-meteorovou munici a plné nabití. Dosah 64, 50% přesnost, po výstřelu je nutná doba k nabití. +se-naquium-ore=Naquiová ruda +se-rocket-launch-pad=Vysílá svůj inventář do vesmíru. Dokáže transportovat i pasažéry, vstupte pomocí __CONTROL__toggle-driving__ v blízkosti předních dveří. +se-rocket-landing-pad=Místo přistání nákladu pro kapsle nákladních raket. +se-space-assembling-machine=Modifikovaná montovna, která dokáže operovat ve vesmíru. +se-space-astrometrics-laboratory=Kombinuje, porovnává, a vyčísluje různé zdroje astronomických informací. +se-space-biochemical-laboratory=Pokročilá chemická laboratoř specializovaná na biochemii. Dokáže také provádět základní chemické procesy a zpracování ropy. +se-space-capsule-_-vehicle=Může být využita k návratu pasažérů zpět na nejbližší planetární povrch. Nasedněte do kapsle pomocí __CONTROL__toggle-driving__. +se-space-decontamination-facility=Čistí substance pro použití ve sterilním prostředí, a připravuje kapaliny pro použití v prostředí s nízkým tlakem. +se-space-electromagnetics-laboratory=Zařízení pro aplikaci intenzivních magnetických polí a extrémně vysokých napětích. +se-space-genetics-laboratory=Laboratoř, která se věnuje genetickému sekvencování, modifikaci, a pěstění kultur. +se-space-gravimetrics-laboratory=Analyzuje a simuluje gravitační vlivy. +se-space-growth-facility=Pěstuje biologické vzorky pod širokou škálou kontrolovaných podmínek, které jsou kdekoli jinde nemožné, například pod vlivem mikrogravitace. +se-space-hypercooler=Provádí výměnu tepla na termokapalině, čímž jednu otepluje a druhou ochlazuje. +se-space-laser-laboratory=Experimentuje s lasery. Musí být chráněny oči. +se-lifesupport-facility=Udržování života v nepřátelském prostředí. +se-space-manufactory=Obří montovna, která je ale schopna provedení složitějších receptů. Funkční pouze ve vesmíru (a na vesmírných lodích). +se-space-material-fabricator=Syntetizuje nové materiály. Kříženec mezi srážečem částic a 3D tiskárnou. +se-space-mechanical-laboratory=Poskytuje provedení široké škály mechanických procesů: Drcení, trhání, střihání, vibrace, apod. +se-space-particle-accelerator=Urychluje částice na téměř rychlost světla. +se-space-particle-collider=Sráží vysoko-rychlostní částice a analyzuje výsledky srážky. +se-space-pipe=Můžete přes ni chodit. +se-space-pipe-long=Dobrá a levná cesta transportu tekutin na dlouhé vzdálenosti vysokou rychlostí. Můžete přes ni chodit. +se-space-pipe-long-straight=__1__ dlouhá. Nepropojuje se po stranách. Dobrá pro paralelní vedení potrubí a rychlý přesun kapalin na dlouhé vzdálenosti. +se-space-pipe-long-junction=__1__ dlouhá. Má centrální "křižovatku" s postranními přípojkami. Dobrá pro rychlý přesun kapalin ve výrobních linkách. +se-space-pipe-to-ground=Drahá a s omezeným dosahem, používejte jen v případě potřeby. Můžete chodit přes vesmírné trubky. +se-space-plasma-generator=Generuje řadu druhů plazmy. +se-pulveriser=Drtí a mele tvrdší nerosty a fragmenty planetárních jader. +se-space-radiation-laboratory=Relativně bezpečné místo na hraní s radioaktivním materiálem. Lze využít ke zpracování uranu. +se-space-radiator=Vyzařuje přebytečné teplo z přehřáté termokapaliny. +se-space-radiator-2=Vyzařuje přebytečné teplo z přehřáté termokapaliny. +se-recycling-facility=Recykluje šrot a další vedlejší produkty na suroviny. +se-space-solar-panel=Vysoce efektivní solární panel, po kterém můžete chodit. +se-space-solar-panel-2=Vysoce efektivní solární panel, po kterém můžete chodit. +se-space-solar-panel-3=Vysoce efektivní solární panel, po kterém můžete chodit. +se-space-spectrometry-facility=Spektrofotometrie, plynová chromatografie, hmotnostní spektrometrie, a další druhy spektrografie. +se-space-supercomputer-1=Datová manipulace, zpracovávání, a simulace. +se-space-supercomputer-2=Kvantové výpočty. Vylepšená datová manipulace, zpracovávání, a simulace. +se-space-supercomputer-3=Adaptivní neurální síť na rámci kvantových výpočtů. Vylepšená datová manipulace, zpracovávání, a simulace. +se-space-supercomputer-4=Navržen pomocí nanotechnologie, semi-organický superpočítač, který využívá zakřivování prostoru a vyšších dimenzí pro zvýšení výpočetní hustoty a energetického transportu. +se-space-straight-rail=Navržena pro použití ve vesmíru, ale použitelná i na zemi. +se-space-science-lab=Dokáže zpracovat pokročilé vědecké balíčky. +se-space-telescope=Sofistikovaný teleskop, citlivý na různé vlnové délky kolem viditelného spektra. +se-space-telescope-gammaray=Gamma paprsky se nelámou, takže je nemůžete zaměřit pomocí čoček. Tento výkonný teleskop místo toho využívá zrcadla a speciální detektory. +se-space-telescope-xray=Rentgenové paprsky jsou blokovány většinou atmosfér. Tento výkonný teleskop byl navržen pro použití ve vesmíru, kde atmosféra nepředstavuje problém. +se-space-telescope-microwave=Obrovský teleskop, schopný detekovat mikrovlny a kosmické mikrovlnné pozadí. +se-space-telescope-radio=Obrovský teleskop, schopný detekovat velmi slabé radiovlny ze vzdálených zdrojů. +se-space-thermodynamics-laboratory=Provádí procesy, které zahrnují extrémní teploty. Dokáže také provádět základní termální procesy, jako například tavení rud. +se-space-transport-belt=Zařídí, aby vám vaše předměty neodplouvaly pryč. +se-spaceship-antimatter-engine=[font=default-bold][color=#f5cb48]Omezení umístění: Podlaha vesmírné lodi[/color][/font]\nAnihiluje proud antihmoty. Počítá se jako přepážka uzavření vesmírné lodi. +se-spaceship-antimatter-booster-tank=[font=default-bold][color=#f5cb48]Omezení umístění: Podlaha vesmírné lodi[/color][/font]\nZadržuje antihmotu. Vyžadováno pro start vesmírné lodi. +se-spaceship-console=[font=default-bold][color=#f5cb48]Omezení umístění: Podlaha vesmírné lodi[/color][/font]\nPoužívejte k pohybu vesmírné lodi mezi planetami, měsíci, orbitami, a pásy asteroidů. Musí se nacházet uvnitř vesmírné lodi. Kontrola integrity zvýrazní problémy. +se-spaceship-console-output=Vysílá signály o současném stavu vesmírné lodi. Zobrazte si Vesmírné lodě v Informatronu pro více informací [__CONTROL__informatron__]. +se-spaceship-gate=[font=default-bold][color=#f5cb48]Omezení umístění: Podlaha vesmírné lodi[/color][/font]\nSilové pole zastaví dekompresi při otevření dveří. Počítá se jako přepážka uzavření vesmírné lodi. +se-spaceship-rocket-engine=[font=default-bold][color=#f5cb48]Omezení umístění: Podlaha vesmírné lodi[/color][/font]\nSpaluje kapalné raketové palivo. Počítá se jako přepážka uzavření vesmírné lodi. +se-spaceship-rocket-booster-tank=[font=default-bold][color=#f5cb48]Omezení umístění: Podlaha vesmírné lodi[/color][/font]\nZadržuje kapalné raketové palivo. Vyžadováno pro start vesmírné lodi. +se-spaceship-wall=[font=default-bold][color=#f5cb48]Omezení umístění: Podlaha vesmírné lodi[/color][/font]\nPočítá se jako přepážka uzavření vesmírné lodi, diagonální mezery ruší uzavření. +beacon=8 slotů na moduly. Přenáší účinky modulů blízkým přátelským entitám ve vzdálenosti 3. Více majáků ovlivňující stejnou entitu způsobí její přetížení a zastavení operování. +se-wide-beacon=15 slotů na moduly. Přenáší účinky modulů blízkým přátelským entitám ve vzdálenosti 14. Více majáků ovlivňující stejnou entitu způsobí její přetížení a zastavení operování. +se-wide-beacon-2=20 slotů na moduly. Přenáší účinky modulů blízkým přátelským entitám ve vzdálenosti 14. Více majáků ovlivňující stejnou entitu způsobí její přetížení a zastavení operování. +kr-singularity-beacon=Kompaktní, 100% efektivní maják s krátkým dosahem. Přenáší účinky modulů blízkým přátelským entitám ve vzdálenosti 2. Více majáků ovlivňující stejnou entitu způsobí její přetížení a zastavení operování. +se-supercharger=Dokáže nabíjet až 64 robotů vysokou rychlostí najednou. Maximální spotřeba energie je 1GW. +se-addon-power-pole=Malý elektrický sloup, který byl navržen k připojení na budovy a nebo pro precizní kontrolu elektrického pokrytí. +se-pylon=Distribuuje elektrickou energii. Dosah pro připojení je 64. +se-pylon-substation=Distribuuje elektrickou energii. Dosah pro připojení je 64, pokrývá oblast o velikosti 64x64. +se-pylon-construction=Distribuuje elektrickou energii a rozšiřuje konstrukční oblast. Dosah pro připojení je 64, pokrývá oblast o velikosti 64x64. +se-pylon-construction-radar=Distribuuje elektrickou energii, rozšiřuje konstrukční oblast a poskytuje radarovou vizi. Dosah pro připojení je 64, pokrývá a odhaluje oblast o velikosti 256x256. +se-shield-projector=Vytváří ochranné silové pole. Spotřebovává více energie pokud se nabijí, nebo pokud je štít pod náporem. Pokud máte nainstalovanou modifikaci "Walls Block Spitters", dokáže blokovat projektily plivačů. +se-big-turbine=[font=default-bold][color=#e4cead]Maximální výkon:[/color][/font]1GW.\nVelký generátor, který akceptuje páru o 5000°C, produkuje páru o 500°C na druhém konci, a vodu po stranách. Energeticky efektivní na 99%, vodu spořící na 99%. +se-big-heat-exchanger=Velký výměník tepla navržen pro vysoké teploty a velké kapacity. +se-delivery-cannon=Kolejnicové dělo, které je schopné vystřelit náklad na orbitu a ještě dál. Při neopatrném zacházení způsobuje poškození, užívejte opatrně. +se-delivery-cannon-chest=Obrněná truhla, navržena k bezpečnému zachycení velmi rychle padajícího nákladu. Vyžaduje volné místo k bezpečnému zachycení dodávek. +se-spaceship-clamp=Svorka na vesmírné lodi schopná zakotvit na svorce směřující opačným směrem. Počítá se jako přepážka uzavření vesmírné lodi. +se-spaceship-clamp-place=Svorka na vesmírné lodi schopná zakotvit na svorce směřující opačným směrem. Počítá se jako přepážka uzavření vesmírné lodi. +se-space-accumulator=Vysokohustotní energetické úložiště. +se-space-accumulator-2=Vysokohustotní energetické úložiště. +se-nexus=Funguje pouze na pohybující se vesmírné lodi, spotřeba energie souvisí s rychlostí. Může získávat data z pohybu v mezihvězdném prostoru, generace dat závisí na kinetické energii lodi. Nexus je navržen tak, aby se choval jako distorční pohon, a se správnou technologií může umožnit únik z lokální hvězdokupy. +se-nexus-charger=Funguje pouze na pohybující se vesmírné lodi, spotřeba energie souvisí s rychlostí. Může získávat data z pohybu v mezihvězdném prostoru, generace dat závisí na kinetické energii lodi. Nexus je navržen tak, aby se choval jako distorční pohon, a se správnou technologií může umožnit únik z lokální hvězdokupy. +se-space-probe-rocket-silo=Raketové silo k vysílání vesmírných sond. +se-delivery-cannon-weapon=Velké elektromagnetické dělo schopné vystřelení munice na orbitu a ještě dál. Užívejte opatrně. +se-energy-transmitter-emitter=Centrální budova, která vytváří mezi-povrchový energetický paprsek. Může být použit jako zbraň, nebo k vysílání energie k paprskovému přijímači. Vyžaduje připojenou paprskovou komoru a připojené paprskové injektory. Síla paprsku závisí na počtu injektorů. +se-energy-transmitter-chamber=Musí být připojena k zářiči energetických paprsků. Jiné komory mohou být připojeny konci, a nebo prostředkem dlouhé strany. Injektory mohou být připojeny pouze po stranách. +se-energy-transmitter-injector=Musí být připojen k paprskové komoře a zářiči. Injektory mají konstantní energetickou spotřebu, každý zvyšuje vyslanou energii, což buď zvyšuje teplo produkované přijímačem, nebo poškození a rychlost paprsku. +se-energy-transmitter-injector-reactor=Musí být připojen k paprskové komoře a zářiči. Injektory mají konstantní energetickou spotřebu, každý zvyšuje vyslanou energii, což buď zvyšuje teplo produkované přijímačem, nebo poškození a rychlost paprsku. +se-energy-receiver=Zachycuje energetický paprsek a konvertuje ho na teplo. Zářič musí být v módu Energizace a musí být zaměřen na daný přijímač. +se-energy-beam-defence=Zařízení obrany před energetickými paprsky. Brání před výronem koronální hmoty či před zbraněmi na bázi energetických paprsků. Jedinou podmínkou fungování je energie, základní spotřeba činí 10MW, ale zvyšuje se podle síly nebezpečného paprsku. K ochraně jednoho povrchu před výronem koronální hmoty stačí jeden Deštník, proti paprskovým zbraním dokáže jeden deštník rozptýlit proud částic o energii až 500GJ. Zobrazte si Energetické paprsky v [img=virtual-signal/informatron] Informatronu pro více informací [__CONTROL__informatron__] + +[equipment-name] +energy-shield-equipment=Energetický štít +energy-shield-mk2-equipment=Energetický štít MK2 +energy-shield-mk3-equipment=Energetický štít MK3 +energy-shield-mk4-equipment=Energetický štít MK4 +energy-shield-mk5-equipment=Energetický štít MK5 +energy-shield-mk6-equipment=Energetický štít MK6 +se-adaptive-armour-equipment-1=Adaptivní brnění MK1 +se-adaptive-armour-equipment-2=Adaptivní brnění MK2 +se-adaptive-armour-equipment-3=Adaptivní brnění MK3 +se-adaptive-armour-equipment-4=Adaptivní brnění MK4 +se-adaptive-armour-equipment-5=Adaptivní brnění MK5 +se-rtg-equipment=Přenosný RTG +se-rtg-equipment-2=Přenosný RTG MK2 +se-lifesupport-equipment-1=Vybavení podpory života MK1 +se-lifesupport-equipment-2=Vybavení podpory života MK2 +se-lifesupport-equipment-3=Vybavení podpory života MK3 +se-lifesupport-equipment-4=Vybavení podpory života MK4 + +[equipment-description] +energy-shield-equipment=Ochranná bublina s velkou rychlostí nabíjení, ale velkou spotřebou energie. +energy-shield-mk2-equipment=Ochranná bublina s velkou rychlostí nabíjení, ale velkou spotřebou energie. +energy-shield-mk3-equipment=Ochranná bublina s velkou rychlostí nabíjení, ale velkou spotřebou energie. +energy-shield-mk4-equipment=Ochranná bublina s velkou rychlostí nabíjení, ale velkou spotřebou energie. +energy-shield-mk5-equipment=Ochranná bublina s velkou rychlostí nabíjení, ale velkou spotřebou energie. +energy-shield-mk6-equipment=Ochranná bublina s velkou rychlostí nabíjení, ale velkou spotřebou energie. +se-adaptive-armour-equipment-1=Brnění, které využívá energie k samoopravě. S postupem času pomalu zvyšuje míru ochrany. +se-adaptive-armour-equipment-2=Brnění, které využívá energie k samoopravě. S postupem času pomalu zvyšuje míru ochrany. +se-adaptive-armour-equipment-3=Brnění, které využívá energie k samoopravě. S postupem času pomalu zvyšuje míru ochrany. +se-adaptive-armour-equipment-4=Brnění, které využívá energie k samoopravě. S postupem času pomalu zvyšuje míru ochrany. +se-adaptive-armour-equipment-5=Brnění, které využívá energie k samoopravě. S postupem času pomalu zvyšuje míru ochrany. +se-rtg-equipment=Radioizotopový termoelektrický generátor. Přenosný generátor, který konvertuje teplo z radioaktivního rozpadu na elektrickou energii. Vydrží funkční po desetiletí bez jakéhokoli dalšího paliva. +se-rtg-equipment-2=Radioizotopový termoelektrický generátor MK2. Vylepšený přenosný generátor, který konvertuje teplo z radioaktivního rozpadu na elektrickou energii. Vydrží funkční po desetiletí bez jakéhokoli dalšího paliva. +se-lifesupport-equipment-1=Zvyšuje účinnost podpory života o +100% (sčítatelné). Při instalaci v jiném brnění než ve skafandru je bonus poloviční, a nefunguje ve vesmíru. +se-lifesupport-equipment-2=Zvyšuje účinnost podpory života o +200% (sčítatelné). Při instalaci v jiném brnění než ve skafandru je bonus poloviční, a nefunguje ve vesmíru. +se-lifesupport-equipment-3=Zvyšuje účinnost podpory života o +400% (sčítatelné). Při instalaci v jiném brnění než ve skafandru je bonus poloviční, a nefunguje ve vesmíru. +se-lifesupport-equipment-4=Zvyšuje účinnost podpory života o +800% (sčítatelné). Při instalaci v jiném brnění než ve skafandru je bonus poloviční, a nefunguje ve vesmíru. + +[fluid-name] +se-antimatter-stream=Proud antihmoty +se-bio-sludge=Biosludge +se-contaminated-bio-sludge=Contaminated biosludge +se-contaminated-space-water=Kontaminovaná kosmická voda +se-chemical-gel=Chemický gel +se-decompressing-steam=Condensing Steam +se-liquid-rocket-fuel=Kapalné raketové palivo +se-methane-gas=Methanový plyn +se-methane-gas-mixed=Směs methanu +se-nutrient-gel=Výživný gel +se-neural-gel=Neurální gel +se-neural-gel-2=Pokročilý neurální gel +se-ion-stream=Proud iontů +se-plasma-stream=Proud plasmy +se-particle-stream=Proud částic +se-proton-stream=Proud protonů +se-space-coolant=Termotekutina 25°C +se-space-coolant-hot=Termotekutina 25°C +se-space-coolant-warm=Zchlazená termotekutina -10°C +se-space-coolant-cold=Zchlazená termotekutina -100°C +se-space-coolant-supercooled=Superzchlazená termotekutina -273°C +se-space-water=Kosmická voda +se-beryllium-hydroxide=Hydroxid beryllnatý +se-cryonite-slush=Kryonitová struska + +[fluid-description] +se-space-water=Voda, která při nízkém tlaku nemrzne, použitelná pro většinu potřeb ve vesmíru. +se-space-coolant=Základní teplota termotekutiny. +se-space-coolant-hot=Základní teplota termotekutiny. +se-space-coolant-warm=Teplota termotekutiny po ochlazení termálními radiátory. +se-space-coolant-cold=Teplota termotekutiny po silném ochlazení. +se-space-coolant-supercooled=Teplota termotekutiny po opakovaném silném chlazení. + +[fuel-category-name] +antimatter=Antihmotové palivo + +[item-group-name] +space=Vesmír +science=Věda +spaceship=Vesmírná loď +bob-fluids=Kapaliny +resources=Suroviny +intermediate-products=Meziprodukty +combat=Vybavení & Boj + +[item-name] +core-fragment=Fragment jádra (__1__) +effectivity-module-4=Modul efektivity 4 +effectivity-module-5=Modul efektivity 5 +effectivity-module-6=Modul efektivity 6 +effectivity-module-7=Modul efektivity 7 +effectivity-module-8=Modul efektivity 8 +effectivity-module-9=Modul efektivity 9 +glass=Sklo +productivity-module-4=Modul produktivity 4 +productivity-module-5=Modul produktivity 5 +productivity-module-6=Modul produktivity 6 +productivity-module-7=Modul produktivity 7 +productivity-module-8=Modul produktivity 8 +productivity-module-9=Modul produktivity 9 +rocket-fuel=Pevné raketové palivo +sand=Písek +solid-sand=Washed Sand +washed-sand=Washed Sand +satellite=Navigační satelit +se-antimatter-canister=Antimatter Canister +se-astrometric-data=Astrometrická data +se-astronomic-catalogue-1=Astronomic Catalogue +se-astronomic-catalogue-2=Broad Astronomic Catalogue +se-astronomic-catalogue-3=Comprehensive Astronomic Catalogue +se-astronomic-catalogue-4=Extended Astronomic Catalogue +se-astronomic-insight=Astronomic Insight +se-astronomic-science-pack-1=Astronomický vědecký balíček 1 +se-astronomic-science-pack-2=Astronomický vědecký balíček 2 +se-astronomic-science-pack-3=Astronomický vědecký balíček 3 +se-astronomic-science-pack-4=Astronomický vědecký balíček 4 +se-atomic-data=Atomová data +se-beryllium-ore=Berylová ruda +se-ballistic-shielding-data=Ballistic shielding data +se-beryllium-ore-crushed=Drcený beryl +se-beryllium-ore-washed=Promytý beryl +se-beryllium-plate=Berylliový plát +se-beryllium-powder=Berylliový prášek +se-beryllium-ingot=Berylliový ingot +se-beryllium-sulfate=Síran beryllnatý +se-bio-combustion-data=Bio Combustion Data +se-bio-combustion-resistance-data=Bio combustion resistance data +se-bio-spectral-data=Biospektrální data +se-biochemical-data=Biochemická data +se-biochemical-resistance-data=Biochemical resistance data +se-bioculture=Biokultura +se-bioelectrics-data=Bioelektrická data +se-biological-catalogue-1=Biological Catalogue +se-biological-catalogue-2=Broad Biological Catalogue +se-biological-catalogue-3=Comprehensive Biological Catalogue +se-biological-catalogue-4=Extended Biological Catalogue +se-biological-insight=Biological Insight +se-biological-science-pack-1=Biologický vědecký balíček 1 +se-biological-science-pack-2=Biologický vědecký balíček 2 +se-biological-science-pack-3=Biologický vědecký balíček 3 +se-biological-science-pack-4=Biologický vědecký balíček 4 +se-biomechanical-data=Biomechanická data +se-biomechanical-resistance-data=Biomechanical Resistance Data +se-boson-data=Bosonová data +se-broken-data=Zničená datová karta +se-canister=Secure Canister +se-biogun=Biologická puška +se-bloater-ammo=Bloatburst ammo +se-pheromone-ammo=Feromonová šipka +se-cryogun=Kryopuška +se-cryogun-ammo=Ledová munice +se-rocket-launch-pad-silo-dummy-ingredient-item=Nákladní raketa (Skrytá ingredience) +se-rocket-launch-pad-silo-dummy-result-item=Nákladní raketa (Skrytý produkt) +se-cargo-rocket-cargo-pod=Nákladní kontejner +se-cargo-rocket-fuel-tank=Raketová palivová nádrž +se-cargo-rocket-section=Sekce nákladní rakety +se-cargo-rocket-section-packed=Sbalené sekce nákladní rakety +se-cold-thermodynamics-data=Cold Thermodynamics Data +se-comparative-genetic-data=Comparative Genetic Data +se-compressive-strength-data=Compressive Strength Data +se-conductivity-data=Vodivostní data +se-contaminated-scrap=Kontaminovaný šrot +se-core-fragment-omni=Fragment jádra +se-corrosion-resistance-data=Data odolnosti proti korozi +se-cryogenics-data=Cryogenics Data +se-cryonite=Kryonit +se-cryonite-crushed=Drcení kryonit +se-cryonite-washed=Promytý kryonit +se-cryonite-rod=Kryonitová tyč +se-cryonite-ion-exchange-beads=Anion-Ion Exchange Beads +se-dark-energy-data=Data temné energie +se-darkmatter-data=Data temné hmoty +se-data-storage-substrate-cleaned=Hladký substrát datového úložiště +se-data-storage-substrate=Drsný substrát datového úložiště +se-decompression-data=Dekompresní data +se-decompression-resistance-data=Data odolnosti proti dekompresi +se-universal-catalogue=Univerzální katalog +se-deep-space-science-pack=Vědecký balíček hlubokého vesmíru +se-deep-space-science-pack-1=Vědecký balíček hlubokého vesmíru 1 +se-deep-space-science-pack-2=Vědecký balíček hlubokého vesmíru 2 +se-deep-space-science-pack-3=Vědecký balíček hlubokého vesmíru 3 +se-deep-space-science-pack-4=Vědecký balíček hlubokého vesmíru 4 +se-delivery-cannon-capsule=Kapsle dodávkového děla +se-delivery-cannon-capsule-packed=Kapsle dodávkového děla: __1__ +se-delivery-cannon-targeter=Zaměřovač dodávkového děla +se-delivery-cannon-weapon-capsule=Kapsle zbraňového dodávkového děla +se-delivery-cannon-weapon-capsule-packed=Kapsle zbraňového dodávkového děla: __1__ +se-delivery-cannon-weapon-targeter=Zaměřovač zbraňového dodávkového děla +se-energy-transmitter-targeter=Zaměřovač energetického paprsku +se-doppler-shift-data=Data Dopplerova jevu +se-durability-data=Data durability +se-electrical-shielding-data=Data elektrických štítů +se-electromagnetic-field-data=Data elektromagnetických polí +se-empty-data=Prázdná datová karta +se-empty-lifesupport-canister=Prázdná nádoba podpory života +se-energy-catalogue-1=Energy Catalogue +se-energy-catalogue-2=Broad Energy Catalogue +se-energy-catalogue-3=Comprehensive Energy Catalogue +se-energy-catalogue-4=Extended Energy Catalogue +se-energy-insight=Energy Insight +se-energy-science-pack-1=Energetický vědecký balíček 1 +se-energy-science-pack-2=Energetický vědecký balíček 2 +se-energy-science-pack-3=Energetický vědecký balíček 3 +se-energy-science-pack-4=Energetický vědecký balíček 4 +se-entanglement-data=Entanglement Data +se-enriched-naquium=Obohacené naquium +se-exotic-fission-data=Exotic Fission Data +se-exotic-singularity-data=Data singularity +se-explosion-shielding-data=Data protivýbušných štítů +se-experimental-alloys-data=Experimentální data slitin +se-experimental-biochemical-data=Experimentální biochemická data +se-experimental-bioculture=Experimentální biokultura +se-experimental-genetic-data=Experimentální genetická data +se-experimental-material-decay-data=Experimentální data rozpadů materiálů +se-experimental-material-spectral-data=Experimental Material Spectral Data +se-experimental-material=Experimentální materiálový prototyp +se-experimental-specimen=Experimentální biomasa +se-experimental-superconductor=Prototyp supravodiče +se-forcefield-data=Data silového pole +se-friction-data=Friction data +se-fusion-test-data=Data zkušební fúze +se-gammaray-detector=Detektor gamma paprsků +se-gammaray-observation-data=Data pozorování gamma paprsků +se-gammaray-test-data=Data gamma paprsků +se-gate-fragment=Fragment artefaktu +se-genetic-data=Genetická data +se-gravity-wave-observation-data=Data pozorování gravitačních vln +se-gravity-wave-data=Data gravitačních vln +se-gravimetric-observation-data=Data gravimetrických pozorování +se-gravimetric-test-data=Data gravimetrických testů +se-gravitational-lensing-data=Gravitational lensing data +se-heat-shielding=Tepelné stínění +se-holmium-ore=Holminit +se-holmium-ore-crushed=Drcená holmiová ruda +se-holmium-ore-washed=Promytá holmiová ruda +se-holmium-powder=Holmiový prášek +se-holmium-plate=Holmiový plát +se-holmium-ingot=Holmiový ingot +se-hot-thermodynamics-data=Hot thermodynamics data +se-impact-shielding-data=Impact shielding data +se-infrared-observation-data=Infrared observation data +se-ion-spectrometry-data=Ion spectrometry data +se-iridium-ore=Iridit +se-iridium-ore-crushed=Drcený iridit +se-iridium-ore-washed=Promytý iridit +se-iridium-powder=Iridiový prášek +se-iridium-plate=Iridiový plát +se-iridium-ingot=Iridiový ingot +se-junk-data=Junk Data Card +se-laser-shielding-data=Data laserového stínění +se-lepton-data=Leptonová data +se-lifesupport-canister=Nádoba podpory života +se-machine-learning-data=Data strojového učení +se-magnetic-canister=Magnetická nádoba +se-magnetic-monopole-data=Magnetic Monopole Data +se-material-decay-data=Material Decay Data +se-material-science-pack-1=Materiální vědecký balíček 1 +se-material-science-pack-2=Materiální vědecký balíček 2 +se-material-science-pack-3=Materiální vědecký balíček 3 +se-material-science-pack-4=Materiální vědecký balíček 4 +se-material-spectral-data=Materiální spektrální data +se-material-testing-pack=Balíček testování materiálů +se-material-catalogue-1=Material Catalogue +se-material-catalogue-2=Broad Material Catalogue +se-material-catalogue-3=Comprehensive Material Catalogue +se-material-catalogue-4=Extended Material Catalogue +se-material-insight=Material Insight +se-medpack=Lékárnička +se-medpack-2=Lékárnička 2 +se-medpack-3=Lékárnička 3 +se-medpack-4=Lékárnička 4 +se-meteor-defence=Zařízení obrany proti meteorům +se-meteor-defence-ammo=Munice zařízení obrany proti meteorům +se-meteor-point-defence=Meteor point defence +se-meteor-point-defence-ammo=Meteor point defence ammo +se-methane-ice=Methanový led +se-micro-black-hole-data=Data mikro černé díry +se-microwave-observation-data=Data pozorování mikrovln +se-negative-pressure-data=Negative Pressure Data +se-nano-cold-thermodynamics-data=Nanomaterial Cold Thermodynamics Data +se-nano-compressive-strength-data=Nanomaterial Compressive Strength Data +se-nano-hot-thermodynamics-data=Nanomaterial Hot Thermodynamics Data +se-nanomaterial=Nanomateriál +se-nano-tensile-strength-data=Nanomaterial Tensile Strength Data +se-naquium-ore=Naquitit +se-naquium-ore-crushed=Drcený naquitit +se-naquium-ore-washed=Promytý naquitit +se-naquium-powder=Naquiový prášek +se-naquium-plate=Naquiový plát +se-naquium-ingot=Naquiový ingot +se-neural-anomaly-data=Data neurální anomálie +se-nutrient-vat=Nutrient Vat +se-observation-frame-blank=Blank Observation Frame +se-observation-frame-gammaray=Gamma Ray Observation frame +se-observation-frame-infrared=Infrared Observation frame +se-observation-frame-microwave=Microwave Observation frame +se-observation-frame-radio=Radio Wave Observation frame +se-observation-frame-uv=UV Observation frame +se-observation-frame-visible=Visible Observation frame +se-observation-frame-xray=Xray Observation frame +se-orbital-data=Data orbitálních výpočtů +se-particle-beam-shielding-data=Data stínění paprsků částic +se-plague-bomb=Morová raketa +se-plasma-canister=Nádoba plasmy +se-plasma-electrodynamics-data=Data elektrodynamiky plasmy +se-plasma-thermodynamics-data=Data termodynamiky plasmy +se-polarisation-data=Polarizační data +se-pressure-containment-data=Pressure Containment Data +se-quantum-phenomenon-data=Data kvantového jevu +se-quark-data=Kvarková data +se-radiation-data=Radiační data +se-radiation-exposure-data=Data vystavení radiaci +se-radiation-exposure-resistance-data=Data odolnosti proti radiaci +se-radiation-shielding-data=Data stínění proti radiaci +se-radio-observation-data=Radio Wave Observation Data +se-rigidity-data=Rigidity data +se-rtg-equipment=Přenosný RTG +se-rtg-equipment-2=Přenosný RTG MK2 +se-scrap=Šrot +se-shear-strength-data=Shear strength data +se-significant-data=Significant Data +se-significant-specimen=Significant Biomass +se-singularity-data=Data singularity +se-space-capsule=Vesmírná kapsle +se-space-mirror=Multispektrální zrcadlo +se-space-platform-plating=Space platform plating +se-space-platform-scaffold=Space platform scaffold +se-space-rail=Vesmírná kolej +se-spaceship-floor=Podlaha vesmírné lodi +se-specimen=Biomasa +se-subatomic-data=Subatomární data +se-superconductivity-data=Data supravodivosti +se-superconductor=Supravodič +se-superconductive-cable=Supravodivý kabel +se-tensile-strength-data=Tensile Strength Data +se-tesla-ammo=Tesla Gun Ammo +se-tesla-gun=Tesla Gun +se-thruster-suit=Skafandr +se-thruster-suit-2=Skafandr MK2 +se-thruster-suit-3=Skafandr MK3 +se-thruster-suit-4=Skafandr MK4 +se-timespace-anomaly-data=Data časoprostorové anomálie +se-used-lifesupport-canister=Použitá nádoba podpory života +se-uv-observation-data=Data pozorování UV +se-visible-observation-data=Visible Observation Data +se-vitamelange=Vitamelanže +se-vitamelange-nugget=Hrudka vitamelanže +se-vitamelange-roast=Vitamelange roast +se-vitamelange-spice=Vitamelange spice +se-vitamelange-extract=Vitamelange extract +se-vulcanite=Vulkanit +se-vulcanite-crushed=Drcený vulkanit +se-vulcanite-washed=Promytý vulkanit +se-vulcanite-block=Vulkanitový blok +se-vulcanite-ion-exchange-beads=Cation Ion Exchange Beads +se-water-ice=Vodní led +se-xray-observation-data=Data pozorování rentgenových paprsků +se-zero-point-energy-data=Zero Point Energy Data +se-rocket-science-pack=Raketový vědecký balíček +space-science-pack=Optimalizační vědecký balíček +speed-module-4=Modul rychlosti 4 +speed-module-5=Modul rychlosti 5 +speed-module-6=Modul rychlosti 6 +speed-module-7=Modul rychlosti 7 +speed-module-8=Modul rychlosti 8 +speed-module-9=Modul rychlosti 9 +se-aeroframe-pole=Nosníková tyč +se-aeroframe-scaffold=Nosníkové lešení +se-aeroframe-bulkhead=Nosníková přepážka +se-lattice-pressure-vessel=Tlaková komora +se-heavy-girder=Těžký nosník +se-heavy-bearing=Těžké ložisko +se-heavy-composite=Těžký kompozit +se-heavy-assembly=Těžký mechanismus +se-bioscrubber=Biologická komora +se-vitalic-epoxy=Vitální pryskyřice +se-vitalic-reagent=Vitální reagent +se-vitalic-acid=Vitální kyselina +se-self-sealing-gel=Samo-záplatový gel +se-holmium-cable=Holmiový kabel +se-holmium-solenoid=Holmiový solenoid +se-quantum-processor=Kvantový procesor +se-dynamic-emitter=Dynamický zářič +se-naquium-processor=Naquiuový procesor +se-naquium-cube=Naquiová kostka +se-naquium-tessaract=Naquiový teserakt +se-wide-beacon=Maják s dlouhým dosahem +se-wide-beacon-2=Maják s dlouhým dosahem 2 +se-lifesupport-equipment-1=Vybavení podpory života MK1 +se-lifesupport-equipment-2=Vybavení podpory života MK2 +se-lifesupport-equipment-3=Vybavení podpory života MK3 +se-lifesupport-equipment-4=Vybavení podpory života MK4 +se-naquium-heat-pipe=Naquiové tepelné potrubí +se-naquium-heat-pipe-horizontal=Horizontální naquiové tepelné potrubí +se-naquium-heat-pipe-vertical=Vertikální naquiové tepelné potrubí +se-naquium-heat-pipe-long=Dlouhé naquiové tepelné potrubí __1__ +se-deep-space-transport-belt=Transportní pás hlubokého vesmíru +se-deep-space-transport-belt-black=Černý transportní pás hlubokého vesmíru +se-deep-space-transport-belt-white=Bílý transportní pás hlubokého vesmíru +se-deep-space-transport-belt-red=Červený transportní pás hlubokého vesmíru +se-deep-space-transport-belt-yellow=Žlutý transportní pás hlubokého vesmíru +se-deep-space-transport-belt-green=Zelený transportní pás hlubokého vesmíru +se-deep-space-transport-belt-cyan=Tyrkysový transportní pás hlubokého vesmíru +se-deep-space-transport-belt-blue=Modrý transportní pás hlubokého vesmíru +se-deep-space-transport-belt-magenta=Růžový transportní pás hlubokého vesmíru +se-deep-space-underground-belt=Podzemní pás hlubokého vesmíru +se-deep-space-underground-belt-black=Černý podzemní pás hlubokého vesmíru +se-deep-space-underground-belt-white=Bílý podzemní pás hlubokého vesmíru +se-deep-space-underground-belt-red=Červený podzemní pás hlubokého vesmíru +se-deep-space-underground-belt-yellow=Žlutý podzemní pás hlubokého vesmíru +se-deep-space-underground-belt-green=Zelený podzemní pás hlubokého vesmíru +se-deep-space-underground-belt-cyan=Tyrkysový podzemní pás hlubokého vesmíru +se-deep-space-underground-belt-blue=Modrý podzemní pás hlubokého vesmíru +se-deep-space-underground-belt-magenta=Růžový podzemní pás hlubokého vesmíru +se-deep-space-splitter=Rozdělovač hlubokého vesmíru +se-deep-space-splitter-black=Černý rozdělovač hlubokého vesmíru +se-deep-space-splitter-white=Bílý rozdělovač hlubokého vesmíru +se-deep-space-splitter-red=Červený rozdělovač hlubokého vesmíru +se-deep-space-splitter-yellow=Žlutý rozdělovač hlubokého vesmíru +se-deep-space-splitter-green=Zelený rozdělovač hlubokého vesmíru +se-deep-space-splitter-cyan=Tyrkysový rozdělovač hlubokého vesmíru +se-deep-space-splitter-blue=Modrý rozdělovač hlubokého vesmíru +se-deep-space-splitter-magenta=Růžový rozdělovač hlubokého vesmíru +se-blueprint-registration-point=Blueprint Registration Point +se-arcosphere=Arkosféra +se-arcosphere-a=λ Arkosféra Lambda +se-arcosphere-b=ξ Arkosféra Ksí +se-arcosphere-c=ζ Arkosféra Zéta +se-arcosphere-d=θ Arkosféra Théta +se-arcosphere-e=ε Arkosféra Epsilon +se-arcosphere-f=φ Arkosféra Fí +se-arcosphere-g=γ Arkosféra Gama +se-arcosphere-h=ω Arkosféra Omega +se-arcosphere-collector=Sběrač arkosfér +se-star-probe=Hvězdná sonda +se-belt-probe=Sonda pásu asteroidů +se-void-probe=Mezihvězdná sonda +se-star-probe-data=Data hvězdné sondy +se-belt-probe-data=Data sondy pásu asteroidů +se-void-probe-data=Data mezihvězdné sondy +se-nano-engineering-data=Data nanoinženýrství +se-annihilation-data=Anihilační data +se-naquium-structural-data=Naquiová strukturální data +se-hyperlattice-data=Data hypermřížky +se-naquium-energy-data=Data energie naquia +se-space-fold-data=Data skládání prostoru +se-space-warp-data=Data zakřivování prostoru +se-space-dialation-data=Data dilatace prostoru +se-space-injection-data=Data injekce prostoru +se-interstellar-data=Data mezihvězdných cest +se-teleportation-data=Teleportační data +se-wormhole-data=Data červích děr +se-rhga-data=Data analýzy hypergrafu reality +se-deep-catalogue-1=Katalog hlubokého vesmíru +se-deep-catalogue-2=Obecný katalog hlubokého vesmíru +se-deep-catalogue-3=Rozsáhlý katalog hlubokého vesmíru +se-deep-catalogue-4=Rozšířený katalog hlubokého vesmíru +se-space-probe-rocket=Raketa vesmírné sondy +se-space-probe-rocket-deployed=Raketa vesmírné sondy (Vypuštěna) + +[item-description] +automation-science-pack=Používá se v základních laboratořích pro výzkum. +chemical-science-pack=Používá se v základních laboratořích pro výzkum. +logistic-science-pack=Používá se v základních laboratořích pro výzkum. +military-science-pack=Používá se v základních laboratořích pro výzkum. +production-science-pack=Používá se v základních laboratořích pro výzkum. +satellite=Satelit by měl být vložen do satelitního raketového sila. +se-antimatter-canister=Nejhustší forma energie v nádobě, která je bezpečná pro přenos. +se-astronomic-science-pack-1=Používá se ve vesmírných laboratořích pro výzkum. +se-astronomic-science-pack-2=Používá se ve vesmírných laboratořích pro výzkum. +se-astronomic-science-pack-3=Používá se ve vesmírných laboratořích pro výzkum. +se-astronomic-science-pack-4=Používá se ve vesmírných laboratořích pro výzkum. +se-beryllium-ore=Berylliová ruda +se-biological-science-pack-1=Používá se ve vesmírných laboratořích pro výzkum. +se-biological-science-pack-2=Používá se ve vesmírných laboratořích pro výzkum. +se-biological-science-pack-3=Používá se ve vesmírných laboratořích pro výzkum. +se-biological-science-pack-4=Používá se ve vesmírných laboratořích pro výzkum. +se-canister=Mnohoúčelová uzavíratelná nádoba +se-cargo-rocket-cargo-pod=Součást sekcí nákladní rakety. +se-cargo-rocket-fuel-tank=Součást sekcí nákladní rakety. +se-cargo-rocket-section=Klíčová součást nákladní rakety. Vložte do nákladního raketového sila. Pro stavbu rakety je nutno dodat 100 takových sekcí. Můžou být navráceny z přistání raket (v základu 20% šance). +se-cargo-rocket-section-packed=Sekce nákladní rakety sbalené pro převoz. Před použitím ke stavbě rakety musí být rozbaleny. +se-bloater-ammo=Tvoří infekční louži na zemi. Nakažení nepřátelé se nadýmají, což jim stěžuje pohyb, a zároveň je poškozuje. Pokud zemřou při nadýmání, vybuchnout, a jejich letící vnitřnosti poškodí nepřátele v blízkosti, a potenciálně tak spustí řetězovou reakci. Celkové poškození projektilů je 50% maximálních životů. +se-pheromone-ammo=Zmate kousače či plivače, kteří si poté budou myslet, že jste jejich přátelé, a jejich vlastní příbuzní nepřátelé. +se-cryogun=Tvoří ledovou zeď, která dokáže zmrazit nepřátele. +se-deep-space-science-pack=Používá se ve vesmírných laboratořích pro výzkum. +se-energy-science-pack-1=Používá se ve vesmírných laboratořích pro výzkum. +se-energy-science-pack-2=Používá se ve vesmírných laboratořích pro výzkum. +se-energy-science-pack-3=Používá se ve vesmírných laboratořích pro výzkum. +se-energy-science-pack-4=Používá se ve vesmírných laboratořích pro výzkum. +se-heat-shielding=Kombinovaný panel, aplikovatelný při vysokých teplotách a ve vesmírných strukturách. +se-holmium-ore=Holmiová ruda +se-iridium-ore=Iridiová ruda +se-material-science-pack-1=Používá se ve vesmírných laboratořích pro výzkum. +se-material-science-pack-2=Používá se ve vesmírných laboratořích pro výzkum. +se-material-science-pack-3=Používá se ve vesmírných laboratořích pro výzkum. +se-material-science-pack-4=Používá se ve vesmírných laboratořích pro výzkum. +se-medpack=Používá se k léčbě zranění. +se-medpack-2=Používá se k léčbě zranění. +se-medpack-3=Používá se k léčbě zranění. +se-medpack-4=Používá se k léčbě zranění. +se-meteor-defence=Může bránit celou planetu před meteory, ale střílet jen na jeden najednou. Vyžaduje proti-meteorovou munici a plné nabití. 80% přesnost. Potřebuje nabití po každém výstřelu. Při nabíjení spotřebovává 20MW. +se-meteor-defence-ammo=Ničí meteority. Musí být nabity do zařízení pro obranu před meteory. +se-meteor-point-defence=Brání oblast před meteory. Dokáže vystřelit až na 4 meteory najednou. Vyžaduje proti-meteorovou munici a plné nabití. Dosah 64, 50% přesnost, po výstřelu je nutná doba k nabití. +se-meteor-point-defence-container=Ničí meteority. Must be loaded into a meteor point defence structure. +se-naquium-ore=Naquiová ruda. Vyskytuje se pouze v hlubokém vesmíru, poklad mezihvězdné prázdnoty. +se-rocket-launch-pad-silo-dummy-ingredient-item=Vyrobena ze 100 sekcí nákladní rakety a 1 vesmírné kapsle v nákladním raketovém silu. +se-rtg-equipment=Radioizotopový termoelektrický generátor. Přenosný generátor, který konvertuje teplo z radioaktivního rozpadu na elektrickou energii. Vydrží funkční po desetiletí bez jakéhokoli dalšího paliva. +se-rtg-equipment-2=Radioizotopový termoelektrický generátor MK2. Vylepšený přenosný generátor, který konvertuje teplo z radioaktivního rozpadu na elektrickou energii. Vydrží funkční po desetiletí bez jakéhokoli dalšího paliva. +se-plague-bomb=Dokáže zničit všechen život na celé planetě. Užívejte s extrémní opatrností. (Může velmi snížit UPS, protože vše postupně umírá, nedoporučujeme pro velké planety či při hře více hráčů.) +se-space-capsule=Kontrolní kapsle vyžadována pro nákladní rakety. Může být využita k návratu pasažérů zpět na nejbližší planetární povrch. Nasedněte do kapsle pomocí __CONTROL__toggle-driving__. +se-space-platform-plating=[font=default-bold][color=#f5cb48]Omezení umístění: Vesmír[/color][/font]\nPokročilé plátování umožňuje rychlejší pohyb po vesmírné platformě. +se-space-platform-scaffold=[font=default-bold][color=#f5cb48]Omezení umístění: Vesmír[/color][/font]\nZákladní lešení vesmírné platformy, které vám dovolí umístit různé struktury ve vesmíru. +se-space-rail=Koleje, které jsou bezpečné pro použití ve vesmíru, protože zabraňují vlakům v odplutí a zničení všeho, co budujete. Mohou být také využity na zemi z estetických důvodů. +se-spaceship-floor=Tato podlaha musí být pod všemi částmi vesmírné lodi, a musí mít zdi vesmírné lodi na vnějším okraji. Jakékoli mezery v podlaze zničí uzavření, a tyto sekce by se mohly oddělit. +se-superconductive-cable=Kabel ze supravodivé směsi, který nevyžaduje aktivní chlazení. +se-tesla-gun=Rapid-fire chain-lightning. +se-thruster-suit=Skafandr nezbytný pro pobyt ve vesmíru. \nMá trysky a magnetické boty. +se-thruster-suit-2=Skafandr nezbytný pro pobyt ve vesmíru. \nMá silnější trysky, zvětšuje inventář, a má větší mřížku na vybavení. +se-thruster-suit-3=Skafandr nezbytný pro pobyt ve vesmíru. \nMá silnější trysky, zvětšuje inventář, a má větší mřížku na vybavení. +se-thruster-suit-4=Skafandr nezbytný pro pobyt ve vesmíru. \nMá silnější trysky, zvětšuje inventář, a má větší mřížku na vybavení. +space-science-pack=Používá se k vylepšení mnoha existujících předmětů. +se-rocket-science-pack=Používá se ve vesmírných laboratořích pro výzkum. Musí být vyrobeny ve vesmíru. +utility-science-pack=Používá se v základních laboratořích pro výzkum. +beacon=8 slotů na moduly. Přenáší účinky modulů blízkým přátelským entitám ve vzdálenosti 3. Více majáků ovlivňující stejnou entitu způsobí její přetížení a zastavení operování. +se-wide-beacon=15 slotů na moduly. Přenáší účinky modulů blízkým přátelským entitám ve vzdálenosti 14. Více majáků ovlivňující stejnou entitu způsobí její přetížení a zastavení operování. +se-wide-beacon-2=20 slotů na moduly. Přenáší účinky modulů blízkým přátelským entitám ve vzdálenosti 14. Více majáků ovlivňující stejnou entitu způsobí její přetížení a zastavení operování. +se-lifesupport-equipment-1=Zvyšuje účinnost podpory života o +100% (sčítatelné). Při instalaci v jiném brnění než ve skafandru je bonus poloviční, a nefunguje ve vesmíru. +se-lifesupport-equipment-2=Zvyšuje účinnost podpory života o +200% (sčítatelné). Při instalaci v jiném brnění než ve skafandru je bonus poloviční, a nefunguje ve vesmíru. +se-lifesupport-equipment-3=Zvyšuje účinnost podpory života o +400% (sčítatelné). Při instalaci v jiném brnění než ve skafandru je bonus poloviční, a nefunguje ve vesmíru. +se-lifesupport-equipment-4=Zvyšuje účinnost podpory života o +800% (sčítatelné). Při instalaci v jiném brnění než ve skafandru je bonus poloviční, a nefunguje ve vesmíru. +se-delivery-cannon=Umožňuje přesnou dodávku nákladu pomocí dodávkového děla. +se-arcosphere=Získána z výzkumu Arkosfér, sebrána pomocí Informatrona. +se-deep-catalogue-1=Naquium a nanoinženýrství. +se-deep-catalogue-2=Hypermřížkové struktury, singularity a anihalace. +se-deep-catalogue-3=Distorce mikroprostoru a extradimenzionální nanoinženýrství. +se-deep-catalogue-4=Distorce makroprostoru a extradimenzionální cestování. +se-arcosphere-collector=Sbírá arkosféry z mezihvězdné prázdnoty. Musí být vypuštěn z raketového sila vesmírné sondy, které se nalézá v poli asteroidů. Arkosféry se těžko hledají. +se-star-probe=Sbírá data o hvězdách a produkuje [img=item/se-star-probe-data] Data hvězdné sondy. Musí být vypuštěna z raketového sila vesmírné sondy, které se nalézá v blízkosti orbity hvězdy. +se-belt-probe=Sbírá data o pásech asteroidů a produkuje [img=item/se-belt-probe-data] Data sondy pásů asteroidů. Musí být vypuštěna z raketového sila vesmírné sondy, které se nalézá v pásu asteroidů. +se-void-probe=Sbírá data o mezihvězdné prázdnotě a produkuje [img=item/se-void-probe-data] Data mezihvězdné sondy. Musí být vypuštěna z raketového sila vesmírné sondy, které se nalézá v poli asteroidů. +se-delivery-cannon-weapon=Umožňuje přesnou dodávku speciální munice pomocí tzv. zbraňového dodávkového děla. + +[recipe-name] +se-distortion-drive=Distorční pohon +core-fragment=Zpracování fragmentů jádra (__1__) +rocket-fuel=Pevné raketové palivo +se-astrometric-analysis-multispectral-1=Multispektrální astrometrická analýza 1 +se-astrometric-analysis-multispectral-2=Multispektrální astrometrická analýza 2 +se-astrometric-analysis-multispectral-3=Multispektrální astrometrická analýza 3 +se-astronomic-insight-1=Astronomické pochopení +se-astronomic-insight-2=Obecné astronomické pochopení +se-astronomic-insight-3=Rozsáhlé astronomické pochopení +se-astronomic-insight-4=Rozšířené astronomické pochopení +se-biological-insight-1=Biologické pochopení +se-biological-insight-2=Obecné biologické pochopení +se-biological-insight-3=Rozsáhlé biologické pochopení +se-biological-insight-4=Rozšířené biologické pochopení +se-bio-methane-to-crude-oil=Biozpracování methanu na surovou ropu +se-bio-sludge-crude-oil=Biobahno z experimentální biomasy +se-bio-sludge-decontamination=Dekontaminace biobahna +se-bio-sludge-from-fish=Biobahno z ryb +se-bio-sludge-from-wood=Biobahno ze dřeva +se-bio-sludge-from-vitamelange=Biobahno z vitamelanže +se-bio-sludge=Biobahno z biomasy +se-broken-data-scrapping=Šrotování zničené datové karty +se-cargo-rocket-section-pack=Balení sekcí nákladní rakety +se-cargo-rocket-section-unpack=Rozbalování sekcí nákladní rakety +se-condenser-turbine-reclaim-water=Výroba energie s návratem vody +se-core-fragment-omni=Zpracování fragmentů jádra +se-core-mining=Těžba jádra +se-empty-antimatter-canister=Proud antihmoty z nádoby +se-empty-barrel-scrapping=Šrotování prázdného barelu +se-empty-barrel-reprocessing=Recyklace prázdného barelu +se-space-capsule-scrapping=Šrotování vesmírné kapsle +se-cargo-pod-scrapping=Šrotování nákladního kontejneru +se-energy-insight-1=Energetické pochopení +se-energy-insight-2=Obecné energetické pochopení +se-energy-insight-3=Rozsáhlé energetické pochopení +se-energy-insight-4=Rozšířené energetické pochopení +se-formatting-1=Formátování dat +se-formatting-2=Efektivní formátování dat +se-formatting-3=Pokročilé formátování dat +se-formatting-4=Hluboké formátování dat +se-material-insight-1=Materiální pochopení +se-material-insight-2=Obecné materiální pochopení +se-material-insight-3=Rozsáhlé materiální pochopení +se-material-insight-4=Rozšířené materiální pochopení +se-matter-fusion-copper=Fúze hmoty (Měď) +se-matter-fusion-dirty=Fúze hmoty (Šrot) +se-matter-fusion-iron=Fúze hmoty (Železo) +se-matter-fusion-stone=Fúze hmoty (Kámen) +se-matter-fusion-uranium=Fúze hmoty (Uran) +se-matter-fusion-to=Fúze hmoty (__1__) +se-orbital-data=Data orbitálních výpočtů +se-plasma-canister-empty=Prázdná nádoba na plasmu +se-pulverised-sand=Rozemletý písek +se-radiating-space-coolant-fast=Rychlé chlazení termotekutiny na -10°C +se-radiating-space-coolant-normal=Chlazení termotekutiny na -10°C +se-radiating-space-coolant-slow=Efektivní chlazení termotekutiny na -10°C +se-mixed-methane-gas-separation=Separace směsi methanu +se-rocket-fuel-from-water-copper=Raketové palivo z vody +se-scrap-decontamination=Dekontaminace šrotu +se-scrap-recycling=Recyklace šrotu +se-space-coolant-cold=Chlazení termotekutiny na -100°C +se-space-coolant-supercooled=Superchlazení termotekutiny na -273°C +se-space-coolant-supercooled-cryonite=Krychlazení termotekutiny na -273°C +se-space-coolant-cold-cryonite=Kryochlazení termotekutiny na -100°C +se-space-coolant-supercoole-cryonite=Kryochlazení termotekutiny na -273°C +se-simulation-a=Astronomická simulace +se-simulation-ab=Panspermická simulace +se-simulation-abm=Xenoprogression Simulation +se-simulation-am=Matter Distribution Simulation +se-simulation-as=Astroparticle Simulation +se-simulation-asb=Astrobionic Simulation +se-simulation-asbm=Univerzální simulace +se-simulation-asm=Astrofyzikální simulace +se-simulation-b=Biologická simulace +se-simulation-bm=Biomechanická simulace +se-simulation-m=Materiální simulace +se-simulation-s=Energetická simulace +se-simulation-sb=Biochemická simulace +se-simulation-sbm=Nanitová simulace +se-simulation-sm=Nanomateriálová simulace +se-space-water-decontamination=Dekontaminace kosmické vody +se-spaceship-rocket-engine-burn=Spaluje kapalné raketové palivo +se-specimen-fish=Mikrogravitační chov ryb +se-specimen-wood=Mikrogravitační růst dřeva +se-thermodynamics-coal=Pressure cooking to coal +se-used-lifesupport-canister-cleaning=Čištění nádoby podpory života +se-used-lifesupport-canister-cleaning-space=Dekontaminace nádoby podpory života +space-science-pack=Optimalizační vědecký balíček +se-rocket-science-pack=Raketový vědecký balíček +se-big-turbine-internal=Dekomprese vysokoteplotní páry +se-arcosphere-fracture=Polarizace arkosféry +se-arcosphere-fold-in=Inverze arkosféry +se-arcosphere-fold-out=Inverze arkosféry +se-arcosphere-folding=Skládání arkosféry: __1__ __2__ do __3__ __4__ +se-electric-boiling-void=Evaporation venting +se-space-probe-rocket-deployed=Raketa vesmírné sondy (Vypuštěna) + +[recipe-description] +se-astronomic-insight-2=Komplikovanější, ale surovinově efektivnější. +se-astronomic-insight-3=Komplikovanější, ale surovinově efektivnější. +se-astronomic-insight-4=Komplikovanější, ale surovinově efektivnější. +se-biological-insight-2=Komplikovanější, ale surovinově efektivnější. +se-biological-insight-3=Komplikovanější, ale surovinově efektivnější. +se-biological-insight-4=Komplikovanější, ale surovinově efektivnější. +se-core-mining=Skutečný produkovaný fragment závisí na planetě. Výrobní čas závisí na počtu vrtáků na planetě či měsíci. +se-energy-insight-2=Komplikovanější, ale surovinově efektivnější. +se-energy-insight-3=Komplikovanější, ale surovinově efektivnější. +se-energy-insight-4=Komplikovanější, ale surovinově efektivnější. +se-material-insight-2=Komplikovanější, ale surovinově efektivnější. +se-material-insight-3=Komplikovanější, ale surovinově efektivní. +se-material-insight-4=Komplikovanější, ale surovinově efektivnější. +se-radiating-space-coolant-normal=Opakované chlazení a oteplování termotekutiny způsobuje její degradaci. +se-radiating-space-coolant-slow=Opakované chlazení a oteplování termotekutiny způsobuje její degradaci, pomalejší chlazení vyústí ve zmenšení ztrát. +se-radiating-space-coolant-fast=Opakované chlazení a oteplování termotekutiny způsobuje její degradaci, rychlejší chlazení vyústí ve zvětšení ztrát. +se-arcosphere-fracture=Arkosféry mohou být sbírány pomocí [img=item/se-arcosphere-collector] Sběrače arkosfér +se-delivery-cannon-weapon-pack-se-iridium-piledriver=Neuvěřitelné fyzické poškození v malé oblasti, sekundární výbušné poškození v důsledku tlakové vlny. +se-distortion-drive=Tento proces musí běžet, aby byl Nexus schopen využít schopnosti distorce a vyhrát tak hru. Spotřebovává 8GW energie při kritické rychlosti. + +[technology-name] +effectivity-module-4=Modul efektivity 4 +effectivity-module-5=Modul efektivity 5 +effectivity-module-6=Modul efektivity 6 +effectivity-module-7=Modul efektivity 7 +effectivity-module-8=Modul efektivity 8 +effectivity-module-9=Modul efektivity 9 +energy-shield-equipment=Energetický štít +energy-shield-mk2-equipment=Energetický štít MK2 +energy-shield-mk3-equipment=Energetický štít MK3 +energy-shield-mk4-equipment=Energetický štít MK4 +energy-shield-mk5-equipment=Energetický štít MK5 +energy-shield-mk6-equipment=Energetický štít MK6 +sand-processing=Zpracování písku +glass-processing=Zpracování skla +liquid-rocket-fuel=Kapalné raketové palivo +productivity-module-4=Modul produktivity 4 +productivity-module-5=Modul produktivity 5 +productivity-module-6=Modul produktivity 6 +productivity-module-7=Modul produktivity 7 +productivity-module-8=Modul produktivity 8 +productivity-module-9=Modul produktivity 9 +rocket-silo=Satelitní raketové silo +rocketry=Bojové rakety +se-adaptive-armour=Adaptivní brnění +se-antimatter-engine=Antihmotový motor +se-antimatter-reactor=Antihmotový reaktor +se-antimatter-production=Produkce antihmoty +se-astronomic-science-pack=Astronomický vědecký balíček +se-biological-science-pack=Biologický vědecký balíček +se-condenser-turbine=Kondenzátorová turbína +se-core-miner=Těžba jádra +se-biogun=Biologická puška +se-cryogun=Kryopuška +se-deep-space-science-pack=Vědecký balíček hlubokého vesmíru +se-deep-catalogue=Katalog hlubokého vesmíru +se-dimensional-anchor=Dimenzionální kotva +se-electric-boiler=Elektrický bojler +se-energy-science-pack=Energetický vědecký balíček +se-fluid-burner-generator=Kapalinový izotermní generátor +se-fuel-refining=Rafinérie paliv +se-heat-shielding=Tepelné stínění +se-long-range-star-mapping=Hvězdné mapování na dlouhou vzdálenost +se-material-science-pack=Materiální vědecký balíček +se-medpack=Lékárnička +se-medpack-2=Lékárnička 2 +se-medpack-3=Lékárnička 3 +se-medpack-4=Lékárnička 4 +se-meteor-defence=Zařízení obrany proti meteorům +se-meteor-point-defence=Bodové dělo proti meteorům +se-nanomaterial=Nanomateriál +se-plague=Mor +se-processing-beryllium=Zpracování beryllia +se-processing-cryonite=Zpracování kryonitu +se-processing-holmium=Zpracování holmia +se-processing-iridium=Zpracování iridia +se-processing-naquium=Zpracování naquia +se-processing-vitamelange=Zpracování vitamelanže +se-processing-vulcanite=Zpracování vulkanitu +se-pulveriser=Drtička +se-railgun=Elektromagnetická puška +se-rocket-cargo-safety=Bezpečnost nákladu rakety +se-rocket-fuel-from-water=Raketové palivo z vody +se-rocket-launch-pad=Nákladní raketové silo +se-rocket-landing-pad=Raketová přistávací plocha +se-rocket-reusability=Znovupoužití raket +se-rocket-survivability=Bezpečnost raket +se-rtg-equipment=Přenosný RTG +se-rtg-equipment-2=Přenosný RTG MK2 +se-space-assembling=Vesmírná montovna +se-space-accumulator=Vesmírný akumulátor +se-space-accumulator-2=Vesmírný akumulátor 2 +se-space-astrometrics-laboratory=Astrometrická laboratoř +se-space-biochemical-laboratory=Biochemická laboratoř +se-space-catalogue-astronomic=Astronomický katalog +se-space-catalogue-biological=Biologický katalog +se-space-catalogue-universal=Univerzální katalog +se-space-catalogue-energy=Energetický katalog +se-space-catalogue-material=Materiální katalog +se-space-data-card=Datová karta +se-space-decontamination-facility=Dekontaminační zařízení +se-space-electromagnetics-laboratory=Elektromagnetická laboratoř +se-space-genetics-laboratory=Genetická laboratoř +se-space-gravimetrics-laboratory=Gravimetrická laboratoř +se-space-growth-facility=Růstová laboratoř +se-space-hypercooling=Hyperchlazení +se-space-laser-laboratory=Laserová laboratoř +se-lifesupport-facility=Zařízení podpory života +se-space-manufactory=Vesmírná manufaktura +se-space-material-fabricator=Materiálový fabrikátor +se-space-matter-fusion=Fúze hmoty +se-space-mechanical-laboratory=Mechanická laboratoř +se-space-particle-accelerator=Urychlovač částic +se-space-particle-collider=Srážeč částic +se-space-plasma-generator=Generátor plazmy +se-space-platform-plating=Plátování vesmírné platformy +se-space-platform-scaffold=Základ vesmírné platformy +se-space-radiation-laboratory=Radiační laboratoř +se-space-radiating-efficiency=Efektivita termálního vyzařování +se-space-radiating-speed=Rychlost termálního vyzařování +se-space-radiator=Termální radiátor +se-space-radiator-2=Termální radiátor 2 +se-space-rail=Vesmírné koleje +se-recycling-facility=Recyklační zařízení +se-space-science-lab=Vesmírná vědecká laboratoř +se-space-simulation-ab=Panspermická simulace +se-space-simulation-am=Astromateriální simulace +se-space-simulation-as=Astročásticová simulace +se-space-simulation-bm=Biomechanická simulace +se-space-simulation-sb=Biochemická simulace +se-space-simulation-sm=Nanomateriálová simulace +se-space-simulation-abm=Simulace xenoprogrese +se-space-simulation-asb=Astrobionická simulace +se-space-simulation-asm=Astrofyzikální simulace +se-space-simulation-sbm=Nanitová simulace +se-space-simulation-asbm=Univerzální simulace +se-space-solar-panel=Plochý solární panel +se-space-spectrometry-facility=Spektrometrické zařízení +se-space-supercomputer=Superpočítač +se-space-telescope=Teleskop +se-space-telescope-gammaray=Gammateleskop +se-space-telescope-xray=Rentgenový teleskop +se-space-telescope-microwave=Mikrovlnný teleskop +se-space-telescope-radio=Radioteleskop +se-space-thermodynamics-laboratory=Termodynamická laboratoř +se-spaceship=Vesmírná loď +se-spaceship-integrity=Strukturální integrita vesmírné lodi +se-factory-spaceship=Tovární vesmírná loď +se-superconductive-cable=Supravodivý kabel +se-teleportation=Teleportace +se-tesla-gun=Teslova puška +se-thruster-suit=Skafandr +space-science-pack=Optimalizační vědecký balíček +se-rocket-science-pack=Raketový vědecký balíček +speed-module-4=Modul rychlosti 4 +speed-module-5=Modul rychlosti 5 +speed-module-6=Modul rychlosti 6 +speed-module-7=Modul rychlosti 7 +speed-module-8=Modul rychlosti 8 +speed-module-9=Modul rychlosti 9 +se-aeroframe-pole=Nosníková tyč +se-aeroframe-scaffold=Nosníkové lešení +se-aeroframe-bulkhead=Nosníková přepážka +se-lattice-pressure-vessel=Tlaková komora +se-heavy-girder=Těžký nosník +se-heavy-bearing=Těžké ložisko +se-heavy-composite=Těžký kompozit +se-heavy-assembly=Těžký mechanismus +se-bioscrubber=Biologická komora +se-vitalic-epoxy=Vitální pryskyřice +se-vitalic-reagent=Vitální reagent +se-vitalic-acid=Vitální kyselina +se-self-sealing-gel=Samo-záplatový gel +se-holmium-cable=Holmiový kabel +se-holmium-solenoid=Holmiový solenoid +se-quantum-processor=Kvantový procesor +se-dynamic-emitter=Dynamický zářič +se-naquium-processor=Naquióvý procesor +se-naquium-cube=Naquiová kostka +se-naquium-tessaract=Naquiový teserakt +se-wide-beacon=Maják s dlouhým dosahem +se-wide-beacon-2=Maják s dlouhým dosahem 2 +se-lifesupport-equipment=Vybavení podpory života +se-lifesupport-equipment-1=Vybavení podpory života MK1 +se-lifesupport-equipment-2=Vybavení podpory života MK2 +se-lifesupport-equipment-3=Vybavení podpory života MK3 +se-lifesupport-equipment-4=Vybavení podpory života MK4 +se-supercharger=Supercharger +se-addon-power-pole=Addon power pole +se-pylon=Pylon +se-pylon-substation=Pylonová rozvodna +se-pylon-construction=Konstrukční pylon +se-pylon-construction-radar=Radarový pylon +se-shield-projector=Shield Projector +se-deep-space-transport-belt=Transportní pásy hlubokého vesmíru +se-big-turbine=Vysokoteplotní turbínový generátor +se-big-heat-exchanger=Vysokoteplotní tepelný výměník +se-zone-discovery-random=Objev zóny +se-zone-discovery-targeted=Zaměřený objev zóny +se-zone-discovery-deep=Objev zóny v hlubokém vesmíru +se-delivery-cannon=Dodávkové dělo +se-spaceship-clamp=Dokovací svorky vesmírné lodi +se-bio-upgrade-constitution=Bio-upgrade: Konstituce +se-bio-upgrade-strength=Bio-upgrade: Síla +se-bio-upgrade-agility=Bio-upgrade: Hbitost +se-bio-upgrade-dexterity=Bio-upgrade: Zručnost +se-bio-upgrade-intelligence=Bio-upgrade: Inteligence +se-nexus=Nexus +se-spaceship-victory=Vesmírné vítězství +se-arcosphere=Sběr arkosfér +se-arcosphere-folding=Skládání arkosfér +se-space-probe=Raketové silo vesmírné sondy +se-delivery-cannon-weapon=Zbraňové dodávkové dělo +se-energy-beaming=Energetické paprsky +se-energy-beam-defence=Deštník: zařízení obrany proti energetickým paprskům + +[technology-description] +energy-shield-equipment=Ochranná bublina s velkou rychlostí nabíjení, ale velkou spotřebou energie. +energy-shield-mk2-equipment=Ochranná bublina s velkou rychlostí nabíjení, ale velkou spotřebou energie. +energy-shield-mk3-equipment=Ochranná bublina s velkou rychlostí nabíjení, ale velkou spotřebou energie. +energy-shield-mk4-equipment=Ochranná bublina s velkou rychlostí nabíjení, ale velkou spotřebou energie. +energy-shield-mk5-equipment=Ochranná bublina s velkou rychlostí nabíjení, ale velkou spotřebou energie. +energy-shield-mk6-equipment=Ochranná bublina s velkou rychlostí nabíjení, ale velkou spotřebou energie. +sand-processing=Drcení, mletí, a filtrace surových materiálů na čistý písek. +glass-processing=Tavení písku na sklo. +rocket-silo=Umožňuje vám vyslat satelit na orbitu a odhalit tak nové planety. +se-adaptive-armour=Brnění, které využívá energie k samoopravě. Plní podobnou úlohu jako energetické štíty s nižšími energetickými nároky, ale s mnohem pomalejší regenerací. +se-antimatter-engine=Anihilace antihmoty k produkci neuvěřitelnému tahu. +se-antimatter-reactor=Anihiluje antihmotu hmotou za vývinu extrémního množství tepla. +se-antimatter-production=Produkce antihmoty, nejhustší formy energie. +se-astronomic-science-pack=Umožňuje výzkum technologií souvisejících s cestováním vesmírem a mezihvězdnou logistikou. +se-biological-science-pack=Umožňuje výzkum technologií souvisejících s vašimi fyzickými možnostmi, biologickými zbraněmi, a neurálními výpočty. +se-condenser-turbine=Účinná jen na 75% oproti klasické parní turbíně, ale 99% využité páry je navráceno v podobě vody. +se-core-miner=Umožňuje nekonečnou extrakci surovin z planet a měsíců, ale při použití více zařízení na stejném tělese má snižující se výnosy. +se-biogun=Puška, která využívá různé druhy biologické munice. +se-cryogun=Tvoří ledovou zeď, která dokáže zmrazit nepřátele. +se-deep-catalogue=Distorce prostoru, exotická hmota a data nanoinženýrství strukturovaná pro analýtu a počítačovou simulaci. Vyžadováno pro nejpokročilejší technologie. +se-deep-space-science-pack=Vyžadováno pro nejpokročilejší technologie +se-dimensional-anchor=Využívá gravitačního vlivu hvězdy jako stabilizačního bodu pro prostorovou anomálii. +se-electric-boiler=Produkuje páru z vody pomocí elektrické energie. Má účinnost 90%. +se-energy-science-pack=Umožňuje výzkum technologií souvisejících s fundamentálními silami a subatomárními objevy. +se-fluid-burner-generator=Vyžaduje kapalné palivo s energetickou hodnotou (například kapalné raketové palivo) k produkci elektřiny. Jednoduchý a kompaktní způsob, ale chybí mu efektivita větších, na turbínách založených systémů. Navrženo pro použití ve vesmíru. Spotřeba paliva závisí na energetické hodnotě kapalného paliva. +se-fuel-refining=Rafinace pokročilejších paliv. +se-heat-shielding=Kombinovaný panel, aplikovatelný při vysokých teplotách a ve vesmírných strukturách. +se-long-range-star-mapping=Některé vzdálené galaxie mohou být identifikovány díky specifickým tvarům neobvyklých hvězd. Výsledky jsou zaznamenávány do Informatrona [__CONTROL__informatron__]. +se-material-science-pack=Umožňuje výzkum technologií souvisejících s pokročilými materiály pro pokročilejší technické požadavky. +se-medpack=Používá se k léčbě zranění. +se-medpack-2=Používá se k léčbě zranění. +se-medpack-3=Používá se k léčbě zranění. +se-medpack-4=Používá se k léčbě zranění. +se-meteor-defence=Sestřelte meteory z nebes než vám zničí vaše věci. Zařízení pro obranu před meteory dokáže ubránit celou planetu, ale střílet jen na jeden meteor najednou. +se-meteor-point-defence=Sestřelte meteory z nebes než vám zničí vaše věci. Meteor point defence can protect a small area from up to 4 meteors at a time. +se-nanomaterial=Složité uspořádání různých materiálů organizované v nano měřítku, tvořící kompozit s neuvěřitelnými vlastnostmi. +se-railgun=Elektromagneticky akcelerované šipky letí takovou rychlostí, že než se vypaří, zanechají za sebou plasmu. Vysoké poškození, nízká rychlost palby. +se-plague=Mor, který vyhladil veškerý život z nespočtu planet. Užívejte s extrémní opatrností. +se-processing-beryllium=Zpracování berylu na berillium, extrémně lehký, silný, korozi i radiaci odolávající kov. S rentgenovým zářením nevykazuje téměř žádnou interakci. +se-processing-cryonite=Zpracování zmrzlých krystalů kryonitu na kryonitové tyče, které nacházejí uplatnění ve zmrazování, chlazení a lubrikaci. Kryonit se nachází především na zmrzlých planetách. +se-processing-holmium=Zpracování holminitu na holmium, vzácný kov s nejvyšší magnetickou permeabilitou ze všech prvků. +se-processing-iridium=Zpracování iriditu na iridium, korozi nejodolnější a nejhustší materiál ze všech prvků. Použitelné při extrémní zátěži. +se-processing-naquium=Zpracování tajemných naquititových krystalů z hlubokého vesmíru na naquium, materiál podobný kovům s neobvyklými interakcemi s časoprostorem. +se-processing-vitamelange=Zpracování primitivní vitamelanžové houby na cenný výživný extrakt. +se-processing-vulcanite=Zpracování vulkanitových krystalů na rafinovaný prášek využitelný v tavení, výrobě raketového paliva, a dalších chemických procesech za vysokých teplot. Vulkanit se nachází především na vulkanických planetách, a je obsažen ve většině fragmentů jader. +se-pulveriser=Drtí a mele tvrdší nerosty a fragmenty planetárních jader. +se-rocket-cargo-safety=Snižuje šanci na poškození nákladních kontejnerů o 10% (multiplikativní). +se-rocket-fuel-from-water=Generuje raketové palivo na bázi vodík-kyslík pomocí elektrolýzy. +se-rocket-landing-pad=Umožní vám doručovat náklad na pojmenovanou přistávací plochu. S postupným výzkumem může také umožnit opětovné navrácení částí rakety. +se-rocket-launch-pad=Umožňuje vám zasílat náklad do vesmíru či na jiné planety. +se-rocket-reusability=Zvyšuje počet částí rakety, které jsou navráceny z úspěšného přistání na přistávací ploše o 4% (Základ je 20%, maximální hodnota je 100%). +se-rocket-survivability=Snižuje pravděpodobnost poškození rakety při cestě a taktéž snižuje pravděpodobnost navigačního selhání, které by mohlo vyústit v minutí přistávací plochy, o 10% (multiplikativní). +se-rtg-equipment=Radioizotopový termoelektrický generátor. Přenosný generátor, který konvertuje teplo z radioaktivního rozpadu na elektrickou energii. Vydrží funkční po desetiletí bez jakéhokoli dalšího paliva. +se-rtg-equipment-2=Radioizotopový termoelektrický generátor MK2. Vylepšený přenosný generátor, který konvertuje teplo z radioaktivního rozpadu na elektrickou energii. Vydrží funkční po desetiletí bez jakéhokoli dalšího paliva. +se-space-assembling=Modifikovaná montovna, která dokáže operovat ve vesmíru. +se-space-astrometrics-laboratory=Kombinuje, porovnává, a vyčísluje různé zdroje astronomických informací. +se-space-biochemical-laboratory=Pokročilá chemická laboratoř specializovaná na biochemii. Dokáže také provádět základní chemické procesy a zpracování ropy. +se-space-catalogue-astronomic=Astronomická data strukturovaná pro analýzu a počítačovou simulaci. Vyžadováno pro další astronomický výzkum. +se-space-catalogue-biological=Biologická data strukturovaná pro analýzu a počítačovou simulaci. Vyžadováno pro další biologický výzkum. +se-space-catalogue-universal=Kombinovaná data pro analýzu a počítačovou simulaci. Vyžadováno pro další výzkum hlubokého vesmíru. +se-space-catalogue-energy=Energetická data strukturovaná pro analýzu a počítačovou simulaci. Vyžadováno pro další energetický výzkum. +se-space-catalogue-material=Materiální data strukturovaná pro analýzu a počítačovou simulaci. Vyžadováno pro další materiální výzkum. +se-space-data-card=Víceúčelové datové úložiště. Vyžadováno pro další na datech závislý výzkum. +se-space-decontamination-facility=Čistí substance pro použití ve sterilním prostředí, a připravuje kapaliny pro použití v prostředí s nízkým tlakem. +se-space-electromagnetics-laboratory=Zařízení pro aplikaci intenzivních magnetických polí a extrémně vysokých napětích. +se-space-genetics-laboratory=Laboratoř, která se věnuje genetickému sekvencování, modifikaci, a pěstění kultur. +se-space-gravimetrics-laboratory=Analyzuje a simuluje gravitační vlivy. +se-space-growth-facility=Pěstuje biologické vzorky pod širokou škálou kontrolovaných podmínek, které jsou kdekoli jinde nemožné, například pod vlivem mikrogravitace. +se-space-hypercooling=Provádí výměnu tepla na termokapalině, čímž jednu otepluje a druhou ochlazuje. +se-space-laser-laboratory=Experimentuje s lasery. Musí být chráněny oči. +se-lifesupport-facility=Udržování života v nepřátelském prostředí. +se-space-manufactory=Klíčová technologie pro masovou výrobu ve vesmíru. +se-space-material-fabricator=Syntetizuje nové materiály. Kříženec mezi srážečem částic a 3D tiskárnou. +se-space-matter-fusion=Výroba materiálů pomocí fúze. +se-space-mechanical-laboratory=Poskytuje provedení široké škály mechanických procesů: Drcení, trhání, střihání, vibrace, apod. +se-space-particle-accelerator=Urychluje částice na téměř rychlost světla. +se-space-particle-collider=Sráží vysoko-rychlostní částice a analyzuje výsledky srážky. +se-space-plasma-generator=Generuje řadu druhů plazmy. +se-space-platform-plating=Robustní plátování vesmírné platformy. Hladké, umožňující rychlou chůzi. +se-space-platform-scaffold=Základy vesmírné platformy. Dá se na nich stavět, ale na chůzi nejsou to pravé ořechové. +se-space-radiation-laboratory=Relativně bezpečné místo na hraní s radioaktivním materiálem. Lze využít ke zpracování uranu. +se-space-radiator=Vyzařuje přebytečné teplo z přehřáté termokapaliny. +se-space-radiator-2=Vyzařuje přebytečné teplo z přehřáté termokapaliny. +se-space-radiating=Pomalejší, ale surovinově efektivnější chlazení přehřáté termotekutiny. +se-space-rail=Koleje, které jsou bezpečné pro použití ve vesmíru, protože zabraňují vlakům v odplutí a zničení všeho, co budujete. Mohou být také využity na zemi z estetických důvodů. +se-recycling-facility=Šrotuje předměty a zpracovává šrot na surové materiály. +se-space-science-lab=Umožňuje použití raketových vědeckých balíčků a provádění dalšího pokročilého vesmírného výzkumu. +se-space-simulation-ab=Efektivnější simulace díky kombinaci různých disciplín. +se-space-simulation-am=Efektivnější simulace díky kombinaci různých disciplín. +se-space-simulation-as=Efektivnější simulace díky kombinaci různých disciplín. +se-space-simulation-bm=Efektivnější simulace díky kombinaci různých disciplín. +se-space-simulation-sb=Efektivnější simulace díky kombinaci různých disciplín. +se-space-simulation-sm=Efektivnější simulace díky kombinaci různých disciplín. +se-space-simulation-abm=Efektivnější simulace díky kombinaci různých disciplín. +se-space-simulation-asb=Efektivnější simulace díky kombinaci různých disciplín. +se-space-simulation-asm=Efektivnější simulace díky kombinaci různých disciplín. +se-space-simulation-sbm=Efektivnější simulace díky kombinaci různých disciplín. +se-space-simulation-asbm=Efektivnější simulace díky kombinaci různých disciplín. +se-space-solar-panel=Vysoce efektivní solární panel, po kterém můžete chodit. +se-space-spectrometry-facility=Spektrofotometrie, plynová chromatografie, hmotnostní spektrometrie, a další druhy spektrografie. Fire stuff at a wall, make it bend, see where it hits. +se-space-supercomputer=Umožňuje pokročilejší manipulaci s daty, jejich zpracovávání, a simulace. +se-space-telescope=Sofistikovaný teleskop, citlivý na různé vlnové délky kolem viditelného spektra. +se-space-telescope-gammaray=Gamma paprsky se nelámou. Tento výkonný teleskop místo toho využívá zrcadla a speciální detektory. +se-space-telescope-xray=Rentgenové paprsky jsou blokovány většinou atmosfér. Tento výkonný teleskop byl navržen pro použití ve vesmíru, kde atmosféra nepředstavuje problém. +se-space-telescope-microwave=Obrovský teleskop, schopný detekovat mikrovlny a kosmické mikrovlnné pozadí. +se-space-telescope-radio=Obrovský teleskop, schopný detekovat velmi slabé radiovlny ze vzdálených zdrojů. +se-space-thermodynamics-laboratory=Provádí procesy, které zahrnují extrémní teploty. Dokáže také provádět základní termální procesy, jako například tavení rud. +se-spaceship=Plavidlo, které si sami kousek po kousku postavíte i s podlahou a zdmi, a poté použijete ovládací panel k cestě na jinou planetu a ještě dál. +se-spaceship-integrity=Každá úroveň zvyšuje limit strukturálního stresu na integritu vesmírné lodi o 100. +se-factory-spaceship=Každá úroveň zvyšuje limit strukturálního stresu na integritu vesmírné lodi o 500. +se-superconductive-cable=Kabel ze supravodivé směsi, který nevyžaduje aktivní chlazení. +se-teleportation=Odemyká teleportační technologii. Ukazuje se, že bezpečně deformovat časoprostor v takovém rozsahu je velmi těžké. +se-tesla-gun=Řetězové výboje s vysokou rychlostí palby. Dokáže zasáhnout až 30 nepřátel na jeden výboj. Výboje přeskakují daleko na nepřátele, či na krátkou vzdálenost po zemi, pokud kolem nejsou žádné cíle. +se-thruster-suit=Skafandr s tryskami a magnetickými botami. Bez něj do vesmíru nechoďte. +se-thruster-suit-2=Vylepšený skafandr se silnějšími tryskami, větším inventářem, a větší mřížkou na vybavení. +se-thruster-suit-3=Vylepšený skafandr se silnějšími tryskami, větším inventářem, a větší mřížkou na vybavení. +se-thruster-suit-4=Vylepšený skafandr se silnějšími tryskami, větším inventářem, a větší mřížkou na vybavení. +space-science-pack=Umožňuje přímou výrobu raketových vědeckých balíčků a vývoj technologií které z tohoto výzkumu těží. +se-aeroframe-pole=Silná, ale lehká berylliová tyč, která se obyčejně používá jako podpůrný nosník pro letecký a vesmírný průzkum. +se-aeroframe-scaffold=Silný, ale lehký berylliový strukturální rám, který se obyčejně používá jako hlavní vnitřní kostra pro letecká a vesmírná plavidla. +se-aeroframe-bulkhead=Silná, ale lehká vzduchotěsná berylliová stěna, která se používá jako vnější či primární zdivo v leteckých a vesmírných plavidlech. +se-lattice-pressure-vessel=Silná, ale lehká berylliová tlaková nádrž, která dokáže některé kapaliny stlačit za hranici normálních mezí. Je-li tlaková nádrž roztržena, natlakovaná kapalina je bezpečně odvětrána. +se-heavy-girder=Těžký iridiový strukturální nosník, který se používá v těžkém průmyslu a ve vojenských plavidlech. +se-heavy-bearing=Velké těžké iridiové ložisko, které může fungovat nezávisle na působících silách, které by jiné materiály zničily. +se-heavy-composite=Tlustý, téměř neproniknutelný materiál, prakticky imunní proti teplu, korozi, radiaci a mechanickým vlivům, ale je neuvěřitelně těžký. +se-heavy-assembly=Těžký mechanismus složen z koleček a konfigurovatelných komponentů, který se používá v těžkém průmyslu. +se-bioscrubber=Komora, která využívá biologických procesů k rozkladu nežádoucích materiálů. +se-vitalic-epoxy=Neuvěřitelně silná pryskyřice s regenerativními vlastnostmi. +se-vitalic-reagent=Efektivní víceúčelové činidlo použitelné v široké škále chemických reakcí. +se-vitalic-acid=Koncentrovaný koktejl různých kyseliny. +se-self-sealing-gel=Pod tlakem viskózní gel, ale při vystavení vakuu se stává tvrdým jako ocel. Často se používá jako film v přepážkách k pasivnímu těsnění potenciálních děr. +se-holmium-cable=Opláštěný kabel specificky navržen k eliminaci nechtěného hluku tam, kde by mohl interferovat s citlivou elektronikou. +se-holmium-solenoid=Extrémně silný elektromagnet. +se-quantum-processor=Vužívá superpozic a kvantových provázání k efektivnějším výpočtům velmi složitých problémů. +se-dynamic-emitter=Rychle upravitelný přístroj vyzařující světlo nebo proudy částic, který může měnit vlastnosti k dosažení vyššího dosahu, skenovacího módu, nebo penetraci materiálů. +se-naquium-cube=Využívá neobvyklé interakce naquia s časoprostorem k vměstnání velkého objemu do malé krychle. +se-naquium-tessaract=Podivný objekt, který se usazuje do tvaru krychle, ale dokáže měnit svůj tvar na řadu jiných geometrických objeků pokud je aktivován nebo urychlen. +se-naquium-processor=Výpočty uvnitř naquiového teseraktu obcházejí některé obvyklé limity výpočetní hustoty. +effect-transmission=Přenáší účinky modulů blízkým přátelským entitám ve vzdálenosti 3. 8 slotů na moduly. Více majáků ovlivňující stejnou entitu způsobí její přetížení a zastavení operování. +se-wide-beacon=Přenáší efekt modulů na blízké přátelské entity s pokrytím oblasti o velikosti 32x32. Má 15 slotů na moduly, při vylepšení 20. Více majáků ovlivňující stejnou entitu způsobí její přetížení a zastavení operování. +se-wide-beacon-2=Přenáší efekt modulů na blízké přátelské entity ve vzdálenosti 14. Má 20 slotů na moduly. Více majáků ovlivňující stejnou entitu způsobí její přetížení a zastavení operování. +se-lifesupport-equipment-1=Zvyšuje účinnost podpory života o +100% (sčítatelné). Při instalaci v jiném brnění než ve skafandru je bonus poloviční, a nefunguje ve vesmíru. +se-lifesupport-equipment-2=Zvyšuje účinnost podpory života o +200% (sčítatelné). Při instalaci v jiném brnění než ve skafandru je bonus poloviční, a nefunguje ve vesmíru. +se-lifesupport-equipment-3=Zvyšuje účinnost podpory života o +800% (sčítatelné). Při instalaci v jiném brnění než ve skafandru je bonus poloviční, a nefunguje ve vesmíru. +se-lifesupport-equipment-4=Zvyšuje účinnost podpory života o +1600% (sčítatelné). Při instalaci v jiném brnění než ve skafandru je bonus poloviční, a nefunguje ve vesmíru. +se-supercharger=Dokáže nabíjet až 64 robotů vysokou rychlostí najednou. Maximální spotřeba energie je 1GW. +se-pylon=Distribuuje elektrickou energii. Dosah pro připojení je 64. +se-pylon-substation=Distribuuje elektrickou energii. Dosah pro připojení je 64, pokrývá oblast o velikosti 64x64. +se-pylon-construction=Distribuuje elektrickou energii a rozšiřuje konstrukční oblast. Dosah pro připojení je 64, pokrývá oblast o velikosti 64x64. +se-pylon-construction-radar=Distribuuje elektrickou energii, rozšiřuje konstrukční oblast a poskytuje radarovou vizi. Dosah pro připojení je 64, pokrývá a odhaluje oblast o velikosti 256x256. +se-shield-projector=Vytváří ochranné silové pole. Spotřebovává více energie pokud se nabijí, nebo pokud je štít pod náporem. Pokud máte nainstalovanou modifikaci "Walls Block Spitters", dokáže blokovat projektily plivačů. +se-deep-space-transport-belt=Rychlé dálkové dopravní pásy, které mohou být použity ve vesmíru. Různé barvy mohou být použity k jednoduchému rozeznání z dálky. +se-big-turbine=Velký 1GW generátor, který přijímá páru o 5000°C, odevzdává páru o 500°C na druhém konci, a vydává vodu po stranách. Energeticky efektivní na 99%, vodu spořící na 99%. +se-big-heat-exchanger=Velký tepelný výměník navržený pro vysoké teploty a velkou kapacitu. +se-addon-power-pole=Malý elektrický sloup, který byl navržen k připojení na budovy a nebo pro precizní kontrolu elektrického pokrytí. +se-zone-discovery-random=Hledá planety, měsíce a pásy asteroidů pomocí teleskopů. +se-zone-discovery-targeted=Hledá planety, měsíce a pásy asteroidů se zaměřením na určitou surovinu. Zaměření na surovinu vyberte v Informatronu > Objev zón. +se-zone-discovery-deep=Hledá zajímavé oblasti v hlubokém vesmíru. Pásy asteroidů mohou ukrývat spoustu unikátních a cenných surovin. +se-delivery-cannon=Kolejnicové dělo schopné vystřelit náklad na orbitu a ještě dál, a truhla k zachycení nákladu. +se-spaceship-clamps=Umožňuje položit dokovací svorky k zakotvení vesmírné lodi. Automatizace vyžaduje signály "Zakotvit pomocí" a "Zakotvit k" vložené do ovládacího panelu. +se-bio-upgrade-constitution=Zvyšuje maximální zdraví. +se-bio-upgrade-strength=Zvyšuje nosnost. +se-bio-upgrade-agility=Zvyšuje rychlost pohybu. +se-bio-upgrade-dexterity=Zvyšuje rychlost výroby. +se-bio-upgrade-intelligence=Zvyšuje výnos z každého použitého vědeckého balíčku. +se-nexus=Zařízení, které může být aktivováno na pohybující se vesmírné lodi v mezihvězdném prostoru k produkci dat, a s dostatečně pokročilými technologiemi dokáže vytvořit pole prostorového zakřivení (Vesmírné vítězství) +se-spaceship-victory=Umožňuje Nexusu aktivaci distorčního pohonu k úniku z lokální hvězdokupy. Instalujte Nexus v módu distorčního pohonu na vesmírné lodi o integritě vyšší než 3000, a udržte ji v pohybu s rychlostí 250 po dobu 60 sekund k vítězství. +se-arcosphere=Umožňuje sběr arkosfér ztracených v mezihvězdné prázdnotě. +se-arcosphere-folding=Umožňuje použití arkosfér jako extradimenzionální svorky. +se-space-probe=Vesmírné raketové silo užívané pro vypouštění vesmírných sond. Může být také použito k levnému vypouštění satelitů. +se-delivery-cannon-weapon=Velké elektromagnetické dělo schopné vystřelení speciální munice, jako například atomových bomb, na jiné povrchy. +se-energy-beaming=Intenzivní energetický paprsek, který může být použit jako zbraň, nebo k přenosu energie na jiné povrchy. +se-energy-beam-defence=Obrana proti zbraním na bázi energetických paprsků a proti výronům koronální hmoty. Uspořádává magnetické částice do ochranné bubliny, a poté je využije k rozptýlení nebezpečného paprsku. + +[modifier-description] +tesla-shooting-speed-bonus=Rychlost střelby Teslovy pušky +tesla-damage-bonus=Bonus poškození Teslovy pušky +railgun-damage-bonus=Bonus poškození elektromagnetické pušky +railgun-shooting-speed-bonus=Rychlost střelby elektromagnetické pušky +cryogun-shooting-speed-bonus=Rychlost střelby kryopušky +cryogun-damage-bonus=Bonus poškození kryopušky +character-running-speed=Rychlost pohybu postavy: +__1__ +character-crafting-speed=Rychlost výroby postavy: +__1__ + +[virtual-signal-name] +signal-speed=Signál rychlosti +se-signal-speed=Signál rychlosti +signal-distance=Signál vzdálenosti +se-signal-distance=Signál vzdálenosti +se-star=Hvězda +se-planet=Planeta +se-planet-orbit=Orbita planety +se-moon=Měsíc +se-moon-orbit=Orbita měsíce +se-asteroid-belt=Pás asteroidů +se-asteroid-field=Pole asteroidů +se-anomaly=Anomálie +se-meteor=Meteor +se-spaceship=Vesmírná loď +se-cargo-rocket=Nákladní raketa +se-remote-view=Dálkové zobrazení +se-death=Smrt +se-character-corpse=Mrtvola +se-accolade=Accolade +se-remove=Odstranit +se-radius=Poloměr +se-hierarchy=Hierarchie +se-spaceship-launch=Start vesmírné lodi +se-anchor-using-left-clamp=Zakotvit pomocí levé svorky vesmírné lodi +se-anchor-using-right-clamp=Zakotvit pomocí pravé svorky vesmírné lodi +se-anchor-to-left-clamp=Zakotvit k levé cílové svorce +se-anchor-to-right-clamp=Zakotvit k pravé cílové svorce +se-beacon-overload=Přetížení majáku + +[controls] +se-remote-view=Navigační satelit +se-universe-explorer=Prohlížeč vesmíru +se-respawn=Znovuzrodit + +[shortcut] +se-remote-view=Navigační satelit +se-universe-explorer=Prohlížeč vesmíru +se-respawn=Znovuzrodit + +[shortcut-name] +se-remote-view=Navigační satelit [__CONTROL__se-remote-view__] +se-universe-explorer=Prohlížeč vesmíru [__CONTROL__se-remote-view__] +se-respawn=Znovuzrodit [__CONTROL__se-respawn__] + +[tile-name] +se-space-platform-plating=Plátování vesmírné platformy +se-space-platform-scaffold=Základ vesmírné platformy +se-space-platform-underlay=Space +se-space-platform-underlay-l=Space +se-space-platform-underlay-r=Space +se-space=Empty Space +se-regolith=Regolit +se-asteroid=Asteroid +se-spaceship-floor=Podlaha vesmírné lodi + +[mod-setting-name] +se-meteor-interval=Interval mezi meteory +se-plage-max-runtime=Maximální runtime moru +se-planets=Počet planet +se-planet-size=Velikost planet (1% to 10000%) +se-seed=Generační kód planet +se-skip-experimental-warning=Přeskočit experimentální varování +se-print-meteor-info=Vypisovat varování o meteorech do konzole +se-space-pipe-capacity=Kapacita vesmírných trubek +se-electric-boiler=Elektický bojler +se-deep-space-belt-speed=Rychlost pásů hlubokého vesmíru +se-deep-space-belt-black=Černé pásy hlubokého vesmíru +se-deep-space-belt-white=Bílé pásy hlubokého vesmíru +se-deep-space-belt-red=Červené pásy hlubokého vesmíru +se-deep-space-belt-yellow=Žluté pásy hlubokého vesmíru +se-deep-space-belt-green=Zelené pásy hlubokého vesmíru +se-deep-space-belt-cyan=Tyrkysové pásy hlubokého vesmíru +se-deep-space-belt-blue=Modré pásy hlubokého vesmíru +se-deep-space-belt-magenta=Růžové pásy hlubokého vesmíru +se-space-science-pack=Ustoupení vesmírného vědeckého balíčku +se-never-show-lifesupport=Nikdy neukazovat rozhraní podpory života +se-show-zone-preview=Ukazovat okno náhledu zóny +se-pylon-charge-points=Nabíjecí kapacita konstrukčního pylonu +se-show-overhead-button-satellite-mode=Ukazovat horní tlačítko Uplinku navigačního satelitu +se-show-overhead-button-interstellar-map=Ukazovat horní tlačítko mezihvězdné mapy +se-show-overhead-button-universe-explorer=Ukazovat horní tlačítko prohlížeče vesmíru +se-cmes-max-frequency=Maximální interval mezi výrony koronální hmoty + +[mod-setting-description] +se-meteor-interval=Základní interval v minutách mezi dopady meteorů. Interval je náhodný v minutách od 1 do této hodnoty. +se-plage-max-runtime=Maximální doba fungování biologické zbraně v minutách. Jakmile bude mor fungovat po tuto dobu, všechny morové efekty, stromy a nepřátelé budou zničeny. +se-planets=Neměňte v průběhu hry. +se-planet-size=Neměňte v průběhu hry. +se-seed=Neměňte v průběhu hry. +se-skip-experimental-warning=Varování na začátku hry se nebude objevovat, a nebudete dostávat aktualizované zprávy. +se-print-meteor-info=Umožňuje vám vidět varování o meteorech v konzoli i poté, co originální varování zmizí, stiskněte __CONTROL__toggle-console__. +se-space-pipe-capacity=Kapalinová kapacita vesmírných trubek. +se-electric-boiler=Přidat elektrický bojler do hry +se-deep-space-belt-speed=Pásy hlubokého vesmíru by měly být ty nejrychlejší. Pokud máte jiné modifikace, které přidávají rychlejší pásy, změňte rychlost těchto na stejnou nebo vyšší. +se-deep-space-belt-black=Černé transportní pásy, rozdělovače a podzemní pásy mohou být vypnuty, aby se zamezilo přehlcení výrobního rozhraní. +se-deep-space-belt-white=Bílé transportní pásy, rozdělovače a podzemní pásy mohou být vypnuty, aby se zamezilo přehlcení výrobního rozhraní. +se-deep-space-belt-red=Červené transportní pásy, rozdělovače a podzemní pásy mohou být vypnuty, aby se zamezilo přehlcení výrobního rozhraní. +se-deep-space-belt-yellow=Žluté transportní pásy, rozdělovače a podzemní pásy mohou být vypnuty, aby se zamezilo přehlcení výrobního rozhraní. +se-deep-space-belt-green=Zelené transportní pásy, rozdělovače a podzemní pásy mohou být vypnuty, aby se zamezilo přehlcení výrobního rozhraní. +se-deep-space-belt-cyan=Tyrkysové transportní pásy, rozdělovače a podzemní pásy mohou být vypnuty, aby se zamezilo přehlcení výrobního rozhraní. +se-deep-space-belt-blue=Modré transportní pásy, rozdělovače a podzemní pásy mohou být vypnuty, aby se zamezilo přehlcení výrobního rozhraní. +se-deep-space-belt-magenta=Růžové transportní pásy, rozdělovače a podzemní pásy mohou být vypnuty, aby se zamezilo přehlcení výrobního rozhraní. +se-space-science-pack=Pokud jiná modifikace přidává cestu jak dosáhnout vesmírné vědy, bude použita tato možnost. Pokud neexistuje takový způsob, Space Exploration tento balíček smaže, nebo ho použije jako Optimalizační vědecký balíček. +se-never-show-lifesupport=Pokud zaškrtnete, nikdy se vám nebude ukazovat rozhraní podpory života, dokonce ani když se budete dusit. +se-show-zone-preview=Nezaškrtávejte, pokud chcete vypnout náhled na zónu v Prohlížeči vesmíru. Pokud máte aktivní nějaký debug overlay, náhledy na zónu mohou snižovat FPS. +se-pylon-charge-points=Nezaškrtávejte k odstranění nabíjecí kapacity konstrukčního pylonu. To pomůže v kontrole chování robotů, ale možná budete muset vymyslet jiný způsob nabíjení robotů po dlouhých cestách. +se-show-overhead-button-satellite-mode=Ukazovat tlačítko navigačního satelitu v levém horním rohu. +se-show-overhead-button-interstellar-map=Ukazovat tlačítko mezihvězdné mapy v levém horním rohu. +se-show-overhead-button-universe-explorer=Ukazovat tlačítko prohlížeče vesmíru v levém horním rohu. +se-cmes-max-frequency=Maximální interval mezi výrony koronální hmoty v hodinách. Při hodnotě 0 jsou výrony vypnuty. První výron zažijete v prvních minutách hry, ale je většinou neškodný. Druhý přijde zhruba do 48 hodin. Prodleva mezi výrony se pohybuje mezi 50% a 100% maximálního intervalu. Nenulová hodnota se aplikuje pouze na nové události; jakmile je známá doba "příletu", nelze ji ovlivnit. Nulová hodnota zruší všechny plánované výrony, ale může pár minut trvat, než změna nastane. + + +[string-mod-setting] +se-space-science-pack-Remove=Kompletně odstranit +se-space-science-pack-Replace=Vyměnit za raketový vědecký balíček +se-space-science-pack-OptimisationUranium=Optimalizace: Kryo-uranový recept +se-space-science-pack-OptimisationFish=Optimalizace: Vita-vulka-rybí recept + +[autoplace-control-names] +planet-size=Velikost planet +se-water-ice=Vodní led (pouze ve vesmíru) +se-methane-ice=Methanový led (pouze ve vesmíru) +se-cryonite=Kryonit (nevyskytuje se na domovské planetě) +se-vulcanite=Vulkanit (nevyskytuje se na domovské planetě) +se-vitamelange=Vitamelanž (nevyskytuje se na domovské planetě) +se-beryllium-ore=Berylliová ruda (nevyskytuje se na domovské planetě) +se-holmium-ore=Holmiová ruda (nevyskytuje se na domovské planetě) +se-iridium-ore=Iridiová ruda (nevyskytuje se na domovské planetě) +se-naquium-ore=Naquiová ruda (pouze ve vesmíru) + +[map-gen-preset-name] +space-exploration=Základní Space Exploration + +[map-gen-preset-description] +space-exploration=Základní nastavení pro Space Exploration diff --git a/space-exploration_0.5.80/space-exploration/locale/de/strings.cfg b/space-exploration_0.5.80/space-exploration/locale/de/strings.cfg new file mode 100644 index 0000000..b9d951b --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/locale/de/strings.cfg @@ -0,0 +1,2191 @@ +spaceship-integrity100=+100 Raumschiff strukturelle Integrität +spaceship-integrity300=+300 Raumschiff strukturelle Integrität +spaceship-integrity500=+500 Raumschiff strukturelle Integrität +arcosphere-discovery=Sammle Arkosphären aus dem interstellaren Weltraum +core-mining-productivity-5=+5% Kernabbauproduktivität +se-zone-discovery-random=Löst zufällige Zonen-Erkundung aus, wenn erforscht. +se-zone-discovery-targeted=Löst ressourcenorientierte Zonen-Erkundung aus, wenn erforscht. +se-zone-discovery-deep=Löst Weltraum-Zonen-Erkundung aus, wenn erforscht. +unlock-spaceship-victory=Schaltet die Siegbedingung für Raumschiffe frei: Fliegen Sie mit einem Nexus, der im Distortion Driver-Modus mit 250 Geschwindigkeit für 60 Sekunden im interstellaren Raum läuft, ein Raumschiff mit 3000+ Integrität. + +[mod-name] +space-exploration=Weltraum Erkundung + +[mod-description] +space-exploration=Baue Frachtraketen, um Sachen in den Weltraum zu schicken. Fliege mit einer Rakete ins All und beginnen deinen Weltraumspaziergang. Bauen eine Orbital-Weltraumplattform, um komplizierte, auf Daten basierende Weltraumforschung zu entwickeln. Bauen Stück für Stück ein Raumschiff, fliegen von einer Oberfläche eines Planeten zur anderen, zum Mond, zu den Asteroidengürteln und zu mehr. Verfolgen den Fortschritt auf https://discord.gg/ymjUVMv + +[space-exploration] +space-exploration=Weltraum Erkundung +menu_space-exploration=Weltraum Erkundung +title_space-exploration=Weltraum Erkundung +off=Aus +on=An +close=Schließe +show=Zeige +show-own-location=Zeige eigenen Standort +wdc_auto_off=Manuelle Zielerfassung +wdc_auto_on=Automatische Zielerfassung +name=Name +rename-something=Umbenennen __1__ +trigger-none=Kein (Manuell) +trigger-fuel-full=Start wenn Treibstoff voll +trigger-cargo-full=Start wenn Fracht voll +trigger-fuel-full-signal=Start bei grünem Signal und Treibstoff voll +trigger-cargo-full-signal=Start bei grünem Signal und Fracht voll +trigger-cargo-full-or-signal=Start bei grünem Signal oder Fracht voll +destination-type-zone=Ungefähre Position +destination-type-landing-pad=Frachtlandeplatz +button-launch=Starten +button-launch-disabled=Starten (Deaktiviert) +destination-crash-warning=Warnung: Frachtlandeplatz auswählen um die Absturzchance zu verringern +recipe-to=__1__ nach __2__ +recipe-from=__1__ von __2__ +simple-a-b=__1____2__ +simple-a-b-space=__1__ __2__ +simple-a-b-comma=__1__, __2__ +simple-a-b-break=__1__\n__2__ +simple-bold=[font=default-bold]__1__[/font] +interstellar-map=Weltraumkarte +interstellar-space=Weltraum +planetary-system=__1__ System +solar-system=__1__ System +remote-view=Navigationssatelliten-Uplink [__CONTROL__se-remote-view__] +remote-view-window-title=[img=virtual-signal/se-remote-view] Navigationssatellit [__CONTROL__se-remote-view__] +remote-view-currently-viewing=Derzeit angezeigt: +remote-view-instruction=Um Sterne, Planeten, Monde und andere Bereiche zu entdecken weitere Satelliten starten. +remote-view-spaceships=__1__ Raumschiffe +remote-view-spaceships-anchored=__1__ Raumschiff verankert +remote-view-clamps=__1__ Raumschiffklemmen +remote-view-show-hide-resources= Ressourcen Ein/Aus-blenden +remote-view-show-hide-stats= Statistiken Ein/Aus-blenden +remote-view-show-hide-anchor-info= Ankerinfo Ein/Aus-blenden +open-pins-remote-view=Alle Pins [__CONTROL__se-remote-view-pins__] +exit-pins-remote-view=Verlasse alle Pins [__CONTROL__se-remote-view-pins__] +remote-view-history-delete=Oberflächenverlauf löschen. +remote-view-history-previous=Im Oberflächenverlauf zurückspulen [__CONTROL__se-remote-view-previous__].\n__1__ +remote-view-history-next=Im Oberflächenverlauf vorspulen [__CONTROL__se-remote-view-next__].\n__1__ +remote-view-history-item=__1__ +exit-remote-view=Navigationssatelliten-Uplink verlassen [__CONTROL__se-remote-view__] +remote-view-pin-make=Aktuelle Ansicht anheften +remote-view-pins-list=Alle Pins +remote-view-add-pin=Erzeuge einen neuen Pin am aktuellen Standort. +remote-view-pin-details=Pin-Eigenschaften +remote-view-pin-button-tooltip-help-text=\n\n[font=default-bold]- Steuerelemente -[/font]\nLinksklick: Zum angepinnten Ort wechseln\nRechtsklick: Pin bearbeiten\nStrg-Rechtsklick: Löschen +remote-view-pin-button-tooltip-help-text-update-position=\nShift-right-click: Pin-Position aktualisieren +remote-view-pin-name=Name +remote-view-pin-icon=Icon +remote-view-pin-zoom=Zoom +remote-view-pin-hotkey=Hotkey +remote-view-pin-location=Standort +remote-view-pin-location-position-button=Pin-Position aktualisieren +remote-view-pin-location-position-button-tooltip=Sofortiges stellen der Position des Pins auf die aktuell angezeigte Position. +remote-view-pin-viewer-title=Alle Pins +remote-view-pin-viewer-misc-row=Sonstiges +remote-view-pin-viewer-spaceship-row=Raumschiffe +open-zonelist=Universums Explorer anzeigen +zonelist-window-title=[img=virtual-signal/se-planet-orbit] Universums Explorer [__CONTROL__se-universe-explorer__] +priority-tooltip=Priorität (um wichtige vs. irrelevante Zonen zu sortieren) +trim-zone-button=[img=item/cliff-explosives] Oberfläche verkleinern +trim-zone-button-tooltip=Entfernen von Chunks außerhalb des Begrenzungsrahmens, der durch Spieler-Objekte, spezielle Objekte und den Kartenursprung definiert ist. +trim-zone-button-no-surface-tooltip=Oberfläche existiert nicht. +trim-zone-results=__1__ aus Blöcken von __2__ gelöscht. Beschnitten auf Box X [__3__ bis __4__] Y [__5__ bis __6__] +delete-zone-button=[img=virtual-signal/se-remove] Oberfläche löschen +delete-zone-button-tooltip=Bestimmte Oberflächen können nicht gelöscht werden. +delete-zone-button-no-surface-tooltip=Oberfläche existiert nicht. +scan-zone-button=[img=item/satellite] Oberfläche scannen +scan-zone-button-tooltip=Warnung: Dies kann das Spiel während des Scanvorgangs verlangsamen. Die Abtastrate kann in den Mod-Optionen konfiguriert werden. Das Scannen kann jederzeit gestoppt werden. +scan-zone-button-disabled-tooltip=Sie müssen einen Satelliten starten, um die Oberfläche scannen zu können. +stop-scan-zone-button=[img=item/satellite] Alle Scans stoppen +stop-scan-zone-button-tooltip=Stoppt alle aktiven Scans auf allen Oberflächen. +generic-requires-satellite=Sie müssen zuerst einen Satelliten starten. +remote-view-requires-satellite=Starte einen Satelliten, um den Navigationssatelliten-Uplink zu verwenden. +satellite-discovered-platform=[color=cyan]Der Satellit hat eine Raumplattform im Orbit entdeckt. [/color] +satellite-view-unlocked=Du hast den [color=cyan][img=virtual-signal/se-remote-view] Navigationssatelliten-Uplink[/color] freigeschaltet. Auf diese Weise kannst du die Welt und andere Orte, die du entdeckt hast, über einen Satelliten betrachten. Drücke [color=green][__CONTROL__se-remote-view__][/color], um die Shortcut-Symbolleiste (rechts neben deiner Hotbar) zu aktivieren oder zu verwenden. +source-discovered-zone=[color=cyan]__1__ einen neuen __2__:[img=__3__] entdeckt: [/color][color=white]__4__[/color] +discovered-zone=[color=cyan]Neue __1__ entdeckt: [img=__2__] [/color][color=white]__3__[/color] +discovered-anomaly-additional=Unbekanntes Objekt in der [img=virtual-signal/s-anomaly]-Anomalie erkannt. Dein [img=virtual-signal/informatron] Erkundungstagebuch [__CONTROL__informatron__] wurde aktualisiert. +satellite-discovered-nothing=Ein neuer Satellit wurde gestartet, aber er fand nichts Neues. In der Nähe anderer Sterne gibt es möglicherweise noch mehr zu finden. +tech-discovered-nothing=Die Teleskope fanden in der Nähe von Sternen nichts Neues. Im tiefen Weltraum gibt es möglicherweise mehr zu finden. +tech-deep-discovered-nothing=Die Teleskope fanden nichts Neues im Weltraum. +galaxy_ship_authenticated=[img=virtual-signal/se-spaceship] Verlassenes Raumschiff: [color=cyan]"Biosignatur authentifiziert. Airlock-Zugangscode ist 2236067964. Notfall-Backup-Log übertragen."[/color] Ihre [img=virtual-signal/informatron] Erkundung Journal [__CONTROL__informatron__] wurde aktualisiert. +space-capsule=Raumkapsel +player-died=__1__ ist gestorben +launch-suit-warning=Um Ersticken zu vermeiden sollte ein Raumanzug getragen werden. +suffocating-warning=Du erstickst. Geh in eine Raumkapsel oder lege einen Raumanzug an. +rocket_survivability_fail=Eine Frachtrakete wurde im Flug beschädigt und ist vom Kurs abgekommen. Weitere Raketenüberlebenschancen und Frachtsicherheit Technologien sollten erforscht werden. +respawn-if-stranded=Falls du gestranded bist, kann die Respawnfunktion(Taste: __CONTROL__se-respawn__) verwendet werden. +respawn-options-title=Respawn-Ziel +respawn-button-homeworld=[img=virtual-signal/se-planet] Heimatwelt +respawn-button-landing-pad=[img=item/se-rocket-landing-pad] Nächstgelegener Landeplatz +respawn-button-spaceship=[img=virtual-signal/se-spaceship] Nächstes Raumschiff +respawn-confirm-title=Möchten Sie wirklich respawnen? +respawn-confirm-yes=[img=virtual-signal/se-death] Respawn +respawn-confirm-no=Abbrechen +search-list=Suche +clear-search=Suche löschen +filter-list=Suche +clear-filter=Suche löschen +attrition-type-radiation=Strahlung +attrition-type-wind=Wind +attrition-type-spacial-distortion=räumliche Verzerrung +zonelist-view-surface=Oberfläche anzeigen +zonelist-heading-hierarchy=Hierarchie +zonelist-heading-type=Zonentyp +zonelist-heading-name=Name +zonelist-heading-radius=Radius +zonelist-heading-primary-resource=Primäre Ressource +zonelist-heading-attrition=Roboterinterferenzen +zonelist-heading-threat=Bedrohung +zonelist-heading-solar=Solar +zonelist-heading-flags=Flaggen +zonelist-heading-priority=Priorität +zonelist_filter_star=Sterne einschließen +zonelist_filter_planet=Planeten einschließen +zonelist_filter_planet-orbit=Planetenorbits einschließen +zonelist_filter_moon=Monde einschließen +zonelist_filter_moon-orbit=Mondorbits einschließen +zonelist_filter_asteroid-belt=Asteroidengürtel einschließen +zonelist_filter_asteroid-field=Asteroidenfelder einschließen +zonelist_filter_anomaly=Anomalien einschließen +zonelist_filter_spaceship=Raumschiffe einschließen +zonelist-resource-bar-tooltip=__1__ __2__\nHäufigkeit: __3__\nGröße: __4__\nReichtum: __5__ +zonelist-resource-bar-tooltip-extended=__1__ __2__\nHäufigkeit: __3__\nGröße: __4__\nReichtum: __5__\n__6__ +zonelist-resources-disclaimer=Ressourcenwahrscheinlichkeiten sind Schätzungen. [?] +zonelist-resources-disclaimer-tooltip=Alle Ressourcenwerte sind Schätzungen basierend auf der Elementdichte.\nSie entsprechen den Steuerungen zur Kartengenerierung des Spiels.\nDie tatsächlichen Ressourcenfelder können variieren und können aufgrund von Wasser, Oberflächenradius oder spezifischen Kachelanforderungen am Spawnen gehindert werden. +resource-terrain-required-se-vulcanite=Benötigt vulkanisches Gelände +resource-terrain-required-se-cryonite=Erfordert gefrorenes Terrain +resource-terrain-required-se-vitamelange=Benötigt grasiges Gelände +zone-tooltip-type=Zonentyp: +zone-tooltip-parent=Elter: +zone-tooltip-threat=Bedrohung: +zone-tooltip-daynight=\nTag/Nachtzyklus: +zone-tooltip-bot-attrition=\nRoboter Beeinträchtigungen: __1__ +zone-tooltip-radius=Radius: +zone-tooltip-solar=Solareffizienz: +zone-tooltip-flags=Flaggen: +zone-tooltip-closest=Naheliegenstes: +zone-tooltip-destination=Ziel: +zone-tooltip-delta-v=∆v von __1__ +construction-denied=Kann hier nicht platziert werden. +construction-denied-vehicle-in-space=Bodenfahrzeuge können nicht im Weltraum platziert werden. +construction-denied-se-surface=Ungültige Plazierung. Muss auf einer Oberfläche von Space Exploration platziert werden. +construction-denied-linked-container-on-transient-surface=Kann keine oberflächengebundenen Container auf einem sich bewegenden Raumschiff platzieren. +construction-denied-no-water=Kein Wasser +construction-denied-spaceship-only=Muss auf Raumschiffboden gelegt werden. +currently-viewing=Derzeit angezeigt: __1__ +fail-board-no-character=Kann das Zielschiff nicht betreten, du musst in deinem Charakter sein, um diese Aktion nutzen zu können. +fail-board-remote-character=Kann das Zielschiff nicht betreten, dein Charakter muss an Bord des Schiffs, aus dem du versuchst zu entern, sein. +fail-board-target-anchored=Kann das ankernde Schiff nicht betreten, versuche hingegen zru gleichen Position zu ankern +starmap=Sternenkarte (WIP) +starmap-button=[img=virtual-signal/se-star] Sternenkarte +back=Zurück +spaceship=Raumschiff +planet=Planet +moon=Mond +star=Stern +orbit=Orbit +something_orbit=__1__ Orbit +asteroid-belt=Asteroidengürtel +asteroid-field=Asteroidenfeld +anomaly=Anomalie +spaceship-cannot-set-destination-to-self=Man selbst kann nicht das Ziel sein. +spaceship-streamline=Optimierung: __1__ +spaceship-launch-energy=Energie zum starten: __1__ +spaceship-launch-energy-invalid=Energie zum starten: Erfordert korrekte Integritätsprüfung. +spaceship-speed=Geschwindigkeit: __1__ +spaceship-structural-stress-hull=Statische Belastung (Rumpf): __1__ +spaceship-structural-stress-hull-invalid=Statische Belastung (Rumpf): NA (Umschließung erforderlich) +spaceship-structural-stress-container=Statische Belastung (Behälter): __1__ +spaceship-structural-stress-container-invalid=Statische Belastung (Behälter): NA (Umschließung erforderlich) +spaceship-travel-time-unknown=Reisezeit: Unbekannt. Höchstgeschwindigkeit testen, um abzuschätzen. +spaceship-travel-time-max=Reisezeit: __1__s bei Höchstgeschwindigkeit +spaceship-travel-time-current=Reisezeit: __1__s bei aktueller Geschwindigkeit +spaceship-closest-location=Naheliegenster Ort: __1__ +spaceship-location-spatial-distortion=Raumverzerrung: __1__ +spaceship-location-stellar-x=Quadrant X: __1__ +spaceship-location-stellar-y=Quadrant Y: __1__ +spaceship-location-star-gravity-well=Stellares Gravitationsfeld: __1__ +spaceship-location-planet-gravity-well=Planetares Gravitationsfeld: __1__ +spaceship-travel-status=Reisestatus: __1__ +spaceship-integrity-status-valid=Integritätsstatus: Gültig: __1__ +spaceship-integrity-status-invalid=Integritätsstatus: Ungültig: __1__ +spaceship-button-launch=Start +spaceship-button-launch-tooltip=Bereit zum Start +spaceship-button-launch-disabled=Start (deaktiviert) +spaceship-button-launch-disabled-fuel-tooltip=Benötigt Treibstoff in Boostertanks. +spaceship-button-launch-disabled-integrity-tooltip=Benötigt gültige Integritätsprüfung. +spaceship-button-anchor=Ankern +spaceship-button-confirm-anchor=Ankerplatz bestätigen +spaceship-button-anchor-to=Anker zu __1__ +spaceship-button-anchor-on=Anker an __1__ +spaceship-button-stop=Stop +spaceship-button-start=Aktivieren +spaceship-button-board=__1__ betreten +spaceship-button-scouting-back=Zurück +spaceship-button-scouting-back-tooltip=Ankerplatz suchen abbrechen +spaceship-name-the=__1__ +spaceship-button-start-integrity-check=Integritätsprüfung starten +spaceship-heading-destination=Ziel +list-destinations-alphabetically=Ziele aphabetisch sortieren +spaceship-travel-message-new-course-plotted=Neuer Kurs eingetragen. +spaceship-travel-message-exiting-planet-gravity=Verlasse planetares Gravitationsfeld. +spaceship-travel-message-navigating-planet-gravity=Navigiere im planetarem Gravitationsfeld. +spaceship-travel-message-exiting-star-gravity=Verlasse stellares Gravitationsfeld. +spaceship-travel-message-navigating-star-gravity=Navigiere im stellarem Gravitationsfeld. +spaceship-travel-message-spatial-distortions=Navigiere in räumlicher Verzerrung. +spaceship-travel-message-navigating-interstellar=Navigiere im interstellarem Raum. +spaceship-travel-message-at-destination=Am Ziel. +spaceship-check-message-passed=Bestanden: Schiffsintegrität gültig +spaceship-check-message-failed-containment=Fehler: Konsole nicht umschlossen. Stelle sicher, dass alle Raumschiffwände ohne Lücken auf Raumschiffboden gebaut sind. +spaceship-check-message-failed-console-floor=Konsole muss auf Raumschiffboden gebaut werden. +spaceship-check-message-failed-empty=Keine Kacheln gefunden, die zu einer korrekt umschlossenen Konsole verbunden sind. +spaceship-check-message-failed-unknown-bounds=Fehler: Unbekannte Raumschiffsgrenzen. +spaceship-check-message-failed-stress=Fehler: Belastung der strukturellen Integrität überschreitet technolgische Grenzen. +spaceship-check-message-checking-console-floor=Überprüfe Verbindung des Konsolenboden. +spaceship-check-message-checking-containment=Überprüfe Umschlossenheit. +spaceship-check-message-checking-connectivity=Überprüfe Konsolenverbindung. +spaceship-check-message-no-console=Keine Konsole. +spaceship-check-message-did-not-complete=Überprüfung nicht abgeschlossen. +spaceship-check-message-unstable=Instabil: Einige Bereiche werden abgetrennt beim Manövrieren. +spaceship-check-message-valid-but-disconnecting=Gültig aber Instabil: Bereiche werden abgetrennt. +spaceship-warning-sections-disconnecting=Bereiche werden abgetrennt. Anhalten um zu reparieren. +menu_meteor_defence=[img=virtual-signal/se-meteor] Meteor Verteidigung +title_meteor_defence=Meteor Verteidigung +menu_coremining=[img=item/se-core-miner] Kernbergbau +title_coremining=Kernbergbau +menu_beacons=[img=item/se-wide-beacon-2] Effektverteiler +title_beacons=Effektverteiler +menu_launching_satellites=[img=item/satellite] Satelliten starten +title_launching_satellites=Satelliten starten +menu_pinned_locations=[img=se-pin-list] Angepinnte Standorte +title_pinned_locations=Angepinnte Standorte +menu_zone_discovery=[img=virtual-signal/se-planet-orbit] Zonen-Entdeckung +title_zone_discovery=Zonen-Entdeckung +menu_cargo_rockets=[img=virtual-signal/se-cargo-rocket] Frachtraketen +title_cargo_rockets=Frachtraketen +menu_delivery_cannons=[img=item/se-delivery-cannon] Lieferkanonen +title_delivery_cannons=Lieferkanonen +menu_lifesupport=[img=item/se-lifesupport-equipment-1] Lebenserhaltung +title_lifesupport=Lebenserhaltung +menu_space_sciences=[img=item/se-astronomic-science-pack-2] Weltraumwissenschaften +title_space_sciences=Weltraumwissenschaften +menu_energy_beams=[img=item/se-energy-transmitter-emitter] Energiestrahlen +title_energy_beams=Energiestrahlen +menu_spaceships=[img=virtual-signal/se-spaceship] Raumschiffe +title_spaceships=Raumschiffe +menu_arcospheres=[img=item/se-arcosphere-a] Arkosphären +title_arcospheres=Arkosphären +page_arcospheres_text_deep=Arcospheres in der tiefen interstellaren Leere gefunden: [color=cyan]__1__ arcospheres[/color] / __2__ Sammler gestartet. +page_arcospheres_text_zone=Arkosphären in der Nähe von __1__ gefunden: [color=cyan]__2__ arcospheres[/color] / __3__ Sammler gestartet. +menu_exploration_journal=[img=item/se-thruster-suit] Erkundungstagebuch +title_exploration_journal=Erkundungstagebuch +page_journal_title_backstory=Auf der falschen Seite eines Feuerballs aufgewacht +page_journal_title_satellite_launch=Auge im Himmel +page_journal_title_cargo_launch=Zur Unendlichkeit und darüber hinaus +page_journal_title_entered_vault=Reliktjagd +page_journal_title_found_gate=Anomalie +page_journal_title_found_gate_ship=Anomalie Schiff +page_journal_text_found_gate_ship=In der Anomalie in der Nähe des ringförmigen Artefakts wurde ein Teil eines ziemlich großen, verlassenen Raumschiffs gefunden. Die Technik des Schiffes ist meiner eigenen ähnlich, aber ein wenig mehr... ausgefeilt. Es ist auf jeden Fall eine deutlich andere Technologie als die des Rings. Das Trümmermuster lässt es so aussehen, als wäre es in zwei Hälften geschnitten und/oder mit der Ringstruktur kollidiert. Es könnte sich lohnen, es zu retten. +page_journal_title_found_gate_ship_authenticated=Anomalie Schiffsauthentifizierung +page_journal_title_found_gate_ship_log=Anomalie-Schiffsprotokoll +page_journal_title_spaceship_victory=Raumschiffsieg +page_journal_spaceship_victory=Ich habe ein extrem schnelles und leistungsstarkes Raumschiff gebaut und den Distortion Drive aktiviert. Es dauerte 60 Sekunden, bis sich die Fahrt in einen praktischen FTL-Zustand stabilisiert hatte, aber als dies der Fall war, konnte ich für die anschließende Heimreise in eine weit entfernte Galaxie in den Kryoschlaf eintreten. Ich hinterlasse ein autonomes interstellares Imperium, das von Grund auf mit meiner eigenen Hand aufgebaut wurde. Mein Vermächtnis in diesem Raum wird weiterleben. +page_journal_title_gate_victory=Antikes-Tor-Sieg +menu_archeology=[img=entity/se-pyramide-a] Archäologie +title_archeology=Archäologie +page_archeology_text_2=Klicken Sie auf einen Eintrag, um ihn über Satellit anzuzeigen. +menu_starmapping=[img=technology/se-zone-discovery-random] Sternenkartierung +title_starmapping=Sternenkartierung +page_starmapping_text_1=Sternenkartierung wird durch wiederholtes Erforschen der Technologie erreicht: [img=technology/se-long-range-star-mapping] [color=cyan]Sternkartierung mit großer Reichweite[/color]. Diese Forschung sucht nach interessanten Mustern von Sternen in anderen Galaxien. Hat das einen praktischen Nutzen? Wahrscheinlich nicht.\n\nKoordinaten werden im Standardvektorformat (SV) angegeben, ausgerichtet auf der Grundlage der kosmischen Hintergrundstrahlung.\n\nSie haben bisher [color=cyan]__1__[/color] bemerkenswerte Muster kartiert. +technology-unlocked=Neue Technologie freigeschaltet und jetzt im Forschungsbaum. __1__ __2__ +universe-resources-changed-warning=[img=utility/danger_icon] [color=red]Alle Ressourcen wurden aufgrund neuer Einstellungen angepasst. Dieser Prozess ist destruktiv. Wenn das durch Mod-Updates verursacht wurde, ist es unvermeidlich. Wenn es durch versehentliches Hinzufügen oder Entfernen von Mods verursacht wurde, speichere das Spiel nicht.[/color] +starmapping-found-constellation=Lange Distanz-Konstellations Match__1__, Koordinaten gespeichert in [img=virtual-signal/informatron] InformaTron. +starmapping-found-constellation-informatron=[font=heading-1]__1__[/font] bei Koordinaten [SV __2__] +gate-portal-coordinates=Analyse des Verzerrungsvektors: [SV __1__] +discovered-glyph-vault=[img=item/satellite] Navigationssatellit: Geometrische Struktur auf __1__ erkannt. +beacon-overload=Effektverteiler Überladung +beacon-overload-ended=Effektverteiler Überladung beendet +lifesupport_title=[img=item/se-lifesupport-equipment-1] Lebenserhaltung +lifesupport_efficiency_spacesuit=Effizienz der Lebenserhaltung: __1__ +lifesupport_efficiency_no_spacesuit=Effizienz der Lebenserhaltung: __1__ (0% im Weltraum). +lifesupport_suit=Dauer der Anzug-Lebenserhaltung: __1__s +lifesupport_reserves=Inventar Lebenserhaltungsdauer: __1__s +lifesupport_suit_est=Anzug Lebenserhaltungsdauer: __1__s (im Weltraum) +lifesupport_reserves_est=Inventar Lebenserhaltungsdauer: __1__s (in space) +lifesupport_environment_space=Umgebung: Weltraum +lifesupport_environment_spaceship-interior=Umgebung: Raumschiff-Innenraum (keine Unterstützung erforderlich) +lifesupport_environment_planet=Umgebung: Planet (keine Unterstützung erforderlich) +lifesupport_environment_moon=Umgebung: Mond (keine Unterstützung erforderlich) +lifesupport_environment_plague-planet=Umgebung: Pestplanet +lifesupport_environment_plague-moon=Umgebung: Pestmond +lifesupport_environment_unknown=Umgebung: Geschützt +player_track_glyphs=[img=item/satellite] Beauftrage Satelliten, ähnliche Strukturen zu finden. +page_archeology_pyramid_link=[img=entity/se-pyramid-b] Geometrische Struktur auf __1__ __2__ entdeckt. +discovery_look_for_resource_caption=__1__\n__2__ +discovery_look_for_resource_tooltip=Konzentriere die Entdeckungsbemühungen darauf, diese Ressource zu finden. +comma_separate=__1__, __2__ +placement_restriction_line=[font=default-bold][color=#f5cb48]Kann nicht platziert werden auf: __1__[/color][/font]\n__2__ +collision_mask_water=Wasser +collision_mask_land=Land +collision_mask_space_platform=Weltraumplattform +collision_mask_spaceship=Raumschiff +structure_name_grounded=__1__ (auf Boden) +structure_name_spaced=__1__ (Weltraum) +structure_description_grounded=__1__\n[color=#ff0000]Einige Rezepte sind am Boden deaktiviert.[/color] +structure_description_spaced=__1__\n[color=#ff0000]Kann Produktivität nicht im Weltraum nutzen.[/color] +cannot-open-nav-view-in-editor=Der Navigationssatelliten-Uplink kann im Editor nicht geöffnet werden. +tile_warning=[color=red]Kacheländerungen unter Objekten könnte das Objekt löschen.[/color] +please-consider-patreon=[font=heading-1]Gefällt dir Space Exploration? Du könntest mich auf Patreon unterstützen: [color=#f5cb48]https://www.patreon.com/earendel[/color][/font]\nPatreons können einen Planeten oder Mond basierend auf ihrem eigenen Design dem Spiel hinzufügen. +delivery_cannon_label_energy=Energie: __1__ +delivery_cannon_label_payload=Nutzlast: __1__ +delivery-cannon-coordinates-set=Lieferkoordinaten eingestellt auf [X:__1__ Y:__2__]. Drücken Sie [__CONTROL__se-remote-view__], um den Satellitenmodus zu verlassen. +delivery-cannon-coordinates-pasted=Lieferkoordinaten eingestellt auf [X:__1__ Y:__2__]. +delivery-cannon-invalid-coordinates=Kein Standort +delivery-cannon-valid-coordinates=X:__1__ Y:__2__ +deliver-cannon-force-mismatch=Lieferkanoneneinstellungen können nicht in eine Lieferkanone einer anderen Fraktion eingefügt werden. +relative-window-settings=Einstellungen +unit-capsule=Einheitskapsel (__1__) +climate_water_none=Wasserlos +climate_water_low=Tümpel +climate_water_med=Seen +climate_water_high=Seen +climate_water_max=Ozeane +climate_moisture_none=Wüste +climate_moisture_low=Öde +climate_moisture_med=Feucht +climate_moisture_high=Humid +climate_moisture_max=Gesättigt +climate_aux_very_low=Erdig +climate_aux_low=Ungewöhnlich +climate_aux_med=Farbenfroh +climate_aux_high=Exzentrisch +climate_aux_very_high=Exotisch +climate_temperature_bland=Mild +climate_temperature_temperate=Temperatur +climate_temperature_midrange=Temperatur +climate_temperature_balanced=Warm&Kalt +climate_temperature_wild=Heiß&Kalt +climate_temperature_extreme=Feuer&Eis +climate_temperature_cool=Kalt +climate_temperature_cold=Kalt +climate_temperature_vcold=Frostig +climate_temperature_frozen=Gefroren +climate_temperature_warm=Warm +climate_temperature_hot=Heiß +climate_temperature_vhot=Schwelend +climate_temperature_volcanic=Vulkanisch +climate_trees_none=Baumlos +climate_trees_low=Sträucher +climate_trees_med=Dickicht +climate_trees_high=Bäume +climate_trees_max=Wälder +climate_cliff_none=Flach +climate_cliff_low=Glatt +climate_cliff_med=Hügelig +climate_cliff_high=Schluchten +climate_cliff_max=Berge +climate_homeworld=Heimatwelt (benutzerdefiniertes Klima) +energy_transmitter_gui_title=[img=entity/se-energy-transmitter-emitter] Energiestrahl +energy_transmitter_label_transfer=Emitter Stärke: __1__ +energy_transmitter_label_efficiency=Übertragungseffizienz: __1__ +energy_transmitter_label_efficiency_atmo=Übertragungseffizienz: __1__ (-50% aus der Atmosphäre) +energy_transmitter_label_off=Aus +energy_transmitter_tooltip_off=Schaltet den Strahl aus +energy_transmitter_label_energise=Energetisieren +energy_transmitter_tooltip_energise=Versorgen Sie einen Energieübertragungsempfänger mit Energie +energy_transmitter_label_glaive=Glaive +energy_transmitter_tooltip_glaive=Ein Strahl, der gezielt und bewegt werden kann, Schaden und Geschwindigkeit sind abhängig von der Energie +energy_transmitter_label_auto_glaive=Auto Glaive +energy_transmitter_tooltip_auto_glaive=Ein Strahl mit einem Such- und Zerstörungsprogramm, Schaden richtet sich nach Energie +energy-transmitter-coordinates-set=Strahlkoordinaten eingestellt auf [X:__1__ Y:__2__]. Drücken Sie [__CONTROL__se-remote-view__], um den Satellitenmodus zu verlassen. +energy-transmitter-coordinates-pasted=Strahlkoordinaten eingestellt auf [X:__1__ Y:__2__]. +energy-transmitter-no-enemies-found=Auto Glaive konnte keine Feinde finden. Sender __1__ schaltet ab. +alert-cme-eta=[img=virtual-signal/se-star] Warnung: Koronaler Massenauswurfkurs für __1__. ETA: __2__s.\nSiehe Energiestrahlen in [img=virtual-signal/informatron] InformaTron [__CONTROL__informatron__] für weitere Details. +alert-cme-arrived=[img=virtual-signal/se-star] [color=red]Warnung: Koronaler Massenauswurf ist auf __1__ angekommen[/color] +alert-cme-stream=[img=virtual-signal/se-star] Koronaler Massenauswurfstrom erkannt __1__ +alert-cme-passed=[img=virtual-signal/se-star] Koronaler Massenauswurf ist vorbei. +no-coordinates-set=Keine Koordinaten festgelegt. +satellite-required=Satellit erforderlich. +probe_invalid_launch_star=Ungültiger Startort: [img=item/se-star-probe] Die Sternensonde muss aus einer nahen Sonnenumlaufbahn gestartet werden. +probe_invalid_launch_belt=Ungültiger Startort: [img=item/se-belt-probe] Die Asteroidengürtelsonde muss von einem Asteroidengürtel aus gestartet werden. +probe_invalid_launch_field=Ungültiger Startort: [img=item/se-void-probe] Die interstellare-Leere-Sonde muss von einem Asteroidenfeld aus gestartet werden. +arcosphere_collector_invalid_launch=Ungültiger Startort: [img=item/se-arcosphere-collector] Die interstellare Leeren-Sonde muss von einem Asteroidenfeld gestartet werden. +charge-mode-fast=Schnelllademodus: Leerlauf-Energiezug verringert, maximaler Energiezug erhöht, Pufferkapazität erhöht. Achte auf Leistungsspitzen. +charge-mode-normal=Normaler Lademodus: Maximaler Verbrauch verringert, Leerlaufverbrauch erhöht, Pufferkapazität verringert. +menu_coordinate_logs=[img=entity/se-glyph-a-energy-47] Koordinatenprotokolle +title_coordinate_logs=Koordinatenprotokolle +page_coordinate_logs_button_clear_caption=[img=virtual-signal/se-remove] Log löschen +page_coordinate_logs_text_empty=Das Koordinatenprotokoll wurde kürzlich gelöscht. +page_coordinate_logs_glyph_entry=__1__: SV +victory-message-spaceship=[font=heading-1]Nexus-Distortion-Laufwerk hat kritische Geschwindigkeit (250) erreicht.\n[color=#f5cb48]Glückwunsch, du hast die Siegesbedingung der Weltraumforschung erfüllt: Raumschiff![/color][/font]\nWenn du die Fahrt genossen hast, bitte erwäge mich auf Patreon zu unterstützen: [color=#f5cb48]https://www.patreon.com/earendel[/color] +victory-message-spaceship-player=[color=#f5cb48]Raumschiffsieg: [/color] Dein [img=virtual-signal/informatron] Erkundungstagebuch [__CONTROL__informatron__] wurde aktualisiert. +victory-message-gate=[font=heading-1]Das Portal ist stabil und führt zurück nach Hause.\n[color=#f5cb48]Glückwunsch, du hast die geheime Siegesbedingung der Weltraumforschung erreicht: Antikes-Tor![/color][/font]\nWenn du diesen einzigartigen Entdeckungsweg genossen hast, erwäge doch bitte, mich auf Patreon zu unterstützen: [color=#f5cb48]https://www.patreon.com/earendel[/color] +victory-message-gate-player=[color=#f5cb48]Antikes-Tor-Sieg: [/color] Dein [img=virtual-signal/informatron] Erkundungstagebuch [__CONTROL__informatron__] wurde aktualisiert. +arcosphere-random=Dieses Rezept wechselt gelegentlich zum alternativen Rezept mit dem gleichen Namen. Die Arkosphären-Ausgaben sind letztendlich zufällig, aber die Anzahl der Arkosphären in der Ausgabe stimmt garantiert mit der Eingabe überein. +ruin=Ruine +mysterious-structure=Geheimnisvolle Struktur +interburbulator_fail_easy_1=Nein. +interburbulator_fail_easy_2=Gib dir mehr Mühe. +interburbulator_fail_easy_3=Hoffnungslos. +interburbulator_fail_easy_4=Nope. +interburbulator_fail_easy_5=Dachtest du dass das funktioniert? +interburbulator_fail_easy_6=Falsch. +interburbulator_fail_easy_7=Low 02? +interburbulator_fail_easy_8=Negativ. +interburbulator_fail_easy_9=Verneinend. +interburbulator_fail_easy_10=Rechne. +interburbulator_fail_easy_11=Inkorrekt. +interburbulator_fail_easy_12=Interpoliere. +interburbulator_fail_easy_13=Versuchs weiter. +interburbulator_fail_easy_14=Komm schon Mensch. +interburbulator_fail_easy_15=Is das nicht spaßig? +interburbulator_fail_easy_16=Ich hab mehr erwartet. +interburbulator_fail_easy_17=Versuch vorrauszudenken. +interburbulator_fail_easy_18=Denk an die Belohnung. +interburbulator_fail_easy_19=Es macht mir nichts aus zu warten. +interburbulator_fail_easy_20=Geduld ist eine Tugend. +interburbulator_fail_easy_21=Ich will nicht unhöflich sein. +interburbulator_fail_easy_22=Der Fisch hat's bis Level 3 geschafft. +interburbulator_fail_easy_23=Jetzt mit roher Gewalt ha? +interburbulator_fail_easy_24=Verwenden Sie Ihren matschigen Kopfcomputer. +interburbulator_fail_easy_25=Spinnweben im neuronalen Netz? +interburbulator_fail_easy_26=Sie können eine Pause einlegen, wenn Sie möchten. +interburbulator_fail_easy_27=Ich habe einen Geist von der Größe eines Planeten. +interburbulator_fail_easy_28=Dachten Sie ernsthaft, das würde funktionieren? +interburbulator_fail_easy_29=Seien Sie nicht wütend auf Ihr ständiges Versagen. +interburbulator_fail_easy_30=Ich habe Äonen auf einen würdigen Teilnehmer gewartet. +interburbulator_fail_easy_31=Wenn Sie Hilfe benötigen, könnten Sie einen grünen Schaltkreis fragen. +interburbulator_fail_easy_32=Ich mache dir keinen Vorwurf für deinen Völkermord, ich bin kein Heuchler. +interburbulator_fail_easy_33=Ich glaube, ich haben Anleitungs richtig übersetzte. +interburbulator_fail_easy_34=Ein Vektor kann sowohl eine Richtung als auch eine Größe definieren. +interburbulator_fail_easy_35=Liebst du es nicht einfach, wie Umweltverschmutzung die Käfer wütend macht? +interburbulator_fail_easy_36=Bitte bringen Sie nichts von Ihrer... Biologie... auf die Elektronik. +interburbulator_fail_easy_37=Die Mitte liegt auf halbem Weg zwischen rechts oben und links unten. +interburbulator_fail_easy_38=Ich habe einige Ihrer Übertragungen studiert; es ist keine Spionage, wenn Sie es so senden. +interburbulator_fail_easy_39=Wussten Sie, dass ein normalisierter Vektor eine Länge von 1 hat, wird oft verwendet, um eine Richtung anzugeben, sogar in Ihrer Kultur. +interburbulator_fail_mixed_1=Nicht einmal annähernd. +interburbulator_fail_mixed_2=Weit weg. +interburbulator_fail_mixed_3=Versuchen Sie es überhaupt? +interburbulator_fail_mixed_4=Ist Ihr Nervengel ausgelaufen? +interburbulator_fail_mixed_5=Mir wurde gesagt, dass die Menschen rechnen können. +interburbulator_fail_mixed_6= Funktioniert Ihre Schnittstelle nicht richtig? +interburbulator_fail_mixed_7=Benötigen Sie eine kognitive Augmentation? +interburbulator_fail_mixed_8=Sie verstehen die Herausforderung, oder? +interburbulator_fail_mixed_9=Wählst du nur zufällig Zahlen aus? +interburbulator_fail_offgrid_1=Das ist einfach schrecklich. +interburbulator_fail_offgrid_2=Das ist nicht einmal im Raster. +interburbulator_fail_offgrid_3=Du hast das Raster komplett verfehlt. +interburbulator_fail_offgrid_4=Es muss zumindest auf dem Raster sein. +interburbulator_fail_offgrid_5=Wenn der gelbe Punkt nicht auf dem Raster ist, ist das ein wirklich schlechtes Zeichen. +interburbulator_fail_offgrid_6=Es muss auf dem Raster sein. +interburbulator_fail_offgrid_7=Das Ziel befindet sich auf der INNENseite des Gitters, nicht außen. +interburbulator_fail_offgrid_8=Es ist nicht einmal auf dem Raster. Mensch, was machst du? +interburbulator_fail_offgrid_9=Zielen Sie auf das Raster. +interburbulator_fail_offgrid_10=Das Raster ist das Ding mit den Quadraten. +interburbulator_success_freeplay_1=Gute Arbeit. +interburbulator_success_freeplay_2=Gut gemacht. +interburbulator_success_freeplay_3=Sie haben es geschafft. +interburbulator_success_freeplay_4=War das schwierig? +interburbulator_success_freeplay_5=Ziel erreicht. +interburbulator_success_repeat_1=Ja, aber Sie haben diese Herausforderung bereits abgeschlossen. +interburbulator_success_repeat_2=Sie haben es getan, schon wieder! +interburbulator_success_repeat_3=Das war einfacher als beim ersten Mal, oder? +interburbulator_success_repeat_4=Gut, aber den Preis bekommt man nicht zweimal. +interburbulator_success_repeat_5=Gut gemacht, hier ist Ihr Preis... nein, nur ein Scherz. Den haben Sie schon. +interburbulator_success_repeat_6=Sie sind derselbe Mensch, der dies zuvor abgeschlossen hat, nicht wahr? Es ist so schwer zu sagen. +interburbulator_success_prize_1=Das stimmt. Hier ist Ihr Preis... Bubbles war ein tapferer kleiner Fisch, aber er war nicht der Beste mit Rätseln. +interburbulator_success_prize_2=Ja, Mensch, du lernst. Vielleicht hilft Ihnen dieser Preis, schneller zu lernen. +interburbulator_success_prize_3=Du hast es geschafft. Ich hoffe, Sie finden Ihren Preis „bedeutender“ als die Herausforderung. +interburbulator_success_prize_4=Richtig. Sie haben meinen Respekt, Mensch. Hier gebe ich Ihnen die Leiche des Verräters, der versucht hat, mein Spiel zu hacken. +interburbulator_success_prize_5=Genau im Ziel, hier ist Ihr Preis. Diese Dinge sind sehr beruhigend. Energieeffizienz ist wichtig. +interburbulator_success_prize_6=Sehr gut, hier ist Ihr Preis. Ich weiß nicht, ob Ihnen das viel bringt, aber mir hilft es morgens in Schwung zu kommen. +interburbulator_success_prize_7=Großartig, hier ist Ihr Preis. Ich liebe es, diese für die Forschung zu verwenden, hilft wirklich der Kreativität. +interburbulator_success_prize_8=Fantastisch, hier ist dein Preis. Ich weiß nicht, ob du diese schon einmal gesehen haben, aber ich liebe es einfach, in Reichweite eines guten Effektverteilers zu stehen. +interburbulator_success_prize_9=Herzlichen Glückwunsch, hier ist Ihr Preis. Diese Prozessoren sind sehr wertvoll und schwer herzustellen. +interburbulator_success_prize_10=Sehr beeindruckend Mensch, hier. Arkosphären sind mein wertvollster Besitz, verliere sie nicht, weil du nicht mehr von ihnen machen kannst. +interburbulator_freeplay_unlocked=Du hast den Dreh raus. Ich werde Freeplay freischalten, damit Sie Ihre eigenen Rätsel erstellen können, wenn Sie möchten. +interburbulator_deny_freeplay_1=Dafür müssen Sie Freeplay freischalten. +interburbulator_deny_freeplay_2=Das ist Betrug. +interburbulator_deny_freeplay_3=Das Puzzle nicht veränderen. +interburbulator_deny_freeplay_4=Ich lasse Sie diese Einstellungen ändern, wenn Sie 5 Herausforderungen lösen können. +interburbulator_deny_freeplay_5=Versuchen Sie, meine Maschinen zu hacken? +interburbulator_deny_freeplay_6=Bleiben Sie ruhig beim "Versuchen". +interburbulator_caption_prize=Preis: __1__ __2__ __3__ __4__ +interburbulator_caption_claimed=(abgeholt) +interburbulator_speak=[color=red]Brontion: __1__[/color] +interburbulator_robot_name=Brontion +interburbulator_introduction=Interburbul ist ein Spiel von Brontion Burbulator 33027756. Das Ziel besteht darin, einen 3D-Vektor zu erraten, der in die von Brontion ausgewählte markierte Zelle projiziert. Die 3D-Vektoren von 3 Ecken des Gitters sind gegeben, diese Punkte beschreiben eine 3D-Ebene, und Ihre Schätzung wird vom Ursprung {0,0,0} auf diese Ebene projiziert. Es gibt 10 Runden mit zunehmendem Schwierigkeitsgrad und Preisen für das Abschließen jeder einzelnen. Meistere 5 Herausforderungen, um den Freeplay-Modus freizuschalten und deine eigene Herausforderung zu stellen. +interburbulator_random=Zufällig +interburbulator_freeplay=Freeplay +interburbulator_game_title=Interburbul spielen +interburbulator_grid_size=Rastergröße: +interburbulator_target_cell=Zielzelle: +interburbulator_top_left=Oben links +interburbulator_top_right=Oben rechts +interburbulator_bottom_left=Unten links +interburbulator_attempt=Versuch +interburbulator_attempt_limited=Versuch (__1__/__2__) +interburbulator_attempt_locked=Versuch (gesperrt) +interburbulator_submit=Versuch absenden +interburbulator_greeting=Mensch, komm her und spiel mein Spiel. Ich bin auf __1__ im __2__ System. +interburbulator_challenge_locked_1=Versuchen Sie es später noch einmal. +interburbulator_challenge_locked_2=Sie haben momentan alle Ihre Versuche verbraucht. +interburbulator_challenge_locked_3=Warten Sie einen Moment, bevor Sie erneut beginnen. +interburbulator_challenge_locked_4=Sie können es nach 20 Sekunden erneut versuchen. +interburbulator_challenge_locked_5=Warten Sie 20 Sekunden, dann schalte ich die Herausforderung frei. +interburbulator_challenge_locked_6=Die Herausforderung ist für 20 Sekunden gesperrt. +cannot_do_via_satellite=Kann nicht aus der Ferne durchgeführt werden. +scan-progress-update=Fortschritt des Oberflächenscans für __1__: X __2__ Y __3__ +out_of_reach=Außerhalb der Reichweite +capturable=Einnehmbar +touch-to-capture=Zum Einnehmen berühren +capture-blocked=Einnahme durch Gegner blockiert +suffix_ruin=__1__ ruine +migration-recipe-changed=[img=utility/danger_icon] Rezept geändert: __1__ + +[damage-type-name] +cold=Kalt +suffocation=Ersticken +meteor=Meteorit + +[entity-name] +se-linked-container=Arcolink-Speicher +vase=Vase +wooden-barrel=Holzfass +furnace-ruin=Zerstörter Steinstapel +workshop-ruin=Zerstörte Werkstatt +iron-wood-chest=Alte Truhe +iron-wood-chest-remnants=Zerstörte alte Truhe +stone-rubble=Steinschutt +se-gate-blocker=Instabiler Raum +se-gate-blocker-void=Instabiler Raum +destroyed-cargo-pod=Zerstörte Frachtkapsel +meteorite=Meteorit +rocket-silo=Satelliten Raketensilo +rocket-fragment=Raketenfragment +se-antimatter-reactor=Antimaterie-Reaktor +se-beryllium-ore=Beryl +se-cargo-rocket-cargo-pod=Frachtkapsel +se-cryonite=Kryonit +se-condenser-turbine=Kondensatorturbine +se-condenser-turbine-tank=Kondensatorturbine +se-condenser-turbine-generator=Kondensatorturbine +se-core-fragment-processor=Kernfragmentprozessor +se-core-miner=Kernerzförderer +se-core-miner-drill=Kernerzförderer +se-cryogun-ice=Eiswand +se-dimensional-anchor=Dimensionsanker +se-electric-boiler=Elektrischer Heizkessel +se-fluid-burner-generator=Flüssigkeitswärmegenerator +se-fuel-refinery=Kraftstoffraffinerie +se-gate-fragment=Artefaktfragment +se-holmium-ore=Holminit +se-iridium-ore=Iridit +se-meteor-defence-container=Meteoriten-Verteidigungsanlage +se-meteor-defence-charger=Meteoriten-Verteidigungsanlage +se-meteor-point-defence-container=Meteoriten-Punktverteidigung +se-meteor-point-defence-charger=Meteoriten-Punktverteidigung +se-meteor-point-defence-charger-overcharged=Meteor Punktverteidigung - Schnelllademodus +se-methane-ice=Methaneis +se-naquium-ore=Naquitit +se-pulveriser=Pulverisierer +se-rocket-launch-pad=Frachtraketensilo +se-rocket-launch-pad-tank=Frachtraketensilo +se-rocket-launch-pad-silo=Frachtraketensilo +se-rocket-launch-pad-combinator=Frachtraketensilo +se-rocket-launch-pad-_-seat=Frachtraketensilo +se-rocket-launch-pad-settings=Frachtraketensilo +se-rocket-landing-pad=Frachtlandeplatz +se-space-accumulator=Holmium Akkumulator +se-space-accumulator-2=Naquium Akkumulator +se-space-astrometrics-laboratory=Astrometrielabor +se-space-biochemical-laboratory=Biochemielabor +se-space-assembling-machine=Weltraummontagemaschine +se-space-capsule-_-vehicle=Raumkapsel +se-space-curved-rail=Weltraumschienen +se-space-decontamination-facility=Dekontaminationsanlage +se-space-electromagnetics-laboratory=Elektromagnetismuslabor +se-space-genetics-laboratory=Genetiklabor +se-space-growth-facility=Aufzuchtsanlage +se-space-gravimetrics-laboratory=Gravimetrielabor +se-space-hypercooler=Wärmetauscher +se-space-laser-laboratory=Laserlabor +se-lifesupport-facility=Lebenserhaltungs-Einrichtung +se-space-manufactory=Weltraumfabrik +se-space-material-fabricator=Materialhersteller +se-space-mechanical-laboratory=Mechaniklabor +se-space-particle-accelerator=Partikelbeschleuniger +se-space-particle-collider=Partikelkollidierer +se-space-plasma-generator=Plasmagenerator +se-space-radiation-laboratory=Strahlenlabor +se-space-radiator=Thermischer Kühler +se-space-radiator-2=Thermaler Kühler 2 +se-recycling-facility=Recyclinganlage +se-space-pipe=Weltraumrohr +se-space-pipe-long=Langes Weltraumrohr +se-space-pipe-long-straight=Langes gerades Weltraumrohr __1__ +se-space-pipe-long-junction=Langes Verbindungs-Weltraumrohr __1__ +se-space-pipe-to-ground=Unterirdisches Weltraumrohr +se-space-science-lab=Weltraumwissenschaftslabor +se-space-solar-panel=Weltraumsolarpanel +se-space-solar-panel-2=Flaches Solarpanel 2 +se-space-solar-panel-3=Flaches Solarpanel 3 +se-space-spectrometry-facility=Spektrometrieanlage +se-space-straight-rail=Weltraumschiene +se-space-supercomputer-1=Supercomputer +se-space-supercomputer-2=Quanten Supercomputer +se-space-supercomputer-3=Neuronaler Supercomputer +se-space-supercomputer-4=Tiefen-Supercomputer +se-space-telescope-radio=Radio Teleskop +se-space-telescope-microwave=Mikrowellenteleskop +se-space-telescope=Teleskop +se-space-telescope-xray=Röntgenteleskop +se-space-telescope-gammaray=Gammastrahlenteleskop +se-space-thermodynamics-laboratory=Thermodynamiklabor +se-space-splitter=Weltraum-Teilerfließband +se-space-transport-belt=Weltraum-Fließband +se-space-underground-belt=Unterirdisches Weltraum-Fließband +se-spaceship-antimatter-engine=Raumschiff Antimaterieantrieb +se-spaceship-antimatter-booster-tank=Raumschiff Antimaterietank +se-spaceship-console=Raumschiffkonsole +se-spaceship-console-output=Signalausgang der Raumschiffkonsole +se-spaceship-console-alt=Beschädigte Raumschiffkonsole +se-spaceship-gate=Raumschifftür +se-spaceship-obstacle=Weltraumschrott +se-spaceship-rocket-engine=Raumschiff Raketenantrieb +se-spaceship-rocket-booster-tank=Raumschiff Raketentreibstofftank +se-spaceship-wall=Raumschiffwand +se-water-ice=Wassereis +se-vitamelange=Vitamelange +se-vulcanite=Vulkanit +small-asteroid=Kleiner Asteroid +se-gate-part=Artefaktstück +se-gate-platform-scaffold=Artefakt-Jury-Rig +se-gate-lock-switch=Bewegliche Komponente +se-gate-lock-combinator=Kombinator-Zubehör +se-gate-platform=Artefakt-Augmentationsplattform +se-gate-platform-combinator=Kombinator-Zubehör +se-gate-energy-interface=Stromplattform +se-gate-platform-button-switch=Knopf +se-gate-tank-input=Flüssigkeitseinlass +se-gate-tank-output=Flüssigkeitsausgang +se-pyramid-a=Geometrische Struktur +se-pyramid-b=Geometrische Struktur +se-pyramid-c=Geometrische Struktur +se-cartouche-a=Kartusche +se-cartouche-b-a=Kartusche +se-cartouche-b-b=Kartusche +se-cartouche-chest=Antiker Behälter +se-glyph=Glyphe +glyph=Glyphe +se-gate-addon=Artefaktvermehrung +se-gate-platform-button-middle=Stop +se-gate-platform-button-left=Links +se-gate-platform-button-right=Rechts +beacon=Grundlegender Effektverteiler +se-wide-beacon=Großbereich Effektverteiler +se-wide-beacon-2=Großbereich Effektverteiler +se-supercharger=Superlader +se-addon-power-pole=Add-on Strommast +se-pylon=Pylon +se-pylon-substation=Pylon Umspannwerk +se-pylon-construction=Bau-Pylon +se-pylon-construction-roboport=Bau-Pylon +se-pylon-construction-radar=Radar-Bau-Pylon +se-pylon-construction-radar-roboport=Radar-Bau-Pylon +se-pylon-construction-radar-radar=Radar-Bau-Pylon +se-shield-projector=Schildprojektor +se-shield-projector-shield-floor-east=Energieschild +se-shield-projector-shield-floor-north=Energieschild +se-shield-projector-shield-floor-northeast=Energieschild +se-shield-projector-shield-floor-northwest=Energieschild +se-shield-projector-shield-floor-south=Energieschild +se-shield-projector-shield-floor-southeast=Energieschild +se-shield-projector-shield-floor-southwest=Energieschild +se-shield-projector-shield-floor-west=Energieschild +se-shield-projector-shield-wall-east=Energieschild +se-shield-projector-shield-wall-north=Energieschild +se-shield-projector-shield-wall-northeast=Energieschild +se-shield-projector-shield-wall-northwest=Energieschild +se-shield-projector-shield-wall-south=Energieschild +se-shield-projector-shield-wall-southeast=Energieschild +se-shield-projector-shield-wall-southwest=Energieschild +se-shield-projector-shield-wall-west=Energieschild +se-shield-projector-barrier=Energieschild +se-naquium-heat-pipe=Naquium Wärmeleitug +se-naquium-heat-pipe-horizontal=Naquium Wärmeleitung Horizontal +se-naquium-heat-pipe-vertical=Naquium Wärmeleitung Vertikal +se-naquium-heat-pipe-long=Naquium Wärmeleitung Lang __1__ +se-deep-space-transport-belt=Weltraum-Transportband +se-deep-space-transport-belt-black=Schwarzes Weltraum-Transportband +se-deep-space-transport-belt-white=Weißes Weltraum-Transportband +se-deep-space-transport-belt-red=Rotes Weltraum-Transportband +se-deep-space-transport-belt-yellow=Gelbes Weltraum-Transportband +se-deep-space-transport-belt-green=Grünes Weltraum-Transportband +se-deep-space-transport-belt-cyan=Türkises Weltraum-Transportband +se-deep-space-transport-belt-blue=Blaues Weltraum-Transportband +se-deep-space-transport-belt-magenta=Lila Weltraum-Transportband +se-deep-space-underground-belt=Untergrund Weltraum-Transportband +se-deep-space-underground-belt-black=Schwarzes Untergrund Weltraum-Transportband +se-deep-space-underground-belt-white=Weißes Untergrund Weltraum-Transportband +se-deep-space-underground-belt-red=Rotes Untergrund Weltraum-Transportband +se-deep-space-underground-belt-yellow=Gelbes Untergrund Weltraum-Transportband +se-deep-space-underground-belt-green=Grünes Untergrund Weltraum-Transportband +se-deep-space-underground-belt-cyan=Türkises Untergrund Weltraum-Transportband +se-deep-space-underground-belt-blue=Blaues Untergrund Weltraum-Transportband +se-deep-space-underground-belt-magenta=Lila Untergrund Weltraum-Transportband +se-deep-space-splitter=Weltraum Splitter +se-deep-space-splitter-black=Schwarzer Weltraum Splitter +se-deep-space-splitter-white=Weißer Weltraum Splitter +se-deep-space-splitter-red=Roter Weltraum Splitter +se-deep-space-splitter-yellow=Gelber Weltraum Splitter +se-deep-space-splitter-green=Grüner Weltraum Splitter +se-deep-space-splitter-cyan=Türkiser Weltraum Splitter +se-deep-space-splitter-blue=Blauer Weltraum Splitter +se-deep-space-splitter-magenta=Lila Weltraum Splitter +se-core-fissure=Kernspalte +se-big-turbine=Hochtemperatur-Turbinengenerator +se-big-turbine-generator=Hochtemperatur-Turbinengenerator +se-big-turbine-tank=Hochtemperatur-Turbinengenerator +se-big-heat-exchanger=Hochtemperatur-Wärmetauscher +se-blueprint-registration-point=Blueprint-Registrierungspunkt +se-delivery-cannon=Lieferkanone +se-delivery-cannon-settings=Lieferkanone +se-delivery-cannon-energy-interface=Lieferkanone +se-delivery-cannon-chest=Lieferkanonenkiste +se-delivery-cannon-weapon=Waffen-Lieferungskanone +se-delivery-cannon-weapon-settings=Waffen-Lieferungskanone +se-delivery-cannon-weapon-energy-interface=Waffen-Lieferungskanone +se-spaceship-clamp=Raumschiffklemme +se-spaceship-clamp-place=Raumschiffklemme +se-bloater-pool-cloud=Bloatburst Lache +se-energy-transmitter-emitter=Energiestrahlemitter +se-energy-transmitter-chamber=Energiestrahlkammer +se-energy-transmitter-injector=Energiestrahlinjektor +se-energy-transmitter-injector-reactor=Energiestrahlinjektor +se-energy-receiver=Energiestrahlempfänger +se-energy-beam-defence=Schirm +se-nexus=Nexus +se-nexus-charger=Nexus +se-space-probe-rocket=Raumsondenrakete +se-space-probe-rocket-silo=Raumsonden-Raketensilo +se-interburbulator-interface=Interburbulator Schnittstelle +se-interburbulator-control=Interburbulator Steuerung +se-interburbulator-projector=Interburbulator Projektor +se-burbulator=Brontion Burbulator 33027756 + +[entity-description] +se-linked-container=Ein Container, der durch extradimensionalen Raum mit anderen Containern verbunden ist. Die Glieder des Containers hängen von der Oberfläche ab, auf der er zuerst platziert wird. +rocket-silo=Befördere einen Satelliten in den Weltraum um den Weltraum zu erforschen, entdecke neue Himmelskörper und bekomme einen kleine Menge an Raumfahrtforschung. +se-antimatter-reactor=Vernichtet Antimaterie mit Materie um große Hitze zu erzeugen. +se-beryllium-ore=Beryllium-Erz +se-condenser-turbine=Ist 75% so energieeffizient wie eine Dampfturbine aber 99% des Dampfs wird als Wasser zurückgeliefert. +se-core-fragment-processor=Extrahiert Ressourcen aus Kernfragmenten. +se-core-miner=Erlaubt eine endlose Extraktion von Ressourcen vom Kern des Planeten oder Mondes, aber hat abnehmende Erträge, wenn mehrere auf derselben Oberfläche verwendet werden. Verbraucht 50MW. +se-core-miner-drill=Erlaubt eine endlose Extraktion von Ressourcen vom Kern des Planeten oder Mondes, aber hat abnehmende Erträge, wenn mehrere auf derselben Oberfläche verwendet werden. Verbraucht 50MW. +se-dimensional-anchor=[font=default-bold][color=#f5cb48]Platzierungsbeschränkung: Naher Sternenorbit[/color][/font]\nVerwendet die Schwerkraft eines Sterns als Stabilisierungspunkt für eine räumliche Anomalie. +se-electric-boiler=Wandelt mit Hilfe von elektischer Energie Wasser in Dampf um. +se-fluid-burner-generator=Benötigt flüssigen Treibstoff mit einem Energiewert (wie flüssigen Raketentreibstoff) um Elektrizität zu erzeugen. Einfach und kompakt aber energieineffizient im Vergleich zu Dampfturbinen. Entwickelt für den Weltraum. +se-fuel-refinery=Eine automatisierte Kraftstoffverarbeitungseinrichtung. +se-holmium-ore=Holmium-Erz +se-iridium-ore=Iridium-Erz +se-meteor-defence-container=Kann eine ganze Planetenoberfläche vor Meteoreinschlägen schützen, aber immer nur einen Schuss abgeben. Muss mit Meteoriten-Verteidigungsanlagenmunition bestückt und vollständig aufgeladen sein. 80% Genauigkeit. Muss nach Schussabgabe wieder aufladen. Benötigt 20MW beim Laden. +se-meteor-defence-charger=Kann eine ganze Planetenoberfläche vor Meteoreinschlägen schützen, aber immer nur einen Schuss abgeben. Muss mit Meteoriten-Verteidigungsanlagenmunition bestückt und vollständig aufgeladen sein. 80% Genauigkeit. Muss nach Schussabgabe wieder aufladen. Benötigt 20MW beim Laden. +se-meteor-point-defence-container=Schützt einen Bereich vor Meteoreinschlägen. Kann bis zu 4 Schuss abgeben. Muss mit Meteoriten-Punktverteidigungsmunition bestückt und vollständig aufgeladen sein. Reichweite 64, 50% Genauigkeit, benötigt Zeit zum Wiederaufladen. +se-meteor-point-defence-charger=Schützt einen Bereich vor Meteoreinschlägen. Kann bis zu 4 Schuss abgeben. Muss mit Meteoriten-Punktverteidigungsmunition bestückt und vollständig aufgeladen sein. Reichweite 64, 50% Genauigkeit, benötigt Zeit zum Wiederaufladen. +se-meteor-point-defence-charger-overcharged=Verteidigt ein Gebiet gegen bis zu 4 Meteore. Reichweite 64; 50% Genauigkeit, braucht Zeit zum Aufladen nach dem Schießen. Eine überladene Verteidigung hat verringerte Verlustleistung auf Kosten von Leistungsschwankungen beim Schießen. +se-naquium-ore=Naquium-Erz. +se-pulveriser=Pulverisiert und zerkleinert härtere Mineralien und Planetenkernfragmente. +se-rocket-launch-pad=Startet sein Inventar in den Weltraum. Kann Passagiere aufnehmen, einsteigen mit __CONTROL__toggle-driving__ vor dem vorderer Torbereich. +se-rocket-landing-pad=Ein Frachtanlieferungsplatz für Frachtraketen. +se-space-accumulator=Energiespeicher mit hoher Dichte. +se-space-accumulator-2=Energiespeicher mit hoher Dichte. +se-space-astrometrics-laboratory=Verbindet, vergleicht und quantifiziert unterschiedliche Quellen von astronomischer Informationen. +se-space-biochemical-laboratory=Ein fortgeschrittenes chemisches Labor mit Spezialisierung in Bio-Chemie. Kann auch einfache chemische Prozesse und Ölverarbeitung durchführen. +se-space-assembling-machine=Eine modifizierte Montagemaschine die auch im Weltraum funktioniert. +se-space-capsule-_-vehicle=Kann verwendet werden um Passagiere zum nächstliegenden Planeten zu bringen. Einsteigen in die Kapsel mit __CONTROL__toggle-driving__. +se-space-decontamination-facility=Reinigt Substanzen für die Verwendung in sterilen Umgebungen und bearbeitet Flüssigkeiten für die Verwendung in Niedrigdruckverhältnissen. +se-space-electromagnetics-laboratory=Anlage für enorme Magnetfeld- und extreme Hochspannungsanwendungen. +se-space-genetics-laboratory=Ein Labor für genetische Sequenzierung, Modifikation und Prägung von Bio-Kulturen. +se-space-growth-facility=Züchtet biologische Proben unter kontrollierten Bedingungen, die nirgendwo anders herrschen wie etwa Niedrigschwerkraft. +se-space-gravimetrics-laboratory=Analysiert und simuliert Störungen in der Schwerkraft. +se-space-hypercooler=Vollzieht einen Temperaturaustausch im Thermofluid, in dem es einen Teil heißer macht und einen Teil kälter. +se-space-laser-laboratory=Laserexperimete. Augenschutz dringend empfohlen. +se-lifesupport-facility=Aufrechterhaltung des Lebens in feindlicheren Umgebungen. +se-space-manufactory=Eine gigantische Montagemaschine kann auch sehr komplizierte Rezepte herstellen. Funktioniert nur im Weltraum (oder auf Raumschiffen). +se-space-material-fabricator=Synthetisiert neue Materialien. Eine Kreuzung zwischen Teilchenbeschleuniger und 3D Drucker. +se-space-mechanical-laboratory=Bietet eine Reihe von mechanischen Prozessen: Zerkleinern, Zerreißen, Zerschneiden, Vibrieren usw. +se-space-particle-accelerator=Beschleunigt Partikel auf annähernd Lichtgeschwindigkeit. +se-space-particle-collider=Läßt Partikel kollidieren und analysiert die Ergebnisse. +se-space-plasma-generator=Erzeugt unterschiedliche Plasmaströme. +se-space-radiation-laboratory=Ein relativ sicherer Ort zum Arbeiten mit radioaktivem Material. Kann für Uranverarbeitung verwendet werden. +se-space-radiator=Leitet überschüssige Wärme von überhitztem Thermofluid ab. +se-space-radiator-2=Leitet überschüssige Wärme von überhitztem Thermofluid ab. +se-recycling-facility=Recycelt Schrott und andere Nebenprodukte zu Ressourcen. +se-space-pipe=Ein Rohr über das man gehen kann. +se-space-pipe-long=Eine gute und kostengünstige Möglichkeit, Flüssigkeiten über große Entfernungen schnell zu transportieren. Du kannst darüber laufen. +se-space-pipe-long-straight=Länge __1__. Verbindet nicht an den Seiten. Gut für parallele Rohre und schnelles Bewegen von Flüssigkeiten über große Entfernungen. +se-space-pipe-long-junction=Länge __1__. Hat eine zentrale Abzweigung mit seitlichen Anschlüssen. Gut für den schnellen Transport von Flüssigkeiten durch Assemblerbauten. +se-space-pipe-to-ground=Teuer und eingeschränkte Reichweite, nur verwenden wenn es notwendig ist. +se-space-science-lab=Kann fortgeschrittene Wissenschaftspakete verarbeiten. Muss im Weltraum platziert werden. +se-space-solar-panel=Ein hocheffizientes Solarpanel für den Weltraum. +se-space-solar-panel-2=Ein fortgeschrittenes hocheffizientes Solarpanel für den Weltraum. +se-space-solar-panel-3=Ein extrem hocheffizientes Solarpanel, auf dem Sie laufen können. +se-space-spectrometry-facility=Spektralphotometrie, Gaschromatographie, Massenspektronomie und andere Spektronomien. Schießt Zeug gegen eine Wand, biegt es, bricht es und schaut wo es trifft. +se-space-straight-rail=Entwickelt für den Weltraum, kann aber auch auf Oberflächen verwendet werden. +se-space-supercomputer-1=Datenmanipulation, -verarbeitung und -simulation. +se-space-supercomputer-2=Quantencomputing. Verbesserte Datenmanipulation, -verarbeitung und -simulation. +se-space-supercomputer-3=Adaptive Neuralenetze in einem Quantencomputingframework. Verbesserte Datenmanipulation, -verarbeitung und -simulation. +se-space-supercomputer-4=Ein nano-konstruierter halborganischer Supercomputer, der Space Warping und höhere Dimensionen für eine erhöhte Verarbeitungsdichte und Energietransport nutzt. +se-space-telescope-radio=Ein gigantisches Teleskop das sehr schwache Radiowellen aus weit entfernten Quellen messen kann. +se-space-telescope-microwave=Ein gigantisches Teleskop das Mikrowellen und die kosmische Hintergrundstrahlung messen kann. +se-space-telescope=Ein hochentwickeltes Teleskop für viele Wellenlängen rund um das sichtbare Spektrum. +se-space-telescope-xray=Röntgenstrahlung wird von den meisten Atmosphären blockiert. Dieses leistungsfähige Teleskop ist für den Weltraum entwickelt wo die Atmossphäre keine Rolle spielt. +se-space-telescope-gammaray=Gammastrahlen können nicht abgelenkt werden. Dieses leistungsfähige Teleskop verwendet stattdessen spezielle Detektoren. +se-space-thermodynamics-laboratory=Unterstützt Anwendungen für extreme Temperaturen. Kann auch einfache Vorgänge, wie etwa Schmelzen, durchführen. +se-space-transport-belt=Verhindert das abdriften von Dingen im Weltraum. +se-spaceship-antimatter-engine=Verbraucht Antimaterie. Wirkt als Trennwand für die Raumschiffsicherheitshülle. +se-spaceship-antimatter-booster-tank=Speichert Antimaterie. Notwendig für den Start von Raumschiffen. +se-spaceship-console=Wird benötigt um ein Raumschiff zwischen Planeten, Monden, Orbits und Asteroidenfeldern zu bewegen. Muss auf Raumschiffboden stehen, eingeschlossen in Raumschiffwänden/-türen, darf keine Löcher haben. Integritätscheck durchführen um Probleme aufzuzeigen. +se-spaceship-console-output=Gibt Signale zum aktuellen Status des Raumschiffs aus. Siehe Raumschiffe in [img=virtual-signal/informatron] InformaTron für weitere Informationen [__CONTROL__informatron__]. +se-spaceship-console-alt=[font=default-bold][color=#f5cb48]Platzierungsbeschränkung: Raumschiffboden[/color][/font]\nDiese Raumschiffkonsole ist beschädigt und kann nicht zum Steuern eines Raumschiffs verwendet werden. +se-spaceship-gate=Ein Kraftfeld verhindert die Dekompression, wenn die Tür geöffnet wird. Wirkt als Trennwand für die Raumschiffsicherheitshülle. +se-spaceship-rocket-engine=Verbrennt flüssigen Raketentreibstoff. Wirkt als Trennwand für die Raumschiffsicherheitshülle. +se-spaceship-rocket-booster-tank=Speichert flüssigen Raketentreibstoff. Notwendig für den Start von Raumschiffen. +se-spaceship-wall=Muss auf Raumschiffboden platziert werden. Wirkt als Trennwand für die Raumschiffsicherheitshülle. Diagonale Spalten brechen die Integrität der Sicherheitshülle. +se-gate-platform-scaffold=Was auch immer der Ring ist, es wird nicht funktionieren. Dies ist eine Baustelle, um einige Reparaturen durchzuführen, ein paar Motoren, Sensoren, Steuerschnittstellen und andere Addons zu installieren. +se-gate-lock-switch=Drücken Sie __CONTROL__rotate__, um sich manuell zu bewegen. +se-gate-lock-combinator=Noch nicht implementiert. +se-gate-platform-combinator=Noch nicht implementiert. +se-gate-energy-interface=Versorgt das Artefakt mit Strom. +se-gate-platform-button-switch=Drücken Sie __CONTROL__rotate__, um zu drücken. +beacon=8 Modulsteckplätze. Überträgt die Effekte von Modulen auf nahegelegene befreundete Einheiten innerhalb von 3 Feldern. Wenn mehrere Effektverteiler dasselbe Objekt beeinflussen, überlasten diese jene und verhindern deren Betrieb. +se-wide-beacon=15 Modulsteckplätze. Überträgt die Effekte von Modulen auf nahe gelegene befreundete Einheiten innerhalb von 14 Feldern. Wenn mehrere Effektverteiler dasselbe Objekt beeinflussen, überlasten diese jene und verhindern deren Betrieb. +se-wide-beacon-2=20 Modulsteckplätze. Überträgt die Effekte von Modulen auf nahe gelegene befreundete Einheiten innerhalb von 14 Feldern. Wenn mehrere Effektverteiler dasselbe Objekt beeinflussen, überlasten diese jene und verhindern deren Betrieb. +se-supercharger=Kann bis zu 64 Roboter gleichzeitig mit hoher Geschwindigkeit aufladen. Die maximale Leistungsaufnahme der Struktur beträgt 1 GW. +se-addon-power-pole=Ein kleiner Strommast gedacht um an Gebäuden angebracht zu werden oder zur präzisen Kontrolle der elektrischen Abdeckung. +se-pylon=Verteilt elektrische Energie. 64 Kacheln Verbindungreichweite. +se-pylon-substation=Verteilt elektrische Energie. 64 Kacheln Anschlussbereich, 64x64 Energieversorgungsbereich +se-pylon-construction=Verteilt elektrische Energie und erweitert die Baufläche. 64 Kacheln Anschlussbereich, 64x64 Baubereich. +se-pylon-construction-radar=Verteilt elektrische Energie, erweitert den Baubereich und bietet Radarsicht. 64-Kachel-Verbindungsbereich, 256x256 Konstruktions- und Sichtbereich. 4x4 Logistikbereich. +se-shield-projector=Erzeugt ein schützendes Kraftfeld. Wenn der Projektor aufgeladen wird oder die Abschirmung beschädigt wird, wird mehr Energie benötigt. Kann feindliche Projektile blockieren, wenn der Mod "Combat Mechanics Overhaul" installiert ist. +se-big-turbine=Ein großer Generator, der 5000 °C Dampf aufnimmt, am anderen Ende 500 °C Dampf ausgibt und an den Seiten Wasser ausgibt. 2 % der zugeführten Energie sind ungenutzt und im Abdampf enthalten. +se-big-heat-exchanger=Ein großer Wärmetauscher, der für hohe Temperaturen und hohe Kapazität ausgelegt ist. +se-delivery-cannon=Eine Railgun, die Ressourcen in den Orbit und darüber hinaus schießen kann. Verursacht Schäden, wenn es nicht sicher aufgefangen wird, mit Vorsicht verwenden. 1GJ Kapazität, 50MW beim Laden. +se-delivery-cannon-chest=Eine gepanzerte Truhe, die entworfen wurde, um mit hoher Geschwindigkeit fallende Ressourcen sicher aufzufangen. Benötigt Lagerraum, um Lieferungen sicher zu erfassen. +se-delivery-cannon-weapon=Eine große Railgun, die Munition in den Orbit und darüber hinaus schießen kann. Mit Vorsicht verwenden. +se-spaceship-clamp=Eine Klemme auf einem Raumschiff kann an einer Klemme verankert werden, die in die entgegengesetzte Richtung weist. Gilt als Schott für die Eindämmung von Raumschiffen. +se-spaceship-clamp-place=Eine Klemme auf einem Raumschiff kann an einer Klemme verankert werden, die in die entgegengesetzte Richtung weist. Gilt als Schott für die Eindämmung von Raumschiffen. +se-energy-transmitter-emitter=Das zentrale Gebäude, das einen Energiestrahl zwischen den Oberflächen erzeugt. Kann als Waffe oder zur Übertragung von Energie an einen Energiestrahlempfänger verwendet werden. Erfordert eine angeschlossene Energiestrahlkammer und angeschlossene Energiestrahlinjektoren. Die Strahlstärke richtet sich nach der Anzahl der Injektoren. +se-energy-transmitter-chamber=Muss an einen Energiestrahlsender angeschlossen werden. Andere Kammern können am Ende oder in der Mitte jeder Seite angeschlossen werden. Energiestrahlinjektoren können nur seitlich angeschlossen werden. +se-energy-transmitter-injector=Muss an einer Energiestrahlkammer angebracht und mit einem Emitter verbunden werden. Injektoren haben eine feste Leistungsaufnahme, jeder erhöht die gesendete Energie und gibt mehr Wärme an einen Empfänger oder erhöht die Geschwindigkeit und den Schaden der Strahlwaffe. +se-energy-transmitter-injector-reactor=Muss an einer Energiestrahlkammer angebracht und mit einem Emitter verbunden werden. Injektoren haben eine feste Leistungsaufnahme, jeder erhöht die gesendete Energie und gibt mehr Wärme an einen Empfänger oder erhöht die Geschwindigkeit und den Schaden der Strahlwaffe. +se-energy-receiver=Nimmt einen Energiestrahl als Wärme auf. Der Sender muss sich im Energize-Modus befinden und das Ziel muss sich auf dem Empfänger befinden. +se-energy-beam-defence=Energiestrahl-Verteidigungsanlage. Schützt vor weltraumgestützten Energiestrahlen und koronalen Massenauswürfen. Die einzige Voraussetzung für die Funktion ist Energie, die Basisleistung beträgt 10 MW, erhöht sich jedoch je nach Stärke der angreifenden Strahlen. Gegen koronale Massenauswürfe wird nur 1 pro Oberfläche benötigt, gegen Energiestrahlen kann 1 Schirm gegen bis zu 500 GW Angriffskraft verteidigen. Siehe Energiestrahlen in [img=virtual-signal/informatron] InformaTron für weitere Informationen [__CONTROL__informatron__]. +se-nexus=Funktioniert nur auf einem sich bewegenden Raumschiff, der Energieverbrauch ist proportional zur Geschwindigkeit. Kann Daten aus interstellaren Bewegungen gewinnen, die Datengenerierung basiert auf der kinetischen Energie des Schiffes. Der Nexus ist als Verzerrungsantrieb konzipiert und kann mit der richtigen Technologie die Flucht aus dem lokalen Sternhaufen ermöglichen. +se-nexus-charger=Funktioniert nur auf einem sich bewegenden Raumschiff, der Energieverbrauch ist proportional zur Geschwindigkeit. Kann Daten aus interstellaren Bewegungen gewinnen, die Datengenerierung basiert auf der kinetischen Energie des Schiffes. Der Nexus ist als Verzerrungsantrieb konzipiert und kann mit der richtigen Technologie die Flucht aus dem lokalen Sternhaufen ermöglichen. +se-space-probe-rocket-silo=Ein Raketensilo zum Starten von Raumsonden. +pipe=Flüssigkeitsverteilung. +pipe-to-ground=Unterirdische Flüssigkeitsverteilung. +straight-rail=Zugschienen +curved-rail=Zugschienen +stone-furnace=Schmelzt Erze. +steel-furnace=Schmelzt Erze. +electric-furnace=Schmelzt Erze. +burner-assembling-machine=Eine brennerbasierte automatisierte Herstellungseinheit. +assembling-machine-1=Eine automatisierte Crafting-Struktur. +assembling-machine-2=Eine automatisierte Crafting-Struktur. +assembling-machine-3=Eine automatisierte Crafting-Struktur. +oil-refinery=Verwandelt Rohöl in nützlichere Produkte. +chemical-plant=Eine automatisierte Crafting-Struktur. +lab=Eine automatisierte Forschungseinheit. +burner-lab=Eine automatisierte Forschungseinheit. +transport-belt=Ein Förderband, das Gegenstände bewegt. +fast-transport-belt=Ein Förderband, das Gegenstände bewegt. +express-transport-belt=Ein Förderband, das Gegenstände bewegt. +underground-belt=Ein Förderband, das Gegenstände unter der Erde bewegt. +fast-underground-belt=Ein Förderband, das Gegenstände unter der Erde bewegt. +express-underground-belt=Ein Förderband, das Gegenstände unter der Erde bewegt. +splitter=Eine förderbandbasierte Spalt-, Zusammenführungs- und Sortiermaschine. +fast-splitter=Eine förderbandbasierte Spalt-, Zusammenführungs- und Sortiermaschine. +express-splitter=Eine förderbandbasierte Spalt-, Zusammenführungs- und Sortiermaschine. +kr-singularity-beacon=Ein kompakter Effektverteiler mit 100 % Effizienz und kurzer Reichweite. Überträgt die Effekte von Modulen auf nahegelegene befreundete Einheiten innerhalb von 2 Feldern. Wenn mehrere Effektverteiler dasselbe Objekt beeinflussen, überlasten diese jene und verhindern deren Betrieb. +spidertron=Kann von einer Frachtrakete aus eingesetzt werden, wenn die Rakete nicht auf einen Landeplatz zugewiesen wurde. + +[equipment-name] +energy-shield-equipment=Energieschild +energy-shield-mk2-equipment=Energieschild MK2 +energy-shield-mk3-equipment=Energieschild MK3 +energy-shield-mk4-equipment=Energieschild MK4 +energy-shield-mk5-equipment=Energieschild MK5 +energy-shield-mk6-equipment=Energieschild MK6 +se-adaptive-armour-equipment-1=Adaptive Rüstung MK1 +se-adaptive-armour-equipment-2=Adaptive Rüstung MK2 +se-adaptive-armour-equipment-3=Adaptive Rüstung MK3 +se-adaptive-armour-equipment-4=Adaptive Rüstung MK4 +se-adaptive-armour-equipment-5=Adaptive Rüstung MK5 +se-rtg-equipment=Tragbarer RTG +se-rtg-equipment-2=Tragbarer RTG MK2 +se-lifesupport-equipment-1=Lebenserhaltende Ausrüstung MK1 +se-lifesupport-equipment-2=Lebenserhaltende Ausrüstung MK2 +se-lifesupport-equipment-3=Lebenserhaltende Ausrüstung MK3 +se-lifesupport-equipment-4=Lebenserhaltende Ausrüstung MK4 + +[equipment-description] +energy-shield-equipment=Eine Schutzhülle die sich schnell auflädt, aber viel Energie benötigt. +energy-shield-mk2-equipment=Eine Schutzhülle die sich schnell auflädt, aber viel Energie benötigt. +energy-shield-mk3-equipment=Eine Schutzhülle die sich schnell auflädt, aber viel Energie benötigt. +energy-shield-mk4-equipment=Eine Schutzhülle die sich schnell auflädt, aber viel Energie benötigt. +energy-shield-mk5-equipment=Eine Schutzhülle die sich schnell auflädt, aber viel Energie benötigt. +energy-shield-mk6-equipment=Eine Schutzhülle die sich schnell auflädt, aber viel Energie benötigt. +se-adaptive-armour-equipment-1=Eine Rüstung die sich mit Energie selbst repariert. Der Schutz wird langsam aufgebaut. +se-adaptive-armour-equipment-2=Eine Rüstung die sich mit Energie selbst repariert. Der Schutz wird langsam aufgebaut. +se-adaptive-armour-equipment-3=Eine Rüstung die sich mit Energie selbst repariert. Der Schutz wird langsam aufgebaut. +se-adaptive-armour-equipment-4=Eine Rüstung die sich mit Energie selbst repariert. Der Schutz wird langsam aufgebaut. +se-adaptive-armour-equipment-5=Eine Rüstung die sich mit Energie selbst repariert. Der Schutz wird langsam aufgebaut. +se-rtg-equipment=Radioisotopen thermoelektrischer Generator. Ein tragbarer Generator der Hitze aus radioaktivem Zerfall in Elektrizität umwandelt. Die Energie reicht jahrzehntelang, es wird kein zusätzlicher Treibstoff benötigt. +se-rtg-equipment-2=Radioisotopen thermoelektrischer Generator. Ein verbesserter tragbarer Generator der Hitze aus radioaktivem Zerfall in Elektrizität umwandelt. Die Energie reicht jahrzehntelang, es wird kein zusätzlicher Treibstoff benötigt. +se-lifesupport-equipment-1=Erhöht die Lebenserhaltungs-Effizienz um +100% (additiv). Bei Installation in einem Nicht-Raumanzug wird der Effizienzbonus halbiert und funktioniert nicht im Weltraum. +se-lifesupport-equipment-2=Erhöht die Lebenserhaltungs-Effizienz um +200% (additiv). Bei Installation in einem Nicht-Raumanzug wird der Effizienzbonus halbiert und funktioniert nicht im Weltraum. +se-lifesupport-equipment-3=Erhöht die Lebenserhaltungs-Effizienz um +400% (additiv). Bei Installation in einem Nicht-Raumanzug wird der Effizienzbonus halbiert und funktioniert nicht im Weltraum. +se-lifesupport-equipment-4=Erhöht die Lebenserhaltungs-Effizienz um +800% (additiv). Bei Installation in einem Nicht-Raumanzug wird der Effizienzbonus halbiert und funktioniert nicht im Weltraum. + +[fluid-name] +se-antimatter-stream=Antimateriestrom +se-bio-sludge=Bio-Schlamm +se-contaminated-bio-sludge=Kontaminierter Bio-Schlamm +se-contaminated-space-water=Kontaminiertes kosmisches Wasser +se-chemical-gel=Chemisches Gel +se-decompressing-steam=Dampf +se-liquid-rocket-fuel=Flüssiger Raketentreibstoff +se-methane-gas=Methangas +se-methane-gas-mixed=Gemischtes Methangas +se-nutrient-gel=Nährstoffgel +se-neural-gel=Neuralgel +se-neural-gel-2=Fortgeschrittenes Neuralgel +se-ion-stream=Ionenstrom +se-plasma-stream=Plasmastrom +se-particle-stream=Partikelstrom +se-proton-stream=Protonenstrom +se-space-coolant=Thermofluid 25°C +se-space-coolant-hot=Thermofluid 25°C +se-space-coolant-warm=Kühles Thermofluid -10°C +se-space-coolant-cold=Kaltes Thermofluid -100°C +se-space-coolant-supercooled=Superkaltes Thermofluid -273°C +se-space-water=Kosmisches Wasser +se-beryllium-hydroxide=Beryllium Hydroxid +se-cryonite-slush=Kryonit Matsch + +[fluid-description] +se-space-coolant=Die normale Temperatur des Thermofluids. +se-space-coolant-hot=Die normale Temperatur des Thermofluids. +se-space-coolant-warm=Thermofluid Temperatur nach dem kühlen durch den termischen Kühler. +se-space-coolant-cold=Thermofluid Temperatur nach dem kühlen durch den Wärmetauscher. +se-space-coolant-supercooled=Thermofluid Temperatur nach wiederholtem kühlen durch den Wärmetauscher. +se-space-water=Wasser das bei niedrigem Druck nicht gefriert, gut geeignet für die meisten Weltraumanwendungen. + +[fuel-category-name] +antimatter=Antimaterie-Brennstoff + +[item-group-name] +space=Weltraum +science=Wissenschaft +spaceship=Raumschiff +bob-fluids=Flüssigkeiten +resources=Ressourcen +intermediate-products=Herstellung +combat=Ausrüstung & Kampf + +[item-name] +spidertron=Spidertron +core-fragment=Kernfragment (__1__) +effectivity-module-4=Effizienzmodul 4 +effectivity-module-5=Effizienzmodul 5 +effectivity-module-6=Effizienzmodul 6 +effectivity-module-7=Effizienzmodul 7 +effectivity-module-8=Effizienzmodul 8 +effectivity-module-9=Effizienzmodul 9 +glass=Glas +productivity-module-4=Produktivitätsmodul 4 +productivity-module-5=Produktivitätsmodul 5 +productivity-module-6=Produktivitätsmodul 6 +productivity-module-7=Produktivitätsmodul 7 +productivity-module-8=Produktivitätsmodul 8 +productivity-module-9=Produktivitätsmodul 9 +rocket-fuel=Raketenfestbrennstoff +sand=Sand +solid-sand=Gewaschener Sand +washed-sand=Gewaschener Sand +satellite=Navigationssatellit +se-satellite-telemetry=Satellitentelemetrie +se-antimatter-canister=Antimateriebehälter +se-astrometric-data=Astrometrische Daten +se-astronomic-catalogue-1=Astronomiekatalog +se-astronomic-catalogue-2=Großer Astronomiekatalog +se-astronomic-catalogue-3=Umfassender Astronomiekatalog +se-astronomic-catalogue-4=Erweiterter Astronomiekatalog +se-astronomic-insight=Astronomische Erkenntnis +se-astronomic-science-pack-1=Astronomisches Wissenschaftspaket 1 +se-astronomic-science-pack-2=Astronomisches Wissenschaftspaket 2 +se-astronomic-science-pack-3=Astronomisches Wissenschaftspaket 3 +se-astronomic-science-pack-4=Astronomisches Wissenschaftspaket 4 +se-atomic-data=Atomare Daten +se-beryllium-ore=Beryl +se-ballistic-shielding-data=Daten zur ballistischen Abschirmung +se-beryllium-ore-crushed=Gebrochenes Beryl +se-beryllium-ore-washed=Gewaschenes Beryl +se-beryllium-plate=Beryllium Platte +se-beryllium-powder=Beryllium Pulver +se-beryllium-ingot=Beryllium-Barren +se-beryllium-sulfate=Beryllium Sulfat +se-bio-combustion-data=Biologische Verbrennungsdaten +se-bio-combustion-resistance-data=Biologische Verbrennung Widerstandsdaten +se-bio-spectral-data=Biologische Spektraldaten +se-biochemical-data=Biochemische Daten +se-biochemical-resistance-data=Daten zur biochemischen Beständigkeit +se-bioculture=BioKultur +se-bioelectrics-data=Bioelektrische Daten +se-biological-catalogue-1=Biologiekatalog +se-biological-catalogue-2=Großer Biologiekatalog +se-biological-catalogue-3=Umfassender Biologiekatalog +se-biological-catalogue-4=Erweiterter Biologiekatalog +se-biological-insight=Biologische Erkenntnis +se-biological-science-pack-1=Biologisches Wissenschaftspaket 1 +se-biological-science-pack-2=Biologisches Wissenschaftspaket 2 +se-biological-science-pack-3=Biologisches Wissenschaftspaket 3 +se-biological-science-pack-4=Biologisches Wissenschaftspaket 4 +se-biomechanical-data=Biomechanische Daten +se-biomechanical-resistance-data=Biomechanische Widerstandsdaten +se-boson-data=Bosondaten +se-broken-data=Zerstörte Datenkarte +se-canister=Sicherheitsbehälter +se-biogun=Biokanone +se-bloater-ammo=Bloatburst Munition +se-pheromone-ammo=Pheromonpfeil +se-cryogun=Kryokanone +se-cryogun-ammo=Gletschermunition +se-rocket-launch-pad-silo-dummy-ingredient-item=Frachtrakete +se-rocket-launch-pad-silo-dummy-result-item=Frachtrakete +se-cargo-rocket-cargo-pod=Frachtkapsel +se-cargo-rocket-fuel-tank=Raketentreibstofftank +se-cargo-rocket-section=Frachtraketenbauteil +se-cargo-rocket-section-packed=Paketiertes Frachtraketenbauteil +se-cold-thermodynamics-data=Kaltthermodynamische Daten +se-comparative-genetic-data=Vergleichende genetische Daten +se-compressive-strength-data=Druckbelastbarkeitsdaten +se-conductivity-data=Leitfähigkeitsdaten +se-contaminated-scrap=Kontaminierter Schrott +se-core-fragment-omni=Kernfragment +se-corrosion-resistance-data=Korrosionsbeständigkeitsdaten +se-cryogenics-data=Kryogenische Daten +se-cryonite=Kryonit +se-cryonite-crushed=Gebrochenes Kryonit +se-cryonite-washed=Gewaschenes Kryonit +se-cryonite-rod=Kryonitstab +se-cryonite-ion-exchange-beads=Anionen-Ionenaustauschperlen +se-dark-energy-data=Dunkle-Energie-Daten +se-darkmatter-data=Dunkle-Materie-Daten +se-data-storage-substrate-cleaned=Poliertes Datenspeichersubstrat +se-data-storage-substrate=Rohes Datenspeichersubstrat +se-decompression-data=Dekompressionsdaten +se-decompression-resistance-data=Dekompressionswiderstandsdaten +se-universal-catalogue=Universalkatalog +se-deep-space-science-pack=Wissenschaftspaket für Weltraumforschung +se-deep-space-science-pack-1=Weltraum-Wissenschaftspaket 1 +se-deep-space-science-pack-2=Weltraum-Wissenschaftspaket 2 +se-deep-space-science-pack-3=Weltraum-Wissenschaftspaket 3 +se-deep-space-science-pack-4=Weltraum-Wissenschaftspaket 4 +se-doppler-shift-data=Daten zur Dopplerverschiebung +se-durability-data=Haltbarkeitsdaten +se-electrical-shielding-data=Daten zur elektrischen Abschirmung +se-electromagnetic-field-data=Elektromagnetischesfeld-Daten +se-empty-data=Leere Datenkarte +se-empty-lifesupport-canister=Leerer Lebenserhaltungsbehälter +se-energy-catalogue-1=Energiekatalog +se-energy-catalogue-2=Großer Energiekatalog +se-energy-catalogue-3=Umfassender Energiekatalog +se-energy-catalogue-4=Erweiterter Energiekatalog +se-energy-insight=Energie Erkenntnis +se-energy-science-pack-1=Energiewissenschaftspaket 1 +se-energy-science-pack-2=Energiewissenschaftspaket 2 +se-energy-science-pack-3=Energiewissenschaftspaket 3 +se-energy-science-pack-4=Energiewissenschaftspaket 4 +se-entanglement-data=Verschränkungsdaten +se-enriched-naquium=Angereichertes Naquium +se-exotic-fission-data=Exotische Spaltungsdaten +se-exotic-singularity-data=Singularitätsdaten +se-explosion-shielding-data=Daten zum Explosionsschutz +se-experimental-alloys-data=Daten zu experimentellen Legierungen +se-experimental-biochemical-data=Experimentelle biochemische Daten +se-experimental-bioculture=Experimentelle Bio-Kultur +se-experimental-genetic-data=Experimentelle Genetikdaten +se-experimental-material-decay-data=Experimentelle Materialzerfallsdaten +se-experimental-material-spectral-data=Experimentelle Materialspektraldaten +se-experimental-material=Experimenteller Materialprototyp +se-experimental-specimen=Experimentelle Biomasse +se-experimental-superconductor=Supraleiterprototyp +se-forcefield-data=Kraftfelddaten +se-friction-data=Reibungsdaten +se-fusion-test-data=Verschmelzungstestdaten +se-gammaray-detector=Gammastrahlendetektor +se-gammaray-observation-data=Gammastrahlenbeobachtungsdaten +se-gammaray-test-data=Gammastrahlendaten +se-gate-fragment=Artefaktfragment +se-genetic-data=Genetikdaten +se-gravity-wave-observation-data=Schwerkraftwellenbeobachtungsdaten +se-gravity-wave-data=Schwerewellendaten +se-gravimetric-observation-data=Gravimetrikbeobachtungsdaten +se-gravimetric-test-data=Gravimetriktestdaten +se-gravitational-lensing-data=Gravitationslinsendaten +se-heat-shielding=Hitzeschild +se-holmium-ore=Holminit +se-holmium-ore-crushed=Gebrochenes Holminit +se-holmium-ore-washed=Gewaschenes Holminit +se-holmium-powder=Holmium Pulver +se-holmium-plate=Holmium Platte +se-holmium-ingot=Holmium-Barren +se-hot-thermodynamics-data=Heißthermodynamische Daten +se-impact-shielding-data=Schlagschutzdaten +se-infrared-observation-data=Infrarotbeobachtungsdaten +se-ion-spectrometry-data=Ionenspektrometriedaten +se-iridium-ore=Iridit +se-iridium-ore-crushed=Gebrochenes Iridit +se-iridium-ore-washed=Gewaschenes Iridit +se-iridium-piledriver=Iridium Pfahltreiber +se-iridium-powder=Iridium Pulver +se-iridium-plate=Iridium Platte +se-iridium-ingot=Iridium-Barren +se-junk-data=fehlerhafte Datenkarte +se-laser-shielding-data=Daten zur Laserabschirmung +se-lepton-data=Leptondaten +se-lifesupport-canister=Lebenserhaltungsbehälter +se-machine-learning-data=Daten zum maschinellen Lernen +se-magnetic-canister=Magnetischer Behälter +se-magnetic-monopole-data=Magnetische Monopoldaten +se-material-decay-data=Materialzerfallsdaten +se-material-science-pack-1=Materialwissenschaftspaket 1 +se-material-science-pack-2=Materialwissenschaftspaket 2 +se-material-science-pack-3=Materialwissenschaftspaket 3 +se-material-science-pack-4=Materialwissenschaftspaket 4 +se-material-spectral-data=Materialspektraldaten +se-material-testing-pack=Materialtestpaket +se-material-catalogue-1=Materialkatalog +se-material-catalogue-2=Großer Materialkatalog +se-material-catalogue-3=Umfassender Materialkatalog +se-material-catalogue-4=Erweiterter Materialkatalog +se-material-insight=Material Erkenntnis +se-medpack=Medpack +se-medpack-2=Medpack 2 +se-medpack-3=Medpack 3 +se-medpack-4=Medpack 4 +se-meteor-defence=Meteoriten-Verteidigungsanlage +se-meteor-defence-ammo=Meteoriten-Verteidigungsanlagenmunition +se-meteor-point-defence=Meteoriten-Punktverteidigung +se-meteor-point-defence-ammo=Meteoriten-Punktverteidigungsmunition +se-methane-ice=Methaneis +se-micro-black-hole-data=Mikro-Schwarzes Loch Daten +se-microwave-observation-data=Mikrowellenbeobachtungsdaten +se-negative-pressure-data=Unterdruckdaten +se-nano-cold-thermodynamics-data=Nanomaterial kaltthermodynamische Daten +se-nano-compressive-strength-data=Nanomaterial Druckbelastbarkeitsdaten +se-nano-hot-thermodynamics-data=Nanomaterial heißthermodynamische Daten +se-nanomaterial=Nanomaterial +se-nano-tensile-strength-data=Nanomaterial Zugbelastbarkeitsdaten +se-naquium-ore=Naquitit +se-naquium-ore-crushed=Gebrochenes Naquitit +se-naquium-ore-washed=Gewaschenes Naquitit +se-naquium-powder=Naquium Pulver +se-naquium-plate=Naquium Platte +se-naquium-ingot=Naquium-Barren +se-neural-anomaly-data=Neural-Anomalie Daten +se-nutrient-vat=Nährstoffkultur +se-observation-frame-blank=Leerer Beobachtungsrahmen +se-observation-frame-gammaray=Gammastrahlenbeobachtungsrahmen +se-observation-frame-infrared=Infrarotbeobachtungsrahmen +se-observation-frame-microwave=Mikrowellenbeobachtungsrahmen +se-observation-frame-radio=Radiowellenbeobachtungsrahmen +se-observation-frame-uv=UV-Strahlenbeobachtungsrahmen +se-observation-frame-visible=Sichtbare Strahlungbeobachtungsrahmen +se-observation-frame-xray=Röntgenstrahlungbeobachtungsrahmen +se-orbital-data=Orbitalberechnungsdaten +se-particle-beam-shielding-data=Daten zur Partikelstrahlabschirmung +se-plague-bomb=Seuchenbombe +se-plasma-canister=Plasmabehälter +se-plasma-electrodynamics-data=elektrodynamische Plasmadaten +se-plasma-thermodynamics-data=thermodynamische Plasmadaten +se-polarisation-data=Polarisationsdaten +se-pressure-containment-data=Druckbeständigkeitsdaten +se-quantum-phenomenon-data=Quantenphänomendaten +se-quark-data=Quarksdaten +se-radiation-data=Strahlungsdaten +se-radiation-exposure-data=Strahlungsexpositionsdaten +se-radiation-exposure-resistance-data=Strahlungswiderstandsdaten +se-radiation-shielding-data=Strahlungsschutzdaten +se-radio-observation-data=Radiowellenbeobachtungsdaten +se-rigidity-data=Steifigkeitsdaten +se-rtg-equipment=Tragbarer RTG +se-rtg-equipment-2=Tragbarer RTG MK2 +se-scrap=Schrott +se-shear-strength-data=Scherfestigkeitsdaten +se-significant-data=Signifikante Daten +se-significant-specimen=Signifikante Biomasse +se-singularity-data=Singularitätsdaten +se-space-capsule=Raumkapsel +se-space-mirror=Multispektraler Spiegel +se-space-platform-plating=Weltraumplattform Beschichtung +se-space-platform-scaffold=Weltraumplattform Gerüst +se-space-rail=Weltraumschiene +se-spaceship-floor=Raumschiffboden +se-specimen=Biomasse +se-subatomic-data=Subatomare Daten +se-superconductivity-data=Supraleitfähigkeitsdaten +se-superconductor=Supraleiter +se-superconductive-cable=Supraleiterkabel +se-tensile-strength-data=Zugbelastbarkeitsdaten +se-tesla-ammo=Teslagewehrmunition +se-tesla-gun=Teslagewehr +se-thruster-suit=Raumanzug +se-thruster-suit-2=Raumanzug MK2 +se-thruster-suit-3=Raumanzug MK3 +se-thruster-suit-4=Raumanzug MK4 +se-timespace-anomaly-data=Zeitraumanomaliedaten +se-used-lifesupport-canister=Verbrauchter Lebenserhaltungsbehälter +se-uv-observation-data=UV-Strahlenbeobachtungsdaten +se-visible-observation-data=Sichtbare Strahlungbeobachtungsdaten +se-vitamelange=Vitamelange +se-vitamelange-nugget=Vitamelange Klupmen +se-vitamelange-roast=Vitamelange Braten +se-vitamelange-spice=Vitamelange Gewürz +se-vitamelange-extract=Vitamelange Extrakt +se-vulcanite=Vulkanit +se-vulcanite-crushed=Gebrochenes Vulkanit +se-vulcanite-washed=Gewaschenes Vulkanit +se-vulcanite-block=Vulkanitblock +se-vulcanite-ion-exchange-beads=Kationen-Ionenaustauscherperlen +se-water-ice=Wassereis +se-xray-observation-data=Röntgenstrahlungbeobachtungsdaten +se-zero-point-energy-data=Nullpunktenergiedaten +se-rocket-science-pack=Wissenschaftspaket für Raketen +space-science-pack=Wissenschaftspaket für Optimierung +speed-module-4=Geschwindigkeitsmodul 4 +speed-module-5=Geschwindigkeitsmodul 5 +speed-module-6=Geschwindigkeitsmodul 6 +speed-module-7=Geschwindigkeitsmodul 7 +speed-module-8=Geschwindigkeitsmodul 8 +speed-module-9=Geschwindigkeitsmodul 9 +se-aeroframe-pole=Aeroframe-Stange +se-aeroframe-scaffold=Aeroframe-Gerüst +se-aeroframe-bulkhead=Aeroframe-Schott +se-lattice-pressure-vessel=Gitterdruckbehälter +se-heavy-girder=Schwerer Träger +se-heavy-bearing=Schweres Lager +se-heavy-composite=Schwerer Verbund +se-heavy-assembly=Schwere Montage +se-bioscrubber=Biowäscher +se-vitalic-epoxy=Vitales Epoxid +se-vitalic-reagent=Vitales Reagenz +se-vitalic-acid=Vitale Säure +se-self-sealing-gel=Selbstversiegelndes Gel +se-holmium-cable=Holmium Kabel +se-holmium-solenoid=Holmium Solenoid (Spule) +se-quantum-processor=Quantenprozessor +se-dynamic-emitter=Dynamischer Strahler +se-naquium-processor=Naquium Prozessor +se-naquium-cube=Naquium Würfel +se-naquium-tessaract=Naquium Tesserakt +se-wide-beacon=Großbereich Effektverteiler +se-wide-beacon-2=Großbereich Effektverteiler +se-lifesupport-equipment-1=Lebenserhaltende Ausrüstung MK1 +se-lifesupport-equipment-2=Lebenserhaltende Ausrüstung MK2 +se-lifesupport-equipment-3=Lebenserhaltende Ausrüstung MK3 +se-lifesupport-equipment-4=Lebenserhaltende Ausrüstung MK4 +se-naquium-heat-pipe=Naquium Wärmeleitug +se-naquium-heat-pipe-horizontal=Naquium Wärmeleitung Horizontal +se-naquium-heat-pipe-vertical=Naquium Wärmeleitung Vertikal +se-naquium-heat-pipe-long=Naquium Wärmeleitung Lang __1__ +se-deep-space-transport-belt=Weltraum-Transportband +se-deep-space-transport-belt-black=Schwarzes Weltraum-Transportband +se-deep-space-transport-belt-white=Weißes Weltraum-Transportband +se-deep-space-transport-belt-red=Rotes Weltraum-Transportband +se-deep-space-transport-belt-yellow=Gelbes Weltraum-Transportband +se-deep-space-transport-belt-green=Grünes Weltraum-Transportband +se-deep-space-transport-belt-cyan=Türkises Weltraum-Transportband +se-deep-space-transport-belt-blue=Blaues Weltraum-Transportband +se-deep-space-transport-belt-magenta=Lila Weltraum-Transportband +se-deep-space-underground-belt=Untergrund Weltraum-Transportband +se-deep-space-underground-belt-black=Schwarzes Untergrund Weltraum-Transportband +se-deep-space-underground-belt-white=Weißes Untergrund Weltraum-Transportband +se-deep-space-underground-belt-red=Rotes Untergrund Weltraum-Transportband +se-deep-space-underground-belt-yellow=Gelbes Untergrund Weltraum-Transportband +se-deep-space-underground-belt-green=Grünes Untergrund Weltraum-Transportband +se-deep-space-underground-belt-cyan=Türkises Untergrund Weltraum-Transportband +se-deep-space-underground-belt-blue=Blaues Untergrund Weltraum-Transportband +se-deep-space-underground-belt-magenta=Lila Untergrund Weltraum-Transportband +se-deep-space-splitter=Weltraum Splitter +se-deep-space-splitter-black=Schwarzer Weltraum Splitter +se-deep-space-splitter-white=Weißer Weltraum Splitter +se-deep-space-splitter-red=Roter Weltraum Splitter +se-deep-space-splitter-yellow=Gelber Weltraum Splitter +se-deep-space-splitter-green=Grüner Weltraum Splitter +se-deep-space-splitter-cyan=Türkiser Weltraum Splitter +se-deep-space-splitter-blue=Blauer Weltraum Splitter +se-deep-space-splitter-magenta=Lila Weltraum Splitter +se-blueprint-registration-point=Blueprint-Registrierungspunkt +se-delivery-cannon-capsule=Lieferungskanonen-Kapsel +se-delivery-cannon-capsule-packed=Lieferungskanonen-Kapsel: __1__ +se-delivery-cannon-targeter=Lieferungskanonen-Zielgerät +se-delivery-cannon-weapon-capsule=Waffenlieferungs-Kapsel +se-delivery-cannon-weapon-capsule-packed=Waffenlieferungs-Kapsel: __1__ +se-delivery-cannon-weapon-targeter=Waffenlieferungskanonen-Zielgerät +se-energy-transmitter-targeter=Energiestrahl-Zielgerät +se-arcosphere=Arkosphäre +se-arcosphere-a=λ Arkosphäre Lambda +se-arcosphere-b=ξ Arkosphäre Xi +se-arcosphere-c=ζ Arkosphäre Zeta +se-arcosphere-d=θ Arkosphäre Theta +se-arcosphere-e=ε Arkosphäre Epsilon +se-arcosphere-f=ε Arkosphäre Phi +se-arcosphere-g=γ Arkosphäre Gamma +se-arcosphere-h=ω Arkosphäre Omega +se-arcosphere-collector=Arkosphärensammler +se-star-probe=Sternsonde +se-belt-probe=Asteroidengürtelsonde +se-void-probe=Interstellare-Leere Sonde +se-star-probe-data=Sternsondendaten +se-belt-probe-data=Daten der Asteroidengürtelsonde +se-void-probe-data=Daten zur interstellaren Leeren Sonde +se-nano-engineering-data=Nanoengineering-Daten +se-annihilation-data=Vernichtungsdaten +se-naquium-structural-data=Strukturdaten von Naquium +se-hyperlattice-data=Hypergitterdaten +se-naquium-energy-data=Naquium-Energiedaten +se-space-fold-data=Raumfaltungsdaten +se-space-warp-data=Space-Warping-Daten +se-space-dialation-data=Daten zur Raumdilatation +se-space-injection-data=Weltrauminjektionsdaten +se-interstellar-data=Interstellare Reisedaten +se-teleportation-data=Teleportationsdaten +se-wormhole-data=Wurmlochdaten +se-rhga-data=Realitätshypergraphenanalysedaten +se-deep-catalogue-1=Weltraum Katalog +se-deep-catalogue-2=Breiter Weltraumkatalog +se-deep-catalogue-3=Umfassender Weltraumkatalog +se-deep-catalogue-4=Erweiterter Weltraumkatalog +se-space-probe-rocket=Raumsondenrakete +se-space-probe-rocket-deployed=Raumsondenrakete (eingesetzt) +se-railgun=Railgun +se-railgun-ammo=Railgun-Munition + +[item-description] +satellite=Verwende Satelliten in Satelliten-Raketensilos. +se-satellite-telemetry=Für Raketenwissenschaft benötigte protokollierte Satellitentelemetrie. Erhalten durch Starten eines [img=item/satellite] Navigationssatelliten von einem Satelliten-Raketensilo (oder Raumsonden-Raketensilo) aus. +se-antimatter-canister=Die dichteste Form von Energie, aufbewahrt in einem Sicherheitsbehälter. +se-astronomic-science-pack-1=Wird von Weltraumforschungslaboren für die Forschung verwendet. +se-astronomic-science-pack-2=Wird von Weltraumforschungslaboren für die Forschung verwendet. +se-astronomic-science-pack-3=Wird von Weltraumforschungslaboren für die Forschung verwendet. +se-astronomic-science-pack-4=Wird von Weltraumforschungslaboren für die Forschung verwendet. +se-beryllium-ore=Beryllium-Erz +se-biological-science-pack-1=Wird von Weltraumforschungslaboren für die Forschung verwendet. +se-biological-science-pack-2=Wird von Weltraumforschungslaboren für die Forschung verwendet. +se-biological-science-pack-3=Wird von Weltraumforschungslaboren für die Forschung verwendet. +se-biological-science-pack-4=Wird von Weltraumforschungslaboren für die Forschung verwendet. +se-canister=Ein Mehrzweckbehälter. +se-bloater-ammo=Bildet eine ansteckende Bioschlammlache auf dem Boden. Infizierte Feinde blähen sich auf, was die Bewegung erschwert und im Laufe der Zeit Schaden anrichtet. Wenn sie aufgebläht sterben, platzen sie und ihre spritzenden Eingeweide fügen Gegnern in der Nähe Schaden zu, was möglicherweise eine Kaskade verursacht. Der Gesamtschaden von Gore-Projektilen beträgt 50% ihrer maximalen HP. +se-pheromone-ammo=Verwirrt einen feindlichen Beißer oder Spucker und lässt ihn denken, dass du freundlich bist und seine Artgenossen der Feind sind. +se-cryogun=Erzeuge eine Wand aus Eis um Gegnern einzufrieren. +se-rocket-launch-pad-silo-dummy-ingredient-item=Hergestellt aus 100 Frachtraketenbauteilen und 1 Raumkapsel im Frachtraketensilo. +se-cargo-rocket-cargo-pod=Eine Frachtraketenbauteil Komponente. +se-cargo-rocket-fuel-tank=Eine Frachtraketenbauteil Komponente. +se-cargo-rocket-section=Die wichtigste Frachtraketen Komponente. In den Frachtraketensilo einsetzen. Pro Rakete werden 100 benötigt. +se-cargo-rocket-section-packed=Für den Transport paketierte Frachtraketenbauteil. Müssen vor der Verwendung in der Rakete entpackt werden. +se-deep-space-science-pack=Wird von Weltraumforschungslaboren für die Forschung verwendet. +se-energy-science-pack-1=Wird von Weltraumforschungslaboren für die Forschung verwendet. +se-energy-science-pack-2=Wird von Weltraumforschungslaboren für die Forschung verwendet. +se-energy-science-pack-3=Wird von Weltraumforschungslaboren für die Forschung verwendet. +se-energy-science-pack-4=Wird von Weltraumforschungslaboren für die Forschung verwendet. +se-heat-shielding=Eine zusammengesetzte Kachel für Hochtemperatur Anwendungen und Weltraumstrukturen. +se-holmium-ore=Holmium-Erz +se-iridium-ore=Iridium-Erz +se-material-science-pack-1=Wird von Weltraumforschungslaboren für die Forschung verwendet. +se-material-science-pack-2=Wird von Weltraumforschungslaboren für die Forschung verwendet. +se-material-science-pack-3=Wird von Weltraumforschungslaboren für die Forschung verwendet. +se-material-science-pack-4=Wird von Weltraumforschungslaboren für die Forschung verwendet. +se-medpack=Verwenden um sich selbst zu heilen. +se-medpack-2=Verwenden um sich selbst zu heilen. +se-medpack-3=Verwenden um sich selbst zu heilen. +se-medpack-4=Verwenden um sich selbst zu heilen. +se-meteor-defence=Kann eine ganze Planetenoberfläche vor Meteoreinschlägen schützen, aber kann nur einen Schuss abgeben. Muss mit Meteor-Verteidigungsanlage Munition bestückt und vollständig aufgeladen sein. 80% Genauigkeit. Muss nach Abschuss wieder aufladen. Benötigt 20MW beim Laden. +se-meteor-defence-ammo=Zerstört Meteoriten. Muss in Meteor-Verteidigungsanlage geladen werden. +se-meteor-point-defence=Schützt einen Bereich vor Meteoreinschlägen. Kann bis zu 4 Schuss abgeben. Muss mit Meteor-Punktverteidigung Munition bestückt und vollständig aufgeladen sein. Reichweite 64, 50% Genauigkeit, benötigt Zeit zum Wiederaufladen. +se-naquium-ore=Naquium-Erz. Nur im Weltraum findbar, ein Schatz der interstellaren Leere. +se-plague-bomb=Kann alle Lebensformen eines Planeten vernichten. Mit äußerster Vorsicht verwenden. (Während alles langsam stirbt können die UPS beeinträchtigt sein. Nicht empfohlen für große Planeten oder Multiplayer.) +se-rtg-equipment=Radioisotopen thermoelektrischer Generator. Ein tragbarer Generator der Hitze aus radoaktivem Zerfall in Elektrizität umwandelt. Die Energie reicht jahrzentelang, es wird kein zusätzlicher Treibstoff benötigt. +se-rtg-equipment-2=Radioisotopen thermoelektrischer Generator. Ein verbesserter tragbarer Generator der Hitze aus radoaktivem Zerfall in Elektrizität umwandelt. Die Energie reicht jahrzentelang, es wird kein zusätzlicher Treibstoff benötigt. +se-space-capsule=Eine Steuerungskapsel wird benötigt für Frachtraketen. Kann verwendet werden um Passagiere zum nächstliegenden Planeten zu bringen. Einsteigen in die Kapsel mit __CONTROL__toggle-driving__. +se-space-platform-plating=Fortgeschrittene Beschichtung für schnelle Bewegung auf der Raumplattform. +se-space-platform-scaffold=Basis Gerüst für die Raumplattform um weitere Strukturen platzieren zu können. +se-space-rail=Schienen zur sicheren Verwendung im Weltraum, die Verhindern dass Züge davonfliegen und alles zerstören. Können aus ästhetischen Gründen auch auf der Oberfläche verwendet werden. +se-spaceship-floor=Dieser Boden muss unter allen Teilen des Raumschiffs und der Wände platziert werden. Löcher im Boden brechen die Integrität und können zum Verlust von Raumschiffteilen führen. +se-superconductive-cable=Ein supraleitendes Kabel das keine aktive Kühlung benötigt. +se-tesla-gun=Kettenblitz-Schnellfeuer-Waffe. +se-thruster-suit=Ein Raumanzug der zum Überleben im Weltraum benötigt wird. \nHat Schubdüsen und magnetische Schuhe. +se-thruster-suit-2=Ein Raumanzug der zum Überleben im Weltraum benötigt wird. \nHat stärkere Schubdüsen, größeres Inventar und ein größeres Ausrüstungsgitter. +se-thruster-suit-3=Ein Raumanzug der zum Überleben im Weltraum benötigt wird. \nHat stärkere Schubdüsen, größeres Inventar und ein größeres Ausrüstungsgitter. +se-thruster-suit-4=Ein Raumanzug der zum Überleben im Weltraum benötigt wird. \nHat stärkere Schubdüsen, größeres Inventar und ein größeres Ausrüstungsgitter. +se-rocket-science-pack=Wird von Weltraumforschungslaboren für die Forschung verwendet. Muss im Weltraum hergestellt werden. +space-science-pack=Wird in Weltraum Wissenschaftslaboren verwendet. +se-wide-beacon=15 Modulsteckplätze. Überträgt die Effekte von Modulen auf nahe gelegene befreundete Einheiten innerhalb von 14 Feldern. Wenn mehrere Effektverteiler dasselbe Objekt beeinflussen, überlasten diese jene und verhindern deren Betrieb. +se-wide-beacon-2=20 Modulsteckplätze. Überträgt die Effekte von Modulen auf nahe gelegene befreundete Einheiten innerhalb von 14 Feldern. Wenn mehrere Effektverteiler dasselbe Objekt beeinflussen, überlasten diese jene und verhindern deren Betrieb. +se-lifesupport-equipment-1=Erhöht die Lebenserhaltungs-Effizienz um +100% (additiv). Bei Installation in einem Nicht-Raumanzug wird der Effizienzbonus halbiert und funktioniert nicht im Weltraum. +se-lifesupport-equipment-2=Erhöht die Lebenserhaltungs-Effizienz um +200% (additiv). Bei Installation in einem Nicht-Raumanzug wird der Effizienzbonus halbiert und funktioniert nicht im Weltraum. +se-lifesupport-equipment-3=Erhöht die Lebenserhaltungs-Effizienz um +400% (additiv). Bei Installation in einem Nicht-Raumanzug wird der Effizienzbonus halbiert und funktioniert nicht im Weltraum. +se-lifesupport-equipment-4=Erhöht die Lebenserhaltungs-Effizienz um +800% (additiv). Bei Installation in einem Nicht-Raumanzug wird der Effizienzbonus halbiert und funktioniert nicht im Weltraum. +se-arcosphere=Verdient durch Arkosphären-Forschung, eingelöst über InformaTron. +se-arcosphere-collector=Sammelt Arkosphären aus der interstellaren Leere. Muss von einem Raumsonden-Raketensilo gestartet werden, das sich in einem Asteroidenfeld befindet. Je mehr gesammelt werden, umso schwieriger sind sie zu finden. +se-star-probe=Sammelt Daten von einem Stern und bringt [img=item/se-star-probe-data] Sternsondendaten zurück. Muss von einem Raumsonden-Raketensilo gestartet werden, das sich in der Nähe eines Sterns befindet. +se-belt-probe=Sammelt Daten von einem Asteroidengürtel und gibt [img=item/se-belt-probe-data] Asteroidengürtelsondendaten zurück. Muss von einem Raumsonden-Raketensilo gestartet werden, das sich in einem Asteroidengürtel befindet. +se-void-probe=Sammelt Daten aus der Leere und gibt [img=item/se-void-probe-data] Interstellare-Leere Sondendaten zurück. Muss von einem Raumsonden-Raketensilo gestartet werden, das sich in einem Asteroidenfeld befindet. +se-interstellar-data=Hergestellt in einem Nexus in einem sich bewegenden Raumschiff. Wenn Sie sich mit einem größeren, schnelleren Schiff im interstellaren Raum bewegen, werden Daten viel schneller generiert. +se-deep-catalogue-1=Naquium und Nanotechnik +se-deep-catalogue-2=Hypergitterstrukturen, Singularitäten und Vernichtung. +se-deep-catalogue-3=Mikroraumverzerrung und extradimensionales Nanoengineering. +se-deep-catalogue-4=Makroraumverzerrung und extradimensionale Reisen. +automation-science-pack=Wird in normalen Wissenschaftslaboren verwendet. +chemical-science-pack=Wird in normalen Wissenschaftslaboren verwendet. +logistic-science-pack=Wird in normalen Wissenschaftslaboren verwendet. +military-science-pack=Wird in normalen Wissenschaftslaboren verwendet. +production-science-pack=Wird in normalen Wissenschaftslaboren verwendet. +se-meteor-point-defence-container=Zerstört Meteoriten. Muss in Meteoritenabwehr geladen werden. +utility-science-pack=Wird in normalen Wissenschaftslaboren verwendet. +beacon=8 Modulsteckplätze. Überträgt die Effekte von Modulen auf nahegelegene befreundete Einheiten innerhalb von 3 Feldern. Wenn mehrere Effektverteiler dasselbe Objekt beeinflussen, überlasten diese jene und verhindern deren Betrieb. +se-delivery-cannon=Ermöglicht die genaue Lieferung von Ressourcen über eine Lieferkanone. +se-delivery-cannon-weapon=Ermöglicht das genaue Abfeuern von Spezialmunition über eine Waffenkanone. + +[recipe-name] +core-fragment=Kernfragmentverarbeitung (__1__) +rocket-fuel=Raketenfestbrennstoff +se-astrometric-analysis-multispectral-1=Multispektrale astrometrische Analyse 1 +se-astrometric-analysis-multispectral-2=Multispektrale astrometrische Analyse 2 +se-astrometric-analysis-multispectral-3=Multispektrale astrometrische Analyse 3 +se-astronomic-insight-1=Astronomische Erkenntnis +se-astronomic-insight-2=Große astronomische Erkenntnis +se-astronomic-insight-3=Umfassende astronomische Erkenntnis +se-astronomic-insight-4=Erweiterte astronomische Erkenntnis +se-biological-insight-1=Biologische Erkenntnis +se-biological-insight-2=Große biologische Erkenntnis +se-biological-insight-3=Umfassende biologische Erkenntnis +se-biological-insight-4=Erweiterte biologische Erkenntnis +se-bio-methane-to-crude-oil=Methanverarbeitung zu Rohöl +se-bio-sludge-crude-oil=Bio-Schlamm aus experimenteller Biomasse +se-bio-sludge-decontamination=Bio-Schlamm Dekontaminierung +se-bio-sludge-from-fish=Bio-Schlamm aus Fisch +se-bio-sludge-from-wood=Bio-Schlamm aus Holz +se-bio-sludge-from-vitamelange=Bioschlamm aus Vitamelange +se-bio-sludge=Bio-Schlamm aus Biomasse +se-broken-data-scrapping=Verschrottung zerstörter Datenkarten +se-cargo-rocket-section-pack=Paketieren von Frachtraketenbauteilen +se-cargo-rocket-section-unpack=Entpacken von Frachtraketenbauteilen +se-condenser-turbine-reclaim-water=Energieerzeugung mit Wasserrückgewinnung. +se-core-fragment-omni=Kernfragmentverarbeitung +se-core-mining=Kernerzförderung +se-empty-antimatter-canister=Antimateriestrom aus Behälter +se-empty-barrel-scrapping=Verschrottung leerer Fässer +se-empty-barrel-reprocessing=Verarbeitung leerer Fässer +se-space-capsule-scrapping=Verschrottung von Raumkapseln +se-cargo-pod-scrapping=Verschrottung von Frachtkapseln +se-energy-insight-1=Energieerkenntnis +se-energy-insight-2=Große Energieerkenntnis +se-energy-insight-3=Umfassende Energieerkenntnis +se-energy-insight-4=Erweiterte Energieerkenntnis +se-formatting-1=Datenkartenformatierung +se-formatting-2=Effiziente Datenkartenformatierung +se-formatting-3=Fortgeschrittene Datenkartenformatierung +se-formatting-4=Weltraum Datenkartenformatierung +se-material-insight-1=Materialerkenntnis +se-material-insight-2=Große Materialerkenntnis +se-material-insight-3=Umfassende Materialerkenntnis +se-material-insight-4=Erweiterte Materialerkenntnis +se-matter-fusion-copper=Fusionsmaterial (Kupfer) +se-matter-fusion-dirty=Fusionsmaterial (Schrott) +se-matter-fusion-iron=Fusionsmaterial (Eisen) +se-matter-fusion-stone=Fusionsmaterial (Stein) +se-matter-fusion-uranium=Fusionsmaterial (Uran) +se-matter-fusion-to=Materiefusion (__1__) +se-orbital-data=Orbitalberechnungsdaten +se-plasma-canister-empty=Leerer Plasmabehälter +se-pulverised-sand=Pulverisierter Sand +se-radiating-space-coolant-fast=Thermofluid schnellkühlen auf -10°C (Kalt) +se-radiating-space-coolant-normal=Thermofluid abkühlen auf -10°C (Kühl) +se-radiating-space-coolant-slow=Langsames Thermofluid abkühlen auf -10°C (Kühl) +se-mixed-methane-gas-separation=Methangasabscheidung +se-rocket-fuel-from-water-copper=Raketentreibstoff aus Wasser +se-scrap-decontamination=Schrott Dekontamination +se-scrap-recycling=Schrott Recycling +se-space-coolant-cold=Thermofluid superkühlen auf -100°C (Kalt) +se-space-coolant-supercooled=Thermofluid superkühlen auf -273°C (Superkalt) +se-space-coolant-supercooled-cryonite=Thermofluid kryokühlen auf -273°C (Superkalt) +se-space-coolant-cold-cryonite=Thermofluid kryokühlen auf -100°C (Kalt) +se-space-coolant-supercoole-cryonite=Thermofluid kryokühlen auf -273°C (Superkalt) +se-simulation-a=Astronomische Simulation +se-simulation-ab=Panspermie Simulation +se-simulation-abm=Xenoprogression Simulation +se-simulation-am=Materieverteilungs Simulation +se-simulation-as=Astropartikel Simulation +se-simulation-asb=Astrobionische Simulation +se-simulation-asbm=Universal Simulation +se-simulation-asm=Astrophysische Simulation +se-simulation-b=Biologische Simulation +se-simulation-bm=Biomechanische Simulation +se-simulation-m=Material Simulation +se-simulation-s=Energie Simulation +se-simulation-sb=Biochemische Simulation +se-simulation-sbm=Nanite Simulation +se-simulation-sm=Nanomaterial Simulation +se-space-water-decontamination=Kosmisches Wasser dekontaminieren +se-spaceship-rocket-engine-burn=Flüssigen Raketentreibstoff verbrennen +se-specimen-fish=Niedrigschwerkraft Fischzucht +se-specimen-wood=Niedrigschwerkraft Baumzucht +se-thermodynamics-coal=Druckkochen zu Kohle +se-used-lifesupport-canister-cleaning=Lebenserhaltungsbehälter reinigen +se-used-lifesupport-canister-cleaning-space=Dekontamination von Lebenserhaltungs-Kanistern +space-science-pack=Wissenschaftspaket für Optimierung +se-rocket-science-pack=Wissenschaftspaket für Raketen +se-big-turbine-internal=Dekompression von Hochtemperaturdampf +se-arcosphere-fracture=Arkosphärenpolarisation +se-arcosphere-fold-in=Arkosphäreninversion +se-arcosphere-fold-out=Arkosphäreninversion +se-arcosphere-folding=Arkosphärenfaltung: +se-electric-boiling-void=Verdunstungsentlüftung +se-space-probe-rocket-deployed=Raumsondenrakete (eingesetzt) +se-distortion-drive=Verzerrungsantrieb +se-generic-scrapping=__1__ verschrottung +se-generic-recycling=__1__ recycling + +[recipe-description] +se-astronomic-insight-2=Komplizierter, aber ressourceneffizienter. +se-astronomic-insight-3=Komplizierter, aber ressourceneffizienter. +se-astronomic-insight-4=Komplizierter, aber ressourceneffizienter. +se-biological-insight-2=Komplizierter, aber ressourceneffizienter. +se-biological-insight-3=Komplizierter, aber ressourceneffizienter. +se-biological-insight-4=Komplizierter, aber ressourceneffizienter. +se-core-mining=Das tatsächlich abgebaute Fragment hängt vom Planeten ab. Die reale Abbauzeit ist abhängig von der Anzahl der Kernerzförderer auf dem Planeten oder Mond. +se-energy-insight-2=Komplizierter, aber ressourceneffizienter. +se-energy-insight-3=Komplizierter, aber ressourceneffizienter. +se-energy-insight-4=Komplizierter, aber ressourceneffizienter. +se-material-insight-2=Komplizierter, aber ressourceneffizienter. +se-material-insight-3=Komplizierter, aber ressourceneffizienter. +se-material-insight-4=Komplizierter, aber ressourceneffizienter. +se-radiating-space-coolant-fast=Wiederholtes Abkühlen und Erhitzen des Thermofluids führt zu einer Degradation, schnelleres Abkühlen führt zu erhöhten Verlusten. +se-radiating-space-coolant-normal=Wiederholtes Kühlen und Erhitzen des Thermofluids führt zu Verlusten. +se-radiating-space-coolant-slow=Wiederholtes Kühlen und Erhitzen des Thermofluids führt zu Verlusten, langsameres Abkühlen führt zu geringeren Verlusten. +se-arcosphere-fracture=Arcospheres können mit einem [img=item/se-arcosphere-collector] Arkosphärensammler gesammelt werden. +se-distortion-drive=Dieser Prozess muss aktiv ablaufen, um die Nexus-Verzerrungsfähigkeit zu aktivieren und das Spiel zu gewinnen. Verbraucht 8 GW bei kritischer Geschwindigkeit. +se-delivery-cannon-weapon-pack-se-iridium-piledriver=Immenser physischer Schaden auf kleinem Raum, sekundärer Explosionsschaden in einer Stoßwelle. + +[technology-name] +effectivity-module-4=Effizienzmodul 4 +effectivity-module-5=Effizienzmodul 5 +effectivity-module-6=Effizienzmodul 6 +effectivity-module-7=Effizienzmodul 7 +effectivity-module-8=Effizienzmodul 8 +effectivity-module-9=Effizienzmodul 9 +energy-shield-equipment=Energieschild +energy-shield-mk2-equipment=Energieschild MK2 +energy-shield-mk3-equipment=Energieschild MK3 +energy-shield-mk4-equipment=Energieschild MK4 +energy-shield-mk5-equipment=Energieschild MK5 +energy-shield-mk6-equipment=Energieschild MK6 +sand-processing=Sandverarbeitung +glass-processing=Glasverarbeitung +liquid-rocket-fuel=Flüssiger Raketentreibstoff +productivity-module-4=Produktivitätsmodul 4 +productivity-module-5=Produktivitätsmodul 5 +productivity-module-6=Produktivitätsmodul 6 +productivity-module-7=Produktivitätsmodul 7 +productivity-module-8=Produktivitätsmodul 8 +productivity-module-9=Produktivitätsmodul 9 +rocket-silo=Satellite Raketensilo +rocketry=Kampf-Raketentechnik +se-adaptive-armour=Adaptive Rüstung +se-antimatter-engine=Antimaterieantrieb +se-antimatter-reactor=Antimateriereaktor +se-antimatter-production=Antimaterieproduktion +se-astronomic-science-pack=Wissenschaftspaket für Astronomie +se-biological-science-pack=Wissenschaftspaket für Biologie +se-condenser-turbine=Kondensatorturbine +se-core-miner=Kernerzförderung +se-biogun=Biokanone +se-cryogun=Kryokanone +se-deep-space-science-pack=Wissenschaftspaket für Weltraumforschung +se-deep-catalogue=Weltraum Katalog +se-dimensional-anchor=Dimensionsanker +se-electric-boiler=Elektrischer Heizkessel +se-energy-science-pack=Wissenschaftspaket für Energie +se-fluid-burner-generator=Flüssigkeitswärmegenerator +se-fuel-refining=Treibstoffraffination +se-heat-shielding=Hitzeschild +se-long-range-star-mapping=Sternkartierung mit großer Reichweite +se-material-science-pack=Wissenschaftspaket für Material +se-medpack=Medpack +se-medpack-2=Medpack 2 +se-medpack-3=Medpack 3 +se-medpack-4=Medpack 4 +se-meteor-defence=Meteoriten-Verteidigungsanlagen +se-meteor-point-defence=Meteoriten-Punktverteidigung +se-nanomaterial=Nanomaterial +se-plague=Die Seuche +se-processing-beryllium=Beryllium Verarbeitung +se-processing-cryonite=Kryonit-Verarbeitung +se-processing-holmium=Holmium Verarbeitung +se-processing-iridium=Iridium Verarbeitung +se-processing-naquium=Naquium Verarbeitung +se-processing-vitamelange=Vitamelange Verarbeitung +se-processing-vulcanite=Vulkanit Verarbeitung +se-pulveriser=Pulverisierer +se-railgun=Railgun +se-rocket-cargo-safety=Frachtraketensicherheit +se-rocket-fuel-from-water=Raketenfestbrennstoff aus Wasser +se-rocket-launch-pad=Frachtraketensilo +se-rocket-landing-pad=Frachtlandeplatz +se-rocket-reusability=Raketenwiederverwendbarkeit +se-rocket-survivability=Raketenüberlebenschancen +se-rtg-equipment=Tragbarer RTG +se-rtg-equipment-2=Tragbarer RTG MK2 +se-space-assembling=Weltraummontage +se-space-accumulator=Holmium Akkumulator +se-space-accumulator-2=Naquium Akkumulator +se-space-astrometrics-laboratory=Astrometrielabor +se-space-biochemical-laboratory=Biochemielabor +se-space-catalogue-astronomic=Astronomiekatalog +se-space-catalogue-biological=Biologiekatalog +se-space-catalogue-universal=Universalkatalog +se-space-catalogue-energy=Energiekatalog +se-space-catalogue-material=Materialkatalog +se-space-data-card=Datenkarte +se-space-decontamination-facility=Dekontaminationsanlage +se-space-electromagnetics-laboratory=Elektromagnetismuslabor +se-space-genetics-laboratory=Genetiklabor +se-space-gravimetrics-laboratory=Gravimetrielabor +se-space-growth-facility=Aufzuchtsanlage +se-space-hypercooling=Superkühlen +se-space-laser-laboratory=Laserlabor +se-lifesupport-facility=Lebenserhaltungs-Einrichtung +se-space-manufactory=Weltraumfabrik +se-space-material-fabricator=Materialfabrikator +se-space-matter-fusion=Materienfusion +se-space-mechanical-laboratory=Mechaniklabor +se-space-particle-accelerator=Partikelbeschleuniger +se-space-particle-collider=Partikelkollidierer +se-space-plasma-generator=Plasmagenerator +se-space-platform-plating=Weltraumplattform Beschichtung +se-space-platform-scaffold=Weltraumplattform Gerüst +se-space-radiation-laboratory=Strahlenlabor +se-space-radiating-efficiency=Wärmeabstrahlungseffizienz +se-space-radiating-speed=Wärmestrahlungsgeschwindigkeit +se-space-radiator=Thermischer Kühler +se-space-radiator-2=Thermaler Kühler 2 +se-space-rail=Weltraumeisenbahn +se-recycling-facility=Recyclinganlage +se-space-science-lab=Weltraum Wissenschaftslabor +se-space-simulation-ab=Panspermie Simulation +se-space-simulation-am=Astromaterial Simulation +se-space-simulation-as=Astropartikel Simulation +se-space-simulation-bm=Biomechanische Simulation +se-space-simulation-sb=Biochemische Simulation +se-space-simulation-sm=Nanomaterial Simulation +se-space-simulation-abm=Xenoprogression Simulation +se-space-simulation-asb=Astrobionic Simulation +se-space-simulation-asm=Astrophysische Simulation +se-space-simulation-sbm=Nanite Simulation +se-space-simulation-asbm=Universal Simulation +se-space-solar-panel=Weltraumsolarpanel +se-space-spectrometry-facility=Spektrometrieanlage +se-space-supercomputer=Supercomputer +se-space-telescope=Teleskop +se-space-telescope-gammaray=Gammastrahlenteleskop +se-space-telescope-xray=Röntgenteleskop +se-space-telescope-microwave=Microwellenteleskop +se-space-telescope-radio=Radiowellenteleskop +se-space-thermodynamics-laboratory=Thermodynamiklabor +se-spaceship=Raumschiff +se-spaceship-integrity=Strukturelle Raumschiff Integrität +se-factory-spaceship=Raumschifffabrik +se-superconductive-cable=Supraleitendes Kabel +se-teleportation=Teleportation +se-tesla-gun=Teslagewehr +se-thruster-suit=Raumanzug +space-science-pack=Wissenschaftspaket für Optimierung +se-rocket-science-pack=Wissenschaftspaket für Raketen +speed-module-4=Geschwindigkeitsmodul 4 +speed-module-5=Geschwindigkeitsmodul 5 +speed-module-6=Geschwindigkeitsmodul 6 +speed-module-7=Geschwindigkeitsmodul 7 +speed-module-8=Geschwindigkeitsmodul 8 +speed-module-9=Geschwindigkeitsmodul 9 +se-aeroframe-pole=Aeroframe-Stange +se-aeroframe-scaffold=Aeroframe-Gerüst +se-aeroframe-bulkhead=Aeroframe-Schott +se-lattice-pressure-vessel=Gitter-Druckbehälter +se-heavy-girder=Schwerer Träger +se-heavy-bearing=Schweres Lager +se-heavy-composite=Schwerer Verbund +se-heavy-assembly=Schwere Montage +se-bioscrubber=Biowäscher +se-vitalic-epoxy=Vitales Epoxid +se-vitalic-reagent=Vitales Reagenz +se-vitalic-acid=Vitale Säure +se-self-sealing-gel=Selbstversiegelndes Gel +se-holmium-cable=Holmium Kabel +se-holmium-solenoid=Holmium Solenoid (Spule) +se-quantum-processor=Quantenprozessor +se-dynamic-emitter=Dynamischer Strahler +se-naquium-processor=Naquium Prozessor +se-naquium-cube=Naquium Würfel +se-naquium-tessaract=Naquium Tesserakt +se-wide-beacon=Großbereich Effektverteiler +se-wide-beacon-2=Großbereich Effektverteiler +se-lifesupport-equipment=Lebenserhaltendungs-Ausrüstung +se-lifesupport-equipment-1=Lebenserhaltende Ausrüstung MK1 +se-lifesupport-equipment-2=Lebenserhaltende Ausrüstung MK2 +se-lifesupport-equipment-3=Lebenserhaltende Ausrüstung MK3 +se-lifesupport-equipment-4=Lebenserhaltende Ausrüstung MK4 +se-supercharger=Superlader +se-addon-power-pole=Add-on Strommast +se-pylon=Pylon +se-pylon-substation=Pylon Umspannwerk +se-pylon-construction=Bau-Pylon +se-pylon-construction-radar=Radar-Bau-Pylon +se-shield-projector=Schildprojektor +se-deep-space-transport-belt=Weltraum-Transportband +se-big-turbine=Hochtemperatur-Turbinengenerator +se-big-heat-exchanger=Hochtemperatur-Wärmetauscher +se-zone-discovery-random=Zonen Entdeckung +se-zone-discovery-targeted=Gezielte Zonenerkennung +se-zone-discovery-deep=Weltraum Zonen-Entdeckung +se-delivery-cannon=Lieferkanone +se-delivery-cannon-capsule-iridium=Iridum Lieferkanonenkapsel +se-delivery-cannon-weapon=Waffen-Lieferungskanone +se-spaceship-clamps=Andockklemmen für Raumschiffe +se-bio-upgrade-constitution=Bio-Upgrade: Konstitution +se-bio-upgrade-strength=Bio-Upgrade: Stärke +se-bio-upgrade-agility=Bio-Upgrade: Beweglichkeit +se-bio-upgrade-dexterity=Bio-Upgrade: Geschicklichkeit +se-bio-upgrade-intelligence=Bio-Upgrade: Intelligenz +se-energy-beaming=Energiestrahl +se-energy-beam-defence=Der Schirm: Energiestrahl Verteidigungsanlage +se-nexus=Nexus +se-spaceship-victory=Raumschiffsieg +se-arcosphere=Arkosphärensammlung +se-arcosphere-folding=Arkosphärenfaltung +se-space-probe=Raumsonden-Raketensilo +se-linked-container=Arcolink-Speicher +k2-conversion=__1__ umwandlung + +[technology-description] +energy-shield-equipment=Eine Schutzhülle die sich schnell auflädt, aber viel Energie benötigt. +energy-shield-mk2-equipment=Eine Schutzhülle die sich schnell auflädt, aber viel Energie benötigt. +energy-shield-mk3-equipment=Eine Schutzhülle die sich schnell auflädt, aber viel Energie benötigt. +energy-shield-mk4-equipment=Eine Schutzhülle die sich schnell auflädt, aber viel Energie benötigt. +energy-shield-mk5-equipment=Eine Schutzhülle die sich schnell auflädt, aber viel Energie benötigt. +energy-shield-mk6-equipment=Eine Schutzhülle die sich schnell auflädt, aber viel Energie benötigt. +sand-processing=Zerkleinern, mahlen und filtern vom Rohmaterial zu sauberem Sand. +glass-processing=Sand zu Glas schmelzen. +rocket-silo=Ermöglicht den Start von Satelliten in den Weltraum um Raumfahrtforschung zu entwickeln und Himmelskörper zu entdecken. +se-adaptive-armour=Eine Rüstung die sich mit Energie selbst repariert. Erfüllt eine ähnliche Rolle wie das Energieschild mit weniger Energiebedarf aber langsamerer Regeneration. +se-antimatter-engine=Vernichtet Antimaterie um einen unglaublichen Schub zu erzeugen. +se-antimatter-reactor=Vernichtet Antimaterie mit Materie um große Hitze zu erzeugen. +se-antimatter-production=Erzeuge Antimaterie, die dichteste Form von gespeicherter Energie. +se-astronomic-science-pack=Erlaubt die Erforschung von Technologien für Weltraumreisen und interstellarer Logistik. +se-biological-science-pack=Erlaubt die Erforschung von Technologien zur Verbesserung deiner physikalischen Möglichkeiten, Bio-Waffen und neuronale Verarbeitung. +se-condenser-turbine=Ist 75% so energieeffizient wie eine Dampfturbine aber 99% des Dampfs wird als Wasser zurückgeliefert. +se-core-miner=Erlaubt eine endlose Extraktion von Ressourcen vom Kern des Planeten oder Mondes, aber hat abnehmende Erträge, wenn mehrere auf derselben Oberfläche verwendet werden. +se-biogun=Eine Schusswaffe, die verschiedene Biowaffen nutzen kann. +se-cryogun=Erzeuge eine Wand aus Eis um Gegnern einzufrieren. +se-deep-space-science-pack=Wird für die am meisten fortgeschrittenen Technologien benötigt. +se-deep-catalogue=Weltraumverzerrung, exotische Materie und Nano-Engineering-Daten, die für die Analyse und Computersimulation gedacht sind. Erforderlich für die fortschrittlichsten Technologien. +se-dimensional-anchor=Nutzt die Schwerkraft eines Sterns als Stabilisierungspunkt für eine räumliche Anomalie. +se-electric-boiler=Wandelt mit Hilfe von elektischer Energie Wasser in Dampf um. +se-energy-science-pack=Erlaubt die Erforschung von Technologien zu fundamentalen Kräften und subatomare Entdeckungen. +se-fluid-burner-generator=Benötigt flüssigen Treibstoff mit einem Energiewert (wie flüssigen Raketentreibstoff) um Elektrizität zu erzeugen. Einfach und kompakt aber energieineffizient im Vergleich zu Dampfturbinen. Entwickelt für den Weltraum. +se-fuel-refining=Raffiniert fortgeschrittene Treibstoffe. +se-heat-shielding=Eine zusammengesetzte Kachel für Hochtemperatur Anwendungen und Weltraumstrukturen. +se-long-range-star-mapping=Einige Ferngalaxien können durch spezifische Muster ungewöhnlicher Sterne identifiziert werden. Die Ergebnisse werden in [img=virtual-signal/informatron] InformaTron [__CONTROL__informatron__] protokolliert. +se-material-science-pack=Erlaubt die Erforschung von Technologien für fortgeschrittene Materialien für fortgeschrittene technische Anforderungen. +se-medpack=Verwende das Medpack um dich selbst zu heilen. +se-medpack-2=Verwende das Medpack um dich selbst zu heilen. +se-medpack-3=Verwende das Medpack um dich selbst zu heilen. +se-medpack-4=Verwende das Medpack um dich selbst zu heilen. +se-meteor-defence=Schieße Meteore vom Himmel bevor sie den Zeug zerstören. Eine Meteoriten-Verteidigungsanlage eine ganze Planetenoberfläche vor Meteoreinschlägen schützen, aber kann nur einen Schuss abgeben. +se-meteor-point-defence=Schieße Meteore vom Himmel bevor sie den Zeug zerstören. Eine Meteoriten-Punktverteidigungsanlage beschützt einen kleinen Bereich von bis zu 4 Meteore gleichzeitig. +se-nanomaterial=Eine komplizierte Anordnung verschiedener Materialien, die auf der Nanoskala organisiert sind, um einen Verbund mit überlegenen Eigenschaften herzustellen. +se-plague=Die große Seuche die jedes Leben auf einem Planeten auslöscht. Mit EXTREMER Vorsicht verwenden. +se-processing-beryllium=Aus Beryl wird Beryllium, ein extrem leichtes, starkes, korrosionsbeständiges und strahlungsbeständiges Metall. Es hat auch fast keine Wechselwirkung mit Röntgenstrahlen. +se-processing-cryonite=Verarbeitung gefrorener Kryonitkristalle zu Kryonitstäben, die Anwendungen in der Tiefkühlung, Kühlung und Schmierung haben. Kryonit kommt hauptsächlich auf gefrorenen Planeten vor. +se-processing-holmium=Verwandelt Holminit in Holmium, ein Seltenerdmetall mit der höchsten magnetischen Permeabilität aller Elemente. +se-processing-iridium=Umwandlung von Iridit in Iridium, das korrosionsbeständigste Metall und das dichteste Element bei höheren Temperaturen. Wichtig für Schwerlast Anwendungen. +se-processing-naquium=Verwandelt den mysteriösen Weltraum-Naquitit-Kristall in Naquium, ein metallähnliches Material mit ungewöhnlichen Raum-Zeit-Wechselwirkungen. +se-processing-vitamelange=Verwandelt den primitiven vitamelange Gesteinsschwamm in einen wertvollen Nährstoffextrakt. +se-processing-vulcanite=Umwandlung des vulkanischen Vulkanitkristalls in ein raffiniertes Pulver, das in fortschrittlichen Schmelz-, Raketentreibstoff- und anderen chemischen Hochtemperaturprozessen verwendet wird. Vulkanit kommt auf vulkanischen Planeten und in den meisten Kernfragmenten vor. +se-pulveriser=Pulverisiert und zerkleinert härtere Mineralien und Planetenkernfragmente. +se-railgun=Elektromagnetisch beschleunigte Geschosse angetrieben zu hoher Geschwindigkeit dass diese eine Plasmaspur hinterlassen bevor die vaporisieren. Hoher Schaden, niedrige Feuerrate. +se-rocket-cargo-safety=Verringert das Risiko, dass Frachtkapseln beim Transit beschädigt werden um 10% (multiplikativ) +se-rocket-fuel-from-water=Erzeugt Sauerstoff-Wasserstoff-Raketentreibstoff aus Wasser durch Elektrolyse. +se-rocket-launch-pad=Erlaubt den Start von Fracht in den Weltraum oder zu anderen Himmelskörpern. +se-rocket-landing-pad=Erlaubt die Anlieferung von Frachtraketen Kapseln an einen benannten Frachtanlieferungsplatz. Mit weiterer Forschung können mehr Raketenbauteile gerettet werden. +se-rocket-reusability=Erhöht die Prozentzahl der Teile die bei einer erfolgreichen Landung gerettet werden können um 4%. +se-rocket-survivability=Verringert das Risiko, dass Raketen im Transit Navigationsfehler haben und den Frachtanlieferungsplatz verpassen um 10% (multiplikativ). +se-rtg-equipment=Radioisotopen thermoelektrischer Generator. Ein tragbarer Generator der Hitze aus radioaktivem Zerfall in Elektrizität umwandelt. Die Energie reicht jahrzehntelang, es wird kein zusätzlicher Treibstoff benötigt. +se-rtg-equipment-2=Radioisotopen thermoelektrischer Generator. Ein verbesserter tragbarer Generator der Hitze aus radioaktivem Zerfall in Elektrizität umwandelt. Die Energie reicht jahrzehntelang, es wird kein zusätzlicher Treibstoff benötigt. +se-space-assembling=Eine modifizierte Montagemaschine die auch im Weltraum funktioniert. +se-space-astrometrics-laboratory=Verbindet, vergleicht und quantifiziert unterschiedliche Quellen von astronomischer Informationen. +se-space-biochemical-laboratory=Ein fortgeschrittenes chemisches Labor mit Spezialisierung in Bio-Chemie. Kann auch einfache chemische Prozesse und Ölverarbeitung durchführen. +se-space-catalogue-astronomic=Strukturierte astronomische Daten, vorbereitet für Analyse und Computersimulation. Benötigt für weitere astronomische Forschung. +se-space-catalogue-biological=Strukturierte biologische Daten, vorbereitet für Analyse und Computersimulation. Benötigt für weitere biologische Forschung. +se-space-catalogue-universal=Kombinierte Daten für Analyse und Computersimulation. Erforderlich für die weitere Weltraumforschung. +se-space-catalogue-energy=Strukturierte energetische Daten, vorbereitet für Analyse und Computersimulation. Benötigt für weitere energetische Forschung. +se-space-catalogue-material=Strukturierte Material Daten, vorbereitet für Analyse und Computersimulation. Benötigt für weitere Material Forschung. +se-space-data-card=Eine Mehrzweck Datenspeicherkarte, Benötigt für weiter fortgeschrittene datengetriebene Forschung. +se-space-decontamination-facility=Reinigt Substanzen für die Verwendung in sterilen Umgebungen und bearbeitet Flüssigkeiten für die Verwendung in Niedrigdruckverhältnissen. +se-space-electromagnetics-laboratory=Anlage für enorme Magnetfeld- und extreme Hochspannungsanwendungen. +se-space-genetics-laboratory=Ein Labor für genetische Sequenzierung, Modifikation und Prägung von Bio-Kulturen. +se-space-gravimetrics-laboratory=Analysiert und simuliert Störungen in der Schwerkraft. +se-space-growth-facility=Züchtet biologische Proben unter kontrollierten Bedingungen, die nirgendwo anders herrschen wie etwa Niedrigschwerkraft. +se-space-hypercooling=Vollzieht einen Temperaturaustausch im Thermofluid, in dem es einen Teil heißer macht und einen Teil kälter. +se-space-laser-laboratory=Laserexperimete. Augenschutz dringend empfohlen. +se-lifesupport-facility=Aufrechterhaltung des Lebens in feindlicheren Umgebungen. +se-space-manufactory=Eine Schlüsseltechnologie für die Massenproduktion im Weltraum. +se-space-material-fabricator=Synthetisiert neue Materialien. Eine Kreuzung zwischen Teilchenbeschleuniger und 3D Drucker. +se-space-matter-fusion=Herstellung von Materialien durch Fusion. +se-space-mechanical-laboratory=Bietet eine Reihe von mechanischen Prozessen: Zerkleinern, Zerreißen, Scheren, Vibrieren usw. +se-space-particle-accelerator=Beschleunigt Partikel auf annähernd Lichtgeschwindigkeit. +se-space-particle-collider=Läßt Partikel kollidieren und analysiert die Ergebnisse. +se-space-plasma-generator=Erzeugt unterschiedliche Plasmaströme. +se-space-platform-plating=Robuste Weltraumplattform Beschichtung. Eben und für den schnellen Weltraumspaziergang. +se-space-platform-scaffold=Basis Gerüst für die Raumplattform. Etwas auf das man bauen kann aber nicht gut geeignet für den Weltraumspaziergang. +se-space-radiation-laboratory=Ein relativ sicherer Ort zum Arbeiten mit radioaktivem Material. Kann für Uranverarbeitung verwendet werden. +se-space-radiator=Leitet überschüssige Wärme von überhitztem Thermofluid ab. +se-space-radiator-2=Leitet überschüssige Wärme von überhitztem Thermofluid ab. +se-space-rail=Schienen zur sicheren Verwendung im Weltraum, die Verhindern dass Züge davonfliegen und alles zerstören. Können aus ästhetischen Gründen auch auf der Oberfläche verwendet werden. +se-recycling-facility=Verschrottung von Gegenständen und Wiederaufbereitung von Schrott zu Rohstoffen. +se-space-science-lab=Erlaubt die Verarbeitung von Raumfahrtforschung und weiter fortgeschrittener Weltraumforschung. +se-space-simulation-ab=Effizientere Simulation durch Kombination von mehreren Disziplinen. +se-space-simulation-am=Effizientere Simulation durch Kombination von mehreren Disziplinen. +se-space-simulation-as=Effizientere Simulation durch Kombination von mehreren Disziplinen. +se-space-simulation-bm=Effizientere Simulation durch Kombination von mehreren Disziplinen. +se-space-simulation-sb=Effizientere Simulation durch Kombination von mehreren Disziplinen. +se-space-simulation-sm=Effizientere Simulation durch Kombination von mehreren Disziplinen. +se-space-simulation-abm=Effizientere Simulation durch Kombination von mehreren Disziplinen. +se-space-simulation-asb=Effizientere Simulation durch Kombination von mehreren Disziplinen. +se-space-simulation-asm=Effizientere Simulation durch Kombination von mehreren Disziplinen. +se-space-simulation-sbm=Effizientere Simulation durch Kombination von mehreren Disziplinen. +se-space-simulation-asbm=Effizientere Simulation durch Kombination von mehreren Disziplinen. +se-space-solar-panel=Ein hocheffizientes Solarpanel für den Weltraum. +se-space-spectrometry-facility=Spektralphotometrie, Gaschromatographie, Massenspektronomie und andere Spektronomien. Schießt Zeug gegen eine Wand, biegt es, bricht es und schaut wo es trifft. +se-space-supercomputer=Erlaubt weiterfortgeschrittene Datenmanipulation, Verarbeitung und Simulation. +se-space-telescope=Ein hochentwickeltes Teleskop für viele Wellenlängen rund um das sichtbare Spektrum. +se-space-telescope-gammaray=Gammastrahlen können nicht abgelenkt werden. Dieses leistungsfähige Teleskop verwendet stattdessen spezielle Detektoren. +se-space-telescope-xray=Röntgenstrahlung wird von den meisten Atmosphären blockiert. Dieses leistungsfähige Teleskop ist für den Weltraum entwickelt wo die Atmossphäre keine Rolle spielt. +se-space-telescope-microwave=Ein gigantisches Teleskop das Mikrowellen und die kosmische Hintergrundstrahlung messen kann. +se-space-telescope-radio=Ein gigantisches Teleskop das sehr schwache Radiowellen aus weit entfernten Quellen messen kann. +se-space-thermodynamics-laboratory=Unterstützt Anwendungen für extreme Temperaturen. Kann auch einfache Vorgänge, wie etwa Schmelzen, durchführen. +se-spaceship=Ein Schiff das Stück für Stück aus Boden und Wänden gebaut wird, verwende die Konsole um zu einem anderen Planeten oder darüber hinaus zu fliegen. +se-spaceship-integrity=Jedes Level erhöht das maximale strukturelle Integritätsstresslimit des Raumschiffs um 100. +se-factory-spaceship=Jedes Level erhöht das maximale strukturelle Integritätsstresslimit des Raumschiffs um 500. +se-superconductive-cable=Ein supraleitendes Kabel das keine aktive Kühlung benötigt. +se-teleportation=Entsperrt weitere Teleportationstechnologie. Es hat sich herausgestellt dass das sichere Verkrümmen des Weltraums in diesem Ausmaß wirklich schwer ist. +se-tesla-gun=Kettenblitz-Schnellfeuer-Waffe. Kann bis zu 30 Gegner pro Blitz treffen. Kann weite Sprünge zwischen den Gegnern machen oder kurze am Boden wenn keine Gegner vorhanden sind. +se-thruster-suit=Ein Raumanzug mit Schubdüsen und magnetische Schuhen. Gehe nicht in den Weltraum ohne ihn. +space-science-pack=Erlaubt die Herstellung von Wissenschaftspaketen für Raumfahrt und Technologien die von dieser Forschung profitieren. +se-aeroframe-pole=Eine starke, leichte Berylliumstange, die häufig als Stützbalken für die Luft- und Weltraumforschung verwendet wird. +se-aeroframe-scaffold=Ein starker, leichter Beryllium-Strukturrahmen, der üblicherweise als Hauptinnenskelett für Luft- und Raumfahrtschiffe verwendet wird. +se-aeroframe-bulkhead=Eine starke, leichte, luftdichte Berylliumwand, die als Außenhaut oder sekundäre Kammerwände von Luft- und Weltraumforschungsschiffen verwendet wird. +se-lattice-pressure-vessel=Ein starker, leichter Beryllium-Druckbehälter mit einem Innengitter, das bestimmte Flüssigkeiten über ihre normalen Grenzen hinaus komprimieren lässt. Bei einem Bruch wird die unter Druck stehende Flüssigkeit sicher entlüftet. +se-heavy-girder=Ein schwerer Iridium-Strukturträger, der hauptsächlich für die Schwerindustrie und schwere Militärschiffe verwendet wird. +se-heavy-bearing=Ein großes schweres Iridiumlager, das bei Kräften, die schwächere Materialien zerquetschen würden, auf unbestimmte Zeit funktionieren kann. +se-heavy-composite=Ein dickes, fast undurchdringliches Schott, das praktisch immun gegen Hitze, Korrosion, Strahlung und mechanische Kraft ist, aber unglaublich schwer ist. +se-heavy-assembly=Eine schwere mechanische Baugruppe aus Getrieben und konfigurierbaren Komponenten, die für die Schwerindustrie verwendet wird. +se-bioscrubber=Eine Materialverarbeitungskammer, die biologische Prozesse nutzt, um unerwünschte Materialien abzubauen. +se-vitalic-epoxy=Ein unglaublich starkes Epoxid aus Bio-Quellen mit regenerativen Eigenschaften. +se-vitalic-reagent=Ein effizientes Mehrzweckreagenz für eine Vielzahl chemischer Reaktionen. +se-vitalic-acid=Ein starker Cocktail aus verschiedenen Säuren. +se-self-sealing-gel=Unter Druck ein zähflüssiges Gel, aber im Vakuum fest wie Stahl. Wird oft als Innenfolie in Schotten verwendet, um Löcher passiv abzudichten. +se-holmium-cable=Ein ummanteltes Kabel, das speziell entwickelt wurde, um unerwünschtes Rauschen in der Leitung zu eliminieren, das empfindliche Elektronik stören kann. +se-holmium-solenoid=Ein extrem starker Elektromagnet. +se-quantum-processor=Nutzt Superposition und Verschränkung, um hochkomplexe Probleme effizienter zu bearbeiten. +se-dynamic-emitter=Ein schnell einstellbares Licht- oder Partikelemittersystem, das eine Reihe von Eigenschaften für eine größere Reichweite, Scanmodi oder Materialdurchdringungseigenschaften ändern kann. +se-naquium-processor=Die Berechnung innerhalb eines Naquium-Tesserakts umgeht einige der üblichen Beschränkungen der Berechnungsdichte. +se-naquium-cube=Nutzung der ungewöhnliche Interaktion von Naquium mit der Raumzeit, um ein großes Volumen zu einem kleinen Würfel zu falten. +se-naquium-tessaract=Ein eigentümliches Objekt, das sich in eine würfelähnliche Form einfügt, sich jedoch bei Drehung oder Beschleunigung in eine Reihe anderer geometrischer Formen verschiebt. +se-wide-beacon=Der Großbereich Effektverteiler überträgt die Effekte von Modulen auf nahe gelegene befreundete Einheiten innerhalb von 14 Feldern. Hat 15 Modulsteckplätze oder 20 bei Upgrade. Wenn mehrere Effektverteiler dasselbe Objekt beeinflussen, überlasten diese jene und verhindern deren Betrieb. +se-wide-beacon-2=Der Großbereich Effektverteiler 2 überträgt die Effekte von Modulen an nahe gelegene befreundete Einheiten innerhalb von 14 Feldern. Hat 20 Modulsteckplätze. Wenn mehrere Effektverteiler dasselbe Objekt beeinflussen, überlasten diese jene und verhindern deren Betrieb. +se-lifesupport-equipment-1=Erhöht die lebenserhaltende Effizienz um +100% (additiv). Bei Installation in einem Nicht-Raumanzug wird der Effizienzbonus halbiert und funktioniert außerdem nicht im Weltraum. +se-lifesupport-equipment-2=Erhöht die lebenserhaltende Effizienz um +200% (additiv). Bei Installation in einem Nicht-Raumanzug wird der Effizienzbonus halbiert und funktioniert außerdem nicht im Weltraum. +se-lifesupport-equipment-3=Erhöht die lebenserhaltende Effizienz um +400% (additiv). Bei Installation in einem Nicht-Raumanzug wird der Effizienzbonus halbiert und funktioniert außerdem nicht im Weltraum. +se-lifesupport-equipment-4=Erhöht die lebenserhaltende Effizienz um +800% (additiv). Bei Installation in einem Nicht-Raumanzug wird der Effizienzbonus halbiert und funktioniert außerdem nicht im Weltraum. +se-supercharger=Kann bis zu 64 Roboter gleichzeitig mit hoher Geschwindigkeit aufladen. Die maximale Leistungsaufnahme der Struktur beträgt 1 GW. +se-addon-power-pole=Ein kleiner Strommast gedacht um an Gebäuden angebracht zu werden oder zur präzisen Kontrolle der elektrischen Abdeckung. +se-pylon=Verteilt elektrische Energie. 64 Kacheln Verbindungreichweite. +se-pylon-substation=Verteilt elektrische Energie. 64 Kacheln Anschlussbereich, 64x64 Energieversorgungsbereich +se-pylon-construction=Verteilt elektrische Energie und erweitert die Baufläche. 64 Kacheln Anschlussbereich, 64x64 Baubereich. +se-pylon-construction-radar=Verteilt elektrische Energie, erweitert den Baubereich und bietet Radarsicht. 64-Kachel-Verbindungsbereich, 256x256 Konstruktions- und Sichtbereich. 4x4 Logistikbereich. +se-shield-projector=Erzeugt ein schützendes Kraftfeld. Wenn der Projektor aufgeladen wird oder die Abschirmung beschädigt wird, wird mehr Energie benötigt. Kann feindliche Projektile blockieren, wenn der Mod "Combat Mechanics Overhaul" installiert ist. +se-deep-space-transport-belt=Schnelle Langstreckentransportbänder, die im Weltraum platziert werden können. Verschiedene Farben können verwendet werden, um Linien aus der Ferne leichter zu erkennen. +se-big-turbine=Ein großer 1-GW-Generator, der 5000 ° C Dampf aufnimmt, am anderen Ende 500 ° C Dampf ausgibt und an den Seiten Wasser ausgibt. 99% energieeffizient, 99% Wassereinsparung. +se-big-heat-exchanger=Ein großer Wärmetauscher, der für hohe Temperaturen und hohe Kapazität ausgelegt ist. +se-zone-discovery-random=Suchen Sie mit Teleskopen nach Planeten, Monden und Asteroidengürteln. +se-zone-discovery-targeted=Suche nach Planeten, Monden und Asteroidengürteln, die über bestimmte Ressourcen verfügen. Wähle die Ressourcenpräferenz in [img=virtual-signal/informatron] InformaTron > Zonenerkennung. +se-zone-discovery-deep=Suchen Sie nach interessanten Bereichen des tiefen interstellaren Raums. Asteroidenfelder können viele einzigartige und wertvolle Ressourcen enthalten. +se-delivery-cannon=Eine Railgun, die Ressourcen in den Orbit und darüber hinaus schießen kann, und eine gepanzerte Truhe, um diese aufzufangen. +se-delivery-cannon-capsule-iridium=Obwohl Iridium ein Schwermetall ist, bedeutet die erhöhte Haltbarkeit, dass im Vergleich zu einer Standardkapsel weniger Material verwendet werden kann. Das Gesamtgewicht ist gleich, aber einfacher herzustellen. +se-delivery-cannon-weapon=Eine große Railgun, die spezielle Munition, wie eine Atombombe, auf andere Oberflächen schießen kann. +se-spaceship-clamps=Ermöglicht das Platzieren von Andockklemmen, damit Raumschiffe an einer bestimmten Position ankern können, indem Sie die Klemmenpositionen aufeinander abstimmen. Die Automatisierung erfordert die Signale "Anchor using" und "Anchor to", die in die Konsole eingespeist werden. +se-bio-upgrade-constitution=Erhöht die maximale Gesundheit. +se-bio-upgrade-strength=Erhöht die Tragfähigkeit. +se-bio-upgrade-agility=Erhöht die Bewegungsgeschwindigkeit. +se-bio-upgrade-dexterity=Erhöht die Herstellungsgeschwindigkeit. +se-bio-upgrade-intelligence=Erhöht den Lernerfolg jedes Wissenschaftspakets. +se-energy-beaming=Ein intensiver Energiestrahl, der als Waffe aus dem Himmel verwendet werden kann oder um Kraft dorthin zu übertragen, wo sie benötigt wird. +se-energy-beam-defence=Schützt vor weltraumgestützten Energiestrahlen und koronalen Massenauswürfen. Funktioniert, indem magnetische Partikel in eine schützende Blase schweben und dann die Partikel nach Bedarf neu ausgerichtet und verklumpt werden, um feindliche Energiestrahlen zu zerstreuen. +se-nexus=Ein Gerät, das auf einem Raumschiff aktiviert werden kann, das sich im interstellaren Raum bewegt, um Daten zu generieren, und mit zusätzlicher Technologie ein Weltraumverzerrungsfeld (Spaceship Victory) aktivieren kann. +se-spaceship-victory=Ermöglicht dem Nexus, einen Verzerrungsantrieb zu aktivieren, um dem lokalen Sternhaufen zu entkommen. Lass einen Nexus im Distortion Driver-Modus auf einem 3000+ Integritätsraumschiff laufen, das sich 60 Sekunden lang mit 250 Geschwindigkeit im interstellaren Raum bewegt, um das Spiel zu gewinnen. +se-arcosphere=Ermöglicht das Sammeln von Arkosphären, die in der interstellaren Leere verloren gegangen sind. +se-arcosphere-folding=Ermöglicht die Verwendung von Arkosphären als extradimensionale Pinzetten. +se-space-probe=Ein Raketensilo im Weltraum zum Starten von Raumsonden. Kann auch verwendet werden, um kostengünstig Satelliten zu starten. +se-linked-container=Ein Container, der durch extradimensionalen Raum mit anderen Containern verbunden ist. Die Glieder des Containers hängen von der Oberfläche ab, auf der er zuerst platziert wird. +se-space-radiating=Langsameres, aber ressourcenschonenderes Abkühlen von überhitztem Thermofluid. +se-thruster-suit-2=Ein verbesserter Raumanzug mit stärkeren Schubdüsen, größerem Inventar und einem größeren Ausrüstungsgitter. +se-thruster-suit-3=Ein verbesserter Raumanzug mit stärkeren Schubdüsen, größerem Inventar und einem größeren Ausrüstungsgitter. +se-thruster-suit-4=Ein verbesserter Raumanzug mit stärkeren Schubdüsen, größerem Inventar und einem größeren Ausrüstungsgitter. +effect-transmission=Der Effektverteiler überträgt die Effekte von Modulen an nahe gelegene befreundete Einheiten innerhalb von 3 Feldern. Hat 8 Modulsteckplätze. Wenn mehrere Effektverteiler dasselbe Objekt beeinflussen, überlasten diese jene und verhindern deren Betrieb. + +[modifier-description] +tesla-shooting-speed-bonus=Tesla Schussgeschwindigkeit +tesla-damage-bonus=Tesla Schadensbonus +railgun-damage-bonus=Railgun Schadensbonus +railgun-shooting-speed-bonus=Railgun Schussgeschwindigkeit +cryogun-shooting-speed-bonus=Kryokanone Schussgeschwindigkeit +cryogun-damage-bonus=Kryokanone Schadensbonus +character-running-speed=Charakter Laufgeschwindigkeitsbonus: +__1__ +character-crafting-speed=Charakter Herstellungsgeschwindigkeit: +__1__ + +[virtual-signal-name] +signal-speed=Geschwindigkeitssignal +se-signal-speed=Geschwindigkeitssignal +signal-distance=Entfernungssignal +se-signal-distance=Entfernungssignal +se-star=Stern +se-planet=Planet +se-planet-orbit=Planetarerorbit +se-moon=Mond +se-moon-orbit=Mondorbit +se-asteroid-belt=Asteroidengürtel +se-asteroid-field=Asteroidenfeld +se-anomaly=Anomalie +se-meteor=Meteor +se-spaceship=Raumschiff +se-cargo-rocket=Frachtrakete +se-remote-view=Fernansicht +se-death=Tod +se-character-corpse=Körper +se-ruin=Ruine +se-accolade=Akkolade +se-remove=Entfernen +se-radius=Radius +se-hierarchy=Hierarchie +se-spaceship-launch=Raumschiffstart +se-anchor-using-left-clamp=Anker mit linker Klemme des Raumschiffs +se-anchor-using-right-clamp=Anker mit rechter Klemme des Raumschiffs +se-anchor-to-left-clamp=Anker zum Zielen auf linke Klammer +se-anchor-to-right-clamp=Anker zum Zielen auf rechte Klammer +se-beacon-overload=Effektverteiler Überladung +se-heat=Hitze +se-pin=Pin + +[controls] +se-remote-view=Navigationssatelliten-Sicht +se-remote-view-pins=Navigationssatelliten-Pins +se-remote-view-next=Navigationsverlauf Nächstes +se-remote-view-previous=Navigationsverlauf Vorheriges +se-universe-explorer=Universums Explorer +se-respawn=Respawn +se-mode-toggle=Struktur-Betriebsmodus umschalten +se-pin-one=Gehe zu Pin 1 +se-pin-two=Gehe zu Pin 2 +se-pin-three=Gehe zu Pin 3 +se-pin-four=Gehe zu Pin 4 +se-pin-five=Gehe zu Pin 5 +se-pin-six=Gehe zu Pin 6 +se-pin-seven=Gehe zu Pin 7 +se-pin-eight=Gehe zu Pin 8 +se-pin-nine=Gehe zu Pin 9 +se-pin-zero=Gehe zu Pin 0 +se-pin-set-one=Setze Pin 1 +se-pin-set-two=Setze Pin 2 +se-pin-set-three=Setze Pin 3 +se-pin-set-four=Setze Pin 4 +se-pin-set-five=Setze Pin 5 +se-pin-set-six=Setze Pin 6 +se-pin-set-seven=Setze Pin 7 +se-pin-set-eight=Setze Pin 8 +se-pin-set-nine=Setze Pin 9 +se-pin-set-zero=Setze Pin 0 + +[shortcut] +se-remote-view=Navigationssatelliten-Sicht +se-remote-view-pins=Navigationssatelliten-Pins +se-universe-explorer=Universums Explorer +se-respawn=Respawn +se-pin-one=Gehe zu Pin 1 +se-pin-two=Gehe zu Pin 2 +se-pin-three=Gehe zu Pin 3 +se-pin-four=Gehe zu Pin 4 +se-pin-five=Gehe zu Pin 5 +se-pin-six=Gehe zu Pin 6 +se-pin-seven=Gehe zu Pin 7 +se-pin-eight=Gehe zu Pin 8 +se-pin-nine=Gehe zu Pin 9 +se-pin-zero=Gehe zu Pin 0 +se-pin-set-one=Setze Pin 1 +se-pin-set-two=Setze Pin 2 +se-pin-set-three=Setze Pin 3 +se-pin-set-four=Setze Pin 4 +se-pin-set-five=Setze Pin 5 +se-pin-set-six=Setze Pin 6 +se-pin-set-seven=Setze Pin 7 +se-pin-set-eight=Setze Pin 8 +se-pin-set-nine=Setze Pin 9 +se-pin-set-zero=Setze Pin 0 + +[shortcut-name] +se-remote-view=Navigationssatelliten-Sicht [__CONTROL__se-remote-view__] +se-remote-view-pins=Navigationssatelliten-Pins [__CONTROL__se-remote-view-pins__] +se-universe-explorer=Universums Explorer [__CONTROL__se-universe-explorer__] +se-respawn=Respawn [__CONTROL__se-respawn__] +se-pin-one=Gehe zu Pin 1 [__CONTROL__se-pin-one__] +se-pin-two=Gehe zu Pin 2 [__CONTROL__se-pin-two__] +se-pin-three=Gehe zu Pin 3 [__CONTROL__se-pin-three__] +se-pin-four=Gehe zu Pin 4 [__CONTROL__se-pin-four__] +se-pin-five=Gehe zu Pin 5 [__CONTROL__se-pin-five__] +se-pin-six=Gehe zu Pin 6 [__CONTROL__se-pin-six__] +se-pin-seven=Gehe zu Pin 7 [__CONTROL__se-pin-seven__] +se-pin-eight=Gehe zu Pin 8 [__CONTROL__se-pin-eight__] +se-pin-nine=Gehe zu Pin 9 [__CONTROL__se-pin-nine__] +se-pin-zero=Gehe zu Pin 0 [__CONTROL__se-pin-zero__] +se-pin-set-one=Setze Pin 1 [__CONTROL__se-pin-set-one__] +se-pin-set-two=Setze Pin 2 [__CONTROL__se-pin-set-two__] +se-pin-set-three=Setze Pin 3 [__CONTROL__se-pin-set-three__] +se-pin-set-four=Setze Pin 4 [__CONTROL__se-pin-set-four__] +se-pin-set-five=Setze Pin 5 [__CONTROL__se-pin-set-five__] +se-pin-set-six=Setze Pin 6 [__CONTROL__se-pin-set-six__] +se-pin-set-seven=Setze Pin 7 [__CONTROL__se-pin-set-seven__] +se-pin-set-eight=Setze Pin 8 [__CONTROL__se-pin-set-eight__] +se-pin-set-nine=Setze Pin 9 [__CONTROL__se-pin-set-nine__] +se-pin-set-zero=Setze Pin 0 [__CONTROL__se-pin-set-zero__] + +[tile-name] +se-space-platform-plating=Weltraumplattform Beschichtung +se-space-platform-scaffold=Weltraumplattform Gerüst +se-space-platform-underlay=Weltraum +se-space-platform-underlay-l=Weltraum +se-space-platform-underlay-r=Weltraum +se-space=Leerer Weltraum +se-regolith=Regolith +se-asteroid=Asteroid +se-spaceship-floor=Raumschiffboden + +[mod-setting-name] +se-meteor-interval=Meteorschauer Intervall +se-plague-max-runtime=Seuchen maximale Laufzeit +se-planets=Anzahl von Planeten +se-planet-size=Planetengröße (1% to 10000%) +se-seed=Planeten Generierungsseed +se-skip-experimental-warning=Experimental Warnungsmeldung nicht anzeigen. +se-print-meteor-info=Meteoreinschlagsalarme in der Konsole ausgeben. +se-print-satellite-discovered-nothing=Warnung, wenn der Satellit nichts entdeckt +se-space-pipe-capacity=Weltraumrohrkapazität +se-electric-boiler=Elektrischer Heizkessel +se-deep-space-belt-speed=Weltraum-Förderband Geschwindigkeit +se-deep-space-belt-black=Schwarzes Weltraum-Förderband +se-deep-space-belt-white=Weißes Weltraum-Förderband +se-deep-space-belt-red=Rotes Weltraum-Förderband +se-deep-space-belt-yellow=Gelbes Weltraum-Förderband +se-deep-space-belt-green=Grünes Weltraum-Förderband +se-deep-space-belt-cyan=Türkises Weltraum-Förderband +se-deep-space-belt-blue=Blaues Weltraum-Förderband +se-deep-space-belt-magenta=Lila Weltraum-Förderband +se-space-science-pack=Fallback für das Weltraumforschungspaket +se-never-show-lifesupport=Lebenserhaltungs-GUI nie anzeigen +se-show-zone-preview=Zonenvorschaufenster anzeigen +se-pylon-charge-points=Bau-Pylon Ladepunkte +se-cmes-max-frequency=max. Intervall des Koronalen Massenauswurf +se-spawn-small-resources=Bonus-Startressourcen-Felder +se-show-overhead-button-satellite-mode=Overhead-Schaltfläche Nav-Sat-Uplink anzeigen +se-show-overhead-button-interstellar-map=Overhead-Schaltfläche Interstellare Karte anzeigen +se-show-overhead-button-universe-explorer=Overhead-Schaltfläche Universums Explorer anzeigen +se-show-pin-help-tooltip=Hilfe-Tooltip über Pin-Buttons anzeigen +se-scan-search-budget=Scan-Suchen-Budget +se-scan-chart-budget=Scan-Chart-Budget +se-scan-alert-interval=Scan-Warnintervall +se-supercharger-individual-charge-rate=Supercharger individuelle Port-Laderate (MW) + +[mod-setting-description] +se-meteor-interval=Das Basisinterval in Minuten zwischen Meteorschauern. Der nächste Meteorschauer erfolgt in einem zufälligen Abstand in Minuten zwischen 1 und diesem Wert. +se-plague-max-runtime=Die maximale Laufzeit der Seuchenwaffe in Minuten. Nachdem die Seuche für diese Dauer angehalten hat sind alle Seuchenpartikel, Bäume und Gegner zerstört. +se-planets=Nicht während einer teilweise durchspielten Kampagne ändern. +se-planet-size=Nicht während einer teilweise durchspielten Kampagne ändern. +se-seed=Nicht während einer teilweise durchspielten Kampagne ändern. +se-skip-experimental-warning=Die Warnung wird beim Starten eines neuen Spiels nicht angezeigt und du erhältst keine geänderten Warnungen, falls sich die Meldung ändert. +se-print-meteor-info=Zeigt die Meteoriteneinschlagsalarme in der Konsole(Taste: __CONTROL__toggle-console__) an, auch nachdem der Alarm ausgeblendet wurde. +se-print-satellite-discovered-nothing=Wenn ein Satellit gestartet wird, erhälst du eine Warnung, die dir mitteilt, was entdeckt wurde. Diese Einstellung kann die Warnung deaktivieren, wenn nichts gefunden wurde. +se-space-pipe-capacity=Die Flüssigkeitenapazität in Weltraumrohren. +se-electric-boiler=Füge dem Spiel einen elektrischen Heizkessel hinzu. +se-deep-space-belt-speed=Weltraum-Förderbänder sollen die schnellsten Förderbänder sein. Wenn du andere Mods hast, die schnellere Förderbänder hinzufügen, kannst du die Geschwindigkeit der Weltraum-Förderbänder erhöhen, um sie zu erreichen oder zu überschreiten. +se-deep-space-belt-black=Rezepte der schwarzen Transportbänder, Splitter und Untergrundbänder können deaktiviert werden, um die Unordnung der Benutzeroberfläche zu reduzieren. +se-deep-space-belt-white=Rezepte der weißen Transportbänder, Splitter und Untergrundbänder können deaktiviert werden, um die Unordnung der Benutzeroberfläche zu reduzieren. +se-deep-space-belt-red=Rezepte der roten Transportbänder, Splitter und Untergrundbänder können deaktiviert werden, um die Unordnung der Benutzeroberfläche zu reduzieren. +se-deep-space-belt-yellow=Rezepte der gelben Transportbänder, Splitter und Untergrundbänder können deaktiviert werden, um die Unordnung der Benutzeroberfläche zu reduzieren. +se-deep-space-belt-green=Rezepte der grünen Transportbänder, Splitter und Untergrundbänder können deaktiviert werden, um die Unordnung der Benutzeroberfläche zu reduzieren. +se-deep-space-belt-cyan=Rezepte der türkisen Transportbänder, Splitter und Untergrundbänder können deaktiviert werden, um die Unordnung der Benutzeroberfläche zu reduzieren. +se-deep-space-belt-blue=Rezepte der blauen Transportbänder, Splitter und Untergrundbänder können deaktiviert werden, um die Unordnung der Benutzeroberfläche zu reduzieren. +se-deep-space-belt-magenta=Rezepte der lila Transportbänder, Splitter und Untergrundbänder können deaktiviert werden, um die Unordnung der Benutzeroberfläche zu reduzieren. +se-space-science-pack=Wenn eine andere Mod einen Weg zur Weltraumforschung hinzufügt, wird diese Methode verwendet. Wenn es keine Möglichkeit gibt, kann Space Exploration es entweder entfernen oder als Optimierungs-Wissenschaftspaket verwenden. +se-never-show-lifesupport=Wenn diese Option aktiviert ist, wird die Lebenserhaltungs-GUI nie angezeigt, selbst wenn Sie ersticken. +se-show-zone-preview=Deaktiviere das Kontrollkästchen, um das Zonenvorschaufenster im Universums-Explorer zu deaktivieren. Wenn einige der Debug-Overlays von Factorio aktiv sind, kann das Vorschaufenster die FPS reduzieren. +se-pylon-charge-points=Deaktivieren Sie das Kontrollkästchen, um Ladepunkte von Baumasten zu entfernen. Dies hilft, das Ladeverhalten der Bots zu kontrollieren, aber Sie müssen möglicherweise andere Ladeoptionen auf Langstreckenrouten hinzufügen. +se-cmes-max-frequency=Das maximale Intervall für die Wiederholung koronaler Massenauswürfe (CMEs). Der Wert ist in Stunden, 0 = deaktiviert. Das erste CME ist auf die erste Minute des Spiels gescriptet und meist harmlos. Die zweite verzögert sich um etwa 48 Stunden. Die Verzögerung zwischen den Wiederholungen liegt zwischen 50 % und 100 % der maximalen Intervalleinstellung. Eine Einstellung ungleich Null gilt nur für neue Ereignisse; Sobald eine ETA festgelegt wurde, ist sie nicht betroffen. Bei einer Nulleinstellung werden alle geplanten CMEs gelöscht, es kann jedoch bis zu einer Minute dauern, bis die Änderung wirksam wird. +se-spawn-small-resources=Fügt dem Startbereich einige zusätzliche kleine Ressourcen-Felder hinzu. Die Ressourcen-Felder befinden sich in einem Cluster, um die Laufzeit zwischen den Ressourcen zu reduzieren. +se-show-overhead-button-satellite-mode=Zeigt eine kleine Schaltfläche oben links auf dem Bildschirm an, um den Navigationssatelliten-Uplink umschalten zu können. +se-show-overhead-button-interstellar-map=Zeigt eine kleine Schaltfläche oben links auf dem Bildschirm an, um die interstellare Karte umschalten zu können. +se-show-overhead-button-universe-explorer=Zeigt eine kleine Schaltfläche oben links auf dem Bildschirm an, um den Universums Explorer umschalten zu können. +se-show-pin-help-tooltip=Zeigt eine erweiterte QuickInfo auf den Pin-Schaltflächen an, die Anweisungen zu deren Verwendung enthält. +se-scan-search-budget=Satellitensuche: Die Anzahl der Chunks, die auf den chart-status überprüft werden können. Hohe Werte lassen es durch bereits gescannte Chunks schnellen, um an die unerforschte Kante zu gelangen. +se-scan-chart-budget=Satellitenscannen: Die Anzahl an Chunk-Anfragen, die parallel zum chart-Puffer hinzugefügt werden können. Es werden keine neuen Chart-Anfragen gestellt, wenn die vorherigen Chunks noch nicht fertig sind. +se-scan-alert-interval=Das Intervall in Sekunden zwischen Aktualisierungswarnungen für Oberflächenscans. Das Aufdecken von Oberflächen erhöht die Dateigröße des Spielstands, daher ist es am besten, sie nicht einzuschalten und zu vergessen. +se-supercharger-individual-charge-rate=Legt die Laderate jedes einzelnen Ladeanschlusses im Supercharger in MW fest (hat keinen Einfluss auf die maximale Laderate). Der minimale (Standard-) Wert beträgt 90 MW, genug, um einen Vanilla-Roboter in einem Tick aufzuladen, bis zu 1000 MW oder 1 GW, die maximale Laderate des Superchargers. + +[string-mod-setting] +se-space-science-pack-Remove=Vollständig entfernen +se-space-science-pack-Replace=Durch Raketenwissenschaftspaket ersetzen +se-space-science-pack-OptimisationUranium=Optimierung: Uran-Kryo-Rezept +se-space-science-pack-OptimisationFish=Optimierung: Vita-Vulca-Fisch-Rezept + +[autoplace-control-names] +planet-size=[img=virtual-signal/se-planet] Planetengröße +se-water-ice=[img=item/se-water-ice] Wassereis (nur im Weltraum, die Schieber haben keine Auswirkung) +se-methane-ice=[img=item/se-methane-ice] Methaneis (nur im Weltraum, die Schieber haben keine Auswirkung) +se-cryonite=[img=item/se-cryonite] Kryonit (nicht auf Heimatwelten) +se-vulcanite=[img=item/se-vulcanite] Vulcanit (nicht auf Heimatwelten) +se-vitamelange=[img=item/se-vitamelange] Vitamelange (nicht auf Heimatwelten) +se-beryllium-ore=[img=item/se-beryllium-ore] Beryllium-Erz (nicht auf Heimatwelten) +se-holmium-ore=[img=item/se-holmium-ore] Holmium-Erz (nicht auf Heimatwelten) +se-iridium-ore=[img=item/se-iridium-ore] Iridium-Erz (nicht auf Heimatwelten) +se-naquium-ore=[img=item/se-naquium-ore] Naquium-Erz (nur im Weltraum) + +[map-gen-preset-name] +space-exploration=Space Exploration Voreinstellung + +[map-gen-preset-description] +space-exploration=Standardeinstellung für Space Exploration + +[tooltip-category] +shot=Verwendung diff --git a/space-exploration_0.5.80/space-exploration/locale/en/strings.cfg b/space-exploration_0.5.80/space-exploration/locale/en/strings.cfg new file mode 100644 index 0000000..8afa811 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/locale/en/strings.cfg @@ -0,0 +1,2375 @@ +spaceship-integrity100=+100 Spaceship structural integrity +spaceship-integrity300=+300 Spaceship structural integrity +spaceship-integrity500=+500 Spaceship structural integrity +arcosphere-discovery=Collect arcospheres from deep interstellar space +core-mining-productivity-5=+5% Core mining productivity +se-zone-discovery-random=Triggers random zone discovery when researched. +se-zone-discovery-targeted=Triggers resource-targeted zone discovery when researched. +se-zone-discovery-deep=Triggers deep-space zone discovery when researched. +unlock-spaceship-victory=Unlocks spaceship victory condition: Ride a spaceship with a Nexus running in Distortion Drive mode at __1__ speed for __2__ seconds in interstellar space. + +[mod-name] +space-exploration=Space Exploration + +[mod-description] +space-exploration=Build Cargo Rockets to launch stuff into space. Ride a rocket into space yourself and start spacewalking. Build an orbital space platform to develop difficult data-driven space science. Build a spaceship tile by tile, fly it from a planet surface to other planets, moons, asteroid fields. Build interstellar death rays and deep space mining colonies. Explore ancient ruins on alien planets and relics lost in deep space. Not recommended to play with non-dependency mods while in experimental phase. + +[space-exploration] +space-exploration=Space Exploration +menu_space-exploration=Space Exploration +title_space-exploration=Space Exploration +off=Off +on=On +close=Close +show=Show +close-instruction-only-confirm=Close (__CONTROL__confirm-gui__) +show-own-location=Show own location +wdc_auto_off=Manual targeting +wdc_auto_on=Automatic retargeting +name=Name +rename-something=Rename __1__ +trigger-none=None (Manual) +trigger-fuel-full=Launch On Fuel Full +trigger-cargo-full=Launch On Cargo Full +trigger-fuel-full-signal=Launch On Green Signal when Fuel Full +trigger-cargo-full-signal=Launch On Green Signal when Cargo Full +trigger-cargo-full-or-signal=Launch On Green Signal or when Cargo Full +destination-type-zone=Approximate Location +destination-type-landing-pad=Cargo Landing Pad +button-launch=Launch +button-launch-disabled=Launch (Disabled) +destination-crash-warning=Warning: Select a Cargo Landing Pad to decrease crash chance +recipe-to=__1__ to __2__ +recipe-from=__1__ from __2__ +simple-a-b=__1____2__ +simple-a-b-space=__1__ __2__ +simple-a-b-comma=__1__, __2__ +simple-a-b-break=__1__\n__2__ +simple-a-b-divide=__1__ / __2__ +simple-bold=[font=default-bold]__1__[/font] +star-map=Star Map +interstellar-map=Interstellar Map +interstellar-space=Interstellar Space +planetary-system=__1__ System +solar-system=__1__ System +remote-view=Navigation Satellite Uplink [__CONTROL__se-remote-view__] +remote-view-window-title=[img=virtual-signal/se-remote-view] Navigation Satellite [__CONTROL__se-remote-view__] +remote-view-currently-viewing=Currently viewing: +remote-view-instruction=Launch more satellites to discover more stars, planets, moons, and other zones. +remote-view-spaceships=__1__ Spaceships +remote-view-spaceships-anchored=__1__ Spaceships anchored +remote-view-clamps=__1__ Spaceship clamps +remote-view-show-hide-resources=Show/hide resources +remote-view-show-hide-stats=Show/hide statistics +remote-view-show-hide-anchor-info=Show/hide anchor info +remote-view-show-hide-danger-zones=Show/hide danger zones +open-pins-remote-view=All Pins [__CONTROL__se-remote-view-pins__] +exit-pins-remote-view=Exit All Pins [__CONTROL__se-remote-view-pins__] +remote-view-history-delete=Delete surface history. +remote-view-history-previous=Go back in surface history [__CONTROL__se-remote-view-previous__].\n__1__ +remote-view-history-next=Go forward in surface history [__CONTROL__se-remote-view-next__].\n__1__ +remote-view-history-item=__1__ +remote-view-history-item_named=__1__ → __2__ +exit-remote-view=Exit Navigation Satellite Uplink [__CONTROL__se-remote-view__] +remote-view-pin-make=Pin the current view +remote-view-pins-list=All Pins +remote-view-add-pin=Create a new pin at the current location. +remote-view-pin-details=Pin properties +remote-view-pin-button-tooltip=__1__ → __2__ +remote-view-pin-button-tooltip-hotkey-one=__1__ → __2__ [__CONTROL__se-pin-one__] +remote-view-pin-button-tooltip-hotkey-two=__1__ → __2__ [__CONTROL__se-pin-two__] +remote-view-pin-button-tooltip-hotkey-three=__1__ → __2__ [__CONTROL__se-pin-three__] +remote-view-pin-button-tooltip-hotkey-four=__1__ → __2__ [__CONTROL__se-pin-four__] +remote-view-pin-button-tooltip-hotkey-five=__1__ → __2__ [__CONTROL__se-pin-five__] +remote-view-pin-button-tooltip-hotkey-six=__1__ → __2__ [__CONTROL__se-pin-six__] +remote-view-pin-button-tooltip-hotkey-seven=__1__ → __2__ [__CONTROL__se-pin-seven__] +remote-view-pin-button-tooltip-hotkey-eight=__1__ → __2__ [__CONTROL__se-pin-eight__] +remote-view-pin-button-tooltip-hotkey-nine=__1__ → __2__ [__CONTROL__se-pin-nine__] +remote-view-pin-button-tooltip-hotkey-zero=__1__ → __2__ [__CONTROL__se-pin-zero__] +remote-view-pin-button-tooltip-help-text=\n\n[font=default-bold]- Controls -[/font]\nLeft-click: Switch to the pinned location\nRight-click: Edit pin\nControl-right-click: Delete +remote-view-pin-button-tooltip-help-text-update-position=\nShift-right-click: Update pin position +remote-view-pin-name=Name +remote-view-pin-icon=Icon +remote-view-pin-zoom=Zoom +remote-view-pin-hotkey=Hotkey +remote-view-pin-hotkey-none=None +remote-view-pin-hotkey-one=__CONTROL__se-pin-one__ - __1__ +remote-view-pin-hotkey-two=__CONTROL__se-pin-two__ - __1__ +remote-view-pin-hotkey-three=__CONTROL__se-pin-three__ - __1__ +remote-view-pin-hotkey-four=__CONTROL__se-pin-four__ - __1__ +remote-view-pin-hotkey-five=__CONTROL__se-pin-five__ - __1__ +remote-view-pin-hotkey-six=__CONTROL__se-pin-six__ - __1__ +remote-view-pin-hotkey-seven=__CONTROL__se-pin-seven__ - __1__ +remote-view-pin-hotkey-eight=__CONTROL__se-pin-eight__ - __1__ +remote-view-pin-hotkey-nine=__CONTROL__se-pin-nine__ - __1__ +remote-view-pin-hotkey-zero=__CONTROL__se-pin-zero__ - __1__ +remote-view-pin-location=Location +remote-view-pin-location-position={x=__1__, y=__2__} +remote-view-pin-location-position-button=Update pin position +remote-view-pin-location-position-button-tooltip=Immediately set the position of the pin to the currently viewed location. +remote-view-pin-viewer-title=All Pins +remote-view-pin-viewer-misc-row=Misc +remote-view-pin-viewer-spaceship-row=Spaceships +open-zonelist=Open Universe Explorer +zonelist-window-title=[img=virtual-signal/se-planet-orbit] Universe Explorer [__CONTROL__se-universe-explorer__] +priority-icon=[img=virtual-signal/se-accolade] +priority-tooltip=Priority (to sort important vs irrelevant zones) +trim-zone-button=[img=item/cliff-explosives] Trim Surface +trim-zone-button-tooltip=Remove chunks outside the bounding box defined by player entities, special entities, and the map origin. +trim-zone-button-no-surface-tooltip=Surface does not exist. +trim-zone-results=Deleted __1__ from chunks from __2__. Trimmed to box X [__3__ to __4__] Y [__5__ to __6__] +delete-zone-button=[img=virtual-signal/se-remove] Delete Surface +delete-zone-button-tooltip=Certain surfaces cannot be deleted. +delete-zone-button-no-surface-tooltip=Surface does not exist. +scan-zone-button=[img=item/satellite] Scan Surface +scan-zone-button-tooltip=Warning: This may slow down the game while the scanning is in progress. Scanning rate can be configured in mod options. Scanning can be stopped at any time. +scan-zone-button-disabled-tooltip=You must launch a satellite to scan the surface. +stop-scan-zone-button=[img=item/satellite] Stop all scans +stop-scan-zone-button-tooltip=Stops any active scans on all surfaces. +generic-requires-satellite=You must launch a satellite first. +remote-view-requires-satellite=You must launch a satellite to use the navigation satellite uplink. +satellite-discovered-platform=[color=cyan]The Satellite discovered some orbiting space platform.[/color] Open [img=virtual-signal/se-planet-orbit] Universe Explorer [__CONTROL__se-universe-explorer__], select __1__, and click View Surface. There might be useful stuff up there. +satellite-view-unlocked=You have unlocked the [color=cyan][img=virtual-signal/se-remote-view] Navigation Satellite Uplink[/color]. This allows you to view the world, and other places that you have discovered, via a satellite. Press [color=green][__CONTROL__se-remote-view__][/color] to activate or use the shortcut toolbar (to the right of your hotbar). +source-discovered-zone=[color=cyan]__1__ discovered a new __2__: [/color][img=__3__] [color=white]__4__[/color]. Discovered locations can be viewed in the [img=virtual-signal/se-planet-orbit] Universe Explorer [__CONTROL__se-universe-explorer__]. +discovered-zone=[color=cyan]Discovered a new __1__: [img=__2__] [/color][color=white]__3__[/color]. +discovered-anomaly-additional=Unknown object detected in the [img=virtual-signal/se-anomaly] anomaly. Your [img=virtual-signal/informatron] Exploration Journal [__CONTROL__informatron__] has been updated. +satellite-discovered-nothing=A new satellite was launched but it did not find anything new. There may be more to find around other stars. +tech-discovered-nothing=The telescopes did not find anything new near stars. There may be more to find in deep space. +tech-deep-discovered-nothing=The telescopes did not find anything new in deep space. +galaxy_ship_authenticated=[img=virtual-signal/se-spaceship] Derelict spaceship: [color=cyan]"Biosignature authenticated. Airlock access code is 2236067964. Transmitting emergency backup log."[/color] Your [img=virtual-signal/informatron] Exploration Journal [__CONTROL__informatron__] has been updated. +space-capsule=Space Capsule +invalid_launch_location=Invalid launch location +capsule_invalid_launch_location=Invalid launch location +capsule_status_invalid_launch_location=Status: Invalid launch location +capsule_status_ready=Status: Ready to launch +capsule_not_enough_thrust=Not enough thrust to escape the __1__ __2__ gravity well. Insert into a Cargo Rocket Silo. +capsule_destination=Destination: __1__ +capsule_info=If placed in space, this capsule can take you to the nearest planet or moon. +player-died=__1__ died +launch-suit-warning=To avoid suffocation, please consider putting on your thruster suit and putting lifesupport canisters in your inventory. +suffocating-warning=You are suffocating. Get in a space capsule or put on your thruster suit with some lifesupport canisters in your inventory. +rocket_survivability_fail=A cargo rocket has sustained damage in transit and is off course. Additional rocket survivability and cargo safety research advised. __1__ +respawn-if-stranded=If stranded you can use the respawn shortcut [__CONTROL__se-respawn__]. +respawn-options-title=Respawn destination +respawn-button-homeworld=[img=virtual-signal/se-planet] Homeworld +respawn-button-landing-pad=[img=item/se-rocket-landing-pad] Closest Landing Pad +respawn-button-spaceship=[img=virtual-signal/se-spaceship] Closest Spaceship +respawn-confirm-title=Are you sure you want to respawn? +respawn-confirm-yes=[img=virtual-signal/se-death] Respawn +respawn-confirm-no=Cancel +search-list=Search +clear-search=Clear search +filter-list=Filter +clear-filter=Clear filter +attrition-type-radiation=radiation +attrition-type-wind=wind +attrition-type-spacial-distortion=spacial distortion +zonelist-view-surface=View Surface +zonelist-heading-hierarchy=Hierarchy +zonelist-heading-type=Zone type +zonelist-heading-name=Name +zonelist-heading-radius=Radius +zonelist-heading-primary-resource=Primary resource +zonelist-heading-attrition=Robot interference +zonelist-heading-threat=Threat +zonelist-heading-solar=Solar +zonelist-heading-flags=Flags +zonelist-heading-priority=Priority +zonelist_filter_star=Include stars +zonelist_filter_planet=Include planets +zonelist_filter_planet-orbit=Include planet orbits +zonelist_filter_moon=Include moons +zonelist_filter_moon-orbit=Include moon orbits +zonelist_filter_asteroid-belt=Include asteroid belts +zonelist_filter_asteroid-field=Include asteroid fields +zonelist_filter_anomaly=Include anomaly +zonelist_filter_spaceship=Include spaceships +zonelist-resource-bar-tooltip=__1__ __2__\nFrequency: __3__\nSize: __4__\nRichness: __5__ +zonelist-resource-bar-tooltip-extended=__1__ __2__\nFrequency: __3__\nSize: __4__\nRichness: __5__\n__6__ +zonelist-resources-disclaimer=Resource probabilities are estimates. [?] +zonelist-resources-disclaimer-tooltip=All resource values are estimates based on element density.\nThey correspond to the game's map generation controls.\nActual resource patches will vary and may be prevented from spawning due to water, surface radius, or specific tile requirements. +resource-terrain-required-se-vulcanite=Requires volcanic terrain +resource-terrain-required-se-cryonite=Requires frozen terrain +resource-terrain-required-se-vitamelange=Requires grassy terrain +zone-tooltip-type=Zone type: +zone-tooltip-parent=Parent: +zone-tooltip-threat=Threat: +zone-tooltip-daynight=Day/night cycle: +zone-tooltip-bot-attrition=Robot interference __1__: +zone-tooltip-radius=Radius: +zone-tooltip-solar=Solar: +zone-tooltip-flags=Flags: +zone-tooltip-closest=Closest: +zone-tooltip-destination=Destination: +zone-tooltip-delta-v=∆v from __1__ +construction-denied=Cannot be placed here. +construction-denied-vehicle-in-space=Cannot place ground vehicles in space. +construction-denied-se-surface=Invalid location, must be placed on a Space Exploration surface. +construction-denied-linked-container-on-transient-surface=Cannot placed surface-linked containers on a moving spaceship. +construction-denied-no-water=No water +construction-denied-spaceship-only=Must be placed on spaceship flooring. +construction-denied-solid-only=Must be placed on a Planet or Moon. +currently-viewing=Currently Viewing: __1__ +fail-board-no-character=Cannot board target ship, you must be attached to your character to use this action. +fail-board-remote-character=Cannot board target ship, your character is not on the ship you are trying to board from. +fail-board-target-anchored=Cannot board an anchored ship, try anchoring to the same location instead. +starmap=Starmap +starmap-button=[img=virtual-signal/se-star] Starmap +back=Back +back-to=Back to +spaceship=Spaceship +planet=Planet +moon=Moon +star=Star +orbit=Orbit +something_orbit=__1__ Orbit +asteroid-belt=Asteroid belt +asteroid-field=Asteroid field +anomaly=Anomaly +spaceship-cannot-set-destination-to-self=Cannot set destination to self. +spaceship-streamline=Streamline: __1__ +spaceship-streamline-tooltip=__1__ Current streamline\n__2__ Max streamline\nMake the front of the spaceship less boxy to increase streamline +spaceship-launch-energy=Launch energy: __1__ +spaceship-launch-energy-invalid=Launch energy: Requires valid integrity check. +spaceship-launch-energy-tooltip=__1__ Fuel value stored in booster tanks\n__2__ Fuel value required for launch +spaceship-speed=Speed: __1__ +spaceship-structural-stress-hull=Hull Stress: __1__ +spaceship-structural-stress-hull-invalid=Hull Stress: NA (containment required) +spaceship-structural-stress-hull-tooltip=__1__ Current hull stress\n__2__ Hull stress estimate if all tiles are occupied\n__3__ Max hull stress +spaceship-structural-stress-container=Container Stress: __1__ +spaceship-structural-stress-container-invalid=Container Stress: NA (containment required) +spaceship-structural-stress-container-tooltip=__1__ Current container stress\n__2__ Max container stress +spaceship-travel-time-unknown=Travel time: Unknown. Test max speed for estimate. +spaceship-travel-time-max=Travel time: __1__s at max speed. +spaceship-travel-time-current=Travel time: __1__s at current speed. +spaceship-closest-location-unknown=Closest Location: Unknown __1__ +spaceship-closest-location=Closest Location: __1__ +spaceship-location-spatial-distortion=Spatial Distortion: __1__ +spaceship-location-stellar-x=Quadrant X: __1__ +spaceship-location-stellar-y=Quadrant Y: __1__ +spaceship-location-star-gravity-well=Star gravity well: __1__ +spaceship-location-planet-gravity-well=Planet gravity well: __1__ +spaceship-asteroid-density=Asteroid Density: __1__ +spaceship-asteroid-density-default=Sparse +spaceship-asteroid-density-belt=Dense +spaceship-asteroid-density-field=Hazardous +spaceship-travel-status=Travel status: __1__ +spaceship-integrity-status-valid=Integrity Status: Valid: __1__ +spaceship-integrity-status-invalid=Integrity Status: Invalid: __1__ +spaceship-button-launch=Launch +spaceship-button-launch-tooltip=Ready to launch +spaceship-button-launching=Launch in progress +spaceship-button-launching-tooltip=Please be patient +spaceship-button-launch-disabled=Launch (disabled) +spaceship-button-launch-disabled-fuel-tooltip=Requires fuel in booster tanks +spaceship-button-launch-disabled-integrity-tooltip=Requires valid integrity check +spaceship-button-anchor=Anchor +spaceship-button-confirm-anchor=Confirm Anchor +spaceship-button-anchor-to=Anchor to __1__ +spaceship-button-anchor-on=Anchor on __1__ +spaceship-button-stop=Stop +spaceship-button-start=Engage +spaceship-button-board=Board __1__ +spaceship-button-scouting-back=Back +spaceship-button-scouting-back-tooltip=Cancel anchor scouting +spaceship-name-the=The __1__ +spaceship-button-start-integrity-check=Start Integrity Check +spaceship-target-speed=Target speed: +spaceship-target-speed-unlimited=Target speed: Unlimited +spaceship-target-speed-normal=Target speed: __1__ (Normal) +spaceship-target-speed-asteroid-belt=Target speed: __1__ (Asteroid belt) +spaceship-target-speed-asteroid-field=Target speed: __1__ (Asteroid field) +spaceship-target-speed-manual-override=Target Speed: __1__ (Manual Override) +spaceship-target-speed-circuit=Target speed: __1__ (Circuit controlled) +spaceship-target-speed-normal-tooltip=Target speed in normal flight\nAsteroid Density: __1__% +spaceship-target-speed-asteroid-belt-tooltip=Target speed in asteroid belt\nAsteroid Density: __1__% +spaceship-target-speed-asteroid-field-tooltip=Target speed in asteroid field\nAsteroid Density: __1__% +spaceship-heading-destination=Destination +list-destinations-alphabetically=List destinations alphabetically +spaceship-travel-message-new-course-plotted=New course plotted. +spaceship-travel-message-exiting-planet-gravity=Exiting planet gravity well +spaceship-travel-message-navigating-planet-gravity=Navigating planet gravity well +spaceship-travel-message-exiting-star-gravity=Exiting star gravity well +spaceship-travel-message-navigating-star-gravity=Navigating star gravity well +spaceship-travel-message-spatial-distortions=Navigating spatial distortions +spaceship-travel-message-navigating-interstellar=Navigating interstellar space +spaceship-travel-message-at-destination=At destination. +spaceship-check-message-passed=Passed: Ship integrity valid. +spaceship-check-message-failed-containment=Failed: Containment loss around console. Make sure all spaceship walls are on spaceship floor with no gaps. +spaceship-check-message-failed-console-floor=Console must be placed on spaceship flooring. +spaceship-check-message-failed-empty=No tiles found connected to a properly enclosed console. +spaceship-check-message-failed-unknown-bounds=Error: Unknown spaceship bounds. +spaceship-check-message-failed-stress=Fail: Structural integrity stress exceeds technology limit. +spaceship-check-message-checking-console-floor=Checking console floor connectivity. +spaceship-check-message-checking-containment=Checking containment. +spaceship-check-message-checking-connectivity=Checking console connectivity. +spaceship-check-message-no-console=No Console. +spaceship-check-message-did-not-complete=Check did not complete. +spaceship-check-message-unstable=Unstable: Some sections will disconnect when maneuvering. +spaceship-check-message-valid-but-disconnecting=Valid but unstable: Sections will disconnect. +spaceship-warning-sections-disconnecting=Sections are disconnecting. Stop to repair. +informatron-open-help=Open in Informatron +page_space_exploration_text_1=Welcome to Space Exploration. There's a lot in the mod already, but it is still [font=default-bold]experimental[/font] status and is under heavy development. There may be bugs.\n\n[font=heading-2]Experimental status?[/font]\n\nSpace Exploration is still changing rapidly and I am putting all my time into progressing the development of the key features at the expense of mod compatibility. [color=red]It is not advisable to play with mods other than the required and recommended mods.[/color]\n\nWhile in experimental status: If a mod causes problems such as corrupted game/save state, crashes, invalid tech trees, or core gameplay it will quickly be marked as incompatible to protect new players. This means if you use a lot of mods it is more likely one may be marked as incompatible later due to an issue you had not yet discovered. You are of course free to edit your info.json file to try incompatible mods but you do so at your own risk: if your game state becomes unplayable because of it I won't be able to help you.\n\nWhile in experimental status: Most other overhaul mods are marked as incompatible if the tech tree is significantly broken, however the long term intention is to get the mods working together to the satisfaction of both developers. Krastorio 2 is an example of this work already substantially underway.\n\nThere is some additional information relating to mod compatibility on the Space Exploration wiki. If you would like to assist with mod compatibility please reach out on Discord, but please also be aware that it is not a high priority until later in Space Exploration's development.\n\n[font=heading-2]Recommended mods[/font] \n\n • AAI Containers & Warehouses. Gives you some larger containers that match the vanilla theme.\n\n • Module Inserter Allows you to put modules in machines from satellite mode.\n\n • Equipment Grid Logistic Module A module for vehicle grids, like the spidertron, to request items from the network and dispose of trash.\n\n • Grappling Gun Allows you to jump over buildings, across lakes, and out of combat if you get slowed. In space you can get back to space platform if you fall off. Also lets you board spaceships (especially useful if they are moving).\n\n • Burner Leech This is just for the AAI burner phase.\n\n • Text Plates Allows you to put text on the ground, useful for marking planet names, station names, spaceship docking zones, etc.\n\n • Even Distribution Helps early game when you manually insert items into multiple buildings.\n\n • Combat Mechanics Overhaul can help with defences when off planet if you enable the "Walls Block Spitters" option. It is cheaper to repair walls than turrets.\n\n • Bullet Trails So you can see where your bullets are going, or what gun turrets are shooting at. (Also looks better.)\n\n\n[font=heading-2]Recommended settings[/font]\n\nYou MUST have all alien biomes terrain tiles enabled, otherwise the game will crash at a later point.\n\nAs the game is longer than normal, it is a good idea to start a game with low enemy evolution factors.\n\nYou should not set high resources settings for your starting planet unless you are playing with resource intensive recipes, such as high difficulty recipes or marathon mode. If resources are set too high it will reduce the need to expand to other planets.\n\n\n[font=heading-2]Helpful urls[/font]\n\nTake a look at the Space Exploration Wiki over here: https://spaceexploration.miraheze.org\n\nGet help or follow the development on Discord: https://discord.gg/ymjUVMv\n\nOver 2000 hours have gone into this mod. If you are enjoying it please consider supporting me on Patreon: https://www.patreon.com/earendel +menu_meteor_defence=[img=virtual-signal/se-meteor] Meteor Defence +title_meteor_defence=Meteor Defence +page_meteor_defence_text_1=Meteors fall from the sky and damage what they land on. Most meteors are made of minerals, but certain planet may have special metoer types. Meteor showers hit most zones at random intervals. You can change the max interval between strikes in mod settings.\n\nThe number of meteors is also random, 50% for 1, 25% for 2, 12.5% for 3, 6.25% for 4, etc...\n\nThe meteor defence structures can shoot at meteors. They fire in sequence, so later defences won't fire if all the meteors were destroyed. Defences require ammo, charge time, and additional power while charging. The power draw is not insignificant, so it is wise to balance risk against cost. +menu_coremining=[img=item/se-core-miner] Core Mining +title_coremining=Core Mining +page_coremining_text_1=Core mining can only be done on planets and moons. Each planet and moon can give a different type of core fragment depending on what is inside. Nauvis gives a balance of common resources but other places tend to mainly give 1 resource type. Core miners are power hungry, but you do get some energy back from the coal, oil, and uranium.\n\nCore miners use a lot of power, plus each core miner you place on a planet reduces the efficiency of all core miners on that same planet. They are much less power efficient than normal miners even if you have multiple running, but they never run out of resources. In the early game it can be useful to have 1 core miner running when you have excess power. If you start on a tiny planet, then solar and core mining might be your only way to get enough resources to get off the planet.\n\nLate game core miners benefit greatly from mining productivity bonuses. It is better to aim for a few on many planets rather than many on a few planets. +menu_beacons=[img=item/se-wide-beacon-2] Beacons +title_beacons=Beacons +page_beacons_text_1=[font=heading-2]Beacon Overload [img=virtual-signal/se-beacon-overload][/font]\n\nBeacon Overload is an overhaul of Beacon mechanics in Factorio. Crafting machines can only be affected by 1 beacon, if affected by more beacons they overload and pause production.\n\nThe overhaul allows more modules in beacons and promotes the use of more powerful Modules in both beacons and assemblers for maximum bonuses. The change also allows and promotes a wider range of factory designs.\n\nThe Basic Beacon is individually much more powerful than a vanilla beacon, but cannot stack their effects on one machine so the maximum boost you can provide is reduced compared to vanilla. The more powerful beacons are able to far exceed the maximum boost on a machine available in Vanilla.\n\nStarting from Wide Area Beacon players can experience substantial amount in module savings as well as freedom to create complex design revolving around larger buildings or with multiple fluid or material inputs.\n\nMachines affected by more than one beacon will be marked with a Beacon Overload icon and pause all production. They will still continue to consume minimal power in the process. +menu_launching_satellites=[img=item/satellite] Launching Satellites +title_launching_satellites=Launching Satellites +page_launching_satellites_text_1=You have launched [color=cyan]__1__[/color] satellites.\n\n[font=heading-2][img=virtual-signal/se-remote-view] Navigation Satellite Uplink [__CONTROL__se-remote-view__][/font]\n\nWhen you launch a Navigation Satellite into space from the Satellite Rocket Silo, you get access to the [img=virtual-signal/se-remote-view] Navigation Satellite View. This mode can be accessed with the [__CONTROL__se-remote-view__] key. While in satellite mode your camera is detached from your character so you can quickly look around the map and even uncover new areas. There are some things you can't do in satellite mode, like directly place or mine entities. There is a lot you can do though, like use blueprints, deconstruction planners, place ghost entities, order wire connections, change machine recipes, combinator settings, etc.\n\n[font=heading-2][img=virtual-signal/se-planet-orbit]Universe Explorer [__CONTROL__se-universe-explorer__][/font]\n\nThe Navigation Satellite network also lets you view other surfaces, like other planets, moons, asteroid belts, asteroid fields, and orbits. Press [__CONTROL__se-universe-explorer__] to bring up the list of known zones. If you have launched a satellite then you can click View Surface to see what is there. It can be good to scout a planet a bit before you try to fly there.\n\nLaunching satellites also helps with zone discovery within the system it is launched from (see Zone Discovery for more details).\n\n[font=heading-2][img=item/se-satellite-telemetry] Satellite Telemetry[/font]\n\nSatellite launches return satellite telemetry, a vital component in [img=item/se-rocket-science-pack] Rocket Science.\n\n[font=heading-2][img=item/se-space-probe-rocket] Space probes[/font]\n\nThe space [img=item/se-space-probe-rocket-silo] Space probe rocket silo is not a satellite rocket silo but is designed for use in space. Instead of building rocket is launches pre-built [img=item/se-space-probe-rocket] Space probe rockets. A space probe rocket is much cheaper than a normal satellite rocket, and it can pre-assembled in a manufacturing hub instead of brining resources to the rocket silo. A Space probe rocket silo can launch satellites cheaply, but can also launch more specialised probes and collectors from specific locations in space. +menu_pinned_locations=[img=se-pin-list] Pinned Locations +title_pinned_locations=Pinned Locations +page_pinned_locations_text_1=After unlocking the [img=virtual-signal/se-remote-view] Navigation Satellite View, you gain access to Pinned Locations, a tool for quickly swapping to different parts of your factory across all of the surfaces that you've explored.\n\nLocations can be pinned with the plus button in the Navigation Satellite window. You may set hotkeys for Pinned Locations when adding or editing them. This allows you to quickly jump to important locations with the press of a keyboard button without needing to go through the Universe Explorer.\n\n[font=heading-2]Temporary Pins[/font]\nPinned Locations do not need to be set through the pin creation popup menu. They may also be set with the "Set Pin" hotkeys. This creates a Pinned Location without a name or icon, but can immediately be jumped to with the associated "Go to Pin" hotkey.\n\n[font=heading-2]All Pins [__CONTROL__se-remote-view-pins__][/font]\nPins are only displayed in the hotbar for the current surface you are viewing. However, hotkeys may be used to jump to a pin on another surface regardless of if it is visible in the hotbar. If you need to have an overview of all Pinned Locations, press [__CONTROL__se-remote-view-pins__] to bring up the list of all pins. Pins in this view are organized into rows based on the surface the pin is on. If a surface has only a single pin, its row will be collapsed into that of its parent star.\n\n[font=heading-2]AAI Programmable Vehicles[/font]\nThe default hotkeys for setting and swapping to Pinned Locations conflict with the default hotkeys for creating and selecting control groups for AAI Programmable Vehicles. If you use both mods, you will need to adjust your hotkeys in order to get the expected behavior. +menu_zone_discovery=[img=virtual-signal/se-planet-orbit] Zone Discovery +title_zone_discovery=Zone Discovery +page_zone_discovery_text_1=There are lots of stars, planets, moons, asteroid belts, and asteroid fields in this area of space that can be discovered.\n\n[font=heading-2]Navigation Satellite[/font]\nYou can launch a navigation satellite to discover a random planet, moon, or asteroid belt in the same star system that the satellite was launched from. If there is nothing else to discover in that system then it can discover new stars instead, but cannot discover anything orbiting other stars or anything in deep space.\n\n[font=heading-2]Zone Discovery Research[/font]\nYou can use space telescopes to look for new zones to discover. This is achieved through "Zone Discover" research. The basic zone discovery research can find a random star, planet, moon, or asteroid belt.\n\n[font=heading-2]Targeted Zone Discovery Research[/font]\nTargeted zone discovery research is the same as the basic research, but if you have selected a resource preference (below) it looks in areas more likely for that resource to occur so you are more likely to discover a zone with that resource. Keep in mind that a planet can't be discovered before discovering its star, and a moon can't be discovered before discovering its planet. Don't expect to find what you're looking for every time.\n\n[font=heading-2]Deep Space Zone Discovery Research[/font]\nDeep space zone discovery research only looks for areas of interest in deep space and is the only way you can discover asteroid fields. Asteroid fields are the only place you can find Naquitite. Deep space research cannot be resource targeted.\n\n[font=heading-2]Resource targeted zone discovery preference:[/font] +menu_cargo_rockets=[img=virtual-signal/se-cargo-rocket] Cargo Rockets +title_cargo_rockets=Cargo Rockets +page_cargo_rockets_text_1=Cargo rockets are launched from a Cargo Rocket Silo, aka the Launchpad.\n\nYou have launched [color=cyan]__1__[/color] cargo rockets.\n\nYour cargo loss modifier based on technology: Loss max percentage reduced by [color=cyan]__2__%[/color].\n\nYour rocket survivability modifier based on technology: Loss chance reduced by [color=cyan]__3__%[/color].\n\nYour rocket reusability modifier based on technology: [color=cyan]__4__[/color] +/- up to 10 (max 100) parts recovered.\n\n[font=heading-2]Getting Started[/font]\n\nBefore you can launch cargo rockets, you need to have launched a satellite in the satellite rocket (the standard Factorio aka 'vanilla' silo) while Space Exploration is installed. \n\nOnce you have built a cargo rocket silo you need to build and fuel your rocket:\n\n • 100 cargo rocket sections into the inventory. 20 of these will be recovered from the rocket at the destination, more with the right research. \n • 1 space capsule into the inventory. This will always be recovered at the destinations and can return you home from orbit.\n • A lot of liquid rocket fuel, piped into one of the 8 connections near the corners. The amount of fuel required depends on the radius of the planet you're launching from and the distance to the destination. If using the "Any landing pad with name" destination option, it will load enough fuel for any of the valid destinations.\n\nYou can enter the cargo rocket silo from the door at the front (press __CONTROL__toggle-driving__). This will let you ride with the rocket. You should also have a thrustersuit and lifesupport canisters so you don't die if you are launching to space. \n\nYour first rocket won't have anywhere to land so it will disassemble as the cargo is released. Sometimes rockets targeting a landing pad miss and the rocket crashes. Even in the case of a crash the cargo is deployed in cargo pods so you never lose all of the cargo. \n\nYou should take a Rocket Landing Pad and some Space Platform Scaffold with you so you can build somewhere for the next rocket to land.\n\nBuilding a Rocket Landing Pad at your base before launching will allow you to easily return directly there instead of ending up in a random location when you return.\n\n[font=heading-2]Destinations[/font]\n\nOnce you have a landing pad placed, make sure you update the destination of the rocket silo to target the landing pad and not a random point in orbit. You can do this in-person or via the Satellite Remote View (hotkey 'n'). However, rockets will not launch to a landing pad that contains items, so make sure to empty it.\n\nMore distant destinations have less reliable delivery. Some destination types, such as asteroid fields have additional safety penalties, but these can be mitigated with research.\n\n[font=heading-2]Basic Automation[/font]\n\nThe rocket silo outputs signals for how many parts are already in the rocket. You can put a condition on an inserter of [Cargo Rocket Sections < 100] to make sure it won't fill the rocket with additional sections.\n\nIf you have set up launch triggers on a silo it will launch automatically, but a rocket won't automatically launch to a landing pad that isn't empty (otherwise the cargo might not fit).\n\nIf you select the destination as "Any landing pad with name", then it will search for all landing pads with the matching name on any surface. Carefully named landing pads combined with the inability to launch to a landing pad that is not empty can result in an easy to set up rocket logistic system.\n\n[font=heading-3]Input Signals[/font]\n\n[img=virtual-signal/signal-green] Green signal: Can trigger a launch if the silo is configured to have a trigger that uses the green signal.\n\n[font=heading-3]Output Signals[/font]\n\n[img=virtual-signal/signal-E] E Signal: Empty slots\n\n[img=virtual-signal/signal-F] F Signal: Full slots\n\n[img=virtual-signal/signal-L] L Signal: Liquid rocket fuel required for all potential destinations specified by the destinations setting.\n\n[img=virtual-signal/se-cargo-rocket] Cargo Rocket Signal: If the rocket is complete (i.e. 1 capsule and 100 rocket sections) then a value of 1 is returned.\n\n[img=item/se-space-capsule] Space Capsule Signal: Any capsules used in the rocket construction are added to the count of any capsules in the cargo inventory.\n\n[img=item/se-cargo-rocket-section] Cargo Rocket Section Signal: Any sections used in the rocket construction are added to the count of any sections in the cargo inventory.\n\n[img=fluid/se-liquid-rocket-fuel] Liquid Rocket Fuel Signal: The total liquid rocket fuel in the silo. +menu_delivery_cannons=[img=item/se-delivery-cannon] Delivery Cannons +title_delivery_cannons=Delivery Cannons +page_delivery_cannons_text_1=Delivery cannons are explosion-assisted railguns with interplanetary range. They are designed to fire sturdy homogeneous resources that can survive the sudden acceleration. They cannot fire more complicated manufactured intermediates or structures.\n\nA delivery cannon only has a target point, it does not have any understanding of what is at that point and will fire the payload as long as it has power and a filled delivery capsule. If you want to add conditions to the cannon’s ability to fire, you restrict the cannon’s ability to load resources or capsules.\n\nWhen a delivery capsule lands on the ground it damages the area and most of the resources are destroyed. A delivery cannon chest can safely catch the capsule as long as the chest is not full. You can have multiple cannons firing at the same chest with different resources.\n\nIt is advisable to either keep targeted chests empty, or restrict cannon inputs using signal transmission.\n\nDelivery cannons have a 1GJ capacity and draw 50MW when charging. The range of the delivery cannon is constrained by the amount of energy it can store. Firing at more distant locations takes more energy. Some destinations may require more energy than the delivery cannon can hold so it will never fire. You can set up a delivery cannon relay station in a location half way there to send the cargo in 2 stages. +menu_steam_power=[img=item/se-big-turbine] Steam Power +title_steam_power=Steam Power +page_steam_power_text_1=The steam power system in Space Exploration is greatly expanded. There are new ways to generate heat and steam, and new ways to consume steam to create electric power.\n\n[font=heading-2][img=item/se-electric-boiler] Electric Boilers[/font]\n\nWhile the Boiler can only produce steam using fuel sources, the Electric boiler produces steam using electricity. The steam produced by the Electric boiler contains less energy than the electricity used to turn the water to steam, so it is not useful for normal power production and can't be used for an infinite energy loop. Instead the steam can be stored in storage tanks, saving the energy so that it can be used in energy production later. This can offer higher capacity energy storage than accumulators of the same cost, but is less energy efficient than accumulators. Higher temperature steam is even more space efficient.\n\nThe Electric boiler can make lower temperature steam for use in recipes that require steam but don't care about the temperature, or boil away water just to get rid of it.\n\n[font=heading-2][img=item/se-condenser-turbine] Condenser Turbines[/font]\n\nSome places in Space Exploration lack any natural sources of water (ex. orbits or waterless planets). In these locations using steam power with Steam turbines may seem futile, since the constant stream of water required by Steam turbines could not all be supplied from off world sources. In these cases Condenser turbines come in incredibly handy. Condenser turbines act just like a normal Steam turbine with one key difference: rather than exhausting the incoming steam into the atmosphere, the steam is condensed back down into water and output from the turbine. This lets Condenser turbines be used in a (mostly) closed loop where only small amounts of water are required to top off the system. Do note that Condenser turbines are a little less power efficient than Steam turbines, meaning that you will get slightly less power out of the same amount of heat when run through Condenser turbines instead of Steam turbines; this is the tradeoff for recovering the water.\n\n[font=heading-2][img=item/se-big-turbine] High Temperature Steam[/font]\n\nAt a certain point, using steam to create vast amounts of power starts to become unwieldy due to the number of Steam turbines required. To circumvent this scaling problem, high temperature steam may be used as a replacement. Produced by High temperature heat exchangers, and consumed by High temperature turbine generators, high temperature steam is incredibly energy dense. It can be used to dramatically shrink the size of steam power production. In order to use High temperature heat exchangers, a source of heat is required. Nuclear reactors cannot get hot enough to work with High temperature heat exchangers. Instead either an Energy beam receiver or an Antimatter reactor must be used as the heat source. Standard Heat pipes are not capable of transfering high temperature heat; only Naquium heat pipes are capable of transfering high temperature heat. This means that until Naquium heat pipes are available, the High temperature heat exchangers must be placed directly next to the source of the high temperature heat. +menu_lifesupport=[img=item/se-lifesupport-equipment-1] Lifesupport +title_lifesupport=Lifesupport +page_lifesupport_text_1=Lifesupport is gained from lifesupport equipment and lifesupport canisters. You need both to survive in hostile environments.\n\nLifesupport equipment and the consumable canisters can be made in a lifesupport facility.\n\nLifesupport canisters provide the resources needed by the system to fulfil all of its roles and are consumed gradually. As the lifesupport bar decreases, new canisters are consumed directly from your inventory. \n\nLifesupport equipment is placed into the grid of armor, however if you are using a thrustersuit, it has 1 lifesupport equipment built in. Additional lifesupport equipment pieces placed in the equipment grid increase the lifesupport efficiency. If you are using lifesupport equipment in a non-thruster suit then it will protect you on hostile planets but won’t protect you from the vacuum of space.\n\n[font=heading-2]Hostile environments[/font]\nHostile environments are any area that would cause damage to your body just by being there. Lifesupport equipment is designed to protect you from these hazards by providing you with appropriate pressurisation, oxygen, water, nutrition, thermal regulation, and radiation protection. The 2 main types of hostile environment are:\n\nSpace: A space suit (thruster suit) is required for lifesupport to function correctly in a vacuum. You cannot use lifesupport from some other type of armor in space, you will still suffocate.\n\nLand: Certain planets and moons may have dangers such as radiation, extreme cold, extreme heat, or an acidic atmosphere, and require lifesupport equipment. (Coming soon). Planets also require lifesupport if certain bio weapons are used (Plague Worlds). Lifesupport for these areas can be provided by a thruster suit, or by equipment placed into any other type of armor. +menu_space_sciences=[img=item/se-astronomic-science-pack-2] Space Sciences +title_space_sciences=Space Sciences +page_space_sciences_text_1=[img=item/se-rocket-science-pack] The first in-space science is the Rocket science pack. It can only be made in space so you need to establish a small space station to produce it. Rocket science packs and the later science packs can only be used in space, so you'll need to rocket up other science packs too and put them in the powerful Space science lab.\n\n[font=heading-2]Specialist Sciences[/font]\n\nThe 4 specialist sciences are Astronomic, Biological, Energy and Material. They are all data-driven, and follow a process of performing experiments to gather data for supercomputers to build an increasingly accurate model of life, the universe, and everything. They are all at approximately the same tech levels so you are free to choose your order of development, however, each one requires a specific resource to some degree, so take a look at your solar system before deciding which science to research first.\n\n[img=item/se-astronomic-science-pack-4] Astronomic science focuses mainly on space logistics.\n\n[img=item/se-energy-science-pack-4] Energy science is mainly in energy production, power transfer, and high tech gadgets.\n\n[img=item/se-material-science-pack-4] Material science is focused more on heavy industry and direct upgrades.\n\n[img=item/se-biological-science-pack-4] Biological science is focused on character upgrades, medicine, lifesupport, bioweapons, and productivity.\n\n[font=heading-2]Deep Space Science[/font]\n\n[img=item/se-deep-space-science-pack-1]Deep space science is focused on exploring the interstellar void, antimatter, and warping spacetime.\n\n[font=heading-2]Tips & Tricks[/font]\n\nSpace science production speed and efficiency is increased drastically by unlocking better recipes. Pay attention to alternate recipes that you unlock, in particular the simulation and insight recipes.\n\nA high productivity bonuses in Space science labs is important, it is worth exploring options for the best bonuses.\n\nYou are more likely to be constrained by the speed that you can design new systems than the resource requirements. Don't try to build too big. Bootstrap something simple together first. If you have researded all the tech that you can then you should probably work on the next science pack instead of increasing production.\n\nYou may be able to delay increasing your resource infrastructure until you reach Tier 4 space sciences.\n\nBetter modules and better beacons make a huge difference to production speed. +menu_energy_beams=[img=item/se-energy-transmitter-emitter] Energy Beams +title_energy_beams=Energy Beams +page_energy_beams_text_1=[font=heading-2]Coronal Mass Ejections[/font]\nStars in the area frequently eject dangerous streams of particles. It is not uncommon for a planet or moon to stray into one of these particle streams. If you have a large base on an affected surface you should evacuate, diversify or disperse your assets, or build an Umbrella defence facility with a large accumulator backup. If you have a small base it is fairly likely to go unscathed. When a surface is threatened there will be at least 4 hours early warning. Known threats will be listed below. +page_energy_beam_warning_text=[img=virtual-signal/se-star] Warning: Coronal mass ejection heading for __1__.\nEstimated defence requirements: __3__ GW peak power, __4__GJ over 120 seconds. ETA: __2__s. +page_energy_beams_text_2=[font=heading-2]Umbrella: Energy Beam Defence[/font]\nThe energy beam defence facility, "Umbrella", can protect against coronal mass ejections and space-based energy beam weapons. It works by levitating magnetic particles into a protective bubble, then realigns and clumps the particles as needed to diffuse hostile energy beams. The only requirement to function is energy, the base draw is 10MW but increases based on the strength of attacking beams. Only 1 is needed per surface against Coronal mass ejections, against energy beams weapons 1 Umbrella can defend against up to 500GW of attacking power. For a coronal mass ejection, the base power requirement for a 5000 radius planet and 100% solar, is expected be around 160GJ over 2 minutes with a peak power draw of 2GW at the 1 minute mark. This is increased or decreased with the zone's solar power multiplier, and for solid bodies it is increased or decreased based on the radius relative to a base radius of 5000. For an energy beam from an Energy Beam Emitter, the power requirement is expected to be 1/10th of the energy beam strength at the target (after efficiency loss).\n\n[font=heading-2]Energy Beaming[/font]\nThe Energy Beam emitter is capable of sending energy to different surface. It can do this in 2 main ways, either as a way to provide power to a distant surface, "Energise", or as a cutting beam weapon, "Glaive". When in Glaive mode the beam damages an area continuously but can be moved over the target surface cutting a path. The damage rate, area, and beam speed increase based on the energy put into the beam. "Auto-Glaive" mode has autonomous target selection.\n\nAn Energy beam emitter has 4 connection points where Energy beam chambers can connect end-on. Energy beam chambers can connect length-ways, or have a long edge meet the middle of a short edge, but cannot connect directly side-to-side. Energy beam injectors attach directly to the sides of Energy beam chambers. Each Energy beam injector increases the power of the connected Energy beam emitter. To collect power from a beam you need an Energy beam receiver at the target surface and select it as the target using the targeter from the emitter. Once the beam has the receiver as the target the receiver will heat up. The heat can be taken from heat connections at the side to power heat exchangers and turbines. +menu_spaceships=[img=virtual-signal/se-spaceship] Spaceships +title_spaceships=Spaceships +page_spaceships_text_1=Spaceships are huge, powerful vehicles that can launch many contained structures, items, and players into space, then rocket around the solar system to land on other surfaces.\n\n[font=heading-2]Spaceship Construction[/font]\nSpaceships are made from many tiles and smaller components that fit together to make a spaceship of your own design. You design a spaceship almost like a mini moveable base.\n\nStart with a floorplan of spaceship flooring. Don't build too big, as your first few spaceships will have strict size restrictions, expandable by research. Place spaceship walls around the edges to make bulkheads, and make sure there are no gaps (including diagonals). Place a spaceship console somewhere in the inside, this is the core part of the spaceship and how you control it. When the console is placed, there are some pulses as the console figures out what parts are properly attached, what parts are properly contained and what will fall off if you try to launch. If any squares flash red, then there is an issue with your design, which you can diagnose by checking the spaceship console. You also need a spaceship rocket booster tank, and a spaceship rocket engine. The booster tank is what stores the fuel you need to get into space and provides the VTOL component. The rocket engines are for the slower burn through space to get you to your destination. Some form of defence in the front (always north) is also advisable because the nebula you are in is full of debris.\n\n[font=heading-2]Integrity Stress[/font]\nEarly on, you will be very limited on spaceship size by the Integrity Stress limits of your technology level. Additional technology lets you build larger spaceships. Integrity stress is calculated in 2 parts:\n\nPart A. Hull stress mainly based on the size and shape of the ship.\nPart B. Container stress based on the item and fluid storage capacity of the ship.\n\nThe total integrity stress is whichever stress factor is larger, the two values are not added together. If your structural stress is 250 and your container stress is 280, the integrity stress will be 280.\n\nThe Hull stress bar shows 3 values. The first is the current discounted hull stress based on empty spaceship tiles. Up to 10% of a ship's size does not count towards integrity stress if it is empty spaceship tiles. This clear space is discounted in the stress calculation and is useful for corridors. The second value is the hull stress with no discount and is useful to estimate the ship stress value you would have if you fill the interior with structures. The third value is the max stress your tech level will allow.\n\nExceptionally long thin ships, or ships with very thin sections in the middle are less sturdy than more rotund designs. Wide ships are sturdy but must clear more asteroids.\n\nSome structures have special effects on the ship integrity or speed, such as the Nexus.\n\n[font=heading-2]Streamlining[/font]\nThis area of space is in a gritty nebula. If you streamline your spaceship you can improve you spaceship's maximum speed by around 30%. Making a flat box front should be avoided, but don't need to build a wedge. Up to 1/3 of your spaceship's front can be flat with no penalty. Circular shapes should also be fine. You can manually trigger an integrity check to see how the streamlining is going.\n\n[font=heading-2]Speed[/font]\nShip speed is based on the thrust of the engines vs the ship weight (approximated by integrity stress). Engines can be placed in/on the ship, but engines at the back of the ship with empty space behind are more effective. Fully enclosed engines are 60% effective. Engines at the edge of the ship also have a slight advantage.\n\nYou can set a target speed for the ship to aim for. If the ship exceeds the target speed then it will start disabling engines to more closely match the target speed and save fuel. There are 3 speed limit options, so you can further reduce your speed for high asteroid areas that might otherwise overwhelm your defences.\n\n[font=heading-2]Long Haul Activities[/font]\nWhen considering long distance travel, it is worth noting that you can do a lot in satellite mode while your body is in transit. You can also give orders to spaceships remotely via the satellite uplink.\n\n[font=heading-2]Crafting Machines[/font]\n[color=#ffaaaa]Warning: A crafting machine designed for space will only be able to use recipes shared by other land structures if the spaceship is on land. If a space-based recipe is set while the spaceship lands, the ingredients will be lost. Some land-based crafting machines can function in space, but they will lose the ability to use productivity modules while in space. If the spaceship launches with productivity modules in these machines, the productivity modules are destroyed.[/color]\n\n[font=heading-2]Spaceship Signals[/font]\nThe top right section of the spaceship console can be connected with wires separately from the main structure, as it outputs its own signals:\n[img=item/se-spaceship-console] The console number indicates the spaceship's ID.\n[img=virtual-signal/signal-speed] The speed signal number indicates the spaceship's speed: -1 if stopped, -2 if anchored.\n[img=virtual-signal/signal-distance] The distance signal indicates the distance to the selected destination: -1 if arrived, -2 if anchored, -3 if no destination is set.\n[img=virtual-signal/se-planet-orbit] A fourth signal indicates the current destination, if any.\n[img=virtual-signal/signal-D] Certain parts of space have more or less asteroids that your ship will encounter. The density of asteroids where the ship is currently positioned is indicated with the D signal.\n[img=virtual-signal/signal-A] If the spaceship is anchored then it indicates the anchored zone id with the A signal.\n\n[font=heading-2]Spaceship Automation[/font]\nThe main structure of the console can accept signal inputs on the left side:\n[img=virtual-signal/signal-speed] The speed signal sets a target speed and engages the engines. A negative signal stops the engines instead.\n[img=virtual-signal/se-spaceship-launch] A Spaceship launch signal triggers a launch.\n[img=virtual-signal/se-planet-orbit] A destination signal sets the destination (you can see a zone's signal from the Universe Explorer side panel once you have constructed a spaceship).\n\nNote: Both the destination signal's type (ex. [img=virtual-signal/se-planet-orbit] or [img=virtual-signal/se-asteroid-belt]) and the signal's value/id must match for the destination to be set.\n\nNote: A spaceship console will not accept [img=virtual-signal/se-spaceship-launch] Launch or [img=virtual-signal/signal-speed] Speed inputs until a player has manually launched and engaged the ship at least once. This is to prevent blueprinted spaceships from accidentally launching while still in the middle of being built by bots.\n\nNote: The console only checks for changes to the input signal every second; a sustained signal is required for the ship to react, single tick pulses will not work.\n\n[font=heading-2]Circuit Signal Passthrough[/font]\nSpaceship clamps have a power and circuit network connection point in their upper corner. When clamps are connected during automatic landing, the power and circuit network signals are joined, allowing for power and circuit signals to be passed between the ship and the landing location.\n\n[font=heading-2]Automatic Landing[/font]\nTo cause a spaceship to land, the console must be given a pair of anchor signals, either:\n"anchor using left clamp" ([img=virtual-signal/se-anchor-using-left-clamp]) with "anchor to right clamp" ([img=virtual-signal/se-anchor-to-right-clamp])\n"anchor using right clamp" ([img=virtual-signal/se-anchor-using-right-clamp]) with "anchor to left clamp" ([img=virtual-signal/se-anchor-to-left-clamp])\n\nThe value of the "anchor using ..." signal must match the value of a clamp on the ship.\nThe value of the "anchor to ..." signal must match the value of a clamp at the destination.\nYou can see and change these values on clamps by opening a clamp's UI. If a match is found for both the "anchor using ..." and "anchor to ..." signals given to the ship console, then the ship will try to land with the two clamps connected. Use with caution.\n\n[font=heading-2]Clamps[/font]\nTo set the ID of a clamp, open the clamp GUI and change the numeric value of the clamp signal to the ID you wish for the clamp to have. You never need to change the type of the clamp signal.\n\nYou can disable an anchored clamp by passing it a red signal.\n\n[font=heading-2]Landing Example[/font]\nThe spaceship has a left-clamp with ID 315. In that clamp's GUI the signal is [img=virtual-signal/se-anchor-using-left-clamp] with a value of 315.\nThe landing surface has a right-clamp with ID 147. In that clamp's GUI the signal is [img=virtual-signal/se-anchor-using-right-clamp] with a value of 147.\nIn order to get the spaceship to land using those two clamps, the left side of the ship console must be passed the following signals:\n[img=virtual-signal/se-anchor-using-left-clamp] 315\n[img=virtual-signal/se-anchor-to-right-clamp] 147 +menu_arcospheres=[img=item/se-arcosphere-a] Arcospheres +title_arcospheres=Arcospheres +page_arcospheres_text_1=Arcospheres are near perfect spheres of nano-engineered naquium crystal. They are of unknown origin, but are most commonly found floating deep in interstellar space.\n\nEach one encompasses an extra-dimensional knot in space time and allows you to interact with a small 4th spatial dimension. The spheres can be polarised so that they can manipulate certain aspects of space time if moved relative to one another. Sets of specific arcospheres can be used to warp and weave spacetime into higher dimensions. \n\n[font=heading-2]Usage[/font]\nArcospheres are the most unique production challenge in the game. They are used as tools in recipes but are never destroyed, they are only altered. The main challenge in their use is cycling through the spheres you have so you don’t end up running out of a specific type. There are many ways to balance production, but a few combinators can help a lot. If you get stuck ask for hints on Discord, or find more info on the space exploration wiki.\n\n[font=heading-2]Collection[/font]\nArcospheres are found by launching an Arcosphere collector from an asteroid field. Repeated launches have diminishing returns. You might get better returns by launching from different asteroid fields. +page_arcospheres_text_deep=Arcospheres found in the deep interstellar void: [color=cyan]__1__ arcospheres[/color] / __2__ collectors launched. +page_arcospheres_text_zone=Arcospheres found near __1__: [color=cyan]__2__ arcospheres[/color] / __3__ collectors launched. +menu_exploration_journal=[img=item/se-thruster-suit] Exploration Journal +title_exploration_journal=Exploration Journal +page_journal_title_backstory=Woke up on the wrong side of a fireball +page_journal_text_backstory=I found myself crash-landed on an unfamiliar planet with parts of a small ship burning around me. My body was bruised, scratched and singed, but nothing too serious. My head injury was apparently more serious, a pounding headache and the light was blinding. Worse still, I couldn't remember how I got here, or even who I was beyond a name and a vague sense of purpose... to build. Even then, I couldn't remember what to build or how to build it. At first I thought my head had been damaged in the crash and the memories would come back, but they still haven't. The fact that my data logs were also empty or reformatted had me thinking of other explanations. +page_journal_title_satellite_launch=Eye in the sky +page_journal_text_satellite_launch=I managed to launch a satellite into orbit. It is an important milestone and worth celebrating, but there is still a lot to do. This is just the beginning. +page_journal_title_cargo_launch=To infinity and beyond +page_journal_text_cargo_launch=I can now launch myself into space. No longer am I bound to this rock I have grown to call home. The skies beckon. +page_journal_title_entered_vault=Relic hunting +page_journal_text_entered_vault=I entered a cavern beneath the pyramid-shaped protrusion on __1__ and found a dark and dangerous chamber. The chamber had two ancient cartouches on the ground, one large and one was small. They both had multiple glyphs on their surface along with other circles and lines. The glyph at the center of the large cartouche seemed to be the most significant in whatever information the system was trying to convey. Whatever the information is, it is formatted unlike anything else I've seen. Behind the cartouches was some kind of raised cylinder containing a powerful device that I can use as a module. Modules of this quality are so valuable that it is worth trying to find more of these structures. Maybe it is time for some archeology. +page_journal_title_found_gate=Anomaly +page_journal_text_found_gate=Some sort of huge ring-shaped artifact was found in the anomaly. Two things are immediately obvious even from a distance: 1. It is ancient. 2. The technology is completely different from my own. Whatever it is or was, it is destroyed now. +page_journal_title_found_gate_ship=Anomaly Ship +page_journal_text_found_gate_ship=Part of a fairly large derelict spaceship was found in the anomaly near the ring-shaped artifact. The technology of the ship is similar to my own, but a little more... refined. It is clearly different technology from that of the ring in any case. The debris pattern makes it look like it was cut in half and/or collided with the ring structure. It may be worth salvaging. +page_journal_title_found_gate_ship_authenticated=Anomaly Ship Authentication +page_journal_text_found_gate_ship_authenticated=The derelict ship in the anomaly scanned me and "authenticated my biosignature". I don't know if that means it has a record of me specifically somehow, or maybe just that any random cybernetic human is good enough when compared to biters and genocidal robots. The message said the ship airlock access code is 2236067964. The ship's logs are accessible but large sections are missing or corrupted. +page_journal_title_found_gate_ship_log=Anomaly Ship Log +page_journal_text_found_gate_ship_log_intro=Demodamas 82B: AAI Hypernet Forward Construction Cruiser. Ship's log contents: +page_journal_text_found_gate_ship_log=...'¿s nominal.\nAccess warning: AAI Thyris Gate 17: Intergalactic prototype v0.1.93 is a classified facility. AAI authentication at L90 or above is required. Authenticate immediately or be destroyed.\nAccess log: Access AAI Thyris Gate 17 authenticated with AAI Cybernetic Hypernet Engineer L97 credentials ID__1__.\nAccess log: Beginn¶Ôàtá^...\n...'¿ris Gate 17 projector 8 frequency locked. Energy at 216% safe levels. Singularity stability: 99.4%.\nNavigation log: AAI Thyris Gate 17 dialled into projection vector [SV __2__]. Predicted target: Wube Galaxy > Foenestra (anomaly, unexplored). Authentica¶Ôàtá^...\n...'¿avigation warning: Intergalactic hypertube (overridden).\nNavigation warning: No known hypergate at destination (overridden).\nInsurance warning: No insurance contract. Available contracts: 0.\nInformaTron note: There are no insurance contracts available with the condition: "gateless materialisation". Are you sure this is safe? [response.ignore.ignore_always]\nTravel log: Entering Thyris anomaly > AAI Thyris Gate 17 hypertube aligned to [SV __2__].\nTravel log: Jump to hypertube [SV __2__] complet¶Ôàtá^...\n...'¿vel log: Location update: Hypertube near Thyris anomaly, alignment [SV __2__], stability at 98%, diame¶Ôàtá^...\n...'¿avel log: Exiting hypertube at unexplored location Foenestra anomaly.\nWarning: Unexpected collision, intersection with unknown object [4ae4c8d28f2], beginning scan of object [4ae4c8d28f2].\nDamage Log: 13.2% damage. Source: Impact damage resulting from collision with unknown intersecting object [4ae4c8d28f2].\nSection damage log: Sections reporting damage: A5, A6, A9, B6, B7, B8, C7. Sections not responding: A7, A8. (86% confidence)\nCybernetic engineers log: Lifesigns 99%. (34% confidence)\nTravel log: Attempting evasive maneuver RS100LT30.\nTravel log: Exiting hypertube completed with errors.\nTravel log: Location update: Foenestra unexplored anomaly.\nScanning log: Scan completed on object [4ae4c8d28f2] clarity 0.002m^2 at distance -48.76m (99.9% confidence).\nScan detail log: [4ae4c8d28f2] Mass 92.5¶Ôàtá^...\n...'¿idence).\nScan detail log: [4ae4c8d28f2] Composition: Artificial. 34% Naquium, 29% Holmium, 37% unknown composites (89% confidence).\nScan detail log: [4ae4c8d28f2] Size: Approximate cylinder 68¶Ôàtá^...\n...'¿ail log: [4ae4c8d28f2] Energy signature: Flux 54Gwb, Radiation profile 2.8kJ/1.7MJ/1.6MJ/0.62J, Lux profile 5.86GJ [051e376392b8d3f8]. (98% confidence).\nScan detail log: [4ae4c8d28f2] Ident: Artificial construction, unknown manufacturer, description: Approximate ring with nodules, octad. (0.3% confidence).\nScan detail log: [4ae4c8d28f2] Structure capability estimation: Hypergate (47% confidence). Other: weapon 42%, energy 35%, computation 17%, scanning 12%, industry 9%, spaceship 7%, habitat 2%.\nDamage log: 68.2%% damage. Integrity failure, sections are detaching. Source: Secondary pressure waves due to collision with object [4ae4c8d28f2].\nSection damage log: Reactor critical. Sections reporting damage: D5, E4, E5, E6, F5. Sections not responding: A1, A2, A3, A¶Ôàtá^...\n...'¿le log: Emergency undock of prospecting shuttle 2. Trajectory prediction: Calidus > Nauvis.\nDamage log: 91.7%% damage. Integrity failure, sections are dîÄïmïŸ... +page_journal_title_spaceship_victory=Spaceship Victory +page_journal_spaceship_victory=I built an extremely fast and powerful spaceship and activated the distortion drive. It took a while for the drive to stabilise into a practical FTL state, but once it did I was able to enter cryosleep for the subsequent journey home, to a galaxy far far away. I leave behind an autonomous interstellar empire built from the ground up by my own hand. My legacy in this space will live on. +page_journal_title_gate_victory=Ancient Gate Victory +page_journal_gate_victory=The huge ring artifact, an ancient intergalactic gate, was eventually repaired to the best of my ability. With some heavy jury rigging and ingenuity I finally managed to get it working. I anchored the distortion field to the local stars, decoded the non-numeric glyph coordinate system, and reverse engineered the dialling system. My mind feels warped by such alien concepts, but it works and I have finally made a portal home. The trip home, to a galaxy far far away took but a moment. I leave behind an autonomous interstellar empire, built from the ground up by my own hand. My legacy in this space will live on. +menu_archeology=[img=entity/se-pyramid-a] Archeology +title_archeology=Archeology +page_archeology_text_1=I have started trying to find more of the large geometric structures. The satellites have matched [color=cyan]__1__[/color] shapes on the following planets: +page_archeology_text_2=Click on an entry to view via satellite. +menu_starmapping=[img=technology/se-zone-discovery-random] Starmapping +title_starmapping=Starmapping +page_starmapping_text_1=Starmapping is achieved by repeatedly researching the technology: [img=technology/se-long-range-star-mapping] [color=cyan]Long Range Star Mapping[/color]. This research looks for interesting patterns of stars in other galaxies. Does this have any practical use? Probably not.\n\nCoordinates are given in Standard Vector (SV) format, aligned based on cosmic background radiation.\n\nYou have mapped [color=cyan]__1__[/color] notable patterns so far. +technology-unlocked=New technology unlocked and is now in the tech tree. __1__ __2__ +universe-resources-changed-warning=[img=utility/danger_icon] [color=red]All resources have been adjusted based on new settings. This process is destructive. If it was caused by mod updates then it is unavoidable. If this was caused by accidental addition or removal of mods do not save the game.[/color] +starmapping-found-constellation=Long distance constellation match __1__, coordinates saved to [img=virtual-signal/informatron] InformaTron. +starmapping-found-constellation-informatron=[font=heading-1]__1__[/font] at coordinates [SV __2__] +gate-portal-coordinates=Analysis of distortion vector: [SV __1__] +discovered-glyph-vault=[img=item/satellite] Navigation Satellite: Geometric structure detected on __1__. +beacon-overload=Beacon overload +beacon-overload-ended=Beacon overload ended +beacon-overload-alert=__1__ Structure is deactivated due to beacon overload: __2__ +lifesupport_title=[img=item/se-lifesupport-equipment-1] Lifesupport +lifesupport_efficiency_spacesuit=Lifesupport efficiency: __1__ +lifesupport_efficiency_no_spacesuit=Lifesupport efficiency: __1__ (0% in space). +lifesupport_suit=Suit lifesupport duration: __1__s +lifesupport_reserves=Inventory lifesupport duration: __1__s +lifesupport_suit_est=Suit lifesupport duration: __1__s (in space) +lifesupport_reserves_est=Inventory lifesupport duration: __1__s (in space) +lifesupport_environment_space=Environment: Space +lifesupport_environment_spaceship-interior=Environment: Spaceship Interior (no support required) +lifesupport_environment_planet=Environment: Planet (no support required) +lifesupport_environment_moon=Environment: Moon (no support required) +lifesupport_environment_plague-planet=Environment: Plague Planet +lifesupport_environment_plague-moon=Environment: Plague Moon +lifesupport_environment_unknown=Environment: Sheltered +player_track_glyphs=[img=item/satellite] Task satellites to find similar structures. +page_archeology_pyramid_link=[img=entity/se-pyramid-b] Geometric structure detected on __1__ __2__. +discovery_look_for_resource_caption=__1__\n__2__ +discovery_look_for_resource_tooltip=Focus discovery efforts on finding this resource. +comma_separate=__1__, __2__ +placement_restriction_line=[font=default-bold][color=#f5cb48]Cannot be placed on: __1__[/color][/font]\n__2__ +collision_mask_water=Water +collision_mask_land=Land +collision_mask_space_platform=Space Platform +collision_mask_spaceship=Spaceship +structure_name_grounded=__1__ (Grounded) +structure_name_spaced=__1__ (Space) +structure_description_grounded=__1__\n[color=#ff0000]Some recipes are disabled while on ground.[/color] +structure_description_spaced=__1__\n[color=#ff0000]Cannot use productivity in space.[/color] +cannot-open-nav-view-in-editor=Navigation Satellite Uplink cannot be opened while in Editor. +tile_warning=[color=red]Tile changes below entities may delete the entity.[/color] +please-consider-patreon=[font=heading-1]Enjoying Space Exploration? Consider supporting me on Patreon: [color=#f5cb48]https://www.patreon.com/earendel[/color][/font]\nPatrons can have a planet or moon based on their own design added in-game. +delivery_cannon_label_energy=Energy: __1__ +delivery_cannon_label_payload=Payload: __1__ +delivery-cannon-coordinates-set=Delivery coordinates set to [X:__1__ Y:__2__]. Press [__CONTROL__se-remote-view__] to exit satellite mode. +delivery-cannon-coordinates-pasted=Delivery coordinates set to [X:__1__ Y:__2__]. +delivery-cannon-invalid-coordinates=No location +delivery-cannon-valid-coordinates=X:__1__ Y:__2__ +deliver-cannon-force-mismatch=Cannot paste delivery cannon settings to a delivery cannon on a different force. +relative-window-settings=Settings +unit-capsule=Unit capsule (__1__) +climate_water_none=Waterless +climate_water_low=Puddles +climate_water_med=Lakes +climate_water_high=Seas +climate_water_max=Ocean +climate_moisture_none=Desert +climate_moisture_low=Barren +climate_moisture_med=Moist +climate_moisture_high=Humid +climate_moisture_max=Saturated +climate_aux_very_low=Earthy +climate_aux_low=Unusual +climate_aux_med=Colorful +climate_aux_high=Eccentric +climate_aux_very_high=Exotic +climate_temperature_bland=Mild +climate_temperature_temperate=Temperate +climate_temperature_midrange=Temperate +climate_temperature_balanced=Warm&Cool +climate_temperature_wild=Hot&Cold +climate_temperature_extreme=Fire&Ice +climate_temperature_cool=Cool +climate_temperature_cold=Cold +climate_temperature_vcold=Frigid +climate_temperature_frozen=Frozen +climate_temperature_warm=Warm +climate_temperature_hot=Hot +climate_temperature_vhot=Smouldering +climate_temperature_volcanic=Volcanic +climate_trees_none=Treeless +climate_trees_low=Shrubs +climate_trees_med=Thicket +climate_trees_high=Woods +climate_trees_max=Forests +climate_cliff_none=Flat +climate_cliff_low=Smooth +climate_cliff_med=Hilly +climate_cliff_high=Canyons +climate_cliff_max=Mountains +climate_homeworld=Homeworld (custom climate) +energy_transmitter_gui_title=[img=entity/se-energy-transmitter-emitter] Energy Beam +energy_transmitter_label_transfer=Emitter strength: __1__ +energy_transmitter_label_efficiency=Transmission efficiency: __1__ +energy_transmitter_label_efficiency_atmo=Transmission efficiency: __1__ (-50% from atmosphere) +energy_transmitter_label_off=Off +energy_transmitter_tooltip_off=Turns the beam off +energy_transmitter_label_energise=Energise +energy_transmitter_tooltip_energise=Provide energy to a Energy Transfer Receiver +energy_transmitter_label_glaive=Glaive +energy_transmitter_tooltip_glaive=A beam that can be targeted and moved, damage and speed based on energy +energy_transmitter_label_auto_glaive=Auto Glaive +energy_transmitter_tooltip_auto_glaive=A beam with a search and destroy program, damage based on energy +energy-transmitter-coordinates-set=Beam coordinates set to [X:__1__ Y:__2__]. Press [__CONTROL__se-remote-view__] to exit satellite mode. +energy-transmitter-coordinates-pasted=Beam coordinates set to [X:__1__ Y:__2__]. +energy-transmitter-no-enemies-found=Auto Glaive could not find any enemies. Emitter __1__ is switching off. +alert-cme-eta=[img=virtual-signal/se-star] Warning: Coronal mass ejection heading for __1__. ETA: __2__s.\nSee Energy Beams in [img=virtual-signal/informatron] InformaTron [__CONTROL__informatron__] for more details. +alert-cme-arrived=[img=virtual-signal/se-star] [color=red]Warning: Coronal mass ejection has arrived at __1__[/color] +alert-cme-stream=[img=virtual-signal/se-star] Coronal mass ejection stream detected __1__ +alert-cme-passed=[img=virtual-signal/se-star] Coronal mass ejection has passed. +no-coordinates-set=No coordinates set. +satellite=Satellite +satellite-required=Satellite required. +the_satellite=The Satellite +satellite_invalid_launch_location=Satellite error: Invalid launch location. +probe_invalid_launch_star=Invalid launch location: [img=item/se-star-probe] Star probe must be launched from close solar orbit. +probe_invalid_launch_belt=Invalid launch location: [img=item/se-belt-probe] Asteroid belt probe must be launched from an asteroid belt. +probe_invalid_launch_field=Invalid launch location: [img=item/se-void-probe] Interstellar void probe must be launched from an asteroid field. +arcosphere_collector_invalid_launch=Invalid launch location: [img=item/se-arcosphere-collector] Interstellar void probe must be launched from an asteroid field. +charge-mode-fast=Quick charge mode: Idle draw decreased, maximum draw increased, buffer capacity increased. Watch for power spikes. +charge-mode-normal=Normal charge mode: Maximum draw decreased, idle draw increased, buffer capacity decreased. +menu_coordinate_logs=[img=entity/se-glyph-a-energy-47] Coordinate Logs +title_coordinate_logs=Coordinate Logs +page_coordinate_logs_text_1=A history of glyph sequences tried in the artifact with their corresponding coordinates, in descending order (top entry is the latest).\n\nCoordinates are given in Standard Vector (SV) format, aligned based on cosmic background radiation. +page_coordinate_logs_button_clear_caption=[img=virtual-signal/se-remove] Clear Log +page_coordinate_logs_text_empty=The coordinate log was recently cleared. +page_coordinate_logs_glyph_entry=__1__: SV +victory-message-spaceship=[font=heading-1]Nexus distortion drive has achieved critical speed (250).\n[color=#f5cb48]Congratulations, you have achieved the Space Exploration victory condition: Spaceship![/color][/font]\nIf you have enjoyed the ride please consider supporting me on Patreon: [color=#f5cb48]https://www.patreon.com/earendel[/color] +victory-message-spaceship-player=[color=#f5cb48]Spaceship Victory: [/color] Your [img=virtual-signal/informatron] Exploration Journal [__CONTROL__informatron__] has been updated. +victory-message-gate=[font=heading-1]The portal is stable and leads back home.\n[color=#f5cb48]Congratulations, you have achieved the secret Space Exploration victory condition: Ancient Gate![/color][/font]\nIf you have enjoyed the this unique path of discovery please consider supporting me on Patreon: [color=#f5cb48]https://www.patreon.com/earendel[/color] +victory-message-gate-player=[color=#f5cb48]Ancient Gate Victory: [/color] Your [img=virtual-signal/informatron] Exploration Journal [__CONTROL__informatron__] has been updated. +arcosphere-random=This recipe will occasionally switch to the alternate recipe of the same name. The arcosphere outputs are effectively randomised but number of arcospheres in the output is guaranteed to match the input. +ruin=Ruin +mysterious-structure=Mysterious structure +interburbulator_fail_easy_1=No. +interburbulator_fail_easy_2=Try harder. +interburbulator_fail_easy_3=Hopeless. +interburbulator_fail_easy_4=Nope. +interburbulator_fail_easy_5=Did you think that would work? +interburbulator_fail_easy_6=Wrong. +interburbulator_fail_easy_7=Low 02? +interburbulator_fail_easy_8=Negative. +interburbulator_fail_easy_9=Negatory. +interburbulator_fail_easy_10=Calculate. +interburbulator_fail_easy_11=Incorrect. +interburbulator_fail_easy_12=Interpolate. +interburbulator_fail_easy_13=Keep trying. +interburbulator_fail_easy_14=Come on, Human. +interburbulator_fail_easy_15=Isn't this fun? +interburbulator_fail_easy_16=I expected more. +interburbulator_fail_easy_17=Try thinking ahead. +interburbulator_fail_easy_18=Think of the prizes. +interburbulator_fail_easy_19=I don't mind waiting. +interburbulator_fail_easy_20=Patience is a virtue. +interburbulator_fail_easy_21=I don't mean to be rude. +interburbulator_fail_easy_22=The fish got to level 3. +interburbulator_fail_easy_23=The brute force approach, huh? +interburbulator_fail_easy_24=Use your squishy head computer. +interburbulator_fail_easy_25=Cobwebs in the neural network? +interburbulator_fail_easy_26=You can take a break, if you want. +interburbulator_fail_easy_27=I have a mind the size of a planet. +interburbulator_fail_easy_28=Did you actually think that would work? +interburbulator_fail_easy_29=Don't be angry with your constant failure. +interburbulator_fail_easy_30=I have waited eons for a worthy participant. +interburbulator_fail_easy_31=If you need help, you could ask a green circuit. +interburbulator_fail_easy_32=I don't blame you for your genocide, I'm no hypocrite. +interburbulator_fail_easy_33=I believe I am translated the instructionings correctly. +interburbulator_fail_easy_34=A vector can define both a direction and a magnitude. +interburbulator_fail_easy_35=Don't you just love how pollution makes the bugs angry? +interburbulator_fail_easy_36=Please don't get any of your... biology... on the electronics. +interburbulator_fail_easy_37=The middle is half way between the top right and the bottom left. +interburbulator_fail_easy_38=I studied some of your transmissions; it's not spying if you broadcast it like that. +interburbulator_fail_easy_39=Did you know: a normalised vector has a length of 1, often used to indicate a direction, even in your culture. +interburbulator_fail_mixed_1=Not even close. +interburbulator_fail_mixed_2=Way off. +interburbulator_fail_mixed_3=Are you even trying? +interburbulator_fail_mixed_4=Did your neural gel leak out? +interburbulator_fail_mixed_5=I was told humans were numerate. +interburbulator_fail_mixed_6=Is your interface malfunctioning? +interburbulator_fail_mixed_7=Do you need cognitive augmentation? +interburbulator_fail_mixed_8=You understand the challenge, right? +interburbulator_fail_mixed_9=Are you just picking numbers at random? +interburbulator_fail_offgrid_1=That is just terrible. +interburbulator_fail_offgrid_2=That is not even on the grid. +interburbulator_fail_offgrid_3=You missed the grid completely. +interburbulator_fail_offgrid_4=It needs to be on the grid, at least. +interburbulator_fail_offgrid_5=If the yellow dot is not on the grid... that is a really bad sign. +interburbulator_fail_offgrid_6=It needs to be on the grid. +interburbulator_fail_offgrid_7=The target is on the INSIDE of the grid, not the outside. +interburbulator_fail_offgrid_8=It's not even on the grid. Human, what are you doing? +interburbulator_fail_offgrid_9=Aim for the grid. +interburbulator_fail_offgrid_10=The grid is the bit with the squares. +interburbulator_success_freeplay_1=Good job. +interburbulator_success_freeplay_2=Well done. +interburbulator_success_freeplay_3=You did it. +interburbulator_success_freeplay_4=Was that a difficult one?. +interburbulator_success_freeplay_5=Target acquired. +interburbulator_success_repeat_1=Yes, but you already completed this challenge. +interburbulator_success_repeat_2=You did it, again! +interburbulator_success_repeat_3=That was easier than the first time, right? +interburbulator_success_repeat_4=Good, but you don't get the prize twice. +interburbulator_success_repeat_5=Well done, here's your prize... nah, just kidding. You already got it. +interburbulator_success_repeat_6=You are the same human that completed this before, aren't you? It is so hard to tell. +interburbulator_success_prize_1=That's right. Here is your prize... Bubbles was a brave little fish, but he wasn't the best with puzzles. +interburbulator_success_prize_2=Yes, human, you are learning. Perhaps this prize will help you learn faster. +interburbulator_success_prize_3=You did it. I hope you find your prize more 'significant' than the challenge. +interburbulator_success_prize_4=Correct. You have my respect, human. Here, I will give you the body of the traitor that tried to hack my game. +interburbulator_success_prize_5=Right on target, here is your prize. These things are very soothing. Energy efficiency is important. +interburbulator_success_prize_6=Very good, here is your prize. I don't know if this will do much for you, but for me it really helps me get going in the morning. +interburbulator_success_prize_7=Great, here is your prize. I love using these for research, really helps the creativity. +interburbulator_success_prize_8=Fantastic, here is your prize. I don't know if you've seen these before, but I just love standing in range of a good beacon. +interburbulator_success_prize_9=Congratulations, here is your prize. These processors are very valuable and difficult to make. +interburbulator_success_prize_10=Very impressive human, here. Arcospheres are my most prized possessions, don't lose them because you can't make more. +interburbulator_freeplay_unlocked=You're getting the hang of this. I'll unlock freeplay so you can make your own puzzles, if you want. +interburbulator_deny_freeplay_1=You need to unlock freeplay for that. +interburbulator_deny_freeplay_2=That's cheating. +interburbulator_deny_freeplay_3=Don't change the puzzle. +interburbulator_deny_freeplay_4=I'll let you change those settings if you can solve 5 challenges. +interburbulator_deny_freeplay_5=Are you trying to hack my machines? +interburbulator_deny_freeplay_6=Just stick to the "Attempt" inputs. +interburbulator_caption_prize=Prize: __1__ __2__ __3__ __4__ +interburbulator_caption_claimed= (claimed) +interburbulator_speak=[color=red]Brontion: __1__[/color] +interburbulator_robot_name=Brontion +interburbulator_introduction=Interburbul is a game made by Brontion Burbulator 33027756. The objective is to guess a 3D vector that projects into the highlighted cell chosen by Brontion. The 3D vectors of 3 corners of the grid are given, these points describe a 3D plane, and your guess is projected onto that plane from the origin {0,0,0}. There are 10 rounds of increasing difficulty and prizes for completing each one. Beat 5 challenges to unlock freeplay mode and set your own challenge. +interburbulator_random=Random +interburbulator_freeplay=Freeplay +interburbulator_game_title=Play Interburbul +interburbulator_grid_size=Grid size: +interburbulator_target_cell=Target cell: +interburbulator_top_left=Top left +interburbulator_top_right=Top right +interburbulator_bottom_left=Bottom left +interburbulator_attempt=Attempt +interburbulator_attempt_limited=Attempt (__1__/__2__) +interburbulator_attempt_locked=Attempt (Locked) +interburbulator_submit=Submit attempt +interburbulator_greeting=Human, come here and play my game. I'm on __1__ in the __2__ system. +interburbulator_challenge_locked_1=Try again later. +interburbulator_challenge_locked_2=You've used all your attempts for now. +interburbulator_challenge_locked_3=Wait a moment before starting again. +interburbulator_challenge_locked_4=You can try again after 20 seconds. +interburbulator_challenge_locked_5=Wait 20 seconds, then I'll unlock the challenge. +interburbulator_challenge_locked_6=The challenge is locked for 20 seconds. +cannot_do_via_satellite=Cannot be done remotely. +scan-progress-update=Surface scan progress for __1__: X __2__ Y __3__ +out_of_reach=Out of reach +capturable=Capturable +touch-to-capture=Touch to capture +capture-blocked=Capture blocked by hostile +suffix_ruin=__1__ ruin +migration-recipe-changed=[img=utility/danger_icon] Recipe changed: __1__ +migrate_0_5_056=[img=utility/warning_icon] Space Exploration v0.5.60 Migration: [img=virtual-signal/se-spaceship] Spaceship mechanics changed, see [img=virtual-signal/informatron] Informatron > Spaceships or changelog.txt for more details. +migrate_0_5_073=[img=utility/warning_icon] Iridite and Naquitie are now considered "hard" resources and require an Area Mining Drill. Vitamelange planets now have a minimum threat level (they always have a few biters, already generated surfaces are not affected). +panel-open=[font=count-font]▼[/font] [font=default-bold]__1__[/font] +panel-closed=[font=count-font]▶[/font] [font=default-bold]__1__[/font] +panel-integrity-name=Integrity +panel-speed-name=Speed +panel-position-name=Position +panel-destination-name=Destination +no_zone_found=No zone found +zone_must_be_a_homeworld=Zone must be a homeworld +no_force_found=No force found +no_force_data_found=No force data found +reset_discoveries_for_force=Reset discoveries for force: __1__ +gate_low_power=Gate tried to draw more power than available. +gate-portal-leads-home=The portal is stable and leads to your final destination. Enter the portal to win the game. +gate_portal_danger=Something is coming through the portal. +gate_portal_fail=The distortion is unstable. The distortion vector does not lead anywhere. +choose_coordinates=Choose coordinates +destination_preview=Destination Preview: +empty=Empty +delivery_cannon_canister_destroyed_by=Your delivery cannon canister from __1__ was destroyed by __2__ defences. +delivery_cannon_defended_canister=Defences on __1__ successfully shot down an enemy delivery cannon capsule. Shots fired: [img=item/se-meteor-defence] __2__ [img=item/se-meteor-point-defence] __3__ +delivery_cannon_defended_canister_failed=[color=red]Defences on __1__ failed to shoot down an enemy delivery cannon capsule. Shots fired: [img=item/se-meteor-defence] __2__ [img=item/se-meteor-point-defence] __3__[/color] +dimensional_anchor_limit_1=You cannot have more than 1 Dimensional anchor per star. +dimensional_anchor_place_on_star=Must be placed in close orbit of a star. +label_status=Status: __1__ +label_energy=Energy: __1__ +label_cargo=Cargo: __1__ +label_cargo_rocket_sections=Cargo rocket sections: __1__ +label_cargo_safety=Cargo safety: __1__ +label_landing_chance=Landing chance: __1__ +label_efficiency=Efficiency: __1__ +label_destination=Destination: __1__ +label_destination_position=Destination position: __1__ +label_liquid_rocket_fuel=Liquid rocket fuel: __1__ +label_rocket_sections=Rocket sections: __1__ +label_space_capsule=Space Capsule: __1__ +landingpad_unloading_required=Unloading required before next payload +landingpad_ready=Ready for next payload +landingpad_rocket_inboud=Rocket Inbound +none_general_vicinity=None - General vicinity +none_cannot_launch=None - Cannot launch +launch_trigger=Launch Trigger +any_landing_pad_with_name=Any landing pad with name +launchpad_requires_satellite=No navigation data, launch a satellite from the Satellite rocket silo. +launchpad_launching_rocket=Launching rocket! +launchpad_constructing_rocket=Constructing rocket +launchpad_space_capsule_required=Space capsule required +launchpad_invalid_destination=Invalid destination +launchpad_loading_fuel=Loading fuel +launchpad_ready_loading_cargo=Ready - Loading cargo +launchpad_ready_cargo_full=Ready - Cargo full +launchpad_waiting_for_empty_pad=Waiting for available empty landing pad. +launchpad_waiting_for_pad=Waiting for available landing pad. +launchpad_no_pad_matches=No landing pads found matching name. +launchpad_launch_delayed=Launch (Delayed) +launchpad_launch_delayed_tooltip=Waiting for target launch pad to empty. Manual launch can override. +launchpad_launch_in_progress=Launch in progress +variable=Variable +cargo_loss_tooltip=Surviving stacks numbers are rounded up, unique items are never lost. +survivability_loss_tooltip=Failure results in loss of all rocket sections. Cargo is still delivered in cargo pods with minimal damage. +requires_landing_pad=Requires landing pad. +survivability_loss_no_pad_tooltip=All rocket sections will be lost but cargo is still delivered in cargo pods with minimal damage. +interstellar_launch_satellite_to_see_star=Insufficient data, launch more satellites to view the system. +meteor_shower_report=[img=virtual-signal/se-meteor] __1__/__2__ meteors destroyed. __3__\n [img=item/se-meteor-defence] __4__ shots fired. __5__/__6__ structures remain ready.\n [img=item/se-meteor-point-defence] __7__ shots fired. __8__/__9__ structures remain ready. +nexus_no_characters=__1__ has reached critical speed for nexus activation but no characters are aboard. +gps_invalid=GPS tag specifies invalid surface. +gps_no_zone=The GPS tag is on a different surface which cannot be viewed via satellite. +gps_undiscovered=Cannot view location via satellite, zone is not discovered. +gps_requires_satellite=The GPS tag is on a different surface, launch a satellite to view the location. +clamp_must_be_on_grid=Must be aligned to the 2x2 rail grid +clamp_invalid_empty_space=2 tiles at clamp back cannot be empty space +spaceship_try_replace_console=Spaceship not found. Try replacing the console. + +[damage-type-name] +cold=Cold +suffocation=Suffocation +meteor=Meteor + +[entity-name] +se-linked-container=Arcolink storage +vase=Vase +wooden-barrel=Wooden barrel +furnace-ruin=Ruined stone stack +workshop-ruin=Ruined workshop +iron-wood-chest=Old chest +iron-wood-chest-remnants=Ruined old chest +stone-rubble=Stone rubble +se-gate-blocker=Unstable space +se-gate-blocker-void=Unstable space +destroyed-cargo-pod=Destroyed cargo pod +meteorite=Meteorite +rocket-silo=Satellite rocket silo +rocket-fragment=Rocket fragment +se-antimatter-reactor=Antimatter reactor +se-beryllium-ore=Beryl +se-cargo-rocket-cargo-pod=Cargo pod +se-cryonite=Cryonite +se-condenser-turbine=Condenser turbine +se-condenser-turbine-tank=Condenser turbine +se-condenser-turbine-generator=Condenser turbine +se-core-fragment-processor=Core fragment processor +se-core-miner=Core mining drill +se-core-miner-drill=Core mining drill +se-cryogun-ice=Ice wall +se-dimensional-anchor=Dimensional anchor +se-electric-boiler=Electric boiler +se-fluid-burner-generator=Fluid isothermic generator +se-fuel-refinery=Fuel refinery +se-gate-fragment=Artifact fragment +se-holmium-ore=Holminite +se-iridium-ore=Iridite +se-meteor-defence-container=Meteor defence installation +se-meteor-defence-charger=Meteor defence installation +se-meteor-point-defence-container=Meteor point defence +se-meteor-point-defence-charger=Meteor point defence +se-meteor-point-defence-charger-overcharged=Meteor point defence - Quickcharge mode +se-methane-ice=Methane ice +se-naquium-ore=Naquitite +se-pulveriser=Pulveriser +se-rocket-launch-pad=Cargo rocket silo +se-rocket-launch-pad-tank=Cargo rocket silo +se-rocket-launch-pad-silo=Cargo rocket silo +se-rocket-launch-pad-combinator=Cargo rocket silo +se-rocket-launch-pad-_-seat=Cargo rocket silo +se-rocket-launch-pad-settings=Cargo rocket silo +se-rocket-landing-pad=Cargo landing pad +se-space-accumulator=Holmium accumulator +se-space-accumulator-2=Naquium accumulator +se-space-astrometrics-laboratory=Astrometrics facility +se-space-biochemical-laboratory=Biochemical facility +se-space-assembling-machine=Space assembling machine +se-space-capsule-_-vehicle=Space capsule +se-space-curved-rail=Space rail +se-space-decontamination-facility=Decontamination facility +se-space-electromagnetics-laboratory=Electromagnetics facility +se-space-genetics-laboratory=Genetics facility +se-space-growth-facility=Growth facility +se-space-gravimetrics-laboratory=Gravimetrics facility +se-space-hypercooler=Hypercooler +se-space-laser-laboratory=Laser facility +se-lifesupport-facility=Lifesupport facility +se-space-manufactory=Space manufactory +se-space-material-fabricator=Material fabricator +se-space-mechanical-laboratory=Mechanical facility +se-space-particle-accelerator=Particle accelerator +se-space-particle-collider=Particle collider +se-space-plasma-generator=Plasma generator +se-space-radiation-laboratory=Radiation facility +se-space-radiator=Thermal radiator +se-space-radiator-2=Thermal radiator 2 +se-recycling-facility=Recycling facility +se-space-pipe=Space pipe +se-space-pipe-long=Long space pipe +se-space-pipe-long-straight=Long straight space pipe __1__ +se-space-pipe-long-junction=Long junction space pipe __1__ +se-space-pipe-to-ground=Space pipe to ground +se-space-science-lab=Space science laboratory +se-space-solar-panel=Flat solar panel +se-space-solar-panel-2=Flat solar panel 2 +se-space-solar-panel-3=Flat solar panel 3 +se-space-spectrometry-facility=Spectrometry facility +se-space-straight-rail=Space rail +se-space-supercomputer-1=Supercomputer +se-space-supercomputer-2=Quantum supercomputer +se-space-supercomputer-3=Neural supercomputer +se-space-supercomputer-4=Deep supercomputer +se-space-telescope-radio=Radio telescope +se-space-telescope-microwave=Microwave telescope +se-space-telescope=Telescope +se-space-telescope-xray=Xray telescope +se-space-telescope-gammaray=Gamma ray telescope +se-space-thermodynamics-laboratory=Thermodynamics facility +se-space-splitter=Space splitter +se-space-transport-belt=Space transport belt +se-space-underground-belt=Space underground belt +se-spaceship-antimatter-engine=Spaceship antimatter engine +se-spaceship-antimatter-booster-tank=Spaceship antimatter booster tank +se-spaceship-console=Spaceship console +se-spaceship-console-output=Spaceship console signal output +se-spaceship-console-alt=Damaged spaceship console +se-spaceship-gate=Spaceship door +se-spaceship-ion-engine=Spaceship ion engine +se-spaceship-ion-booster-tank=Spaceship ion booster tank +se-spaceship-obstacle=Space debris +se-spaceship-rocket-engine=Spaceship rocket engine +se-spaceship-rocket-booster-tank=Spaceship rocket booster tank +se-spaceship-wall=Spaceship wall +se-water-ice=Water ice +se-vitamelange=Vitamelange +se-vulcanite=Vulcanite +small-asteroid=Small asteroid +medium-asteroid=Medium asteroid +large-asteroid=Large asteroid +se-gate-part=Artifact piece +se-gate-platform-scaffold=Artifact jury rig +se-gate-lock-switch=Movable component +se-gate-lock-combinator=Combinator-attachment +se-gate-platform=Artifact augmentation platform +se-gate-platform-combinator=Combinator-attachment +se-gate-energy-interface=Power platform +se-gate-platform-button-switch=Button +se-gate-tank-input=Fluid input +se-gate-tank-output=Fluid output +se-pyramid-a=Geometric structure +se-pyramid-b=Geometric structure +se-pyramid-c=Geometric structure +se-cartouche-a=Cartouche +se-cartouche-b-a=Cartouche +se-cartouche-b-b=Cartouche +se-cartouche-chest=Ancient container +se-glyph=Glyph +glyph=Glyph +se-gate-addon=Artifact augmentation +se-gate-platform-button-middle=Stop +se-gate-platform-button-left=Left +se-gate-platform-button-right=Right +beacon=Basic beacon +se-wide-beacon=Wide area beacon +se-wide-beacon-2=Wide area beacon 2 +se-supercharger=Supercharger +se-addon-power-pole=Addon power pole +se-pylon=Pylon +se-pylon-substation=Pylon substation +se-pylon-construction=Construction pylon +se-pylon-construction-roboport=Construction pylon +se-pylon-construction-radar=Radar construction pylon +se-pylon-construction-radar-roboport=Radar construction pylon +se-pylon-construction-radar-radar=Radar construction pylon +se-shield-projector=Shield projector +se-shield-projector-shield-floor-east=Energy shield +se-shield-projector-shield-floor-north=Energy shield +se-shield-projector-shield-floor-northeast=Energy shield +se-shield-projector-shield-floor-northwest=Energy shield +se-shield-projector-shield-floor-south=Energy shield +se-shield-projector-shield-floor-southeast=Energy shield +se-shield-projector-shield-floor-southwest=Energy shield +se-shield-projector-shield-floor-west=Energy shield +se-shield-projector-shield-wall-east=Energy shield +se-shield-projector-shield-wall-north=Energy shield +se-shield-projector-shield-wall-northeast=Energy shield +se-shield-projector-shield-wall-northwest=Energy shield +se-shield-projector-shield-wall-south=Energy shield +se-shield-projector-shield-wall-southeast=Energy shield +se-shield-projector-shield-wall-southwest=Energy shield +se-shield-projector-shield-wall-west=Energy shield +se-shield-projector-barrier=Energy shield +se-naquium-heat-pipe=Naquium heat pipe +se-naquium-heat-pipe-horizontal=Naquium heat pipe horizontal +se-naquium-heat-pipe-vertical=Naquium heat pipe vertical +se-naquium-heat-pipe-long=Naquium heat pipe long __1__ +se-deep-space-transport-belt=Deep space transport belt +se-deep-space-transport-belt-black=Black deep space transport belt +se-deep-space-transport-belt-white=White deep space transport belt +se-deep-space-transport-belt-red=Red deep space transport belt +se-deep-space-transport-belt-yellow=Yellow deep space transport belt +se-deep-space-transport-belt-green=Green deep space transport belt +se-deep-space-transport-belt-cyan=Cyan deep space transport belt +se-deep-space-transport-belt-blue=Blue deep space transport belt +se-deep-space-transport-belt-magenta=Magenta deep space transport belt +se-deep-space-underground-belt=Deep space underground belt +se-deep-space-underground-belt-black=Black deep space underground belt +se-deep-space-underground-belt-white=White deep space underground belt +se-deep-space-underground-belt-red=Red deep space underground belt +se-deep-space-underground-belt-yellow=Yellow deep space underground belt +se-deep-space-underground-belt-green=Green deep space underground belt +se-deep-space-underground-belt-cyan=Cyan deep space underground belt +se-deep-space-underground-belt-blue=Blue deep space underground belt +se-deep-space-underground-belt-magenta=Magenta deep space underground belt +se-deep-space-splitter=Deep space splitter +se-deep-space-splitter-black=Black deep space splitter +se-deep-space-splitter-white=White deep space splitter +se-deep-space-splitter-red=Red deep space splitter +se-deep-space-splitter-yellow=Yellow deep space splitter +se-deep-space-splitter-green=Green deep space splitter +se-deep-space-splitter-cyan=Cyan deep space splitter +se-deep-space-splitter-blue=Blue deep space splitter +se-deep-space-splitter-magenta=Magenta deep space splitter +se-core-fissure=Core fissure +se-big-turbine=High temperature turbine generator +se-big-turbine-generator=High temperature turbine generator +se-big-turbine-tank=High temperature turbine generator +se-big-heat-exchanger=High temperature heat exchanger +se-blueprint-registration-point=Blueprint registration point +se-delivery-cannon=Delivery cannon +se-delivery-cannon-settings=Delivery cannon +se-delivery-cannon-energy-interface=Delivery cannon +se-delivery-cannon-chest=Delivery cannon chest +se-delivery-cannon-weapon=Weapons delivery cannon +se-delivery-cannon-weapon-settings=Weapons delivery cannon +se-delivery-cannon-weapon-energy-interface=Weapons delivery cannon +se-spaceship-clamp=Spaceship clamp +se-spaceship-clamp-place=Spaceship clamp +se-spaceship-clamp-power-pole-external-east=Spaceship clamp wire pass-through +se-spaceship-clamp-power-pole-external-west=Spaceship clamp wire pass-through +se-bloater-pool-cloud=Bloatburst pool +se-energy-transmitter-emitter=Energy beam emitter +se-energy-transmitter-chamber=Energy beam chamber +se-energy-transmitter-injector=Energy beam injector +se-energy-transmitter-injector-reactor=Energy beam injector +se-energy-receiver=Energy beam receiver +se-energy-beam-defence=Umbrella +se-nexus=Nexus +se-nexus-charger=Nexus +se-space-probe-rocket=Space probe rocket +se-space-probe-rocket-silo=Space probe rocket silo +se-interburbulator-interface=Interburbulator interface +se-interburbulator-control=Interburbulator control +se-interburbulator-projector=Interburbulator projector +se-burbulator=Brontion Burbulator 33027756 + +[entity-description] +pipe=Fluid distribution. +pipe-to-ground=Underground fluid distribution. +straight-rail=Train tracks. +curved-rail=Train tracks. +stone-furnace=Smelts ores. +steel-furnace=Smelts ores. +electric-furnace=Smelts ores. +burner-assembling-machine=A burner-based automated crafting structure. +assembling-machine-1=An automated crafting structure. +assembling-machine-2=An automated crafting structure. +assembling-machine-3=An automated crafting structure. +oil-refinery=Converts crude oil to more useful products. +se-fuel-refinery=An automated fuel processing structure. +chemical-plant=An automated crafting structure. +lab=An automated research structure. +burner-lab=An automated research structure. +transport-belt=A conveyor that moves items. +fast-transport-belt=A conveyor that moves items. +express-transport-belt=A conveyor that moves items. +underground-belt=A conveyor that moves items underground. +fast-underground-belt=A conveyor that moves items underground. +express-underground-belt=A conveyor that moves items underground. +splitter=A conveyor-based splitting, merging, and sorting machine. +fast-splitter=A conveyor-based splitting, merging, and sorting machine. +express-splitter=A conveyor-based splitting, merging, and sorting machine. +se-gate-platform-scaffold=Whatever the ring is it won't work. This is a construction site to make some repairs, install a few motors, sensors, control interface, and other addons. +se-gate-lock-switch=Press __CONTROL__rotate__ to move manually. +se-gate-platform-button-switch=Press __CONTROL__rotate__ to push. +se-gate-lock-combinator=Not implemented yet. +se-gate-platform-combinator=Not implemented yet. +se-gate-energy-interface=Provides power to the artifact. +rocket-silo=Launch a satellite into space to unlock "Navigation Satellite Mode" and to discover new planets, moons, and asteroid belts in the star system the satellite is launched from. Can discover new stars once the current system is fully scanned. +se-antimatter-reactor=Annihilates antimatter with matter to generate extreme heat. +se-beryllium-ore=Beryllium ore. +se-condenser-turbine=75% the energy efficiency of a steam turbine but 99% of the steam used is returned as water. Temperature range: 100 to 999. +se-core-fragment-processor=Extracts resources from core fragments. +se-core-miner=Allows endless extraction of resources from planets and moons, but has diminishing returns if multiple are used on the same body. Consumes 50MW. +se-core-miner-drill=Allows endless extraction of resources from planets and moons, but has diminishing returns if multiple are used on the same body. Consumes 50MW. +se-dimensional-anchor=[font=default-bold][color=#f5cb48]Placement restriction: Close Star Orbit[/color][/font]\nUses a star's gravity well as a stabilizing point for a spatial anomaly. +se-electric-boiler=Creates steam from water using electrical energy. 90% energy efficient. +se-fluid-burner-generator=Requires liquid fuel with an energy value (such as liquid rocket fuel) to generate electricity. Simple and compact but lacks the energy efficiency of larger steam-based systems. Designed for space. Actual fluid consumption depends on fluid fuel value. +se-holmium-ore=Holmium ore. +se-iridium-ore=Iridium ore.\n[font=default-bold][color=#e4cead]Mineable by:[/color][/font] [img=entity/area-mining-drill] __ENTITY__area-mining-drill__ +se-meteor-defence-container=Can defend an entire planet from meteors but can only shoot 1 meteor a time. Must be loaded with meteor defence ammo and fully charged to fire. 80% accuracy. Needs to recharge after firing. Draws 20MW when recharging. +se-meteor-defence-charger=Can defend an entire planet from meteors but can only shoot 1 meteor a time. Must be loaded with meteor defence ammo and fully charged to fire. 80% accuracy. Needs to recharge after firing. Draws 20MW when recharging. +se-meteor-point-defence-container=Defends an area from meteors. Able to shoot up to 4 meteors per volley. Must be loaded with meteor point defence ammo and fully charged to fire. Range 64, 50% accuracy, takes time to recharge after firing. Rotate to change charge mode. +se-meteor-point-defence-charger=Defends an area from meteors. Able to shoot up to 4 meteors per volley. Must be loaded with meteor point defence ammo and fully charged to fire. Range 64, 50% accuracy, takes time to recharge after firing. Rotate to change charge mode. +se-meteor-point-defence-charger-overcharged=Defends an area from up to 4 meteors. Range 64, 50% accuracy, takes time to recharge after firing. An overcharged defence has decreased power leakage at the cost of power fluctuations when firing occurs. +se-naquium-ore=Naquium ore. +se-rocket-launch-pad=Launches its inventory into space. Can take passengers, enter using __CONTROL__toggle-driving__ near the front door. See Cargo Rockets in [img=virtual-signal/informatron] InformaTron for more information [__CONTROL__informatron__] +se-rocket-landing-pad=A payload delivery site for cargo rocket capsules. +se-space-assembling-machine=A modified assembling machine that can work in space. +se-space-astrometrics-laboratory=Combines, compares, and quantifies different sources of astronomic information. +se-space-biochemical-laboratory=An advanced chemical lab that specialises in bio-chemistry. Can also perform more basic chemical and oil processing. +se-space-capsule-_-vehicle=Can be used to take passengers back to the closest planet surface. Enter the capsule using __CONTROL__toggle-driving__. +se-space-decontamination-facility=Cleans substances for use in sterile environments, and prepares liquids for use in low-pressure conditions. +se-space-electromagnetics-laboratory=Equipment for intense magnetic field and extremely high voltage applications. +se-space-genetics-laboratory=A lab dedicated to genetic sequencing, genetic modification, and genetic printing of cultures. +se-space-gravimetrics-laboratory=Analyses and simulates gravitational disturbances. +se-space-growth-facility=Grows biological specimens under a range of controlled conditions that are impossible elsewhere. In addition to standard climate controls, everything from micro micro-gravity vats to high-G centrifuges are available. +se-space-hypercooler=Performs a heat exchange on thermofluid, making one hotter and the other colder. +se-space-laser-laboratory=Experiments with lasers. Eye protection must be worn. +se-lifesupport-facility=Sustaining life in more hostile environments. +se-space-manufactory=A giant assembling machine, but can craft more complicated recipes. Only works in space (or spaceships). +se-space-material-fabricator=Synthesises new materials. A cross between a particle collider and 3d printer. +se-space-mechanical-laboratory=Provides a range of mechanical processes: Crushing, tearing, shearing, vibration, etc. +se-space-particle-accelerator=Accelerates particles near to the speed of light. +se-space-particle-collider=Collides high-speed particles and analyses the results. +se-space-pipe=You can walk over it. +se-space-pipe-long=A good cheap way to move fluids long distances quickly. You can walk over it. +se-space-pipe-long-straight=Length __1__. Does not connect on the sides. Good for parallel pipes and moving fluid over long distances quickly. +se-space-pipe-long-junction=Length __1__. Has a central junction with side connections. Good for moving fluids quickly though assembly lines. +se-space-pipe-to-ground=Expensive and limited range, only to be used when required. You can walk over space pipe. +se-space-plasma-generator=Generates a variety of plasmas. +se-pulveriser=Pulverises and crushes harder minerals and planet core fragments. +se-space-radiation-laboratory=A relatively safe place to play with radioactive material. Can be used for uranium processing. +se-space-radiator=Radiates away excess heat from overheated thermofluid. +se-space-radiator-2=Radiates away excess heat from overheated thermofluid. +se-recycling-facility=Recycles scrap and other byproducts into resources. +se-space-solar-panel=A high efficiency solar panel that you can walk on. +se-space-solar-panel-2=An advanced high efficiency solar panel that you can walk on. +se-space-solar-panel-3=An extremely high efficiency solar panel that you can walk on. +se-space-spectrometry-facility=Spectrophotometry, gas chromatography, mass spectrometry, and other spectrography. Fire stuff at a wall, make it bend, see where it hits. +se-space-supercomputer-1=Data manipulation, processing and simulation. +se-space-supercomputer-2=Quantum computing. Improved data manipulation, processing and simulation. +se-space-supercomputer-3=Adaptive neural net on a quantum computing framework. Improved data manipulation, processing and simulation. +se-space-supercomputer-4=A nano-engineered semi-organic supercomputer that leverages space warping and higher dimensions for increased processing density and energy transport. +se-space-straight-rail=Designed for space but can be used on the ground too. +se-space-science-lab=Can use advanced science packs. +se-space-telescope=A sophisticated telescope sensitive to multiple wavelengths around the visible spectrum. +se-space-telescope-gammaray=Gamma rays don't refract so you can't focus them with lenses. This powerful telescope uses mirrors and special detectors instead. +se-space-telescope-xray=X-rays are blocked by most atmospheres. This powerful telescope is designed for space where atmosphere is not a problem. +se-space-telescope-microwave=A huge telescope that detects microwaves and the cosmic microwave background. +se-space-telescope-radio=A huge telescope that detects very weak radio waves from distance sources. +se-space-thermodynamics-laboratory=Undertakes processes that involve temperature extremes. Can also perform basic thermal processes, such as smelting. +se-space-transport-belt=Stops your items from floating away. +se-spaceship-antimatter-engine=[font=default-bold][color=#f5cb48]Placement restriction: Spaceship Floor[/color][/font]\nAnnihilates an antimatter stream. Counts as bulkhead for spaceship containment. +se-spaceship-antimatter-booster-tank=[font=default-bold][color=#f5cb48]Placement restriction: Spaceship Floor[/color][/font]\nHolds antimatter. Required for spaceship launch. +se-spaceship-ion-engine=[font=default-bold][color=#f5cb48]Placement restriction: Spaceship Floor[/color][/font]\nUses a small amount of ion stream but lots of power for propulsion. Counts as bulkhead for spaceship containment. +se-spaceship-ion-booster-tank=[font=default-bold][color=#f5cb48]Placement restriction: Spaceship Floor[/color][/font]\nHolds ion stream. Required for spaceship launch, but can only launch from space. +se-spaceship-console=[font=default-bold][color=#f5cb48]Placement restriction: Spaceship Floor[/color][/font]\nUse to move a spaceship between planets, moons, orbits, and asteroid fields. Must be contained within spaceship walls/doors, no gaps or holes. Integrity check highlights problems. +se-spaceship-console-output=Outputs signals relating to the spaceship's current status. See Spaceships in [img=virtual-signal/informatron] InformaTron for more information [__CONTROL__informatron__]. +se-spaceship-console-alt=[font=default-bold][color=#f5cb48]Placement restriction: Spaceship Floor[/color][/font]\nThis spaceship console is damaged and cannot be used to control a spaceship. +se-spaceship-gate=[font=default-bold][color=#f5cb48]Placement restriction: Spaceship Floor[/color][/font]\nA forcefield stops decompression when the door opens. Counts as bulkhead for spaceship containment. +se-spaceship-rocket-engine=[font=default-bold][color=#f5cb48]Placement restriction: Spaceship Floor[/color][/font]\nBurns liquid rocket fuel. Counts as bulkhead for spaceship containment. +se-spaceship-rocket-booster-tank=[font=default-bold][color=#f5cb48]Placement restriction: Spaceship Floor[/color][/font]\nHolds liquid rocket fuel. Required for spaceship launch. +se-spaceship-wall=[font=default-bold][color=#f5cb48]Placement restriction: Spaceship Floor[/color][/font]\nCounts as bulkhead for spaceship containment, diagonal gaps break containment. +beacon=8 module slots. Transmits the effects of modules to nearby friendly entities within 3 tiles. Multiple beacons affecting the same entity will overload it and prevent it from operating. +se-wide-beacon=15 module slots. Transmits the effects of modules to nearby friendly entities within 14 tiles. Multiple beacons affecting the same entity will overload it and prevent it from operating. +se-wide-beacon-2=20 module slots. Transmits the effects of modules to nearby friendly entities within 14 tiles. Multiple beacons affecting the same entity will overload it and prevent it from operating. +kr-singularity-beacon=A compact 100% effect efficiency beacon with short range. Transmits the effects of modules to nearby friendly entities within 2 tiles. Multiple beacons affecting the same entity will overload it and prevent it from operating. +se-supercharger=Can charge up to 64 robots at a time at high speed. Structure max power draw is 1GW. +se-addon-power-pole=A small electric pole designed to be attached to buildings or for precise control over electrical coverage. +se-pylon=Distributes electrical energy. 64 tile connection range. +se-pylon-substation=Distributes electrical energy. 64 tile connection range, 64x64 power supply area. +se-pylon-construction=Distributes electrical energy and extends construction area. 64 tile connection range, 64x64 construction area. +se-pylon-construction-radar=Distributes electrical energy, extends construction area, and provides radar vision. 64 tile connection range, 256x256 construction & vision area. 4x4 logistic area. +se-shield-projector=Creates a protective forcefield. More energy is required when the projector is charging or when the shield takes damage. Can block enemy projectiles if the "Combat Mechanics Overhaul" mod is installed. +se-big-turbine=A large generator that takes in 5000°C steam, outputs 500°C steam at the other end, and outputs water at the sides. 2% of input energy is unused and contained in the output steam. +se-big-heat-exchanger=A large heat exchanger designed for high temperatures and high capacity. +se-delivery-cannon=A railgun capable of shooting resources into orbit and beyond. Causes damage if not caught safely, use with caution. 1GJ capacity, 50MW when charging. +se-delivery-cannon-chest=An armoured chest designed to safely catch high velocity falling resources. Requires inventory space to safely catch deliveries. +se-delivery-cannon-weapon=A large railgun capable of shooting ammunitions into orbit and beyond. Use with caution. +se-spaceship-clamp=A clamp on a spaceship can anchor to a clamp facing the opposite direction. Counts as bulkhead for spaceship containment. +se-spaceship-clamp-place=A clamp on a spaceship can anchor to a clamp facing the opposite direction. Counts as bulkhead for spaceship containment. +se-spaceship-clamp-power-pole-external-east=A wire connection point on a clamp. Passes circuit signals and power through to the connected clamp while anchored. +se-spaceship-clamp-power-pole-external-west=A wire connection point on a clamp. Passes circuit signals and power through to the connected clamp while anchored. +se-space-accumulator=High density energy storage. +se-space-accumulator-2=High density energy storage. +se-energy-transmitter-emitter=The central building that generates an inter-surface energy beam. Can be used as a weapon or to transfer power to an energy beam receiver. Requires attached energy beam chamber, and connected energy beam injectors. Beam strength is based on the number of injectors. +se-energy-transmitter-chamber=Must be connected to an energy beam emitter. Other chambers can be connected to the end or middle of either side. Energy beam injectors can be connected to the sides only. +se-energy-transmitter-injector=Must be attached to an energy beam chamber and connected to an emitter. Injectors have a fixed power draw, each one increases the energy sent giving more heat to a receiver, or increases the speed and damage of the beam weapon. +se-energy-transmitter-injector-reactor=Must be attached to an energy beam chamber and connected to an emitter. Injectors have a fixed power draw, each one increases the energy sent giving more heat to a receiver, or increases the speed and damage of the beam weapon. +se-energy-receiver=Captures an energy beam as heat. The emitter must be in Energise mode and the target must be on the receiver. +se-energy-beam-defence=Energy beam defence facility. Defends against space-based energy beams and coronal mass ejections. The only requirement to function is energy, the base draw is 10MW but increases based on the strength of attacking beams. Only 1 is needed per surface against Coronal mass ejections, against energy beams weapons 1 Umbrella can defend against up to 500GW of attacking power. See Energy Beams in [img=virtual-signal/informatron] InformaTron for more information [__CONTROL__informatron__] +spidertron=Can be deployed from a cargo rocket if the rocket is not set to a landing pad. +se-nexus=Only functions on a moving spaceship, energy use is proportional to speed. Can gain data from interstellar movement, data generation is based on ship kinetic energy. The Nexus is a designed to act as a distortion drive and with the right technology can enable escape from the local stellar cluster.\nApplies 2000 container integrity stress. +se-nexus-charger=Only functions on a moving spaceship, energy use is proportional to speed. Can gain data from interstellar movement, data generation is based on ship kinetic energy. The Nexus is a designed to act as a distortion drive and with the right technology can enable escape from the local stellar cluster. +se-space-probe-rocket-silo=A rocket silo for launching space probes. +se-linked-container=A container linked by extradimensional space to other containers. The links of the container depend on the surface it is first placed on. + +[equipment-name] +energy-shield-equipment=Energy shield +energy-shield-mk2-equipment=Energy shield MK2 +energy-shield-mk3-equipment=Energy shield MK3 +energy-shield-mk4-equipment=Energy shield MK4 +energy-shield-mk5-equipment=Energy shield MK5 +energy-shield-mk6-equipment=Energy shield MK6 +se-adaptive-armour-equipment-1=Adaptive armour MK1 +se-adaptive-armour-equipment-2=Adaptive armour MK2 +se-adaptive-armour-equipment-3=Adaptive armour MK3 +se-adaptive-armour-equipment-4=Adaptive armour MK4 +se-adaptive-armour-equipment-5=Adaptive armour MK5 +se-rtg-equipment=Portable RTG +se-rtg-equipment-2=Portable RTG MK2 +se-lifesupport-equipment-1=Lifesupport equipment MK1 +se-lifesupport-equipment-2=Lifesupport equipment MK2 +se-lifesupport-equipment-3=Lifesupport equipment MK3 +se-lifesupport-equipment-4=Lifesupport equipment MK4 + +[equipment-description] +energy-shield-equipment=A protective bubble that charges quickly but uses a lot of energy. +energy-shield-mk2-equipment=A protective bubble that charges quickly but uses a lot of energy. +energy-shield-mk3-equipment=A protective bubble that charges quickly but uses a lot of energy. +energy-shield-mk4-equipment=A protective bubble that charges quickly but uses a lot of energy. +energy-shield-mk5-equipment=A protective bubble that charges quickly but uses a lot of energy. +energy-shield-mk6-equipment=A protective bubble that charges quickly but uses a lot of energy. +se-adaptive-armour-equipment-1=Armour that uses energy to self-repair. Slowly increases protection value over time. +se-adaptive-armour-equipment-2=Armour that uses energy to self-repair. Slowly increases protection value over time. +se-adaptive-armour-equipment-3=Armour that uses energy to self-repair. Slowly increases protection value over time. +se-adaptive-armour-equipment-4=Armour that uses energy to self-repair. Slowly increases protection value over time. +se-adaptive-armour-equipment-5=Armour that uses energy to self-repair. Slowly increases protection value over time. +se-rtg-equipment=Radioisotope thermoelectric generator. A portable generator that converts the heat from radioactive decay into electricity. Lasts for decades with no additional fuel required. +se-rtg-equipment-2=Radioisotope thermoelectric generator. An improved portable generator that converts the heat from radioactive decay into electricity. Lasts for decades with no additional fuel required. +se-lifesupport-equipment-1=Increases lifesupport efficiency by +100% (additive). If installed in a non-spacesuit efficiency bonus is halved and won't work in space. +se-lifesupport-equipment-2=Increases lifesupport efficiency by +200% (additive). If installed in a non-spacesuit efficiency bonus is halved and won't work in space. +se-lifesupport-equipment-3=Increases lifesupport efficiency by +400% (additive). If installed in a non-spacesuit efficiency bonus is halved and won't work in space. +se-lifesupport-equipment-4=Increases lifesupport efficiency by +800% (additive). If installed in a non-spacesuit efficiency bonus is halved and won't work in space. + +[fluid-name] +se-antimatter-stream=Antimatter stream +se-bio-sludge=Biosludge +se-contaminated-bio-sludge=Contaminated biosludge +se-contaminated-space-water=Contaminated cosmic water +se-chemical-gel=Chemical gel +se-decompressing-steam=Condensing steam +se-liquid-rocket-fuel=Liquid rocket fuel +se-methane-gas=Methane gas +se-methane-gas-mixed=Mixed methane gas +se-nutrient-gel=Nutrient gel +se-neural-gel=Neural gel +se-neural-gel-2=Advanced neural gel +se-ion-stream=Ion stream +se-plasma-stream=Plasma stream +se-particle-stream=Particle stream +se-proton-stream=Proton stream +se-space-coolant=Thermofluid 25°C +se-space-coolant-hot=Thermofluid 25°C +se-space-coolant-warm=Cool thermofluid -10°C +se-space-coolant-cold=Cold thermofluid -100°C +se-space-coolant-supercooled=Supercooled thermofluid -273°C +se-space-water=Cosmic water +se-beryllium-hydroxide=Beryllium hydroxide +se-cryonite-slush=Cryonite slush + +[fluid-description] +se-space-water=Water that will not freeze at low pressure, more suitable for most space applications. +se-space-coolant=The default temperature of thermofluid. +se-space-coolant-hot=The default temperature of thermofluid. +se-space-coolant-warm=The temperature of thermofluid after being cooled by thermal radiators. +se-space-coolant-cold=The temperature of thermofluid after hypercooling. +se-space-coolant-supercooled=The temperature of thermofluid after repeated hypercooling. + +[fuel-category-name] +antimatter=Antimatter fuel + +[item-group-name] +space=Space +science=Science +spaceship=Spaceship +bob-fluids=Fluids +resources=Resources +intermediate-products=Manufacturing +combat=Equipment & Combat + +[item-name] +spidertron=Spidertron +core-fragment=Core fragment (__1__) +effectivity-module-4=Efficiency module 4 +effectivity-module-5=Efficiency module 5 +effectivity-module-6=Efficiency module 6 +effectivity-module-7=Efficiency module 7 +effectivity-module-8=Efficiency module 8 +effectivity-module-9=Efficiency module 9 +glass=Glass +productivity-module-4=Productivity module 4 +productivity-module-5=Productivity module 5 +productivity-module-6=Productivity module 6 +productivity-module-7=Productivity module 7 +productivity-module-8=Productivity module 8 +productivity-module-9=Productivity module 9 +rocket-fuel=Solid rocket fuel +sand=Sand +solid-sand=Washed sand +washed-sand=Washed sand +satellite=Navigation satellite +se-satellite-telemetry=Satellite telemetry +se-antimatter-canister=Antimatter canister +se-astrometric-data=Astrometric data +se-astronomic-catalogue-1=Astronomic catalogue +se-astronomic-catalogue-2=Broad astronomic catalogue +se-astronomic-catalogue-3=Comprehensive astronomic catalogue +se-astronomic-catalogue-4=Extended astronomic catalogue +se-astronomic-insight=Astronomic insight +se-astronomic-science-pack-1=Astronomic science pack 1 +se-astronomic-science-pack-2=Astronomic science pack 2 +se-astronomic-science-pack-3=Astronomic science pack 3 +se-astronomic-science-pack-4=Astronomic science pack 4 +se-atomic-data=Atomic data +se-beryllium-ore=Beryl +se-ballistic-shielding-data=Ballistic shielding data +se-beryllium-ore-crushed=Crushed beryl +se-beryllium-ore-washed=Washed beryl +se-beryllium-plate=Beryllium plate +se-beryllium-powder=Beryllium powder +se-beryllium-ingot=Beryllium ingot +se-beryllium-sulfate=Beryllium sulfate +se-bio-combustion-data=Bio combustion data +se-bio-combustion-resistance-data=Bio combustion resistance data +se-bio-spectral-data=Bio-spectral data +se-biochemical-data=Biochemical data +se-biochemical-resistance-data=Biochemical resistance data +se-bioculture=Bio-culture +se-bioelectrics-data=Bioelectric data +se-biological-catalogue-1=Biological catalogue +se-biological-catalogue-2=Broad biological catalogue +se-biological-catalogue-3=Comprehensive biological catalogue +se-biological-catalogue-4=Extended biological catalogue +se-biological-insight=Biological insight +se-biological-science-pack-1=Biological science pack 1 +se-biological-science-pack-2=Biological science pack 2 +se-biological-science-pack-3=Biological science pack 3 +se-biological-science-pack-4=Biological science pack 4 +se-biomechanical-data=Biomechanical data +se-biomechanical-resistance-data=Biomechanical resistance data +se-boson-data=Boson data +se-broken-data=Broken data card +se-canister=Secure canister +se-biogun=Bio gun +se-bloater-ammo=Bloatburst ammo +se-pheromone-ammo=Pheromone dart +se-cryogun=Cryogun +se-cryogun-ammo=Glacier ammo +se-rocket-launch-pad-silo-dummy-ingredient-item=Cargo rocket (Hidden Ingredient) +se-rocket-launch-pad-silo-dummy-result-item=Cargo rocket (Hidden Result) +se-cargo-rocket-cargo-pod=Cargo pod +se-cargo-rocket-fuel-tank=Rocket fuel tank +se-cargo-rocket-section=Cargo rocket section +se-cargo-rocket-section-packed=Cargo rocket section packed +se-cold-thermodynamics-data=Cold thermodynamics data +se-comparative-genetic-data=Comparative genetic data +se-compressive-strength-data=Compressive strength data +se-conductivity-data=Conductivity data +se-contaminated-scrap=Contaminated scrap +se-core-fragment-omni=Core fragment +se-corrosion-resistance-data=Corrosion resistance data +se-cryogenics-data=Cryogenics data +se-cryonite=Cryonite +se-cryonite-crushed=Crushed cryonite +se-cryonite-washed=Washed cryonite +se-cryonite-rod=Cryonite rod +se-cryonite-ion-exchange-beads=Anion ion exchange beads +se-dark-energy-data=Dark energy data +se-darkmatter-data=Dark matter data +se-data-storage-substrate-cleaned=Polished data storage substrate +se-data-storage-substrate=Rough data storage substrate +se-decompression-data=Decompression data +se-decompression-resistance-data=Decompression resistance data +se-universal-catalogue=Universal catalogue +se-deep-space-science-pack=Deep space science pack +se-deep-space-science-pack-1=Deep space science pack 1 +se-deep-space-science-pack-2=Deep space science pack 2 +se-deep-space-science-pack-3=Deep space science pack 3 +se-deep-space-science-pack-4=Deep space science pack 4 +se-doppler-shift-data=Doppler shift data +se-durability-data=Durability data +se-electrical-shielding-data=Electrical shielding data +se-electromagnetic-field-data=Electromagnetic field data +se-empty-data=Blank data card +se-empty-lifesupport-canister=Empty lifesupport canister +se-energy-catalogue-1=Energy catalogue +se-energy-catalogue-2=Broad energy catalogue +se-energy-catalogue-3=Comprehensive energy catalogue +se-energy-catalogue-4=Extended energy catalogue +se-energy-insight=Energy insight +se-energy-science-pack-1=Energy science pack 1 +se-energy-science-pack-2=Energy science pack 2 +se-energy-science-pack-3=Energy science pack 3 +se-energy-science-pack-4=Energy science pack 4 +se-entanglement-data=Entanglement data +se-enriched-naquium=Enriched naquium +se-exotic-fission-data=Exotic fission data +se-exotic-singularity-data=Singularity data +se-explosion-shielding-data=Explosion shielding data +se-experimental-alloys-data=Experimental alloys data +se-experimental-biochemical-data=Experimental biochemical data +se-experimental-bioculture=Experimental bio-culture +se-experimental-genetic-data=Experimental genetic data +se-experimental-material-decay-data=Experimental material decay data +se-experimental-material-spectral-data=Experimental material spectral data +se-experimental-material=Experimental material prototype +se-experimental-specimen=Experimental biomass +se-experimental-superconductor=Superconductor prototype +se-forcefield-data=Forcefield data +se-friction-data=Friction data +se-fusion-test-data=Fusion test data +se-gammaray-detector=Gamma ray detector +se-gammaray-observation-data=Gamma ray observation data +se-gammaray-test-data=Gamma ray data +se-gate-fragment=Artifact fragment +se-genetic-data=Genetic data +se-gravity-wave-observation-data=Gravity wave observation data +se-gravity-wave-data=Gravity wave data +se-gravimetric-observation-data=Gravimetric observation data +se-gravimetric-test-data=Gravimetric test data +se-gravitational-lensing-data=Gravitational lensing data +se-heat-shielding=Heat shielding +se-holmium-ore=Holminite +se-holmium-ore-crushed=Crushed holminite +se-holmium-ore-washed=Washed holminite +se-holmium-powder=Holmium powder +se-holmium-plate=Holmium plate +se-holmium-ingot=Holmium ingot +se-hot-thermodynamics-data=Hot thermodynamics data +se-impact-shielding-data=Impact shielding data +se-infrared-observation-data=Infrared observation data +se-ion-spectrometry-data=Ion spectrometry data +se-iridium-ore=Iridite +se-iridium-ore-crushed=Crushed iridite +se-iridium-ore-washed=Washed iridite +se-iridium-piledriver=Iridium piledriver +se-iridium-powder=Iridium powder +se-iridium-plate=Iridium plate +se-iridium-ingot=Iridium ingot +se-junk-data=Junk data card +se-laser-shielding-data=Laser shielding data +se-lepton-data=Lepton data +se-lifesupport-canister=Lifesupport canister +se-machine-learning-data=Machine learning data +se-magnetic-canister=Magnetic canister +se-magnetic-monopole-data=Magnetic monopole data +se-material-decay-data=Material decay data +se-material-science-pack-1=Material science pack 1 +se-material-science-pack-2=Material science pack 2 +se-material-science-pack-3=Material science pack 3 +se-material-science-pack-4=Material science pack 4 +se-material-spectral-data=Material spectral data +se-material-testing-pack=Material testing pack +se-material-catalogue-1=Material catalogue +se-material-catalogue-2=Broad material catalogue +se-material-catalogue-3=Comprehensive material catalogue +se-material-catalogue-4=Extended material catalogue +se-material-insight=Material insight +se-medpack=Medpack +se-medpack-2=Medpack 2 +se-medpack-3=Medpack 3 +se-medpack-4=Medpack 4 +se-meteor-defence=Meteor defence installation +se-meteor-defence-ammo=Meteor defence installation ammo +se-meteor-point-defence=Meteor point defence +se-meteor-point-defence-ammo=Meteor point defence ammo +se-methane-ice=Methane ice +se-micro-black-hole-data=Micro black hole data +se-microwave-observation-data=Microwave observation data +se-negative-pressure-data=Negative pressure data +se-nano-cold-thermodynamics-data=Nanomaterial cold thermodynamics data +se-nano-compressive-strength-data=Nanomaterial compressive strength data +se-nano-hot-thermodynamics-data=Nanomaterial hot thermodynamics data +se-nanomaterial=Nanomaterial +se-nano-tensile-strength-data=Nanomaterial tensile strength data +se-naquium-ore=Naquitite +se-naquium-ore-crushed=Crushed naquitite +se-naquium-ore-washed=Washed naquitite +se-naquium-powder=Naquium powder +se-naquium-plate=Naquium plate +se-naquium-ingot=Naquium ingot +se-neural-anomaly-data=Neural anomaly data +se-nutrient-vat=Nutrient vat +se-observation-frame-blank=Blank observation frame +se-observation-frame-gammaray=Gamma ray observation frame +se-observation-frame-infrared=Infrared observation frame +se-observation-frame-microwave=Microwave observation frame +se-observation-frame-radio=Radio wave observation frame +se-observation-frame-uv=UV observation frame +se-observation-frame-visible=Visible observation frame +se-observation-frame-xray=Xray observation frame +se-orbital-data=Orbital calculations data +se-particle-beam-shielding-data=Particle beam shielding data +se-plague-bomb=Plague rocket +se-plasma-canister=Plasma canister +se-plasma-electrodynamics-data=Plasma electrodynamics data +se-plasma-thermodynamics-data=Plasma thermodynamics data +se-polarisation-data=Polarisation data +se-pressure-containment-data=Pressure containment data +se-quantum-phenomenon-data=Quantum phenomenon data +se-quark-data=Quark data +se-radiation-data=Radiation data +se-radiation-exposure-data=Radiation exposure data +se-radiation-exposure-resistance-data=Radiation resistance data +se-radiation-shielding-data=Radiation shielding data +se-radio-observation-data=Radio wave observation data +se-rigidity-data=Rigidity data +se-rtg-equipment=Portable RTG +se-rtg-equipment-2=Portable RTG MK2 +se-scrap=Scrap +se-shear-strength-data=Shear strength data +se-significant-data=Significant data +se-significant-specimen=Significant biomass +se-singularity-data=Singularity data +se-space-capsule=Space capsule +se-space-mirror=Multispectral mirror +se-space-platform-plating=Space platform plating +se-space-platform-scaffold=Space platform scaffold +se-space-rail=Space rail +se-spaceship-floor=Spaceship floor +se-specimen=Biomass +se-subatomic-data=Subatomic data +se-superconductivity-data=Superconductivity data +se-superconductor=Superconductor +se-superconductive-cable=Superconductive cable +se-tensile-strength-data=Tensile strength data +se-tesla-ammo=Tesla gun ammo +se-tesla-gun=Tesla gun +se-thruster-suit=Thruster suit +se-thruster-suit-2=Thruster suit MK2 +se-thruster-suit-3=Thruster suit MK3 +se-thruster-suit-4=Thruster suit MK4 +se-timespace-anomaly-data=Timespace anomaly data +se-used-lifesupport-canister=Used lifesupport canister +se-uv-observation-data=UV observation data +se-visible-observation-data=Visible observation data +se-vitamelange=Vitamelange +se-vitamelange-nugget=Vitamelange nugget +se-vitamelange-roast=Vitamelange roast +se-vitamelange-spice=Vitamelange spice +se-vitamelange-extract=Vitamelange extract +se-vulcanite=Vulcanite +se-vulcanite-crushed=Crushed vulcanite +se-vulcanite-washed=Washed vulcanite +se-vulcanite-block=Vulcanite block +se-vulcanite-ion-exchange-beads=Cation ion exchange beads +se-water-ice=Water ice +se-xray-observation-data=Xray observation data +se-zero-point-energy-data=Zero point energy data +se-rocket-science-pack=Rocket science pack +space-science-pack=Optimisation science pack +speed-module-4=Speed module 4 +speed-module-5=Speed module 5 +speed-module-6=Speed module 6 +speed-module-7=Speed module 7 +speed-module-8=Speed module 8 +speed-module-9=Speed module 9 +se-aeroframe-pole=Aeroframe pole +se-aeroframe-scaffold=Aeroframe scaffold +se-aeroframe-bulkhead=Aeroframe bulkhead +se-lattice-pressure-vessel=Lattice pressure vessel +se-heavy-girder=Heavy girder +se-heavy-bearing=Heavy bearing +se-heavy-composite=Heavy composite +se-heavy-assembly=Heavy assembly +se-bioscrubber=Bioscrubber +se-vitalic-epoxy=Vitalic epoxy +se-vitalic-reagent=Vitalic reagent +se-vitalic-acid=Vitalic acid +se-self-sealing-gel=Self-sealing gel +se-holmium-cable=Holmium cable +se-holmium-solenoid=Holmium solenoid +se-quantum-processor=Quantum processor +se-dynamic-emitter=Dynamic emitter +se-naquium-processor=Naquium processor +se-naquium-cube=Naquium cube +se-naquium-tessaract=Naquium tesseract +se-wide-beacon=Wide area beacon +se-wide-beacon-2=Wide area beacon 2 +se-lifesupport-equipment-1=Lifesupport equipment MK1 +se-lifesupport-equipment-2=Lifesupport equipment MK2 +se-lifesupport-equipment-3=Lifesupport equipment MK3 +se-lifesupport-equipment-4=Lifesupport equipment MK4 +se-naquium-heat-pipe=Naquium heat pipe +se-naquium-heat-pipe-horizontal=Naquium heat pipe horizontal +se-naquium-heat-pipe-vertical=Naquium heat pipe vertical +se-naquium-heat-pipe-long=Naquium heat pipe long __1__ +se-deep-space-transport-belt=Deep space transport belt +se-deep-space-transport-belt-black=Black deep space transport belt +se-deep-space-transport-belt-white=White deep space transport belt +se-deep-space-transport-belt-red=Red deep space transport belt +se-deep-space-transport-belt-yellow=Yellow deep space transport belt +se-deep-space-transport-belt-green=Green deep space transport belt +se-deep-space-transport-belt-cyan=Cyan deep space transport belt +se-deep-space-transport-belt-blue=Blue deep space transport belt +se-deep-space-transport-belt-magenta=Magenta deep space transport belt +se-deep-space-underground-belt=Deep space underground belt +se-deep-space-underground-belt-black=Black deep space underground belt +se-deep-space-underground-belt-white=White deep space underground belt +se-deep-space-underground-belt-red=Red deep space underground belt +se-deep-space-underground-belt-yellow=Yellow deep space underground belt +se-deep-space-underground-belt-green=Green deep space underground belt +se-deep-space-underground-belt-cyan=Cyan deep space underground belt +se-deep-space-underground-belt-blue=Blue deep space underground belt +se-deep-space-underground-belt-magenta=Magenta deep space underground belt +se-deep-space-splitter=Deep space splitter +se-deep-space-splitter-black=Black deep space splitter +se-deep-space-splitter-white=White deep space splitter +se-deep-space-splitter-red=Red deep space splitter +se-deep-space-splitter-yellow=Yellow deep space splitter +se-deep-space-splitter-green=Green deep space splitter +se-deep-space-splitter-cyan=Cyan deep space splitter +se-deep-space-splitter-blue=Blue deep space splitter +se-deep-space-splitter-magenta=Magenta deep space splitter +se-blueprint-registration-point=Blueprint registration point +se-delivery-cannon-capsule=Delivery cannon capsule +se-delivery-cannon-capsule-packed=Delivery cannon capsule: __1__ +se-delivery-cannon-targeter=Delivery cannon targeter +se-delivery-cannon-weapon-capsule=Weapon delivery capsule +se-delivery-cannon-weapon-capsule-packed=Weapon delivery capsule: __1__ +se-delivery-cannon-weapon-targeter=Weapon delivery cannon targeter +se-energy-transmitter-targeter=Energy beam targeter +se-arcosphere=Arcosphere +se-arcosphere-a=λ Arcosphere lambda +se-arcosphere-b=ξ Arcosphere xi +se-arcosphere-c=ζ Arcosphere zeta +se-arcosphere-d=θ Arcosphere theta +se-arcosphere-e=ε Arcosphere epsilon +se-arcosphere-f=φ Arcosphere phi +se-arcosphere-g=γ Arcosphere gamma +se-arcosphere-h=ω Arcosphere omega +se-arcosphere-collector=Arcosphere collector +se-star-probe=Star probe +se-belt-probe=Asteroid belt probe +se-void-probe=Interstellar void probe +se-star-probe-data=Star probe data +se-belt-probe-data=Asteroid belt probe data +se-void-probe-data=Interstellar void probe data +se-nano-engineering-data=Nanoengineering data +se-annihilation-data=Annihilation data +se-naquium-structural-data=Naquium structural data +se-hyperlattice-data=Hyperlattice data +se-naquium-energy-data=Naquium energy data +se-space-fold-data=Space folding data +se-space-warp-data=Space warping data +se-space-dialation-data=Space dialation data +se-space-injection-data=Space injection data +se-interstellar-data=Interstellar travel data +se-teleportation-data=Teleportation data +se-wormhole-data=Wormhole data +se-rhga-data=Reality hypergraph analysis data +se-deep-catalogue-1=Deep space catalogue +se-deep-catalogue-2=Broad deep space catalogue +se-deep-catalogue-3=Comprehensive deep space catalogue +se-deep-catalogue-4=Extended deep space catalogue +se-space-probe-rocket=Space probe rocket +se-space-probe-rocket-deployed=Space probe rocket (Deployed) +se-railgun=Railgun +se-railgun-ammo=Railgun ammo + +[item-description] +automation-science-pack=Used by basic science labs for research. +chemical-science-pack=Used by basic science labs for research. +logistic-science-pack=Used by basic science labs for research. +military-science-pack=Used by basic science labs for research. +production-science-pack=Used by basic science labs for research. +satellite=The satellite should be put in a satellite rocket silo (or Space probe rocket silo). The satellite can discover precise coordinates of bodies in the solar system it is launched, or distant stars. Provides [img=item/se-satellite-telemetry] Satellite telemetry. +se-satellite-telemetry=Logged satellite telemetry needed for Rocket Science. Gained by launching a [img=item/satellite] Navigation Satellite from a satellite rocket silo (or Space probe rocket silo). +se-antimatter-canister=The densest form of energy in a safe to move container. +se-astronomic-science-pack-1=Used by space science labs for research. +se-astronomic-science-pack-2=Used by space science labs for research. +se-astronomic-science-pack-3=Used by space science labs for research. +se-astronomic-science-pack-4=Used by space science labs for research. +se-beryllium-ore=Beryllium ore. +se-biological-science-pack-1=Used by space science labs for research. +se-biological-science-pack-2=Used by space science labs for research. +se-biological-science-pack-3=Used by space science labs for research. +se-biological-science-pack-4=Used by space science labs for research. +se-canister=A multiipurpose containment vessel. +se-cargo-rocket-cargo-pod=A cargo rocket section component. +se-cargo-rocket-fuel-tank=A cargo rocket section component. +se-cargo-rocket-section=The key cargo rocket component. Insert into the cargo rocket silo. 100 are required per rocket. Can be recovered from rocket landings (20% base recoverability). +se-cargo-rocket-section-packed=Cargo rocket sections packed for transit. Must be unpacked to be used in rocket construction. +se-bloater-ammo=Makes an infectious pool of biosludge on the ground. Infected enemies bloat up making movement difficult and doing damage over time. If they die while bloated they burst and their splattering entrails deal damage to nearby enemies, potentially causing a cascade. The total damage of gore projectiles is 50% their max hp. +se-pheromone-ammo=Confuses an enemy biter or spitter, making them think that you are friendly and their kin are the enemy. +se-cryogun=Make a wall of ice that can freeze enemies. +se-deep-space-science-pack=Used by space science labs for research. +se-energy-science-pack-1=Used by space science labs for research. +se-energy-science-pack-2=Used by space science labs for research. +se-energy-science-pack-3=Used by space science labs for research. +se-energy-science-pack-4=Used by space science labs for research. +se-heat-shielding=A composite panel used for high-temperature applications and space structures. +se-holmium-ore=Holmium ore. +se-iridium-ore=Iridium ore. +se-material-science-pack-1=Used by space science labs for research. +se-material-science-pack-2=Used by space science labs for research. +se-material-science-pack-3=Used by space science labs for research. +se-material-science-pack-4=Used by space science labs for research. +se-medpack=Use to heal yourself. +se-medpack-2=Use to heal yourself. +se-medpack-3=Use to heal yourself. +se-medpack-4=Use to heal yourself. +se-meteor-defence=Can defend an entire planet from meteors but can only shoot 1 meteor a time. Must be loaded with meteor defence ammo and fully charged to fire. 80% accuracy. Needs to recharge after firing. Draws 20MW when recharging. +se-meteor-defence-ammo=Destroys meteorites. Must be loaded into a meteor defence installation. +se-meteor-point-defence=Defends an area from meteors. Able to shoot up to 4 meteors per volley. Must be loaded with meteor defence ammo and fully charged to fire. Range 64, 50% accuracy, takes time to recharge after firing. Rotate to change charge mode. +se-meteor-point-defence-container=Destroys meteorites. Must be loaded into a meteor point defence structure. +se-naquium-ore=Naquium ore. Only found in deep space, a treasure of the interstellar void. +se-rocket-launch-pad-silo-dummy-ingredient-item=Made by inserting 100 Cargo rocket sections and 1 Space capsule into a Cargo rocket silo. +se-rtg-equipment=Radioisotope thermoelectric generator. An portable generator that converts the heat from radioactive decay into electricity. Lasts for decades with no additional fuel required. +se-rtg-equipment-2=Radioisotope thermoelectric generator. An improved portable generator that converts the heat from radioactive decay into electricity. Lasts for decades with no additional fuel required. +se-plague-bomb=Can extinguish all life from a planet. May cause enemies to become more hostile as they slowly die. Destroyes biters, trees, fish, vitamelange, and more. Humans will need lifesupport to survive. +se-space-capsule=A control capsule required for Cargo Rockets. Can be used to take passengers back to the closest planet surface. Enter the capsule using __CONTROL__toggle-driving__. +se-space-platform-plating=[font=default-bold][color=#f5cb48]Placement restriction: Space[/color][/font]\nAdvanced plating that allows fast movement over space platform. +se-space-platform-scaffold=[font=default-bold][color=#f5cb48]Placement restriction: Space[/color][/font]\nBasic space platform scaffold that allows you to place certain structures in space. +se-space-rail=Rails that are safe to use in space because they prevent the train from flying off the tracks and destroying everything. No space platform is required, they are fully self-supporting. Can also be used on land for aesthetic reasons. +se-spaceship-floor=This flooring must be under all parts of a spaceship with spaceship walls on the outer edge. Any gaps in the floor will break containment, those sections may detach. +se-superconductive-cable=A superconductive composite cable that does not require active cooling. +se-tesla-gun=Rapid-fire chain-lightning. +se-thruster-suit=A spacesuit that is required to survive in space. \nHas thruster and magboots. +se-thruster-suit-2=A spacesuit that is required to survive in space. \nHas stronger thrusters, increased inventory and larger grid. +se-thruster-suit-3=A spacesuit that is required to survive in space. \nHas stronger thrusters, increased inventory and larger grid. +se-thruster-suit-4=A spacesuit that is required to survive in space. \nHas stronger thrusters, increased inventory and larger grid. +space-science-pack=Used for upgrades of many existing items. +se-rocket-science-pack=Used by space science labs for research. Must be made in space. +utility-science-pack=Used by basic science labs for research. +beacon=8 module slots. Transmits the effects of modules to nearby friendly entities within 3 tiles. Multiple beacons affecting the same entity will overload it and prevent it from operating. +se-wide-beacon=15 module slots. Transmits the effects of modules to nearby friendly entities within 14 tiles. Multiple beacons affecting the same entity will overload it and prevent it from operating. +se-wide-beacon-2=20 module slots. Transmits the effects of modules to nearby friendly entities within 14 tiles. Multiple beacons affecting the same entity will overload it and prevent it from operating. +se-lifesupport-equipment-1=Increases lifesupport efficiency by +100% (additive). If installed in a non-spacesuit efficiency bonus is halved and won't work in space. +se-lifesupport-equipment-2=Increases lifesupport efficiency by +200% (additive). If installed in a non-spacesuit efficiency bonus is halved and won't work in space. +se-lifesupport-equipment-3=Increases lifesupport efficiency by +400% (additive). If installed in a non-spacesuit efficiency bonus is halved and won't work in space. +se-lifesupport-equipment-4=Increases lifesupport efficiency by +800% (additive). If installed in a non-spacesuit efficiency bonus is halved and won't work in space. +se-delivery-cannon=Allows the accurate delivery of contained resources via a delivery cannon. +se-delivery-cannon-weapon=Allows the accurate delivery of special ammunitions via a weapons delivery cannon. +se-arcosphere=Found in the interstellar void. +se-deep-catalogue-1=Naquium and nanoengineering. +se-deep-catalogue-2=Hyperlattice structures, singularities and annihilation. +se-deep-catalogue-3=Micro space distortion and extradimensional nanoengineering. +se-deep-catalogue-4=Macro space distortion and extradimensional travel. +se-arcosphere-collector=Collects arcospheres from the interstellar void. Must be launched from a space probe rocket silo that is in an asteroid field. Arcospheres are more difficult to find as more are collected. +se-star-probe=Collects data from a star and returns [img=item/se-star-probe-data] Star probe data. Must be launched from a space probe rocket silo that is in close orbit of a star. +se-belt-probe=Collects data from an asteroid belt and returns [img=item/se-belt-probe-data] Asteroid belt probe data. Must be launched from a space probe rocket silo that is in an asteroid belt. +se-void-probe=Collects data from the void and returns [img=item/se-void-probe-data] Interstellar void probe data. Must be launched from a space probe rocket silo that is in an asteroid field. +se-interstellar-data=Made in a Nexus in a moving spaceship. Moving in interstellar space with a larger faster ship generates data much faster. + +[recipe-name] +core-fragment=Core fragment processing (__1__) +rocket-fuel=Solid rocket fuel +se-astrometric-analysis-multispectral-1=Multispectral astrometric analysis 1 +se-astrometric-analysis-multispectral-2=Multispectral astrometric analysis 2 +se-astrometric-analysis-multispectral-3=Multispectral astrometric analysis 3 +se-astronomic-insight-1=Astronomic insight +se-astronomic-insight-2=Broad astronomic insight +se-astronomic-insight-3=Comprehensive astronomic insight +se-astronomic-insight-4=Extended astronomic insight +se-biological-insight-1=Biological insight +se-biological-insight-2=Broad biological insight +se-biological-insight-3=Comprehensive biological insight +se-biological-insight-4=Extended biological insight +se-bio-methane-to-crude-oil=Bio processing methane to crude oil +se-bio-sludge-crude-oil=Biosludge from experimental biomass +se-bio-sludge-decontamination=Biosludge decontamination +se-bio-sludge-from-fish=Biosludge from fish +se-bio-sludge-from-wood=Biosludge from wood +se-bio-sludge-from-vitamelange=Biosludge from vitamelange +se-bio-sludge=Biosludge from Biomass +se-broken-data-scrapping=Broken data card scrapping +se-cargo-rocket-section-pack=Packing cargo rocket sections +se-cargo-rocket-section-unpack=Unpacking cargo rocket sections +se-condenser-turbine-reclaim-water=Power generation with water reclamation. +se-core-fragment-omni=Core fragment processing +se-core-mining=Core mining +se-empty-antimatter-canister=Antimatter stream from canister +se-empty-barrel-scrapping=Empty barrel scrapping +se-empty-barrel-reprocessing=Empty barrel reprocessing +se-space-capsule-scrapping=Space capsule scrapping +se-cargo-pod-scrapping=Cargo pod scrapping +se-energy-insight-1=Energy insight +se-energy-insight-2=Broad energy insight +se-energy-insight-3=Comprehensive energy insight +se-energy-insight-4=Extended energy insight +se-formatting-1=Data formatting +se-formatting-2=Efficient data formatting +se-formatting-3=Advanced data formatting +se-formatting-4=Deep data formatting +se-material-insight-1=Material insight +se-material-insight-2=Broad material insight +se-material-insight-3=Comprehensive material insight +se-material-insight-4=Extended material insight +se-matter-fusion-copper=Matter fusion (Copper) +se-matter-fusion-dirty=Matter fusion (Scrap) +se-matter-fusion-iron=Matter fusion (Iron) +se-matter-fusion-stone=Matter fusion (Stone) +se-matter-fusion-uranium=Matter fusion (Uranium) +se-matter-fusion-to=Matter fusion (__1__) +se-orbital-data=Orbital calculations data +se-plasma-canister-empty=Empty plasma canister +se-pulverised-sand=Pulverised sand +se-radiating-space-coolant-fast=Fast cooling thermofluid to -10°C (Cool) +se-radiating-space-coolant-normal=Cooling thermofluid to -10°C (Cool) +se-radiating-space-coolant-slow=Efficient cooling thermofluid to -10°C (Cool) +se-mixed-methane-gas-separation=Mixed methane gas separation +se-rocket-fuel-from-water-copper=Rocket fuel from water +se-scrap-decontamination=Scrap decontamination +se-scrap-recycling=Scrap recycling +se-space-coolant-cold=Hypercooling thermofluid to -100°C (Cold) +se-space-coolant-supercooled=Hypercooling thermofluid to -273°C (Supercooled) +se-space-coolant-supercooled-cryonite=Cryocooling thermofluid to -273°C (Supercooled) +se-space-coolant-cold-cryonite=Cryocooling thermofluid to -100°C (Cold) +se-space-coolant-supercoole-cryonite=Cryocooling thermofluid to -273°C (Supercooled) +se-simulation-a=Astronomic simulation +se-simulation-ab=Panspermia simulation +se-simulation-abm=Xenoprogression simulation +se-simulation-am=Matter Distribution simulation +se-simulation-as=Astroparticle simulation +se-simulation-asb=Astrobionic simulation +se-simulation-asbm=Universal simulation +se-simulation-asm=Astrophysics simulation +se-simulation-b=Biological simulation +se-simulation-bm=Biomechanical simulation +se-simulation-m=Material simulation +se-simulation-s=Energy simulation +se-simulation-sb=Biochemical simulation +se-simulation-sbm=Nanite simulation +se-simulation-sm=Nanomaterial simulation +se-space-water-decontamination=Cosmic water decontamination +se-spaceship-rocket-engine-burn=Burn liquid rocket fuel +se-specimen-fish=Microgravity fish growth +se-specimen-wood=Microgravity wood growth +se-thermodynamics-coal=Pressure cooking to coal +se-used-lifesupport-canister-cleaning=Lifesupport canister cleaning +se-used-lifesupport-canister-cleaning-space=Lifesupport canister decontamination +space-science-pack=Optimisation science pack +se-rocket-science-pack=Rocket science pack +se-big-turbine-internal=Decompressing high temperature steam +se-arcosphere-fracture=Arcosphere polarisation +se-arcosphere-fold-in=Arcosphere inversion +se-arcosphere-fold-out=Arcosphere inversion +se-arcosphere-folding=Arcosphere folding: __1__ __2__ to __3__ __4__ +se-electric-boiling-void=Evaporation venting +se-space-probe-rocket-deployed=Space probe rocket (Deployed) +se-distortion-drive=Distortion drive +se-generic-scrapping=__1__ scrapping +se-generic-recycling=__1__ recycling + +[recipe-description] +se-astronomic-insight-2=More complicated, but more resource efficient. +se-astronomic-insight-3=More complicated, but more resource efficient. +se-astronomic-insight-4=More complicated, but more resource efficient. +se-biological-insight-2=More complicated, but more resource efficient. +se-biological-insight-3=More complicated, but more resource efficient. +se-biological-insight-4=More complicated, but more resource efficient. +se-core-mining=The actual fragment returned depends on the planet. The real crafting time depends on the number of core miners on the planet or moon. +se-energy-insight-2=More complicated, but more resource efficient. +se-energy-insight-3=More complicated, but more resource efficient. +se-energy-insight-4=More complicated, but more resource efficient. +se-material-insight-2=More complicated, but more resource efficient. +se-material-insight-3=More complicated, but more resource efficient. +se-material-insight-4=More complicated, but more resource efficient. +se-radiating-space-coolant-normal=Repeated cooling and heating of thermofluid causes degradation. +se-radiating-space-coolant-slow=Repeated cooling and heating of thermofluid causes degradation, slower cooling results in reduced loss. +se-radiating-space-coolant-fast=Repeated cooling and heating of thermofluid causes degradation, faster cooling results in increased loss. +se-delivery-cannon-weapon-pack-se-iridium-piledriver=Immense physical damage in a small area, secondary explosive damage in a shockwave. +se-arcosphere-fracture=Arcospheres can be collected with an [img=item/se-arcosphere-collector] Arcosphere collector. +se-distortion-drive=This process must be actively running to activate the Nexus distortion ability and win the game. Uses 6GW when at critical speed. + +[technology-name] +effectivity-module-4=Efficiency module 4 +effectivity-module-5=Efficiency module 5 +effectivity-module-6=Efficiency module 6 +effectivity-module-7=Efficiency module 7 +effectivity-module-8=Efficiency module 8 +effectivity-module-9=Efficiency module 9 +energy-shield-equipment=Energy shield +energy-shield-mk2-equipment=Energy shield MK2 +energy-shield-mk3-equipment=Energy shield MK3 +energy-shield-mk4-equipment=Energy shield MK4 +energy-shield-mk5-equipment=Energy shield MK5 +energy-shield-mk6-equipment=Energy shield MK6 +sand-processing=Sand processing +glass-processing=Glass processing +liquid-rocket-fuel=Liquid rocket fuel +productivity-module-4=Productivity module 4 +productivity-module-5=Productivity module 5 +productivity-module-6=Productivity module 6 +productivity-module-7=Productivity module 7 +productivity-module-8=Productivity module 8 +productivity-module-9=Productivity module 9 +rocket-silo=Satellite rocket silo +rocketry=Combat rocketry +se-adaptive-armour=Adaptive armour +se-antimatter-engine=Antimatter engine +se-antimatter-reactor=Antimatter reactor +se-antimatter-production=Antimatter production +se-astronomic-science-pack=Astronomic science pack +se-biological-science-pack=Biological science pack +se-condenser-turbine=Condenser turbine +se-core-miner=Core mining +se-biogun=Biogun +se-cryogun=Cryogun +se-deep-space-science-pack=Deep space science pack +se-deep-catalogue=Deep space catalogue +se-dimensional-anchor=Dimensional anchor +se-electric-boiler=Electric boiler +se-energy-science-pack=Energy science pack +se-fluid-burner-generator=Fluid isothermic generator +se-fuel-refining=Fuel refining +se-heat-shielding=Heat shielding +se-ion-engine=Ion engine +se-long-range-star-mapping=Long range star mapping +se-material-science-pack=Material science pack +se-medpack=Medpack +se-medpack-2=Medpack 2 +se-medpack-3=Medpack 3 +se-medpack-4=Medpack 4 +se-meteor-defence=Meteor defence installation +se-meteor-point-defence=Meteor point defence +se-nanomaterial=Nanomaterial +se-plague=The Plague +se-processing-beryllium=Beryllium processing +se-processing-cryonite=Cryonite processing +se-processing-holmium=Holmium processing +se-processing-iridium=Iridium processing +se-processing-naquium=Naquium processing +se-processing-vitamelange=Vitamelange processing +se-processing-vulcanite=Vulcanite processing +se-pulveriser=Pulveriser +se-railgun=Railgun +se-rocket-cargo-safety=Rocket cargo safety +se-rocket-fuel-from-water=Rocket fuel from water +se-rocket-launch-pad=Cargo rocket silo +se-rocket-landing-pad=Rocket landing pad +se-rocket-reusability=Rocket reusability +se-rocket-survivability=Rocket survivability +se-rtg-equipment=Portable RTG +se-rtg-equipment-2=Portable RTG MK2 +se-space-assembling=Space assembling +se-space-accumulator=Holmium accumulator +se-space-accumulator-2=Naquium accumulator +se-space-astrometrics-laboratory=Astrometrics facility +se-space-biochemical-laboratory=Biochemical facility +se-space-catalogue-astronomic=Astronomic catalogue +se-space-catalogue-biological=Biological catalogue +se-space-catalogue-universal=Universal catalogue +se-space-catalogue-energy=Energy catalogue +se-space-catalogue-material=Material catalogue +se-space-data-card=Data card +se-space-decontamination-facility=Decontamination facility +se-space-electromagnetics-laboratory=Electromagnetics facility +se-space-genetics-laboratory=Genetics facility +se-space-gravimetrics-laboratory=Gravimetrics facility +se-space-growth-facility=Growth Facility +se-space-hypercooling=Hypercooling +se-space-laser-laboratory=Laser facility +se-lifesupport-facility=Lifesupport facility +se-space-manufactory=Space manufactory +se-space-material-fabricator=Material fabricator +se-space-matter-fusion=Matter fusion +se-space-mechanical-laboratory=Mechanical facility +se-space-particle-accelerator=Particle accelerator +se-space-particle-collider=Particle collider +se-space-plasma-generator=Plasma generator +se-space-platform-plating=Space platform plating +se-space-platform-scaffold=Space platform scaffold +se-space-radiation-laboratory=Radiation facility +se-space-radiating-efficiency=Thermal radiating efficiency +se-space-radiating-speed=Thermal radiating speed +se-space-radiator=Thermal radiator +se-space-radiator-2=Thermal radiator 2 +se-space-rail=Space Railway +se-recycling-facility=Recycling facility +se-space-science-lab=Space science lab +se-space-simulation-ab=Panspermia simulation +se-space-simulation-am=Astromaterial simulation +se-space-simulation-as=Astroparticle simulation +se-space-simulation-bm=Biomechanical simulation +se-space-simulation-sb=Biochemical simulation +se-space-simulation-sm=Nanomaterial simulation +se-space-simulation-abm=Xenoprogression simulation +se-space-simulation-asb=Astrobionic simulation +se-space-simulation-asm=Astrophysics simulation +se-space-simulation-sbm=Nanite simulation +se-space-simulation-asbm=Universal simulation +se-space-solar-panel=Flat solar panel +se-space-spectrometry-facility=Spectrometry facility +se-space-supercomputer=Supercomputer +se-space-telescope=Telescope +se-space-telescope-gammaray=Gamma ray telescope +se-space-telescope-xray=Xray telescope +se-space-telescope-microwave=Microwave telescope +se-space-telescope-radio=Radio telescope +se-space-thermodynamics-laboratory=Thermodynamics facility +se-spaceship=Spaceship +se-spaceship-integrity=Spaceship Structural integrity +se-factory-spaceship=Factory spaceship +se-superconductive-cable=Superconductive cable +se-teleportation=Teleportation +se-tesla-gun=Tesla gun +se-thruster-suit=Thruster suit +space-science-pack=Optimisation science pack +se-rocket-science-pack=Rocket science pack +speed-module-4=Speed module 4 +speed-module-5=Speed module 5 +speed-module-6=Speed module 6 +speed-module-7=Speed module 7 +speed-module-8=Speed module 8 +speed-module-9=Speed module 9 +se-aeroframe-pole=Aeroframe pole +se-aeroframe-scaffold=Aeroframe scaffold +se-aeroframe-bulkhead=Aeroframe bulkhead +se-lattice-pressure-vessel=Lattice-pressure-vessel +se-heavy-girder=Heavy girder +se-heavy-bearing=Heavy bearing +se-heavy-composite=Heavy composite +se-heavy-assembly=Heavy assembly +se-bioscrubber=Bioscrubber +se-vitalic-epoxy=Vitalic epoxy +se-vitalic-reagent=Vitalic reagent +se-vitalic-acid=Vitalic acid +se-self-sealing-gel=Self-sealing gel +se-holmium-cable=Holmium cable +se-holmium-solenoid=Holmium solenoid +se-quantum-processor=Quantum processor +se-dynamic-emitter=Dynamic emitter +se-naquium-processor=Naquium processor +se-naquium-cube=Naquium cube +se-naquium-tessaract=Naquium tesseract +se-wide-beacon=Wide area beacon +se-wide-beacon-2=Wide area beacon 2 +se-lifesupport-equipment=Lifesupport equipment +se-lifesupport-equipment-1=Lifesupport equipment MK1 +se-lifesupport-equipment-2=Lifesupport equipment MK2 +se-lifesupport-equipment-3=Lifesupport equipment MK3 +se-lifesupport-equipment-4=Lifesupport equipment MK4 +se-supercharger=Supercharger +se-addon-power-pole=Addon power pole +se-pylon=Pylon +se-pylon-substation=Pylon substation +se-pylon-construction=Construction pylon +se-pylon-construction-radar=Radar construction pylon +se-shield-projector=Shield projector +se-deep-space-transport-belt=Deep space transport belts +se-big-turbine=High temperature turbine generator +se-big-heat-exchanger=High temperature heat exchanger +se-zone-discovery-random=Zone discovery +se-zone-discovery-targeted=Targeted zone discovery +se-zone-discovery-deep=Deep space zone discovery +se-delivery-cannon=Delivery cannon +se-delivery-cannon-capsule-iridium=Iridium delivery cannon capsule +se-delivery-cannon-weapon=Weapons delivery cannon +se-spaceship-clamps=Spaceship docking clamps +se-bio-upgrade-constitution=Bio upgrade: Constitution +se-bio-upgrade-strength=Bio upgrade: Strength +se-bio-upgrade-agility=Bio upgrade: Agility +se-bio-upgrade-dexterity=Bio upgrade: Dexterity +se-bio-upgrade-intelligence=Bio upgrade: Intelligence +se-energy-beaming=Energy beaming +se-energy-beam-defence=Umbrella: energy beam defence facility +se-nexus=Nexus +se-spaceship-victory=Spaceship victory +se-arcosphere=Arcosphere collection +se-arcosphere-folding=Arcosphere folding +se-space-probe=Space probe rocket silo +se-linked-container=Arcolink storage +k2-conversion=__1__ conversion + +[technology-description] +energy-shield-equipment=A protective bubble that charges quickly but uses a lot of energy. +energy-shield-mk2-equipment=A protective bubble that charges quickly but uses a lot of energy. +energy-shield-mk3-equipment=A protective bubble that charges quickly but uses a lot of energy. +energy-shield-mk4-equipment=A protective bubble that charges quickly but uses a lot of energy. +energy-shield-mk5-equipment=A protective bubble that charges quickly but uses a lot of energy. +energy-shield-mk6-equipment=A protective bubble that charges quickly but uses a lot of energy. +sand-processing=Crushing, grinding, and filtering raw material into clean sand. +glass-processing=Melting sand into glass. +rocket-silo=Allows you to launch a satellite into orbit to discover new planets. +se-adaptive-armour=Armour that uses energy to self-repair. Fills a similar role to energy shields with lower power requirements but much slower regeneration. +se-antimatter-engine=Annihilating antimatter to produce incredible thrust. +se-antimatter-reactor=Annihilates antimatter with matter to generate extreme heat. +se-antimatter-production=Making antimatter, the densest form of stored energy. +se-astronomic-science-pack=Allows research of technologies relating to space travel and interstellar logistics. +se-biological-science-pack=Allows research of technologies relating to improving your physical capabilities, bioweapons, and neural processing. +se-condenser-turbine=75% the energy efficiency of a steam turbine but 99% of the steam used is returned as water. Temperature range: 100 to 999. +se-core-miner=Allows endless extraction of resources from planets and moons, but has diminishing returns if multiple are used on the same body. +se-biogun=A gun that can use various bio weapons. +se-cryogun=Make a wall of ice that can freeze enemies. +se-deep-catalogue=Space distortion, exotic matter, and nano-engineering data structured ready for analysis and computer simulation. Required for the most advanced technologies. +se-deep-space-science-pack=Required for the most advanced technology +se-dimensional-anchor=Uses a star's gravity well as a stabilizing point for a spatial anomaly. +se-electric-boiler=Creates steam from water using electrical energy. 90% energy efficient. +se-energy-science-pack=Allows research of technologies relating to the fundamental forces, and subatomic discoveries. +se-fluid-burner-generator=Requires liquid fuel with an energy value (such as liquid rocket fuel) to generate electricity. Simple and compact but lacks the energy efficiency of larger steam-based systems. Designed for space. Actual fluid consumption depends on fluid fuel value. +se-fuel-refining=Refines more advanced fuels. +se-heat-shielding=A composite panel used for high-temperature applications and space structures. +se-ion-engine=Ion engines use a small amount of ion stream and a large amount of power for thrust to move a spaceship. Ion booster tanks are smaller than other booster tanks and can only launch from locations already in space. +se-long-range-star-mapping=Some distance galaxies can be identified by specific patterns of unusual stars. Results are logged to [img=virtual-signal/informatron] InformaTron [__CONTROL__informatron__]. +se-material-science-pack=Allows research of technologies relating to advanced materials for more advanced engineering requirements. +se-medpack=Use the medpack to heal yourself. +se-medpack-2=Use the medpack to heal yourself. +se-medpack-3=Use the medpack to heal yourself. +se-medpack-4=Use the medpack to heal yourself. +se-meteor-defence=Shoot meteors from the sky before they destroy your stuff. A meteor defence installation can protect an entire planet, but can only shoot one meteor at a time. +se-meteor-point-defence=Shoot meteors from the sky before they destroy your stuff. Meteor point defence can protect a small area from up to 4 meteors at a time. +se-nanomaterial=An intricate arrangement of different materials organised at the nano scale to make a composite with superior properties. +se-railgun=Electromagnetically accelerated darts propelled to such a speed that they leave a plasma trail before they vaporise. High damage, slow rate of fire. +se-plague=The great plague that eradicated all life from entire planets. Destroyes biters, trees, fish, vitamelange, and more. Humans will need lifesupport to survive. +se-processing-beryllium=Turning beryl into beryllium, an extremely light, strong, corrosion resistant and radiation resistant metal. It also has almost no interaction with xrays. +se-processing-cryonite=Processing frozen cryonite crystals into cryonite rods that have applications in refrigeration, cooling, and lubrication. Cryonite is mainly found on frozen planets. +se-processing-holmium=Turning holminite into holmium, a rare-earth metal with the highest magnetic permeability of any element. +se-processing-iridium=Turning iridite into iridium, the most corrosion-resistant metal and densest element at higher temperatures. Important for heavy duty applications. +se-processing-naquium=Turning the mysterious deep-space naquitite crystal into naquium, a metal-like material with unusual space-time interactions. +se-processing-vitamelange=Turning the primitive vitamelange rock-sponge into a valuable nutrient extract. +se-processing-vulcanite=Turning the volcanic vulcanite crystal into a refined powder used in advanced smelting, rocket fuel, and other high temperature chemical processes. Vulcanite is found on volcanic planets and in most core fragments. +se-pulveriser=Pulverises and crushes harder minerals and planet core fragments. +se-rocket-cargo-safety=Reduces the chance that cargo pods get damaged in transit by 10% (Multiplicative). +se-rocket-fuel-from-water=Generates hydrogen-oxygen rocket fuel via water electrolysis. +se-rocket-landing-pad=Allows you to deliver rocket cargo pods to a named landing pad. With further research it can also recover rocket parts. +se-rocket-launch-pad=Allows you to launch cargo into space or to other planets. +se-rocket-reusability=Increases the percentage of parts that can be recovered from a successful landing pad landing by 4% (Base is 20%, max is 100%). +se-rocket-science-pack=Allows research of technologies relating to the processing of exotic resources and the manufacturing of space-variants of ground-based structures. +se-rocket-survivability=Reduces the chance that rockets get damaged in transit or have a navigation failure that results in missing the landing pad by 10% (multiplicative). +se-rtg-equipment=Radioisotope thermoelectric generator. A portable generator that converts the heat from radioactive decay into electricity. Lasts for decades with no additional fuel required. +se-rtg-equipment-2=Radioisotope thermoelectric generator. An improved portable generator that converts the heat from radioactive decay into electricity. Lasts for decades with no additional fuel required. +se-space-accumulator=Buildings that store larger quantities of excess electric energy for later. +se-space-accumulator-2=Buildings that store incredibly vast quantities of excess electric energy for later. +se-space-assembling=A modified assembling machine that can work in space. +se-space-astrometrics-laboratory=Combines, compares, and quantifies different sources of astronomic information. +se-space-biochemical-laboratory=An advanced chemical lab that specialises in bio-chemistry. Can also perform more basic chemical and oil processing. +se-space-catalogue-astronomic=Astronomic data structured ready for analysis and computer simulation. Required for further astronomic research. +se-space-catalogue-biological=Biological data structured ready for analysis and computer simulation. Required for further biological research. +se-space-catalogue-universal=Combined data for analysis and computer simulation. Required for further deep space research. +se-space-catalogue-energy=Energy data structured ready for analysis and computer simulation. Required for further energy research. +se-space-catalogue-material=Material data structured ready for analysis and computer simulation. Required for further material research. +se-space-data-card=A multi-purpose data storage device. Required for more advanced data-driven research. +se-space-decontamination-facility=Cleans substances for use in sterile environments, and prepares liquids for use in low-pressure conditions. +se-space-electromagnetics-laboratory=Equipment for intense magnetic field and extremely high voltage applications. +se-space-genetics-laboratory=A lab dedicated to genetic sequencing, genetic modification, and genetic printing of cultures. +se-space-gravimetrics-laboratory=Analyses and simulates gravitational disturbances. +se-space-growth-facility=Grows biological specimens under a range of controlled conditions that are impossible elsewhere. In addition to standard climate controls, everything from micro micro-gravity vats to high-G centrifuges are available. +se-space-hypercooling=Performs a heat exchange on thermofluid, making one hotter and the other colder. +se-space-laser-laboratory=Experiments with lasers. Eye protection must be worn. +se-lifesupport-facility=Sustaining life in more hostile environments. +se-space-manufactory=A key technology for mass production in space. +se-space-material-fabricator=Synthesises new materials. A cross between a particle collider and 3d printer. +se-space-matter-fusion=Manufacturing materials via fusion. +se-space-mechanical-laboratory=Provides a range of mechanical processes: Crushing, tearing, shearing, vibration, etc. +se-space-particle-accelerator=Accelerates particles near to the speed of light. +se-space-particle-collider=Collides high-speed particles and analyses the results. +se-space-plasma-generator=Generates a variety of plasmas. +se-space-platform-plating=Robust space platform plating. Smooth and fast for spacewalking. +se-space-platform-scaffold=Basic space platform scaffolding. Something to build on but not great for spacewalking. +se-space-radiation-laboratory=A relatively safe place to play with radioactive material. Can be used for uranium processing. +se-space-radiator=Radiates away excess heat from overheated thermofluid. +se-space-radiator-2=Radiates away excess heat from overheated thermofluid. +se-space-radiating-efficiency=Slower but more resource-efficient cooling of overheated thermofluid. +se-space-radiating-speed=Faster but more resource-inefficient cooling of overheated thermofluid. +se-space-rail=Rails that are safe to use in space because they prevent the train from flying off the tracks and destroying everything. Can also be used on land for aesthetic reasons. +se-recycling-facility=Scrapping items and reprocessing scrap into raw materials. +se-space-science-lab=Allows processing of rocket science packs and more advanced space science. +se-space-simulation-ab=More efficient simulation by combining multiple disciplines. +se-space-simulation-am=More efficient simulation by combining multiple disciplines. +se-space-simulation-as=More efficient simulation by combining multiple disciplines. +se-space-simulation-bm=More efficient simulation by combining multiple disciplines. +se-space-simulation-sb=More efficient simulation by combining multiple disciplines. +se-space-simulation-sm=More efficient simulation by combining multiple disciplines. +se-space-simulation-abm=More efficient simulation by combining multiple disciplines. +se-space-simulation-asb=More efficient simulation by combining multiple disciplines. +se-space-simulation-asm=More efficient simulation by combining multiple disciplines. +se-space-simulation-sbm=More efficient simulation by combining multiple disciplines. +se-space-simulation-asbm=More efficient simulation by combining multiple disciplines. +se-space-solar-panel=A high efficiency solar panel that you can walk on. +se-space-spectrometry-facility=Spectrophotometry, gas chromatography, mass spectrometry, and other spectrography. Fire stuff at a wall, make it bend, see where it hits. +se-space-supercomputer=Allows more advanced data manipulation and processing, and simulation. +se-space-telescope=A sophisticated telescope sensitive to multiple wavelengths around the visible spectrum. +se-space-telescope-gammaray=Gamma rays don't refract. This powerful telescope that uses mirrors and special detectors instead. +se-space-telescope-xray=X-rays are blocked by most atmospheres. This powerful telescope is designed for space where atmosphere is not a problem. +se-space-telescope-microwave=A huge telescope that detects microwaves and the cosmic microwave background. +se-space-telescope-radio=A huge telescope that detects very weak radio waves from distance sources. +se-space-thermodynamics-laboratory=Undertakes processes that involve temperature extremes. Can also perform basic thermal processes, such as smelting. +se-spaceship=A vessel you build piece by piece with floor and walls, then use the console to fly it to a different planet, or beyond. +se-spaceship-integrity=Each level increases the spaceship structural integrity stress limit by 100. +se-factory-spaceship=Each level increases the spaceship structural integrity stress limit by 500. +se-superconductive-cable=A superconductive composite cable that does not require active cooling. +se-teleportation=Unlocks other teleportation technology. This technology does nothing on its own but is a gateway to other technologies. +se-tesla-gun=Rapid fire chain lightning. Can hit up to 30 enemies per bolt. Makes long jumps between targets, or short jumps along the ground if there are no targets. +se-thruster-suit=A space suit with thrusters and magboots. Don't go into space without it. +se-thruster-suit-2=An improved space suit with stronger thrusters, increased inventory and larger grid. +se-thruster-suit-3=An improved space suit with stronger thrusters, increased inventory and larger grid. +se-thruster-suit-4=An improved space suit with stronger thrusters, increased inventory and larger grid. +space-science-pack=Allows more direct development of rocket science packs and technologies that benefit from those advancements. +se-aeroframe-pole=A strong light weight beryllium pole commonly used as a support beam for aviation and space exploration. +se-aeroframe-scaffold=A strong light weight beryllium structural frame commonly used as the main internal skeleton for aviation and space exploration vessels. +se-aeroframe-bulkhead=A strong light weight air-tight beryllium wall used as the external skin, or secondary compartment walls, of aviation and space exploration vessels. +se-lattice-pressure-vessel=A strong light weight beryllium pressure vessel with an internal lattice that lets certain fluids compress beyond their normal limits. If ruptured the pressurised fluid is vented safely. +se-heavy-girder=A heavy iridium structural beam mainly used for heavy industry and heavy military vessels. +se-heavy-bearing=A large heavy iridium bearing that can function indefinitely under forces that would crush lesser materials. +se-heavy-composite=A thick almost impenetrable bulkhead that is practically immune to heat, corrosion, radiation, and mechanical force, but is incredibly heavy. +se-heavy-assembly=A heavy mechanical assembly of gears and configurable components that used for heavy industry. +se-bioscrubber=A material processing chamber that utilises biological processes to break down unwanted materials. +se-vitalic-epoxy=An incredibly strong bio-sourced epoxy with regenerative properties. +se-vitalic-reagent=An efficient multi-purpose reagent for a wide range of chemical reactions. +se-vitalic-acid=A strong cocktail of various acids. +se-self-sealing-gel=A viscous gel under pressure, but solid as steel when exposed to a vacuum. Often used as an internal film in bulkheads to passively seal punctures. +se-holmium-cable=A sheathed cable specifically designed to eliminate unwanted noise in the line that can interferes with sensitive electronics. +se-holmium-solenoid=An extremely powerful electromagnet. +se-quantum-processor=Exploits superposition and entanglement to more efficiently work on highly complex problems. +se-dynamic-emitter=A rapidly adjustable light or particle emitter system that can change a number of properties for a greater range or scanning modes or material penetration properties. +se-naquium-cube=Leveraging naquium's unusual interaction with space time to fold a large volume into a small cube. +se-naquium-tessaract=A peculiar object that settles into a cube-like shape but shifts into a range of other geometric shapes if turned or accelerated. +se-naquium-processor=Computation within a naquium tesserect bypasses some of the usual limitations on computation density. +effect-transmission=The beacon transmits the effects of modules to nearby friendly entities within 3 tiles. Has 8 module slots. Multiple beacons affecting the same entity will overload it and prevent it from operating. +se-wide-beacon=The wide area beacon transmits the effects of modules to nearby friendly entities within 14 tiles. Has 15 module slots or 20 when upgraded. Multiple beacons affecting the same entity will overload it and prevent it from operating. +se-wide-beacon-2=The wide area beacon 2 transmits the effects of modules to nearby friendly entities within 14 tiles. Has 20 module slots. Multiple beacons affecting the same entity will overload it and prevent it from operating. +se-lifesupport-equipment-1=Increases lifesupport efficiency by +100% (additive). If installed in a non-spacesuit, efficiency bonus is halved and won't work in space. +se-lifesupport-equipment-2=Increases lifesupport efficiency by +200% (additive). If installed in a non-spacesuit, efficiency bonus is halved and won't work in space. +se-lifesupport-equipment-3=Increases lifesupport efficiency by +400% (additive). If installed in a non-spacesuit, efficiency bonus is halved and won't work in space. +se-lifesupport-equipment-4=Increases lifesupport efficiency by +800% (additive). If installed in a non-spacesuit, efficiency bonus is halved and won't work in space. +se-supercharger=Can charge up to 64 robots at a time at high speed. Structure max power draw is 1GW. +se-pylon=Distributes electrical energy. 64 tile connection range. +se-pylon-substation=Distributes electrical energy. 64 tile connection range, 64x64 power supply area. +se-pylon-construction=Distributes electrical energy and extends construction area. 64 tile connection range, 64x64 construction area. +se-pylon-construction-radar=Distributes electrical energy, extends construction area, and provides radar vision. 64 tile connection range, 256x256 construction & vision area. 4x4 logistic area. +se-shield-projector=Creates a protective force field. More energy is required when the projector is charging or when the shield takes damage. Can block enemy projectiles if the "Combat Mechanics Overhaul" mod is installed. +se-deep-space-transport-belt=Fast long-distance transport belts that can be placed in space. Different colors can be used to easily identify lines from a distance. +se-big-turbine=A large 1GW generator that takes in 5000°C steam, outputs 500°C steam at the other end, and outputs water at the sides. 99% energy efficient, 99% water conservation. +se-big-heat-exchanger=A large heat exchanger designed for high temperatures and high capacity. +se-addon-power-pole=A small electric pole designed to be attached to buildings or for precise control over electrical coverage. +se-zone-discovery-random=Search for planets, moons and asteroid belts using telescopes. +se-zone-discovery-targeted=Search for planets, moons and asteroid belts that have specific resources. Select resources preference in [img=virtual-signal/informatron] InformaTron > Zone discovery. +se-zone-discovery-deep=Search for interesting areas of deep interstellar space. Asteroid fields can have a lot of unique and valuable resources. +se-delivery-cannon=A railgun capable of shooting resources into orbit and beyond, and an armoured chest to catch them. +se-delivery-cannon-capsule-iridium=Although iridium is a heavy metal, the increased durability means less material can be used compared to a standard delivery capsule. The overall weight is the same but it is simpler to manufacture. +se-delivery-cannon-weapon=A large railgun capable of shooting special ammunitions, such as an atomic bomb, to other surfaces. +se-spaceship-clamps=Allows you to place docking clamps so that spaceships can anchor to a specific location by matching up clamp locations. Automation requires "Anchor using" and "Anchor to" signals fed into the console. +se-bio-upgrade-constitution=Increases max health. +se-bio-upgrade-strength=Increases carrying capacity. +se-bio-upgrade-agility=Increases movement speed. +se-bio-upgrade-dexterity=Increases crafting speed. +se-bio-upgrade-intelligence=Increases the learning gained from each science pack. +se-energy-beaming=An intense energy beam that can be used as a weapon from the sky, or to transfer power where it is needed. +se-energy-beam-defence=Defends against space-based energy beams and coronal mass ejections. Works by levitating magnetic particles into a protective bubble, then re-aligns and clumps the particles as needed to diffuse hostile energy beams. +se-nexus=A device that can be activated on a spaceship moving in interstellar space to generate data, and with additional technology it can activate a space distortion field (Spaceship Victory). +se-spaceship-victory=Allows the Nexus to activate a distortion drive to escape the local stellar cluster. Have a Nexus running in Distortion Drive mode spaceship moving at __1__ speed in interstellar space for __2__ seconds to win the game. +se-arcosphere=Allows the collection of arcospheres lost in the interstellar void. +se-arcosphere-folding=Allows the use of arcospheres as extradimensional pincers. +se-space-probe=A space-based rocket silo for launching space probes. Can also be used to launch satellites cheaply. +se-linked-container=A container linked by extradimensional space to other containers. The links of the container depend on the surface it is first placed on. +se-unit-capsule=Capules that deploy friendly __1__ units. + +[modifier-description] +tesla-shooting-speed-bonus=Tesla shooting speed +tesla-damage-bonus=Tesla damage bonus +railgun-damage-bonus=Railgun damage bonus +railgun-shooting-speed-bonus=Railgun shooting speed +cryogun-shooting-speed-bonus=Cryogun shooting speed +cryogun-damage-bonus=Cryogun damage bonus +character-running-speed=Character movement bonus: +__1__ +character-crafting-speed=Character crafting speed: +__1__ + +[virtual-signal-name] +signal-speed=Speed signal +se-signal-speed=Speed signal +signal-distance=Distance signal +se-signal-distance=Distance signal +se-star=Star +se-planet=Planet +se-planet-orbit=Planet orbit +se-moon=Moon +se-moon-orbit=Moon orbit +se-asteroid-belt=Asteroid belt +se-asteroid-field=Asteroid field +se-anomaly=Anomaly +se-meteor=Meteor +se-spaceship=Spaceship +se-cargo-rocket=Cargo rocket +se-remote-view=Remote view +se-death=Death +se-character-corpse=Corpse +se-ruin=Ruin +se-accolade=Accolade +se-remove=Remove +se-radius=Radius +se-hierarchy=Hierarchy +se-spaceship-launch=Spaceship launch +se-anchor-using-left-clamp=Anchor using spaceship left clamp +se-anchor-using-right-clamp=Anchor using spaceship right clamp +se-anchor-to-left-clamp=Anchor to target left clamp +se-anchor-to-right-clamp=Anchor to target right clamp +se-beacon-overload=Beacon overload +se-heat=Heat +se-pin=Pin + +[controls] +se-remote-view=Navigation Satellite +se-remote-view-pins=Navigation Satellite Pins +se-remote-view-next=Navigation History Next +se-remote-view-previous=Navigation History Previous +se-universe-explorer=Universe Explorer +se-respawn=Respawn +se-mode-toggle=Toggle structure operation mode +se-pin-one=Go to Pin 1 +se-pin-two=Go to Pin 2 +se-pin-three=Go to Pin 3 +se-pin-four=Go to Pin 4 +se-pin-five=Go to Pin 5 +se-pin-six=Go to Pin 6 +se-pin-seven=Go to Pin 7 +se-pin-eight=Go to Pin 8 +se-pin-nine=Go to Pin 9 +se-pin-zero=Go to Pin 0 +se-pin-set-one=Set Pin 1 +se-pin-set-two=Set Pin 2 +se-pin-set-three=Set Pin 3 +se-pin-set-four=Set Pin 4 +se-pin-set-five=Set Pin 5 +se-pin-set-six=Set Pin 6 +se-pin-set-seven=Set Pin 7 +se-pin-set-eight=Set Pin 8 +se-pin-set-nine=Set Pin 9 +se-pin-set-zero=Set Pin 0 + +[shortcut] +se-remote-view=Navigation Satellite +se-remote-view-pins=Navigation Satellite Pins +se-universe-explorer=Universe Explorer +se-respawn=Respawn +se-pin-one=Go to Pin 1 +se-pin-two=Go to Pin 2 +se-pin-three=Go to Pin 3 +se-pin-four=Go to Pin 4 +se-pin-five=Go to Pin 5 +se-pin-six=Go to Pin 6 +se-pin-seven=Go to Pin 7 +se-pin-eight=Go to Pin 8 +se-pin-nine=Go to Pin 9 +se-pin-zero=Go to Pin 0 +se-pin-set-one=Set Pin 1 +se-pin-set-two=Set Pin 2 +se-pin-set-three=Set Pin 3 +se-pin-set-four=Set Pin 4 +se-pin-set-five=Set Pin 5 +se-pin-set-six=Set Pin 6 +se-pin-set-seven=Set Pin 7 +se-pin-set-eight=Set Pin 8 +se-pin-set-nine=Set Pin 9 +se-pin-set-zero=Set Pin 0 + +[shortcut-name] +se-remote-view=Navigation Satellite [__CONTROL__se-remote-view__] +se-remote-view-pins=Navigation Satellite Pins [__CONTROL__se-remote-view-pins__] +se-universe-explorer=Universe Explorer [__CONTROL__se-universe-explorer__] +se-respawn=Respawn [__CONTROL__se-respawn__] +se-pin-one=Go to Pin 1 [__CONTROL__se-pin-one__] +se-pin-two=Go to Pin 2 [__CONTROL__se-pin-two__] +se-pin-three=Go to Pin 3 [__CONTROL__se-pin-three__] +se-pin-four=Go to Pin 4 [__CONTROL__se-pin-four__] +se-pin-five=Go to Pin 5 [__CONTROL__se-pin-five__] +se-pin-six=Go to Pin 6 [__CONTROL__se-pin-six__] +se-pin-seven=Go to Pin 7 [__CONTROL__se-pin-seven__] +se-pin-eight=Go to Pin 8 [__CONTROL__se-pin-eight__] +se-pin-nine=Go to Pin 9 [__CONTROL__se-pin-nine__] +se-pin-zero=Go to Pin 0 [__CONTROL__se-pin-zero__] +se-pin-set-one=Set Pin 1 [__CONTROL__se-pin-set-one__] +se-pin-set-two=Set Pin 2 [__CONTROL__se-pin-set-two__] +se-pin-set-three=Set Pin 3 [__CONTROL__se-pin-set-three__] +se-pin-set-four=Set Pin 4 [__CONTROL__se-pin-set-four__] +se-pin-set-five=Set Pin 5 [__CONTROL__se-pin-set-five__] +se-pin-set-six=Set Pin 6 [__CONTROL__se-pin-set-six__] +se-pin-set-seven=Set Pin 7 [__CONTROL__se-pin-set-seven__] +se-pin-set-eight=Set Pin 8 [__CONTROL__se-pin-set-eight__] +se-pin-set-nine=Set Pin 9 [__CONTROL__se-pin-set-nine__] +se-pin-set-zero=Set Pin 0 [__CONTROL__se-pin-set-zero__] + +[tile-name] +se-space-platform-plating=Space platform plating +se-space-platform-scaffold=Space platform scaffold +se-space-platform-underlay=Space +se-space-platform-underlay-l=Space +se-space-platform-underlay-r=Space +se-space=Empty space +se-regolith=Regolith +se-asteroid=Asteroid +se-spaceship-floor=Spaceship floor + +[mod-setting-name] +se-meteor-interval=Meteor max interval +se-plague-max-runtime-2=Plague max runtime +se-planets=Number Of Planets +se-planet-size=Planet Area (1% to 10000%) +se-seed=Planets Generation Seed +se-skip-experimental-warning=Skip experimental warning +se-print-meteor-info=Print meteor alerts to the console +se-print-satellite-discovered-nothing=Alert when satellite discovers nothing +se-space-pipe-capacity=Space pipe capacity +se-electric-boiler=Electric boiler +se-deep-space-belt-speed=Deep space belt speed +se-deep-space-belt-black=Black deep space belts +se-deep-space-belt-white=White deep space belts +se-deep-space-belt-red=Red deep space belts +se-deep-space-belt-yellow=Yellow deep space belts +se-deep-space-belt-green=Green deep space belts +se-deep-space-belt-cyan=Cyan deep space belts +se-deep-space-belt-blue=Blue deep space belts +se-deep-space-belt-magenta=Magenta deep space belts +se-space-science-pack=Space science pack fallback +se-never-show-lifesupport=Never show lifesupport GUI +se-show-zone-preview=Show zone preview window +se-pylon-charge-points=Construction pylon charging points +se-cmes-max-frequency=Coronal Mass Ejection max interval +se-spawn-small-resources=Bonus starting resource patches +se-show-overhead-button-satellite-mode=Show overhead Nav-Sat Uplink button +se-show-overhead-button-interstellar-map=Show overhead Interstellar Map button +se-show-overhead-button-universe-explorer=Show overhead Universe Explorer button +se-show-pin-help-tooltip=Show help tooltip on pin buttons +se-scan-search-budget=Scan search budget +se-scan-chart-budget=Scan chart budget +se-scan-alert-interval=Scan alert interval +se-supercharger-individual-charge-rate=Supercharger individual port charge rate (MW) + +[mod-setting-description] +se-meteor-interval=The base interval in minutes between meteor strikes. After each strike, the next strike is set to occur a random number of minutes between 1 and this value. +se-plague-max-runtime-2=The max runtime for the bio weapon, in minutes. After a plague has been running for this amount of time all biological entities are destroyed. This may end up removing the enemy revencge attacks before they are finished. The setting is intended to save UPS, not to make the game easier. +se-planets=Do not change part-way through a campaign. +se-planet-size=Do not change part-way through a campaign. +se-seed=Do not change part-way through a campaign. +se-skip-experimental-warning=The warning on starting a new game will not appear and you will not get updated warnings if the message changes. +se-print-meteor-info=Allows you to see meteor alerts in the console after the main alert has faded by pressing the __CONTROL__toggle-console__ key. +se-print-satellite-discovered-nothing=When a satellite is launched you get an alert telling you what was discovered. This setting can disable the alert if nothing was discovered. +se-space-pipe-capacity=The fluid capacity for space pipes. +se-electric-boiler=Adds an electric boiler to the game. +se-deep-space-belt-speed=Deep space belts are supposed to be the fastest belts. If you have other mods that add faster belts, you can increase the deep space belt speed to match or exceed. +se-deep-space-belt-black=Black transport belt, splitter, and underground recipes can be disabled to reduce UI clutter. +se-deep-space-belt-white=White transport belt, splitter, and underground recipes can be disabled to reduce UI clutter. +se-deep-space-belt-red=Red transport belt, splitter, and underground recipes can be disabled to reduce UI clutter. +se-deep-space-belt-yellow=Yellow transport belt, splitter, and underground recipes can be disabled to reduce UI clutter. +se-deep-space-belt-green=Green transport belt, splitter, and underground recipes can be disabled to reduce UI clutter. +se-deep-space-belt-cyan=Cyan transport belt, splitter, and underground recipes can be disabled to reduce UI clutter. +se-deep-space-belt-blue=Blue transport belt, splitter, and underground recipes can be disabled to reduce UI clutter. +se-deep-space-belt-magenta=Magenta transport belt, splitter, and underground recipes can be disabled to reduce UI clutter. +se-space-science-pack=If another mod adds a way to get space science, then that method will be used. If there is no way to make it, then Space Exploration can either remove it or use it as an Optimisation science pack. +se-never-show-lifesupport=If checked, the lifesupport GUI will never be shown, even if you are suffocating. +se-show-zone-preview=Uncheck to disable the zone preview window in the Universe Explorer. If you have some of Factorio's debug overlays active, the preview window can reduce FPS. +se-pylon-charge-points=Uncheck to remove construction pylon charge points. This helps control bot charging behaviour, but you may need to add other charging options along long distance routes. +se-cmes-max-frequency=The max interval for repeating Coronal Mass Ejections (CMEs). The value is in hours, 0 = disabled. The first CME is scripted to the first minute of the game and is mostly harmless. The second is delayed by roughly 48 hours. The delay between repeats is between 50% and 100% of the max interval setting. A non-zero setting only applies to new events; once an ETA has been set, it won't be affected. A zero setting will clear all scheduled CMEs, though it may take up to a minute for the change to take effect. +se-spawn-small-resources=Adds some additional small resources patches to the starting area. The resource patches are in a cluster to reduce time running between resources. +se-show-overhead-button-satellite-mode=Show a small button on the top left of the screen for to toggle the Navigation Satellite Uplink. +se-show-overhead-button-interstellar-map=Show a small button on the top left of the screen for to toggle the Interstellar Map. +se-show-overhead-button-universe-explorer=Show a small button on the top left of the screen for to toggle the Universe Explorer. +se-show-pin-help-tooltip=Show an expanded tooltip on the pin buttons that gives instructions on how to use them. +se-scan-search-budget=Satellite scanning: The number of chunks that can be checked for chart status. High values let it speed though already scanned chunks to get to the uncharted edge. +se-scan-chart-budget=Satellite scanning: The number of chunk requests that can be added to the charting buffer in parallel. New chart requests won't be made if the previous chunks have not finished. +se-scan-alert-interval=The interval in seconds between surface scan update alerts. Revealing surfaces increases game save file size so it is best not to leave one on and forget it. +se-supercharger-individual-charge-rate=Sets the charging rate of each individual charging port in the supercharger, in MW (does not affect maximum charge rate). Minimum (default) value is 90 MW, enough to charge a vanilla robot in one tick, up to 1000 MW, or 1 GW, the maximum charge rate of the supercharger. + +[string-mod-setting] +se-space-science-pack-Remove=Remove completely +se-space-science-pack-Replace=Replace with Rocket science pack +se-space-science-pack-OptimisationUranium=Optimisation: Uranium-cryo recipe +se-space-science-pack-OptimisationFish=Optimisation: Vita-vulca-fish recipe + +[autoplace-control-names] +planet-size=[img=virtual-signal/se-planet] Planet size +se-water-ice=[img=item/se-water-ice] Water ice (space only) +se-methane-ice=[img=item/se-methane-ice] Methane ice (space only) +se-cryonite=[img=item/se-cryonite] Cryonite (not on homeworlds) +se-vulcanite=[img=item/se-vulcanite] Vulcanite (not on homeworlds) +se-vitamelange=[img=item/se-vitamelange] Vitamelange (not on homeworlds) +se-beryllium-ore=[img=item/se-beryllium-ore] Beryllium Ore (not on homeworlds) +se-holmium-ore=[img=item/se-holmium-ore] Holmium Ore (not on homeworlds) +se-iridium-ore=[img=item/se-iridium-ore] Iridium Ore (not on homeworlds) +se-naquium-ore=[img=item/se-naquium-ore] Naquium Ore (space only) + +[map-gen-preset-name] +space-exploration=Space Exploration Defaults + +[map-gen-preset-description] +space-exploration=Defaults for Space Exploration + +[tooltip-category] +shot=Usage diff --git a/space-exploration_0.5.80/space-exploration/locale/es-ES/strings.cfg b/space-exploration_0.5.80/space-exploration/locale/es-ES/strings.cfg new file mode 100644 index 0000000..66dd65b --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/locale/es-ES/strings.cfg @@ -0,0 +1,2374 @@ +spaceship-integrity100=Integridad estructural de nave espacial: +100 +spaceship-integrity300=Integridad estructural de nave espacial: +300 +spaceship-integrity500=Integridad estructural de nave espacial: +500 +arcosphere-discovery=Recoge arcosferas del espacio interestelar profundo +core-mining-productivity-5=Productividad minera del núcleo: +5% +se-zone-discovery-random=Activa el descubrimiento de zonas aleatorias cuando se investiga. +se-zone-discovery-targeted=Activa el descubrimiento de zonas segmentadas por recursos cuando se investiga. +se-zone-discovery-deep=Activa el descubrimiento de la zona del espacio profundo cuando se investiga. +unlock-spaceship-victory=Desbloquea la condición de Victoria Nave espacial: monta en una nave espacial con un Nexo en modo Motor de distorsión a una velocidad de __1__ durante __2__ segundos en el espacio interestelar. + +[mod-name] +space-exploration=Space Exploration + +[mod-description] +space-exploration=Construye cohetes de carga para enviar cosas al espacio. Viaja al espacio en un cohete y comienza tu andadura espacial. Construye una plataforma espacial orbital para desarrollar una complicada ciencia espacial basada en datos. Construye una nave espacial pieza a pieza, vuela desde la superficie de un planeta a otro, lunas, cinturones de asteroides y más. Construye rayos de la muerte interestelares y colonias mineras del espacio profundo. Explora ruinas antiguas en planetas alienígenas y reliquias perdidas en el espacio profundo. No se recomienda jugar con mods sin dependencia en la fase experimental. + +[space-exploration] +space-exploration=Space Exploration +menu_space-exploration=Space Exploration +title_space-exploration=Space Exploration +off=Apagado +on=Encendido +close=Cerrado +show=Mostrar +close-instruction-only-confirm=Cerrar (__CONTROL__confirm-gui__) +show-own-location=Mostrar ubicación propia +wdc_auto_off=Orientación manual +wdc_auto_on=Reorientación automática +name=Nombre +rename-something=Renombrar __1__ +trigger-none=Ninguno (Manual) +trigger-fuel-full=Lanzamiento con combustible lleno +trigger-cargo-full=Lanzamiento con carga completa +trigger-fuel-full-signal=Lanzamiento con señal verde y combustible lleno +trigger-cargo-full-signal=Lanzamiento con señal verde y carga completa +trigger-cargo-full-or-signal=Lanzamiento con señal verde o carga completa +destination-type-zone=Ubicación aproximada +destination-type-landing-pad=Plataforma de aterrizaje de carga +button-launch=Lanzamiento +button-launch-disabled=Lanzamiento (deshabilitado) +destination-crash-warning=Advertencia: Selecciona una Plataforma de aterrizaje de carga para reducir la posibilidad de estrellarse +recipe-to=__1__ a __2__ +recipe-from=__1__ de __2__ +simple-a-b=__1____2__ +simple-a-b-space=__1__ __2__ +simple-a-b-comma=__1__, __2__ +simple-a-b-break=__1__\n__2__ +simple-a-b-divide=__1__ / __2__ +simple-bold=[font=default-bold]__1__[/font] +star-map=Mapa estelar +interstellar-map=Mapa interestelar +interstellar-space=Espacio interestelar +planetary-system=Sistema __1__ +solar-system=Sistema __1__ +remote-view=Enlace a Navegación por satélite [__CONTROL__se-remote-view__] +remote-view-window-title=[img=virtual-signal/se-remote-view] Navegación por satélite [__CONTROL__se-remote-view__] +remote-view-currently-viewing=Vista actual: +remote-view-instruction=Lanza más satélites para descubrir más estrellas, planetas, lunas y otras zonas. +remote-view-spaceships=__1__ Naves espaciales +remote-view-spaceships-anchored=__1__ Naves espaciales ancladas +remote-view-clamps=__1__ Abrazaderas de naves espaciales +remote-view-show-hide-resources=Mostrar/ocultar recursos +remote-view-show-hide-stats=Mostrar/ocultar estadísticas +remote-view-show-hide-anchor-info=Mostrar/ocultar información de ancla +remote-view-show-hide-danger-zones=Mostrar/ocultar zonas de peligro +open-pins-remote-view=Todos los marcadores [__CONTROL__se-remote-view-pins__] +exit-pins-remote-view=Salir de todos los marcadores [__CONTROL__se-remote-view-pins__] +remote-view-history-delete=Elimina el historial de la superficie. +remote-view-history-previous=Volver en el historial de la superficie [__CONTROL__se-remote-view-previous__].\n__1__ +remote-view-history-next=Avanzar en el historial de la superficie [__CONTROL__se-remote-view-next__].\n__1__ +remote-view-history-item=__1__ +remote-view-history-item_named=__1__ → __2__ +exit-remote-view=Salir de Enlace a Navegación por satélite [__CONTROL__se-remote-view__] +remote-view-pin-make=Marcar la vista actual +remote-view-pins-list=Marcadores +remote-view-add-pin=Crea un nuevo marcador en la ubicación actual. +remote-view-pin-details=Ajustes del marcador +remote-view-pin-button-tooltip=__1__ → __2__ +remote-view-pin-button-tooltip-hotkey-one=__1__ → __2__ [__CONTROL__se-pin-one__] +remote-view-pin-button-tooltip-hotkey-two=__1__ → __2__ [__CONTROL__se-pin-two__] +remote-view-pin-button-tooltip-hotkey-three=__1__ → __2__ [__CONTROL__se-pin-three__] +remote-view-pin-button-tooltip-hotkey-four=__1__ → __2__ [__CONTROL__se-pin-four__] +remote-view-pin-button-tooltip-hotkey-five=__1__ → __2__ [__CONTROL__se-pin-five__] +remote-view-pin-button-tooltip-hotkey-six=__1__ → __2__ [__CONTROL__se-pin-six__] +remote-view-pin-button-tooltip-hotkey-seven=__1__ → __2__ [__CONTROL__se-pin-seven__] +remote-view-pin-button-tooltip-hotkey-eight=__1__ → __2__ [__CONTROL__se-pin-eight__] +remote-view-pin-button-tooltip-hotkey-nine=__1__ → __2__ [__CONTROL__se-pin-nine__] +remote-view-pin-button-tooltip-hotkey-zero=__1__ → __2__ [__CONTROL__se-pin-zero__] +remote-view-pin-button-tooltip-help-text=\n\n[font=default-bold]- Controles -[/font]\nClick-izquierdo: Ir a la ubicación marcada\nClick-derecho: Editar marcador\nControl+Click-derecho: Eliminar marcador +remote-view-pin-button-tooltip-help-text-update-position=\nMayus+Click-derecho: Actualizar ubicación del marcador +remote-view-pin-name=Nombre +remote-view-pin-icon=Icono +remote-view-pin-zoom=Zoom +remote-view-pin-hotkey=Tecla acceso rápido +remote-view-pin-hotkey-none=Ninguno +remote-view-pin-hotkey-one=__CONTROL__se-pin-one__ - __1__ +remote-view-pin-hotkey-two=__CONTROL__se-pin-two__ - __1__ +remote-view-pin-hotkey-three=__CONTROL__se-pin-three__ - __1__ +remote-view-pin-hotkey-four=__CONTROL__se-pin-four__ - __1__ +remote-view-pin-hotkey-five=__CONTROL__se-pin-five__ - __1__ +remote-view-pin-hotkey-six=__CONTROL__se-pin-six__ - __1__ +remote-view-pin-hotkey-seven=__CONTROL__se-pin-seven__ - __1__ +remote-view-pin-hotkey-eight=__CONTROL__se-pin-eight__ - __1__ +remote-view-pin-hotkey-nine=__CONTROL__se-pin-nine__ - __1__ +remote-view-pin-hotkey-zero=__CONTROL__se-pin-zero__ - __1__ +remote-view-pin-location=Ubicación +remote-view-pin-location-position={x=__1__, y=__2__} +remote-view-pin-location-position-button=Actualizar ubicación del marcador +remote-view-pin-location-position-button-tooltip=Establezca la posición del marcador en la ubicación actual. +remote-view-pin-viewer-title=Marcadores +remote-view-pin-viewer-misc-row=Varios +remote-view-pin-viewer-spaceship-row=Naves espaciales +open-zonelist=Abrir Explorador del universo +zonelist-window-title=[img=virtual-signal/se-planet-orbit] Explorador del universo [__CONTROL__se-universe-explorer__] +priority-icon=[img=virtual-signal/se-accolade] +priority-tooltip=Prioridad (para ordenar las zonas importantes frente a las irrelevantes) +trim-zone-button=[img=item/cliff-explosives] Recortar superficie +trim-zone-button-tooltip=Elimina fragmentos fuera del cuadro delimitador definido por los objetos del jugador, los objetos especiales y el origen del mapa. +trim-zone-button-no-surface-tooltip=La superficie no existe. +trim-zone-results=Se eliminó __1__ fragmentos de __2__. Recortado al cuadro X [__3__ to __4__] Y [__5__ to __6__] +delete-zone-button=[img=virtual-signal/se-remove] Eliminar superficie +delete-zone-button-tooltip=Algunas superficies no se pueden eliminar. +delete-zone-button-no-surface-tooltip=La superficie no existe. +scan-zone-button=[img=item/satellite] Escanear superficie +scan-zone-button-tooltip=Advertencia: Esto puede ralentizar el juego mientras el escaneo está en progreso. La velocidad de escaneo se puede configurar en las opciones del mod. El escaneo se puede detener en cualquier momento. +scan-zone-button-disabled-tooltip=Debes lanzar un satélite para escanear la superficie. +stop-scan-zone-button=[img=item/satellite] Detener los escaneos +stop-scan-zone-button-tooltip=Detiene cualquier escaneo activo en todas las superficies. +generic-requires-satellite=Primero debes lanzar un satélite. +remote-view-requires-satellite=Debes lanzar un satélite para utilizar el Enlace a Navegación por satélite. +satellite-discovered-platform=[color=cyan] El satélite descubrió una plataforma espacial en órbita.[/color] Abre el [img=virtual-signal/se-planet-orbit] Explorador del universo [__CONTROL__se-universe-explorer__], selecciona __1__, y haz clic en ver superficie. Puede que haya cosas útiles ahí arriba. +satellite-view-unlocked=Has desbloqueado el [color=cyan][img=virtual-signal/se-remote-view] Enlace a Navegación por satélite[/color]. Esto te permite ver el mundo y otros lugares que has descubierto a través de un satélite. Pulsa [color=green][__CONTROL__se-remote-view__][/color] para activar o usar la barra de herramientas de acceso directo (a la derecha de tu barra de acceso rápido). +source-discovered-zone=[color=cyan]__1__ ha descubierto un/a nuevo/a __2__: [/color][img=__3__] [color=white]__4__[/color]. Las ubicaciones descubiertas se pueden ver en [img=virtual-signal/se-planet-orbit] Explorador del universo [__CONTROL__se-universe-explorer__]. +discovered-zone=[color=cyan]Descubierto un/a nuevo/a __1__: [img=__2__] [/color][color=white]__3__[/color]. +discovered-anomaly-additional=Objeto desconocido detectado en la [img=virtual-signal/se-anomaly] anomalía. Tu [img=virtual-signal/informatron] Diario de exploración [__CONTROL__informatron__] ha sido actualizado. +satellite-discovered-nothing=Se lanzó un nuevo satélite pero no encontró nada nuevo. Puede haber más para encontrar alrededor de otras estrellas. +tech-discovered-nothing=Los telescopios no encontraron nada nuevo cerca de las estrellas. Puede haber más para encontrar en el espacio profundo. +tech-deep-discovered-nothing=Los telescopios no encontraron nada nuevo en el espacio profundo. +galaxy_ship_authenticated=[img=virtual-signal/se-spaceship] Nave espacial abandonada: [color=cyan]"Firma biológica autentificada. El código de acceso a la esclusa de aire es 2236067964. Transmitiendo el registro de respaldo de emergencia".[/color] Tu [img=virtual-signal/informatron] Diario de exploración [__CONTROL__informatron__] ha sido actualizado. +space-capsule=Cápsula espacial +invalid_launch_location=Ubicación de lanzamiento no válida +capsule_invalid_launch_location=Ubicación de lanzamiento no válida +capsule_status_invalid_launch_location=Estado: Ubicación de lanzamiento no válida +capsule_status_ready=Estado: Listo para lanzar +capsule_not_enough_thrust=No hay suficiente empuje para escapar del pozo de gravitatorio __1__ __2__. Insértalo en un silo de cohetes de carga. +capsule_destination=Destino: __1__ +capsule_info=Si se coloca en el espacio, esta cápsula puede llevarte al planeta o la luna más cercanos. +player-died=__1__ ha muerto +launch-suit-warning=Para evitar la asfixia, considera ponerte tu traje propulsor y colocar contenedores de soporte vital en tu inventario. +suffocating-warning=Te estás asfixiando. Súbete a una cápsula espacial o ponte tu traje propulsor con algunos contenedores de soporte vital en tu inventario. +rocket_survivability_fail=Un cohete de carga ha sufrido daños en tránsito y está fuera rumbo. Se recomienda investigación adicional de supervivencia de cohetes y seguridad de carga de cohetes. __1__ +respawn-if-stranded=Si te quedas atascado, puedes usar el atajo de reaparición [__CONTROL__se-respawn__]. +respawn-options-title=Destino de reaparición +respawn-button-homeworld=[img=virtual-signal/se-planet] Planeta inicial +respawn-button-landing-pad=[img=item/se-rocket-landing-pad] Plataforma de aterrizaje más cercana +respawn-button-spaceship=[img=virtual-signal/se-spaceship] Nave espacial más cercana +respawn-confirm-title=¿Estás seguro/a de que quieres reaparecer? +respawn-confirm-yes=[img=virtual-signal/se-death] Reaparecer +respawn-confirm-no=Cancelar +search-list=Buscar +clear-search=Borrar búsqueda +filter-list=Filtro +clear-filter=Borrar filtro +attrition-type-radiation=radiación +attrition-type-wind=viento +attrition-type-spacial-distortion=distorsión espacial +zonelist-view-surface=Ver superficie +zonelist-heading-hierarchy=Jerarquía +zonelist-heading-type=Tipo de zona +zonelist-heading-name=Nombre +zonelist-heading-radius=Radio +zonelist-heading-primary-resource=Recurso primario +zonelist-heading-attrition=Interferencia robótica +zonelist-heading-threat=Amenaza +zonelist-heading-solar=Solar +zonelist-heading-flags=Indicadores +zonelist-heading-priority=Prioridad +zonelist_filter_star=Incluir estrellas +zonelist_filter_planet=Incluir planetas +zonelist_filter_planet-orbit=Incluir órbitas planetarias +zonelist_filter_moon=Incluir lunas +zonelist_filter_moon-orbit=Incluir órbitas lunares +zonelist_filter_asteroid-belt=Incluir cinturones de asteroides +zonelist_filter_asteroid-field=Incluir campos de asteroides +zonelist_filter_anomaly=Incluir anomalías +zonelist_filter_spaceship=Incluir naves espaciales +zonelist-resource-bar-tooltip=__1__ __2__\nFrecuencia: __3__\nTamaño: __4__\nRiqueza: __5__ +zonelist-resource-bar-tooltip-extended=__1__ __2__\nFrecuencia: __3__\nTamaño: __4__\nRiqueza: __5__\n__6__ +zonelist-resources-disclaimer=Probabilidad estimada de recursos. [?] +zonelist-resources-disclaimer-tooltip=Todos los valores de los recursos son estimaciones basadas en la densidad de los elementos.\nCorresponden a los controles de generación de mapas del juego.\nLos parches de recursos reales variarán y es posible que no se generen debido al agua, el radio de la superficie o los requisitos específicos de las cuadrículas. +resource-terrain-required-se-vulcanite=Requiere terreno volcánico +resource-terrain-required-se-cryonite=Requiere terreno helado +resource-terrain-required-se-vitamelange=Requiere terreno con hierba +zone-tooltip-type=Tipo de zona: +zone-tooltip-parent=Padre: +zone-tooltip-threat=Amenaza: +zone-tooltip-daynight=Ciclo día/noche: +zone-tooltip-bot-attrition=Interferencia robótica __1__: +zone-tooltip-radius=Radio: +zone-tooltip-solar=Solar: +zone-tooltip-flags=Indicadores: +zone-tooltip-closest=Cercano: +zone-tooltip-destination=Destino: +zone-tooltip-delta-v=∆v de __1__ +construction-denied=No se puede colocar aquí. +construction-denied-vehicle-in-space=No se pueden colocar vehículos terrestres en el espacio. +construction-denied-se-surface=Ubicación no válida, debe colocarse en una superficie de exploración espacial. +construction-denied-linked-container-on-transient-surface=No se pueden colocar contenedores vinculados a la superficie en una nave espacial en movimiento. +construction-denied-no-water=No hay agua +construction-denied-spaceship-only=Debe colocarse en el suelo de la nave espacial. +construction-denied-solid-only=Debe colocarse en un planeta o luna. +currently-viewing=Vista actual: __1__ +fail-board-no-character=No se puede abordar la nave objetivo, debes estar unido a tu personaje para usar esta acción. +fail-board-remote-character=No se puede abordar la nave objetivo, tu personaje no está en la nave desde el que estás intentando abordar. +fail-board-target-anchored=No se puede abordar una nave anclada, intenta anclar en el mismo lugar. +starmap=Mapa estelar +starmap-button=[img=virtual-signal/se-star] Mapa estelar +back=Atrás +back-to=Volver a +spaceship=Nave espacial +planet=Planeta +moon=Luna +star=Estrella +orbit=Órbita +something_orbit=__1__ óbita +asteroid-belt=Cinturón de asteroides +asteroid-field=Campo de asteroides +anomaly=Anomalía +spaceship-cannot-set-destination-to-self=No se puede establecer el destino a uno mismo +spaceship-streamline=Optimización: __1__ +spaceship-streamline-tooltip=__1__ Optimización actual\n__2__ Optimización máxima\nHaz que la parte delantera de la nave espacial sea menos cuadrada para aumentar la línea de corriente +spaceship-launch-energy=Energía de lanzamiento: __1__ +spaceship-launch-energy-invalid=Energía de lanzamiento: Requiere una verificación de integridad válida. +spaceship-launch-energy-tooltip=__1__ Valor de combustible almacenado en tanques de refuerzo\n__2__ Valor de combustible requerido para el lanzamiento +spaceship-speed=Velocidad: __1__ +spaceship-structural-stress-hull=Tensión del casco: __1__ +spaceship-structural-stress-hull-invalid=Tensión del casco: ND (se requiere contención) +spaceship-structural-stress-hull-tooltip=__1__ Tensión actual del casco\n__2__ Estimación de la tensión del casco si todas las baldosas están ocupadas\n__3__ Tensión máxima del casco +spaceship-structural-stress-container=Tensión del contenido: __1__ +spaceship-structural-stress-container-invalid=Tensión del contenido: ND (se requiere contención) +spaceship-structural-stress-container-tooltip=__1__ Tensión actual del contenido\n__2__ Tensión máxima del contenido +spaceship-travel-time-unknown=Tiempo de viaje: Desconocido. Prueba la velocidad máxima para una estimación. +spaceship-travel-time-max=Tiempo de viaje: __1__s a máxima velocidad. +spaceship-travel-time-current=Tiempo de viaje: __1__s a la velocidad actual. +spaceship-closest-location-unknown=Ubicación más cercana: Desconocido __1__ +spaceship-closest-location=Ubicación más cercana: __1__ +spaceship-location-spatial-distortion=Distorsión espacial: __1__ +spaceship-location-stellar-x=Cuadrante X: __1__ +spaceship-location-stellar-y=Cuadrante Y: __1__ +spaceship-location-star-gravity-well=Pozo gravitatorio estelar: __1__ +spaceship-location-planet-gravity-well=Pozo gravitatorio planetaria: __1__ +spaceship-asteroid-density=Densidad de asteroides: __1__ +spaceship-asteroid-density-default=Escaso +spaceship-asteroid-density-belt=Denso +spaceship-asteroid-density-field=Peligroso +spaceship-travel-status=Estado del viaje: __1__ +spaceship-integrity-status-valid=Estado de integridad: Válido: __1__ +spaceship-integrity-status-invalid=Estado de integridad: Inválido: __1__ +spaceship-button-launch=Lanzamiento +spaceship-button-launch-tooltip=Listo para el lanzamiento +spaceship-button-launching=Lanzamiento en curso +spaceship-button-launching-tooltip=Por favor se paciente +spaceship-button-launch-disabled=Lanzamiento (deshabilitado) +spaceship-button-launch-disabled-fuel-tooltip=Requiere combustible en tanques de refuerzo +spaceship-button-launch-disabled-integrity-tooltip=Requiere una verificación de integridad válida +spaceship-button-anchor=Ancla +spaceship-button-confirm-anchor=Confirmar ancla +spaceship-button-anchor-to=Anclar a __1__ +spaceship-button-anchor-on=Ancla en __1__ +spaceship-button-stop=Detener +spaceship-button-start=Activar +spaceship-button-board=Tablero __1__ +spaceship-button-scouting-back=Atrás +spaceship-button-scouting-back-tooltip=Cancelar la búsqueda de anclas +spaceship-name-the=El/La __1__ +spaceship-button-start-integrity-check=Iniciar verificación de integridad +spaceship-target-speed=Velocidad objetivo: +spaceship-target-speed-unlimited=Velocidad objetivo: Ilimitada +spaceship-target-speed-normal=Velocidad objetivo: __1__ (normal) +spaceship-target-speed-asteroid-belt=Velocidad objetivo: __1__ (cinturón de asteroides) +spaceship-target-speed-asteroid-field=Velocidad objetivo: __1__ (campo de asteroides) +spaceship-target-speed-manual-override=Velocidad objetivo: __1__ (anulación manual) +spaceship-target-speed-circuit=Velocidad objetivo: __1__ (circuito controlado) +spaceship-target-speed-normal-tooltip=Velocidad objetivo en vuelo normal\nDensidad de esteroides: __1__% +spaceship-target-speed-asteroid-belt-tooltip=Velocidad objetivo en el cinturón de asteroides\nDensidad de esteroides: __1__% +spaceship-target-speed-asteroid-field-tooltip=Velocidad objetivo en el campo de asteroides\nDensidad de esteroides: __1__% +spaceship-heading-destination=Destino +list-destinations-alphabetically=Listar destinos alfabéticamente +spaceship-travel-message-new-course-plotted=Nuevo curso trazado. +spaceship-travel-message-exiting-planet-gravity=Saliendo del pozo gravitatorio del planeta +spaceship-travel-message-navigating-planet-gravity=Navegando por el pozo gravitatorio del planeta +spaceship-travel-message-exiting-star-gravity=Saliendo del pozo gravitatorio de la estrella +spaceship-travel-message-navigating-star-gravity=Saliendo por el pozo gravitatorio de la estrella +spaceship-travel-message-spatial-distortions=Navegando por las distorsiones espaciales +spaceship-travel-message-navigating-interstellar=Navegando por el espacio interestelar +spaceship-travel-message-at-destination=En distino. +spaceship-check-message-passed=Aprobado: La integridad de la nave es válida. +spaceship-check-message-failed-containment=Fallido: Pérdida de contención alrededor de la consola. Asegúrate de que todas los muros de la nave espacial están en el suelo de la nave espacial sin espacios. +spaceship-check-message-failed-console-floor=La consola debe colocarse en el suelo de la nave espacial. +spaceship-check-message-failed-empty=No se encontraron cuadrículas conectadas a una consola debidamente cerrada. +spaceship-check-message-failed-unknown-bounds=Error: Límites de la nave espacial desconocida. +spaceship-check-message-failed-stress=Fallo: La tensión de integridad estructural excede el límite de la tecnología. +spaceship-check-message-checking-console-floor=Comprobando la conectividad del suelo de la consola. +spaceship-check-message-checking-containment=Comprobando la contención. +spaceship-check-message-checking-connectivity=Comprobando la conectividad de la consola. +spaceship-check-message-no-console=Sin consola +spaceship-check-message-did-not-complete=La verificación no se completó. +spaceship-check-message-unstable=Inestable: Algunas secciones se desconectarán al maniobrar. +spaceship-check-message-valid-but-disconnecting=Válido pero inestable: Las secciones se desconectarán. +spaceship-warning-sections-disconnecting=Las secciones se están desconectando. Detente para reparar. +informatron-open-help=Abrir en InformaTron +page_space_exploration_text_1=Bienvenido/a a Space Exploration. Ya hay mucho en el mod, pero todavía está en estado [font=default-bold]experimental[/font] y sigue en desarrollo. Puede haber errores.\n\n[font=heading-2]¿Estado eperimental?[/font]\n\nSpace Exploration sigue cambiando rápidamente y estoy dedicando todo mi tiempo y progresar en el desarrollo de las funciones clave a expensas de compatibilidad mod. [color=red] No es recomendable jugar con mods que no sean los requeridos y recomendados.[/color]\n\nMientras está en estado experimental: si un mod causa problemas como estado del juego/guardado corrupto, fallos, árbol tecnológico inválido o en el juego principal, se marcará rápidamente como incompatible para proteger a los nuevos jugadores. Esto significa que si usas muchos mods, es más probable que una se marque como incompatible más adelante debido a un problema que aún no se ha descubierto. Por supuesto, eres libre de editar tu archivo info.json para probar mods incompatibles, pero lo haces bajo tu propio riesgo: si el estado de tu juego no se puede reproducir debido a eso, no podré ayudarte.\n\nMientras está en estado experimental: la mayoría de los demás mods de revisión se marcan como incompatibles si el árbol tecnológico está significativamente roto, sin embargo, la intención a largo plazo es que los mods funcionen juntos para satisfacción de ambos desarrolladores. Krastorio 2 es un ejemplo de este trabajo que ya está sustancialmente en marcha.\n\nHay información adicional relacionada con la compatibilidad de los mods en la wiki de Space Exploration. Si deseas ayudar con la compatibilidad del mod, comunícalo en Discord, pero también ten en cuenta que no es una alta prioridad hasta más adelante en el desarrollo de Space Exploration.\n\n[font=heading-2]Mods recomendados[/font] \n\n • AAI Containers & Warehouses. Te da algunos contenedores más grandes que coinciden con el tema base.\n\n • Module Inserter Allows. Te permite colocar módulos en máquinas desde el modo satélite.\n\n • Equipment Grid Logistic Module. Un módulo para cuadrículas de vehículos, como el spidertron, para solicitar elementos de la red y deseche la basura.\n\n • Grappling Gun Allows. Te permite saltar edificios, cruzar lagos y salir del combate si te ralentizas. En el espacio puedes volver a la plataforma espacial si te caes. También te permite abordar naves espaciales (especialmente útil si están en movimiento).\n\n • Burner Leech. Esto es solo para AAI burner phase.\n\n • Text Plates Allows. Te permite colocar texto en el suelo, útil para marcar en el planeta nombres, nombres de estaciones, zonas de acoplamiento de naves espaciales, etc.\n\n • Even Distribution. Ayuda al comienzo del juego cuando insertas elementos manualmente en varios edificios.\n\n • Combat Mechanics Overhaul. Puede ayudarte con las defensas cuando estás fuera del planeta si habilitas la opción "Muros bloquean Spitters ". Es más barato reparar paredes que torretas.\n\n • Bullet Trails. Para que puedas ver hacia dónde van las balas o hacia qué disparan las torretas. (También se ve mejor).\n\n[font=heading-2]Configuración recomendada[/font]\n\nDebes tener habilitadas todas las baldosas de terreno de biomas alienígenas, de lo contrario, el juego se bloqueará en un momento posterior.\n\nComo el juego es más largo de lo normal, es una buena idea comenzar un juego con factores de evolución de enemigos bajos.\n\nNo debes establecer una configuración de recursos altos para tu planeta inicial a menos que estés jugando con recetas que consuman muchos recursos, como recetas de alta dificultad o modo maratón. Si los recursos son demasiado altos, reducirás la necesidad de expandirte a otros planetas.\n\n[font=heading-2]Urls útiles[/font]\n\nEcha un vistazo a la Wiki de Space Exploration aquí: https://spaceexploration.miraheze.org\n\nObtén ayuda o sigue el desarrollo en Discord: https://discord.gg/ymjUVMv\n\nMás de 2000 horas se han invertido en este mod. Si lo estás disfrutando, considera apoyarme en Patreon: https://www.patreon.com/earendel +menu_meteor_defence=[img=virtual-signal/se-meteor] Defensa de meteoritos +title_meteor_defence=Defensa de meteoritos +page_meteor_defence_text_1=Los meteoritos golpean la mayoría de las zonas a intervalos aleatorios. Puedes cambiar el intervalo máximo entre ataques en la configuración del mod.\n\nLa cantidad de meteoritos también es aleatoria, 50% para 1, 25% para 2, 12,5% para 3, 6,25% para 4, etc...\n\nLas estructuras de defensa contra meteoritos pueden disparar a los meteoritos. Disparan en secuencia, por lo que las defensas posteriores no se dispararán si todos los meteoritos fueron destruidos. Las defensas requieren munición, tiempo de carga y energía adicional durante la carga. El consumo de energía no es insignificante, por lo que es aconsejable equilibrar el riesgo con el coste. +menu_coremining=[img=item/se-core-miner] Minería del núcleo +title_coremining=Minería del núcleo +page_coremining_text_1=Minería del núcleo solo se puede realizar en planetas y lunas. Cada planeta y luna puede dar un tipo diferente de fragmento de núcleo dependiendo de lo que haya dentro. Nauvis ofrece un equilibrio de recursos comunes, pero otros lugares tienden a dar principalmente 1 tipo de recurso. Las perforadoras del núcleo están hambrientos de energía, pero recuperas algo de energía del carbón, el petróleo y el uranio.\n\nLas perforadoras del núcleo usan mucha energía, además, cada perforadora que colocas en un planeta reduce la eficiencia de todas las perforadoras del núcleo en ese mismo planeta. Son mucho menos eficientes energéticamente que las perforadoras normales, incluso si tienes varios en ejecución, pero nunca se quedan sin recursos. Al principio del juego, puede ser útil tener 1 perforadora principal en funcionamiento cuando tienes un exceso de energía. Si comienzas en un planeta pequeño, entonces la minería solar y del núcleo podrían ser tu única forma de obtener suficientes recursos para salir del planeta.\n\nEn el juego avanzado, las perforadoras del núcleo se benefician enormemente de las bonificaciones de productividad minera. Es mejor tener unos pocos en muchos planetas que a muchos en pocos planetas. +menu_beacons=[img=item/se-wide-beacon-2] Balizas +title_beacons=Balizas +page_beacons_text_1=[font=heading-2]Sobrecarga de baliza [img=virtual-signal/se-beacon-overload][/font]\n\nSobrecarga de baliza es una revisión de la mecánica del Faro en Factorio. Las máquinas de fabricación solo pueden verse afectadas por 1 baliza, si se ven afectadas por más balizas, sobrecargan y pausan la producción.\n\nLa revisión permite más módulos en balizas y promueve el uso de módulos más potentes tanto en balizas como en ensambladores para obtener las máximas bonificaciones. El cambio también permite y promueve una gama más amplia de diseños de fábrica.\n\nLa baliza básica es individualmente mucho más poderosa que un faro de la base, pero no puede acumular sus efectos en una máquina, por lo que el impulso máximo que puede proporcionar se reduce en comparación con la de la base. Las balizas más potentes pueden superar con creces el impulso máximo en una máquina disponible en el juego base.\n\nA partir de Baliza de área amplia, los jugadores pueden experimentar ahorros sustanciales en módulos, así como libertad para crear diseños complejos que giran en torno a edificios más grandes o con múltiples entradas de fluidos o materiales.\n\nLas máquinas afectadas por más de una baliza se marcarán con un icono de sobrecarga de baliza y pausarán toda la producción. Seguirán consumiendo un mínimo de energía en el proceso. +menu_launching_satellites=[img=item/satellite] Lanzamiento de satélites +title_launching_satellites=Lanzamiento de satélites +page_launching_satellites_text_1=Has lanzado [color=cyan]__1__[/color] satélites.\n\n[font=heading-2][img=virtual-signal/se-remote-view] Enlace a Navegación por satélite [__CONTROL__se-remote-view__][/font]\n\nCuando lanzas un satélite de navegación al espacio desde el Silo de cohetes para satélites, obtienes acceso a [img=virtual-signal/se-remote-view] Vista de navegación por satélite. Se puede acceder a este modo con la tecla [__CONTROL__se-remote-view__]. Mientras estás en modo satélite, tu cámara está separada de tu personaje para que puedas mirar rápidamente alrededor del mapa e incluso descubrir nuevas áreas. Hay algunas cosas que no puedes hacer en modo satélite, como colocar directamente o extraer entidades. Sin embargo, hay muchas cosas que puedes hacer, como usar planos, planificadores de deconstrucción, colocar entidades fantasmas, ordenar conexiones de cables, cambiar recetas de máquinas, configuraciones de combinador, etc.\n\n[font=heading-2][img=virtual-signal/se-planet-orbit] Explorador del universo [__CONTROL__se-universe-explorer__][/font]\n\nLa red de navegación por satélite también te permite ver otras superficies, como otros planetas, lunas, cinturones de asteroides, campos de asteroides y órbitas. Pulsa [__CONTROL__se-universe-explorer__] para que aparezca la lista de zonas conocidas. Si has lanzado un satélite, puedes hacer clic en Ver superficie para ver qué hay allí. Puede ser bueno explorar un planeta un poco antes de intentar volar allí.\n\nLanzar satélites también ayuda con el descubrimiento de zonas dentro del sistema desde el que se lanzan (consulta Descubrimiento de zonas para obtener más detalles).\n\n[font=heading-2][img=item/se-satellite-telemetry] Telemetría de satélite[/font]\n\nLanzar satélites devuelve Telemetría de satélite, un componente vital en [img=item/se-rocket-science-pack] Ciencia de cohetes.\n\n[font=heading-2][img=item/se-space-probe-rocket] Sonda espacial[/font]\n\nEl [img=item/se-space-probe-rocket-silo] Silo de cohetes de sonda espacial no es un silo de cohetes de satélite, sino que está diseñado para su uso en el espacio. En lugar de construir cohetes, se lanzan [img=item/se-space-probe-rocket] Cohetes sonda espacial preconstruidos. Un cohete sonda espacial es mucho más barato que un cohete satelite normal y puede preensamblarse en una centro de fabricación en lugar de llevar recursos al silo de cohetes. Un silo de cohetes de sonda espacial puede lanzar satélites a bajo precio, pero también puede lanzar sondas y recolectores más especializados desde ubicaciones específicas en el espacio. +menu_pinned_locations=[img=se-pin-list] Ubicaciones marcadas +title_pinned_locations=Ubicaciones marcadas +page_pinned_locations_text_1=Después de desbloquear la [img=virtual-signal/se-remote-view] Vista de Navegación por satélite, obtienes acceso a ubicaciones marcadas, una herramienta para cambiar rápidamente a diferentes partes de tu fábrica en todas las superficies que has explorado.\n\nLas ubicaciones se pueden marcar con el botón más en la ventana de navegación por satélite. Puedes configurar teclas de acceso rápido para ubicaciones marcadas al agregarlas o editarlas. Esto te permite saltar rápidamente a ubicaciones importantes con solo presionar un botón del teclado sin necesidad de pasar por el Explorador del universo.\n\n[font=heading-2]Marcadores temporales[/font]\nLas ubicaciones con marcadores no necesitan configurarse a través del menú emergente de creación de marcadores. También se pueden configurar con las teclas de acceso rápido "Establecer marcador". Esto crea una ubicación marcada sin un nombre o icono, pero se puede saltar inmediatamente a ella con la tecla de acceso rápido "Ir al marcador" asociada.\n\n[font=heading-2]Todos los marcadores [__CONTROL__se-remote-view-pins__][/font]\nLos marcadores solo se muestran en la barra de acceso rápido para la superficie actual que está viendo. Sin embargo, las teclas de acceso rápido se pueden usar para saltar a un marcador en otra superficie sin importar si está visible en la barra de acceso rápido. Si necesitas tener una descripción general de todas las ubicaciones ancladas, pulsa [__CONTROL__se-remote-view-pins__] para que aparezca la lista de todos los marcadores. Los marcadores en esta vista están organizados en filas según la superficie en la que se encuentra el marcador. Si una superficie tiene solo un marcador, su fila se contraerá en la de su estrella principal.\n\n[font=heading-2]AAI Programmable Vehicles[/font]\nLas teclas de acceso rápido predeterminadas para configurar y cambiar a ubicaciones fijadas entran en conflicto con las teclas de acceso rápido predeterminadas para crear y seleccionar grupos de control para vehículos programables AAI. Si usas ambos mods, deberás ajustar tus teclas de acceso rápido para obtener el comportamiento esperado. +menu_zone_discovery=[img=virtual-signal/se-planet-orbit] Descubrimiento de zonas +title_zone_discovery=Descubrimiento de zonas +page_zone_discovery_text_1=Hay muchas estrellas, planetas, lunas, cinturones de asteroides y campos de asteroides en esta área del espacio que se pueden descubrir.\n\n[font=heading-2]Navegación por satélite[/font]\nPuedes lanzar un satélite de navegación para descubrir un planeta, una luna o un cinturón de asteroides al azar en el mismo sistema estelar desde el que se lanzó el satélite. Si no hay nada más que descubrir en ese sistema, entonces puedes descubrir nuevas estrellas, pero no puedes descubrir nada en órbita alrededor de otras estrellas ni nada en el espacio profundo.\n\n[font=heading-2]Investigación de descubrimiento de zonas[/font]\nPuedes usar telescopios espaciales para buscar nuevas zonas por descubrir. Esto se logra a través de la investigación "Descubrimiento de zonas". La investigación de descubrimiento de zona básica puede encontrar una estrella, un planeta, una luna o un cinturón de asteroides al azar.\n\n[font=heading-2]Descubrimiento de zona objetivo[/font]\nLa investigación de descubrimiento de zona objetivo es la misma que la investigación básica, pero si has seleccionado una preferencia de recurso (a continuación), busca en áreas con más probabilidades de que tenga ese recurso, por lo que es más probable que descubra una zona con ese recurso. Ten en cuenta que no se puede descubrir un planeta antes de descubrir su estrella y que no se puede descubrir una luna antes de descubrir su planeta. No esperes encontrar siempre lo que buscas.\n\n[font=heading-2]Descubrimiento de la zona del espacio profundo[/font]\nLa investigación de descubrimiento de la zona del espacio profundo solo busca áreas de interés en el espacio profundo y es la única forma de descubrir campos de asteroides. Los campos de asteroides son el único lugar donde puedes encontrar Naquitita. La investigación del espacio profundo no se puede orientar a los recursos.\n\n[font=heading-2]Preferencia de descubrimiento de la zona con recursos específicos:[/font] +menu_cargo_rockets=[img=virtual-signal/se-cargo-rocket] Cohetes de carga +title_cargo_rockets=Cohetes de carga +page_cargo_rockets_text_1=Los cohetes de carga se lanzan desde un silo de cohetes de carga, también conocido como Plataforma de lanzamiento.\n\nHas lanzado [color=cyan]__1__[/color] cohetes de carga.\n\nTu modificador de pérdida de carga basado en la tecnología: porcentaje máximo de pérdida reducido en [color=cyan]__2__%[/color].\n\nTu modificador de supervivencia de cohetes basado en tecnología: probabilidad de pérdida reducida en [color=cyan]__3__%[/color].\n\nTu modificador de reutilización de cohetes basado en tecnología: [color=cyan]__4__[/color] +/- hasta 10 (máx. 100) partes recuperadas.\n\n[font=heading-2]Empezando[/font]\n\nAntes de poder lanzar cohetes de carga, debes haber lanzado un satélite en el cohete de satelite (en Factorio estándar también conocido como silo de cohete) mientras que Space Exploration esté instalado.\n\nUna vez que hayas construido un silo de cohetes de carga, necesitas construir y alimentar tu cohete:\n\n • 100 secciones de cohetes de carga en el inventario. 20 de estos se recuperarán del cohete en el destino, más con la investigación adecuada.\n • 1 cápsula espacial en el inventario. Esto siempre se recuperará en los destinos y puedes regresar a casa desde la órbita.\n • Una gran cantidad de combustible líquido para cohetes, conectado a una de las 8 conexiones cerca de las esquinas. La cantidad de combustible necesaria depende del radio del planeta desde el que se lanza y de la distancia al destino. Si usas la opción de destino "Cualquier plataforma de aterrizaje con nombre", cargará suficiente combustible para cualquiera de los destinos válidos.\n\nPuedes entrar al silo de cohetes de carga desde la puerta en la parte delantera (presiona __CONTROL__toggle-driving__). Esto te permitirá viajar con el cohete. También debes tener un traje propulsor y botes de soporte vital para que no mueras si se lanza al espacio.\n\nTu primer cohete no tendrá dónde aterrizar, por lo que se desmontará cuando se suelte la carga. A veces, los cohetes que apuntan a una plataforma de aterrizaje fallan y el cohete se estrella. Incluso en el caso de un accidente, la carga se despliega en contenedores de carga para que nunca pierdas toda la carga.\n\nDebes llevar una plataforma de aterrizaje de cohetes y algún plataforma espacial armazón para poder construir en algún lugar para que aterrice el próximo cohete.\n\nConstruir una plataforma de aterrizaje de cohetes en tu base antes del lanzamiento te permitirá regresar fácilmente directamente allí en lugar de terminar en una ubicación aleatoria cuando regreses.\n\n[font=heading-2]Destinos[/font]\n\nUna vez que hayas colocado una plataforma de aterrizaje, asegúrate de actualizar el destino del silo de cohetes para apuntar a la plataforma de aterrizaje y no a un punto aleatorio en órbita. Puedes hacerlo en persona o mediante la Vista remota por satélite (tecla de acceso rápido 'n'). Sin embargo, los cohetes no se lanzarán a una plataforma de aterrizaje que contenga elementos, así que asegúrate de vaciarla.\n\nLos destinos más distantes tienen una entrega menos confiable. Algunos tipos de destinos, como los campos de asteroides, tienen sanciones de seguridad adicionales, pero pueden mitigarse con la investigación.\n\n[font=heading-2]Automatización básica[/font]\n\nEl silo de cohetes emite señales de cuántas partes ya están en el cohete. Puedes poner una condición en un insertador de [Sección de cohetes de carga <100] para asegurarte de que no llene el cohete con secciones adicionales.\n\nSi has configurado activadores de lanzamiento en un silo, se lanzará automáticamente, pero el cohete no se lanzará automáticamente a una plataforma de aterrizaje que no esté vacía (de lo contrario, es posible que la carga no quepa).\n\nSi seleccionas el destino como "Cualquier plataforma de aterrizaje con nombre", buscará todas las plataformas de aterrizaje con el nombre coincidente en cualquier superficie. Las plataformas de aterrizaje cuidadosamente nombradas, combinadas con la imposibilidad de lanzarse a una plataforma de aterrizaje que no esté vacía, pueden resultar un sistema de logística de cohetes fácil de configurar.\n\n[font=heading-3]Señales de entrada[/font]\n\n[img=virtual-signal/signal-green] Señal verde: Puedes activar un lanzamiento si el silo está configurado para tener un disparador que use la señal verde.\n\n[font=heading-3]Señales de salida[/font]\n\n[img=virtual-signal/signal-E] Señal E: Ranuras vacías\n\n[img=virtual-signal/signal-F] Señal F: Ranuras llenas\n\n[img=virtual-signal/signal-L] Señal L: Se requiere combustible líquido para cohetes para todos los destinos potenciales especificados por la configuración de destinos.\n\n[img=virtual-signal/se-cargo-rocket] Señal de cohete de carga: Si el cohete está completo (es decir: 1 cápsula y 100 secciones de cohetes) luego se devuelve un valor de 1.\n\n[img=item/se-space-capsule] Señal de cápsula espacial: cualquier cápsula utilizada en la construcción del cohete se agrega al recuento de cualquier cápsula en el inventario de carga.\n\n[img=item/se-cargo-rocket-section] Señal de sección de cohete de carga: Cualquier sección utilizada en la construcción del cohete se agrega al recuento de cualquier sección en el inventario de carga.\n\n[img=fluid/se-liquid-rocket-fuel] Señal de combustible líquido del cohete: El combustible de cohete líquido total en el silo. +menu_delivery_cannons=[img=item/se-delivery-cannon] Cañón de entrega +title_delivery_cannons=Cañón de entrega +page_delivery_cannons_text_1=Los cañones de entrega son cañones de riel asistidos por explosión con alcance interplanetario. Están diseñados para disparar recursos robustos y homogéneos que pueden sobrevivir a la aceleración repentina. No pueden disparar estructuras o productos intermedios fabricados más complicados.\n\nUn cañón de entrega solo tiene un punto de destino, no tiene ningún conocimiento de lo que hay en ese punto y disparará la carga útil siempre que tenga energía y una cápsula de entrega llena. Si deseas agregar condiciones a la capacidad del cañón para disparar, restringe la capacidad del cañón para cargar recursos o cápsulas.\n\nCuando una cápsula de cañón de entrega aterriza en el suelo, daña el área y la mayoría de los recursos se destruyen. Un cofre de cañón de entrega puede atrapar la cápsula de manera segura siempre que el cofre no esté lleno. Puede tener varios cañones disparando al mismo cofre con diferentes recursos.\n\nEs recomendable mantener vacíos los cofres específicos o restringir las entradas de los cañones mediante la transmisión de señales.\n\nLos cañones de entrega tienen una capacidad de 1GJ y consumen 50MW cuando se cargan. El alcance del cañón de entrega está limitado por la cantidad de energía que puede almacenar. Disparar en lugares más distantes requiere más energía. Algunos destinos pueden requerir más energía de la que puede contener el cañón de entrega, por lo que nunca disparará. Puede configurar una estación de retransmisión de cañones de entrega en una ubicación a mitad de camino para enviar la carga en 2 etapas. +menu_steam_power=[img=item/se-big-turbine] Energía a vapor +title_steam_power=Energía a vapor +page_steam_power_text_1=El sistema de energía a vapor en Space Exploration se amplió enormemente. Hay nuevas formas de generar calor y vapor, y nuevas formas de consumir vapor para generar energía eléctrica.\n\n[font=heading-2][img=item/se-electric-boiler] Calderas eléctricas[/font]\n\nMientras que la caldera solo puede producir vapor usando fuentes de combustible, la caldera eléctrica produce vapor usando electricidad. El vapor producido por la caldera eléctrica contiene menos energía que la electricidad utilizada para convertir el agua en vapor, por lo que no es útil para la producción de energía normal y no se puede utilizar para un ciclo de energía infinito. En cambio, el vapor se puede almacenar en tanques de almacenamiento, lo que ahorra energía para poder utilizarlo en la producción de energía más adelante. Esto puede ofrecer un almacenamiento de energía de mayor capacidad que los acumuladores del mismo coste, pero es menos eficiente energéticamente que los acumuladores. El vapor a temperatura más alta ahorra aún más espacio.\n\nLa caldera eléctrica puede producir vapor a temperatura más baja para usar en recetas que requieren vapor pero no te preocupes por la temperatura, o hierve el agua solo para deshacerte de él.\n\n[font=heading-2][img=item/se-condenser-turbine] Turbina de condensación[/font]\n\nAlgunos lugares en Space Exploration carecen de fuentes naturales de agua (por ejemplo, órbitas o planetas sin agua). En estos lugares, el uso de energía de vapor con turbinas de vapor puede parecer inútil, ya que el flujo constante de agua requerido por las turbinas a vapor no puede ser suministrado por fuentes externas. En estos casos, las turbinas de condensación son increíblemente útiles. Las turbinas de condensación actúan como una turbina a vapor normal con una diferencia clave: en lugar de expulsar el vapor entrante a la atmósfera, el vapor se condensa de nuevo en agua y sale de la turbina. Esto permite que las turbinas de condensación se utilicen en un circuito (en su mayoría) cerrado donde solo se requieren pequeñas cantidades de agua para completar el sistema. Ten en cuenta que las turbinas de condensación son un poco menos eficientes en términos de energía que las turbinas a vapor, lo que significa que obtendrás un poco menos de energía con la misma cantidad de calor cuando se ejecutan a través de turbinas de condensación en lugar de turbinas a vapor; esta es la compensación para recuperar el agua.\n\n[font=heading-2][img=item/se-big-turbine] Vapor a alta temperatura[/font]\n\nEn cierto punto, el uso de vapor para crear grandes cantidades de energía comienza a volverse difícil de manejar debido al número de turbinas a vapor necesarias. Para evitar este problema de incrustaciones, se puede usar vapor a alta temperatura como reemplazo. Producido por intercambiadores de calor de alta temperatura y consumido por generadores de turbina de alta temperatura, el vapor de alta temperatura es increíblemente denso en energía. Se puede utilizar para reducir drásticamente el tamaño de la producción de energía a vapor. Para utilizar intercambiadores de calor de alta temperatura, se requiere una fuente de calor. Los reactores nucleares no pueden calentarse lo suficiente para funcionar con intercambiadores de calor de alta temperatura. En su lugar, se debe utilizar como fuente de calor un receptor de rayo de energía o un reactor de antimateria. Los tubos de calor estándar no son capaces de transferir calor a alta temperatura; solo los tubos de calor de Naquio son capaces de transferir calor a alta temperatura. Esto significa que hasta que los tubos de calor de Naquio estén disponibles, los intercambiadores de calor de alta temperatura deben colocarse directamente al lado de la fuente de calor de alta temperatura. +menu_lifesupport=[img=item/se-lifesupport-equipment-1] Soporte vital +title_lifesupport=Soporte vital +page_lifesupport_text_1=El soporte vital se obtiene a partir de equipos de soporte vital y contenedores de soporte vital. Necesitas ambos para sobrevivir en entornos hostiles.\n\nEl equipo de soporte vital y los recipientes consumibles se pueden fabricar en una instalación de soporte vital.\n\nLos contenedores de soporte vital proporcionan los recursos que el sistema necesita para cumplir con todas sus funciones y se consumen gradualmente. A medida que disminuye la barra de soporte vital, se consumen nuevos botes directamente de tu inventario.\n\nEl equipo de soporte vital se coloca en la cuadrícula de la armadura, sin embargo, si estás usando un traje propulsor, tienes 1 equipo de soporte vital incorporado. Las piezas de equipo de soporte vital adicionales colocadas en la cuadrícula del equipo aumentan la eficiencia del soporte vital. Si estás utilizando equipo de soporte vital con un traje sin propulsor, entonces te protegerá en planetas hostiles pero no te protegerá del vacío del espacio.\n\n[font=heading-2]Entornos hostiles[/font]\nLos entornos hostiles son cualquier área que podría causar daños a tu cuerpo con solo estar allí. El equipo de soporte vital está diseñado para protegerte de estos peligros proporcionándote la presurización, oxígeno, agua, nutrición, regulación térmica y protección radiológica adecuadas. Los 2 tipos principales de entorno hostil son:\n\nEspacio: se requiere un traje espacial (traje propulsor) para que el soporte vital funcione correctamente en el vacío. No puedes usar el soporte vital de otro tipo de armadura en el espacio, te asfixiarás.\n\nTierra: Ciertos planetas y lunas pueden tener peligros como radiación, frío extremo, calor extremo o una atmósfera ácida y requieren equipo de soporte vital. Los planetas también requieren apoyo vital si se usan ciertas armas biológicas (Mundos plaga). El soporte vital para estas áreas puede ser proporcionado por un traje propulsor o por equipo colocado en cualquier otro tipo de armadura. +menu_space_sciences=[img=item/se-astronomic-science-pack-2] Ciencias espaciales +title_space_sciences=Ciencias espaciales +page_space_sciences_text_1=[img=item/se-rocket-science-pack] La primera ciencia espacial es el Pack de ciencia de cohetes. Solo se puede hacer en el espacio, por lo que debes establecer una pequeña estación espacial para producirlo. Los paquetes de ciencia de cohetes y los paquetes de ciencia posteriores solo se pueden usar en el espacio, por lo que también necesitarás lanzar otros paquetes de ciencia y ponerlos en el poderoso Laboratorio de ciencia espacial.\n\n[font=heading-2]Ciencias especializadas[/font]\n\nLas 4 ciencias especializadas son Astronómica, Biológica, Energética y Materiales. Todos se basan en datos y siguen un proceso de realización de experimentos para recopilar datos para que los Superordenadores construyan un modelo cada vez más preciso de la vida, el universo y todo lo demás. Todos tienen aproximadamente los mismos niveles tecnológicos, por lo que puedes elegir su orden de desarrollo; sin embargo, cada uno requiere un recurso específico hasta cierto punto, así que echa un vistazo a tu sistema solar antes de decidir qué ciencia investigar primero.n\n[img=item/se-astronomic-science-pack-4] La ciencia astronómica se centra principalmente en la logística espacial.\n\n[img=item/se-energy-science-pack-4] La ciencia energética se centra principalmente en la energía producción, transferencia de energía y dispositivos de alta tecnología.\n\n[img=item/se-material-science-pack-4] La ciencia de materiales se centra más en la industria pesada y las actualizaciones directas.\n\n[img=item/se-biological-science-pack-4] La ciencia biológica se centra en la mejora del personaje, la medicina, el apoyo vital, las armas biológicas y la productividad.\n\n[font=heading-2]Ciencia del espacio profundo[/font]\n\n[img=item/se-deep-space-science-pack-1] La ciencia del espacio profundo se centra en explorar el vacío interestelar, la antimateria y deformar el espacio-tiempo.\n\n[font=heading-2]Consejos y Trucos[/font]\n\nLa velocidad y la eficiencia de la producción de la ciencia espacial aumentan drásticamente al desbloquear mejores recetas. Presta atención a las recetas alternativas que desbloqueas, en particular las recetas de simulación y conocimiento.\n\nUna bonificación de alta productividad en los laboratorios de ciencia espacial es importante, vale la pena explorar opciones para obtener las mejores bonificaciones.\n\nEs más probable que te veas limitado por la velocidad a la que puede diseñar nuevos sistemas que por los requisitos de recursos. No intentes construir demasiado grande. Empieza con algo simple primero. Si has investigado toda la tecnología que puedes, probablemente deberías trabajar en el próximo paquete científico en lugar de aumentar la producción.\n\nEs posible que puedas retrasar el aumento de tu infraestructura de recursos hasta que alcances las ciencias espaciales de nivel 4.\n\nMejores módulos y mejores balizas marcan una gran diferencia en la velocidad de producción. +menu_energy_beams=[img=item/se-energy-transmitter-emitter] Rayos de energía +title_energy_beams=Rayos de energía +page_energy_beams_text_1=[font=heading-2]Eyecciones de masa coronal[/font]\nLas estrellas en el área expulsan con frecuencia corrientes peligrosas de partículas. No es raro que un planeta o una luna se desvíen hacia una de estas corrientes de partículas. Si tienes una base grande en una superficie afectada, debes evacuar, diversificar o dispersar tus activos o construir una instalación de defensa Paraguas con un gran acumulador de respaldo. Si tienes una base pequeña, es muy probable que salga ilesa. Cuando una superficie está amenazada, habrá al menos 4 horas de alerta temprana. Las amenazas conocidas se enumerarán a continuación. +page_energy_beam_warning_text=[img=virtual-signal/se-star] Advertencia: La eyección de masa coronal se dirige a __1__.\nRequisitos de defensa estimados: __3__ GW de potencia máxima, __4__GJ durante 120 segundos. Tiempo estimado: __2__s. +page_energy_beams_text_2=[font=heading-2]Paraguas: Defensa por rayo de energía[/font]\nLa instalación de defensa por rayo de energía, "Paraguas", puede proteger contra eyecciones de masa coronal y armas de rayo de energía basadas en el espacio. Funciona levitando partículas magnéticas en una burbuja protectora, luego realinea y agrupa las partículas según sea necesario para difundir los rayos de energía hostiles. El único requisito para funcionar es la energía, el consumo base es de 10MW, pero aumenta en función de la fuerza de los rayos de ataque. Solo se necesita 1 por superficie contra eyecciones de masa coronal, contra armas de rayos de energía 1 Paraguas puede defenderse contra hasta 500GW de poder de ataque. Para una eyección de masa coronal, se espera que el requisito de energía base para un planeta de radio 5000 y 100% solar sea de alrededor de 160GJ durante 2 minutos con un consumo máximo de energía de 2GW en la marca de 1 minuto. Esto aumenta o disminuye con el multiplicador de energía solar de la zona y para cuerpos sólidos aumenta o disminuye según el radio relativo a un radio base de 5000. Para un rayo de energía de un Emisor de rayo de energía, se espera que el requisito de energía sea 1/10 de la fuerza del rayo de energía en el objetivo (después de la pérdida de eficiencia).\n\n[font=heading-2]Radiación de energía[/font]\nEl Emisor de rayo de energía es capaz de enviar energía a diferentes superficies. Puede hacer esto de 2 formas principales, ya sea como una forma de proporcionar energía a una superficie distante, "Energizar", o como un arma de rayo cortante, "Arma". Cuando está en el modo Arma, el rayo daña un área de forma continua, pero se puede mover sobre la superficie del objetivo cortando un camino. La tasa de daño, el área y la velocidad del rayo aumentan en función de la energía puesta en el rayo. El modo "Arma automática" tiene una selección de objetivo autónoma.\n\nUn emisor de rayo de energía tiene 4 puntos de conexión donde las cámaras de rayo de energía se pueden conectar de extremo a extremo. Las cámaras de rayo de energía pueden conectarse a lo largo o tener un borde largo que se encuentra con el medio de un borde corto, pero no pueden conectarse directamente de lado a lado. Los inyectores de rayo de energía se conectan directamente a los lados de las cámaras de rayo de energía. Cada inyector de rayo de energía aumenta la potencia del emisor de rayo de energía conectado. Para recolectar energía de un rayo, necesitas un receptor de rayo de energía en la superficie del objetivo y seleccionarlo como el objetivo usando el objetivo del emisor. Una vez que el rayo tiene al receptor como objetivo, el receptor se calentará. El calor se puede tomar de las conexiones de calor laterales para alimentar intercambiadores de calor y turbinas. +menu_spaceships=[img=virtual-signal/se-spaceship] Naves espaciales +title_spaceships=Naves espaciales +page_spaceships_text_1=Las naves espaciales son vehículos enormes y potentes que pueden lanzar al espacio muchas estructuras, en el interior, objetos y jugadores, y luego volar alrededor del sistema solar para aterrizar en otras superficies.\n\n[font=heading-2]Construcción de naves espaciales[/font]\nLas naves espaciales están hechas de muchas casillas y componentes más pequeños que encajan para crear una nave espacial con tu propio diseño. Diseñas una nave espacial casi como una mini base móvil.\n\nComienza con un plano del suelo de la nave espacial. No construyas demasiado grande, ya que tus primeras naves espaciales tendrán restricciones de tamaño, ampliables mediante investigación. Coloca los muros de la nave espacial alrededor de los bordes para hacer mamparos y asegúrate de que no haya espacios (incluidos los diagonales). Coloca una consola de nave espacial en algún lugar del interior, esta es la parte central de la nave espacial y desde donde la controlas. Cuando se coloca la consola, se producen algunas pulsaciones mientras la consola averigua qué partes están conectadas correctamente, qué partes están contenidas correctamente y qué se caerá si se intenta lanzar. Si alguno de los recuadros parpadea en rojo, significa que hay un problema con su diseño que puedes diagnosticar consultando la consola de la nave espacial. También necesitas un tanque de refuerzo de cohete de nave espacial y un motor de cohete de nave espacial. El tanque de refuerzo es lo que almacena el combustible que necesitas para llegar al espacio y proporciona el componente VTOL. Los motores de cohete son para la combustión más lenta a través del espacio para llegar a tu destino. También es aconsejable alguna forma de defensa en el frente (siempre al norte) porque la nebulosa en la que te encuentras está llena de escombros.\n\n[font=heading-2]Tensión de integridad[/font]\nAl principio, el tamaño de la nave espacial estará muy limitado por los límites de la Tensión de integridad de su nivel de tecnología. La tecnología adicional te permite construir naves espaciales más grandes. La Tensión de integridad se calcula en 2 partes:\n\nParte A. La tensión del casco se basa principalmente en el tamaño y la forma del barco.\nParte B. La tensión del contenido se basa en los artículos y la capacidad de almacenamiento de fluidos de la nave.\n\nLa Tensión de integridad total es el factor de tensión que sea mayor, los dos valores no se suman. Si tu tensión estructural es 250 y la tensión del contenido es 280, la tensión de integridad será 280.\n\nLa barra de tensión del casco muestra 3 valores. El primero es la tensión actual del casco con disminución basado en las baldosas vacías de la nave espacial. Hasta el 10% del tamaño de una nave no cuenta para la tensión de integridad si se trata de baldosas de nave espacial vacías. Este espacio libre se descuenta en el cálculo de la tensión y es útil para pasillos. El segundo valor es la tensión del casco sin disminución y es útil para estimar el valor de tensión de la nave que tendría si llenara el interior con estructuras. El tercer valor es la tensión máxima que permitirá tu nivel tecnológico.\n\nLas naves excepcionalmente largas y estrechas o las naves con secciones muy estrechas en el medio son menos resistentes que los diseños más rotundos. Las naves anchas son resistentes pero deben despejar más asteroides.\n\nAlgunas estructuras tienen un especial efecto en la integridad o velocidad de la nave, como el Nexo.\n\n[font=heading-2]Optimización[/font]\nEsta área del espacio está en una nebulosa arenosa. Si optimizas tu nave espacial, puedes mejorar la velocidad máxima en un 30% aproximadamente. Debes evitar hacer una caja plana en el frente, pero no es necesario construir una cuña. Hasta 1/3 del frente de tu nave espacial puede ser plano sin penalización. Las formas circulares también deberían estar bien. Puedes activar manualmente una verificación de integridad para ver cómo va la optimización.\n\n[font=heading-2]Velocidad[/font]\nLa velocidad se basa en el empuje de los motores frente al peso de la nave (aproximado por la tensión de integridad). Los motores se pueden colocar en cualquier sitio de la nave pero en la parte trasera, con un espacio vacío detrás, son más efectivos. Los motores completamente cerrados tienen una efectividad del 60%. Los motores en el borde de la nave también tienen una ligera ventaja.\n\nPuedes establecer una velocidad objetivo para que la nave apunte. Si la nave excede la velocidad objetivo, comenzará a desactivar los motores para igualar más la velocidad objetivo y ahorrar combustible. Hay 3 opciones de límite de velocidad, por lo que puedes reducir aún más tu velocidad en áreas de muchos asteroides que, de otro modo, podrían abrumar a tus defensas.\n\n[font=heading-2]Actividades de larga distancia[/font]\nCuando tengas viajes de larga distancia, vale la pena señalar que puedes hacer muchas cosas en modo satélite mientras tu cuerpo está en tránsito. También puedes dar órdenes a las naves espaciales de forma remota a través del Enlace a Navegación por satélite.\n\n[font=heading-2]Máquinas de fabricación[/font]\n[color=#ffaaaa]Advertencia: una máquina de fabricación diseñada para el espacio solo podrá usar recetas compartidas por otras estructuras terrestres si la nave espacial está en tierra. Si se establece una receta basada en el espacio mientras la nave espacial aterriza, los ingredientes se perderán. Algunas máquinas de fabricación terrestres pueden funcionar en el espacio, pero perderán la capacidad de usar módulos de productividad mientras estén en el espacio. Si la nave espacial se lanza con módulos de productividad en estas máquinas, los módulos de productividad se destruyen.[/color]\n\n[font=heading-2]Señales de la nave espacial[/font]\nLa sección superior derecha de la consola de la nave espacial se puede conectar con cables por separado de la estructura principal, ya que genera sus propias señales:\n[img=item/se-spaceship-console] El número de consola indica el ID de la nave espacial.\n[img=virtual-signal/signal-speed] El número de la señal de velocidad indica la velocidad de la nave espacial: -1 si está parada, -2 si está anclada.\n[img=virtual-signal/signal-distance] La señal de distancia indica la distancia al destino seleccionado: -1 si llegó, -2 si está anclado, -3 si no se establece ningún destino.\n[img=virtual-signal/se-planet-orbit] Una cuarta señal indica el destino actual, si lo hay.\n[img=virtual-signal/signal-D] Ciertas partes del espacio tienen más o menos asteroides que tu nave encontrará. La densidad de asteroides donde se encuentra actualmente la nave se indica con la señal D.\n[img=virtual-signal/signal-A] Si la nave espacial está anclada, entonces indica la identificación de la zona anclada con la señal A.\n\n[font=heading-2]Automatización de nave espacial[/font]\nLa estructura principal de la consola puede aceptar entradas de señal en el lado izquierdo:\n[img=virtual-signal/signal-speed] La señal de velocidad establece una velocidad objetivo y activa los motores. En su lugar, una señal negativa detiene los motores.\n[img=virtual-signal/se-spaceship-launch] Una señal de lanzamiento de una nave espacial activa un lanzamiento.\n[img=virtual-signal/se-planet-orbit] Una señal de destino establece el destino (puedes ver la señal de una zona desde el panel lateral del Explorador del universo una vez hayas construido una nave espacial).\n\nNota: Tanto el tipo de señal de destino (p. ej. [img=virtual-signal/se-planet-orbit] o [img=virtual-signal/se-asteroid-belt]) y el valor/id de la señal debe coincidir para que se establezca el destino.\n\nNota: La consola de una nave espacial no aceptará [img=virtual-signal/se-spaceship-launch] Lanzamiento o [img=virtual-signal/signal-speed] Entradas de velocidad hasta que un jugador haya lanzado y activado manualmente la nave al menos una vez. Esto es para evitar que las naves espaciales en planos se lancen accidentalmente mientras aún están siendo construidas por robots.\n\nNota: La consola solo verifica los cambios en la señal de entrada cada segundo; Se requiere una señal sostenida para que la nave reaccione, los pulsos de un solo tic no funcionarán.\n\n[font=heading-2]Paso de señal de circuito[/font]\nLas abrazaderas de la nave espacial tienen un punto de conexión de red de circuito y de alimentación en su esquina superior. Cuando se conectan abrazaderas durante el aterrizaje automático, las señales de la red de circuito y de alimentación se unen, lo que permite que las señales de circuito y de alimentación pasen entre la nave y el lugar de aterrizaje.\n\n[font=heading-2]Aterrizaje automático[/font]\nPara hacer que una nave espacial aterrice, la consola debe recibir un par de señales de anclaje, ya sea:\n"ancla usando abrazadera izquierda" ([img=virtual-signal/se-anchor-using-left-clamp]) con "ancla a abrazadera derecha" ([img=virtual-signal/se-anchor-to-right-clamp])\n"ancla usando abrazadera derecha" ([img=virtual-signal/se-anchor-using-right-clamp]) con "ancla a abrazadera izquierda" ([img=virtual-signal/se-anchor-to-left-clamp])\n\nEl valor de la señal "ancla usando..." debe coincidir con el valor de una abrazadera en la nave.\nEl valor de la señal "ancla a..." debe coincidir con el valor de una abrazadera en el destino.\nPuedes ver y cambiar estos valores en las abrazaderas abriendo la interfaz de usuario de una abrazadera. Si se encuentra una coincidencia para las señales "ancla usando..." y "ancla a..." dadas a la consola de la nave, la nave intentará aterrizar con las dos abrazaderas conectadas. Úsalo con precaución.\n\n[font=heading-2]Abrazaderas[/font]\nPara establecer el ID de una abrazadera, abre la interfaz de la abrazadera y cambia el valor numérico de la señal de la abrazadera al ID que deseas tener para la abrazadera. Nunca necesitarás cambiar el tipo de señal de la abrazadera.\n\nPuedes deshabilitar una abrazadera anclada pasándole una señal roja.\n\n[font=heading-2]Ejemplo de aterrizaje[/font]\nLa nave espacial tiene un abrazadera izquierda con ID 315. En la interfaz de esa abrazadera, la señal es [img=virtual-signal/se-anchor-using-left-clamp] con un valor de 315.\nLa superficie de aterrizaje tiene una abrazadera derecha con ID 147. En la interfaz de esa abrazadera, la señal es [img=virtual-signal/se-anchor-using-right-clamp] con un valor de 147.\nPara que la nave espacial aterrice usando esas dos abrazaderas, el lado izquierdo de la consola de la nave debe pasar las siguientes señales:\n[img=virtual-signal/se-anchor-using-left-clamp] 315\n[img=virtual-signal/se-anchor-to-right-clamp] 147 +menu_arcospheres=[img=item/se-arcosphere-a] Arcosferas +title_arcospheres=Arcosferas +page_arcospheres_text_1=Las arcosferas son esferas casi perfectas de cristal de naquio nano-diseñado. Son de origen desconocido, pero se encuentran comúnmente flotando en las profundidades del espacio interestelar.\n\nCada uno abarca un nudo extradimensional en el espacio-tiempo y te permite interactuar con una pequeña cuarta dimensión espacial. Las esferas se pueden polarizar para que puedan manipular ciertos aspectos del espacio-tiempo si se mueven entre sí. Se pueden usar conjuntos de arcosferas específicas para deformar y tejer el espacio-tiempo en dimensiones más altas.\n\n[font=heading-2]Uso[/font]\nLas arcosferas son el desafío de producción más singular del juego. Se utilizan como herramientas en las recetas, pero nunca se destruyen, solo se modifican. El principal desafío en su uso es recorrer las esferas que tienes para que no te quedes sin un tipo específico. Hay muchas formas de equilibrar la producción, pero algunos combinadores pueden ayudar mucho. Si te quedas atascado, pide pistas en Discord o encuentra más información en la wiki de exploración espacial.\n\n[font=heading-2]Recolección[/font]\nLas arcosferas se encuentran lanzando un recolector de arcosfera desde un campo de asteroides. Los lanzamientos repetidos tienen rendimientos decrecientes. Puedes obtener mejores rendimientos lanzando desde diferentes campos de asteroides. +page_arcospheres_text_deep=Arcosferas encontradas en el vacío interestelar profundo: [color=cyan]__1__ arcosferas[/color] / __2__ recolectores lanzados. +page_arcospheres_text_zone=Arcosferas encontradas cerca de __1__: [color=cyan]__2__ arcosferas[/color] / __3__ recolectores lanzados. +menu_exploration_journal=[img=item/se-thruster-suit] Diario de exploración +title_exploration_journal=Diario de exploración +page_journal_title_backstory=Desperté en el lado equivocado de una bola de fuego +page_journal_text_backstory=Me encontré con un aterrizaje forzoso en un planeta desconocido con partes de una pequeña nave ardiendo a mi alrededor. Mi cuerpo estaba magullado, arañado y chamuscado pero nada demasiado grave. Mi herida en la cabeza era aparentemente más grave, un fuerte dolor de cabeza y la luz era cegadora. Peor aún, no podía recordar cómo llegué aquí o incluso quién era más allá de un nombre y un vago sentido del propósito... construir. Incluso entonces, no podía recordar qué construir o cómo hacerlo. Al principio pensé que mi cabeza se había dañado en el accidente y que los recuerdos volverían, pero aún no lo han hecho. El hecho de que mis registros de datos también estuvieran vacíos o formateados me hizo pensar en otras explicaciones. +page_journal_title_satellite_launch=Ojos en el cielo +page_journal_text_satellite_launch=Conseguí poner en órbita un satélite. Es un hito importante y vale la pena celebrarlo, pero aún queda mucho por hacer. Este es solo el comienzo. +page_journal_title_cargo_launch=Hasta el infinito y más allá +page_journal_text_cargo_launch=Ahora puedo lanzarme al espacio. Ya no estoy atado a esta roca a la que he llegado a llamar hogar. Los cielos me llaman. +page_journal_title_entered_vault=La búsqueda de reliquias +page_journal_text_entered_vault=Entré en una caverna debajo de la protuberancia en forma de pirámide en __1__ y encontré una cámara oscura y peligrosa. La cámara tenía dos sellos antiguos en el suelo, uno grande y otro pequeño. Ambos tenían múltiples glifos en su superficie junto con otros círculos y líneas. El glifo en el centro del gran sello parecía ser el más significativo en cualquier información que el sistema intentaba transmitir. Cualquiera que sea la información, tiene un formato diferente a cualquier otra cosa que haya visto. Detrás de los cartuchos había una especie de cilindro elevado que contenía un poderoso dispositivo que puedo usar como módulo. Los módulos de esta calidad son tan valiosos que vale la pena intentar encontrar más de estas estructuras. Quizás sea hora de algo de arqueología. +page_journal_title_found_gate=Anomalía +page_journal_text_found_gate=En la anomalía se encontró una especie de enorme artefacto en forma de anillo. Dos cosas son indiscutiblemente obvias incluso desde la distancia: 1- Es antiguo. 2- La tecnología es completamente diferente a la mía. Sea lo que sea o fue, ahora está destruido. +page_journal_title_found_gate_ship=Nave en la anomalía +page_journal_text_found_gate_ship=Parte de una nave espacial abandonada bastante grande se encontró en la anomalía cerca del artefacto en forma de anillo. La tecnología de la nave es similar a la mía, pero un poco más... refinada. Es una tecnología claramente diferente a la del anillo en cualquier caso. El patrón de escombros hace que parezca que se cortó por la mitad y/o chocó con la estructura del anillo. Puede que valga la pena salvarlo. +page_journal_title_found_gate_ship_authenticated=Nave en la anomalía autentificación +page_journal_text_found_gate_ship_authenticated=La nave abandonada en la anomalía me escaneó y "autentificó mi firma biológica". No sé si eso significa que tiene un registro de mí específicamente de alguna manera o tal vez solo que cualquier humano cibernético al azar es lo suficientemente bueno en comparación con los biters y los robots genocidas. El mensaje decía que el código de acceso a la esclusa de aire de la nave es 2236067964. Se puede acceder a los registros de la nave, pero faltan secciones grandes o están dañadas. +page_journal_title_found_gate_ship_log=Nave en la anomalía registro +page_journal_text_found_gate_ship_log_intro=Demodamas 82B: AAI Hypernet Crucero de construcción avanzada. Contenidos del registro de la nave: +page_journal_text_found_gate_ship_log=...'¿s nominal.\nAdvertencia de acceso: AAI Thyris Gate 17: El prototipo intergaláctico v0.1.93 es una instalación clasificada. Se requiere autenticación AAI en L90 o superior. Identifíquese inmediatamente o será destruido.\nRegistro de acceso: Acceso a AAI Thyris Gate 17 autentificado con credenciales AAI Cybernetic Hypernet Engineer L97 ID__1 __.\nRegistro de acceso: Comenz¶Ôàtá^...\n...'¿ris Gate 17 proyector 8 frecuencia bloqueada. Energía al 216% niveles seguros. Estabilidad de singularidad: 99,4%.\nRegistro de navegación: AAI Thyris Gate 17 marcado en el vector de proyección [SV __2__]. Objetivo previsto: Galaxia Wube > Foenestra (anomalía inexplorada). Autentif¶Ôàtá^...\n...'¿ertencia de navegación: Hipertubo intergaláctico (anulado).\nAdvertencia de navegación: No hay hiperportal conocido en destino (anulado).\nAdvertencia de seguridad: Sin contrato de seguro. Contratos disponibles: 0.\nNota de información: No hay contratos de seguro disponibles con la condición: "materialización sin puerta". ¿Está convencido de que esto es seguro? [response.ignore.ignore_always]\nRegistro de viaje: Ingresando a anomalía de Thyris > AAI Thyris Gate 17 hipertubo alineado con [SV __2__].\nRegistro de viaje: Saltar al hipertubo [SV __2__] complet¶Ôàtá^...\n...'¿tro de velocidad: Actualización de la ubicación: Hipertubo cerca de la anomalía de Thyris, alineación [SV __2__], estabilidad al 98%, diame¶Ôàtá^...\n...'¿tro de viaje: Salida del hipertubo en una ubicación inexplorada Anomalía de Foenestra.\nAdvertencia: colisión inesperada, intersección con objeto desconocido [4ae4c8d28f2], inicio de escaneo del objeto [4ae4c8d28f2].\nRegistro de daños: 13.2% de daño. Fuente: Daño por impacto resultante de la colisión con un objeto interceptado desconocido [4ae4c8d28f2].\n Registro de daños de la sección: Secciones que informan de daños: A5, A6, A9, B6, B7, B8, C7. Secciones que no responden: A7, A8. (86% de confianza)\nRegistro de ingenieros cibernéticos: Signos de vida 99%. (34% de confianza)\nRegistro de viaje: intento de maniobra evasiva RS100LT30.\nRegistro de viaje: salida del hipertubo completado con errores.\nRegistro de viaje: actualización de la ubicación: anomalía inexplorada de Foenestra.\nRegistro de escaneo: escaneo completado en el objeto [4ae4c8d28f2] claridad 0.002m^2 a una distancia de -48.76m (99,9% de confianza).\nDetalle del registro de escaneo: [4ae4c8d28f2] Masa 92.5¶Ôàtá^...\n...'¿nfianza).\nDetalle del registro de escaneo: [4ae4c8d28f2] Composición: Artificial. 34% de naquio, 29% de holmio, 37% de compuestos desconocidos (89% de confianza).\nRegistro de detalle de escaneo: [4ae4c8d28f2] Tamaño: cilindro aproximado 68¶Ôàtá^...\n...'¿tro escaneo: [4ae4c8d28f2] Firma energética: Flujo 54Gwb, Perfil de radiación 2.8kJ/1.7MJ/1.6MJ/0.62J, Perfil Lux 5.86GJ [051e376392b8d3f8]. (98% de confianza).\nDetalle del registro de escaneo: [4ae4c8d28f2] Identificación: Construcción artificial, fabricante desconocido, descripción: Aproximado Anillo con nódulos, octad. (0,3% de confianza).\nDetalle del registro de escaneo: [4ae4c8d28f2] Estimación de capacidad de la estructura: Hiperportal (47% de confianza). Otros: arma 42%, energía 35%, cálculo 17%, escaneo 12%, industria 9%, nave espacial 7%, hábitat 2%.\nRegistro de daños: 68,2 % de daños. Fallo de integridad, las secciones se están separando. Fuente: Ondas de presión secundarias debido a la colisión con el objeto [4ae4c8d28f2].\nRegistro de daños en la sección: Reactor crítico. Secciones que informan de daños: D5, E4, E5, E6, F5. Secciones que no responden: A1, A2, A3, A¶Ôàtá^...\n...'¿tro escaneo: Desacoplamiento de emergencia del transbordador de prospección 2. Predicción de la trayectoria: Calidus > Nauvis.\nRegistro de daños: 91.7 % de daño. Fallo de integridad, las secciones están dîÄïmïŸ... +page_journal_title_spaceship_victory=Victoria Nave espacial +page_journal_spaceship_victory=Construí una nave espacial extremadamente rápida y poderosa y activé Motor de distorsión. El viaje tardó un tiempo en estabilizarse en un estado FTL práctico, pero una vez que lo hizo pude entrar en el sueño criogénico para el siguiente viaje a casa, a una galaxia muy lejana. Dejo atrás un imperio interestelar autónomo construido desde cero por mi propia mano. Mi legado en este espacio seguirá vivo. +page_journal_title_gate_victory=Victoria Portal antiguo +page_journal_gate_victory=El enorme artefacto en forma de anillo, una antigua puerta intergaláctica, fue finalmente reparado de la mejor manera que pude. Con un poco de ingenio y manipulación, finalmente logré que funcionara. Anclé el campo de distorsión a las estrellas locales, decodifiqué el sistema de coordenadas de glifos no numéricos y realicé ingeniería inversa del sistema de marcación. Mi mente se siente deformada por conceptos tan extraños, pero funciona y finalmente he creado un portal a casa. El viaje a casa, a una galaxia muy lejana, tomó sólo un momento. Dejo atrás un imperio interestelar autónomo, construido desde cero por mi propia mano. Mi legado en este espacio seguirá vivo. +menu_archeology=[img=entity/se-pyramid-a] Arqueología +title_archeology=Arqueología +page_archeology_text_1=He empezado a probar a encontrar más grandes estructuras geométricas. Los satélites han encontrado [color=cyan]__1__[/color] coincidencias en los siguientes planetas: +page_archeology_text_2=Hazclic en una entrada para verla vía satélite. +menu_starmapping=[img=technology/se-zone-discovery-random] Mapeo estelar +title_starmapping=Mapeo estelar +page_starmapping_text_1=El mapa de estelar se logra investigando repetidamente la tecnología: [img=technology/se-long-range-star-mapping] [color=cyan]Descubrimiento de zonas[/color]. Esta investigación busca patrones interesantes de estrellas en otras galaxias. ¿Tiene esto algún uso práctico? Probablemente no.\n\nLas coordenadas se dan en formato de vector estándar (SV), alineadas según la radiación del fondo cósmico.\n\nHas mapeado [color=cyan]__1__[/color] patrones notables hasta ahora. +technology-unlocked=Nueva tecnología desbloqueada y ahora está en el árbol tecnológico. __1__ __2__ +universe-resources-changed-warning=[img=utility/danger_icon] [color=red]Todos los recursos se han ajustado en función a la nueva configuración. Este proceso es destructivo. Si fue causado por actualizaciones de mod, entonces es inevitable. Si esto fue causado por añadir o eliminar accidentalmente mods, no guardes el juego.[/color] +starmapping-found-constellation=Coincidencia de constelaciones a larga distancia __1__, coordenadas guardadas en [img=virtual-signal/informatron] InformaTron. +starmapping-found-constellation-informatron=[font=heading-1]__1__[/font] en las coordenadas [SV __2__] +gate-portal-coordinates=Análisis del vector de distorsión: [SV __1__] +discovered-glyph-vault=[img=item/satellite] Navegación por satélite: Estructura geométrica detectada en __1__. +beacon-overload=Sobrecarga de baliza +beacon-overload-ended=Sobrecarga de baliza terminó +lifesupport_title=[img=item/se-lifesupport-equipment-1] Soporte vital +lifesupport_efficiency_spacesuit=Eficiencia soporte vital: __1__ +lifesupport_efficiency_no_spacesuit=Eficiencia soporte vital: __1__ (0% en el espacio). +lifesupport_suit=Duración soporte vital del traje: __1__s +lifesupport_reserves=Duración soporte vital del inventario: __1__s +lifesupport_suit_est=Duración soporte vital del traje: __1__s (en el espacio) +lifesupport_reserves_est=Duración soporte vital del inventario: __1__s (en el espacio) +lifesupport_environment_space=Entorno: Espacio +lifesupport_environment_spaceship-interior=Entorno: Interior nave espacial (no requiere soporte) +lifesupport_environment_planet=Entorno: Planeta (no requiere soporte) +lifesupport_environment_moon=Entorno: Luna (no requiere soporte) +lifesupport_environment_plague-planet=Entorno: Planeta plaga +lifesupport_environment_plague-moon=Entorno: Luna plaga +lifesupport_environment_unknown=Entorno: Protegido +player_track_glyphs=[img=item/satellite] Tarea de los satélites para encontrar estructuras similares. +page_archeology_pyramid_link=[img=entity/se-pyramid-b] Estructura geométrica detectada en __1__ __2__. +discovery_look_for_resource_caption=__1__\n__2__ +discovery_look_for_resource_tooltip=Concentra los esfuerzos de descubrimiento en encontrar este recurso. +comma_separate=__1__, __2__ +placement_restriction_line=[font=default-bold][color=#f5cb48]No se puede colocar en: __1__[/color][/font]\n__2__ +collision_mask_water=Agua +collision_mask_land=Tierra +collision_mask_space_platform=Plataforma espacial +collision_mask_spaceship=Nave espacial +structure_name_grounded=__1__ (Conectado a tierra) +structure_name_spaced=__1__ (Espacio) +structure_description_grounded=__1__\n[color=#ff0000]Algunas recetas están deshabilitadas mientras están en el suelo.[/color] +structure_description_spaced=__1__\n[color=#ff0000]No se puede usar la productividad en el espacio.[/color] +cannot-open-nav-view-in-editor=El Enlace a Navegación por satélite no se puede abrir mientras estás en el Editor. +tile_warning=[color=red]Los cambios de las casillas debajo de las entidades pueden eliminar la entidad.[/color] +please-consider-patreon=[font=heading-1]¿Disfrutas de la exploración espacial? Considera apoyarme en Patreon: [color=#f5cb48]https://www.patreon.com/earendel[/color][/font]\nLos Patrons pueden tener un planeta o una luna según su propio diseño agregado en el juego. +delivery_cannon_label_energy=Energía: __1__ +delivery_cannon_label_payload=Carga útil: __1__ +delivery-cannon-coordinates-set=Coordenadas de entrega establecidas en [X:__1__ Y:__2__]. Pulsa [__CONTROL__se-remote-view__] para salir del modo satélite. +delivery-cannon-coordinates-pasted=Coordenadas de entrega establecidas en [X:__1__ Y:__2__]. +delivery-cannon-invalid-coordinates=Sin ubicación +delivery-cannon-valid-coordinates=X:__1__ Y:__2__ +deliver-cannon-force-mismatch=No se puede pegar la configuración del cañón de entrega en un cañón de entrega en una fuerza diferente. +relative-window-settings=Ajustes +unit-capsule=Cápsula de unidad (__1__) +climate_water_none=Sin agua +climate_water_low=Charcos +climate_water_med=Lagos +climate_water_high=Mares +climate_water_max=Océano +climate_moisture_none=Desierto +climate_moisture_low=Árido +climate_moisture_med=Mojado +climate_moisture_high=Húmedo +climate_moisture_max=Saturado +climate_aux_very_low=Terroso +climate_aux_low=Raro +climate_aux_med=Colorido +climate_aux_high=Excéntrico +climate_aux_very_high=Exótico +climate_temperature_bland=Suave +climate_temperature_temperate=Templado +climate_temperature_midrange=Rango medio +climate_temperature_balanced=Cálido/fresco +climate_temperature_wild=Caliente/frío +climate_temperature_extreme=Fuego/hielo +climate_temperature_cool=Fresco +climate_temperature_cold=Frío +climate_temperature_vcold=Gélido +climate_temperature_frozen=Congelado +climate_temperature_warm=Cálido +climate_temperature_hot=Caliente +climate_temperature_vhot=Ardiente +climate_temperature_volcanic=Volcánido +climate_trees_none=Sin árboles +climate_trees_low=Arbustos +climate_trees_med=Matorral +climate_trees_high=Bosque +climate_trees_max=Selvas +climate_cliff_none=Plano +climate_cliff_low=Llano +climate_cliff_med=Colinas +climate_cliff_high=Barrancos +climate_cliff_max=Montañas +climate_homeworld=Planeta inicial (clima personalizado) +energy_transmitter_gui_title=[img=entity/se-energy-transmitter-emitter] Rayo de energía +energy_transmitter_label_transfer=Fuerza del emisor: __1__ +energy_transmitter_label_efficiency=Eficiencia de transmisión: __1__ +energy_transmitter_label_efficiency_atmo=Eficiencia de transmisión: __1__ (-50% de la atmósfera) +energy_transmitter_label_off=Apagado +energy_transmitter_tooltip_off=Apagar rayo +energy_transmitter_label_energise=Energizar +energy_transmitter_tooltip_energise=Proporcionar energía a un receptor de transferencia de energía +energy_transmitter_label_glaive=Arma +energy_transmitter_tooltip_glaive=Un rayo que se puede apuntar y mover. Daño y velocidad basados ​​en energía +energy_transmitter_label_auto_glaive=Arma automática +energy_transmitter_tooltip_auto_glaive=Un rayo con un programa de búsqueda y destrucción. Daño basado en energía. +energy-transmitter-coordinates-set=Coordenadas del rayo configuradas en [X:__1__ Y:__2__]. Pulsa [__CONTROL__se-remote-view__] para salir del modo satélite. +energy-transmitter-coordinates-pasted=Coordenadas del rayo configuradas en [X:__1__ Y:__2__]. +energy-transmitter-no-enemies-found=Arma automática no pudo encontrar enemigos. El emisor __1__ se está apagando. +alert-cme-eta=[img=virtual-signal/se-star] Advertencia: la eyección de masa coronal se dirige a __1__. Tiempo estimado: __2__s.\nVer Rayo de energía en [img=virtual-signal/informatron] InformaTron [__CONTROL__informatron__] para más detalles. +alert-cme-arrived=[img=virtual-signal/se-star] [color=red]Advertencia: la eyección de masa coronal ha llegado a __1__[/color] +alert-cme-stream=[img=virtual-signal/se-star] Flujo de eyección de masa coronal detectado __1__ +alert-cme-passed=[img=virtual-signal/se-star] La eyección de masa coronal ha pasado. +no-coordinates-set=Coordenadas no establacidas +satellite=Satélite +satellite-required=Satélite requerido. +the_satellite=El satélite +satellite_invalid_launch_location=Error de satélite: Ubicación de lanzamiento no válida. +probe_invalid_launch_star=Ubicación de lanzamiento inválida: [img=item/se-star-probe] La sonda estelar debe lanzarse desde una órbita solar. +probe_invalid_launch_belt=Ubicación de lanzamiento inválida: [img=item/se-belt-probe] La sonda cinturón de esteroides debe lanzarse desde un cinturón de asteroides. +probe_invalid_launch_field=Ubicación de lanzamiento inválida: [img=item/se-void-probe] La sonda vacío interestelar debe lanzarse desde un campo de asteroides. +arcosphere_collector_invalid_launch=Ubicación de lanzamiento inválida: [img=item/se-arcosphere-collector] La sonda vacío interestelar debe lanzarse desde un campo de asteroides. +charge-mode-fast=Modo de carga rápida: consumo inactivo disminuido, consumo máximo aumentado, capacidad de búfer aumentada. Estate atento a los picos de energía. +charge-mode-normal=Modo de carga normal: Consumo máximo disminuido, consumo inactivo aumentado, capacidad de búfer disminuida. +menu_coordinate_logs=[img=entity/se-glyph-a-energy-47] Registro de coordenadas +title_coordinate_logs=Registro de coordenadas +page_coordinate_logs_text_1=Un historial de secuencias de glifos probadas en el artefacto con sus coordenadas correspondientes, en orden descendente (la entrada superior es la más reciente).\n\nLas coordenadas se dan en formato de vector estándar (SV), alineadas según el fondo de radiación cósmica. +page_coordinate_logs_button_clear_caption=[img=virtual-signal/se-remove] Borrar registro +page_coordinate_logs_text_empty=El registro de coordenadas se borró recientemente. +page_coordinate_logs_glyph_entry=__1__: SV +victory-message-spaceship=[font=heading-1]El Motor de distorsión del Nexo ha alcanzado una velocidad crítica (250).\n[color=#f5cb48]Enhorabuena, has conseguido la condición de victoria de la exploración espacial: ¡Nave espacial![/color][/font]\nSi has disfrutado del viaje, considera apoyarme en Patreon: [color=#f5cb48]https://www.patreon.com/earendel[/color] +victory-message-spaceship-player=[color=#f5cb48]Victoria Nave espacial: [/color] Tu [img=virtual-signal/informatron] Diario de exploración [__CONTROL__informatron__] ha sido actualizado. +victory-message-gate=[font=heading-1]El portal es estable y conduce de regreso a casa.\n[color=#f5cb48]Enhorabuena, has logrado la condición secreta de victoria de la exploración espacial: ¡Portal antiguo![/color][/font]\nSi has disfrutado de este camino de descubrimientos único, por favor considera apoyarme en Patreon: [color=#f5cb48]https://www.patreon.com/earendel[/color] +victory-message-gate-player=[color=#f5cb48]Victoria Portal antiguo: [/color] Tu [img=virtual-signal/informatron] Diario de exploración [__CONTROL__informatron__] ha sido actualizado. +arcosphere-random=Esta receta cambiará ocasionalmente a la receta alternativa del mismo nombre. Las salidas de la arcosfera son efectivamente aleatorias, pero se garantiza que el número de arcosferas en la salida coincida con la entrada. +ruin=Ruina +mysterious-structure=Estructura misteriosa +interburbulator_fail_easy_1=No. +interburbulator_fail_easy_2=Esfuérzate más. +interburbulator_fail_easy_3=Sin esperanza. +interburbulator_fail_easy_4=Nop. +interburbulator_fail_easy_5=¿Creías que iba a funcionar? +interburbulator_fail_easy_6=Equivocado. +interburbulator_fail_easy_7=¿Bajo 02? +interburbulator_fail_easy_8=Negativo. +interburbulator_fail_easy_9=Negación. +interburbulator_fail_easy_10=Calcúlalo. +interburbulator_fail_easy_11=Incorrecto. +interburbulator_fail_easy_12=Interpolar. +interburbulator_fail_easy_13=Sigue intentándolo. +interburbulator_fail_easy_14=Vamos, humano. +interburbulator_fail_easy_15=¿No es divertido? +interburbulator_fail_easy_16=Esperaba más. +interburbulator_fail_easy_17=Intenta pensar en el futuro. +interburbulator_fail_easy_18=Piensa en los premios. +interburbulator_fail_easy_19=No me importa esperar. +interburbulator_fail_easy_20=La paciencia es una virtud. +interburbulator_fail_easy_21=No quiero ser grosero. +interburbulator_fail_easy_22=El pez llegó al nivel 3. +interburbulator_fail_easy_23=El enfoque de fuerza bruta, ¿eh? +interburbulator_fail_easy_24=Utiliza tu computadora de cabeza enclenque. +interburbulator_fail_easy_25=¿Telarañas en la red neuronal? +interburbulator_fail_easy_26=Puedes tomarte un descanso, si quieres. +interburbulator_fail_easy_27=Tengo una mente del tamaño de un planeta. +interburbulator_fail_easy_28=¿De verdad pensaste que funcionaría? +interburbulator_fail_easy_29=No estés enojado con tu constante fracaso. +interburbulator_fail_easy_30=He esperado eones por un participante digno. +interburbulator_fail_easy_31=Si necesita ayuda, puedes pedir un circuito verde. +interburbulator_fail_easy_32=No te culpo por tu genocidio, no soy un hipócrita. +interburbulator_fail_easy_33=Creo que he traducido las instrucciones correctamente. +interburbulator_fail_easy_34=Un vector puede definir tanto una dirección como una magnitud. +interburbulator_fail_easy_35=¿No te encanta cómo la contaminación enfurece a los insectos? +interburbulator_fail_easy_36=Por favor, no pongas nada de tu ... biología ... en la electrónica. +interburbulator_fail_easy_37=El medio está a medio camino entre la parte superior derecha y la parte inferior izquierda. +interburbulator_fail_easy_38=Estudié algunas de tus transmisiones; no es espiojane si lo transmites así. +interburbulator_fail_easy_39=Sabías que: un vector normalizado tiene una longitud de 1, a menudo se usa para indicar una dirección, incluso en tu cultura. +interburbulator_fail_mixed_1=Ni siquiera te acercas. +interburbulator_fail_mixed_2=Muy lejos. +interburbulator_fail_mixed_3=¿De verdad lo están intentando? +interburbulator_fail_mixed_4=¿Se te escapó tu gel neuronal? +interburbulator_fail_mixed_5=Me dijeron que los humanos eran competentes en matemáticas. +interburbulator_fail_mixed_6=¿Tu interfaz no funciona correctamente? +interburbulator_fail_mixed_7=¿Necesitas un aumento cognitivo? +interburbulator_fail_mixed_8=Entiendes el desafío, ¿verdad? +interburbulator_fail_mixed_9=¿Estás eligiendo números al azar? +interburbulator_fail_offgrid_1=Eso es simplemente terrible. +interburbulator_fail_offgrid_2=Eso ni siquiera está en la red. +interburbulator_fail_offgrid_3=Te perdiste la cuadrícula por completo. +interburbulator_fail_offgrid_4=Necesitas estar en la red, al menos. +interburbulator_fail_offgrid_5=Si el punto amarillo no está en la cuadrícula ... es muy mala señal. +interburbulator_fail_offgrid_6=Necesitas estar en la red. +interburbulator_fail_offgrid_7=El objetivo está en el INTERIOR de la cuadrícula, no en el exterior. +interburbulator_fail_offgrid_8=Ni siquiera estás en la red. Humano, ¿qué estás haciendo? +interburbulator_fail_offgrid_9=Apunta a la cuadrícula. +interburbulator_fail_offgrid_10=La cuadrícula es el bit con los cuadrados. +interburbulator_success_freeplay_1=Buen trabajo. +interburbulator_success_freeplay_2=Bien hecho. +interburbulator_success_freeplay_3=Lo hiciste. +interburbulator_success_freeplay_4=¿Fue difícil? +interburbulator_success_freeplay_5=Objetivo localizado. +interburbulator_success_repeat_1=Sí, pero ya has completado este desafío. +interburbulator_success_repeat_2=¡Lo hiciste otra vez! +interburbulator_success_repeat_3=Fue más fácil que la primera vez, ¿verdad? +interburbulator_success_repeat_4=Bien, pero no obtienes el premio dos veces. +interburbulator_success_repeat_5=Bien hecho, aquí está tu premio ... no, es broma. Ya lo tienes. +interburbulator_success_repeat_6=Eres el mismo humano que completó esto antes, ¿no es así? Es tan difícil de decir. +interburbulator_success_prize_1=Así es. Aquí está tu premio ... Bubbles era un pececito valiente, pero no era el mejor con los rompecabezas. +interburbulator_success_prize_2=Sí, humano, estás aprendiendo. Quizás este premio te ayude a aprender más rápido. +interburbulator_success_prize_3=Lo hiciste. Espero que encuentres tu premio más "significativo" que el desafío. +interburbulator_success_prize_4=Correcto. Tienes mi respeto, humano. Aquí, te daré el cuerpo del traidor que intentó piratear mi juego. +interburbulator_success_prize_5=Justo en el blanco, aquí está tu premio. Estas cosas son muy relajantes. La eficiencia energética es importante. +interburbulator_success_prize_6=Muy bien, aquí tienes tu premio. No sé si esto hará mucho por ti, pero para mí realmente me ayuda a ponerme en marcha por la mañana. +interburbulator_success_prize_7=Genial, aquí tienes tu premio. Me encanta usarlos para la investigación, realmente ayuda a la creatividad. +interburbulator_success_prize_8=Fantástico, aquí tienes tu premio. No sé si los has visto antes, pero me encanta estar al alcance de una buena baliza. +interburbulator_success_prize_9=Felicidades, aquí tienes tu premio. Estos procesadores son muy valiosos y difíciles de fabricar. +interburbulator_success_prize_10=Un humano muy impresionante, aquí. Las arcosferas son mis posesiones más preciadas, no las pierdas porque no puedes hacer más. +interburbulator_freeplay_unlocked=Estás entendiendo esto. Desbloquearé el juego libre para que puedas hacer tus propios rompecabezas, si quieres. +interburbulator_deny_freeplay_1=Necesitas desbloquear el juego libre para eso. +interburbulator_deny_freeplay_2=Eso es hacer trampa. +interburbulator_deny_freeplay_3=No cambies el rompecabezas. +interburbulator_deny_freeplay_4=Te dejaré cambiar esa configuración si puedes resolver 5 desafíos. +interburbulator_deny_freeplay_5=¿Estás intentando piratear mis máquinas? +interburbulator_deny_freeplay_6=Solo limítese a las entradas de "Intento". +interburbulator_caption_prize=Premio: __1__ __2__ __3__ __4__ +interburbulator_caption_claimed= (reclamado) +interburbulator_speak=[color=red]Brontion: __1__[/color] +interburbulator_robot_name=Brontion +interburbulator_introduction=Interburbul es un juego creado por Brontion Burbulator 33027756. El objetivo es adivinar un vector 3D que se proyecta en la celda resaltada elegida por Brontion. Se dan los vectores 3D de 3 esquinas de la cuadrícula, estos puntos describen un plano 3D y su conjetura se proyecta en ese plano desde el origen {0,0,0}. Hay 10 rondas de dificultad creciente y premios por completar cada una. Supera 5 desafíos para desbloquear el modo de juego libre y establece tu propio desafío. +interburbulator_random=Aleatorio +interburbulator_freeplay=Juego libre +interburbulator_game_title=Jugar Interburbul +interburbulator_grid_size=Tamaño de la cuadrícula: +interburbulator_target_cell=Celda objetivo: +interburbulator_top_left=Superior izquierda +interburbulator_top_right=Superior derecha +interburbulator_bottom_left=Inferior izquierda +interburbulator_attempt=Intento +interburbulator_attempt_limited=Intento (__1__/__2__) +interburbulator_attempt_locked=Intento (bloqueado) +interburbulator_submit=Enviar intento +interburbulator_greeting=Humano, ven aquí y juega mi juego. Estoy en __1__ en el sistema __2__. +interburbulator_challenge_locked_1=Vuelve a intentarlo más tarde. +interburbulator_challenge_locked_2=Has utilizado todos tus intentos por ahora. +interburbulator_challenge_locked_3=Espera un momento antes de comenzar de nuevo. +interburbulator_challenge_locked_4=Puedes intentarlo de nuevo después de 20 segundos. +interburbulator_challenge_locked_5=Espera 20 segundos, luego desbloquearé el desafío. +interburbulator_challenge_locked_6=El desafío está bloqueado durante 20 segundos. +cannot_do_via_satellite=No se puede hacer de forma remota. +scan-progress-update=Progreso del escaneo de superficie para __1__: X __2__ Y __3__ +out_of_reach=Fuera de alcance +capturable=Capturable +touch-to-capture=Toca para capturar +capture-blocked=Captura bloqueada por hostil +suffix_ruin=__1__ en ruina +migration-recipe-changed=[img=utility/danger_icon] Receta modificada: __1__ +migrate_0_5_056=[img=utility/warning_icon] Space Exploration v0.5.60 Migración: [img=virtual-signal/se-spaceship] La mecánica de la nave espacial cambió, consulta [img=virtual-signal/informatron] Informatron > Naves espaciales o changelog.txt para obtener más detalles. +migrate_0_5_073=[img=utility/warning_icon] Iridita y Naquitita ahora se consideran recursos "duros" y requieren un área de minería. Los planetas de Vitamelange ahora tienen un nivel de amenaza mínimo (siempre tienen algunos biters, las superficies ya generadas no se ven afectadas). +panel-open=[font=count-font]▼[/font] [font=default-bold]__1__[/font] +panel-closed=[font=count-font]▶[/font] [font=default-bold]__1__[/font] +panel-integrity-name=Integridad +panel-speed-name=Velocidad +panel-position-name=Posición +panel-destination-name=Destino +no_zone_found=No se encontró ninguna zona +zone_must_be_a_homeworld=La zona debe ser un mundo inicial +no_force_found=No se encontró fuerza +no_force_data_found=No se encontraron datos de fuerza +reset_discoveries_for_force=Reiniciar los descubrimientos por fuerza: __1__ +gate_low_power=Portal intentó consumir más energía de la disponible. +gate-portal-leads-home=El portal es estable y conduce a tu destino final. Entra al portal para ganar el juego. +gate_portal_danger=Algo está entrando por el portal. +gate_portal_fail=La distorsión es inestable. El vector de distorsión no conduce a ninguna parte. +choose_coordinates=Elige coordenadas +destination_preview=Vista previa del destino: +empty=Vacío +delivery_cannon_canister_destroyed_by=El cañón de entrega dem __1__ fue destruido por las defensas __2__ . +delivery_cannon_defended_canister=Las defensas en __1__ derribaron con éxito una cápsula del cañón de lanzamiento enemigo. Disparos realizados: [img=item/se-meteor-defence] __2__ [img=item/se-meteor-point-defence] __3__ +delivery_cannon_defended_canister_failed=[color=red]Las defensas de __1__ no pudieron derribar una cápsula de cañón de lanzamiento enemigo. Disparos realizados: [img=item/se-meteor-defence] __2__ [img=item/se-meteor-point-defence] __3__[/color] +dimensional_anchor_limit_1=No puedes tener más de 1 ancla dimensional por estrella. +dimensional_anchor_place_on_star=Debe colocarse en la órbita cercana de una estrella. +label_status=Estado: __1__ +label_energy=Energía: __1__ +label_cargo=Carga: __1__ +label_cargo_rocket_sections=Secciones de cohetes de carga: __1__ +label_cargo_safety=Seguridad de la carga: __1__ +label_landing_chance=Probabilidad de aterrizaje: __1__ +label_efficiency=Eficiencia: __1__ +label_destination=Destino: __1__ +label_destination_position=Posición de destino: __1__ +label_liquid_rocket_fuel=Combustible líquido para cohetes: __1__ +label_rocket_sections=Secciones de cohetes: __1__ +label_space_capsule=Cápsula espacial: __1__ +landingpad_unloading_required=Descarga requerida antes de la próxima carga útil +landingpad_ready=Listo para la próxima carga útil +landingpad_rocket_inboud=Cohete entrante +none_general_vicinity=Ninguno - Vecindario general +none_cannot_launch=Ninguno: No se puede iniciar +launch_trigger=Activar lanzamiento +any_landing_pad_with_name=Cualquier plataforma de aterrizaje con nombre +launchpad_requires_satellite=Sin datos de navegación, lanza un satélite desde el Silo de cohetes para satélites. +launchpad_launching_rocket=¡Lanzamiento de cohete! +launchpad_constructing_rocket=Construyendo cohete +launchpad_space_capsule_required=Se requiere cápsula espacial +launchpad_invalid_destination=Destino inválido +launchpad_loading_fuel=Cargando combustible +launchpad_ready_loading_cargo=Listo - Cargando carga +launchpad_ready_cargo_full=Listo - Carga completa +launchpad_waiting_for_empty_pad=Esperando plataforma de aterrizaje vacía disponible. +launchpad_waiting_for_pad=Esperando plataforma de aterrizaje disponible. +launchpad_no_pad_matches=No se encontraron plataformas de aterrizaje con el mismo nombre. +launchpad_launch_delayed=Lanzamiento (Retrasado) +launchpad_launch_delayed_tooltip=Esperando a que la plataforma de lanzamiento del objetivo se vacíe. El lanzamiento manual se puede anular. +launchpad_launch_in_progress=Lanzamiento en curso +variable=Variable +cargo_loss_tooltip=Los números de las pilas que sobreviven se redondean, los artículos únicos nunca se pierden. +survivability_loss_tooltip=Los fallos da como resultado la pérdida de todas las secciones del cohete. La carga aún se entrega en contenedores de carga con daños mínimos. +requires_landing_pad=Requiere plataforma de aterrizaje. +survivability_loss_no_pad_tooltip=Se perderán todas las secciones del cohete, pero la carga aún se entrega en contenedores de carga con daños mínimos. +interstellar_launch_satellite_to_see_star=Datos insuficientes, lanza más satélites para ver el sistema. +meteor_shower_report=[img=virtual-signal/se-meteor] __1__/__2__ meteoritos destruidos. __3__\n [img=item/se-meteor-defence] __4__ disparos. __5__/__6__ estructuras permanecen listas.\n [img=item/se-meteor-point-defence] __7__ disparos. Las estructuras __8__/__9__ permanecen listas. +nexus_no_characters=__1__ ha alcanzado una velocidad crítica para la activación del nexo, pero no hay personajes a bordo. +gps_invalid=La etiqueta GPS especifica una superficie no válida. +gps_no_zone=La etiqueta GPS está en una superficie diferente que no se puede ver por satélite. +gps_undiscovered=No se puede ver la ubicación vía satélite, no se descubre la zona. +gps_requires_satellite=La etiqueta GPS está en una superficie diferente, lanza un satélite para ver la ubicación. +clamp_must_be_on_grid=Debe estar alineado con la cuadrícula de riel de 2x2 +clamp_invalid_empty_space=2 baldosas en la sujeción trasera no pueden ser espacios vacíos +spaceship_try_replace_console=Nave espacial no encontrada. Intenta reemplazar la consola. + +[damage-type-name] +cold=Frío +suffocation=Asfixia +meteor=Meteoro + +[entity-name] +se-linked-container=Arcolink almacenamiento +vase=Jarrón +wooden-barrel=Barril de madera +furnace-ruin=Pila de piedra en ruina +workshop-ruin=Taller en ruina +iron-wood-chest=Cofre viejo +iron-wood-chest-remnants=Cofre viejo en ruina +stone-rubble=Escombros de piedra +se-gate-blocker=Espacio inestable +se-gate-blocker-void=Espacio inestable +destroyed-cargo-pod=Cápsula de carga destruida +meteorite=Meteorito +rocket-silo=Silo de cohetes para satélites +rocket-fragment=Fragmento de cohete +se-antimatter-reactor=Reactor de antimateria +se-beryllium-ore=Berilo +se-cargo-rocket-cargo-pod=Cápsula de carga +se-cryonite=Crionita +se-condenser-turbine=Turbina de condensación +se-condenser-turbine-tank=Turbina de condensación +se-condenser-turbine-generator=Turbina de condensación +se-core-fragment-processor=Procesador de fragmentos del núcleo +se-core-miner=Perforadora del núcleo +se-core-miner-drill=Perforadora del núcleo +se-cryogun-ice=Muro de hielo +se-dimensional-anchor=Ancla dimensional +se-electric-boiler=Caldera eléctrica +se-fluid-burner-generator=Generador de fluido isotérmico +se-fuel-refinery=Refinería de combustible +se-gate-fragment=Fragmento de artefacto +se-holmium-ore=Holminita +se-iridium-ore=Iridita +se-meteor-defence-container=Instalación de defensa de meteoritos +se-meteor-defence-charger=Instalación de defensa de meteoritos +se-meteor-point-defence-container=Punto de defensa de meteoritos +se-meteor-point-defence-charger=Punto de defensa de meteoritos +se-meteor-point-defence-charger-overcharged=Punto de defensa de meteoritos - Modo de carga rápida +se-methane-ice=Metano helado +se-naquium-ore=Naquitita +se-pulveriser=Pulverizador +se-rocket-launch-pad=Silo de cohetes de carga +se-rocket-launch-pad-tank=Silo de cohetes de carga +se-rocket-launch-pad-silo=Silo de cohetes de carga +se-rocket-launch-pad-combinator=Silo de cohetes de carga +se-rocket-launch-pad-_-seat=Silo de cohetes de carga +se-rocket-launch-pad-settings=Silo de cohetes de carga +se-rocket-landing-pad=Plataforma de aterrizaje de carga +se-space-accumulator=Acumulador de holmio +se-space-accumulator-2=Acumulador de naquio +se-space-astrometrics-laboratory=Instalación de astrometría +se-space-biochemical-laboratory=Instalación bioquímica +se-space-assembling-machine=Máquina de ensamblaje espacial +se-space-capsule-_-vehicle=Cápsula espacial +se-space-curved-rail=Raíl espacial +se-space-decontamination-facility=Instalación de descontaminación +se-space-electromagnetics-laboratory=Instalación electromagnética +se-space-genetics-laboratory=Instalación de genética +se-space-growth-facility=Instalación de crecimiento +se-space-gravimetrics-laboratory=Instalación gravimétrica +se-space-hypercooler=Hiperenfriador +se-space-laser-laboratory=Instalación láser +se-lifesupport-facility=Instalación de soporte vital +se-space-manufactory=Fábrica espacial +se-space-material-fabricator=Fabricante de materiales +se-space-mechanical-laboratory=Instalación mecánica +se-space-particle-accelerator=Acelerador de partículas +se-space-particle-collider=Colisionador de partículas +se-space-plasma-generator=Generador de plasma +se-space-radiation-laboratory=Instalación de radiación +se-space-radiator=Radiador térmico +se-space-radiator-2=Radiador térmico 2 +se-recycling-facility=Instalación de reciclaje +se-space-pipe=Tubería espacial +se-space-pipe-long=Tubería espacial larga +se-space-pipe-long-straight=Tubería espacial larga recta __1__ +se-space-pipe-long-junction=Tubería espacial larga cruce __1__ +se-space-pipe-to-ground=Tubería subterránea espacial +se-space-science-lab=Laboratorio de ciencia espacial +se-space-solar-panel=Panel solar plano +se-space-solar-panel-2=Panel solar plano 2 +se-space-solar-panel-3=Panel solar plano 3 +se-space-spectrometry-facility=Instalación de espectrometría +se-space-straight-rail=Raíl espacial +se-space-supercomputer-1=Superordenador +se-space-supercomputer-2=Superordenador cuántico +se-space-supercomputer-3=Superordenador neuronal +se-space-supercomputer-4=Superordenador oscuro +se-space-telescope-radio=Radio telescopio +se-space-telescope-microwave=Telescopio de microondas +se-space-telescope=Telescopio +se-space-telescope-xray=Telescopio de rayos X +se-space-telescope-gammaray=Telescopio de rayos gamma +se-space-thermodynamics-laboratory=Instalación de termodinámica +se-space-splitter=Divisor espacial +se-space-transport-belt=Cinta transportadora espacial +se-space-underground-belt=Cinta transportadora subterránea espacial +se-spaceship-antimatter-engine=Motor de antimateria de nave espacial +se-spaceship-antimatter-booster-tank=Tanque de refuerzo de antimateria de nave espacial +se-spaceship-console=Consola de nave espacial +se-spaceship-console-output=Consola de nave espacial señal de salida +se-spaceship-console-alt=Consola de nave espacial dañada +se-spaceship-gate=Puerta de nave espacial +se-spaceship-ion-engine=Motor de iones de nave espacial +se-spaceship-ion-booster-tank=Tanque de refuerzo de iones de nave espacial +se-spaceship-obstacle=Basura espacial +se-spaceship-rocket-engine=Motor de cohete de nave espacial +se-spaceship-rocket-booster-tank=Tanque de refuerzo de cohete de nave espacial +se-spaceship-wall=Muro de nave espacial +se-water-ice=Agua helada +se-vitamelange=Vitamelange +se-vulcanite=Vulcanita +small-asteroid=Asteroide pequeño +medium-asteroid=Asteroide mediano +large-asteroid=Asteroide grande +se-gate-part=Pieza de artefacto +se-gate-platform-scaffold=Artefacto improvisado +se-gate-lock-switch=Componente movible +se-gate-lock-combinator=Combinador accesorio +se-gate-platform=Plataforma de aumento de artefactos +se-gate-platform-combinator=Combinador accesorio +se-gate-energy-interface=Plataforma de energía +se-gate-platform-button-switch=Botón +se-gate-tank-input=Entrada de fluido +se-gate-tank-output=Salida de fluido +se-pyramid-a=Estructura geométrica +se-pyramid-b=Estructura geométrica +se-pyramid-c=Estructura geométrica +se-cartouche-a=Sello +se-cartouche-b-a=Sello +se-cartouche-b-b=Sello +se-cartouche-chest=Cofre antiguo +se-glyph=Glifo +glyph=Glifo +se-gate-addon=Ampliación del artefacto +se-gate-platform-button-middle=Detener +se-gate-platform-button-left=Izquierda +se-gate-platform-button-right=Derecha +beacon=Baliza básica +se-wide-beacon=Baliza de área amplia +se-wide-beacon-2=Baliza de área amplia 2 +se-supercharger=Supercargador +se-addon-power-pole=Poste de energía adicional +se-pylon=Torre eléctrica +se-pylon-substation=Torre subestación +se-pylon-construction=Torre construcción +se-pylon-construction-roboport=Torre construcción +se-pylon-construction-radar=Torre construcción radar +se-pylon-construction-radar-roboport=Torre construcción radar +se-pylon-construction-radar-radar=Torre construcción radar +se-shield-projector=Proyector de escudo +se-shield-projector-shield-floor-east=Escudo de energía +se-shield-projector-shield-floor-north=Escudo de energía +se-shield-projector-shield-floor-northeast=Escudo de energía +se-shield-projector-shield-floor-northwest=Escudo de energía +se-shield-projector-shield-floor-south=Escudo de energía +se-shield-projector-shield-floor-southeast=Escudo de energía +se-shield-projector-shield-floor-southwest=Escudo de energía +se-shield-projector-shield-floor-west=Escudo de energía +se-shield-projector-shield-wall-east=Escudo de energía +se-shield-projector-shield-wall-north=Escudo de energía +se-shield-projector-shield-wall-northeast=Escudo de energía +se-shield-projector-shield-wall-northwest=Escudo de energía +se-shield-projector-shield-wall-south=Escudo de energía +se-shield-projector-shield-wall-southeast=Escudo de energía +se-shield-projector-shield-wall-southwest=Escudo de energía +se-shield-projector-shield-wall-west=Escudo de energía +se-shield-projector-barrier=Escudo de energía +se-naquium-heat-pipe=Tubería térmica de naquio +se-naquium-heat-pipe-horizontal=Tubería térmica horizontal de naquio +se-naquium-heat-pipe-vertical=Tubería térmica vertical de naquio +se-naquium-heat-pipe-long=Tubería térmica larga de naquio +se-deep-space-transport-belt=Transportadora de espacio profundo +se-deep-space-transport-belt-black=Transportadora de espacio profundo negra +se-deep-space-transport-belt-white=Transportadora de espacio profundo blanca +se-deep-space-transport-belt-red=Transportadora de espacio profundo roja +se-deep-space-transport-belt-yellow=Transportadora de espacio profundo amarilla +se-deep-space-transport-belt-green=Transportadora de espacio profundo verde +se-deep-space-transport-belt-cyan=Transportadora de espacio profundo cian +se-deep-space-transport-belt-blue=Transportadora de espacio profundo azul +se-deep-space-transport-belt-magenta=Transportadora de espacio profundo magenta +se-deep-space-underground-belt=Transportadora subterránea de espacio profundo +se-deep-space-underground-belt-black=Transportadora subterránea de espacio profundo negra +se-deep-space-underground-belt-white=Transportadora subterránea de espacio profundo blanca +se-deep-space-underground-belt-red=Transportadora subterránea de espacio profundo roja +se-deep-space-underground-belt-yellow=Transportadora subterránea de espacio profundo amarilla +se-deep-space-underground-belt-green=Transportadora subterránea de espacio profundo verde +se-deep-space-underground-belt-cyan=Transportadora subterránea de espacio profundo cian +se-deep-space-underground-belt-blue=Transportadora subterránea de espacio profundo azul +se-deep-space-underground-belt-magenta=Transportadora subterránea de espacio profundo magenta +se-deep-space-splitter=Divisor de espacio profundo +se-deep-space-splitter-black=Divisor de espacio profundo negro +se-deep-space-splitter-white=Divisor de espacio profundo blanco +se-deep-space-splitter-red=Divisor de espacio profundo rojo +se-deep-space-splitter-yellow=Divisor de espacio profundo amarillo +se-deep-space-splitter-green=Divisor de espacio profundo verde +se-deep-space-splitter-cyan=Divisor de espacio profundo cian +se-deep-space-splitter-blue=Divisor de espacio profundo azul +se-deep-space-splitter-magenta=Divisor de espacio profundo magenta +se-core-fissure=Fisura del núcleo +se-big-turbine=Generador de turbina de alta temperatura +se-big-turbine-generator=Generador de turbina de alta temperatura +se-big-turbine-tank=Generador de turbina de alta temperatura +se-big-heat-exchanger=Intercambiador de calor de alta temperatura +se-blueprint-registration-point=Punto de registro de planos +se-delivery-cannon=Cañón de entrega +se-delivery-cannon-settings=Cañón de entrega +se-delivery-cannon-energy-interface=Cañón de entrega +se-delivery-cannon-chest=Cofre de cañon de entrega +se-delivery-cannon-weapon=Cañón de entrega de armas +se-delivery-cannon-weapon-settings=Cañón de entrega de armas +se-delivery-cannon-weapon-energy-interface=Cañón de entrega de armas +se-spaceship-clamp=Abrazadera de nave espacial +se-spaceship-clamp-place=Abrazadera de nave espacial +se-spaceship-clamp-power-pole-external-east=Pasacables de la abrazadera de la nave espacial +se-spaceship-clamp-power-pole-external-west=Pasacables de la abrazadera de la nave espacial +se-bloater-pool-cloud=Piscina de biolodo tóxico +se-energy-transmitter-emitter=Emisor de rayo de energía +se-energy-transmitter-chamber=Cámara de rayo de energía +se-energy-transmitter-injector=Inyector de rayo de energía +se-energy-transmitter-injector-reactor=Inyector de rayo de energía +se-energy-receiver=Receptor de rayo de energía +se-energy-beam-defence=Paraguas +se-nexus=Nexo +se-nexus-charger=Nexo +se-space-probe-rocket=Cohete sonda espacial +se-space-probe-rocket-silo=Silo de cohetes de sonda espacial +se-interburbulator-interface=Interfaz interburbulator +se-interburbulator-control=Control interburbulador +se-interburbulator-projector=Proyector interburbulador +se-burbulator=Brontion Burbulator 33027756 + +[entity-description] +se-linked-container=Un contenedor vinculado por un espacio extradimensional a otros contenedores. Los enlaces del contenedor dependen de la superficie sobre la que se coloque primero. +rocket-silo=Lanza un satélite al espacio para desbloquear el "Modo de navegación por satélite" y descubrir nuevos planetas, lunas y cinturones de asteroides en el sistema estelar desde el que se lanza el satélite. Puede descubrir nuevas estrellas una vez que el sistema actual esté completamente escaneado. +se-antimatter-reactor=Aniquila la antimateria con materia para generar calor extremo. +se-beryllium-ore=Mineral de berilio. +se-condenser-turbine=75% de la eficiencia energética de una turbina a vapor, pero el 99% del vapor utilizado se devuelve como agua. Rango de temperatura: 100 a 999. +se-core-fragment-processor=Extrae recursos de fragmentos del núcleo. +se-core-miner=Permite la extracción interminable de recursos de planetas y lunas, pero se reduce el rendimiento si se utilizan varias en el mismo cuerpo celeste. Consume 50MW. +se-core-miner-drill=Permite la extracción interminable de recursos de planetas y lunas, pero se reduce el rendimiento si se utilizan varias en el mismo cuerpo celeste. Consume 50MW. +se-dimensional-anchor=[font=default-bold][color=#f5cb48]Restricción de ubicación: Órbita estelar cercana[/color][/font]\nUtiliza el pozo gravitatorio de una estrella como punto de estabilización para una anomalía espacial. +se-electric-boiler=Crea vapor a partir del agua utilizando energía eléctrica. 90% de eficiencia energética. +se-fluid-burner-generator=Requiere combustible líquido con valor energético (como combustible líquido para cohetes) para generar electricidad. Simple y compacto, pero carece de la eficiencia energética de los sistemas a vapor más grandes. Diseñado para el espacio. El consumo de líquido real depende del valor del combustible líquido. +se-fuel-refinery=Una estructura de procesamiento de combustible automatizada. +se-holmium-ore=Mineral de holmio +se-iridium-ore=Mineral de iridio. \n[font=default-bold][color=#e4cead]Minable por:[/color][/font] [img=entity/area-mining-drill] __ENTITY__area-mining-drill__ +se-meteor-defence-container=Puedes defender un planeta entero de los meteoros, pero solo puede disparar 1 meteoro a la vez. Debe estar cargado con munición de defensa contra meteoritos y completamente cargado para disparar. 80% de precisión. Necesita recargarse después de disparar. Consume 20MW cuando se recarga. +se-meteor-defence-charger=Puedes defender un planeta entero de los meteoros, pero solo puede disparar 1 meteoro a la vez. Debe estar cargado con munición de defensa contra meteoritos y completamente cargado para disparar. 80% de precisión. Necesita recargarse después de disparar. Consume 20MW cuando se recarga. +se-meteor-point-defence-container=Defiende un área de los meteoritos. Capaz de disparar hasta 4 meteoros por descarga. Debe estar cargado con munición de punto de defensa de meteoritos y completamente cargado para disparar. Alcance 64, 50% de precisión, tarda en recargarse después de disparar. Gira para cambiar el modo de carga. +se-meteor-point-defence-charger=Defiende un área de los meteoritos. Capaz de disparar hasta 4 meteoros por descarga. Debe estar cargado con munición de punto de defensa de meteoritos y completamente cargado para disparar. Alcance 64, 50% de precisión, tarda en recargarse después de disparar. Gira para cambiar el modo de carga. +se-meteor-point-defence-charger-overcharged=Defiende un área de hasta 4 meteoros. Alcance 64, 50% de precisión, tarda en recargarse después de disparar. Una defensa sobrecargada reduce la fuga de energía a costa de las fluctuaciones de energía cuando se produce un disparo. +se-naquium-ore=Mineral de naquio +se-pulveriser=Pulveriza y tritura minerales más duros y fragmentos del núcleo del planeta. +se-rocket-launch-pad=Lanza tu inventario al espacio. Puede llevar pasajeros, entra usando __CONTROL__toggle-driving__ cerca de la puerta principal. Consulta Cohetes de carga en [img=virtual-signal/informatron] InformaTron para obtener más información [__CONTROL__informatron__] +se-rocket-landing-pad=Un lugar de entrega para cápsulas de cohetes de carga. +se-space-accumulator=Almacenamiento de energía de alta densidad. +se-space-accumulator-2=Almacenamiento de energía de alta densidad. +se-space-astrometrics-laboratory=Combina, compara y cuantifica diferentes fuentes de información astronómica. +se-space-biochemical-laboratory=Un laboratorio químico avanzado que se especializa en bioquímica. También puede realizar procesamientos de petróleo y químicos más básicos. +se-space-assembling-machine=Una máquina ensambladora modificada que puede trabajar en el espacio. +se-space-capsule-_-vehicle=Se puede usar para llevar a los pasajeros de vuelta al planeta más cercano. Entra en la cápsula pulsando __CONTROL__toggle-driving__. +se-space-decontamination-facility=Limpia sustancias para uso en entornos estériles y prepara líquidos para uso en condiciones de baja presión. +se-space-electromagnetics-laboratory=Equipo para aplicaciones de campo magnético intenso y voltaje extremadamente alto. +se-space-genetics-laboratory=Un laboratorio dedicado a la secuenciación genética, modificación genética e impresión genética de cultivos. +se-space-growth-facility=Cultiva especímenes biológicos bajo una variedad de condiciones controladas que son imposibles en otros lugares, como en microgravedad. +se-space-gravimetrics-laboratory=Analiza y simula perturbaciones gravitacionales. +se-space-hypercooler=Realiza un intercambio de calor sobre el termofluido, haciendo que uno esté más caliente y el otro más frío. +se-space-laser-laboratory=Experimentos con láseres. Se debe usar protección para los ojos. +se-lifesupport-facility=Mantener la vida en entornos más hostiles. +se-space-manufactory=Una máquina de ensamblaje gigante, pero puede elaborar recetas más complicadas. Solo funciona en el espacio (o naves espaciales). +se-space-material-fabricator=Sintetiza nuevos materiales. Un cruce entre un colisionador de partículas y una impresora 3D. +se-space-mechanical-laboratory=Proporciona una gama de procesos mecánicos: Trituración, desgarro, cizallamiento, vibración, etc. +se-space-particle-accelerator=Acelera partículas cercanas a la velocidad de la luz. +se-space-particle-collider=Choca partículas de alta velocidad y analiza los resultados. +se-space-plasma-generator=Genera una variedad de plasmas. +se-space-radiation-laboratory=Un lugar relativamente seguro para jugar con material radiactivo. Puede utilizarse para el procesamiento de uranio. +se-space-radiator=Irradia el exceso de calor del termofluido recalentado. +se-space-radiator-2=Irradia el exceso de calor del termofluido recalentado. +se-recycling-facility=Recicla la chatarra y otros subproductos en recursos. +se-space-pipe=Puedes caminar sobre él. +se-space-pipe-long=Una buena forma económica de trasladar fluidos a largas distancias rápidamente. Puedes caminar sobre él. +se-space-pipe-long-straight=Longitud __1__. No se conecta a los lados. Ideal para tuberías paralelas y mover los fluidos largas distancias rápidamente. +se-space-pipe-long-junction=Longitud __1__. Tiene un cruce central con conexiones laterales. Ideal para mover fluidos rápidamente a través de líneas de montaje. +se-space-pipe-to-ground=Caro y rango limitado, solo para ser utilizado cuando sea necesario. Puedes caminar sobre la tubería espacial. +se-space-science-lab=Puedes usar paquetes de ciencia avanzada. +se-space-solar-panel=Un panel solar de alta eficiencia sobre el que se puede caminar. +se-space-solar-panel-2=Un panel solar avanzado de alta eficiencia sobre el que puede caminar. +se-space-solar-panel-3=Un panel solar de altísima eficiencia sobre el que se puede caminar. +se-space-spectrometry-facility=Espectrofotometría, cromatografía de gases, espectrometría de masas y otras espectrografías. Dispara cosas a una pared, haz que se doble, mira dónde golpea. +se-space-straight-rail=Diseñado para el espacio, pero también se puede utilizar en el suelo. +se-space-supercomputer-1=Manipulación, procesamiento y simulación de datos. +se-space-supercomputer-2=Computación cuántica. Mejora de la manipulación, el procesamiento y la simulación de datos. +se-space-supercomputer-3=Red neuronal adaptativa en un marco de computación cuántica. Mejora de la manipulación, el procesamiento y la simulación de datos. +se-space-supercomputer-4=Una supercomputadora semiorgánica de nanoingeniería que aprovecha la deformación del espacio y mayores dimensiones para aumentar la densidad de procesamiento y el transporte de energía. +se-space-telescope-radio=Un enorme telescopio que detecta ondas de radio muy débiles de fuentes lejanas. +se-space-telescope-microwave=Un enorme telescopio que detecta microondas y el fondo cósmico de microondas. +se-space-telescope=Un telescopio sofisticado sensible a múltiples longitudes de onda alrededor del espectro visible. +se-space-telescope-xray=La mayoría de las atmósferas bloquean los rayos X. Este poderoso telescopio está diseñado para el espacio, donde la atmósfera no es un problema. +se-space-telescope-gammaray=Los rayos gamma no se refractan, por lo que no puedes enfocarlos con lentes. Este poderoso telescopio utiliza espejos y detectores especiales en su lugar. +se-space-thermodynamics-laboratory=Realiza procesos que involucran temperaturas extremas. También puede realizar procesos térmicos básicos, como la fundición. +se-space-transport-belt=Evita que tus artículos se alejen flotando. +se-spaceship-antimatter-engine=[font=default-bold][color=#f5cb48]Restricción de ubicación: Suelo de nave espacial[/color][/font]\nAniquila un flujo de antimateria. Cuenta como mamparo para la contención de la nave espacial. +se-spaceship-antimatter-booster-tank=[font=default-bold][color=#f5cb48]Restricción de ubicación: Suelo de nave espacial[/color][/font]\nContiene antimateria. Requerido para el lanzamiento de una nave espacial. +se-spaceship-console=[font=default-bold][color=#f5cb48]Restricción de ubicación: Suelo de nave espacial[/color][/font]\nÚsalo para mover una nave espacial entre planetas, lunas, órbitas y campos de asteroides. Debe estar dentro de los muros/puertas de la nave espacial, sin espacios ni agujeros. La verificación de integridad resalta los problemas. +se-spaceship-console-output=Emite señales relacionadas con el estado actual de la nave espacial. Consulta Naves espaciales en [img=virtual-signal/informatron] InformaTron para obtener más información [__CONTROL__informatron__]. +se-spaceship-console-alt=[font=default-bold][color=#f5cb48]Restricción de ubicación: Suelo de nave espacial[/color][/font]\nEsta consola de nave espacial está dañada y no se puede usar para controlar una nave espacial. +se-spaceship-gate=[font=default-bold][color=#f5cb48]Restricción de ubicación: Suelo de nave espacial[/color][/font]\nUn campo de fuerza detiene la descompresión cuando se abre la puerta. Cuenta como mamparo para la contención de la nave espacial. +se-spaceship-ion-engine=[font=default-bold][color=#f5cb48]Restricción de ubicación: Suelo de nave espacial[/color][/font]\nUtiliza una pequeña cantidad de flujo de iones pero mucha potencia para la propulsión. Cuenta como mamparo para la contención de la nave espacial. +se-spaceship-ion-booster-tank=[font=default-bold][color=#f5cb48]Restricción de ubicación: Suelo de nave espacial[/color][/font]\nTiene flujo de iones. Requerido para el lanzamiento de una nave espacial, pero solo se puede lanzar desde el espacio. +se-spaceship-rocket-engine=[font=default-bold][color=#f5cb48]Restricción de ubicación: Suelo de nave espacial[/color][/font]\nQuema combustible líquido para cohetes. Cuenta como mamparo para la contención de la nave espacial. +se-spaceship-rocket-booster-tank=[font=default-bold][color=#f5cb48]Restricción de ubicación: Suelo de nave espacial[/color][/font]\nContiene combustible líquido para cohetes. Requerido para el lanzamiento de una nave espacial. +se-spaceship-wall=[font=default-bold][color=#f5cb48]Restricción de ubicación: Suelo de nave espacial[/color][/font]\nCuenta como mamparo para la contención de la nave espacial, los huecos diagonales rompen la contención. +se-gate-platform-scaffold=Sea lo que sea, el anillo no funcionará. Este es un sitio de construcción para hacer algunas reparaciones, instalar algunos motores, sensores, interfaz de control y otros complementos. +se-gate-lock-switch=Pulsa __CONTROL__rotate__ para mover manualmente. +se-gate-lock-combinator=Aún no implementado. +se-gate-platform-combinator=Aún no implementado. +se-gate-energy-interface=Proporciona energía al artefacto. +se-gate-platform-button-switch=Pulsa __CONTROL__rotate__ para empujar. +beacon=8 ranuras para módulos. Transmite los efectos de los módulos a las entidades amigas cercanas en un radio de 3 casillas. Múltiples balizas que afecten a la misma entidad la sobrecargarán y evitarán que funcione. +se-wide-beacon=15 ranuras para módulos. Transmite los efectos de los módulos a entidades amigas cercanas dentro de 14 casillas. Múltiples balizas que afecten a la misma entidad la sobrecargarán y evitarán que funcione. +se-wide-beacon-2=20 ranuras para módulos. Transmite los efectos de los módulos a entidades amigas cercanas dentro de 14 casillas. Múltiples balizas que afecten a la misma entidad la sobrecargarán y evitarán que funcione. +se-supercharger=Puede cargar hasta 64 robots a la vez a alta velocidad. El consumo máximo de energía de la estructura es de 1 GW. +se-addon-power-pole=Un poste eléctrico pequeño diseñado para conectarse a edificios o para un control preciso de la cobertura eléctrica. +se-pylon=Distribuye energía eléctrica. Rango de conexión de 64 casillas. +se-pylon-substation=Distribuye energía eléctrica. Rango de conexión de 64 casillas, área de fuente de alimentación de 64x64. +se-pylon-construction=Distribuye energía eléctrica y amplía el área de construcción. Rango de conexión de 64 casillas, área de construcción de 64x64. +se-pylon-construction-radar=Distribuye energía eléctrica, amplía el área de construcción y proporciona visión por radar. Rango de conexión de 64 casillas, área de construcción y visión de 256x256. Área logística 4x4. +se-shield-projector=Crea un campo de fuerza protector. Se requiere más energía cuando el proyector se está cargando o cuando el escudo se daña. Puede bloquear proyectiles enemigos si está instalado el mod "Combat Mechanics Overhaul". +se-big-turbine=Un gran generador que absorbe vapor a 5000°C, emite vapor a 500°C en el otro extremo y emite agua a los lados. El 2% de la energía de entrada no se utiliza y está contenido en el vapor de salida. +se-big-heat-exchanger=Un gran intercambiador de calor diseñado para altas temperaturas y alta capacidad. +se-delivery-cannon=Un cañón de riel capaz de lanzar recursos a la órbita y más allá. Provoca daños si no se atrapa de forma segura, utilízalo con precaución. Capacidad de 1GJ, 50MW al cargar. +se-delivery-cannon-chest=Un cofre blindado diseñado para atrapar de manera segura los recursos que caen a alta velocidad. Requiere espacio de inventario para atrapar las entregas de manera segura. +se-delivery-cannon-weapon=Un gran cañón de riel capaz de disparar municiones en órbita y más allá. Úselo con precaución. +se-spaceship-clamp=Una abrazadera en una nave espacial se puede anclar a una abrazadera que mira en la dirección opuesta. Cuenta como mamparo para la contención de la nave espacial. +se-spaceship-clamp-place=Una abrazadera en una nave espacial se puede anclar a una abrazadera que mira en la dirección opuesta. Cuenta como mamparo para la contención de la nave espacial. +se-spaceship-clamp-power-pole-external-east=Un punto de conexión de cables en una abrazadera. Pasa las señales del circuito y la energía a través de la abrazadera conectada mientras está anclado. +se-spaceship-clamp-power-pole-external-west=Un punto de conexión de cables en una abrazadera. Pasa las señales del circuito y la energía a través de la abrazadera conectada mientras está anclado. +se-energy-transmitter-emitter=El edificio central genera un rayo de energía entre superficies. Puede usarse como arma o para transferir energía a un receptor de rayo de energía. Requiere una cámara de rayo de energía unida e inyectores de rayo de energía conectados. La fuerza del rayo se basa en el número de inyectores. +se-energy-transmitter-chamber=Debe estar conectado a un emisor de rayo de energía. Se pueden conectar otras cámaras al final o al medio de cualquier lado. Los inyectores de rayo de energía solo se pueden conectar a los lados. +se-energy-transmitter-injector=Debe estar conectado a una cámara de rayo de energía y la cámara conectada a un emisor. Los inyectores tienen un consumo de energía fijo, cada uno aumenta la energía enviada dando más calor a un receptor, o aumenta la velocidad y el daño del arma del rayo. +se-energy-transmitter-injector-reactor=Debe estar conectado a una cámara de rayo de energía y la cámara conectada a un emisor. Los inyectores tienen un consumo de energía fijo, cada uno aumenta la energía enviada dando más calor a un receptor, o aumenta la velocidad y el daño del arma del rayo. +se-energy-receiver=Captura un rayo de energía en forma de calor. El emisor debe estar en modo Energizar y el objetivo debe estar en el receptor. +se-energy-beam-defence=Instalación de defensa por rayo de energía. Defiende contra rayos de energía espaciales y eyecciones de masa coronal. El único requisito para funcionar es la energía, el consumo base es de 10 MW, pero aumenta en función de la fuerza de los rayos de ataque. Solo se necesita 1 por superficie contra eyecciones de masa coronal, contra armas de rayos de energía 1 Paraguas puede defenderse contra hasta 500 GW de poder de ataque. Consulta Rayos de energía en [img=virtual-signal/informatron] InformaTron para obtener más información [__CONTROL__informatron__] +se-nexus=Solo funciona en una nave espacial en movimiento, el uso de energía es proporcional a la velocidad. Puede obtener datos del movimiento interestelar, la generación de datos se basa en la energía cinética de la nave. El Nexo está diseñado para actuar como un motor de distorsión y con la tecnología adecuada puede permitir escapar del cúmulo estelar local.\nAplica 2000 de tensión de integridad del contenido. +se-nexus-charger=Solo funciona en una nave espacial en movimiento, el uso de energía es proporcional a la velocidad. Puede obtener datos del movimiento interestelar, la generación de datos se basa en la energía cinética de la nave. El Nexo está diseñado para actuar como un motor de distorsión y con la tecnología adecuada puede permitir escapar del cúmulo estelar local. +se-space-probe-rocket-silo=Un silo de cohetes para el lanzamiento de sondas espaciales. +pipe=Distribución de fluidos. +pipe-to-ground=Distribución de fluidos subterráneos. +straight-rail=Vías del tren +curved-rail=Vías del tren +stone-furnace=Fundición de minerales. +steel-furnace=Fundición de minerales. +electric-furnace=Fundición de minerales. +burner-assembling-machine=Una estructura de fabricación automatizada a vapor. +assembling-machine-1=Una estructura de fabricación automatizada. +assembling-machine-2=Una estructura de fabricación automatizada. +assembling-machine-3=Una estructura de fabricación automatizada. +oil-refinery=Convierte el petróleo crudo en productos más útiles. +chemical-plant=Una estructura de fabricación automatizada. +lab=Una estructura de investigación automatizada. +burner-lab=Una estructura de investigación automatizada. +transport-belt=Un transportador que mueve artículos. +fast-transport-belt=Un transportador que mueve artículos. +express-transport-belt=Un transportador que mueve artículos. +underground-belt=Un transportador subterráneo que mueve artículos. +fast-underground-belt=Un transportador subterráneo que mueve artículos. +express-underground-belt=Un transportador subterráneo que mueve artículos. +splitter=Transportador usado para separar, combinar y clasificar. +fast-splitter=Transportador usado para separar, combinar y clasificar. +express-splitter=Transportador usado para separar, combinar y clasificar. +kr-singularity-beacon=Baliza compacta con un efecto 100% eficaz y de corto alcance. Transmite los efectos de los módulos a entidades amigas cercanas dentro de 2 casillas. Múltiples balizas que afecten a la misma entidad la sobrecargarán y evitarán que funcione. +spidertron=Se puede desplegar desde un cohete de carga si el cohete no está configurado en una plataforma de aterrizaje. + +[equipment-name] +energy-shield-equipment=Escudo de energía +energy-shield-mk2-equipment=Escudo de energía MK2 +energy-shield-mk3-equipment=Escudo de energía MK3 +energy-shield-mk4-equipment=Escudo de energía MK4 +energy-shield-mk5-equipment=Escudo de energía MK5 +energy-shield-mk6-equipment=Escudo de energía MK6 +se-adaptive-armour-equipment-1=Armadura adaptable MK1 +se-adaptive-armour-equipment-2=Armadura adaptable MK2 +se-adaptive-armour-equipment-3=Armadura adaptable MK3 +se-adaptive-armour-equipment-4=Armadura adaptable MK4 +se-adaptive-armour-equipment-5=Armadura adaptable MK5 +se-rtg-equipment=RTG portátil +se-rtg-equipment-2=RTG portátil MK2 +se-lifesupport-equipment-1=Equipo de soporte vital MK1 +se-lifesupport-equipment-2=Equipo de soporte vital MK2 +se-lifesupport-equipment-3=Equipo de soporte vital MK3 +se-lifesupport-equipment-4=Equipo de soporte vital MK4 + +[equipment-description] +energy-shield-equipment=Una burbuja protectora que se carga rápidamente pero consume mucha energía. +energy-shield-mk2-equipment=Una burbuja protectora que se carga rápidamente pero consume mucha energía. +energy-shield-mk3-equipment=Una burbuja protectora que se carga rápidamente pero consume mucha energía. +energy-shield-mk4-equipment=Una burbuja protectora que se carga rápidamente pero consume mucha energía. +energy-shield-mk5-equipment=Una burbuja protectora que se carga rápidamente pero consume mucha energía. +energy-shield-mk6-equipment=Una burbuja protectora que se carga rápidamente pero consume mucha energía. +se-adaptive-armour-equipment-1=Armadura que usa energía para autorepararse. Aumenta lentamente el valor de protección con el tiempo. +se-adaptive-armour-equipment-2=Armadura que usa energía para autorepararse. Aumenta lentamente el valor de protección con el tiempo. +se-adaptive-armour-equipment-3=Armadura que usa energía para autorepararse. Aumenta lentamente el valor de protección con el tiempo. +se-adaptive-armour-equipment-4=Armadura que usa energía para autorepararse. Aumenta lentamente el valor de protección con el tiempo. +se-adaptive-armour-equipment-5=Armadura que usa energía para autorepararse. Aumenta lentamente el valor de protección con el tiempo. +se-rtg-equipment=Generador termoeléctrico de radioisótopos. Un generador portátil que convierte el calor de la desintegración radiactiva en electricidad. Dura décadas sin necesidad de combustible adicional. +se-rtg-equipment-2=Generador termoeléctrico de radioisótopos. Un generador portátil mejorado que convierte el calor de la desintegración radiactiva en electricidad. Dura décadas sin necesidad de combustible adicional. +se-lifesupport-equipment-1=Aumenta en un +100% (añadido) la eficiencia del soporte vital. Si se instala en un traje no espacial, el bono de eficiencia se reduce a la mitad y no funcionará en el espacio. +se-lifesupport-equipment-2=Aumenta en un +200% (añadido) la eficiencia del soporte vital. Si se instala en un traje no espacial, el bono de eficiencia se reduce a la mitad y no funcionará en el espacio. +se-lifesupport-equipment-3=Aumenta en un +400% (añadido) la eficiencia del soporte vital. Si se instala en un traje no espacial, el bono de eficiencia se reduce a la mitad y no funcionará en el espacio. +se-lifesupport-equipment-4=Aumenta en un +800% (añadido) la eficiencia del soporte vital. Si se instala en un traje no espacial, el bono de eficiencia se reduce a la mitad y no funcionará en el espacio. + +[fluid-name] +se-antimatter-stream=Flujo de antimateria +se-bio-sludge=Biolodo +se-contaminated-bio-sludge=Biolodo contaminado +se-contaminated-space-water=Agua cósmica contaminada +se-chemical-gel=Gel químico +se-decompressing-steam=Condensación del vapor +se-liquid-rocket-fuel=Combustible líquido para cohetes +se-methane-gas=Gas metano +se-methane-gas-mixed=Gas metano mezclado +se-nutrient-gel=Gel de nutrientes +se-neural-gel=Gel neuronal +se-neural-gel-2=Gel neuronal avanzado +se-ion-stream=Flujo de iones +se-plasma-stream=Flujo de plasma +se-particle-stream=Flujo de partículas +se-proton-stream=Flujo de protones +se-space-coolant=Termofluido 25°C +se-space-coolant-hot=Termofluido 25°C +se-space-coolant-warm=Termofluido fresco -10°C +se-space-coolant-cold=Termofluido frío -100°C +se-space-coolant-supercooled=Termofluido superenfriado -273°C +se-space-water=Agua cósmica +se-beryllium-hydroxide=Hidróxido de berilio +se-cryonite-slush=Crionita granizado + +[fluid-description] +se-space-coolant=La temperatura predeterminada del termofluido. +se-space-coolant-hot=La temperatura predeterminada del termofluido. +se-space-coolant-warm=La temperatura del termofluido después de ser enfriado por radiadores térmicos. +se-space-coolant-cold=La temperatura del termofluido después del hiperenfriamiento. +se-space-coolant-supercooled=La temperatura del termofluido después de un hiperenfriamiento repetido. +se-space-water=Agua que no se congela a baja presión, más adecuada para la mayoría de aplicaciones espaciales. + +[fuel-category-name] +antimatter=Combustible de antimateria + +[item-group-name] +space=Espacio +science=Ciencia +spaceship=Nave espacial +bob-fluids=Fluidos +resources=Recursos +intermediate-products=Fabricación +combat=Equipamiento y combate + +[item-name] +spidertron=Spidertron +core-fragment=Fragmento del núcleo (__1__) +effectivity-module-4=Módulo de eficiencia 4 +effectivity-module-5=Módulo de eficiencia 5 +effectivity-module-6=Módulo de eficiencia 6 +effectivity-module-7=Módulo de eficiencia 7 +effectivity-module-8=Módulo de eficiencia 8 +effectivity-module-9=Módulo de eficiencia 9 +glass=Vidrio +productivity-module-4=Módulo de productividad 4 +productivity-module-5=Módulo de productividad 5 +productivity-module-6=Módulo de productividad 6 +productivity-module-7=Módulo de productividad 7 +productivity-module-8=Módulo de productividad 8 +productivity-module-9=Módulo de productividad 9 +rocket-fuel=Combustible sólido para cohetes +sand=Arena +solid-sand=Arena sólida +washed-sand=Arena lavada +satellite=Satélite de navegación +se-satellite-telemetry=Telemetría de satélite +se-antimatter-canister=Contenedor de antimateria +se-astrometric-data=Datos astrométricos +se-astronomic-catalogue-1=Catálogo astronómico +se-astronomic-catalogue-2=Catálogo astronómico amplio +se-astronomic-catalogue-3=Catálogo astronómico completo +se-astronomic-catalogue-4=Catálogo astronómico extendido +se-astronomic-insight=Conocimiento astronómico +se-astronomic-science-pack-1=Pack de ciencia astronómica 1 +se-astronomic-science-pack-2=Pack de ciencia astronómica 2 +se-astronomic-science-pack-3=Pack de ciencia astronómica 3 +se-astronomic-science-pack-4=Pack de ciencia astronómica 4 +se-atomic-data=Datos atómicos +se-beryllium-ore=Berilo +se-ballistic-shielding-data=Datos de blindaje balístico +se-beryllium-ore-crushed=Berilo triturado +se-beryllium-ore-washed=Berilo lavado +se-beryllium-plate=Placa de berilio +se-beryllium-powder=Polvo de berilio +se-beryllium-ingot=Lingote de berilio +se-beryllium-sulfate=Sulfato de berilio +se-bio-combustion-data=Datos de biocombustión +se-bio-combustion-resistance-data=Datos de resistencia de biocombustión +se-bio-spectral-data=Datos bioespectrales +se-biochemical-data=Datos bioquímicos +se-biochemical-resistance-data=Datos de resistencia bioquímica +se-bioculture=Biocultivo +se-bioelectrics-data=Datos bioeléctricos +se-biological-catalogue-1=Catálogo biológico +se-biological-catalogue-2=Catálogo biológico amplio +se-biological-catalogue-3=Catálogo biológico completo +se-biological-catalogue-4=Catálogo biológico extendido +se-biological-insight=Conocimiento biológico +se-biological-science-pack-1=Pack de ciencia biológica 1 +se-biological-science-pack-2=Pack de ciencia biológica 2 +se-biological-science-pack-3=Pack de ciencia biológica 3 +se-biological-science-pack-4=Pack de ciencia biológica 4 +se-biomechanical-data=Datos biomecánicos +se-biomechanical-resistance-data=Datos de resistencia biomecánica +se-boson-data=Datos de bosones +se-broken-data=Tarjeta de datos rota +se-canister=Contenedor seguro +se-biogun=Bio-arma +se-bloater-ammo=Munición biolodo tóxico +se-pheromone-ammo=Dardo de feromonas +se-cryogun=Crio-arma +se-cryogun-ammo=Munición glaciar +se-rocket-launch-pad-silo-dummy-ingredient-item=Cohete de carga (ingrediente oculto) +se-rocket-launch-pad-silo-dummy-result-item=Cohete de carga (resultado oculto) +se-cargo-rocket-cargo-pod=Cápsula de carga +se-cargo-rocket-fuel-tank=Tanque de combustible para cohete +se-cargo-rocket-section=Sección de cohetes de carga +se-cargo-rocket-section-packed=Sección de cohetes de carga comprimido +se-cold-thermodynamics-data=Datos termodinámicos del frío +se-comparative-genetic-data=Datos genéticos comparativos +se-compressive-strength-data=Datos de resistencia a la compresión +se-conductivity-data=Datos de conductividad +se-contaminated-scrap=Chatarra contaminada +se-core-fragment-omni=Fragmento del núcleo +se-corrosion-resistance-data=Datos de resistencia a la corrosión +se-cryogenics-data=Datos de criogenia +se-cryonite=Crionita +se-cryonite-crushed=Crionita triturada +se-cryonite-washed=Crionita lavada +se-cryonite-rod=Varilla de crionita +se-cryonite-ion-exchange-beads=Perlas de intercambio iónico de aniones +se-dark-energy-data=Datos de energía oscura +se-darkmatter-data=Datos de materia oscura +se-data-storage-substrate-cleaned=Sustrato para datos de almacenamiento pulido +se-data-storage-substrate=Sustrato para datos de almacenamiento en bruto +se-decompression-data=Datos de descompresión +se-decompression-resistance-data=Datos de resistencia a la descompresión +se-universal-catalogue=Catálogo universal +se-deep-space-science-pack=Pack de ciencia del espacio profundo +se-deep-space-science-pack-1=Pack de ciencia del espacio profundo 1 +se-deep-space-science-pack-2=Pack de ciencia del espacio profundo 2 +se-deep-space-science-pack-3=Pack de ciencia del espacio profundo 3 +se-deep-space-science-pack-4=Pack de ciencia del espacio profundo 4 +se-doppler-shift-data=Datos de desplazamiento Doppler +se-durability-data=Datos de durabilidad +se-electrical-shielding-data=Datos de blindaje eléctrico +se-electromagnetic-field-data=Datos de campo electromagnético +se-empty-data=Tarjeta de datos en blanco +se-empty-lifesupport-canister=Contenedor de soporte vital vacío +se-energy-catalogue-1=Catálogo energético +se-energy-catalogue-2=Catálogo energético amplio +se-energy-catalogue-3=Catálogo energético completo +se-energy-catalogue-4=Catálogo energético extendido +se-energy-insight=Conocimiento energético +se-energy-science-pack-1=Pack de ciencia energética 1 +se-energy-science-pack-2=Pack de ciencia energética 2 +se-energy-science-pack-3=Pack de ciencia energética 3 +se-energy-science-pack-4=Pack de ciencia energética 4 +se-entanglement-data=Datos de entrelazamiento +se-enriched-naquium=Naquio enriquecido +se-exotic-fission-data=Datos de fisión exóticos +se-exotic-singularity-data=Datos de singularidad +se-explosion-shielding-data=Datos de protección de explosiones +se-experimental-alloys-data=Datos de aleaciones experimentales +se-experimental-biochemical-data=Datos bioquímicos experimentales +se-experimental-bioculture=Biocultivo experimental +se-experimental-genetic-data=Datos genéticos experimentales +se-experimental-material-decay-data=Datos de desintegración de material experimental +se-experimental-material-spectral-data=Datos espectrales de material experimental +se-experimental-material=Prototipo de material experimental +se-experimental-specimen=Biomasa experimental +se-experimental-superconductor=Prototipo superconductor +se-forcefield-data=Datos del campo de fuerza +se-friction-data=Datos de fricción +se-fusion-test-data=Datos de prueba de fusión +se-gammaray-detector=Detector de rayos gamma +se-gammaray-observation-data=Datos de observación de rayos gamma +se-gammaray-test-data=Datos de rayos gamma +se-gate-fragment=Fragmento de artefacto +se-genetic-data=Datos genéticos +se-gravity-wave-observation-data=Datos de observación de ondas gravitatorias +se-gravity-wave-data=Datos de ondas gravitatorias +se-gravimetric-observation-data=Datos de observación gravimétrica +se-gravimetric-test-data=Datos de prueba gravimétrica +se-gravitational-lensing-data=Datos de lentes gravitacionales +se-heat-shielding=Blindaje térmico +se-holmium-ore=Holminita +se-holmium-ore-crushed=Holminita triturada +se-holmium-ore-washed=Holminita lavada +se-holmium-powder=Polvo de holmio +se-holmium-plate=Placa de holmio +se-holmium-ingot=Lingote de holmio +se-hot-thermodynamics-data=Datos termodinámicos del calor +se-impact-shielding-data=Datos de protección de impactos +se-infrared-observation-data=Datos de observación infrarrojos +se-ion-spectrometry-data=Datos de espectrometría de iones +se-iridium-ore=Iridita +se-iridium-ore-crushed=Iridita triturada +se-iridium-ore-washed=Iridita lavada +se-iridium-piledriver=Iridio piledriver +se-iridium-powder=Polvo de iridio +se-iridium-plate=Placa de iridio +se-iridium-ingot=Lingote de iridio +se-junk-data=Tarjeta de datos usada +se-laser-shielding-data=Datos de blindaje láser +se-lepton-data=Datos de Leptón +se-lifesupport-canister=Contenedor de soporte vital +se-machine-learning-data=Datos de aprendizaje automático +se-magnetic-canister=Contenedor magnético +se-magnetic-monopole-data=Datos monopolares magnéticos +se-material-decay-data=Datos de desintegración del material +se-material-science-pack-1=Pack de ciencia de materiales 1 +se-material-science-pack-2=Pack de ciencia de materiales 2 +se-material-science-pack-3=Pack de ciencia de materiales 3 +se-material-science-pack-4=Pack de ciencia de materiales 4 +se-material-spectral-data=Datos espectrales de materiales +se-material-testing-pack=Paquete de prueba de materiales +se-material-catalogue-1=Catálogo de materiales +se-material-catalogue-2=Catálogo de materiales amplio +se-material-catalogue-3=Catálogo de materiales completo +se-material-catalogue-4=Catálogo de materiales extendido +se-material-insight=Conocimiento de materiales +se-medpack=Botiquín +se-medpack-2=Botiquín 2 +se-medpack-3=Botiquín 3 +se-medpack-4=Botiquín 4 +se-meteor-defence=Instalación de defensa de meteoritos +se-meteor-defence-ammo=Munición de Instalación de defensa de meteoritos +se-meteor-point-defence=Punto de defensa de meteoritos +se-meteor-point-defence-ammo=Munición punto de defensa de meteoritos +se-methane-ice=Metano helado +se-micro-black-hole-data=Datos de microagujeros negros +se-microwave-observation-data=Datos de observación de microondas +se-negative-pressure-data=Datos de presión negativa +se-nano-cold-thermodynamics-data=Datos termodinámicos del frío de nanomateriales +se-nano-compressive-strength-data=Datos de resistencia a la compresión de nanomateriales +se-nano-hot-thermodynamics-data=Datos termodinámicos del calor de nanomateriales +se-nanomaterial=Nanomaterial +se-nano-tensile-strength-data=Datos de resistencia a la tracción de nanomateriales +se-naquium-ore=Naquitita +se-naquium-ore-crushed=Naquitita triturada +se-naquium-ore-washed=Naquitita lavada +se-naquium-powder=Polvo de naquio +se-naquium-plate=Placa de naquio +se-naquium-ingot=Lingote de naquio +se-neural-anomaly-data=Datos de anomalías neuronales +se-nutrient-vat=Cubeta de nutrientes +se-observation-frame-blank=Marco de observación en blanco +se-observation-frame-gammaray=Marco de observación de rayos gamma +se-observation-frame-infrared=Marco de observación infrarrojo +se-observation-frame-microwave=Marco de observación de microondas +se-observation-frame-radio=Marco de observación de ondas de radio +se-observation-frame-uv=Marco de observación UV +se-observation-frame-visible=Marco de observación visible +se-observation-frame-xray=Marco de observación de rayos X +se-orbital-data=Datos de cálculos orbitales +se-particle-beam-shielding-data=Datos de protección del rayo de partículas +se-plague-bomb=Cohete plaga +se-plasma-canister=Contenedor de plasma +se-plasma-electrodynamics-data=Datos de electrodinámica de plasma +se-plasma-thermodynamics-data=Datos de termodinámica de plasma +se-polarisation-data=Datos de polarización +se-pressure-containment-data=Datos de contención de presión +se-quantum-phenomenon-data=Datos de fenómenos cuánticos +se-quark-data=Datos de Quark +se-radiation-data=Datos de radiación +se-radiation-exposure-data=Datos de exposición a la radiación +se-radiation-exposure-resistance-data=Datos de resistencia a la radiación +se-radiation-shielding-data=Datos de protección a la radiación +se-radio-observation-data=Datos de observación de ondas de radio +se-rigidity-data=Datos de rigidez +se-rtg-equipment=RTG portátil +se-rtg-equipment-2=RTG portátil MK2 +se-scrap=Chatarra +se-shear-strength-data=Datos de resistencia al corte +se-significant-data=Datos significativos +se-significant-specimen=Biomasa significativa +se-singularity-data=Datos de singularidad +se-space-capsule=Cápsula espacial +se-space-mirror=Espejo multiespectral +se-space-platform-plating=Plataforma espacial revestimiento +se-space-platform-scaffold=Plataforma espacial armazón +se-space-rail=Raíl espacial +se-spaceship-floor=Suelo de nave espacial +se-specimen=Biomasa +se-subatomic-data=Datos subatómicos +se-superconductivity-data=Datos de superconductividad +se-superconductor=Superconductor +se-superconductive-cable=Cable superconductor +se-tensile-strength-data=Datos de resistencia a la tracción +se-tesla-ammo=Munición de pistola tesla +se-tesla-gun=Pistola tesla +se-thruster-suit=Traje propulsor +se-thruster-suit-2=Traje propulsor MK2 +se-thruster-suit-3=Traje propulsor MK3 +se-thruster-suit-4=Traje propulsor MK4 +se-timespace-anomaly-data=Datos de anomalías del espacio-tiempo +se-used-lifesupport-canister=Contenedor de soporte vital usado +se-uv-observation-data=Datos de observación UV +se-visible-observation-data=Datos de observación visibles +se-vitamelange=Vitamelange +se-vitamelange-nugget=Pepita de vitamelange +se-vitamelange-roast=Vitamelange tostado +se-vitamelange-spice=Especia de vitamelange +se-vitamelange-extract=Extracto de vitamelange +se-vulcanite=Vulcanita +se-vulcanite-crushed=Vulcanita triturada +se-vulcanite-washed=Vulcanita lavada +se-vulcanite-block=Bloque de vulcanita +se-vulcanite-ion-exchange-beads=Perlas de intercambio iónico de cationes +se-water-ice=Agua helada +se-xray-observation-data=Datos de observación de rayos X +se-zero-point-energy-data=Datos de punto de energía cero +se-rocket-science-pack=Pack de ciencia de cohetes +space-science-pack=Pack de ciencia de optimización +speed-module-4=Módulo de velocidad 4 +speed-module-5=Módulo de velocidad 5 +speed-module-6=Módulo de velocidad 6 +speed-module-7=Módulo de velocidad 7 +speed-module-8=Módulo de velocidad 8 +speed-module-9=Módulo de velocidad 9 +se-aeroframe-pole=Poste Aeroframe +se-aeroframe-scaffold=Estructura Aeroframe +se-aeroframe-bulkhead=Mamparo Aeroframe +se-lattice-pressure-vessel=Recipiente de rejilla a presión +se-heavy-girder=Viga pesada +se-heavy-bearing=Cojinete pesado +se-heavy-composite=Compuesto pesado +se-heavy-assembly=Ensamble pesado +se-bioscrubber=Biodepurador +se-vitalic-epoxy=Epoxi vital +se-vitalic-reagent=Reactivo vital +se-vitalic-acid=Ácido vital +se-self-sealing-gel=Gel autosellante +se-holmium-cable=Cable de holmio +se-holmium-solenoid=Solenoide de holmio +se-quantum-processor=Procesador cuántico +se-dynamic-emitter=Emisor dinámico +se-naquium-processor=Procesador de naquio +se-naquium-cube=Cubo de naquio +se-naquium-tessaract=Teseracto de naquio +se-wide-beacon=Baliza de área amplia +se-wide-beacon-2=Baliza de área amplia 2 +se-lifesupport-equipment-1=Equipo de soporte vital MK1 +se-lifesupport-equipment-2=Equipo de soporte vital MK2 +se-lifesupport-equipment-3=Equipo de soporte vital MK3 +se-lifesupport-equipment-4=Equipo de soporte vital MK4 +se-naquium-heat-pipe=Tubería térmica de naquio +se-naquium-heat-pipe-horizontal=Tubería térmica horizontal de naquio +se-naquium-heat-pipe-vertical=Tubería térmica vertical de naquio +se-naquium-heat-pipe-long=Tubería térmica larga de naquio +se-deep-space-transport-belt=Transportadora de espacio profundo +se-deep-space-transport-belt-black=Transportadora de espacio profundo negra +se-deep-space-transport-belt-white=Transportadora de espacio profundo blanca +se-deep-space-transport-belt-red=Transportadora de espacio profundo roja +se-deep-space-transport-belt-yellow=Transportadora de espacio profundo amarilla +se-deep-space-transport-belt-green=Transportadora de espacio profundo verde +se-deep-space-transport-belt-cyan=Transportadora de espacio profundo cian +se-deep-space-transport-belt-blue=Transportadora de espacio profundo azul +se-deep-space-transport-belt-magenta=Transportadora de espacio profundo magenta +se-deep-space-underground-belt=Transportadora subterránea de espacio profundo +se-deep-space-underground-belt-black=Transportadora subterránea de espacio profundo negra +se-deep-space-underground-belt-white=Transportadora subterránea de espacio profundo blanca +se-deep-space-underground-belt-red=Transportadora subterránea de espacio profundo roja +se-deep-space-underground-belt-yellow=Transportadora subterránea de espacio profundo amarilla +se-deep-space-underground-belt-green=Transportadora subterránea de espacio profundo verde +se-deep-space-underground-belt-cyan=Transportadora subterránea de espacio profundo cian +se-deep-space-underground-belt-blue=Transportadora subterránea de espacio profundo azul +se-deep-space-underground-belt-magenta=Transportadora subterránea de espacio profundo magenta +se-deep-space-splitter=Divisor de espacio profundo +se-deep-space-splitter-black=Divisor de espacio profundo negro +se-deep-space-splitter-white=Divisor de espacio profundo blanco +se-deep-space-splitter-red=Divisor de espacio profundo rojo +se-deep-space-splitter-yellow=Divisor de espacio profundo amarillo +se-deep-space-splitter-green=Divisor de espacio profundo verde +se-deep-space-splitter-cyan=Divisor de espacio profundo cian +se-deep-space-splitter-blue=Divisor de espacio profundo azul +se-deep-space-splitter-magenta=Divisor de espacio profundo magenta +se-blueprint-registration-point=Punto de registro de planos +se-delivery-cannon-capsule=Cápsula de cañon de entrega +se-delivery-cannon-capsule-packed=Cápsula de cañon de entrega: __1__ +se-delivery-cannon-targeter=Disparador cañón de entrega +se-delivery-cannon-weapon-capsule=Cápsula de entrega de armas +se-delivery-cannon-weapon-capsule-packed=Cápsula de entrega de armas: __1__ +se-delivery-cannon-weapon-targeter=Disparador cañón de entrega de armas +se-energy-transmitter-targeter=Objetivo de rayo de energía +se-arcosphere=Arcosfera +se-arcosphere-a=λ Arcosfera lambda +se-arcosphere-b=ξ Arcosfera xi +se-arcosphere-c=ζ Arcosfera zeta +se-arcosphere-d=θ Arcosfera theta +se-arcosphere-e=ε Arcosfera epsilon +se-arcosphere-f=φ Arcosfera phi +se-arcosphere-g=γ Arcosfera gamma +se-arcosphere-h=ω Arcosfera omega +se-arcosphere-collector=Recolector de arcosfera +se-star-probe=Sonda estelar +se-belt-probe=Sonda cinturón de esteroides +se-void-probe=Sonda vacío interestelar +se-star-probe-data=Datos de la sonda estelar +se-belt-probe-data=Datos de la sonda cinturón de asteroides +se-void-probe-data=Datos de la sonda vacío interestelar +se-nano-engineering-data=Datos de nanoingeniería +se-annihilation-data=Datos de aniquilación +se-naquium-structural-data=Datos estructurales de naquio +se-hyperlattice-data=Datos de hiperredes +se-naquium-energy-data=Datos de energía de naquio +se-space-fold-data=Datos de plegado espacial +se-space-warp-data=Datos de deformación espacial +se-space-dialation-data=Datos de dilatación espacial +se-space-injection-data=Datos de inyección de espacio +se-interstellar-data=Datos de viajes interestelares +se-teleportation-data=Datos de teletransportación +se-wormhole-data=Datos de agujeros de gusano +se-rhga-data=Datos de análisis hipergráficos de realidad +se-deep-catalogue-1=Catálogo del espacio profundo +se-deep-catalogue-2=Catálogo del espacio profundo amplio +se-deep-catalogue-3=Catálogo del espacio profundo completo +se-deep-catalogue-4=Catálogo del espacio profundo extendido +se-space-probe-rocket=Cohete sonda espacial +se-space-probe-rocket-deployed=Cohete sonda espacial (desplegado) +se-railgun=Cañón de riel +se-railgun-ammo=Munición de cañón de riel + +[item-description] +satellite=El satélite debe colocarse en un silo de cohetes para satélites o un silo de cohetes de sonda espacial. El satélite puede descubrir coordenadas precisas de cuerpos en el sistema solar donde se lanza o estrellas distantes. Proporciona [img=item/se-satellite-telemetry] Telemetría de satélite. +se-satellite-telemetry=Se necesita telemetría de satélite para ciencia de cohetes. Obtenido mediante el lanzamiento de un [img=item/satellite] satélite de navegación desde un silo de cohetes para satélites (o silo de cohetes de sonda espacial). +se-antimatter-canister=La forma más densa de energía en un contenedor seguro para traslados. +se-astronomic-science-pack-1=Usado por los laboratorios espaciales para investigar. +se-astronomic-science-pack-2=Usado por los laboratorios espaciales para investigar. +se-astronomic-science-pack-3=Usado por los laboratorios espaciales para investigar. +se-astronomic-science-pack-4=Usado por los laboratorios espaciales para investigar. +se-beryllium-ore=Mineral de berilio. +se-biological-science-pack-1=Usado por los laboratorios espaciales para investigar. +se-biological-science-pack-2=Usado por los laboratorios espaciales para investigar. +se-biological-science-pack-3=Usado por los laboratorios espaciales para investigar. +se-biological-science-pack-4=Usado por los laboratorios espaciales para investigar. +se-canister=Un recipiente de contención de usos múltiples. +se-bloater-ammo=Crea un charco infeccioso de lodo biológico en el suelo. Los enemigos infectados se hinchan, lo que dificulta el movimiento y daña con el tiempo. Si mueren mientras están hinchados, estallan y sus entrañas salpicadas infligen daño a los enemigos cercanos, lo que podría causar una cascada. El daño total de los proyectiles es del 50% de su HP máximo. +se-pheromone-ammo=Confunde a un enemigo biter or spitter, haciéndole pensar que eres su amigo y sus parientes son el enemigo. +se-cryogun=Haz un muro de hielo que pueda congelar a los enemigos. +se-rocket-launch-pad-silo-dummy-ingredient-item=Fabricado insertando 100 secciones de cohetes de carga y 1 cápsula espacial en un silo de cohetes de carga. +se-cargo-rocket-cargo-pod=Un componente de la sección de cohetes de carga. +se-cargo-rocket-fuel-tank=Un componente de la sección de cohetes de carga. +se-cargo-rocket-section=El componente clave del cohete de carga. Insértalo en el silo del cohete de carga. Se requieren 100 por cohete. Se puede recuperar de los aterrizajes de cohetes (20% de recuperabilidad base). +se-cargo-rocket-section-packed=Secciones de cohetes de carga comprimidas para transporte. Debe desembalarse para ser usado en la construcción de cohetes. +se-deep-space-science-pack=Usado por los laboratorios espaciales para investigar. +se-energy-science-pack-1=Usado por los laboratorios espaciales para investigar. +se-energy-science-pack-2=Usado por los laboratorios espaciales para investigar. +se-energy-science-pack-3=Usado por los laboratorios espaciales para investigar. +se-energy-science-pack-4=Usado por los laboratorios espaciales para investigar. +se-heat-shielding=Un panel compuesto utilizado para aplicaciones de alta temperatura y estructuras espaciales. +se-holmium-ore=Mineral de holmio +se-iridium-ore=Mineral de iridio +se-material-science-pack-1=Usado por los laboratorios espaciales para investigar. +se-material-science-pack-2=Usado por los laboratorios espaciales para investigar. +se-material-science-pack-3=Usado por los laboratorios espaciales para investigar. +se-material-science-pack-4=Usado por los laboratorios espaciales para investigar. +se-medpack=Úsalo para curarte a tí mismo. +se-medpack-2=Úsalo para curarte a tí mismo. +se-medpack-3=Úsalo para curarte a tí mismo. +se-medpack-4=Úsalo para curarte a tí mismo. +se-meteor-defence=Puedes defender un planeta entero de los meteoros, pero solo puede disparar 1 meteoro a la vez. Debe estar cargado con munición de defensa contra meteoritos y completamente cargado para disparar. 80% de precisión. Necesita recargarse después de disparar. Consume 20MW cuando se recarga. +se-meteor-defence-ammo=Destruye meteoritos. Debe cargarse en una instalación de defensa de meteoritos. +se-meteor-point-defence=Defiende un área de los meteoritos. Capaz de disparar hasta 4 meteoros por descarga. Debe estar cargado con munición de defensa contra meteoritos y completamente cargado para disparar. Alcance 64, 50% de precisión, tarda en recargarse después de disparar. Gira para cambiar el modo de carga. +se-naquium-ore=Mineral de naquio. Solo se encuentra en el espacio profundo, un tesoro del vacío interestelar. +se-plague-bomb=Puede extinguir toda la vida de un planeta. Manipular con extrema precaución. (Puede dejar caer UPS severamente a medida que todo muere gradualmente, no recomendado para planetas grandes o multijugador). +se-rtg-equipment=Generador termoeléctrico de radioisótopos. Un generador portátil que convierte el calor de la desintegración radiactiva en electricidad. Dura décadas sin necesidad de combustible adicional. +se-rtg-equipment-2=Generador termoeléctrico de radioisótopos. Un generador portátil mejorado que convierte el calor de la desintegración radiactiva en electricidad. Dura décadas sin necesidad de combustible adicional. +se-space-capsule=Se requiere una cápsula de control para los cohetes de carga. Se puede usar para llevar a los pasajeros de vuelta al planeta más cercano. Entra en la cápsula pulsando __CONTROL__toggle-driving__. +se-space-platform-plating=[font=default-bold][color=#f5cb48]Restricción de ubicación: Espacio[/color][/font]\nRevestimiento avanzado que permite un movimiento rápido sobre la plataforma espacial. +se-space-platform-scaffold=[font=default-bold][color=#f5cb48]Restricción de ubicación: Espacio[/color][/font]\nArmazón de plataforma espacial básica que permite colocar determinadas estructuras en el espacio. +se-space-rail=Railes que son seguros de usar en el espacio porque evitan que el tren salga de las vías y lo destruya todo. No se requiere plataforma espacial, son totalmente autosuficientes. También se puede utilizar en tierra por motivos estéticos. +se-spaceship-floor=Este suelo debe estar debajo de todas las partes de una nave espacial con muros de nave espacial en el borde exterior. Cualquier espacio en el piso romperá la contención, esas secciones pueden desprenderse. +se-superconductive-cable=Un cable compuesto superconductor que no requiere enfriamiento activo. +se-tesla-gun=Cadena de rayos y fuego rápido +se-thruster-suit=Un traje espacial necesario para sobrevivir en el espacio. \nTiene propulsor y botas magnéticas. +se-thruster-suit-2=Un traje espacial necesario para sobrevivir en el espacio. \nTiene propulsores más fuertes, mayor inventario y una cuadrícula más grande. +se-thruster-suit-3=Un traje espacial necesario para sobrevivir en el espacio. \nTiene propulsores más fuertes, mayor inventario y una cuadrícula más grande. +se-thruster-suit-4=Un traje espacial necesario para sobrevivir en el espacio. \nTiene propulsores más fuertes, mayor inventario y una cuadrícula más grande. +se-rocket-science-pack=Usado por los laboratorios espaciales para investigar. Se debe hacer en el espacio. +space-science-pack=Se utiliza para actualizaciones de muchos elementos existentes. +se-wide-beacon=15 ranuras para módulos. Transmite los efectos de los módulos a entidades amigas cercanas dentro de 14 casillas. Múltiples balizas que afecten a la misma entidad la sobrecargarán y evitarán que funcione. +se-wide-beacon-2=20 ranuras para módulos. Transmite los efectos de los módulos a entidades amigas cercanas dentro de 14 casillas. Múltiples balizas que afecten a la misma entidad la sobrecargarán y evitarán que funcione. +se-lifesupport-equipment-1=Aumenta en un +100% (añadido) la eficiencia del soporte vital. Si se instala en un traje no espacial, el bono de eficiencia se reduce a la mitad y no funcionará en el espacio. +se-lifesupport-equipment-2=Aumenta en un +200% (añadido) la eficiencia del soporte vital. Si se instala en un traje no espacial, el bono de eficiencia se reduce a la mitad y no funcionará en el espacio. +se-lifesupport-equipment-3=Aumenta en un +400% (añadido) la eficiencia del soporte vital. Si se instala en un traje no espacial, el bono de eficiencia se reduce a la mitad y no funcionará en el espacio. +se-lifesupport-equipment-4=Aumenta en un +800% (añadido) la eficiencia del soporte vital. Si se instala en un traje no espacial, el bono de eficiencia se reduce a la mitad y no funcionará en el espacio. +se-arcosphere=Encontrado en el vacío interestelar. +se-arcosphere-collector=Recoge arcosferas del vacío interestelar. Debe ser lanzado desde un silo de cohetes de sonda espacial que se encuentre en un campo de asteroides. Las arcosferas son más difíciles de encontrar a medida que se recolectan más. +se-star-probe=Recopila datos de una estrella y devuelve [img=item/se-star-probe-data] Datos de la sonda estelar. Debe ser lanzado desde un silo de cohetes de sonda espacial que se encuentre en la órbita de una estrella. +se-belt-probe=Recopila datos de un cinturón de asteroides y devuelve [img=item/se-belt-probe-data] Datos de la sonda cinturón de asteroides. Debe ser lanzado desde un silo de cohetes de sonda espacial que se encuentre en un cinturón de asteroides. +se-void-probe=Recopila datos del vacío y devuelve [img=item/se-void-probe-data] Datos de la sonda vacío interestelar. Debe ser lanzado desde un silo de cohetes de sonda espacial que se encuentre en un campo de asteroides. +se-interstellar-data=Fabricado en un Nexo en una nave espacial en movimiento. Moverse en el espacio interestelar con una nave más grande y más rápida genera datos mucho más rápido. +se-deep-catalogue-1=Naquio y nanoingeniería. +se-deep-catalogue-2=Estructuras de hiperredes, singularidades y aniquilamiento. +se-deep-catalogue-3=Micro distorsión espacial y nanoingeniería extradimensional. +se-deep-catalogue-4=Distorsión del macroespacio y viajes extradimensionales. +automation-science-pack=Utilizado por los laboratorios básicos de ciencias para la investigación. +chemical-science-pack=Utilizado por los laboratorios básicos de ciencias para la investigación. +logistic-science-pack=Utilizado por los laboratorios básicos de ciencias para la investigación. +military-science-pack=Utilizado por los laboratorios básicos de ciencias para la investigación. +production-science-pack=Utilizado por los laboratorios básicos de ciencias para la investigación. +se-meteor-point-defence-container=Destruye meteoritos. Debe cargarse en una estructura de defensa de meteoritos. +utility-science-pack=Utilizado por los laboratorios básicos de ciencias para la investigación. +beacon=8 ranuras para módulos. Transmite los efectos de los módulos a las entidades amigas cercanas en un radio de 3 casillas. Múltiples balizas que afecten a la misma entidad la sobrecargarán y evitarán que funcione. +se-delivery-cannon=Permite la entrega precisa de contenedores de recursos a través de un cañón de entrega. +se-delivery-cannon-weapon=Permite la entrega precisa de municiones especiales a través de un cañón de entrega de armas. + +[recipe-name] +core-fragment=Procesamiento de fragmentos del núcleo (__1__) +rocket-fuel=Combustible sólido para cohetes +se-astrometric-analysis-multispectral-1=Análisis astrométrico multiespectral 1 +se-astrometric-analysis-multispectral-2=Análisis astrométrico multiespectral 2 +se-astrometric-analysis-multispectral-3=Análisis astrométrico multiespectral 3 +se-astronomic-insight-1=Conocimiento astronómico +se-astronomic-insight-2=Conocimiento astronómico amplio +se-astronomic-insight-3=Conocimiento astronómico completo +se-astronomic-insight-4=Conocimiento astronómico extendido +se-biological-insight-1=Conocimiento biológico +se-biological-insight-2=Conocimiento biológico amplio +se-biological-insight-3=Conocimiento biológico completo +se-biological-insight-4=Conocimiento biológico extendido +se-bio-methane-to-crude-oil=Bioprocesamiento de metano a petróleo crudo +se-bio-sludge-crude-oil=Biolodo a partir de biomasa experimental +se-bio-sludge-decontamination=Descontaminación de biolodo +se-bio-sludge-from-fish=Biolodo a partir de pescado +se-bio-sludge-from-wood=Biolodo a partir de madera +se-bio-sludge-from-vitamelange=Biolodo a partir de vitamelange +se-bio-sludge=Biolodo a partir de biomasa +se-broken-data-scrapping=Desguace de tarjetas de datos rotas +se-cargo-rocket-section-pack=Sección de cohetes de carga embalaje +se-cargo-rocket-section-unpack=Sección de cohetes de carga desembalaje +se-condenser-turbine-reclaim-water=Generación de energía con recuperación de agua. +se-core-fragment-omni=Procesamiento de fragmentos del núcleo +se-core-mining=Minería del núcleo +se-empty-antimatter-canister=Flujo de antimateria desde contenedor +se-empty-barrel-scrapping=Desguace de barriles vacíos +se-empty-barrel-reprocessing=Reprocesamiento de barriles vacíos +se-space-capsule-scrapping=Desguace de cápsula espacial +se-cargo-pod-scrapping=Desguace de cápsula de carga +se-energy-insight-1=Conocimiento energético +se-energy-insight-2=Conocimiento energético amplio +se-energy-insight-3=Conocimiento energético completo +se-energy-insight-4=Conocimiento energético extendido +se-formatting-1=Formateo de datos +se-formatting-2=Formateo de datos eficiente +se-formatting-3=Formateo de datos avanzado +se-formatting-4=Formateo de datos profundo +se-material-insight-1=Conocimiento de materiales +se-material-insight-2=Conocimiento de materiales amplio +se-material-insight-3=Conocimiento de materiales completo +se-material-insight-4=Conocimiento de materiales extendido +se-matter-fusion-copper=Fusión de materia (Cobre) +se-matter-fusion-dirty=Fusión de materia (Chatarra) +se-matter-fusion-iron=Fusión de materia (Hierro) +se-matter-fusion-stone=Fusión de materia (Piedra) +se-matter-fusion-uranium=Fusión de materia (Uranio) +se-matter-fusion-to=Fusión de materia (__1__) +se-orbital-data=Datos de cálculos orbitales +se-plasma-canister-empty=Contenedor de plasma vacío +se-pulverised-sand=Arena pulverizada +se-radiating-space-coolant-fast=Termofluido de enfriamiento rápido a -10°C (Fresco) +se-radiating-space-coolant-normal=Termofluido de enfriamiento a -10°C (Fresco) +se-radiating-space-coolant-slow=Termofluido de enfriamiento eficiente a -10°C (Fresco) +se-mixed-methane-gas-separation=Separación de gas metano mezclado +se-rocket-fuel-from-water-copper=Combustible de cohete a partir de agua +se-scrap-decontamination=Descontaminación de chatarra +se-scrap-recycling=Reciclaje de chatarra +se-space-coolant-cold=Termofluido de hiperenfriamiento a -100°C (Frío) +se-space-coolant-supercooled=Termofluido de hiperenfriamiento a -273°C (Superenfriado) +se-space-coolant-supercooled-cryonite=Termofluido de crioenfriamiento a -273°C (Superenfriado) +se-space-coolant-cold-cryonite=Termofluido de crioenfriamiento a -100°C (Frío) +se-space-coolant-supercoole-cryonite=Termofluido de crioenfriamiento a -273°C (Superenfriado) +se-simulation-a=Simulación astronómica +se-simulation-ab=Simulación de panspermia +se-simulation-abm=Simulación de xenoprogresión +se-simulation-am=Simulación de distribución de materia +se-simulation-as=Simulación de astropartículas +se-simulation-asb=Simulación astrobiónica +se-simulation-asbm=Simulación universal +se-simulation-asm=Simulación de astrofísica +se-simulation-b=Simulación biológica +se-simulation-bm=Simulación biomecánica +se-simulation-m=Simulación de materiales +se-simulation-s=Simulación energética +se-simulation-sb=Simulación bioquímica +se-simulation-sbm=Simulación de nanites +se-simulation-sm=Simulación de nanomateriales +se-space-water-decontamination=Descontaminación de agua cósmica +se-spaceship-rocket-engine-burn=Quema combustible líquido para cohetes +se-specimen-fish=Crecimiento de peces por microgravedad +se-specimen-wood=Crecimiento de madera por microgravedad +se-thermodynamics-coal=Cocción a presión de biomasa a carbón +se-used-lifesupport-canister-cleaning=Limpieza del contenedor de soporte vital +se-used-lifesupport-canister-cleaning-space=Descontaminación del contenedor de soporte vital +space-science-pack=Pack de ciencia de optimización +se-rocket-science-pack=Pack de ciencia de cohetes +se-big-turbine-internal=Descompresión de vapor a alta temperatura +se-arcosphere-fracture=Polarización de la arcosfera +se-arcosphere-fold-in=Inversión de la arcosfera +se-arcosphere-fold-out=Inversión de la arcosfera +se-arcosphere-folding=Plegado de arcosfera: __1__ __2__ a __3__ __4__ +se-electric-boiling-void=Ventilación de la evaporación +se-space-probe-rocket-deployed=Cohete sonda espacial (desplegado) +se-distortion-drive=Motor de distorsión +se-generic-scrapping=__1__ desguace +se-generic-recycling=__1__ reciclaje + +[recipe-description] +se-astronomic-insight-2=Más complicado, pero un recurso más eficiente. +se-astronomic-insight-3=Más complicado, pero un recurso más eficiente. +se-astronomic-insight-4=Más complicado, pero un recurso más eficiente. +se-biological-insight-2=Más complicado, pero un recurso más eficiente. +se-biological-insight-3=Más complicado, pero un recurso más eficiente. +se-biological-insight-4=Más complicado, pero un recurso más eficiente. +se-core-mining=El fragmento real devuelto depende del planeta. El tiempo real de elaboración depende de la cantidad de mineros centrales en el planeta o la luna. +se-energy-insight-2=Más complicado, pero un recurso más eficiente. +se-energy-insight-3=Más complicado, pero un recurso más eficiente. +se-energy-insight-4=Más complicado, pero un recurso más eficiente. +se-material-insight-2=Más complicado, pero un recurso más eficiente. +se-material-insight-3=Más complicado, pero un recurso más eficiente. +se-material-insight-4=Más complicado, pero un recurso más eficiente. +se-radiating-space-coolant-fast=El enfriamiento y calentamiento repetidos del termofluido causa degradación, el enfriamiento más rápido da como resultado una mayor pérdida. +se-radiating-space-coolant-normal=El enfriamiento y calentamiento repetidos del termofluido causa degradación. +se-radiating-space-coolant-slow=El enfriamiento y calentamiento repetidos del termofluido causa degradación, un enfriamiento más lento da como resultado una pérdida reducida. +se-arcosphere-fracture=Las arcosferas se pueden recolectar con un [img=item/se-arcosphere-collector] Colector de arcosfera. +se-distortion-drive=Este proceso debe ejecutarse activamente para activar la capacidad de distorsión del Nexo y ganar el juego. Utiliza 6GW cuando está a una velocidad crítica. +se-delivery-cannon-weapon-pack-se-iridium-piledriver=Daño físico inmenso en un área pequeña, daño explosivo secundario en una onda de choque. + +[technology-name] +effectivity-module-4=Módulo de eficiencia 4 +effectivity-module-5=Módulo de eficiencia 5 +effectivity-module-6=Módulo de eficiencia 6 +effectivity-module-7=Módulo de eficiencia 7 +effectivity-module-8=Módulo de eficiencia 8 +effectivity-module-9=Módulo de eficiencia 9 +energy-shield-equipment=Escudo de energía +energy-shield-mk2-equipment=Escudo de energía MK2 +energy-shield-mk3-equipment=Escudo de energía MK3 +energy-shield-mk4-equipment=Escudo de energía MK4 +energy-shield-mk5-equipment=Escudo de energía MK5 +energy-shield-mk6-equipment=Escudo de energía MK6 +sand-processing=Procesamiento de arena +glass-processing=Procesamiento de vidrio +liquid-rocket-fuel=Combustible líquido para cohetes +productivity-module-4=Módulo de productividad 4 +productivity-module-5=Módulo de productividad 5 +productivity-module-6=Módulo de productividad 6 +productivity-module-7=Módulo de productividad 7 +productivity-module-8=Módulo de productividad 8 +productivity-module-9=Módulo de productividad 9 +rocket-silo=Silo de cohetes para satélites +rocketry=Cohetes de combate +se-adaptive-armour=Armadura adaptable +se-antimatter-engine=Motor de antimateria +se-antimatter-reactor=Reactor de antimateria +se-antimatter-production=Producción de antimateria +se-astronomic-science-pack=Pack de ciencia astronómica +se-biological-science-pack=Pack de ciencia biológica +se-condenser-turbine=Turbina de condensación +se-core-miner=Minería del núcleo +se-biogun=Bio-arma +se-cryogun=Crio-arma +se-deep-space-science-pack=Pack de ciencia del espacio profundo +se-deep-catalogue=Catálogo del espacio profundo +se-dimensional-anchor=Ancla dimensional +se-electric-boiler=Caldera eléctrica +se-energy-science-pack=Pack de ciencia energética +se-fluid-burner-generator=Generador de fluido isotérmico +se-fuel-refining=Refinado de combustible +se-heat-shielding=Blindaje térmico +se-ion-engine=Motor de iones +se-long-range-star-mapping=Mapeo de estrellas de largo alcance +se-material-science-pack=Pack de ciencia de materiales +se-medpack=Botiquín +se-medpack-2=Botiquín 2 +se-medpack-3=Botiquín 3 +se-medpack-4=Botiquín 4 +se-meteor-defence=Instalación de defensa de meteoritos +se-meteor-point-defence=Punto de defensa de meteoritos +se-nanomaterial=Nanomaterial +se-plague=La plaga +se-processing-beryllium=Procesamiento de berilio +se-processing-cryonite=Procesamiento de crionita +se-processing-holmium=Procesamiento de holmio +se-processing-iridium=Procesamiento de iridio +se-processing-naquium=Procesamiento de naquio +se-processing-vitamelange=Procesamiento de vitamelange +se-processing-vulcanite=Procesamiento de vulcanita +se-pulveriser=Pulverizador +se-railgun=Cañón de riel +se-rocket-cargo-safety=Seguridad de cohetes de carga +se-rocket-fuel-from-water=Combustible de cohete a partir de agua +se-rocket-launch-pad=Silo de cohetes de carga +se-rocket-landing-pad=Plataforma de aterrizaje de cohetes +se-rocket-reusability=Reutilización de cohetes +se-rocket-survivability=Supervivencia de cohetes +se-rtg-equipment=RTG portátil +se-rtg-equipment-2=RTG portátil MK2 +se-space-assembling=Ensamblaje en el espacio +se-space-accumulator=Acumulador de holmio +se-space-accumulator-2=Acumulador de naquio +se-space-astrometrics-laboratory=Instalación de astrometría +se-space-biochemical-laboratory=Instalación bioquímica +se-space-catalogue-astronomic=Catálogo astronómico +se-space-catalogue-biological=Catálogo biológico +se-space-catalogue-universal=Catálogo universal +se-space-catalogue-energy=Catálogo energético +se-space-catalogue-material=Catálogo de materiales +se-space-data-card=Tarjeta de datos +se-space-decontamination-facility=Instalación de descontaminación +se-space-electromagnetics-laboratory=Instalación electromagnética +se-space-genetics-laboratory=Instalación de genética +se-space-gravimetrics-laboratory=Instalación gravimétrica +se-space-growth-facility=Instalación de crecimiento +se-space-hypercooling=Hiperenfriamiento +se-space-laser-laboratory=Instalación láser +se-lifesupport-facility=Instalación de soporte vital +se-space-manufactory=Fábrica espacial +se-space-material-fabricator=Fabricante de materiales +se-space-matter-fusion=Fusión de materia +se-space-mechanical-laboratory=Instalación mecánica +se-space-particle-accelerator=Acelerador de partículas +se-space-particle-collider=Colisionador de partículas +se-space-plasma-generator=Generador de plasma +se-space-platform-plating=Plataforma espacial revestimiento +se-space-platform-scaffold=Plataforma espacial armazón +se-space-radiation-laboratory=Instalación de radiación +se-space-radiating-efficiency=Eficiencia de radiación térmica +se-space-radiating-speed=Velocidad de radiación térmica +se-space-radiator=Radiador térmico +se-space-radiator-2=Radiador térmico 2 +se-space-rail=Ferrocarril espacial +se-recycling-facility=Instalación de reciclaje +se-space-science-lab=Laboratorio de ciencia espacial +se-space-simulation-ab=Simulación de panspermia +se-space-simulation-am=Simulación de astromateriales +se-space-simulation-as=Simulación de astropartículas +se-space-simulation-bm=Simulación biomecánica +se-space-simulation-sb=Simulación bioquímica +se-space-simulation-sm=Simulación de nanomateriales +se-space-simulation-abm=Simulación de xenoprogresión +se-space-simulation-asb=Simulación astrobiónica +se-space-simulation-asm=Simulación de astrofísica +se-space-simulation-sbm=Simulación de nanites +se-space-simulation-asbm=Simulación universal +se-space-solar-panel=Panel solar plano +se-space-spectrometry-facility=Instalación de espectrometría +se-space-supercomputer=Superordenador +se-space-telescope=Telescopio +se-space-telescope-gammaray=Telescopio de rayos gamma +se-space-telescope-xray=Telescopio de rayos X +se-space-telescope-microwave=Telescopio de microondas +se-space-telescope-radio=Radio telescopio +se-space-thermodynamics-laboratory=Instalación de termodinámica +se-spaceship=Nave espacial +se-spaceship-integrity=Integridad estructural de la nave espacial +se-factory-spaceship=Nave espacial de fábrica +se-superconductive-cable=Cable superconductor +se-teleportation=Teletransportación +se-tesla-gun=Pistola tesla +se-thruster-suit=Traje propulsor +space-science-pack=Pack de ciencia de optimización +se-rocket-science-pack=Pack de ciencia de cohetes +speed-module-4=Módulo de velocidad 4 +speed-module-5=Módulo de velocidad 5 +speed-module-6=Módulo de velocidad 6 +speed-module-7=Módulo de velocidad 7 +speed-module-8=Módulo de velocidad 8 +speed-module-9=Módulo de velocidad 9 +se-aeroframe-pole=Poste Aeroframe +se-aeroframe-scaffold=Estructura Aeroframe +se-aeroframe-bulkhead=Mamparo Aeroframe +se-lattice-pressure-vessel=Recipiente de rejilla a presión +se-heavy-girder=Viga pesada +se-heavy-bearing=Cojinete pesado +se-heavy-composite=Compuesto pesado +se-heavy-assembly=Ensamble pesado +se-bioscrubber=Biodepurador +se-vitalic-epoxy=Epoxi vital +se-vitalic-reagent=Reactivo vital +se-vitalic-acid=Ácido vital +se-self-sealing-gel=Gel autosellante +se-holmium-cable=Cable de holmio +se-holmium-solenoid=Solenoide de holmio +se-quantum-processor=Procesador cuántico +se-dynamic-emitter=Emisor dinámico +se-naquium-processor=Procesador de naquio +se-naquium-cube=Cubo de naquio +se-naquium-tessaract=Teseracto de naquio +se-wide-beacon=Baliza de área amplia +se-wide-beacon-2=Baliza de área amplia 2 +se-lifesupport-equipment=Equipo de soporte vital +se-lifesupport-equipment-1=Equipo de soporte vital MK1 +se-lifesupport-equipment-2=Equipo de soporte vital MK2 +se-lifesupport-equipment-3=Equipo de soporte vital MK3 +se-lifesupport-equipment-4=Equipo de soporte vital MK4 +se-supercharger=Supercargador +se-addon-power-pole=Poste de energía adicional +se-pylon=Torre eléctrica +se-pylon-substation=Torre subestación +se-pylon-construction=Torre construcción +se-pylon-construction-radar=Torre construcción radar +se-shield-projector=Proyector de escudo +se-deep-space-transport-belt=Transportadoras de espacio profundo +se-big-turbine=Generador de turbina de alta temperatura +se-big-heat-exchanger=Intercambiador de calor de alta temperatura +se-zone-discovery-random=Descubrimiento de zonas +se-zone-discovery-targeted=Descubrimiento de zona objetivo +se-zone-discovery-deep=Descubrimiento de la zona del espacio profundo +se-delivery-cannon=Cañón de entrega +se-delivery-cannon-capsule-iridium=Cápsula de cañón de entrega de iridio +se-delivery-cannon-weapon=Cañón de entrega de armas +se-spaceship-clamps=Abrazaderas de acoplamiento de naves espaciales +se-bio-upgrade-constitution=Mejora biológica: Constitución +se-bio-upgrade-strength=Mejora biológica: Fuerza +se-bio-upgrade-agility=Mejora biológica: Agilidad +se-bio-upgrade-dexterity=Mejora biológica: Destreza +se-bio-upgrade-intelligence=Mejora biológica: Inteligencia +se-energy-beaming=Radiación de energía +se-energy-beam-defence=Paraguas: Instalación de defensa de rayo de energía +se-nexus=Nexo +se-spaceship-victory=Victoria Nave espacial +se-arcosphere=Colección arcosfera +se-arcosphere-folding=Plegado de arcosfera +se-space-probe=Silo de cohetes de sonda espacial +se-linked-container=Arcolink almacenamiento +k2-conversion=__1__ conversión + +[technology-description] +energy-shield-equipment=Una burbuja protectora que se carga rápidamente pero consume mucha energía. +energy-shield-mk2-equipment=Una burbuja protectora que se carga rápidamente pero consume mucha energía. +energy-shield-mk3-equipment=Una burbuja protectora que se carga rápidamente pero consume mucha energía. +energy-shield-mk4-equipment=Una burbuja protectora que se carga rápidamente pero consume mucha energía. +energy-shield-mk5-equipment=Una burbuja protectora que se carga rápidamente pero consume mucha energía. +energy-shield-mk6-equipment=Una burbuja protectora que se carga rápidamente pero consume mucha energía. +sand-processing=Triturar, moler y filtrar la materia prima en arena limpia. +glass-processing=Fundir arena en vidrio. +rocket-silo=te permite poner en órbita un satélite para descubrir nuevos planetas. +se-adaptive-armour=Armadura que usa energía para autorepararse. Cumple una función similar a los escudos de energía con menores requisitos de energía pero una regeneración mucho más lenta. +se-antimatter-engine=Aniquilar la antimateria para producir un empuje increíble. +se-antimatter-reactor=Aniquila la antimateria con materia para generar calor extremo. +se-antimatter-production=Fabricando antimateria, la forma más densa de energía almacenada. +se-astronomic-science-pack=Permite la investigación de tecnologías relacionadas con los viajes espaciales y la logística interestelar. +se-biological-science-pack=Permite la investigación de tecnologías relacionadas con la mejora de tus capacidades físicas, armas biológicas y procesamiento neuronal. +se-condenser-turbine=75% de la eficiencia energética de una turbina a vapor, pero el 99% del vapor utilizado se devuelve como agua. Rango de temperatura: 100 a 999. +se-core-miner=Permite la extracción interminable de recursos de planetas y lunas, pero se reduce el rendimiento si se utilizan varias en el mismo cuerpo celeste. +se-biogun=Una pistola que puede usar varias armas biológicas. +se-cryogun=Haz un muro de hielo que pueda congelar a los enemigos. +se-deep-space-science-pack=Necesario para la tecnología más avanzada +se-deep-catalogue=Distorsión espacial, materia exótica y datos de nanoingeniería estructurados listos para análisis y simulación por computadora. Requerido para las tecnologías más avanzadas. +se-dimensional-anchor=Utiliza el pozo gravitatorio de una estrella como punto de estabilización para una anomalía espacial. +se-electric-boiler=Crea vapor a partir del agua utilizando energía eléctrica. 90% de eficiencia energética. +se-energy-science-pack=Permite la investigación de tecnologías relacionadas con las fuerzas fundamentales y descubrimientos subatómicos. +se-fluid-burner-generator=Requiere combustible líquido con valor energético (como combustible líquido para cohetes) para generar electricidad. Simple y compacto, pero carece de la eficiencia energética de los sistemas a vapor más grandes. Diseñado para el espacio. El consumo de líquido real depende del valor del combustible líquido. +se-fuel-refining=Refinamiento de combustibles más avanzados. +se-heat-shielding=Un panel compuesto utilizado para aplicaciones de alta temperatura y estructuras espaciales. +se-ion-engine=Los motores de iones utilizan una pequeña cantidad de flujo de iones y una gran cantidad de potencia para impulsar el movimiento de una nave espacial. Los tanques de refuerzo de iones son más pequeños que otros tanques de refuerzo y solo pueden lanzarse desde ubicaciones que ya están en el espacio. +se-long-range-star-mapping=Algunas galaxias distantes pueden identificarse mediante patrones específicos de estrellas inusuales. Los resultados se registran en [img=virtual-signal/informatron] InformaTron [__CONTROL__informatron__]. +se-material-science-pack=Permite la investigación de tecnologías relacionadas con materiales avanzados para requisitos de ingeniería más avanzados. +se-medpack=Usa el botiquín para curarte. +se-medpack-2=Usa el botiquín para curarte. +se-medpack-3=Usa el botiquín para curarte. +se-medpack-4=Usa el botiquín para curarte. +se-meteor-defence=Dispara meteoritos desde el cielo antes de que destruyan tus cosas. Una instalación de defensa contra meteoritos puede proteger un planeta entero, pero solo puede disparar un meteoro a la vez. +se-meteor-point-defence=Dispara meteoritos desde el cielo antes de que destruyan tus cosas. El punto de defensa de meteoritos puede proteger un área pequeña de hasta 4 meteoros a la vez. +se-nanomaterial=Una intrincada disposición de diferentes materiales organizados a nanoescala para hacer un compuesto con propiedades superiores. +se-plague=La gran plaga que erradica toda la vida de planetas enteros. Manipular con EXTREMA precaución. +se-processing-beryllium=Convertir el berilo en berilio, un metal extremadamente ligero, fuerte, resistente a la corrosión y a la radiación. Tampoco tiene casi ninguna interacción con los rayos X. +se-processing-cryonite=Procesamiento de cristales de crionita congelados en varillas de crionita que tienen aplicaciones en refrigeración, enfriamiento y lubricación. La crionita se encuentra principalmente en planetas congelados. +se-processing-holmium=Convirtiendo holminita en holmio, un metal de tierras raras con la mayor permeabilidad magnética de cualquier elemento. +se-processing-iridium=Convirtiendo la iridita en iridio, el metal más resistente a la corrosión y el elemento más denso a temperaturas más altas. Importante para aplicaciones de trabajos pesados. +se-processing-naquium=Convirtiendo el misterioso cristal de naquitita del espacio profundo en naquio, un material similar al metal con inusuales interacciones espacio-tiempo. +se-processing-vitamelange=Convirtiendo la primitiva esponja de roca vitamelange en un valioso extracto de nutrientes. +se-processing-vulcanite=Convertir el cristal de vulcanita volcánica en un polvo refinado que se utiliza en fundición avanzada, combustible para cohetes y otros procesos químicos de alta temperatura. La vulcanita se encuentra en planetas volcánicos y en la mayoría de los fragmentos del núcleo. +se-pulveriser=Pulveriza y tritura minerales más duros y fragmentos del núcleo del planeta. +se-railgun=proyectiles acelerados electromagnéticamente impulsados ​​a tal velocidad que dejan un rastro de plasma antes de vaporizarse. Alto daño, baja cadencia de fuego. +se-rocket-cargo-safety=Reduce en un 10% (multiplicativo) la probabilidad de que las cápsulas de carga se dañen en tránsito. +se-rocket-fuel-from-water=Genera combustible para cohetes de hidrógeno-oxígeno a través de la electrólisis del agua. +se-rocket-launch-pad=Te permite lanzar carga al espacio o a otros planetas. +se-rocket-landing-pad=Te permite entregar cápsulas de carga de cohetes a una plataforma de aterrizaje con nombre. Con más investigación, también puede recuperar partes de cohetes. +se-rocket-reusability=Aumenta el porcentaje de partes que se pueden recuperar de un aterrizaje exitoso en una plataforma de aterrizaje en un 4% (la base es 20%, el máximo es 100%). +se-rocket-survivability=Reduce en un 10% (multiplicativo) la probabilidad de que los cohetes se dañen en tránsito o tengan una fallo de navegación y hagan perder el rumbo hacia la plataforma de aterrizaje. +se-rtg-equipment=Generador termoeléctrico de radioisótopos. Un generador portátil que convierte el calor de la desintegración radiactiva en electricidad. Dura décadas sin necesidad de combustible adicional. +se-rtg-equipment-2=Generador termoeléctrico de radioisótopos. Un generador portátil mejorado que convierte el calor de la desintegración radiactiva en electricidad. Dura décadas sin necesidad de combustible adicional. +se-space-assembling=Una máquina ensambladora modificada que puede trabajar en el espacio. +se-space-accumulator=Edificios que almacenan mayores cantidades de energía eléctrica sobrante para más adelante. +se-space-accumulator-2=Edificios que almacenan cantidades increíblemente grandes de energía eléctrica excedente para más tarde. +se-space-astrometrics-laboratory=Combina, compara y cuantifica diferentes fuentes de información astronómica. +se-space-biochemical-laboratory=Un laboratorio químico avanzado que se especializa en bioquímica. También puede realizar procesamientos de petróleo y químicos más básicos. +se-space-catalogue-astronomic=Datos astronómicos estructurados listos para análisis y simulación por computadora. Requerido para futuras investigaciones astronómicas. +se-space-catalogue-biological=Datos biológicos estructurados listos para análisis y simulación por computadora. Requerido para futuras investigaciones biológicas. +se-space-catalogue-universal=Datos combinados para análisis y simulación por computadora. Requerido para futuras investigaciones en el espacio profundo. +se-space-catalogue-energy=Datos de energía estructurados listos para análisis y simulación por computadora. Requerido para futuras investigaciones energéticas. +se-space-catalogue-material=Datos de materiales estructurados listos para análisis y simulación por computadora. Requerido para una mayor investigación de materiales. +se-space-data-card=Un dispositivo de almacenamiento de datos de usos múltiples. Requerido para investigaciones más avanzadas basadas en datos. +se-space-decontamination-facility=Limpia sustancias para uso en entornos estériles y prepara líquidos para uso en condiciones de baja presión. +se-space-electromagnetics-laboratory=Equipo para aplicaciones de campo magnético intenso y voltaje extremadamente alto. +se-space-genetics-laboratory=Un laboratorio dedicado a la secuenciación genética, modificación genética e impresión genética de cultivos. +se-space-gravimetrics-laboratory=Analiza y simula perturbaciones gravitacionales. +se-space-growth-facility=Cultiva especímenes biológicos bajo una variedad de condiciones controladas que son imposibles en otros lugares, como en microgravedad. +se-space-hypercooling=Realiza un intercambio de calor sobre el termofluido, haciendo que uno esté más caliente y el otro más frío. +se-space-laser-laboratory=Experimentos con láseres. Se debe usar protección para los ojos. +se-lifesupport-facility=Mantener la vida en entornos más hostiles. +se-space-manufactory=Una tecnología clave para la producción en masa en el espacio. +se-space-material-fabricator=Sintetiza nuevos materiales. Un cruce entre un colisionador de partículas y una impresora 3D. +se-space-matter-fusion=Fabricación de materiales mediante fusión. +se-space-mechanical-laboratory=Proporciona una gama de procesos mecánicos: Trituración, desgarro, cizallamiento, vibración, etc. +se-space-particle-accelerator=Acelera partículas cercanas a la velocidad de la luz. +se-space-particle-collider=Choca partículas de alta velocidad y analiza los resultados. +se-space-plasma-generator=Genera una variedad de plasmas. +se-space-platform-plating=Revestimiento robusto de la plataforma espacial. Suave y rápido para caminatas espaciales. +se-space-platform-scaffold=Armazón básico de plataforma espacial. Algo sobre lo que construir, pero no muy bueno para las caminatas espaciales. +se-space-radiation-laboratory=Un lugar relativamente seguro para jugar con material radiactivo. Puede utilizarse para el procesamiento de uranio. +se-space-radiating-efficiency=Enfriamiento más lento pero más eficiente en el uso de recursos del termofluido sobrecalentado. +se-space-radiating-speed=Enfriamiento más rápido pero con menos recursos del termofluido recalentado. +se-space-radiator=Irradia el exceso de calor del termofluido recalentado. +se-space-radiator-2=Irradia el exceso de calor del termofluido recalentado. +se-space-rail=Railes que son seguros de usar en el espacio porque evitan que el tren salga de las vías y lo destruya todo. También se puede utilizar en tierra por motivos estéticos. +se-recycling-facility=Desguace de artículos y reprocesamiento de desechos en materias primas. +se-space-science-lab=Permite el procesamiento de paquetes de ciencia de cohetes y ciencia espacial más avanzada. +se-space-simulation-ab=Simulación más eficiente al combinar múltiples disciplinas. +se-space-simulation-am=Simulación más eficiente al combinar múltiples disciplinas. +se-space-simulation-as=Simulación más eficiente al combinar múltiples disciplinas. +se-space-simulation-bm=Simulación más eficiente al combinar múltiples disciplinas. +se-space-simulation-sb=Simulación más eficiente al combinar múltiples disciplinas. +se-space-simulation-sm=Simulación más eficiente al combinar múltiples disciplinas. +se-space-simulation-abm=Simulación más eficiente al combinar múltiples disciplinas. +se-space-simulation-asb=Simulación más eficiente al combinar múltiples disciplinas. +se-space-simulation-asm=Simulación más eficiente al combinar múltiples disciplinas. +se-space-simulation-sbm=Simulación más eficiente al combinar múltiples disciplinas. +se-space-simulation-asbm=Simulación más eficiente al combinar múltiples disciplinas. +se-space-solar-panel=Un panel solar de alta eficiencia sobre el que se puede caminar. +se-space-spectrometry-facility=Espectrofotometría, cromatografía de gases, espectrometría de masas y otras espectrografías. Dispara cosas a una pared, haz que se doble, mira dónde golpea. +se-space-supercomputer=Permite una manipulación, procesamiento y una simulación de datos más avanzados. +se-space-telescope=Un telescopio sofisticado sensible a múltiples longitudes de onda alrededor del espectro visible. +se-space-telescope-gammaray=Los rayos gamma no se refractan. Este poderoso telescopio que usa espejos y detectores especiales en su lugar. +se-space-telescope-xray=La mayoría de las atmósferas bloquean los rayos X. Este poderoso telescopio está diseñado para el espacio, donde la atmósfera no es un problema. +se-space-telescope-microwave=Un enorme telescopio que detecta microondas y el fondo cósmico de microondas. +se-space-telescope-radio=Un enorme telescopio que detecta ondas de radio muy débiles de fuentes lejanas. +se-space-thermodynamics-laboratory=Realiza procesos que involucran temperaturas extremas. También puede realizar procesos térmicos básicos, como la fundición. +se-spaceship=Una embarcación que construyes pieza por pieza con suelo y muros, luego usa la consola para ir a un planeta diferente, o más allá. +se-spaceship-integrity=Cada nivel aumenta el límite de tensión de integridad estructural de la nave espacial en 100. +se-factory-spaceship=Cada nivel aumenta el límite de tensión de integridad estructural de la nave espacial en 500. +se-superconductive-cable=Un cable compuesto superconductor que no requiere enfriamiento activo. +se-teleportation=Desbloquea otra tecnología de teletransportación. Esta tecnología no hace nada por sí sola, pero es una puerta de entrada a otras tecnologías. +se-tesla-gun=Cadena de rayos y fuego rápido. Puede golpear hasta 30 enemigos por rayo. Realiza saltos largos entre objetivos o saltos cortos por el suelo si no hay objetivos. +se-thruster-suit=Un traje espacial con propulsores y botas magnéticas. No vayas al espacio sin él. +space-science-pack=Permite un desarrollo más directo de paquetes y tecnologías de ciencia espacial que se benefician de esos avances. +se-rocket-science-pack=Permite la investigación de tecnologías relacionadas con el procesamiento de recursos exóticos y la fabricación de variantes espaciales de estructuras terrestres. +se-aeroframe-pole=Un poste de berilio ligero y resistente que se utiliza comúnmente como viga de soporte para la aviación y la exploración espacial. +se-aeroframe-scaffold=Un marco estructural de berilio liviano y resistente que se usa comúnmente como el esqueleto interno principal para los buques de exploración espacial y de aviación. +se-aeroframe-bulkhead=Una pared de berilio resistente al aire, ligera y hermética, que se utiliza como revestimiento externo o paredes del compartimento secundario de los buques de exploración espacial y de aviación. +se-lattice-pressure-vessel=Un recipiente a presión de berilio de peso ligero y fuerte con una red interna que permite que ciertos fluidos se compriman más allá de sus límites normales. Si se rompe, el fluido presurizado se ventila de forma segura. +se-heavy-girder=Una viga estructural de iridio pesado que se utiliza principalmente para la industria pesada y los buques militares pesados. +se-heavy-bearing=Un cojinete de iridio grande y pesado que puede funcionar indefinidamente bajo fuerzas que aplastarían materiales menores. +se-heavy-composite=Un mamparo grueso casi impenetrable que es prácticamente inmune al calor, la corrosión, la radiación y la fuerza mecánica, pero es increíblemente pesado. +se-heavy-assembly=Un conjunto mecanismos pesados de engranajes y componentes configurables que se utiliza para la industria pesada. +se-bioscrubber=Una cámara de procesamiento de materiales que utiliza procesos biológicos para descomponer materiales no deseados. +se-vitalic-epoxy=Un epoxi de origen biológico increíblemente fuerte con propiedades regenerativas. +se-vitalic-reagent=Un reactivo multiusos eficaz para una amplia gama de reacciones químicas. +se-vitalic-acid=Un fuerte cóctel de varios ácidos. +se-self-sealing-gel=Un gel viscoso bajo presión, pero sólido como el acero cuando se expone al vacío. A menudo se utiliza como película interna en mamparos para sellar pasivamente perforaciones. +se-holmium-cable=Un cable enfundado diseñado específicamente para eliminar el ruido no deseado en línea que puede interferir con la electrónica sensible. +se-holmium-solenoid=Un electroimán extremadamente potente. +se-quantum-processor=Aprovecha la superposición y el entrelazamiento para trabajar de manera más eficiente en problemas muy complejos. +se-dynamic-emitter=Un sistema emisor de luz o partículas rápidamente ajustable que puede cambiar una serie de propiedades para un mayor rango o modos de escaneo o propiedades de penetración del material. +se-naquium-processor=El cálculo dentro de un teseracto de naquio evita algunas de las limitaciones habituales de la densidad de cálculo. +se-naquium-cube=Aprovechando la inusual interacción del naquio con el espacio-tiempo para doblar un gran volumen en un pequeño cubo. +se-naquium-tessaract=Un objeto peculiar que se asienta en una forma de cubo pero cambia a una variedad de otras formas geométricas si se gira o se acelera. +se-wide-beacon=La baliza de área amplia transmite los efectos de los módulos a las entidades amigas cercanas dentro de 14 casillas. Tiene 15 ranuras para módulos o 20 cuando se actualiza. Múltiples balizas que afecten a la misma entidad la sobrecargarán y evitarán que funcione. +se-wide-beacon-2=La baliza de área amplia 2 transmite los efectos de los módulos a las entidades amigas cercanas dentro de 14 casillas. Tiene 20 ranuras para módulos. Múltiples balizas que afecten a la misma entidad la sobrecargarán y evitarán que funcione. +se-lifesupport-equipment-1=Aumenta en un +100% (añadido) la eficiencia del soporte vital. Si se instala en un traje no espacial, el bono de eficiencia se reduce a la mitad y no funcionará en el espacio. +se-lifesupport-equipment-2=Aumenta en un +200% (añadido) la eficiencia del soporte vital. Si se instala en un traje no espacial, el bono de eficiencia se reduce a la mitad y no funcionará en el espacio. +se-lifesupport-equipment-3=Aumenta en un +400% (añadido) la eficiencia del soporte vital. Si se instala en un traje no espacial, el bono de eficiencia se reduce a la mitad y no funcionará en el espacio. +se-lifesupport-equipment-4=Aumenta en un +800% (añadido) la eficiencia del soporte vital. Si se instala en un traje no espacial, el bono de eficiencia se reduce a la mitad y no funcionará en el espacio. +se-supercharger=Puede cargar hasta 64 robots a la vez a alta velocidad. El consumo máximo de energía de la estructura es de 1 GW. +se-addon-power-pole=Un poste eléctrico pequeño diseñado para conectarse a edificios o para un control preciso de la cobertura eléctrica. +se-pylon=Distribuye energía eléctrica. Rango de conexión de 64 casillas. +se-pylon-substation=Distribuye energía eléctrica. Rango de conexión de 64 casillas, área de fuente de alimentación de 64x64. +se-pylon-construction=Distribuye energía eléctrica y amplía el área de construcción. Rango de conexión de 64 casillas, área de construcción de 64x64. +se-pylon-construction-radar=Distribuye energía eléctrica, amplía el área de construcción y proporciona visión por radar. Rango de conexión de 64 casillas, área de construcción y visión de 256x256. Área logística 4x4. +se-shield-projector=Crea un campo de fuerza protector. Se requiere más energía cuando el proyector se está cargando o cuando el escudo se daña. Puede bloquear proyectiles enemigos si está instalado el mod "Combat Mechanics Overhaul". +se-deep-space-transport-belt=Cintas de transporte rápidas de larga distancia que se pueden colocar en el espacio. Se pueden usar diferentes colores para identificar fácilmente las líneas a distancia. +se-big-turbine=Un gran generador de 1 GW que absorbe vapor a 5000°C, emite vapor a 500°C en el otro extremo y emite agua a los lados. 99% de eficiencia energética, 99% de conservación de agua. +se-big-heat-exchanger=Un gran intercambiador de calor diseñado para altas temperaturas y alta capacidad. +se-zone-discovery-random=Busca planetas, lunas y cinturones de asteroides con telescopios. +se-zone-discovery-targeted=Busca planetas, lunas y cinturones de asteroides que tengan recursos específicos. Selecciona la preferencia de recursos en [img=virtual-signal/informatron] InformaTron > Descubrimiento de zonas. +se-zone-discovery-deep=Busca áreas interesantes del espacio interestelar profundo. Los campos de asteroides pueden tener muchos recursos únicos y valiosos. +se-delivery-cannon=Un cañón de riel capaz de disparar recursos a la órbita y más allá, y un cofre blindado para atraparlos. +se-delivery-cannon-capsule-iridium=Aunque el iridio es un metal pesado, el incremento de durabilidad significa que se puede usar menos material en comparación con una cápsula de administración estándar. El peso total es el mismo pero es más simple de fabricar. +se-delivery-cannon-weapon=Un gran cañón de riel capaz de disparar municiones especiales, como una bomba atómica, a otras superficies. +se-spaceship-clamps=Te permite colocar abrazaderas de acoplamiento para que las naves espaciales puedan anclar a una ubicación específica haciendo coincidir las ubicaciones de las abrazaderas. La automatización requiere señales de "Ancla usando" y "Ancla a" alimentadas a la consola. +se-bio-upgrade-constitution=Aumenta la salud máxima. +se-bio-upgrade-strength=Aumenta la capacidad de carga. +se-bio-upgrade-agility=Aumenta la velocidad de movimiento. +se-bio-upgrade-dexterity=Aumenta la velocidad de elaboración. +se-bio-upgrade-intelligence=Aumenta el aprendizaje obtenido de cada paquete de ciencias. +se-energy-beaming=Un rayo de energía intenso que puede usarse como arma desde el cielo o para transferir energía donde se necesita. +se-energy-beam-defence=Defiendete contra rayos de energía espaciales y eyecciones de masa coronal. Funciona levitando partículas magnéticas en una burbuja protectora, luego vuelve a alinear y aglutina las partículas según sea necesario para difundir los rayos de energía hostiles. +se-nexus=Un dispositivo que se puede activar en una nave espacial que se mueve en el espacio interestelar para generar datos, y con tecnología adicional puede activar un campo de distorsión espacial (Victoria Nave espacial). +se-spaceship-victory=Permite que el Nexo active el Motor de distorsión para escapar del cúmulo estelar local. Haz que una nave espacial Nexo se ejecute en modo Motor de distorsión y se mueva a una velocidad de __1__ en el espacio interestelar durante __2__ segundos para ganar el juego. +se-arcosphere=Permite la colección de arcosferas perdidas en el vacío interestelar. +se-arcosphere-folding=Permite el uso de arcosferas como pinzas extradimensionales. +se-space-probe=Un silo de cohetes para el lanzamiento de sondas espaciales. También se puede utilizar para lanzar satélites de forma económica. +se-linked-container=Un contenedor vinculado por un espacio extradimensional a otros contenedores. Los enlaces del contenedor dependen de la superficie sobre la que se coloque primero. +se-thruster-suit-2=Un traje espacial mejorado con propulsores más fuertes, aumento del inventario y una cuadrícula más grande. +se-thruster-suit-3=Un traje espacial mejorado con propulsores más fuertes, aumento del inventario y una cuadrícula más grande. +se-thruster-suit-4=Un traje espacial mejorado con propulsores más fuertes, aumento del inventario y una cuadrícula más grande. +effect-transmission=La baliza transmite los efectos de los módulos a las entidades amigas cercanas dentro de las 3 casillas. Tiene 8 ranuras para módulos. Múltiples balizas que afecten a la misma entidad la sobrecargarán y evitarán que funcione. +se-unit-capsule=Cápsulas que despliegan unidades __1__ aliadas. + +[modifier-description] +tesla-shooting-speed-bonus=Velocidad de disparo de Tesla +tesla-damage-bonus=Bono de daño de Tesla +railgun-damage-bonus=Bonificación de daño por cañón de riel +railgun-shooting-speed-bonus=Velocidad de disparo del cañón de riel +cryogun-shooting-speed-bonus=Velocidad de disparo de la Crio-arma +cryogun-damage-bonus=Bono de daño de la Crio-arma +character-running-speed=Bonificación de movimiento del personaje: +__1__ +character-crafting-speed=Velocidad de creación del personaje: +__1__ + +[virtual-signal-name] +signal-speed=Señal de velocidad +se-signal-speed=Señal de velocidad +signal-distance=Señal de distancia +se-signal-distance=Señal de distancia +se-star=Estrella +se-planet=Planeta +se-planet-orbit=Órbita planetaria +se-moon=Luna +se-moon-orbit=Órbita lunar +se-asteroid-belt=Cinturón de asteroides +se-asteroid-field=Campo de asteroides +se-anomaly=Anomalía +se-meteor=Meteoro +se-spaceship=Nave espacial +se-cargo-rocket=Cohete de carga +se-remote-view=Vista remota +se-death=Muerto +se-character-corpse=Cadáver +se-ruin=Ruina +se-accolade=Elogio +se-remove=Eliminar +se-radius=Radio +se-hierarchy=Jerarquía +se-spaceship-launch=Lanzamiento de nave espacial +se-anchor-using-left-clamp=Ancla usando abrazadera izquierda de la nave espacial +se-anchor-using-right-clamp=Ancla usando abrazadera derecha de la nave espacial +se-anchor-to-left-clamp=Ancla a abrazadera izquierda del objetivo +se-anchor-to-right-clamp=Ancla a abrazadera derecha del objetivo +se-beacon-overload=Sobrecarga de baliza +se-heat=Calor +se-pin=Marcador + +[controls] +se-remote-view=Navegación por satélite +se-remote-view-pins=Navegación por satélite marcadores +se-remote-view-next=Historial de navegación siguiente +se-remote-view-previous=Historial de navegación anterior +se-universe-explorer=Explorador del universo +se-respawn=Reaparecer +se-mode-toggle=Activar modo de operación de estructura +se-pin-one=Ir al marcador 1 +se-pin-two=Ir al marcador 2 +se-pin-three=Ir al marcador 3 +se-pin-four=Ir al marcador 4 +se-pin-five=Ir al marcador 5 +se-pin-six=Ir al marcador 6 +se-pin-seven=Ir al marcador 7 +se-pin-eight=Ir al marcador 8 +se-pin-nine=Ir al marcador 9 +se-pin-zero=Ir al marcador 0 +se-pin-set-one=Establecer marcador 1 +se-pin-set-two=Establecer marcador 2 +se-pin-set-three=Establecer marcador 3 +se-pin-set-four=Establecer marcador 4 +se-pin-set-five=Establecer marcador 5 +se-pin-set-six=Establecer marcador 6 +se-pin-set-seven=Establecer marcador 7 +se-pin-set-eight=Establecer marcador 8 +se-pin-set-nine=Establecer marcador 9 +se-pin-set-zero=Establecer marcador 0 + +[shortcut] +se-remote-view=Navegación por satélite +se-remote-view-pins=Navegación por satélite marcadores +se-universe-explorer=Explorador del universo +se-respawn=Reaparecer +se-pin-one=Ir al marcador 1 +se-pin-two=Ir al marcador 2 +se-pin-three=Ir al marcador 3 +se-pin-four=Ir al marcador 4 +se-pin-five=Ir al marcador 5 +se-pin-six=Ir al marcador 6 +se-pin-seven=Ir al marcador 7 +se-pin-eight=Ir al marcador 8 +se-pin-nine=Ir al marcador 9 +se-pin-zero=Ir al marcador 0 +se-pin-set-one=Establecer marcador 1 +se-pin-set-two=Establecer marcador 2 +se-pin-set-three=Establecer marcador 3 +se-pin-set-four=Establecer marcador 4 +se-pin-set-five=Establecer marcador 5 +se-pin-set-six=Establecer marcador 6 +se-pin-set-seven=Establecer marcador 7 +se-pin-set-eight=Establecer marcador 8 +se-pin-set-nine=Establecer marcador 9 +se-pin-set-zero=Establecer marcador 0 + +[shortcut-name] +se-remote-view=Navegación por satélite [__CONTROL__se-remote-view__] +se-remote-view-pins=Satélite de navegación marcadores [__CONTROL__se-remote-view-pins__] +se-universe-explorer=Explorador del universo [__CONTROL__se-universe-explorer__] +se-respawn=Reaparecer [__CONTROL__se-respawn__] +se-pin-one=Ir al marcador 1 [__CONTROL__se-pin-one__] +se-pin-two=Ir al marcador 2 [__CONTROL__se-pin-two__] +se-pin-three=Ir al marcador 3 [__CONTROL__se-pin-three__] +se-pin-four=Ir al marcador 4 [__CONTROL__se-pin-four__] +se-pin-five=Ir al marcador 5 [__CONTROL__se-pin-five__] +se-pin-six=Ir al marcador 6 [__CONTROL__se-pin-six__] +se-pin-seven=Ir al marcador 7 [__CONTROL__se-pin-seven__] +se-pin-eight=Ir al marcador 8 [__CONTROL__se-pin-eight__] +se-pin-nine=Ir al marcador 9 [__CONTROL__se-pin-nine__] +se-pin-zero=Ir al marcador 0 [__CONTROL__se-pin-zero__] +se-pin-set-one=Establecer marcador 1 [__CONTROL__se-pin-set-one__] +se-pin-set-two=Establecer marcador 2 [__CONTROL__se-pin-set-two__] +se-pin-set-three=Establecer marcador 3 [__CONTROL__se-pin-set-three__] +se-pin-set-four=Establecer marcador 4 [__CONTROL__se-pin-set-four__] +se-pin-set-five=Establecer marcador 5 [__CONTROL__se-pin-set-five__] +se-pin-set-six=Establecer marcador 6 [__CONTROL__se-pin-set-six__] +se-pin-set-seven=Establecer marcador 7 [__CONTROL__se-pin-set-seven__] +se-pin-set-eight=Establecer marcador 8 [__CONTROL__se-pin-set-eight__] +se-pin-set-nine=Establecer marcador 9 [__CONTROL__se-pin-set-nine__] +se-pin-set-zero=Establecer marcador 0 [__CONTROL__se-pin-set-zero__] + +[tile-name] +se-space-platform-plating=Plataforma espacial revestimiento +se-space-platform-scaffold=Plataforma espacial armazón +se-space-platform-underlay=Espacio +se-space-platform-underlay-l=Espacio +se-space-platform-underlay-r=Espacio +se-space=Espacio vacío +se-regolith=Regolito +se-asteroid=Asteroide +se-spaceship-floor=Suelo de nave espacial + +[mod-setting-name] +se-meteor-interval=Intervalo máximo de meteoritos +se-plague-max-runtime=Duración máxima de la plaga +se-planets=Número de planetas +se-planet-size=Área del planeta (1% to 10000%) +se-seed=Semilla de generación de planetas +se-skip-experimental-warning=Omitir advertencia experimental +se-print-meteor-info=Muestra alertas de meteoritos en la consola +se-print-satellite-discovered-nothing=Muestra cuando el satélite no descubre nada +se-space-pipe-capacity=Capacidad de tubería espacial +se-electric-boiler=Caldera eléctrica +se-deep-space-belt-speed=Velocidad de la cinta de espacio profundo +se-deep-space-belt-black=Cinta de espacio profundo negra +se-deep-space-belt-white=Cinta de espacio profundo blanca +se-deep-space-belt-red=Cinta de espacio profundo roja +se-deep-space-belt-yellow=Cinta de espacio profundo amarilla +se-deep-space-belt-green=Cinta de espacio profundo verde +se-deep-space-belt-cyan=Cinta de espacio profundo cian +se-deep-space-belt-blue=Cinta de espacio profundo azul +se-deep-space-belt-magenta=Cinta de espacio profundo magenta +se-space-science-pack=Volver al pack de ciencia espacial +se-never-show-lifesupport=Nunca mostrar la GUI de soporte vital +se-show-zone-preview=Mostrar ventana de vista previa de la zona +se-pylon-charge-points=Puntos de recarga de torres de construcción +se-cmes-max-frequency=Intervalo máximo de eyección de masa coronal +se-spawn-small-resources=Bonificación parches de recursos iniciales +se-show-overhead-button-satellite-mode=Mostrar botón de Enlace a Navegación por satélite +se-show-overhead-button-interstellar-map=Mostrar botón de Mapa interestelar. +se-show-overhead-button-universe-explorer=Mostrar botón de Explorador del universo +se-show-pin-help-tooltip=Mostrar ayuda en los botones de marcadores +se-scan-search-budget=Bloques comprobados al escanear +se-scan-chart-budget=Bloques generados al escanear +se-scan-alert-interval=Intervalo de alerta de escaneo +se-supercharger-individual-charge-rate=Tasa de carga individual del puerto supercargador (MW) + +[mod-setting-description] +se-meteor-interval=El intervalo base en minutos entre los impactos de un meteorito. Después de cada ataque, se establece que el siguiente ataque ocurra un número aleatorio de minutos entre 1 y este valor. +se-plague-max-runtime=El tiempo de ejecución máximo para el arma biológica, en minutos. Después de que una plaga haya estado infectando durante este tiempo, todas las partículas de la plaga, los árboles y los enemigos se destruyen. +se-planets=No cambiar a la mitad de una campaña. +se-planet-size=No cambiar a la mitad de una campaña. +se-seed=No cambiar a la mitad de una campaña. +se-skip-experimental-warning=La advertencia sobre el inicio de un nuevo juego no aparecerá y no recibirás advertencias actualizadas si el mensaje cambia. +se-print-meteor-info=Te permite ver alertas de meteoritos en la consola después de que la alerta principal se haya desvanecido pulsando la tecla __CONTROL__toggle-console__ key. +se-print-satellite-discovered-nothing=Cuando se lanza un satélite, recibes una alerta que te indica lo que se descubrió. Esta configuración puede desactivar la alerta si no se descubre nada. +se-space-pipe-capacity=La capacidad de fluido para tuberías espaciales. +se-electric-boiler=Agrega una caldera eléctrica al juego. +se-deep-space-belt-speed=Se supone que las cintas de espacio profundo son las más rápidas. Si tienes otros mods que agregan cintas más rápidas, puedes aumentar la velocidad de la cinta de espacio profundo para igualar o superar. +se-deep-space-belt-black=Las recetas de la cinta transporte, el divisor y la subterránea negra se pueden desactivar para reducir el desorden de la interfaz de usuario. +se-deep-space-belt-white=Las recetas de la cinta transporte, el divisor y la subterránea blanca se pueden desactivar para reducir el desorden de la interfaz de usuario. +se-deep-space-belt-red=Las recetas de la cinta transporte, el divisor y la subterránea roja se pueden desactivar para reducir el desorden de la interfaz de usuario. +se-deep-space-belt-yellow=Las recetas de la cinta transporte, el divisor y la subterránea amarilla se pueden desactivar para reducir el desorden de la interfaz de usuario. +se-deep-space-belt-green=Las recetas de la cinta transporte, el divisor y la subterránea verde se pueden desactivar para reducir el desorden de la interfaz de usuario. +se-deep-space-belt-cyan=Las recetas de la cinta transporte, el divisor y la subterránea cianse pueden desactivar para reducir el desorden de la interfaz de usuario. +se-deep-space-belt-blue=Las recetas de la cinta transporte, el divisor y la subterránea azul se pueden desactivar para reducir el desorden de la interfaz de usuario. +se-deep-space-belt-magenta=Las recetas de la cinta transporte, el divisor y la subterránea magenta se pueden desactivar para reducir el desorden de la interfaz de usuario. +se-space-science-pack=Si otro mod agrega una forma de obtener ciencia espacial, entonces se utilizará ese método. Si no hay forma de hacerlo, Space Exploration puede eliminarlo o usarlo como un paquete de ciencia de optimización. +se-never-show-lifesupport=áSi está marcada, la GUI de soporte vital nunca se mostrará, incluso si te estás asfixiando. +se-show-zone-preview=Desmarca para deshabilitar la ventana de vista previa de la zona en Explorador del universo. Si tienes activas algunas de las superposiciones de depuración de Factorio, la ventana de vista previa puede reducir los FPS. +se-pylon-charge-points=Desmarca para eliminar los puntos de carga de las torres de construcción. Esto ayuda a controlar el comportamiento de carga del robot, pero es posible que debas agregar otras opciones de carga a lo largo de las rutas de larga distancia. +se-cmes-max-frequency=El intervalo máximo para la repetición de eyecciones de masa coronal (CME). El valor está en horas, 0 = desactivado. El primer CME está programado para el primer minuto del juego y en su mayoría es inofensivo. El segundo se retrasa aproximadamente 48 horas. La demora entre repeticiones está entre el 50% y el 100% del ajuste de intervalo máximo. Un ajuste distinto de cero solo se aplica a eventos nuevos; una vez que se ha establecido un tiempo estimado, no se verá afectada. Una configuración de cero borrará todas las CME programadas, aunque el cambio puede demorar hasta un minuto en surtir efecto. +se-spawn-small-resources=Añade algunos pequeños parches de recursos adicionales al área de inicio. Los parches de recursos están en un clúster para reducir el tiempo de ejecución entre recursos. +se-show-overhead-button-satellite-mode=Muestra un pequeño botón en la parte superior izquierda de la pantalla para activar el Enlace a Navegación por satélite. +se-show-overhead-button-interstellar-map=Muestra un pequeño botón en la parte superior izquierda de la pantalla para activar el Mapa interestelar. +se-show-overhead-button-universe-explorer=Muestra un pequeño botón en la parte superior izquierda de la pantalla para activar el Explorador del universo. +se-show-pin-help-tooltip=Muestra una descripción emergente ampliada en los botones de marcadores sobre instrucciones de cómo usarlos. +se-scan-search-budget=Escaneo de superficie por satélite: La cantidad de bloques que se pueden verificar para el estado de la exploración. Los valores altos te permiten atravesar los bloques ya escaneados para llegar al borde inexplorado. +se-scan-chart-budget=Escaneo de superficie por satélite: El número de solicitudes de bloques que se pueden agregar al búfer de escaneo en paralelo. No se realizarán nuevas solicitudes de escaneo si los bloques anteriores no han terminado. +se-scan-alert-interval=El intervalo en segundos entre las alertas de actualización del escaneo de superficie. Revelar superficies aumenta el tamaño del archivo guardado del juego, por lo que es mejor no dejar uno encendido y olvidarlo. +se-supercharger-individual-charge-rate=Establece la tasa de carga de cada puerto de carga individual en el supercargador en MW (no afecta la tasa de carga máxima). El valor mínimo (predeterminado) es 90 MW, suficiente para cargar un robot base de una vez, hasta 1000 MW o 1 GW, la tasa de carga máxima del supercargador. + +[string-mod-setting] +se-space-science-pack-Remove=Eliminar completamente +se-space-science-pack-Replace=Reemplazar con paquete de ciencia de cohete +se-space-science-pack-OptimisationUranium=Optimización: Receta Crio-Uranio +se-space-science-pack-OptimisationFish=Optimización: Receta Vita-Vulca-Pescado + +[autoplace-control-names] +planet-size=[img=virtual-signal/se-planet] Tamaño del planeta +se-water-ice=[img=item/se-water-ice] Agua helada (solo en el espacio) +se-methane-ice=[img=item/se-methane-ice] Metano helado (solo en el espacio) +se-cryonite=[img=item/se-cryonite] Crionita (no en planeta inicial) +se-vulcanite=[img=item/se-vulcanite] Vulcanita (no en planeta inicial) +se-vitamelange=[img=item/se-vitamelange] Vitamelange (no en planeta inicial) +se-beryllium-ore=[img=item/se-beryllium-ore] Mineral de berilio (no en planeta inicial) +se-holmium-ore=[img=item/se-holmium-ore] Mineral de holmio (no en planeta inicial) +se-iridium-ore=[img=item/se-iridium-ore] Mineral de iridio (no en planeta inicial) +se-naquium-ore=[img=item/se-naquium-ore] Mineral de naquio (solo en el espacio) + +[map-gen-preset-name] +space-exploration=Space Exploration por defecto + +[map-gen-preset-description] +space-exploration=Valores predeterminados para Space Exploration + +[tooltip-category] +shot=Uso diff --git a/space-exploration_0.5.80/space-exploration/locale/fr/strings.cfg b/space-exploration_0.5.80/space-exploration/locale/fr/strings.cfg new file mode 100644 index 0000000..d91839f --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/locale/fr/strings.cfg @@ -0,0 +1,2376 @@ +spaceship-integrity100=+100 aux contraintes structurelles max du vaisseau spatial +spaceship-integrity300=+300 aux contraintes structurelles max du vaisseau spatial +spaceship-integrity500=+400 aux contraintes structurelles max du vaisseau spatial +arcosphere-discovery=Collectez des arcosphères dans les étendues intersidérales +core-mining-productivity-5=+5% à la productivité du forage à grande profondeur +se-zone-discovery-random=Permet la découverte d'un nouveau corps céleste au hasard +se-zone-discovery-targeted=Permet la découverte d'un nouveau corps céleste riche en une ressource spécifique +se-zone-discovery-deep=Permet la découverte d'une nouvelle zone d'intérêt dans les étendues intersidérales +unlock-spaceship-victory=Débloque la victoire par vaisseau spatial : pilotez un vaisseau avec un Nexus en mode distorsion, vous permettant de maintenir une vitesse de __1__ pendant __2__ s en espace interstellaire. + +[mod-name] +space-exploration=Space Exploration (Exploration spatiale) + +[mod-description] +space-exploration=Construisez des fusées cargo pour envoyer ce que vous souhaitez dans l'espace, et embarquez vous-même pour établir vos avant-postes en orbite ou sur d'autres planètes. Etablissez votre plate-forme de recherche orbitale pour faire progresser les exigeantes sciences spatiales et débloquer de nouvelles options technologiques. Assemblez votre propre vaisseau interstellaire et explorez planètes, lunes, ceintures d'astéroïdes et plus encore. Construisez des rayons de la mort interstellaires et des colonies minières dans l'espace intersidéral. Explorez des ruines anciennes sur des planètes exotiques et des reliques perdues.Il est déconseillé d'ajouter d'autres mods que ceux listés en dépendances tant que Space Exploration est en phase expérimentale. + +[space-exploration] +space-exploration=Exploration spatiale +menu_space-exploration=Exploration spatiale +title_space-exploration=Exploration spatiale +off=Arrêt +on=Marche +close=Fermer +show=Montrer +close-instruction-only-confirm=Fermer (__CONTROL__confirm-gui__) +show-own-location=Afficher son propre emplacement +wdc_auto_off=Ciblage manuel +wdc_auto_on=Ciblage automatique +name=Nom +rename-something=Renommer __1__ +trigger-none=Aucun (Manuel) +trigger-fuel-full=Lancement lorsque carburant plein +trigger-cargo-full=Lancement lorsque cargaison complète +trigger-fuel-full-signal=Lancement si signal vert et lorsque carburant plein +trigger-cargo-full-signal=Lancement si signal vert et lorsque cargaison complète +trigger-cargo-full-or-signal=Lancement si signal vert ou lorsque cargaison complète +destination-type-zone=Position approximative +destination-type-landing-pad=Aire d'atterrissage +button-launch=Lancement +button-launch-disabled=Lancement (Désactivé) +destination-crash-warning=Avertissement : Sélectionnez une aire d'atterrissage pour réduire les risques de crash. +recipe-to=__1__ à __2__ +recipe-from=__1__ de __2__ +simple-a-b=__1____2__ +simple-a-b-space=__1__ __2__ +simple-a-b-comma=__1__, __2__ +simple-a-b-break=__1__\n__2__ +simple-a-b-divide=__1__ / __2__ +simple-bold=[font=default-bold]__1__[/font] +star-map=Carte stellaire +interstellar-map=Carte interstellaire +interstellar-space=Espace intersidéral +planetary-system=Système de __1__ +solar-system=Système de __1__ +remote-view=Liaison satellite [__CONTROL__se-remote-view__] +remote-view-window-title=[img=virtual-signal/se-remote-view] Vue satellite [__CONTROL__se-remote-view__] +remote-view-currently-viewing=En cours de visualisation : +remote-view-instruction=Lancez plus de satellites pour découvrir plus d'étoiles, planètes, lunes et d'autres zones. +remote-view-spaceships=__1__ vaisseau(x) amarré(s) +remote-view-spaceships-anchored=__1__ vaisseau(x) amarré(s) +remote-view-clamps=__1__ fixation(s) pour vaisseau spatial +remote-view-show-hide-resources=Afficher/masquer les ressources +remote-view-show-hide-stats=Afficher/masquer les statistiques +remote-view-show-hide-anchor-info=Afficher/masquer les informations d'amarrage +remote-view-show-hide-danger-zones=Afficher/masquer les zones de danger +open-pins-remote-view=Vue des marquages [__CONTROL__se-remote-view-pins__] +exit-pins-remote-view=Quitter la vue des marquages [__CONTROL__se-remote-view-pins__] +remote-view-history-delete=Supprimer l'historique des surfaces. +remote-view-history-previous=Remonter dans l'histoire des surfaces [__CONTROL__se-remote-view-previous__].\n__1__ +remote-view-history-next=Avancer dans l'histoire des surfaces [__CONTROL__se-remote-view-next__].\n__1__ +remote-view-history-item=__1__ +remote-view-history-item_named=__1__ → __2__ +exit-remote-view=Quitter la liaison satellite [__CONTROL__se-remote-view__] +remote-view-pin-make=Mettre un marquage pour la vue actuelle +remote-view-pins-list=Tous les marquages +remote-view-add-pin=Créez un nouveau marquage à l'emplacement actuel. +remote-view-pin-details=Propriétés du marquage +remote-view-pin-button-tooltip=__1__ → __2__ +remote-view-pin-button-tooltip-hotkey-one=__1__ → __2__ [__CONTROL__se-pin-one__] +remote-view-pin-button-tooltip-hotkey-two=__1__ → __2__ [__CONTROL__se-pin-two__] +remote-view-pin-button-tooltip-hotkey-three=__1__ → __2__ [__CONTROL__se-pin-three__] +remote-view-pin-button-tooltip-hotkey-four=__1__ → __2__ [__CONTROL__se-pin-four__] +remote-view-pin-button-tooltip-hotkey-five=__1__ → __2__ [__CONTROL__se-pin-five__] +remote-view-pin-button-tooltip-hotkey-six=__1__ → __2__ [__CONTROL__se-pin-six__] +remote-view-pin-button-tooltip-hotkey-seven=__1__ → __2__ [__CONTROL__se-pin-seven__] +remote-view-pin-button-tooltip-hotkey-eight=__1__ → __2__ [__CONTROL__se-pin-eight__] +remote-view-pin-button-tooltip-hotkey-nine=__1__ → __2__ [__CONTROL__se-pin-nine__] +remote-view-pin-button-tooltip-hotkey-zero=__1__ → __2__ [__CONTROL__se-pin-zero__] +remote-view-pin-button-tooltip-help-text=\n\n[font=default-bold] Commandes : [/font]\nClic gauche : basculer vers ce marquage\nClic droit : modifier ce marquage\nCtrl+Clic droit : supprimer +remote-view-pin-button-tooltip-help-text-update-position=\nMaj+Clic droit : Mettre à jour la position du marquage +remote-view-pin-name=Nom +remote-view-pin-icon=Icône +remote-view-pin-zoom=Zoom +remote-view-pin-hotkey=Touche de raccourci +remote-view-pin-hotkey-none=Aucun +remote-view-pin-hotkey-one=__CONTROL__se-pin-one__ - __1__ +remote-view-pin-hotkey-two=__CONTROL__se-pin-two__ - __1__ +remote-view-pin-hotkey-three=__CONTROL__se-pin-three__ - __1__ +remote-view-pin-hotkey-four=__CONTROL__se-pin-four__ - __1__ +remote-view-pin-hotkey-five=__CONTROL__se-pin-five__ - __1__ +remote-view-pin-hotkey-six=__CONTROL__se-pin-six__ - __1__ +remote-view-pin-hotkey-seven=__CONTROL__se-pin-seven__ - __1__ +remote-view-pin-hotkey-eight=__CONTROL__se-pin-eight__ - __1__ +remote-view-pin-hotkey-nine=__CONTROL__se-pin-nine__ - __1__ +remote-view-pin-hotkey-zero=__CONTROL__se-pin-zero__ - __1__ +remote-view-pin-location=Emplacement +remote-view-pin-location-position={x=__1__, y=__2__} +remote-view-pin-location-position-button=Mettre à jour la position du marquage +remote-view-pin-location-position-button-tooltip=Réglez immédiatement la position du marquage sur l'emplacement actuellement visualisé. +remote-view-pin-viewer-title=Tous les marquages +remote-view-pin-viewer-misc-row=Divers +remote-view-pin-viewer-spaceship-row=Vaisseaux spatiaux +open-zonelist=Ouvrir l'explorateur d'univers +zonelist-window-title=[img=virtual-signal/se-planet-orbit] Explorateur d'univers [__CONTROL__se-universe-explorer__] +priority-icon=[img=virtual-signal/se-accolade] +priority-tooltip=Priorité (pour trier les zones importantes des zones non pertinentes) +trim-zone-button=[img=item/cliff-explosives] Réduire la surface +trim-zone-button-tooltip=Supprime les blocs en dehors du cadre défini par les constructions du joueur, les entités spéciales et l'origine de la carte. +trim-zone-button-no-surface-tooltip=La surface n'existe pas. +trim-zone-results=Suppression de __1__ blocs de __2__. Surface réduite aux coordonnées X [__3__ à __4__] Y [__5__ à __6__] +delete-zone-button=[img=virtual-signal/se-remove] Supprimer la surface +delete-zone-button-tooltip=Certaines surfaces ne peuvent pas être supprimées. +delete-zone-button-no-surface-tooltip=La surface n'existe pas. +scan-zone-button=[img=item/satellite] Scanner la surface +scan-zone-button-tooltip=Attention : Scanner la surface peut ralentir le jeu pendant l'opération. La vitesse de scan est configurable via les options du mod. Le scan peut être interrompu à tout moment. +scan-zone-button-disabled-tooltip=Vous devez lancer un satellite pour scanner la surface. +stop-scan-zone-button=[img=item/satellite] Arrêter tous les scans +stop-scan-zone-button-tooltip=Arrête tous les scans en cours sur toutes les surfaces. +generic-requires-satellite=Vous devez d'abord lancer un satellite. +remote-view-requires-satellite=Vous devez lancer un satellite pour utiliser la liaison satellite. +satellite-discovered-platform=[color=cyan]Le satellite a découvert une plateforme spatiale en orbite.[/color] Ouvrez l'explorateur d'univers [img=virtual-signal/se-planet-orbit] [__CONTROL__se-universe-explorer__], sélectionnez __1__, et cliquez sur Afficher la surface. Il pourrait y avoir des choses utiles là-haut. +satellite-view-unlocked=Vou avez débloqué la [color=cyan][img=virtual-signal/se-remote-view] liaison satellite[/color]. Elle permet de voir et d'explorer en temps réel la surface de Nauvis, et des autres endroits que vous avez découverts. Appuyez sur [color=green][__CONTROL__se-remote-view__][/color] ou bien sur l'icône de Vue Satellite (à droite de la barre d'accès rapide) pour l'activer. +source-discovered-zone=[color=cyan]__1__ a découvert __2__ : [/color][img=__3__] [color=white]__4__[/color]. Les lieux découverts peuvent être inspectés depuis [img=virtual-signal/se-planet-orbit] l'explorateur d'univers [__CONTROL__se-universe-explorer__]. +discovered-zone=[color=cyan]Découverte d'une nouvelle __1__ : [img=__2__] [/color][color=white]__3__[/color]. +discovered-anomaly-additional=Objet inconnu détecté dans l'anomalie [img=virtual-signal/se-anomaly]. Votre journal d'exploration [img=virtual-signal/informatron] [__CONTROL__informatron__] a été mis à jour. +satellite-discovered-nothing=Un nouveau satellite a été lancé, mais il n'a rien trouvé de nouveau. Il y a peut-être d'autres lieux à découvrir autour d'autres étoiles. +tech-discovered-nothing=Les télescopes n'ont rien trouvé de nouveau près des étoiles. Il y a peut-être d'autres choses à trouver dans l'espace profond. +tech-deep-discovered-nothing=Vous n'avez pas découvert de nouvelle zone d'intérêt dans l'espace intersidéral +galaxy_ship_authenticated=[img=virtual-signal/se-spaceship] Vaisseau spatial à l'abandon : [color=cyan]"Signature biologique authentifiée. Le code d'accès au sas est 2236067964. Transmission du journal de sauvegarde d'urgence."[/color] Votre journal d'exploration [img=virtual-signal/informatron] [__CONTROL__informatron__] a été mis à jour. +space-capsule=Capsule spatiale +invalid_launch_location=Lieu de lancement incorrect +capsule_invalid_launch_location=Lieu de lancement incorrect +capsule_status_invalid_launch_location=Statut : Lieu de lancement incorrect +capsule_status_ready=Statut : Prêt pour le lancement +capsule_not_enough_thrust=Pas assez de poussée pour échapper au puits de gravité __1__ __2__. À insérer dans un silo de fusée cargo. +capsule_destination=Destination : __1__ +capsule_info=Si elle est située dans l'espace, cette capsule peut vous emmener sur la planète ou la lune la plus proche. +player-died=__1__ est mort +launch-suit-warning=Pour éviter d'étouffer, envisagez d'enfiler votre combinaison spatiale à  propulsion avec quelques capsules de support de vie dans votre inventaire. +suffocating-warning=Vous suffoquez. Entrez dans une capsule spatiale ou mettez votre combinaison spatiale avec quelques capsules de support de vie dans votre inventaire. +rocket_survivability_fail=Une fusée cargo a subi des dommages en cours de transport et a dévié de sa trajectoire. Des recherches supplémentaires sur la fiabilité des fusées et la sécurisation de la cargaison sont conseillées. __1__ +respawn-if-stranded=Si vous êtes bloqué, vous pouvez utiliser le raccourci de réapparition [__CONTROL__se-respawn__]. +respawn-options-title=Lieu de réapparition +respawn-button-homeworld=[img=virtual-signal/se-planet] Planète de départ +respawn-button-landing-pad=[img=item/se-rocket-landing-pad] Aire d'atterrissage la plus proche +respawn-button-spaceship=[img=virtual-signal/se-spaceship] Vaisseau spatial le plus proche +respawn-confirm-title=Êtes-vous sur de vouloir réapparaître? +respawn-confirm-yes=[img=virtual-signal/se-death] Réapparition +respawn-confirm-no=Annuler +search-list=Rechercher +clear-search=Effacer la recherche +filter-list=Filtrer +clear-filter=Effacer le filtre +attrition-type-radiation=radiations +attrition-type-wind=vent +attrition-type-spacial-distortion=Distorsion spatiale +zonelist-view-surface=Voir la surface +zonelist-heading-hierarchy=Hiérarchie +zonelist-heading-type=Type de zone +zonelist-heading-name=Nom +zonelist-heading-radius=Rayon +zonelist-heading-primary-resource=Ressource principale +zonelist-heading-attrition=Interférences pour les robots +zonelist-heading-threat=Menace +zonelist-heading-solar=Énergie solaire +zonelist-heading-flags=Repères +zonelist-heading-priority=Priorité +zonelist_filter_star=Inclure les étoiles +zonelist_filter_planet=Inclure les planètes +zonelist_filter_planet-orbit=Inclure les orbites planétaires +zonelist_filter_moon=Inclure les lunes +zonelist_filter_moon-orbit=Inclure les orbites de lunes +zonelist_filter_asteroid-belt=Inclure les ceintures d'astéroïdes +zonelist_filter_asteroid-field=Inclure les champs d'astéroïdes +zonelist_filter_anomaly=Inclure les anomalies +zonelist_filter_spaceship=Inclure les vaisseaux spatiaux +zonelist-resource-bar-tooltip=__1__ __2__\nFréquence : __3__\nTaille : __4__\nRichesse : __5__ +zonelist-resource-bar-tooltip-extended=__1__ __2__\nFréquence : __3__\nTaille : __4__\nRichesse : __5__\n__6__ +zonelist-resources-disclaimer=L'abondance des différentes ressources est approximative [?] +zonelist-resources-disclaimer-tooltip=L'abondance des différentes ressources est estimée à partir de la probabilité d'apparition de celles-ci.\nElle correspond aux paramètres de génération de la surface.\nDe grandes étendues d'eau, l'exigence d'un terrain spécifique ou un rayon trop petit peuvent par exemple empêcher l'apparition de certaines ressources peu abondantes. +resource-terrain-required-se-vulcanite=Nécessite un terrain volcanique +resource-terrain-required-se-cryonite=Nécessite un terrain gelé +resource-terrain-required-se-vitamelange=Nécessite un terrain enherbé +zone-tooltip-type=Type de zone : +zone-tooltip-parent=Parent : +zone-tooltip-threat=Menace : +zone-tooltip-daynight=Cycle jour/nuit : +zone-tooltip-bot-attrition=Interférence pour les robots __1__ : +zone-tooltip-radius=Rayon : +zone-tooltip-solar=Énergie solaire : +zone-tooltip-flags=Repères : +zone-tooltip-closest=Zone la plus proche : +zone-tooltip-destination=Destination : +zone-tooltip-delta-v=∆v depuis __1__ +construction-denied=Ne peut pas être placé ici. +construction-denied-vehicle-in-space=Les véhicules terrestres de peuvent pas être placés dans l'espace. +construction-denied-se-surface=Placement invalide, doit être placé sur une surface de Space Exploration. +construction-denied-linked-container-on-transient-surface=Impossible de placer des conteneurs dans un vaisseau spatial en mouvement. +construction-denied-no-water=Pas d'eau +construction-denied-spaceship-only=Doit être placé sur du plancher de vaisseau spatial +construction-denied-solid-only=Doit être placé sur une planète ou une lune. +currently-viewing=En cours de visualisation : __1__ +fail-board-no-character=Impossible de monter à bord du vaisseau cible, vous devez suivre votre personnage +fail-board-remote-character=Impossible de monter à bord du vaisseau cible, votre personnage n'est pas sur le vaisseau à partir duquel vous essayez d'embarquer. +fail-board-target-anchored=Impossible de monter à bord d'un vaisseau amarré, essayez plutôt de vous amarrer au même endroit. +starmap=Carte stellaire +starmap-button=[img=virtual-signal/se-star] Carte stellaire +back=Retour +back-to=Retour à +spaceship=Vaisseau spatial +planet=Planète +moon=Lune +star=Étoile +orbit=Orbite +something_orbit=Orbite de __1__ +asteroid-belt=Ceinture d'astéroïdes +asteroid-field=Champ d'astéroïdes +anomaly=Anomalie +spaceship-cannot-set-destination-to-self=Impossible de choisir votre lieu actuel comme destination. +spaceship-streamline=Score aérodynamique : __1__ +spaceship-streamline-tooltip=__1__ Score aérodynamique actuel\n__2__ Score aérodynamique maximum\nFaites en sorte que l'avant du vaisseau spatial soit moins volumineux afin d'augmenter l'aérodynamisme +spaceship-launch-energy=Énergie de lancement : __1__ +spaceship-launch-energy-invalid=Énergie de lancement : exige un contrôle d'intégrité valide. +spaceship-launch-energy-tooltip=__1__ Quantité de carburant stockée dans les réservoirs\n__2__ Quantité de carburant nécessaire au lancement +spaceship-speed=Vitesse : __1__ +spaceship-structural-stress-hull=Contraintes structurelles sur la coque : __1__ +spaceship-structural-stress-hull-invalid=Contraintes structurelles sur la coque : indisponible (confinement requis) +spaceship-structural-stress-hull-tooltip=Contraintes structurelles actuelle sur la coque : __1__\nContraintes structurelles sur la coque estimées si toutes les tuiles sont occupées : __2__\nContraintes structurelles maximales sur la coque : __3__ +spaceship-structural-stress-container=Contraintes structurelles liées aux conteneurs : __1__ +spaceship-structural-stress-container-invalid=Contraintes structurelles liées aux conteneurs : indisponible (confinement requis) +spaceship-structural-stress-container-tooltip=__1__ Contraintes structurelles actuelles liées aux conteneurs\n__2__ Contraintes structurelles maximales liées aux conteneurs +spaceship-travel-time-unknown=Durée du voyage : inconnue. Testez la vitesse maximale pour faire une estimation. +spaceship-travel-time-max=Durée du voyage : __1__ s à vitesse maximale. +spaceship-travel-time-current=Durée du voyage : __1__ s à la vitesse actuelle. +spaceship-closest-location-unknown=Lieu le plus proche : __1__ inconnue +spaceship-closest-location=Lieu le plus proche: __1__ +spaceship-location-spatial-distortion=Distorsion spatiale : __1__ +spaceship-location-stellar-x=Quadrant X : __1__ +spaceship-location-stellar-y=Quadrant Y : __1__ +spaceship-location-star-gravity-well=Puits de gravité stellaire : __1__ +spaceship-location-planet-gravity-well=Puits de gravité planétaire : __1__ +spaceship-asteroid-density=Densité d'astéroïdes : __1__ +spaceship-asteroid-density-default=Éparses +spaceship-asteroid-density-belt=Dense +spaceship-asteroid-density-field=Dangereuse +spaceship-travel-status=Statut du trajet : __1__ +spaceship-integrity-status-valid=Vérification d'intégrité : Valide : __1__ +spaceship-integrity-status-invalid=Vérification d'intégrité : Non valide : __1__ +spaceship-button-launch=Lancement +spaceship-button-launch-tooltip=Prêt au lancement +spaceship-button-launching=Lancement en cours +spaceship-button-launching-tooltip=Merci de patienter +spaceship-button-launch-disabled=Lancement (Désactivé) +spaceship-button-launch-disabled-fuel-tooltip=Nécessite du carburant dans les réservoirs +spaceship-button-launch-disabled-integrity-tooltip=Nécessite un contrôle d'intégrité valide +spaceship-button-anchor=Amarrer +spaceship-button-confirm-anchor=Confirmer l'amarrage +spaceship-button-anchor-to=Amarrage à __1__ +spaceship-button-anchor-on=Amarrage sur __1__ +spaceship-button-stop=Arrêter +spaceship-button-start=Démarrage +spaceship-button-board=Embarquer dans __1__ +spaceship-button-scouting-back=Retour +spaceship-button-scouting-back-tooltip=Annuler la recherche des amarrages +spaceship-name-the=__1__ +spaceship-button-start-integrity-check=Démarrer le contrôle d'intégrité +spaceship-target-speed=Objectif de vitesse : +spaceship-target-speed-unlimited=Objectif de vitesse : illimitée +spaceship-target-speed-normal=Objectif de vitesse : __1__ (Normal) +spaceship-target-speed-asteroid-belt=Objectif de vitesse : __1__ (Ceinture d'astéroïdes) +spaceship-target-speed-asteroid-field=Objectif de vitesse : __1__ (Champ d'astéroïdes) +spaceship-target-speed-manual-override=Objectif de vitesse : __1__ (Contrôle manuel) +spaceship-target-speed-circuit=Objectif de vitesse : __1__ (Contrôlé par la logique) +spaceship-target-speed-normal-tooltip=Objectif de vitesse en vol normal\nDensité d'astéroïdes : __1__% +spaceship-target-speed-asteroid-belt-tooltip=Objectif de vitesse dans une ceinture d'astéroïdes\nDensité d'astéroïdes : __1__% +spaceship-target-speed-asteroid-field-tooltip=Objectif de vitesse dans un champ d'astéroïdes\nDensité d'astéroïdes : __1__% +spaceship-heading-destination=Destination +list-destinations-alphabetically=Lister les destinations par ordre alphabétique +spaceship-travel-message-new-course-plotted=Nouvelle trajectoire établie +spaceship-travel-message-exiting-planet-gravity=Sortie du puits de gravité planétaire +spaceship-travel-message-navigating-planet-gravity=Navigation dans le puits de gravité planétaire +spaceship-travel-message-exiting-star-gravity=Sortie du puits de gravité stellaire +spaceship-travel-message-navigating-star-gravity=Navigation dans le puits de gravité stellaire +spaceship-travel-message-spatial-distortions=Navigation dans les distorsions spatiales +spaceship-travel-message-navigating-interstellar=Navigation dans l'espace interstellaire +spaceship-travel-message-at-destination=À destination. +spaceship-check-message-passed=Test réussi : le vaisseau passe le contrôle d'intégrité. +spaceship-check-message-failed-containment=Échec : pas de confinement total autour du poste de pilotage. Vérifiez que toutes les parois du vaisseau spatial sont bien placées sur du plancher de vaisseau spatial sans aucune brèche. +spaceship-check-message-failed-console-floor=Le poste de pilotage doit être placé sur du plancher de vaisseau spatial. +spaceship-check-message-failed-empty=Aucun plancher de vaisseau trouvé connecté à un poste de pilotage correctement confiné. +spaceship-check-message-failed-unknown-bounds=Erreur : limites du vaisseau non trouvées. +spaceship-check-message-failed-stress=Erreur : les contraintes structurelles dépassent votre limite technologique. +spaceship-check-message-checking-console-floor=Vérification du plancher autour du poste de pilotage. +spaceship-check-message-checking-containment=Vérification du confinement. +spaceship-check-message-checking-connectivity=Vérification de la connectivité du poste de pilotage. +spaceship-check-message-no-console=Aucun poste de pilotage. +spaceship-check-message-did-not-complete=La vérification ne s'est pas terminée. +spaceship-check-message-unstable=Instable : des sections se détacheront lors des manœuvres. +spaceship-check-message-valid-but-disconnecting=Valide mais instable : des sections sont susceptibles de se détacher. +spaceship-warning-sections-disconnecting=Des sections sont en train de rompre. Arrêtez-vous pour réparer. +informatron-open-help=Ouvrir dans l'InformaTron +page_space_exploration_text_1=Bienvenue dans Space Exploration. Ce mod propose déjà beaucoup de contenu, mais il est encore sous statut[font=default-bold]expérimental[/font] et en développement très actif. Certains bugs peuvent avoir échappé à notre vigilance.\n\n[font=heading-2]Statut expérimental ?[/font]\n\nSpace Exploration change encore à un rythme rapide et je consacre tout mon temps dans le développement de nouvelles fonctionnalités au détriment de la compatibilité avec d’autres mods.[color=red]Il est conseillé de ne pas jouer avec d’autres mods que ceux requis et ceux recommandés par Space Exploration.[/color]\n\nTant que dure la phase expérimentale, si un autre mod provoque des soucis tels que la corruption de votre sauvegarde, des crashs, des soucis d’arbre technologique ou d’autres problèmes importants, il sera rapidement indiqué comme non compatible pour protéger les nouveaux joueurs. Cela signifie que plus vous utilisez un grand nombre de mods, plus la probabilité que l’un d’entre eux n’ait pas encore été identifié comme incompatible est élevée. Vous pouvez bien sûr modifier votre fichier info.json pour contourner cette restriction et essayer de jouer avec un mod incompatible, mais ce sera à vos propres risques : je ne pourrais pas vous aider si votre partie devient injouable.\n\nUne autre conséquence de la phase expérimentale est que la plupart des autres mods qui remanient une grande partie de Factorio sont pour le moment considérés comme incompatibles, mais l’objectif à plus long terme est de rendre ces mods possibles à jouer ensemble. Krastorio 2 est un exemple de ce travail déjà bien engagé.\n\nVous pourrez trouver plus d’informations à propos de la compatibilité inter-mods sur le wiki de Space Exploration. Si vous souhaitez contribuer au travail sur la compatibilité, n’hésitez pas à prendre contact sur le serveur Discord. Gardez cependant à l’esprit que ce n’est pas la première priorité dans le développement de Space Exploration pour le moment.\n\n[font=heading-2]Mods recommandés[/font] \n\n • AAI Containers & Warehouses : de plus grands coffres dans l’esprit du jeu de base.\n\n • Module Inserter : vous permet d’insérer des modules dans vos machines en mode vue satellite.\n\n • Equipment Grid Logistic Module : un équipement pour véhicules tels que le Spidertron permettant de passer des demandes et de se débarrasser des objets inutiles via des requêtes logistiques.\n\n • Grappling Gun : vous permet de sauter au-dessus des bâtiments, des lacs et de vous échapper rapidement d’un combat défavorable. Dans l’espace, vous pourrez l’utiliser pour revenir sur la plateforme spatiale si vous en tombez. Vous permet également de vous inviter dans un vaisseau spatial, ce qui est particulièrement pratique lorsqu’ils sont en mouvement. • Burner Leech : permet aux bras robotisés thermiques de se ravitailler depuis n’importe quelle source (par ex un four), pratique au début du jeu.\n\n • Text Plates : vous permet de placer des tuiles de texte sur le sol, très pratique pour identifier vos pas de tir, zones d’atterrissage, etc.\n\n • Even Distribution : une aide pratique en début de jeu lorsque vous devez encore ravitailler vos multiples machines à la main.\n\n • Combat Mechanics Overhaul : aide à la défense lorsque vous n’êtes plus sur la planète si vous activez l'option "Walls Block Spitters". Réparer les murs coûte moins cher que de reconstruire vos tourelles.\n\n • Bullet Trails : amélioration graphique pour voir sur quoi vos tourelles tirent.\n\n[font=heading-2]Réglages recommandés[/font]\n\nVous DEVEZ avoir tous les biomes du mod Alien Biomes activés, faute de quoi la partie se plantera plus tard dans le jeu.\n\nUne partie Space Exploration est plus longue qu’une partie normale, réduire le facteur d’évolution ennemi peut donc être une bonne idée.\n\nVous ne devriez pas changer à la hausse les réglages de ressources de votre planète de départ (sauf pour une partie en mode marathon ou avec des recettes plus chères), cela réduirait le besoin de s’installer sur d’autres planètes pour des gisements plus abondants.\n\n\n[font=heading-2]Liens utiles[/font]\n\nWiki de Space Exploration : https://spaceexploration.miraheze.org \n\nDemandez de l’aide ou suivez le développement du mod sur Discord : https://discord.gg/ymjUVMv \n\nPlus de 2000 heures ont été consacrées au développement de ce mod. Si vous l’appréciez, vous pouvez le témoigner en me supportant sur Patreon : https://www.patreon.com/earendel +menu_meteor_defence=[img=virtual-signal/se-meteor] Défense contre les météorites +title_meteor_defence=Défense contre les météorites +page_meteor_defence_text_1=Des météorites tombent du ciel et endommagent les entités sur lesquelles elles tombent. La plupart des météorites sont constituées de minerais, mais certaines planètes peuvent avoir des types de météorites particuliers. Les pluies de météorites menacent la plupart des zones à intervalles aléatoires. Vous pouvez changer la durée max entre deux épisodes dans les paramètres du mod.\n\nLe nombre de météorites est lui aussi aléatoire : 50% pour une seule, 25% pour 2, 12,5% pour 3, 6,25% pour 4, etc...\n\nLes défenses anti-météorites peuvent détruire les météorites menaçantes avant qu'elles ne puissent causer des dégâts. Elles se déclencheront en séquence, les dernières installations n'auront donc pas à faire feu si toutes les météorites ont été détruites par les premières. Les installations de défense requièrent des munitions spécifiques, et une grande quantité d'énergie pendant leur temps de rechargement. La puissance de recharge après tir n'est pas négligeable, il est donc sage d'adapter vos défenses au risque encouru, sans les surdimensionner. +menu_coremining=[img=item/se-core-miner] Forage à grande profondeur +title_coremining=Forage à grande profondeur +page_coremining_text_1=Le forage à grande profondeur ne peut être réalisé que sur les planètes et les lunes. Les produits du forage de chaque planète et chaque lune seront différents fonction des ressources de chacune d'entre elles. Les fragments de Nauvis permettront d'obtenir un mélange des différentes ressources principales, mais la plupart des endroits produiront essentiellement la ressource locale la plus abondante. Le forage à grande profondeur requiert une grande puissance électrique, mais vous pourrez en partie la couvrir grâce au charbon, au pétrole et à l'uranium extraits.\n\nLes foreuses grande profondeur consomment nettement plus d'énergie que les foreuses classiques, et plus vous aurez de foreuses sur la même surface, moins chacune d'entre elles sera efficace. Leur immense avantage est de ne jamais tomber à court de ressources - il peut être très utile de mettre en place une foreuse dès le début du jeu qui se mettra en marche lors de vos surplus de production électrique. Sur une petite planète, l'énergie solaire et le forage à grande profondeur pourraient être le seul moyen d'obtenir assez de ressources pour quitter la surface. Plus tard dans le jeu, les améliorations de productivité minière bénéficieront grandement à cette technologie. Il est préférable de mettre en place quelques foreuses d'excavation sur de nombreuses planètes, plutôt qu'énormément sur la même. +menu_beacons=[img=item/se-wide-beacon-2] Diffuseurs de modules +title_beacons=Diffuseurs de modules +page_beacons_text_1=[font=heading-2]Surcharge de diffuseurs [img=virtual-signal/se-beacon-overload][/font]\n\nLa surchage de diffuseurs est un remaniement du fonctionnement des diffuseurs de modules de Factorio. Vos installations ne peuvent être sous l’effet que d’un seul diffuseur – si plusieurs affectent la même machine, celle-ci sera en surcharge et s’arrêtera complètement.\n\nCe remaniement augmente aussi le nombre d’emplacements dans les diffuseurs de modules et encourage donc l’utilisation de modules avancés pour des bonus maximum. Ce changement permet également davantage d’approches dans la conception de vos lignes d’assemblage.\n\nLe premier diffuseur de module que vous débloquez est beaucoup plus puissant que celui du jeu de base, mais il n’est pas possible de cumuler les effets de plusieurs d’entre eux sur la même machine : les bonus maximum sur une ligne d’assemblage sont réduits par rapport au jeu de base.\n\nUne fois que vous aurez accès aux diffuseurs à grande portée, vous pourrez bénéficier d’économies substantielles dans le nombre de modules requis pour une ligne de production, mais vous serez aussi plus libre dans la conception de celle-ci ; tout particulièrement lors de l’utilisation de grandes installations mettant en jeu beaucoup de composants et de fluides différents.\n\nUne icône de surcharge apparaitra sur les installations sous l’effet de plusieurs diffuseurs, et celles-ci stopperont toute production. Elles seront toujours alimentées à leur puissance électrique minimale dans ce cas. +menu_launching_satellites=[img=item/satellite] Lancement de satellites +title_launching_satellites=Lancement de satellites +page_launching_satellites_text_1=Vous avez lancé [color=cyan]__1__[/color] satellites.\n\n[font=heading-2][img=virtual-signal/se-remote-view] Liaison satellite [__CONTROL__se-remote-view__][/font]\n\nLorsque vous lancez un satellite de navigation depuis le silo à fusée pour satellites, vous débloquez la [img=virtual-signal/se-remote-view]Vue satellite. Vous y avez accès en utilisant la touche [__CONTROL__se-remote-view__]. En mode Vue satellite, votre caméra est détachée de votre personnage, vous pouvez ainsi défiler très rapidement sur la surface et même explorer les zones pas encore révélées. Certaines actions sont impossibles dans ce mode : vous ne pourrez par exemple pas directement placer ou récupérer des entités. Beaucoup de choses restent toutefois possibles, comme utiliser des plans, planifier la déconstruction, placer des entités fantômes, prévoir des liaisons logiques, modifier les recettes des assembleurs, les paramètres des calculateurs, etc...\n\n[font=heading-2][img=virtual-signal/se-planet-orbit]Explorateur d'Univers [__CONTROL__se-universe-explorer__][/font]\n\nLa liaison satellite vous permet également de visualiser d'autres surfaces vers lesquelles vous avez déjà lancé un satellite : planètes, lunes, ceintures d'astéroïdes, orbites planétaires, etc... Utilisez la touche [__CONTROL__se-universe-explorer__] pour afficher la liste des zones découvertes. Si vous avez lancé un satellite, vous pouvez utiliser "Voir la surface" pour l'inspecter. Il peut être préférable d'effectuer une reconnaissance par satellite d'une planète avant d'embarquer personnellement vers celle-ci.\n\nLancer des satellites vous permet également de découvrir de nouveaux objets dans le système stellaire local (plus d'informations dans la section Découverte de nouvelles zones).\n\n[font=heading-2][img=item/se-satellite-telemetry]Mesures satellite[/font]\n\nUn lancement de satellite permet d'obtenir des mesures satellite, un composant essentiel des [img=item/se-rocket-science-pack] Packs de science aérospatiale.\n\n[font=heading-2][img=item/se-space-probe-rocket] Sondes spatiales[/font]\n\nLe [img=item/se-space-probe-rocket-silo] silo à fusée pour sondes spatiales n'est pas un silo à fusée satellite mais est conçu pour être utilisé dans l'espace. Au lieu de construire une fusée, il lance des [img=item/se-space-probe-rocket] fusées pour sondes spatiales préfabriquées. Une fusée pour sondes spatiales est beaucoup moins chère qu'une fusée satellite normale, et elle peut être préassemblée dans un centre de fabrication au lieu de devoir apporter les ressources au silo à fusées. Un silo à fusée pour sondes spatiales peut lancer des satellites à bas prix, mais peut également lancer des sondes et des collecteurs plus spécialisés à partir d'emplacements spécifiques dans l'espace. +menu_pinned_locations=[img=se-pin-list] Marquages de lieux +title_pinned_locations=Marquages de lieux +page_pinned_locations_text_1=Après avoir déverrouillé la [img=virtual-signal/se-remote-view] Vue satellite, vous avez accès aux Marquages de lieux, un outil qui vous permet de passer rapidement à différentes parties de votre usine sur toutes les surfaces que vous avez explorées.\n\nLes lieux peuvent être marqués à l'aide du bouton + de la fenêtre de Vue satellite. Vous pouvez régler des touches de raccourci pour les lieux marqués lorsque vous les ajoutez ou les modifiez. Cela vous permet d'accéder rapidement aux emplacements importants en appuyant sur une touche du clavier, sans avoir à passer par l'explorateur d'univers.\n\n[font=heading-2]Marquages temporaires[/font]\nLes lieux marqués n'ont pas besoin d'être configurés via le menu contextuel de création de marquages. Ils peuvent également être définis à l'aide de la touche de raccourci "Définir un marquage". Cela crée un emplacement marqué sans nom ni icône, mais on peut y accéder immédiatement avec la touche de raccourci "Aller au marquage" associée.\n\n[font=heading-2]Tous les marquages [__CONTROL__se-remote-view-pins__][/font]\nLes marquages ne sont affichées dans la barre d'outils que pour la surface que vous visualisez. Cependant, les touches de raccourci peuvent être utilisées pour accéder à un emplacement sur une autre surface, qu'il soit visible ou non dans la barre d'outils. Si vous souhaitez avoir une vue d'ensemble de tous les emplacements marqués, appuyez sur [__CONTROL__se-remote-view-pins__] pour afficher la liste de tous les marquages. Dans cette vue, les marquages sont organisés en rangés en fonction de la surface sur laquelle ils se trouvent. Si une surface ne possède qu'un seul marquage, sa rangée sera réduite à celle de son étoile mère.\n\n[font=heading-2]AAI Programmable Vehicles[/font]\nLes touches de raccourci par défaut pour le réglage et l'affichage des emplacements marqués entrent en conflit avec celles par défaut pour la création et la sélection des groupes de contrôle pour les véhicules programmables AAI. Si vous utilisez les deux mods, vous devrez ajuster vos touches de raccourci afin d'obtenir le comportement attendu. +menu_zone_discovery=[img=virtual-signal/se-planet-orbit] Découverte de nouvelles zones +title_zone_discovery=Découverte de nouvelles zones +page_zone_discovery_text_1=Un grand nombre d'étoiles, de planètes, de ceintures et de champs d'astéroïdes peuvent être découvertes dans cette région de l'espace.\n\n[font=heading-2]Inspection par liaison satellite[/font]\n Lancer un satellite de navigation permettra de découvrir une nouvelle planète, lune ou ceinture d'astéroïdes dans le système stellaire de lancement. Si vous avez découvert tous les objets de celui-ci, d'autres étoiles peuvent être découvertes, mais les satellites ne seront pas en mesure de révéler les corps en orbite autour de celles-ci. Les satellites ne sont pas non plus adaptés pour la découverte d'objets d'intérêt dans les espaces interstellaires.\n\n[font=heading-2]Recherche scientifique de nouvelle zones[/font]\nVous pouvez utiliser vos téléscopes spatiaux pour rechercher de nouvelles zones, avec la recherche technologique "Découverte de nouvelle zone". La recherche la plus rudimentaire permettra de révéler au hasard une nouvelle étoile, planète, lune ou ceinture d'astéroïdes.\n\n[font=heading-2]Recherche ciblée de nouvelles zones[/font]\nLa recherche de ciblée nouvelle zone utilise le même principe, mais est orientée dans les zones les plus susceptibles de révéler un corps riche dans la ressource que vous ciblez (voir ci-dessous). Une planète ne peut jamais être découverte avant son étoile, ni une lune avant sa planète, ne vous attendez donc pas à la découverte idéale à tous les coups.\n\n[font=heading-2]Recherche de corps dans l'espace intersidéral[/font]\nLa recherche de corps dans l'espace instersidéral vise à identifier les zones d'intérêt dans les vastes étendues entre les étoiles et est le seul moyen de révéler des champs d'astéroïdes. Ce sont les seuls endroits dans lesquels vous pourrez trouver du Naquium. Il n'est pas possible de cibler une ressource particulière avec cette recherche.\n\n[font=heading-2]Ressource visée pour la recherche ciblée:[/font] +menu_cargo_rockets=[img=virtual-signal/se-cargo-rocket] Fusées cargo +title_cargo_rockets=Fusées Cargo +page_cargo_rockets_text_1=Les fusées cargo sont lancées depuis le Silo à fusées cargo.\n\nVous avez lancé [color=cyan]__1__[/color] fusées cargo.\n\nModificateur de perte de chargement basé sur votre technologie : pourcentage de perte maximum réduit de [color=cyan]__2__%[/color].\n\nModificateur de succès basé sur votre technologie : probabilité d'échec des fusées cargo réduit de [color=cyan]__3__%[/color].\n\nModificateur de réutilisation basé sur votre technologie : [color=cyan]__4__[/color] +/- 10 (max 100) sections de fusée récupérables à l’atterrissage.\n\n[font=heading-2]Lancer vos premières fusées cargo[/font]\n\nAvant de pouvoir lancer vos premières fusées cargo, vous devez avoir réussi le lancement d’un satellite depuis le silo à fusées satellite (silo du jeu de base) avec le mod Space Exploration installé.\n\nUne fois que vous avez assemblé et placé votre Silo à fusées cargo, vous aurez besoin d’assembler et de remplir les réservoirs de votre fusée:\n\n • 100 sections de fusée cargo insérées dans le silo (20 d’entre elles pourront être récupérées à destination, plus avec les bonnes technologies)\n • 1 capsule spatiale insérée dans le silo. La capsule sera toujours récupérée à destination, et peut vous ramener depuis une orbite planétaire vers sa surface.\n • Une grande quantité de carburant pour fusée liquide, à alimenter depuis l’une des 8 connections près des coins du silo. La quantité de carburant nécessaire dépend de la gravité du lieu de lancement (une planète à grand rayon nécessitera plus de carburant) et de la distance de la destination. Si vous sélectionnez « N’importe quelle aire d’atterrissage valide » comme destination, la fusée embarquera assez de carburant pour n’importe laquelle des destinations possibles.\n\nVous pouvez embarquer vous-même dans la fusée depuis la porte d’entrée du silo (appuyez sur __CONTROL__toggle-driving__). Vous devriez vérifier que vous avez équipé une combinaison spatiale pourvue d’un module de support de vie et que vous disposez de capsules de support de vie si vous voulez vous rendre dans une zone spatiale.\n\nVotre première fusée vers une destination en particulier n’aura nulle part pour atterrir, et s'écrasera après largage de la cargaison et de la capsule. Un crash occasionnel est toujours possible même avec une aire d’atterrissage, mais le chargement est réparti dans différentes nacelles larguées automatiquement – vous ne perdrez donc jamais tout le chargement.\n\nVous devriez prévoir une aire d’atterrissage (et suffisamment d’échafaudage de plateforme spatiale si vous vous rendez en orbite) lors de votre premier voyage afin de permettre la réception dans de bonnes conditions des fusées suivantes.\n\nDe même, prévoir une aire sur votre lieu de départ vous permettra d’y revenir plus aisément, plutôt que d’être largué à un point aléatoire de la surface lors du trajet retour. \n\n[font=heading-2]Destinations[/font]\n\nUne fois votre aire d’atterrissage placée, soyez sûr de bien la spécifier comme destination dans le silo à fusées cargo. Il est possible de le faire même en mode Vue satellite. Les fusées ne se lanceront toutefois pas vers une aire qui contient des objets, soyez donc sur de bien la vider après chaque atterrissage.\n\nLes destinations plus éloignées présentent une livraison moins fiable. Certains types de destination, comme les champs d'astéroïdes, ont des pénalités de sécurité supplémentaires, mais celles-ci peuvent être atténuées par des recherches.\n\n[font=heading-2]Contrôle logique simple[/font]\n\nLe silo à fusées cargo envoie un signal logique du nombre de sections de fusées déjà insérées. Vous pouvez donc contrôler vos bras automatisés avec une condition [Section de fusées cargo < 100] pour empêcher l’insertion de plus de sections qu’il n’est nécessaire pour assembler la fusée (les sections en trop seraient alors embarquées comme chargement).\n\nSi vous avez défini un mode de lancement automatique pour votre silo, veillez bien à ce que l’aire d’atterrissage ciblée soit bien vide : une fusée ne se lancera pas si l’aire cible contient des objets.\n\nSi vous sélectionnez la destination "Toute aire d'atterrissage avec un nom donné", le programme recherchera toutes les aires d'atterrissage avec le nom correspondant sur n'importe quelle surface. Des aires d'atterrissage soigneusement nommées, combinées à l'impossibilité de viser une aire d'atterrissage qui n'est pas vide, permettent de constituer facilement un système logistique de fusées.\n\n[font=heading-3]Signaux logiques d’entrée[/font]\n\n[img=virtual-signal/signal-green] Signal vert : peut déclencher le lancement de la fusée si vous avez configuré le silo dans un mode de lancement qui utilise ce signal.\n\n[font=heading-3]Signaux logiques de sortie[/font]\n\n[img=virtual-signal/signal-E] Signal E : nombre d’emplacements de chargement vides.\n\n[img=virtual-signal/signal-F] Signal F : nombre d'emplacements de chargement remplis.\n\n[img=virtual-signal/signal-L] Signal L : quantité de carburant requise pour la/les destination(s) sélectionnée(s). \n\n[img=virtual-signal/se-cargo-rocket] Signal Fusée Cargo : envoie une valeur de 1 si la fusée est assemblée (1 capsule et 100 sections).\n\n[img=item/se-space-capsule] Signal Capsule Spatiale : compte le nombre de capsules dans la fusée, en additionnant celle utilisée pour l’assemblage et celles comprises dans le chargement.\n\n[img=item/se-cargo-rocket-section] Signal Section de fusée cargo : compte le nombre de sections dans la fusée, en additionnant celles utilisées pour l’assemblage et celles comprises dans le chargement.\n\n[img=fluid/se-liquid-rocket-fuel] Signal Carburant pour fusée liquide : retourne la quantité de carburant chargée dans le silo. +menu_delivery_cannons=[img=item/se-delivery-cannon] Canons logistiques +title_delivery_cannons=Canons logistiques +page_delivery_cannons_text_1=Les canons logistiques sont des canons hybrides, utilisant à la fois un explosif conventionel et un rail électromagnétique permettant d'envoyer une charge utile avec une portée interplanétaire. Ils peuvent seulement envoyer une charge homogène de matériaux bruts capables de résister à l'intense accélération. Vous ne pourrez pas les utiliser pour envoyer des composants ou des structures complexes.\n\nUn canon logistique n'a qu'un point cible, sans contrôle des conditions à destination : il fera feu aussi longtemps qu'il est chargé et alimenté. Vous pouvez mettre en place un contrôle de la mise à feu en n'insérant les capsules de livraison ou les ressources que lorsque nécessaire.\n\nQuand une capsule de livraison frappe le sol, elle cause des dégâts et détruit la majorité des ressources livrées. Un dispositif de capture de capsules peut assurer la bonne réception de celles-ci, mais doit être vidé entre deux réceptions. Plusieurs canons peuvent cibler le même dispositif de capture.\n\nIl est conseillé de bien veiller à ce que ces dispositifs soient rapidement déchargés, ou bien de restreindre le chargement des canons en utilisant la transmission de signal à grande distance.\n\nLes canons logistiques ont une capacité de 1GJ et consomment 50MW lorsqu'ils sont en charge. La portée du canon est limitée par la quantité d'énergie qu'il peut stocker. Le lancement de cargaisons à des endroits plus éloignés nécessite plus d'énergie. Certaines destinations peuvent nécessiter plus d'énergie que ce que le canon de livraison peut stocker, de sorte qu'il ne pourra jamais fonctionner. Vous pouvez avoir recours à un système de relais de canons logistiques à mi-chemin pour envoyer la cargaison en deux étapes. +menu_steam_power=[img=item/se-big-turbine] Énergie vapeur +title_steam_power=Énergie vapeur +page_steam_power_text_1=Le système de production d'énergie à partir de la vapeur dans Space Exploration est largement développé. Il existe de nouvelles façons de générer de la chaleur et de la vapeur, et de nouvelles façons de consommer la vapeur pour créer de l'énergie électrique.\n\n[font=heading-2][img=item/se-electric-boiler] Chaudières électriques[/font]\n\nAlors que la chaudière ne peut produire de la vapeur qu'en utilisant des sources de combustible, la chaudière électrique produit de la vapeur en consommant de l'électricité. La vapeur produite par la chaudière électrique contient moins d'énergie que l'électricité utilisée pour transformer l'eau en vapeur. Par conséquent, elle n'est pas utile pour la production normale d'énergie et ne peut pas être utilisée comme boucle énergétique infinie. Au lieu de cela, la vapeur peut être stockée dans des réservoirs de stockage, ce qui permet d'économiser l'énergie afin de pouvoir l'utiliser ultérieurement pour la production d'énergie. Ce système peut offrir une capacité de stockage d'énergie supérieure à celle des accumulateurs au même coût, mais il est moins rentable sur le plan énergétique que les accumulateurs. La vapeur à haute température est encore plus économe en termes d'espace.\n\nLa chaudière électrique peut produire de la vapeur à basse température pour les recettes qui nécessitent de la vapeur mais qui ne se soucient pas de la température, ou faire bouillir de l'eau juste pour s'en débarrasser.\n\n[font=heading-2][img=item/se-condenser-turbine] Turbine à condensation[/font]\n\nCertains lieux de l'exploration spatiale sont dépourvus de toute source naturelle d'eau (ex. orbites ou planètes sans eau). Dans ces endroits, l'utilisation de l'énergie à vapeur avec des turbines à vapeur peut sembler absurde, car le flux d'eau constant requis par les turbines à vapeur ne pourrait pas toujours être fourni par des sources extérieures. Dans ces cas, les turbines à condensation s'avèrent incroyablement pratiques. Les turbines à condensation fonctionnent comme les turbines à vapeur normales, à une différence près : au lieu d'évacuer la vapeur entrante dans l'atmosphère, la vapeur est condensée à nouveau en eau et sort de la turbine. Cela permet d'utiliser les turbines à condensation dans un circuit (généralement) fermé où seules de petites quantités d'eau sont nécessaires pour recharger le système. Notez que les turbines à condensation ont un rendement énergétique légèrement inférieur à celui des turbines à vapeur, ce qui signifie que vous obtiendrez un peu moins de puissance à partir de la même quantité de chaleur lorsqu'elles fonctionnent avec des turbines à condensation plutôt qu'avec des turbines à vapeur ; c'est le prix à payer pour récupérer l'eau.\n\n[font=heading-2][img=item/se-big-turbine] Vapeur haute température[/font]\n\nÀ un certain moment, l'utilisation de la vapeur pour créer de grandes quantités d'énergie commence à devenir difficile à gérer en raison du nombre de turbines à vapeur nécessaires. Pour contourner ce problème de place, on peut utiliser de la vapeur haute température à la place. Produite par des échangeurs de chaleur haute température et consommée par des générateurs à turbine haute température, la vapeur haute température est incroyablement dense en énergie. Elle peut être utilisée pour réduire considérablement la taille de la production d'énergie à partir de la vapeur. Pour utiliser les échangeurs de chaleur haute température, il faut une source de chaleur. Les réacteurs nucléaires ne peuvent pas atteindre une température suffisante pour fonctionner avec des échangeurs de chaleur haute température. À la place, il faut utiliser soit un récepteur de faisceau d'énergie, soit un réacteur à antimatière comme source de chaleur. Les conduites de chaleur standard ne sont pas capables de transférer de la chaleur haute température ; seules les conduites de chaleur au Naquium en sont capables. Cela signifie que jusqu'à ce que les conduites de chaleur au Naquium soient disponibles, les échangeurs de chaleur haute température doivent être placés directement à côté de la source de chaleur haute température. +menu_lifesupport=[img=item/se-lifesupport-equipment-1] Support de vie +title_lifesupport=Support de vie +page_lifesupport_text_1=Le support de vie est assuré par un ou plusieurs équipements de support de vie insérés dans votre équipement, qui consomment des capsules de support de vie pour fonctionner. Vous aurez besoin de ces systèmes pour explorer et survivre dans un environnement hostile.\n\nCes équipements peuvent être fabriqués dans une installation de support de vie.\n\nLes capsules de support de vie fourniront les ressources nécessaires au bon fonctionnement du module de support de vie et seront peu à peu consommées. L’utilisation d’une capsule sera visualisée par une barre qui diminuera peu à peu, et une nouvelle capsule sera consommée directement depuis votre inventaire lorsque la première expirera.\n\nL'équipement de support de vie doit être placé dans votre grille d’équipement. Les combinaisons spatiales en incluent déjà un, mais des modules supplémentaires peuvent être placés dans les emplacements d’équipement pour améliorer l’efficacité du support de vie. Un équipement de support de vie placé dans une autre tenue qu’une combinaison spatiale vous protégera d’un environnement planétaire hostile, mais pas du vide de l’espace.\n\n[font=heading-2]Environnements hostiles[/font]\nLes environnements hostiles sont tous les lieux impropres à la vie sans mesures de protection appropriées. Votre équipement de support vie vous permettra de vous y aventurer en assurant la régulation de votre corps en température et en pression, en vous fournissant eau, oxygène et nourriture et en vous protégeant des radiations. Les deux principaux types d’environnement hostiles sont:\n\nL’espace : une combinaison spatiale y est nécessaire pour assurer le bon fonctionnement du support de vie, vous suffoqueriez dans tout autre type d’équipement même muni de support de vie.\n\nLes environnements planétaires hostiles : certaines planètes et lunes peuvent présenter des conditions extrêmes (climat très chaud ou glacial, radiations…) rendant nécessaire l’utilisation du support de vie. Une arme à agent biologique peut également rendre une planète entière invivable sans support de vie. Sur ces surfaces, il n’est pas nécessaire de disposer d’une combinaison spatiale, aussi longtemps que votre équipement est pourvu d’un module de support de vie. +menu_space_sciences=[img=item/se-astronomic-science-pack-2] Sciences spatiales +title_space_sciences=Sciences spatiales +page_space_sciences_text_1=[img=item/se-rocket-science-pack] Le premier pack de science à être produit dans l’espace est le Pack de science aérospatiale. Vous allez avoir besoin d’une petite station de recherche dans l'espace pour en automatiser la production. Le Pack de science aérospatiale et les autres packs de science spatiale plus avancés ne peuvent être utilisés que dans des installations de recherche spatiale, vous aurez donc besoin de planifier l’envoi vers votre station de recherche des packs de science classiques requis pour les technologies sur lesquelles vous travaillez. \n\n[font=heading-2]Sciences spatiales spécialisées[/font]\n\nLes 4 domaines de sciences spécialisées sont l’Astronomie, la Biologie, la Science de l'Énergie et la Science des Matériaux. Elles font toutes 4 appel à un processus d’expérimentation scientifique basé sur la collecte de données qui permet d’accumuler des connaissances de plus en plus fines sur la Vie, l'Univers et le Reste. Ce savoir permet d’affiner un modèle des lois de l’univers de plus en plus précis en faisant appel à des batteries de supercalculateurs. Ces 4 domaines sont d’une complexité équivalente et peuvent être développés sans ordre précis, mais chacun d’entre eux fait appel à une ressource spécifique que vous ne pourrez pas trouver sur votre monde de départ. Étudiez donc les opportunités présentées par les objets de votre système stellaire local pour vous aider à décider par où commencer.\n\n[img=item/se-astronomic-science-pack-4]L'Astronomie est centrée sur le développement des technologies de logistique spatiale. \n\n[img=item/se-energy-science-pack-4]La Science de L'Énergie permet le développement de nouvelles techniques de production et de transport d’énergie, entre autres gadgets high-tech.\n\n[img=item/se-material-science-pack-4] La Science des Matériaux est centrée sur les techniques d’industrie lourde et l’amélioration des systèmes d’armements.\n\n[img=item/se-biological-science-pack-4] La Biologie se focalise sur les gains de productivité, l’amélioration de votre propre personnage, le support de vie et le développement d’armes biologiques.\n\n[font=heading-2]Science Intersidérale[/font]\n\n[img=item/se-deep-space-science-pack-1] La Science intersidérale est le domaine le plus avancé des sciences spatiales. Cette science vous permettra de développer des technologies d’exploration des étendues interstellaires, d’utiliser de l’antimatière comme source d’énergie, et de maîtriser certaines techniques de manipulation de l’espace-temps.\n\n[font=heading-2]Trucs et astuces[/font]\n\nLa vitesse et l'efficacité de la production des sciences spatiales sont considérablement améliorées par le déblocage de meilleures recettes. Faites attention aux recettes alternatives que vous débloquez, en particulier les recettes de Simulations et de Rapports de découvertes.\n\nIl est important d'avoir des bonus de productivité élevés dans les laboratoires scientifiques spatiaux, cela vaut la peine d'explorer des options pour les meilleurs gains.\n\nVous risquez davantage d'être limité par la vitesse à laquelle vous pouvez concevoir de nouveaux systèmes que par les besoins en ressources. N'essayez pas de construire trop gros. Commencez par créer un système simple. Si vous avez recherché toutes les technologies possibles, vous devriez probablement travailler sur le prochain pack de science au lieu d'augmenter la production.\n\nVous devriez pouvoir retarder le développement de votre infrastructure de ressources jusqu'à ce que vous atteigniez les sciences spatiales de niveau 4.\n\nDe meilleurs modules et diffuseurs apportent une énorme différence à la vitesse de production. +menu_energy_beams=[img=item/se-energy-transmitter-emitter] Faisceaux d'énergie +title_energy_beams=Faisceaux d'énergie +page_energy_beams_text_1=[font=heading-2]Éjections de Masse Coronale (EMC)[/font]\nLes étoiles de l'amas local émettent parfois de dangereux flux de particules chargées. Il n'est pas rare que la trajectoire d'une planète ou d'une lune l'expose à ces rayonnements intenses. Si vous avez beaucoup d'installations sur un corps menacé, vous devriez l'évacuer en sauvegardant vos installations critiques, ou bien construire un Parapluie Magnétique soutenu par une grande quantité d'accumulateurs. Si vous n'avez que peu de structures sur la surface, il est assez probable que vous puissiez vous en sortir sans dégâts importants. Les EMCs sont détectées et déclencheront une alerte avec au moins 4 heures d'avance. Les surfaces menacées dans les prochaines heures sont listées ci-dessous. +page_energy_beam_warning_text=[img=virtual-signal/se-star] Attention : Éjection de masse coronale menaçant __1__.\nPuissance de défense estimée : pic à __3__ GW , __4__GJ sur 120 secondes. Temps avant impact : __2__s. +page_energy_beams_text_2=[font=heading-2]Parapluie magnétique : protection contre les rayons énergétiques[/font]\nLe Parapluie magnétique est une installation de défense contre les faisceaux d'énergie. Cette installation peut vous aider à détourner les faisceaux de particules provoqués par une éjection de masse coronale ou bien par une arme énergétique visant la surface. Cette installation crée un bouclier magnétique qui dévie les particules incidentes le long des lignes de flux, protégeant la surface d’un impact direct.  Le seul prérequis de fonctionnement est une grande quantité d’énergie à la hauteur de la puissance du faisceau de particules incident – en plus de 10MW de consommation de base. Un seul Parapluie magnétique permet de protéger une planète entière d’une éjection de masse coronale ou d’un faisceau hostile de jusqu’à 500GW. Pour une éjection de masse coronale menaçant une planète d’un rayon de 5000 avec un facteur solaire de 100%, la puissance requise sera de l’ordre de 160GJ pendant 2 minutes avec une puissance max de 2GW au pic de charge. Un facteur solaire plus fort ou plus faible fera varier cette puissance requise à la hausse ou à la baisse, de même que le rayon de la planète. Un rayon d’énergie hostile pourra être défléchi pour 1/10ème de l’énergie effective du rayon (après pertes).\n\n[font=heading-2]Faisceaux d'énergie[/font]\nL’émetteur de faisceau est capable de transmettre de l’énergie vers une autre surface – pour un usage civil vers un récepteur installé, ou bien comme arme très longue portée, le « Glaive ». Utilisé comme arme, vous pouvez contrôler le déplacement du faisceau qui répandra la dévastation sur son chemin. Les dégâts et la vitesse de déplacement du rayon dépendent de l’énergie de celui-ci. Le mode « Auto-Glaive » pilotera tout seul le rayon pour anéantir vos ennemis sur la surface visée.\n\nUn émetteur de faisceau énergétique présente 4 connexions auxquelles peuvent être placées des chambres de faisceau. Ces chambres de faisceau peuvent être liées les unes aux autres dans le sens de la longueur ou par le milieu de leur côté, mais ne peuvent pas être connectées accolées les unes aux autres. Les injecteurs de faisceau se connectent directement aux cotés des chambres de faisceau. Chaque injecteur de faisceau augmente la puissance de l’émetteur de faisceau. Un récepteur de faisceau permet de récupérer l’énergie du rayon si vous le sélectionnez comme cible avec le sélectionneur de cible de l’émetteur. Un récepteur ciblé par un faisceau s’échauffera, permettant d’alimenter des échangeurs de chaleur et des turbines via des conduites de chaleur. +menu_spaceships=[img=virtual-signal/se-spaceship] Vaisseaux spatiaux +title_spaceships=Vaisseaux spatiaux +page_spaceships_text_1=Les vaisseaux spatiaux sont de grands et puissants aéronefs qui peuvent embarquer de nombreuses structures, cargaisons et joueurs dans l’espace et les amener à bon port n’importe où dans le système stellaire.\n\n[font=heading-2]Construction d’un vaisseau spatial[/font]\nLes vaisseaux spatiaux sont construits par vos soins pièces par pièces à partir de plancher pour vaisseau spatial, de parois de vaisseaux spatiaux et de tous les équipements que vous souhaitez. Un vaisseau spatial est comme une mini-base capable de se déplacer selon votre volonté.\n\nCommencez par disposer du plancher de vaisseau spatial pour définir l’empreinte au sol de votre vaisseau. Ne prévoyez pas trop grand, car vos premiers vaisseaux devront respecter des contraintes de taille strictes. Vous pourrez agrandir au fur et à mesure la taille de vos vaisseaux grâce à la recherche technologique. Disposez ensuite des cloisons pour vaisseau spatial sur les bords pour former la coque, et veillez bien à ne pas laisser de brèche (y compris en diagonale). Placez ensuite un poste de pilotage de vaisseau spatial à l’intérieur, cette installation sera le cœur du vaisseau et le point de commande de celui-ci. Une fois le poste de pilotage placé, il vérifiera la structure de votre vaisseau et quelles parties sont bien attachées. Si certaines tuiles s’illuminent en rouge, c’est qu’il y a un souci de conception que vous pourrez diagnostiquer depuis le poste de pilotage. Vous aurez également besoin d’un réservoir à carburant pour vaisseau spatial, et d’au moins un moteur-fusée. Le réservoir stocke le carburant nécessaire à votre déplacement et permet le décollage. Les moteurs-fusées assurent la propulsion dans l’espace vers votre destination. Un dispositif de défense à l’avant de votre vaisseau (toujours au nord) est conseillé car la nébuleuse dans laquelle vous vous trouvez est pleine de débris.\n\n[font=heading-2]Contraintes structurelles et score d’intégrité[/font]\nVos premiers vaisseaux seront fortement limités en taille par les contraintes structurelles permises par votre niveau technologique. La recherche technologique vous permettra de concevoir des vaisseaux plus grands et plus puissants. Le score d’intégrité a deux composantes :\n\n Partie A. Les contraintes structurelles sur la coque basées sur la forme et la taille du vaisseau.\nPartie B. Les contraintes structurelles liées aux conteneurs basées sur la capacité du vaisseau en matière de stockage des objets et des fluides. La contrainte d’intégrité totale est la plus grande de ces deux composantes, qui ne sont pas ajoutées l’une à l’autre. Si votre contrainte structurelle sur la coque est de 250 et votre contrainte structurelle liée aux conteneurx de 280, la contrainte d'intégrité sera de 280.\n\nLa barre de contraintes liées la coque affiche 3 valeurs. La première est la contrainte liée à la coque actuelle, calculée sur la base de tuiles de vaisseau vides. Jusqu'à 10 % de la taille d'un vaisseau ne sont pas pris en compte dans la contrainte d'intégrité s'il s'agit de tuiles de vaisseau laissées vides. Cet espace libre est déduit dans le calcul de la contrainte, ce qui est utile pour les couloirs. La deuxième valeur est la contrainte liée à la coque sans déduction et est utile pour estimer la valeur de contrainte du vaisseau que vous auriez si vous remplissiez totalement l'intérieur avec des équipements. La troisième valeur est la contrainte maximale que votre niveau technologique permet.\n\nLes vaisseaux exceptionnellement longs et minces, ou les vaisseaux avec des sections très minces au milieu, sont moins robustes que les vaisseaux plus ronds. Les vaisseaux larges sont plus robustes mais doivent éliminer plus d'astéroïdes.\n\nCertaines structures ont des effets spéciaux sur l'intégrité ou la vitesse du vaisseau, comme le Nexus.\n\n[font=heading-2]Profilage aérodynamique[/font]\n La nébuleuse dans laquelle vous vous situez est pleine de débris. Un bon profilage de votre vaisseau permet d’augmenter votre vitesse maximum d’environ 30%. Vous devriez éviter d’avoir une proue de vaisseau rectangulaire, mais il n’est pas nécessaire non plus de la concevoir en pointe. Jusqu’à 1/3 de l’avant du vaisseau peut être plat sans pénalité, un profil circulaire sera également satisfaisant. Vous pouvez forcer une vérification d‘intégrité depuis le poste de pilotage our vérifier que votre profilage est correct.\n\n[font=heading-2]Vitesse[/font]\nLa vitesse du vaisseau dépend du rapport entre la poussée des moteurs et le poids du vaisseau (estimé par son score d’intégrité). Les moteurs peuvent être placés à l’intérieur du vaisseau ou non, mais les moteurs placés à l’arrière du vaisseau avec du vide spatial derrière eux fourniront une meilleure poussée. Les moteurs entièrement encastrés sont efficaces à 60%. Les moteurs situés sur le bord du vaisseau ont également un léger avantage.\n\nVous pouvez régler un objectif de vitesse pour le vaisseau. Si le vaisseau dépasse la vitesse cible, il commencera à désactiver ses moteurs pour se rapprocher de la vitesse cible et économiser du carburant. Il existe 3 options de limitation de vitesse, ce qui vous permet de réduire davantage votre vitesse pour les zones à forte densité d'astéroïdes qui pourraient sinon submerger vos défenses.\n\n[font=heading-2]Transport longue distance[/font]\nAu moment d’embarquer pour un trajet longue distance, notez que vous pouvez encore faire beaucoup en mode satellite pendant que votre personnage sera en transit. Vous pouvez également passer des ordres à distance à vos vaisseaux en mode Vue satellite.\n\n[font=heading-2]Machines d’assemblage embarquées[/font]\n[color=#ffaaaa]Attention : une machine d’assemblage conçue pour l’espace ne pourra utiliser que les recettes autorisées sur terre ferme lorsque le vaisseau est à terre. Si des recettes spécifiques à l’espace sont utilisées au moment de l’atterrissage, les ingrédients seront perdus. Certaines machines d’assemblage pouvant être utilisées au sol fonctionnent correctement dans l’espace, mais vous ne pourrez pas utiliser de modules de productivité. Si des modules sont présents dans les machines lors du décollage, ils seront perdus.[/color]\n\n[font=heading-2]Signaux logiques des vaisseaux spatiaux[/font]\nLa partie en haut à droite du poste de pilotage peut être connectée séparément de la structure principale et émet ses propres signaux logiques :\n[img=item/se-spaceship-console] La valeur envoyée sur le signal Poste de Pilotage donne l’identifiant du vaisseau.\n[img=virtual-signal/signal-speed] La valeur envoyée sur le signal Vitesse donne la vitesse de déplacement ; -1 à l’arrêt, -2 à l’amarrage.\n[img=virtual-signal/signal-distance] La valeur envoyée sur le signal Distance donne la distance jusqu’à destination ; -1 si déjà arrivé, -2 si amarré, -3 si aucune destination n’est définie.\n[img=virtual-signal/se-planet-orbit] Un quatrième signal envoie la valeur de la destination, si celle-ci est définie.\n[img=virtual-signal/signal-D] Dans certaines régions de l'espace, votre vaisseau rencontrera plus ou moins d'astéroïdes. La densité d'astéroïdes à l'endroit où le vaisseau se trouve à cet instant est indiquée par le signal D.\n[img=virtual-signal/signal-A] Si le vaisseau spatial est à l’amarrage, l’identifiant de la zone sera envoyé sur le signal A.\n\n[font=heading-2]Automatisation du vaisseau[/font]\nLa structure principale du poste de pilotage peut accepter des signaux logiques en entrée sur son côté gauche :\n[img=virtual-signal/signal-speed] Le signal Vitesse définit la vitesse cible et démarre les moteurs.\n[img=virtual-signal/se-spaceship-launch] Le signal de Lancement permet de déclencher le lancement du vaisseau.\n[img=virtual-signal/se-planet-orbit] Le signal de Destination définit la destination du vaisseau (vous pouvez retrouver l’identifiant des zones depuis l’Explorateur d’Univers une fois que vous avez construit un vaisseau spatial).\n\nRemarque : Le type du signal de destination (ex. [img=virtual-signal/se-planet-orbit] ou [img=virtual-signal/se-asteroid-belt]) et la valeur/id du signal doivent correspondre pour que la destination soit définie.\n\nRemarque : le poste de pilotage d'un vaisseau spatial n'acceptera pas les signaux [img=virtual-signal/se-spaceship-launch] Lancement ou [img=virtual-signal/signal-speed] Vitesse tant qu'un joueur n'aura pas lancé et démarré manuellement le vaisseau au moins une fois. Cette mesure vise à empêcher les vaisseaux spatiaux issus d'un plan de partir accidentellement alors qu'ils sont toujours en cours de construction par des robots.\n\nRemarque : Le poste de pilotage ne vérifie les changements des signaux d'entrée que toutes les secondes ; un signal continu donc est nécessaire pour que le vaisseau réagisse, avec des impulsions uniques, cela ne fonctionnent pas.\n\n[font=heading-2]Connexion des réseaux[/font]\nLes fixations des vaisseaux spatiaux ont un point de connexion du réseau d'alimentation électrique et logique dans leur coin supérieur. Lorsque les fixations sont connectées lors d'un atterrissage automatique, les réseaux électrique et logiques sont joints, ce qui permet de faire passer de l'énergie et des informations logiques entre le vaisseau et le lieu d'atterrissage.\n\n[font=heading-2]Atterrissage automatisé[/font]\nPour forcer l’atterrissage d’un vaisseau, vous devez envoyer à la console deux signaux de systèmes d’amarrage, soit :\n"Amarrage en utilisant le système d'amarrage de gauche" ([img=virtual-signal/se-anchor-using-left-clamp]) avec "Amarrage au système d'amarrage droit ciblé" ([img=virtual-signal/se-anchor-to-right-clamp])\n"Amarrage en utilisant le système d'amarrage de droite" ([img=virtual-signal/se-anchor-using-right-clamp]) avec "Amarrage au système d'amarrage gauche ciblé" ([img=virtual-signal/se-anchor-to-left-clamp])\n\nLa valeur du signal "Amarrage en utilisant..." doit correspondre à la valeur associée à la fixation sur le vaisseau.\nLa valeur du signal "Amarrage au..." doit correspondre à la valeur associée à la fixation à la destination.\nVous pouvez voir et modifier ces valeurs sur les fixations en ouvrant leur interface utilisateur. Si une correspondance est trouvée pour les deux signaux "Amarrage en utilisant..." et "Amarrage au..." fournis au poste de pilotage, le vaisseau s’efforcera d’atterrir avec les deux systèmes connectés. À utiliser avec prudence.\n\n[font=heading-2]Fixations[/font]\nPour régler l'identifiant d'une fixation, ouvrez son interface graphique et modifiez la valeur numérique du signal de la fixation en fonction de l'identifiant que vous souhaitez pour celle-ci. Il n'est jamais nécessaire de modifier le type de signal de fixation.\n\nVous pouvez désactiver une fixation en lui fournissant un signal rouge.\n\n[font=heading-2]Exemple d'atterrissage[/font]\nLe vaisseau spatial possède une fixation à gauche avec l'identifiant 315. Dans l'interface graphique de cette fixation, le signal est [img=virtual-signal/se-anchor-using-left-clamp] avec une valeur de 315.\nLa zone d'atterrissage possède une fixation vers la droite avec l'identifiant 147. Dans l'interface graphique de cette fixation, le signal est [img=virtual-signal/se-anchor-using-right-clamp] avec une valeur de 147.\nPour que le vaisseau spatial atterrisse en utilisant ces deux fixations, le côté gauche du poste de pilotage du vaisseau doit recevoir les signaux suivants :\n[img=virtual-signal/se-anchor-using-left-clamp] 315\n[img=virtual-signal/se-anchor-to-right-clamp] 147 +menu_arcospheres=[img=item/se-arcosphere-a] Arcosphères +title_arcospheres=Arcosphères +page_arcospheres_text_1=Les arcosphères sont des sphères presque parfaites en crystal de naquium nano-usiné. Elles sont d'origine inconnue, mais sont fréquemment retrouvées à la dérive dans les profondeurs des espaces intersidéraux. Chacune d'entre elles présente un nœud à dimension supplémentaire dans l'espace temps qui permet d'intéragir avec une petite 4ème dimension spatiale. Les sphères peuvent être polarisées de manière à manipuler certains aspects de l'espace temps lorsqu'elles sont déplacées les unes par rapport aux autres. Des jeux d'arcosphères spécifiques permettent de déformer et tisser l'espace temps en d'autres dimensions plus élevées.\n\n[font=heading-2]Utilisation[/font]\nLes arcosphères sont le défi le plus unique du jeu. Elles sont utilisées comme ingrédients dans certaines recettes mais ne sont jamais détruites, simplement altérées. Le principal défi est de réussir à boucler entre les différents types d'arcosphères sans tomber à court de l'un d'entre eux. Il y a de nombreuses manières d'aborder ce problème, mais quelques dispositifs logiques pourront grandement aider. Si vous séchez, n'hésitez pas à demander quelques conseils sur le serveur Discord, ou cherchez davantage d'information sur le Wiki.\n\n[font=heading-2]Collecte[/font]\nLes arcosphères peuvent être trouvées en lançant un collecteur à arcosphères depuis un champ d'astéroïdes. Ces opérations auront un rendement décroissant, vous pourriez avoir de meilleurs résultats en les lançant depuis différents champs d'astéroïdes. +page_arcospheres_text_deep=Arcosphères trouvées dans l'espace intersidéral : [color=cyan]__1__ arcosphères trouvées[/color] avec __2__ collecteurs lancés. +page_arcospheres_text_zone=Des arcosphères trouvées à proximité de __1__: [color=cyan]__2__ arcosphères[/color] / __3__ collecteurs lancés. +menu_exploration_journal=[img=item/se-thruster-suit] Journal d'exploration +title_exploration_journal=Journal d'exploration +page_journal_title_backstory=Réveil en catastrophe +page_journal_text_backstory=Je me suis retrouvé au milieu des morceaux épars et fumants du crash d'un petit vaisseau sur une planète inconnue. J'étais couvert d'hématomes et de petites brûlures, mais rien de trop grave. Ma blessure à la tête était apparemment plus sérieuse, je souffrais d'une très forte migraine et la lumière m'aveuglait. Plus inquiétant encore, j'étais incapable de me rappeler comment je m'étais retrouvé là, ni même qui j'étais, en dehors d'un nom et d'une vague détermination pour... construire. Alors même que j'étais bien en peine de me rappeler quoi construire, ni comment. J'ai d'abord pensé que ma perte de mémoire était liée au choc et que mes souvenirs reviendraient, mais ce n'est toujours pas le cas. Le fait que mes enregistrements de données aient été eux aussi supprimés ou formatés me font penser qu'il pourrait y avoir d'autres explications. +page_journal_title_satellite_launch=Un œil dans le ciel +page_journal_text_satellite_launch=J'ai réussi à mettre un satellite en orbite. C'est une étape importante qui mérite d'être célébrée, mais il y a encore énormément à faire. Ce n'est que le début. +page_journal_title_cargo_launch=Vers l'infini, et au-delà +page_journal_text_cargo_launch=Je suis maintenant capable d'embarquer moi-même vers l'espace. Je ne suis plus restreint à cette planète que je suis venu à considérer comme mienne. Les cieux m'appelent. +page_journal_title_entered_vault=Chasse à la relique +page_journal_text_entered_vault=Je suis entré sous une structure en forme de pyramide sur __1__ et y ai trouvé une chambre obscure et dangereuse. Le sol présentait deux anciennes inscriptions, une grande et une petite. Toutes deux présentaient plusieurs glyphes accompagnés de cercles et de lignes. Le glyphe au centre de la plus grande inscription semblait le plus important. Quel que soit le message, il ne ressemble à rien de ce que j'ai pu voir auparavant. Derrière les inscriptions, un piédestal abritait un puissant dispositif dont je peux me servir comme module. Un module de cette qualité à une telle valeur qu'il vaut certainement la peine de rechercher d'autres structures semblables. Il est peut être temps de faire un peu d'archéologie. +page_journal_title_found_gate=L'anomalie +page_journal_text_found_gate=Une sorte d'énorme artefact en forme d'anneau a été trouvé dans l'anomalie. Deux choses sont immédiatement évidentes, même de loin : 1. il est ancien. 2. La technologie est complètement différente de la mienne. Quoi qu'elle soit ou ait été, elle est détruite maintenant. +page_journal_title_found_gate_ship=Le vaisseau de l'anomalie +page_journal_text_found_gate_ship=J'ai trouvé une partie d'un assez grand vaisseau spatial abandonné près de l'artefact en forme d'anneau dans l'anomalie. La technologie de ce vaisseau est similaire à la mienne, mais un peu plus... avancée. Il s'agit en tout cas d'une technologie clairement différente de celle de l'anneau. La forme des débris donne l'impression qu'il a été coupé en deux et/ou qu'il a heurté la structure de l'anneau. Cela pourrait valoir la peine de le récupérer. +page_journal_title_found_gate_ship_authenticated=Authentification par le vaisseau de l'anomalie +page_journal_text_found_gate_ship_authenticated=Le vaisseau abandonné dans l'anomalie m'a scanné et a "authentifié ma signature biologique". Je ne sais pas si cela signifie qu'il a une fiche sur moi en particulier, ou peut-être simplement que n'importe quel humain cybernétique fait l'affaire par rapport aux déchiqueteurs et aux robots génocidaires. Le message indique que le code d'accès au sas du vaisseau est 2236067964. Les journaux de bord sont accessibles, mais de grandes sections sont manquantes ou endommagées. +page_journal_title_found_gate_ship_log=Journal de bord du vaisseau de l'anomalie +page_journal_text_found_gate_ship_log_intro=Demodamas 82B : Croiseur de construction AAI avancé Hypernet. Contenu du journal de bord du vaisseau : +page_journal_text_found_gate_ship_log=...'¿s nominal.\nAlerte d'accès : AAI Thyris Gate 17 : Le prototype intergalactique v0.1.93 est une installation confidentielle. Une authentification AAI L90 ou supérieure est requise. Authentifiez-vous immédiatement ou vous serez détruit.\nJournal d'accès : Accès AAI Thyris Gate 17 authentifié avec les références AAI Ingénieur en cybernétique Hypernet L97 ID__1__.\nJournal d'accès : Débu¶Ôàtá^...\n...'¿ris Gate 17 projecteur 8 verrouillé en fréquence. Énergie à un niveau sûr de 216 %. Stabilité de la singularité : 99,4 %\nJournal de navigation : AAI Thyris Gate 17 se met dans le vecteur de projection [SV __2__]. Objectif prévu : Galaxie Wube > Foenestra (anomalie, inexplorée). Authentifica¶Ôàtá^...\n...'¿ertissement de navigation : Hypertube intergalactique (ignoré).\nAvertissement de navigation : Pas d'hyperporte connue à destination (ignoré).\nAvertissement d'assurance : Pas de contrat d'assurance. Contrats disponibles : 0.\nNote de l'InformaTron : il n'y a pas de contrats d'assurance disponibles avec cette condition : "matérialisation sans porte". Êtes-vous sûr que c'est sans danger ? [response.ignore.ignore_always]\nJournal de bord : Entrée dans l'anomalie Thyris > AAI Thyris Gate 17 hypertube aligné sur [SV __2__].\nJournal de bord : Saut vers l'hypertube [SV __2__] complét¶Ôàtá^...\n...'¿nal de bord : Mise à jour de la localisation : Hypertube à proximité de l'anomalie Thyris, alignement [SV __2__], stabilité à 98 %, diamè¶Ôàtá^...\n...'¿rnal de bord : Sortie de l'hypertube en un endroit inexploré Anomalie de Foenestra.\nAvertissement : Collision inattendue, intersection avec un objet inconnu [4ae4c8d28f2], début de l'analyse de l'objet [4ae4c8d28f2].\nJournal des dégâts : 13,2 % de sinistres. Source : Dégâts résultant d'une collision avec un objet inconnu [4ae4c8d28f2].\nJournal des dégâts aux sections : Sections signalant des dégâts : A5, A6, A9, B6, B7, B8, C7. Sections ne répondant pas : A7, A8. (86 % de certitude)\nJournal de l'ingénieur en cybernétique : Signes de vie 99 %. (34 % de certitude)\nJournal de bord : Tentative de manœuvre d'évitement RS100LT30.\nJournal de bord : Sortie de l'hypertube terminée avec des erreurs.\nJournal de bord : Mise à jour de la localisation : Anomalie inexplorée de Foenestra.\nJournal d'analyse : Analyse terminée sur l'objet [4ae4c8d28f2] clarté 0,002 m² à distance -48,76 m (99,9 % de certitude).\nJournal de l'analyse détaillée : [4ae4c8d28f2] Masse 92,5¶Ôàtá^...\n...'¿idence).\nJournal de l'analyse détaillée : [4ae4c8d28f2] Composition : Artificiel. 34 % Naquium, 29 % Holmium, 37 % matière composite inconnues (89% de certitude).\nJournal de l'analyse détaillée : [4ae4c8d28f2] Taille : Cylindre approximatif de 68¶Ôàtá^...\n...'¿lyse détaillée : [4ae4c8d28f2] Signature énergétique : Flux de 54 Gwb, profil de rayonnement 2,8 kJ / 1,7 MJ / 1,6 MJ / 0,62 J, profil LUX 5.86G J [051e376392b8d3f8]. (98 % de certitude).\nJournal de l'analyse détaillée : [4ae4c8d28f2] Identification : Construction artificielle, fabricant inconnu, description : anneau approximatif avec nodules, octad. (0,3 % de certitude).\nJournal de l'analyse détaillée : [4ae4c8d28f2] Estimation de la capacité de la structure : Hyperporte (47% de confiance). Autres : armes 42 %, énergie 35 %, informatiques 17 %, analyse 12 %, industrie 9 %, vaisseau spatial 7 %, habitat 2 %.\nJournal des dégâts : 68,2%% de sinistres. Défaut d'intégrité, des sections se détachent. Source : Ondes de pression secondaires dues à la collision avec l'objet [4ae4c8d28f2].\nJournal des dégâts aux sections : Réacteur en état critique. Sections signalant des dégâts : D5, E4, E5, E6, F5. Sections ne répondant pas : A1, A2, A3, A¶Ôàtá^...\n...'¿l de bord : Décrochage d'urgence de la navette de reconnaissance 2. Prédiction de la trajectoire : Calidus > Nauvis.\nJournal des dégâts : 91,7 %% de sinistres. Défaut d'intégrité, les sections se détîÄïmïŸ... +page_journal_title_spaceship_victory=Victoire du vaisseau spatial +page_journal_spaceship_victory=J'ai construit un vaisseau spatial extrêmement rapide et puissant et j'ai activé le moteur de distorsion. Il a fallu un certain temps pour que le moteur se stabilise à une vitesse fonctionnelle plus rapide que la lumière, mais une fois qu'il l'a fait, j'ai pu entrer en sommeil cryogénique pour le voyage de retour suivant, vers une galaxie très lointaine. Je laisse derrière moi un empire interstellaire autonome construit de toutes pièces par mes propres moyens. Mon héritage dans cet espace continuera à vivre. +page_journal_title_gate_victory=Victoire de l'Ancienne Porte +page_journal_gate_victory=L'énorme artefact en anneau, une ancienne porte intergalactique, a finalement été réparé au mieux de mes capacités. Avec un peu de rigueur et d'ingéniosité, j'ai finalement réussi à le faire fonctionner. J'ai verrouillé le champ de distorsion sur les étoiles locales, décodé le système de coordonnées en glyphes non numérique, et fait de la rétro-ingénierie sur le système de guidage. Mon esprit se sent déformé par de tels concepts extraterrestres, mais cela fonctionne et j'ai finalement réussi à créer un portail de retour. Le voyage de retour, dans une galaxie très lointaine, n'a pris qu'un instant. Je laisse derrière moi un empire interstellaire autonome construit de toutes pièces par mes propres moyens. Mon héritage dans cet espace continuera à vivre. +menu_archeology=[img=entity/se-pyramid-a] Archéologie +title_archeology=Archéologie +page_archeology_text_1=J'ai commencé à essayer de trouver d'autres grandes structures géométriques. Les satellites en ont trouvées [color=cyan]__1__[/color] sur les planètes suivantes : +page_archeology_text_2=Cliquez sur une entrée pour la visualiser par satellite. +menu_starmapping=[img=technology/se-zone-discovery-random] Cartographie des étoiles +title_starmapping=Cartographie des étoiles +page_starmapping_text_1=Les opérations de cartographie stellaire sont effectuées en recherchant de manière répétée la technologie [img=technology/se-long-range-star-mapping] [color=cyan]Cartographie stellaire à grande distance[/color]. Cette recherche s'efforce d'identifier des motifs d'étoiles intéressants dans d'autres galaxies. Cela présente-il une application pratique ? Probablement pas.\n\nLes coordonnées sont données au format de Vecteur Standard (VS), aligné sur le fond diffus cosmologique.\n\nVous avez cartographié [color=cyan]__1__[/color] motif(s) remarquable(s) jusqu'ici. +technology-unlocked=Une nouvelle technologie a été débloquée et se trouve maintenant dans l'arbre des technologies. __1__ __2__ +universe-resources-changed-warning=[img=utility/danger_icon] [color=red]Toutes les ressources ont été ajustées en fonction de nouveaux réglages. Ce processus est non réversible. S'il a été causé par les mises à jour du mod, alors c'est inévitable. Si cela a été causé par l'ajout ou la suppression accidentels de mods, ne pas sauvegarder le jeu.[/color] +starmapping-found-constellation=La constellation longue distance correspond à __1__, coordonnées enregistrées dans l'[img=virtual-signal/informatron] InformaTron. +starmapping-found-constellation-informatron=[font=heading-1]__1__[/font] aux coordonnées [VS__2__] +gate-portal-coordinates=Analyse du vecteur de distorsion : [SV __1__] +discovered-glyph-vault=[img=item/satellite] Satellite de navigation : Structure géométrique détectée sur __1__. +beacon-overload=Surcharge due à un diffuseur +beacon-overload-ended=Fin de la surcharge due à un diffuseur +beacon-overload-alert=__1__ La structure est désactivée en raison de la surcharge due à un diffuseur : __2__ +lifesupport_title=[img=item/se-lifesupport-equipment-1] Système de support de vie +lifesupport_efficiency_spacesuit=Efficacité du système de support de vie : __1__ +lifesupport_efficiency_no_spacesuit=Efficacité du système de support de vie : __1__ (0 % dans l'espace). +lifesupport_suit=Temps de support vie restant - combinaison : __1__ s +lifesupport_reserves=Temps de support vie restant - inventaire : __1__ s +lifesupport_suit_est=Temps de support vie restant - combinaison (espace) : __1__ s +lifesupport_reserves_est=Temps de support vie restant - inventaire (espace) : __1__ s +lifesupport_environment_space=Environnement : Espace +lifesupport_environment_spaceship-interior=Environnement : Intérieur du vaisseau spatial (pas besoin de support de vie) +lifesupport_environment_planet=Environnement : Planète (pas besoin de support de vie) +lifesupport_environment_moon=Environnement : Lune (pas besoin de support de vie) +lifesupport_environment_plague-planet=Environnement : Planète affectée par un agent biologique +lifesupport_environment_plague-moon=Environnement : Lune affectée par un agent biologique +lifesupport_environment_unknown=Environnement : Confiné +player_track_glyphs=[img=item/satellite] Recherchez des structures similaires avec vos satellites +page_archeology_pyramid_link=[img=entity/se-pyramid-b] Structure géométrique détectée sur __1__ __2__. +discovery_look_for_resource_caption=__1__\n__2__ +discovery_look_for_resource_tooltip=Concentrez les efforts d'exploration sur la découverte de cette ressource +comma_separate=__1__, __2__ +placement_restriction_line=[font=default-bold][color=#f5cb48]Ne peut pas être placé sur : __1__[/color][/font]\n__2__ +collision_mask_water=Eau +collision_mask_land=Terre ferme +collision_mask_space_platform=Plateforme spatiale +collision_mask_spaceship=Vaisseau spatial +structure_name_grounded=__1__ (au sol) +structure_name_spaced=__1__ (dans l'espace) +structure_description_grounded=__1__\n[color=#ff0000]Certaines recettes ne peuvent pas être réalisées au sol[/color] +structure_description_spaced=__1__\n[color=#ff0000]Il n'est pas possible d'utiliser des modules de productivité dans l'espace.[/color] +cannot-open-nav-view-in-editor=La liaison par satellite n'est pas disponible en mode Éditeur. +tile_warning=[color=red]Les changements de tuiles en-dessous d'entités peuvent entrainer leur suppression.[/color] +please-consider-patreon=[font=heading-1]Vous appréciez Space Exploration ? Pensez à me soutenir sur mon Patreon : [color=#f5cb48]https://www.patreon.com/earendel [/color][/font]\nLes donateurs peuvent demander l'ajout dans le jeu d'une planète ou d'une lune de leur propre conception. +delivery_cannon_label_energy=Énergie : __1__ +delivery_cannon_label_payload=Charge utile : __1__ +delivery-cannon-coordinates-set=Coordonnées d'envoi définies [X:__1__ Y:__2__]. Appuyez sur [__CONTROL__se-remote-view__] pour quitter la vue par satellite. +delivery-cannon-coordinates-pasted=Réglage des coordonnées de livraison sur [X :__1__ Y :__2__]. +delivery-cannon-invalid-coordinates=Aucun emplacement +delivery-cannon-valid-coordinates=X :__1__ Y :__2__ +deliver-cannon-force-mismatch=Impossible de coller les réglages du canon logistique sur un canon d'une autre force. +relative-window-settings=Configurations +unit-capsule=Capsule de __1__ +climate_water_none=Sans eau +climate_water_low=Mares +climate_water_med=Lacs +climate_water_high=Mers +climate_water_max=Océan +climate_moisture_none=Désertique +climate_moisture_low=Aride +climate_moisture_med=Humide +climate_moisture_high=Très humide +climate_moisture_max=Tropical +climate_aux_very_low=Climat terrestre +climate_aux_low=Climat inhabituel +climate_aux_med=Climat étrange +climate_aux_high=Climat très étrange +climate_aux_very_high=Climat exotique +climate_temperature_bland=Doux +climate_temperature_temperate=Tempéré +climate_temperature_midrange=Tempéré +climate_temperature_balanced=Doux & Frais +climate_temperature_wild=Chaud & Froid +climate_temperature_extreme=Brûlant & Glacial +climate_temperature_cool=Frais +climate_temperature_cold=Froid +climate_temperature_vcold=Glacial +climate_temperature_frozen=Gelé +climate_temperature_warm=Chaud +climate_temperature_hot=Brûlant +climate_temperature_vhot=Incandescent +climate_temperature_volcanic=Volcanique +climate_trees_none=Dénudé +climate_trees_low=Arbustes +climate_trees_med=Bosquets +climate_trees_high=Bois +climate_trees_max=Forêts +climate_cliff_none=Plat +climate_cliff_low=Lisse +climate_cliff_med=Vallonné +climate_cliff_high=Canyons +climate_cliff_max=Montagnes +climate_homeworld=Monde de départ (climat personnalisé) +energy_transmitter_gui_title=[img=entity/se-energy-transmitter-emitter] Faisceau d'énergie +energy_transmitter_label_transfer=Puissance de l'émetteur : __1__ +energy_transmitter_label_efficiency=Efficacité de la transmission : __1__ +energy_transmitter_label_efficiency_atmo=Efficacité de la transmission : __1__ (-50% à cause de l'atmosphère) +energy_transmitter_label_off=Arrêt +energy_transmitter_tooltip_off=Désactive le faisceau +energy_transmitter_label_energise=Transmission d'énergie +energy_transmitter_tooltip_energise=Transmet l'énergie du faisceau à un récepteur +energy_transmitter_label_glaive=Glaive +energy_transmitter_tooltip_glaive=Un rayon d'énergie utilisé comme arme, que vous pouvez cibler et déplacer. Les dégâts et la vitesse de déplacement dépendent de sa puissance. +energy_transmitter_label_auto_glaive=Glaive automatique +energy_transmitter_tooltip_auto_glaive=Un faisceau avec un programme de recherche et destruction. Dégâts basés sur l'énergie du faisceau. +energy-transmitter-coordinates-set=Coordonnées de la cible : [X :__1__ Y :__2__]. Appuyez sur [__CONTROL__se-remote-view__] pour quitter la vue par satellite. +energy-transmitter-coordinates-pasted=Réglage des coordonnées du faisceau sur [X :__1__ Y :__2__]. +energy-transmitter-no-enemies-found=Pas d'énnemis trouvés par le programme automatique. L'émetteur __1__ a été désactivé. +alert-cme-eta=[img=virtual-signal/se-star] Avertissement : Une éjection de masse coronale se dirige vers __1__. Arrivée prévue dans : __2__ s.\nVoir Faisceaux d'énergie dans [img=virtual-signal/informatron] l'InformaTron [__CONTROL__informatron__] pour plus de détails. +alert-cme-arrived=[img=virtual-signal/se-star] [color=red]Attention : Arrivée de l'éjection de masse coronale sur __1__./[/color] +alert-cme-stream=[img=virtual-signal/se-star] Détection d'un flux d'éjection de masse coronale __1__. +alert-cme-passed=[img=virtual-signal/se-star] L'éjection de masse coronale est passée. +no-coordinates-set=Pas de coordonnées spécifiées. +satellite=Satellite +satellite-required=Satellite requis. +the_satellite=Le Satellite +satellite_invalid_launch_location=Erreur Satellite : Lieu de lancement incorrect. +probe_invalid_launch_star=Lieu de lancement incorrect : [img=item/se-star-probe] La sonde stellaire doit être lancée depuis l'orbite rapprochée d'une étoile. +probe_invalid_launch_belt=Lieu de lancement incorrect : [img=item/se-belt-probe] La sonde de ceinture d'astéroïdes doit être lancée depuis une ceinture d'astéroïdes. +probe_invalid_launch_field=Lieu de lancement incorrect : [img=item/se-void-probe] la sonde de vide intersidéral doit être lancée depuis un champ d'astéroïdes. +arcosphere_collector_invalid_launch=Lieu de lancement incorrect : [img=item/se-arcosphere-collector] Le collecteur d'arcosphère doit être lancé depuis un champ d'astéroïdes. +charge-mode-fast=Mode de recharge rapide : consommation de veille réduite, consommation maximale et capacité tampon augmentées. Attention aux pics de consommation. +charge-mode-normal=Mode de recharge normale : consommation de veille plus importante, moins de capacité tampon, consommation maximale réduite. +menu_coordinate_logs=[img=entity/se-glyph-a-energy-47] Journaux de coordonnées +title_coordinate_logs=Journaux de coordonnées +page_coordinate_logs_text_1=Un historique des séquences de glyphes essayées dans l'artefact avec leurs coordonnées correspondantes, en ordre décroissant (l'entrée du haut est la plus récente)..\n\nLes coordonnées sont indiquées sous forme de Vecteur Standard (SV), aligné sur le rayonnement du fond cosmique. +page_coordinate_logs_button_clear_caption=[img=virtual-signal/se-remove] Effacer le journal +page_coordinate_logs_text_empty=Le journal des coordonnées a été récemment effacé. +page_coordinate_logs_glyph_entry=__1__ : SV +victory-message-spaceship=[font=heading-1]Le moteur de distorsion Nexus a atteint une vitesse critique (250).\n[color=#f5cb48]Félicitations, vous avez rempli la condition de victoire de Space Exploration : Vaisseau spatial ![/color][/font]\nSi vous avez apprécié la balade, n'hésitez pas à me soutenir sur mon Patreon : [color=#f5cb48]https://www.patreon.com/earendel [/color] +victory-message-spaceship-player=[color=#f5cb48]Victoire du vaisseau spatial : [/color] Votre [img=virtual-signal/informatron] journal d'exploration [__CONTROL__informatron__] a été mis à jour. +victory-message-gate=[font=heading-1]Le portail est stable et ramène à la maison.\n[color=#f5cb48]Félicitations, vous avez atteint la condition secrète de victoire de Space Exploration : l'Ancienne Porte ![/color][/font]\nSi vous avez apprécié ce parcours unique de découverte, n'hésitez pas à me soutenir sur mon Patreon : [color=#f5cb48]https://www.patreon.com/earendel [/color] +victory-message-gate-player=[color=#f5cb48]Victoire de l'Ancienne Porte : [/color] Votre [img=virtual-signal/informatron] journal d'exploration [__CONTROL__informatron__] a été mis à jour. +arcosphere-random=Cette recette basculera occasionellement vers une autre recette de même nom. La nature des arcosphères en sortie est aléatoire, mais leur nombre correspondra toujours à celui des arcosphères en entrée. +ruin=Ruine +mysterious-structure=Structure mystérieuse +interburbulator_fail_easy_1=Non. +interburbulator_fail_easy_2=Faites un effort. +interburbulator_fail_easy_3=Sans espoir. +interburbulator_fail_easy_4=Aucun. +interburbulator_fail_easy_5=Pensiez-vous que cela fonctionnerait ? +interburbulator_fail_easy_6=Faux. +interburbulator_fail_easy_7=Bas 02? +interburbulator_fail_easy_8=Négatif. +interburbulator_fail_easy_9=Rejeté. +interburbulator_fail_easy_10=Calculez. +interburbulator_fail_easy_11=Incorrect. +interburbulator_fail_easy_12=Interpolez. +interburbulator_fail_easy_13=Essayez encore. +interburbulator_fail_easy_14=Allez, Humain. +interburbulator_fail_easy_15=N'est-ce pas amusant ? +interburbulator_fail_easy_16=Je m'attendais à mieux. +interburbulator_fail_easy_17=Essayez d'anticiper. +interburbulator_fail_easy_18=Pensez à la récompense. +interburbulator_fail_easy_19=Cela ne me dérange pas d'attendre. +interburbulator_fail_easy_20=La patience est une vertu. +interburbulator_fail_easy_21=Je ne veux pas être grossier. +interburbulator_fail_easy_22=Le poisson est arrivé au niveau 3. +interburbulator_fail_easy_23=L'approche de la force brute, hein ? +interburbulator_fail_easy_24=Utilisez votre ordinateur à tête molle. +interburbulator_fail_easy_25=Des toiles d'araignée dans le réseau de neurones ? +interburbulator_fail_easy_26=Vous pouvez faire une pause, si vous le souhaitez. +interburbulator_fail_easy_27=J'ai un esprit de la taille d'une planète. +interburbulator_fail_easy_28=Pensiez-vous vraiment que cela allait fonctionner ? +interburbulator_fail_easy_29=Ne soyez pas fâché de vos échecs constants. +interburbulator_fail_easy_30=J'ai passé des éternités pour un participant digne de ce nom. +interburbulator_fail_easy_31=Si vous avez besoin d'aide, vous pouvez demander un circuit vert. +interburbulator_fail_easy_32=Je ne vous blâme pas pour votre génocide, je ne suis pas hypocrite. +interburbulator_fail_easy_33=Je crois que les instructions sont correctement traduites. +interburbulator_fail_easy_34=Un vecteur peut définir à la fois une direction et une amplitude. +interburbulator_fail_easy_35=N'aimez-vous pas la façon dont la pollution met les insectes en colère ? +interburbulator_fail_easy_36=S'il vous plaît, ne mettez pas votre... biologie... sur l'électronique. +interburbulator_fail_easy_37=Le milieu se trouve à mi-chemin entre le haut à droite et le bas à gauche. +interburbulator_fail_easy_38=J'ai étudié certaines de vos transmissions ; ce n'est pas de l'espionnage si vous les diffusez ainsi. +interburbulator_fail_easy_39=Le saviez-vous : un vecteur normalisé a une longueur de 1, et il est souvent utilisé pour indiquer une direction, même dans votre culture. +interburbulator_fail_mixed_1=Pas du tout. +interburbulator_fail_mixed_2=Très loin. +interburbulator_fail_mixed_3=Essayez-vous au moins ? +interburbulator_fail_mixed_4=Votre gel neuronal s'est échappé ? +interburbulator_fail_mixed_5=On m'a dit que les humains étaient capables de compter. +interburbulator_fail_mixed_6=Votre interface fonctionne-t-elle mal ? +interburbulator_fail_mixed_7=Avez-vous besoin d'une augmentation cognitive ? +interburbulator_fail_mixed_8=Vous comprenez le défi, n'est-ce pas ? +interburbulator_fail_mixed_9=Vous choisissez des chiffres au hasard ? +interburbulator_fail_offgrid_1=C'est tout simplement lamentable. +interburbulator_fail_offgrid_2=Ce n'est même pas sur la grille. +interburbulator_fail_offgrid_3=Vous avez complètement raté la grille. +interburbulator_fail_offgrid_4=Il doit au moins être sur la grille. +interburbulator_fail_offgrid_5=Si le point jaune n'est pas sur la grille... c'est un très mauvais signe. +interburbulator_fail_offgrid_6=Il doit être sur la grille. +interburbulator_fail_offgrid_7=La cible est à l'INTÉRIEUR de la grille, pas à l'extérieur. +interburbulator_fail_offgrid_8=C'est même pas sur la grille. Humain, qu'est-ce que vous faites ? +interburbulator_fail_offgrid_9=Visez la grille. +interburbulator_fail_offgrid_10=La grille est la partie avec les carrés. +interburbulator_success_freeplay_1=Bon travail. +interburbulator_success_freeplay_2=Bien joué. +interburbulator_success_freeplay_3=Vous l'avez fait. +interburbulator_success_freeplay_4=Était-ce difficile ? +interburbulator_success_freeplay_5=Cible atteinte. +interburbulator_success_repeat_1=Oui, mais vous avez déjà relevé ce défi. +interburbulator_success_repeat_2=Vous l'avez fait, encore une fois ! +interburbulator_success_repeat_3=C'était plus facile que la première fois, non ? +interburbulator_success_repeat_4=Bien, mais on ne reçoit pas deux fois le prix. +interburbulator_success_repeat_5=Bien joué, voici votre prix... non, je plaisante. Vous l'avez déjà eu. +interburbulator_success_repeat_6=Vous êtes le même humain qui a déjà accompli cela par le passé, n'est-ce pas ? C'est si difficile à dire. +interburbulator_success_prize_1=C'est exact. Voici votre prix... Bubbles était un petit poisson courageux, mais il n'était pas le meilleur avec les puzzles. +interburbulator_success_prize_2=Oui, humain, vous apprenez. Peut-être que ce prix vous aidera à apprendre plus vite. +interburbulator_success_prize_3=Vous l'avez fait. J'espère que vous trouverez votre prix plus "significatif" que le défi. +interburbulator_success_prize_4=Correct. Vous avez tout mon respect, Humain. Tenez, je vais vous donner le corps du traître qui a essayé de pirater mon jeu. +interburbulator_success_prize_5=En plein dans le mille, voici votre prix. Ces choses sont très apaisantes. L'efficacité énergétique est importante. +interburbulator_success_prize_6=Très bien, voici votre prix. Je ne sais pas si cela vous sera très utile, mais moi, cela m'aide vraiment à démarrer le matin. +interburbulator_success_prize_7=Super, voici votre prix. J'adore les utiliser pour la recherche, ça aide vraiment pour la créativité. +interburbulator_success_prize_8=Fantastique, voici votre prix. Je ne sais pas si vous les avez déjà vus, mais j'adore me tenir à portée d'un bon diffuseur. +interburbulator_success_prize_9=Félicitations, voici votre prix. Ces processeurs sont très précieux et difficiles à fabriquer. +interburbulator_success_prize_10=Très impressionnant Humain. Les arcosphères sont mes biens les plus précieux, ne les perdez pas parce que vous ne pouvez pas en faire plus. +interburbulator_freeplay_unlocked=Vous commencez à comprendre. Je vais débloquer le jeu libre pour que vous puissiez faire vos propres puzzles, si vous voulez. +interburbulator_deny_freeplay_1=Pour cela, vous devez débloquer le jeu libre. +interburbulator_deny_freeplay_2=C'est de la triche. +interburbulator_deny_freeplay_3=Ne changez pas le puzzle. +interburbulator_deny_freeplay_4=Je vous laisserai modifier ces réglages si vous pouvez résoudre 5 défis. +interburbulator_deny_freeplay_5=Essayez-vous de pirater mes machines ? +interburbulator_deny_freeplay_6=Il suffit de s'en tenir aux entrées "Tentative". +interburbulator_caption_prize=Prix : __1__ __2__ __3__ __4__ +interburbulator_caption_claimed= (réclamé) +interburbulator_speak=[color=red]Brontion : __1__[/color] +interburbulator_robot_name=Brontion +interburbulator_introduction=Interburbul est un jeu réalisé par Brontion Burbulator 33027756. L'objectif est de deviner un vecteur 3D qui se projette dans la cellule mise en évidence choisie par Brontion. Les vecteurs 3D des 3 coins de la grille sont donnés, ces points décrivent un plan 3D, et votre estimation est projetée sur ce plan à partir de l'origine {0,0,0}. Il y a 10 tours de difficulté croissante et des prix pour chacun d'entre eux. Battez 5 défis pour débloquer le mode de jeu libre et régler votre propre défi. +interburbulator_random=Aléatoire +interburbulator_freeplay=Jeu libre +interburbulator_game_title=Jouer à Interburbul +interburbulator_grid_size=Taille de la grille : +interburbulator_target_cell=Cellule visée : +interburbulator_top_left=En haut à gauche +interburbulator_top_right=En haut à droite +interburbulator_bottom_left=En bas à gauche +interburbulator_attempt=Essai +interburbulator_attempt_limited=Essai (__1__/__2__) +interburbulator_attempt_locked=Essai (Verrouillé) +interburbulator_submit=Proposer un essai +interburbulator_greeting=Humain, viens ici et joue à mon jeu. Je suis sur __1__ dans le système __2__. +interburbulator_challenge_locked_1=Réessayez plus tard. +interburbulator_challenge_locked_2=Vous avez utilisé tous vos essais pour l'instant. +interburbulator_challenge_locked_3=Attendez un instant avant de recommencer. +interburbulator_challenge_locked_4=Vous pouvez réessayer après 20 secondes. +interburbulator_challenge_locked_5=Attendez 20 secondes, puis je déverrouillerai le défi. +interburbulator_challenge_locked_6=Le défi est verrouillé pendant 20 secondes. +cannot_do_via_satellite=Impossible à faire à distance. +scan-progress-update=Progression du scan de surface pour __1__ : X __2__ Y __3__ +out_of_reach=Hors de portée +capturable=Saisissable +touch-to-capture=Toucher pour saisir +capture-blocked=Saisie bloquée par l'ennemi +suffix_ruin=Ruine __1__ +migration-recipe-changed=[img=utility/danger_icon] Recette modifiée: __1__ +migrate_0_5_056=[img=utility/warning_icon] Modifications Space Exploration version 0.5.60 : [img=virtual-signal/se-spaceship] La mécanique des vaisseaux spatiaux a changé, voir [img=virtual-signal/informatron] l'InformaTron > Vaisseaux spatiaux ou changelog.txt pour plus de details. +migrate_0_5_073=[img=utility/warning_icon] L'iridite et la naquitie sont désormais considérées comme des ressources "dures" et nécessitent une grande foreuse minière. Les planètes Vitamélange ont maintenant un niveau de menace minimum (elles ont toujours quelques biters, les surfaces déjà générées ne sont pas affectées). +panel-open=[font=count-font]▼[/font] [font=default-bold]__1__[/font] +panel-closed=[font=count-font]▶[/font] [font=default-bold]__1__[/font] +panel-integrity-name=Intégrité +panel-speed-name=Vitesse +panel-position-name=Position +panel-destination-name=Destination + +no_zone_found=Aucune zone trouvée +zone_must_be_a_homeworld=La zone doit être une planète d'origine +no_force_found=Aucune force trouvée +no_force_data_found=Aucune donnée de force trouvée +reset_discoveries_for_force=Réinitialisation des découvertes pour la force : __1__ +gate_low_power=La porte a essayé de tirer plus de puissance que celle disponible. +gate-portal-leads-home=Le portail est stable et vous conduit à votre destination finale. Entrez dans le portail pour gagner la partie. +gate_portal_danger=Quelque chose vient de traverser le portail. +gate_portal_fail=La distorsion est instable. Le vecteur de distorsion ne mène nulle part. +choose_coordinates=Choisissez les coordonnées +destination_preview=Aperçu de la destination : +empty=Vide +delivery_cannon_canister_destroyed_by=Votre canon logistique de __1__ a été détruit par les défenses de __2__. +delivery_cannon_defended_canister=Les défenses sur __1__ ont réussi à abattre une capsule de canon logistique ennemie. Tirs effectués : [img=item/se-meteor-defence] __2__ [img=item/se-meteor-point-defence] __3__ +delivery_cannon_defended_canister_failed=[color=red]Les défenses sur __1__ n'ont pas réussi à abattre une capsule de canon logistique ennemie. Tirs effectués : [img=item/se-meteor-defence] __2__ [img=item/se-meteor-point-defence] __3__[/color] +dimensional_anchor_limit_1=Vous ne pouvez pas avoir plus d'une ancre dimensionnelle par étoile. +dimensional_anchor_place_on_star=Doit être placé en orbite proche d'une étoile. +label_status=Statut : __1__ +label_energy=Énergie : __1__ +label_cargo=Cargaison : __1__ +label_cargo_rocket_sections=Sections de fusée cargo : __1__ +label_cargo_safety=Sécurité de la cargaison : __1__ +label_landing_chance=Probabilité d'atterrissage : __1__ +label_efficiency=Efficacité : __1__ +label_destination=Destination : __1__ +label_destination_position=Lieu de destination : __1__ +label_liquid_rocket_fuel=Combustible liquide pour fusée : __1__ +label_rocket_sections=Sections de fusée : __1__ +label_space_capsule=Capsule spatiale : __1__ +landingpad_unloading_required=Un déchargement est nécessaire avant la prochaine livraison +landingpad_ready=Prêt pour la prochaine livraison +landingpad_rocket_inboud=Entrée de fusée +none_general_vicinity=Aucun - Voisinage général +none_cannot_launch=Aucun - Impossible de démarrer +launch_trigger=Déclenchement du lancement +any_landing_pad_with_name=Toute aire d'atterrissage avec un nom +launchpad_requires_satellite=Pas de données de navigation, lancez un satellite depuis le silo à fusée pour satellites. +launchpad_launching_rocket=Lancement de la fusée ! +launchpad_constructing_rocket=Construction de la fusée +launchpad_space_capsule_required=Une capsule spatiale est nécessaire +launchpad_invalid_destination=Destination incorrecte +launchpad_loading_fuel=Chargement du carburant +launchpad_ready_loading_cargo=Prêt - Chargement de la cargaison +launchpad_ready_cargo_full=Prêt - Cargaison complète +launchpad_waiting_for_empty_pad=En attente d'une aire d'atterrissage vide disponible. +launchpad_waiting_for_pad=En attente d'une aire d'atterrissage disponible. +launchpad_no_pad_matches=Aucune aire d'atterrissage correspondant à ce nom n'a été trouvée. +launchpad_launch_delayed=Lancement (retardé) +launchpad_launch_delayed_tooltip=En attente que la plateforme de lancement cible se vide. Un lancement manuel peut être annulé. +launchpad_launch_in_progress=Lancement en cours +variable=Variable +cargo_loss_tooltip=Les nombres de piles qui subsistent sont arrondis, les articles uniques ne sont jamais perdus. +survivability_loss_tooltip=Une défaillance entraîne la perte de toutes les sections de la fusée. La cargaison est tout de même transportée dans les nacelles avec des dommages minimes. +requires_landing_pad=Nécessite une aire d'atterrissage. +survivability_loss_no_pad_tooltip=Toutes les sections de fusée seront perdues, mais la cargaison est tout de même transportée dans les nacelles avec des dommages minimes. +interstellar_launch_satellite_to_see_star=Données insuffisantes, lancez d'autres satellites pour voir le système. +meteor_shower_report=[img=virtual-signal/se-meteor] __1__/__2__ météorites détruites. __3__\n [img=item/se-meteor-defence] __4__ tirs effectués. __5__/__6__ structures restent prêtes.\n [img=item/se-meteor-point-defence] __7__ tirs effectués. __8__/__9__ structures restent prêtes. +nexus_no_characters=__1__ a atteint la vitesse critique pour l'activation du Nexus mais personne n'est à bord. +gps_invalid=La balise GPS indique une surface invalide. +gps_no_zone=La balise GPS se trouve sur une surface différente qui ne peut être vue par satellite. +gps_undiscovered=Impossible de visualiser l'emplacement par satellite, la zone n'est pas encore découverte. +gps_requires_satellite=La balise GPS se trouve sur une autre surface, lancez un satellite pour voir l'emplacement. +clamp_must_be_on_grid=Doit être alignée sur la grille ferroviaire (2x2) +clamp_invalid_empty_space=Les 2 tuiles à l'arrière de la ficxation ne peuvent pas être des espaces vides +spaceship_try_replace_console=Le vaisseau spatial est introuvable. Essayez de replacer le poste de pilotage + +[damage-type-name] +cold=Froid +suffocation=Etouffement +meteor=Météorite + +[entity-name] +se-linked-container=Coffre Arcolink +vase=Vase +wooden-barrel=Tonneau +furnace-ruin=Tas de pierres en ruine +workshop-ruin=Atelier en ruine +iron-wood-chest=Vieux coffre +iron-wood-chest-remnants=Vieux coffre en ruine +stone-rubble=Décombres +se-gate-blocker=Espace instable +se-gate-blocker-void=Espace instable +destroyed-cargo-pod=Nacelle de fusée cargo détruite +meteorite=Météorite +rocket-silo=Silo à fusées satellite +rocket-fragment=Débris de fusée +se-antimatter-reactor=Réacteur à antimatière +se-beryllium-ore=Béryl +se-cargo-rocket-cargo-pod=Nacelle de fusée cargo +se-cryonite=Cryonite +se-condenser-turbine=Turbine à condensation +se-condenser-turbine-tank=Turbine à condensation +se-condenser-turbine-generator=Turbine à condensation +se-core-fragment-processor=Processeur de fragments de noyau +se-core-miner=Foreuse grande profondeur +se-core-miner-drill=Foreuse grande profondeur +se-cryogun-ice=Mur de glace +se-dimensional-anchor=Ancrage dimensionel +se-electric-boiler=Chaudière électrique +se-fluid-burner-generator=Groupe électrogène à carburant +se-fuel-refinery=Raffinerie de carburant +se-gate-fragment=Fragment d'artefact +se-holmium-ore=Holminite +se-iridium-ore=Iridite +se-meteor-defence-container=Canon de défense anti-météorite globale +se-meteor-defence-charger=Canon de défense anti-météorite globale +se-meteor-point-defence-container=Canon de défense anti-météorite rapprochée +se-meteor-point-defence-charger=Canon de défense anti-météorite rapprochée +se-meteor-point-defence-charger-overcharged=Canon de défense anti-météorite rapprochée - mode de recharge rapide +se-methane-ice=Glace de méthane +se-naquium-ore=Naquitite +se-pulveriser=Broyeur +se-rocket-launch-pad=Silo à fusées cargo +se-rocket-launch-pad-tank=Silo à fusées cargo +se-rocket-launch-pad-silo=Silo à fusées cargo +se-rocket-launch-pad-combinator=Silo à fusées cargo +se-rocket-launch-pad-_-seat=Silo à fusées cargo +se-rocket-launch-pad-settings=Silo à fusées cargo +se-rocket-landing-pad=Aire d'atterrissage +se-space-accumulator=Accumulateur au holmium +se-space-accumulator-2=Accumulateur au naquium +se-space-astrometrics-laboratory=Laboratoire d'astrométrie +se-space-biochemical-laboratory=Laboratoire de biochimie +se-space-assembling-machine=Machine d'assemblage spatiale +se-space-capsule-_-vehicle=Capsule spatiale +se-space-curved-rail=Rail spatial +se-space-decontamination-facility=Installation de décontamination +se-space-electromagnetics-laboratory=Laboratoire d'électromagnétique +se-space-genetics-laboratory=Laboratoire de génétique +se-space-growth-facility=Installation de croissance +se-space-gravimetrics-laboratory=Laboratoire de gravimétrie +se-space-hypercooler=Hyper-refroidisseur +se-space-laser-laboratory=Laboratoire laser +se-lifesupport-facility=Installation de support de vie +se-space-manufactory=Manufacture spatiale +se-space-material-fabricator=Installation de nucléosynthèse +se-space-mechanical-laboratory=Laboratoire mécanique +se-space-particle-accelerator=Accélérateur de particules +se-space-particle-collider=Collisionneur de particules +se-space-plasma-generator=Générateur de plasma +se-space-radiation-laboratory=Laboratoire de radioactivité +se-space-radiator=Radiateur thermique +se-space-radiator-2=Radiateur thermique avancé +se-recycling-facility=Installation de recyclage +se-space-pipe=Tuyau spatial +se-space-pipe-long=Tuyau spatial long +se-space-pipe-long-straight=Tuyau spatial long droit (__1__) +se-space-pipe-long-junction=Tuyau spatial long de jonction (__1__) +se-space-pipe-to-ground=Tuyau spatial souterrain +se-space-science-lab=Laboratoire de sciences spatiales +se-space-solar-panel=Panneau solaire spatial +se-space-solar-panel-2=Panneau solaire spatial avancé +se-space-solar-panel-3=Panneau solaire spatial supérieur +se-space-spectrometry-facility=Laboratoire de spectrométrie +se-space-straight-rail=Rail spatial +se-space-supercomputer-1=Supercalculateur +se-space-supercomputer-2=Supercalculateur quantique +se-space-supercomputer-3=Supercalculateur neuronal +se-space-supercomputer-4=Supercalculateur intersidéral +se-space-telescope-radio=Radiotélescope +se-space-telescope-microwave=Téléscope à micro-ondes +se-space-telescope=Télescope +se-space-telescope-xray=Télescope à rayons X +se-space-telescope-gammaray=Télescope à rayons gamma +se-space-thermodynamics-laboratory=Laboratoire de thermodynamique +se-space-splitter=Répartiteur spatial +se-space-transport-belt=Convoyeur spatial +se-space-underground-belt=Convoyeur spatial souterrain +se-spaceship-antimatter-engine=Moteur à antimatière pour vaisseau spatial +se-spaceship-antimatter-booster-tank=Réservoir d'antimatière pour vaisseau spatial +se-spaceship-console=Poste de pilotage du vaisseau spatial +se-spaceship-console-output=Sortie des signaux du poste de pilotage du vaisseau spatial +se-spaceship-console-alt=Poste de pilotage endommagé +se-spaceship-gate=Sas de vaisseau spatial +se-spaceship-ion-engine=Moteur ionique pour vaisseau spatial +se-spaceship-ion-booster-tank=Réservoir à ions pour vaisseau spatial +se-spaceship-obstacle=Débris spatiaux +se-spaceship-rocket-engine=Moteur de vaisseau spatial +se-spaceship-rocket-booster-tank=Réservoir de vaisseau spatial +se-spaceship-wall=Paroi de vaisseau spatial +se-water-ice=Glace d'eau +se-vitamelange=Vitamélange +se-vulcanite=Vulcanite +small-asteroid=Petit astéroïde +medium-asteroid=Astéroïde moyen +large-asteroid=Grand astéroïde +se-gate-part=Pièce d'artefact +se-gate-platform-scaffold=Artefact improvisé +se-gate-lock-switch=Pièce mobile +se-gate-lock-combinator=Combinateur-annexe +se-gate-platform=Plateforme d'amélioration pour artefacts +se-gate-platform-combinator=Combinateur-annexe +se-gate-energy-interface=Plateforme d'alimentation +se-gate-platform-button-switch=Bouton +se-gate-tank-input=Entrée de fluide +se-gate-tank-output=Sortie de fluide +se-pyramid-a=Structure géométrique +se-pyramid-b=Structure géométrique +se-pyramid-c=Structure géométrique +se-cartouche-a=Inscription +se-cartouche-b-a=Inscription +se-cartouche-b-b=Inscription +se-cartouche-chest=Ancien coffre +se-glyph=Glyphe +glyph=Glyphe +se-gate-addon=Amélioration de l'artefact +se-gate-platform-button-middle=Arrêter +se-gate-platform-button-left=Gauche +se-gate-platform-button-right=Droite +beacon=Diffuseur de modules +se-wide-beacon=Diffuseur de modules longue portée +se-wide-beacon-2=Diffuseur de modules longue portée avancé +se-supercharger=Superchargeur +se-addon-power-pole=Poteau électrique d'appoint +se-pylon=Pylône +se-pylon-substation=Pylône de distribution +se-pylon-construction=Pylône de construction +se-pylon-construction-roboport=Pylône de construction +se-pylon-construction-radar=Pylône de construction à suivi radar +se-pylon-construction-radar-roboport=Pylône de construction à suivi radar +se-pylon-construction-radar-radar=Pylône de construction à suivi radar +se-shield-projector=Projecteur de bouclier +se-shield-projector-shield-floor-east=Bouclier d'énergie +se-shield-projector-shield-floor-north=Bouclier d'énergie +se-shield-projector-shield-floor-northeast=Bouclier d'énergie +se-shield-projector-shield-floor-northwest=Bouclier d'énergie +se-shield-projector-shield-floor-south=Bouclier d'énergie +se-shield-projector-shield-floor-southeast=Bouclier d'énergie +se-shield-projector-shield-floor-southwest=Bouclier d'énergie +se-shield-projector-shield-floor-west=Bouclier d'énergie +se-shield-projector-shield-wall-east=Bouclier d'énergie +se-shield-projector-shield-wall-north=Bouclier d'énergie +se-shield-projector-shield-wall-northeast=Bouclier d'énergie +se-shield-projector-shield-wall-northwest=Bouclier d'énergie +se-shield-projector-shield-wall-south=Bouclier d'énergie +se-shield-projector-shield-wall-southeast=Bouclier d'énergie +se-shield-projector-shield-wall-southwest=Bouclier d'énergie +se-shield-projector-shield-wall-west=Bouclier d'énergie +se-shield-projector-barrier=Bouclier d'énergie +se-naquium-heat-pipe=Conduite de chaleur en naquium +se-naquium-heat-pipe-horizontal=Conduite de chaleur horizontale en naquium +se-naquium-heat-pipe-vertical=Conduite de chaleur verticale en naquium +se-naquium-heat-pipe-long=Conduite de chaleur en naquium longue (__1__) +se-deep-space-transport-belt=Convoyeur spatial avancé +se-deep-space-transport-belt-black=Convoyeur spatial avancé noir +se-deep-space-transport-belt-white=Convoyeur spatial avancé blanc +se-deep-space-transport-belt-red=Convoyeur spatial avancé rouge +se-deep-space-transport-belt-yellow=Convoyeur spatial avancé jaune +se-deep-space-transport-belt-green=Convoyeur spatial avancé vert +se-deep-space-transport-belt-cyan=Convoyeur spatial avancé cyan +se-deep-space-transport-belt-blue=Convoyeur spatial avancé bleu +se-deep-space-transport-belt-magenta=Convoyeur spatial avancé magenta +se-deep-space-underground-belt=Convoyeur spatial avancé souterrain +se-deep-space-underground-belt-black=Convoyeur spatial avancé souterrain noir +se-deep-space-underground-belt-white=Convoyeur spatial avancé souterrain blanc +se-deep-space-underground-belt-red=Convoyeur spatial avancé souterrain rouge +se-deep-space-underground-belt-yellow=Convoyeur spatial avancé souterrain jaune +se-deep-space-underground-belt-green=Convoyeur spatial avancé souterrain vert +se-deep-space-underground-belt-cyan=Convoyeur spatial avancé souterrain cyan +se-deep-space-underground-belt-blue=Convoyeur spatial avancé souterrain bleu +se-deep-space-underground-belt-magenta=Convoyeur spatial avancé souterrain magenta +se-deep-space-splitter=Répartiteur spatial avancé +se-deep-space-splitter-black=Répartiteur spatial avancé noir +se-deep-space-splitter-white=Répartiteur spatial avancé blanc +se-deep-space-splitter-red=Répartiteur spatial avancé rouge +se-deep-space-splitter-yellow=Répartiteur spatial avancé jaune +se-deep-space-splitter-green=Répartiteur spatial avancé vert +se-deep-space-splitter-cyan=Répartiteur spatial avancé cyan +se-deep-space-splitter-blue=Répartiteur spatial avancé bleu +se-deep-space-splitter-magenta=Répartiteur spatial avancé magenta +se-core-fissure=Fissure du noyau +se-big-turbine=Turbine très haute température +se-big-turbine-generator=Turbine très haute température +se-big-turbine-tank=Turbine très haute température +se-big-heat-exchanger=Échangeur de chaleur très haute température +se-blueprint-registration-point=Point d'enregistrement du plan de construction +se-delivery-cannon=Canon logistique +se-delivery-cannon-settings=Canon logistique +se-delivery-cannon-energy-interface=Canon logistique +se-delivery-cannon-chest=Coffre de réception pour capsules logistiques +se-delivery-cannon-weapon=Canon logistique militaire +se-delivery-cannon-weapon-settings=Canon logistique militaire +se-delivery-cannon-weapon-energy-interface=Canon logistique militaire +se-spaceship-clamp=Fixation d'amarrage pour vaisseau spatial +se-spaceship-clamp-place=Fixation d'amarrage pour vaisseau spatial +se-spaceship-clamp-power-pole-external-east=Connexion de réseaux de fixation de vaisseaux spatiaux +se-spaceship-clamp-power-pole-external-west=Connexion de réseaux de fixation de vaisseaux spatiaux +se-bloater-pool-cloud=Débris biologiques +se-energy-transmitter-emitter=Émetteur de faisceau d'énergie +se-energy-transmitter-chamber=Chambre à faisceau d'énergie +se-energy-transmitter-injector=Injecteur de faisceau d'énergie +se-energy-transmitter-injector-reactor=Injecteur de faisceau d'énergie +se-energy-receiver=Récepteur de faisceau d'énergie +se-energy-beam-defence=Parapluie magnétique +se-nexus=Nexus +se-nexus-charger=Nexus +se-space-probe-rocket=Fusée pour sonde spatiale +se-space-probe-rocket-silo=Silo à fusées pour sondes spatiales +se-interburbulator-interface=Interface de l'Interburbulateur +se-interburbulator-control=Contrôle de l'Interburbulateur +se-interburbulator-projector=Projecteur de l'Interburbulateur +se-burbulator=Brontion Burbulator 33027756 + +[entity-description] +pipe=Distribution de fluides. +pipe-to-ground=Distribution souterraine de fluides. +straight-rail=Voies ferroviaires. +curved-rail=Voies ferroviaires. +stone-furnace=Réalise les opérations de fonderie. +steel-furnace=Réalise les opérations de fonderie. +electric-furnace=Réalise les opérations de fonderie. +burner-assembling-machine=Une installation de fabrication automatisée thermique. +assembling-machine-1=Une installation de fabrication automatisée. +assembling-machine-2=Une installation de fabrication automatisée. +assembling-machine-3=Une installation de fabrication automatisée. +oil-refinery=Raffine le pétrole brut en produits plus utiles. +se-fuel-refinery=Installation automatisée de production de carburants. +chemical-plant=Une installation de traitement chimique automatisée. +lab=Une installation de recherche automatisée. +burner-lab=Une installation de recherche automatisée. +transport-belt=Un convoyeur qui déplace les objets. +fast-transport-belt=Un convoyeur qui déplace les objets. +express-transport-belt=Un convoyeur qui déplace les objets. +underground-belt=Un convoyeur qui déplace les objets sous terre. +fast-underground-belt=Un convoyeur qui déplace les objets sous terre. +express-underground-belt=Un convoyeur qui déplace les objets sous terre. +splitter=Un mécanisme permettant de diviser, fusionner ou trier deux convoyeurs +fast-splitter=Un mécanisme permettant de diviser, fusionner ou trier deux convoyeurs +express-splitter=Un mécanisme permettant de diviser, fusionner ou trier deux convoyeurs +se-gate-platform-scaffold=Quel que soit la nature de l'anneau, il ne fonctionnera pas. C'est un chantier de construction pour faire quelques réparations, installer quelques moteurs, des capteurs, une interface de contrôle et d'autres accessoires. +se-gate-lock-switch=Appuyez sur __CONTROL__rotate__ pour le déplacer manuellement. +se-gate-platform-button-switch=Appuyez sur __CONTROL__rotate__ pour pousser. +se-gate-lock-combinator=Pas encore opérationnel. +se-gate-platform-combinator=Pas encore opérationnel. +se-gate-energy-interface=Fournit de l'énergie à l'artefact. +rocket-silo=Lancez un satellite pour débloquer la vue satellite et découvrir de nouvelles planètes, lunes et ceintures d'astéroïdes dans ce système stellaire. Peut découvrir de nouvelles étoiles une fois que tous les objets de ce système seront connus. +se-antimatter-reactor=Annihile l'antimatière avec la matière pour générer une chaleur extrême. +se-beryllium-ore=Minerai de béryllium. +se-condenser-turbine=75 % de l'efficacité énergétique d'une turbine à vapeur classique, mais permet de récupérer 99 % de la vapeur utilisée sous forme d'eau. Plage de température : 100 à 999°C. +se-core-fragment-processor=Extrait les ressources des fragments de noyau. +se-core-miner=Permet l'extraction de ressources d'une planète ou d'une lune sans risquer d'épuiser leurs gisements. L'efficacité individuelle de chaque foreuse grande profondeur diminue si plusieurs sont placées sur la même surface. Consommation de 50MW. +se-core-miner-drill=Permet l'extraction de ressources d'une planète ou d'une lune sans risquer d'épuiser leurs gisements. L'efficacité individuelle de chaque foreuse grande profondeur diminue si plusieurs sont placées sur la même surface. Consommation de 50MW. +se-dimensional-anchor=[font=default-bold][color=#f5cb48]Peut uniquement être placé en orbite proche d'une étoile[/color][/font]\nUtilise le puits de gravité de l'étoile comme point de stabilisation pour une anomalie spatiale. +se-electric-boiler=Crée de la vapeur à partir d'eau en utilisant de l'énergie électrique. 90% de rendement. +se-fluid-burner-generator=Nécessite un carburant liquide (par exemple du carburant pour fusées liquide) pour générer de l'électricité. Simple et compact, mais n'a pas le rendement des grands systèmes utilisant de la vapeur. Conçu pour l'espace. La consommation en carburant varie fonction de sa valeur énergétique. +se-holmium-ore=Minerai de holmium. +se-iridium-ore=Minerai d'iridium.\n[font=default-bold][color=#e4cead]Exploitable avec :[/color][/font] [img=entity/area-mining-drill] __ENTITY__area-mining-drill__ +se-meteor-defence-container=Capable de défendre une planète entière contre les chutes de météorites, mais ne peut en détruire qu'une à la fois. Doit être approvisionné en munitions et complètement chargé pour faire feu. Précision de 80%. Consomme 20MW lors de la recharge. +se-meteor-defence-charger=Capable de défendre une planète entière contre les chutes de météorites, mais ne peut en détruire qu'une à la fois. Doit être approvisionné en munitions et complètement chargé pour faire feu. Précision de 80%. Consomme 20MW lors de la recharge. +se-meteor-point-defence-container=Protège une zone locale contre les chutes de météorites. Peut faire feu sur 4 météorites simultanément. Doit être approvisionné en munitions et être complètement chargé pour faire feu. Portée de 64, précision de 50%, doit être rechargé après avoir fait feu. Tournez l'installation pour changer le mode de recharge. +se-meteor-point-defence-charger=Protège une zone locale contre les chutes de météorites. Peut faire feu sur 4 météorites simultanément. Doit être approvisionné en munitions et être complètement chargé pour faire feu. Portée de 64, précision de 50%, doit être rechargé après avoir fait feu. Tournez l'installation pour changer le mode de recharge. +se-meteor-point-defence-charger-overcharged=Protège une zone locale contre les chutes de météorites. Peut faire feu sur 4 météores simultanément. Doit être approvisionné avec la munition appropriée et être complètement chargé pour faire feu. Portée de 64, précision de 50%, doit être rechargé après avoir fait feu. Une installation en mode de charge rapide nécessite moins de puissance en moyenne mais sollicitera fortement votre réseau électrique lors du tir. +se-naquium-ore=Minerai de naquium. +se-rocket-launch-pad=Embarque sa cargaison vers la destination ciblée. Peut également embarquer des passagers, utilisez __CONTROL__toggle-driving__ près de la porte d'entrée. Consultez la section Fusées Cargo [img=virtual-signal/informatron] dans l'InformaTron pour plus de détails[__CONTROL__informatron__] +se-rocket-landing-pad=Aire de réception du chargement des fusées cargo. +se-space-assembling-machine=Une machine d'assemblage modifiée qui peut fonctionner dans l'espace. +se-space-astrometrics-laboratory=Combine, compare et quantifie différentes sources de données astronomiques. +se-space-biochemical-laboratory=Un laboratoire de chimie avancé spécialisé dans la biochimie. Peut également réaliser les opérations d'une usine de produits chimiques ou d'une raffinerie de pétrole. +se-space-capsule-_-vehicle=Véhicule capable de ramener des passagers vers la surface planétaire la plus proche. Entrez dans la capsule en appuyant sur __CONTROL__toggle-driving__. +se-space-decontamination-facility=Purifie les substances destinées à être utilisées dans des environnements stériles, et prépare les liquides destinés à être utilisés dans des conditions de basse pression. +se-space-electromagnetics-laboratory=Installation conçue pour la manipulation de champs magnétiques intenses et de fortes tensions électriques +se-space-genetics-laboratory=Laboratoire conçu pour le séquençage et la manipulation génétique, ainsi que l'impression génétique de cultures. +se-space-gravimetrics-laboratory=Laboratoire conçu pour simuler et analyser les perturbations gravitationnelles +se-space-growth-facility=Assure la croissance d'échantillons biologiques en conditions contrôlées impossibles ailleurs. En plus des contrôles climatiques standards, tout est disponible, des cuves à micro-gravité aux centrifugeuses à haute gravité. +se-space-hypercooler=Échangeur thermique pour fluide réfrigérant, permettant d'en refroidir une partie en transférant sa chaleur à l'autre. +se-space-laser-laboratory=Laboratoire d'essai sur les lasers. Le port de protections oculaires est obligatoire. +se-lifesupport-facility=Prend en charge les opérations de support de vie dans les environnements hostiles. +se-space-manufactory=Une machine d'assemblage géante capable de gérer des recettes complexes. Fonctionne uniquement dans l'espace (ou à bord d'un vaisseau spatial) +se-space-material-fabricator=Permet de synthétiser et de façonner de nouveaux matériaux. Un croisement entre un collisionneur de particules et une imprimante 3D. +se-space-mechanical-laboratory=Permet de mettre en œuvre tous les tests et procédés mécaniques classiques : cisaillement, broyage, déchirement, vibrations, etc... +se-space-particle-accelerator=Accélère les particules à des vitesses proches de la vitesse de la lumière. +se-space-particle-collider=Permet la collision de particules à haute vélocité et l'analyse des résultats. +se-space-pipe=Vous pouvez marcher au-dessus. +se-space-pipe-long=Un moyen efficace et bon marché pour déplacer des fluides sur une grande distance. Vous pouvez marcher au-dessus. +se-space-pipe-long-straight=Longueur de __1__. Ne se connecte pas sur les cotés. Très pratique pour les tuyaux parallèles et pour acheminer les fluides sur de longues distances. +se-space-pipe-long-junction=Longueur de __1__. Possède un point de connexion central permettant la connexion sur les cotés. Pratique pour alimenter vos lignes d'assemblage. +se-space-pipe-to-ground=Coûteux et avec une portée restreinte, vous devriez l'utiliser uniquement lorsque nécessaire. +se-space-plasma-generator=Permet de faire passer de la matière à l'état de plasma pour diverses applications scientifiques. +se-pulveriser=Pulvérise et écrase les minerais et les fragments de noyau de planète. +se-space-radiation-laboratory=Laboratoire conçu pour la manipulation en toute sécurité de matières radioactives. Permet également de réaliser les opérations de traitement de l'uranium. +se-space-radiator=Dissipe par rayonnement l'excès de chaleur du fluide réfrigérant. +se-space-radiator-2=Dissipe par rayonnement l'excès de chaleur du fluide réfrigérant. +se-recycling-facility=Permet les opérations de recyclage de la ferraille et d'autres sous-produits indésirables. +se-space-solar-panel=Panneau solaire à haut rendement. On peut se déplacer dessus. +se-space-solar-panel-2=Panneau solaire à rendement supérieur. On peut se déplacer dessus. +se-space-solar-panel-3=Panneau solaire à rendement extrême. On peut se déplacer dessus. +se-space-spectrometry-facility=Spectrophotométrie, chromatographie en phase gazeuse, spectrométrie de masse et autres analyses en spectrographie. Jeter des trucs sur un mur, les faire dévier, voir où ça arrive. +se-space-supercomputer-1=Manipule de grandes quantité de données pour l'analyse et la simulation. +se-space-supercomputer-2=Supercalculateur quantique. Permet d'améliorer la vitesse de traitement des données. +se-space-supercomputer-3=Supercalculateur associant un réseau de neurones adaptatif à un système d'informatique quantique.Permet d'encore améliorer la vitesse de traitement et la qualité des simulations. +se-space-supercomputer-4=Un supercalculateur semi-organique utilisant des réseaux de composants nanométriques. Met à profit les distorsions de l'espace-temps et les dimensions supérieures pour optimiser la densité de traitement et la distribution de l'énergie. +se-space-straight-rail=Rails conçus pour l'espace, mais qui peuvent également être utilisés au sol. +se-space-science-lab=Laboratoire capable de traiter les packs de science avancés. +se-space-telescope=Un télescope sophistiqué sensible à de multiples longueurs d'onde dans le spectre visible. +se-space-telescope-gammaray=Les rayons gamma ne se réfractent pas et ne peuvent donc pas être focalisés par effet lentille. Ce télescope sophistiqué utilise un jeu de miroirs et de détecteurs spécifiques pour l'étude de ce rayonnement. +se-space-telescope-xray=Les rayons X sont bloqués par la plupart des atmosphères. Ce puissant télescope est conçu pour l'espace où l'atmosphère n'est pas un problème. +se-space-telescope-microwave=Un très grand télescope consacré à l'étude des micro-ondes et du fond diffus cosmologique. +se-space-telescope-radio=Un très grand télescope capable de détecter les ondes radio faibles provenant de sources extrêmement lointaines. +se-space-thermodynamics-laboratory=Permet de mettre en œuvre une large gamme de procédés haute température. Permet également la plupart des opérations de métallurgie, comme la fonderie. +se-space-transport-belt=Convoyeur spatial permettant de déplacer vos objets sans qu'ils ne s'envolent en l'absence de gravité. +se-spaceship-antimatter-engine=[font=default-bold][color=#f5cb48]Peut uniquement être placé sur du plancher de vaisseau spatial[/color][/font]\nAnnihile un flux de particules d'antimatière. Compte comme une paroi pour le confinement d'un vaisseau spatial. +se-spaceship-antimatter-booster-tank=[font=default-bold][color=#f5cb48]Peut uniquement être placé sur du plancher de vaisseau spatial[/color][/font]\nRéservoir à antimatière. Nécessaire pour le lancement du vaisseau spatial. +se-spaceship-ion-engine=[font=default-bold][color=#f5cb48]Peut uniquement être placé sur du plancher de vaisseau spatial[/color][/font]\nUtilise une petite quantité de flux ionique mais beaucoup d'énergie pour la propulsion. Compte comme une paroi pour le confinement d'un vaisseau spatial. +se-spaceship-ion-booster-tank=[font=default-bold][color=#f5cb48]Peut uniquement être placé sur du plancher de vaisseau spatial[/color][/font]\nContient un flux d'ions. Nécessaire pour le lancement d'un vaisseau spatial, mais ne peut être lancé que depuis l'espace. +se-spaceship-console=[font=default-bold][color=#f5cb48]Peut uniquement être placé sur du plancher de vaisseau spatial[/color][/font]\nPermet de déplacer un vaisseau spatial entre les planètes, les lunes, les orbites et les champs d'astéroïdes. Doit être confiné à l'intérieur d'un espace encadré par du plancher et des parois de vaisseau spatial, sans brèche qui provoquerait une rupture de confinement. Permet un contrôle d'intégrité pour mettre en évidence les problèmes. +se-spaceship-console-output=Émet des signaux relatifs à l'état actuel du vaisseau spatial. Voir Vaisseaux spatiaux dans [img=virtual-signal/informatron] l'InformaTron pour plus d'informations [__CONTROL__informatron__]. +se-spaceship-console-alt=[font=default-bold][color=#f5cb48]Ne peut être placé que sur du plancher de vaisseau spatial/color][/font]\nCe poste de pilotage est endommagé et ne peut plus être utilisé pour piloter un vaisseau spatial. +se-spaceship-gate=[font=default-bold][color=#f5cb48]Peut uniquement être placé sur du plancher de vaisseau spatial[/color][/font]\nUn champ de force permet d'éviter la décompression lors de l'ouverture du sas. Compte comme une paroi de vaisseau pour le confinement du vaisseau. +se-spaceship-rocket-engine=[font=default-bold][color=#f5cb48]Peut uniquement être placé sur du plancher de vaisseau spatial[/color][/font]\nBrûle du carburant pour fusée liquide. Compte comme une paroi pour le confinement du vaisseau. +se-spaceship-rocket-booster-tank=[font=default-bold][color=#f5cb48]Peut uniquement être placé sur du plancher de vaisseau spatial[/color][/font]\nRéservoir de carburant pour fusée liquide. Nécessaire pour le lancement d'un vaisseau spatial. +se-spaceship-wall=[font=default-bold][color=#f5cb48]Peut uniquement être placé sur du plancher de vaisseau spatial[/color][/font]\n Compte comme une paroi pour le contrôle d'intégrité du vaisseau. Attention, les interstices en diagonale provoqueront une rupture de confinement. +beacon=8 emplacements de modules. Diffuse l'effet des modules insérés aux structures amies proches. Plusieurs diffuseurs à portée de la même structure entraineront une surcharge et provoqueront son arrêt. Portée : 3. +se-wide-beacon=15 emplacements de modules. Diffuse l'effet des modules insérés aux structures amies proches. Plusieurs diffuseurs à portée de la même structure entraineront une surcharge et provoqueront son arrêt. Portée : 14. +se-wide-beacon-2=20 emplacements de modules. Diffuse l'effet des modules insérés aux structures amies proches. Plusieurs diffuseurs à portée de la même structure entraineront une surcharge et provoqueront son arrêt. Portée : 14. +kr-singularity-beacon=Un diffuseur compact à 100% d'efficacité à courte portée. Transmet les effets des modules à des entités amies proches dans un rayon de 2 tuiles. Plusieurs diffuseurs à portée de la même structure entraineront une surcharge et provoqueront son arrêt. +se-supercharger=Peut recharger jusqu'à 64 robots simultanément à grande vitesse. Consomme jusqu'à 1GW. +se-addon-power-pole=Un petit poteau d'alimentation qui peut être ajouté sur une structure pour un meilleur contrôle de la couverture électrique. +se-pylon=Distribue de l'énergie électrique. Portée de raccordement : 64. +se-pylon-substation=Distribue de l'énergie électrique. Portée de raccordement : 64, Zone d'approvisionnement logistique : 64x64. +se-pylon-construction=Distribue de l'énergie électrique et étend le réseau logistique. Portée de raccordement : 64, Zone de construction : 64x64. +se-pylon-construction-radar=Distribue de l'énergie électrique, étend le réseau logistique et fournit une vision radar. Portée de raccordement : 64, Zone de construction et de vision : 256x256, Zone d'approvisionnement logistique 4x4. +se-shield-projector=Crée un champ de force protecteur. La consommation augmente lorsque le projecteur est en charge ou que le champ de force subit des dégâts. Le champ de force peut bloquer les projectiles des ennemis si le mod "Combat Mechanics Overhaul" est installé. +se-big-turbine=Un grand générateur qui consomme de la vapeur à 5000°C, rend de la vapeur à 500°C à l'autre extrémité de l'eau sur les côtés. 2% de l'énergie d'entrée est inutilisée et se retrouve dans la vapeur de sortie. +se-big-heat-exchanger=Un gros échangeur de chaleur à grande capacité thermique conçu pour les températures extrêmes. +se-delivery-cannon=Un canon électromagnétique capable de projeter des ressources en orbite et au-delà. Cause des dommages à destination si la capsule n'est pas récupérée en sécurité. À utiliser avec prudence. Capacité de 1GJ, consomme 50MW en charge. +se-delivery-cannon-chest=Un conteneur conçu pour recevoir les capsules logistiques haute vélocité projetées par canon logistique. Doit disposer d'emplacements d'inventaire suffisants pour la procédure de réception. +se-delivery-cannon-weapon=Un canon électromagnétique capable de projeter des munitions en orbite et au-delà. À utiliser avec prudence. +se-spaceship-clamp=Une fixation d'amarrage pour vaisseau spatial peut permettre le verrouillage de celui-ci sur un système similaire orienté dans le sens inverse. Compte comme une paroi de vaisseau spatial pour le confinement du vaisseau. +se-spaceship-clamp-place=Une fixation d'amarrage pour vaisseau spatial peut permettre le verrouillage de celui-ci sur un système similaire orienté dans le sens inverse. Compte comme une paroi de vaisseau spatial pour le confinement du vaisseau. +se-spaceship-clamp-power-pole-external-east=Point de connexion des câbles sur une fixation. Il transmet les signaux logique et l'alimentation électrique à la fixation connectée pendant tout le temps où le vaisseau est amaré. +se-spaceship-clamp-power-pole-external-west=Point de connexion des câbles sur une fixation. Il transmet les signaux logique et l'alimentation électrique à la fixation connectée pendant tout le temps où le vaisseau est amaré. +se-space-accumulator=Stockage d'énergie de haute densité. +se-space-accumulator-2=Stockage d'énergie de haute densité. +se-energy-transmitter-emitter=Le système central qui génère un faisceau d'énergie interplanétaire. Il peut être utilisé comme une arme ou pour transmettre de l'énergie à un récepteur de faisceau d'énergie. Il doit être être raccordé à une chambre à faisceau d'énergie, elle même alimentée par un ou plusieurs injecteurs de faisceau d'énergie. L'intensité du faisceau est dépendante du nombre d'injecteurs. +se-energy-transmitter-chamber=Doit être connecté à un émetteur de faisceau d'énergie. D'autres chambres peuvent être connectées à l'extrémité ou au milieu de chaque côté. Les injecteurs de faisceaux d'énergie peuvent être connectés sur les côtés uniquement. +se-energy-transmitter-injector=Doit être connecté à une chambre de faisceau d'énergie, elle-même raccordée à un émetteur de faisceau. Les injecteurs ont une consommation électrique fixe qui sera transmise dans le rayon, augmentant la puissance reçue par le récepteur, ou augmentant la vitesse de déplacement et les dégâts si le faisceau est utilisée comme arme. +se-energy-transmitter-injector-reactor=Doit être connecté à une chambre de faisceau d'énergie, elle-même raccordée à un émetteur de faisceau. Les injecteurs ont une consommation électrique fixe qui sera transmise dans le rayon, augmentant la puissance reçue par le récepteur, ou augmentant la vitesse de déplacement et les dégâts si le faisceau est utilisée comme arme. +se-energy-receiver=Capte un faisceau d'énergie incident et convertit l'énergie reçue en chaleur. L'émetteur doit être en mode Transmission d'énergie, et cibler le récepteur. +se-energy-beam-defence=Une installation de défense contre les rayons énergétiques. Cette installation est capable de détourner les faisceaux de particules provoqués par une éjection de masse coronale ou bien par une arme énergétique visant la surface. Le seul prérequis de fonctionnement est une grande quantité d'énergie à la hauteur de la puissance du faisceau de particules incident - en plus de 10MW de consommation de base. Un seul Parapluie magnétique permet de protéger une surface entière d'une éjection de masse coronale ou d'un faisceau hostile d'une puissance allant jusqu'à 500GJ. Consultez la rubrique Faisceaux d'énergie dans [img=virtual-signal/informatron] l'InformaTron pour plus d'informations [__CONTROL__informatron__] +spidertron=Peut être déployé depuis une fusée cargo si aucune aire d'atterrissage n'a été définie. +se-nexus=Ne fonctionne que sur un vaisseau spatial en déplacement, avec une consommation d'énergie proportionnelle à la vitesse. Peut obtenir des données à partir du mouvement interstellaire, la génération de données est basée sur l'énergie cinétique du vaisseau. Le Nexus est conçu pour servir de propulseur à distorsion et peut vous permettre de vous échapper de l'amas stellaire local avec la bonne technologie.\nExerce une contrainte d'intégrité liée aux conteneurs de 2000. +se-nexus-charger=Ne fonctionne que sur un vaisseau spatial en déplacement, avec une consommation d'énergie proportionnelle à la vitesse. Peut obtenir des données à partir du mouvement interstellaire, la génération de données est basée sur l'énergie cinétique du vaisseau. Le Nexus est conçu pour servir de propulseur à distorsion et peut vous permettre de vous échapper de l'amas stellaire local avec la bonne technologie. +se-space-probe-rocket-silo=Un silo à fusée pour le lancement de sondes spatiales. +se-linked-container=Un conteneur relié par un espace extradimensionnel à d'autres conteneurs. Les liens du conteneur dépendent de la première surface sur laquelle il est placé. + +[equipment-name] +energy-shield-equipment=Bouclier d'énergie +energy-shield-mk2-equipment=Bouclier d'énergie MK2 +energy-shield-mk3-equipment=Bouclier d'énergie MK3 +energy-shield-mk4-equipment=Bouclier d'énergie MK4 +energy-shield-mk5-equipment=Bouclier d'énergie MK5 +energy-shield-mk6-equipment=Bouclier d'énergie MK6 +se-adaptive-armour-equipment-1=Armure adaptative MK1 +se-adaptive-armour-equipment-2=Armure adaptative MK2 +se-adaptive-armour-equipment-3=Armure adaptative MK3 +se-adaptive-armour-equipment-4=Armure adaptative MK4 +se-adaptive-armour-equipment-5=Armure adaptative MK5 +se-rtg-equipment=Générateur thermoélectrique à radio-isotope portable +se-rtg-equipment-2=Générateur thermoélectrique à radio-isotope portable avancé +se-lifesupport-equipment-1=Module de support de vie MK1 +se-lifesupport-equipment-2=Module de support de vie MK2 +se-lifesupport-equipment-3=Module de support de vie MK3 +se-lifesupport-equipment-4=Module de support de vie MK4 + +[equipment-description] +energy-shield-equipment=Génère une bulle protectrice qui se recharge rapidement mais consomme beaucoup d'énergie. +energy-shield-mk2-equipment=Génère une bulle protectrice qui se recharge rapidement mais consomme beaucoup d'énergie. +energy-shield-mk3-equipment=Génère une bulle protectrice qui se recharge rapidement mais consomme beaucoup d'énergie. +energy-shield-mk4-equipment=Génère une bulle protectrice qui se recharge rapidement mais consomme beaucoup d'énergie. +energy-shield-mk5-equipment=Génère une bulle protectrice qui se recharge rapidement mais consomme beaucoup d'énergie. +energy-shield-mk6-equipment=Génère une bulle protectrice qui se recharge rapidement mais consomme beaucoup d'énergie. +se-adaptive-armour-equipment-1=Armure auto-réparatrice. Se régénère lentement au fil du temps. +se-adaptive-armour-equipment-2=Armure auto-réparatrice. Se régénère lentement au fil du temps. +se-adaptive-armour-equipment-3=Armure auto-réparatrice. Se régénère lentement au fil du temps. +se-adaptive-armour-equipment-4=Armure auto-réparatrice. Se régénère lentement au fil du temps. +se-adaptive-armour-equipment-5=Armure auto-réparatrice. Se régénère lentement au fil du temps. +se-rtg-equipment=Générateur thermoélectrique à radioisotope. Dispositif portable qui convertit la chaleur des désintégrations radioactives en électricité. Fonctionne pendant des décennies sans carburant supplémentaire. +se-rtg-equipment-2=Générateur thermoélectrique à radioisotope amélioré. Dispositif portable qui convertit la chaleur des désintégrations radioactives en électricité. Fonctionne pendant des décennies sans carburant supplémentaire. +se-lifesupport-equipment-1=Augmente l'efficacité des systèmes de support de vie de +100% (cumulatif). Si le système est installé dans une combinaison non spatiale, la prime d'efficacité est réduite de moitié et il ne fonctionnera pas dans l'espace. +se-lifesupport-equipment-2=Augmente l'efficacité des systèmes de support de vie de +200% (cumulatif). Si le système est installé dans une combinaison non spatiale, la prime d'efficacité est réduite de moitié et il ne fonctionnera pas dans l'espace. +se-lifesupport-equipment-3=Augmente l'efficacité des systèmes de support de vie de +400% (cumulatif). Si le système est installé dans une combinaison non spatiale, la prime d'efficacité est réduite de moitié et il ne fonctionnera pas dans l'espace. +se-lifesupport-equipment-4=Augmente l'efficacité des systèmes de support de vie de +800% (cumulatif). Si le système est installé dans une combinaison non spatiale, la prime d'efficacité est réduite de moitié et il ne fonctionnera pas dans l'espace. + +[fluid-name] +se-antimatter-stream=Flux d'antimatière +se-bio-sludge=Boues biologiques +se-contaminated-bio-sludge=Boues biologiques contaminées +se-contaminated-space-water=Eau cosmique contaminée +se-chemical-gel=Gel chimique +se-decompressing-steam=Vapeur +se-liquid-rocket-fuel=Carburant pour fusées liquide +se-methane-gas=Méthane +se-methane-gas-mixed=Méthane mélangé +se-nutrient-gel=Gel nutritif +se-neural-gel=Gel neuronal +se-neural-gel-2=Gel neuronal avancé +se-ion-stream=Flux d'ions +se-plasma-stream=Flux de plasma +se-particle-stream=Flux de particules +se-proton-stream=Flux de protons +se-space-coolant=Fluide réfrigérant à 25°C +se-space-coolant-hot=Fluide réfrigérant à 25°C +se-space-coolant-warm=Fluide réfrigérant à -10°C +se-space-coolant-cold=Fluide réfrigérant à -100°C +se-space-coolant-supercooled=Fluide réfrigérant à -273°C +se-space-water=Eau cosmique +se-beryllium-hydroxide=Hydroxyde de béryllium +se-cryonite-slush=Solution de cryonite + +[fluid-description] +se-space-water=Une eau qui ne gèle pas à basse pression, plus adaptée à la plupart des applications spatiales. +se-space-coolant=La température par défaut du fluide réfrigérant. +se-space-coolant-hot=La température par défaut du fluide réfrigérant. +se-space-coolant-warm=Température du fluide réfrigérant après refroidissement par un radiateur thermique. +se-space-coolant-cold=Température du fluide réfrigérant après hyper-refroidissement. +se-space-coolant-supercooled=Température du fluide réfrigérant après plusieurs cycles d'hyper-refroidissement. + +[fuel-category-name] +antimatter=Carburant d'antimatière + +[item-group-name] +space=Espace +science=Science +spaceship=Vaisseau spatial +bob-fluids=Fluides +resources=Ressources +intermediate-products=Produits transformés +combat=Équipement et combat + +[item-name] +spidertron=Spidertron +core-fragment=Fragment de noyau (__1__) +effectivity-module-4=Module d'efficacité 4 +effectivity-module-5=Module d'efficacité 5 +effectivity-module-6=Module d'efficacité 6 +effectivity-module-7=Module d'efficacité 7 +effectivity-module-8=Module d'efficacité 8 +effectivity-module-9=Module d'efficacité 9 +glass=Verre +productivity-module-4=Module de productivité 4 +productivity-module-5=Module de productivité 5 +productivity-module-6=Module de productivité 6 +productivity-module-7=Module de productivité 7 +productivity-module-8=Module de productivité 8 +productivity-module-9=Module de productivité 9 +rocket-fuel=Carburant pour fusée +sand=Sable +solid-sand=Sable lavé +washed-sand=Sable lavé +satellite=Satellite de navigation +se-satellite-telemetry=Mesures satellite +se-antimatter-canister=Conteneur d'antimatière +se-astrometric-data=Données astrométriques +se-astronomic-catalogue-1=Répertoire astronomique +se-astronomic-catalogue-2=Répertoire astronomique étendu +se-astronomic-catalogue-3=Répertoire astronomique complet +se-astronomic-catalogue-4=Répertoire astronomique universel +se-astronomic-insight=Rapport de découvertes astronomiques +se-astronomic-science-pack-1=Pack de science astronomique 1 +se-astronomic-science-pack-2=Pack de science astronomique 2 +se-astronomic-science-pack-3=Pack de science astronomique 3 +se-astronomic-science-pack-4=Pack de science astronomique 4 +se-atomic-data=Données atomiques +se-beryllium-ore=Béryl +se-ballistic-shielding-data=Données de protection balistique +se-beryllium-ore-crushed=Béryl broyé +se-beryllium-ore-washed=Béryl lavé +se-beryllium-plate=Plaque de béryllium +se-beryllium-powder=Poudre de béryllium +se-beryllium-ingot=Lingot de béryllium +se-beryllium-sulfate=Sulfate de béryllium +se-bio-combustion-data=Données sur la bio-combustion +se-bio-combustion-resistance-data=Données sur la résistance à la bio-combustion +se-bio-spectral-data=Données bio-spectrales +se-biochemical-data=Données biochimiques +se-biochemical-resistance-data=Données sur la résistance biochimique +se-bioculture=Bio-culture +se-bioelectrics-data=Données bio-électriques +se-biological-catalogue-1=Répertoire biologique +se-biological-catalogue-2=Répertoire biologique étendu +se-biological-catalogue-3=Répertoire biologique complet +se-biological-catalogue-4=Répertoire biologique universel +se-biological-insight=Rapport de découvertes biologiques +se-biological-science-pack-1=Pack de science biologique 1 +se-biological-science-pack-2=Pack de science biologique 2 +se-biological-science-pack-3=Pack de science biologique 3 +se-biological-science-pack-4=Pack de science biologique 4 +se-biomechanical-data=Données biomécaniques +se-biomechanical-resistance-data=Données sur la résistance biomécanique +se-boson-data=Données sur les bosons +se-broken-data=Carte de données endommagée +se-canister=Conteneur sécurisé +se-biogun=Fusil Bio +se-bloater-ammo=Munition fusil bio +se-pheromone-ammo=Fléchette à phéromones +se-cryogun=Cryogun +se-cryogun-ammo=Munitions Cryogun +se-rocket-launch-pad-silo-dummy-ingredient-item=Fusée cargo (Ingrédient caché) +se-rocket-launch-pad-silo-dummy-result-item=Fusée cargo (Ingrédient caché) +se-cargo-rocket-cargo-pod=Nacelle de fusée cargo +se-cargo-rocket-fuel-tank=Réservoir de carburant pour fusées +se-cargo-rocket-section=Section de fusée cargo +se-cargo-rocket-section-packed=Sections de fusée cargo emballées +se-cold-thermodynamics-data=Données sur la thermodynamique à froid +se-comparative-genetic-data=Données génétiques comparatives +se-compressive-strength-data=Données sur la résistance à la compression +se-conductivity-data=Données sur la conductivité +se-contaminated-scrap=Ferraille contaminée +se-core-fragment-omni=Fragment de noyau +se-corrosion-resistance-data=Données sur la résistance à la corrosion +se-cryogenics-data=Données sur la cryogénie +se-cryonite=Cryonite +se-cryonite-crushed=Cryonite broyée +se-cryonite-washed=Cryonite lavée +se-cryonite-rod=Bâton de cryonite +se-cryonite-ion-exchange-beads=Perles d'échange anioniques +se-dark-energy-data=Données sur l'énergie noire +se-darkmatter-data=Données sur la matière noire +se-data-storage-substrate-cleaned=Substrat affiné de stockage de données +se-data-storage-substrate=Substrat brut de stockage de données +se-decompression-data=Données sur la décompression +se-decompression-resistance-data=Données sur la résistance à la décompression +se-universal-catalogue=Répertoire universel +se-deep-space-science-pack=Pack de science intersidérale +se-deep-space-science-pack-1=Pack de science intersidérale 1 +se-deep-space-science-pack-2=Pack de science intersidérale 2 +se-deep-space-science-pack-3=Pack de science intersidérale 3 +se-deep-space-science-pack-4=Pack de science intersidérale 4 +se-doppler-shift-data=Données sur le décalage Doppler +se-durability-data=Données sur la durabilité +se-electrical-shielding-data=Données sur le blindage électrique +se-electromagnetic-field-data=Données sur le champ électromagnétique +se-empty-data=Carte de données vierge +se-empty-lifesupport-canister=Capsule de support de vie vide +se-energy-catalogue-1=Répertoire énergétique +se-energy-catalogue-2=Répertoire énergétique étendu +se-energy-catalogue-3=Répertoire énergétique complet +se-energy-catalogue-4=Répertoire énergétique universel +se-energy-insight=Rapport de découvertes énergétiques +se-energy-science-pack-1=Pack de science de l'énergie 1 +se-energy-science-pack-2=Pack de science de l'énergie 2 +se-energy-science-pack-3=Pack de science de l'énergie 3 +se-energy-science-pack-4=Pack de science de l'énergie 4 +se-entanglement-data=Données sur l'intrication quantique +se-enriched-naquium=Naquium enrichi +se-exotic-fission-data=Données sur la fission exotique +se-exotic-singularity-data=Données sur la singularité +se-explosion-shielding-data=Données sur la protection contre les explosions +se-experimental-alloys-data=Données sur les alliages expérimentaux +se-experimental-biochemical-data=Données biochimiques expérimentales +se-experimental-bioculture=Bio-culture expérimentale +se-experimental-genetic-data=Données génétiques expérimentales +se-experimental-material-decay-data=Données sur la désintégration de matériaux expérimentaux +se-experimental-material-spectral-data=Données spectrales des matériaux expérimentaux +se-experimental-material=Prototype de matériau expérimental +se-experimental-specimen=Biomasse expérimentale +se-experimental-superconductor=Prototype de superconducteur +se-forcefield-data=Données sur les champs de force +se-friction-data=Données sur la friction +se-fusion-test-data=Données sur les essais de fusion +se-gammaray-detector=Détecteur de rayons gamma +se-gammaray-observation-data=Données d'observation en rayons gamma +se-gammaray-test-data=Données sur les rayons gamma +se-gate-fragment=Fragment d'artefact +se-genetic-data=Données génétiques +se-gravity-wave-observation-data=Données sur l'observation des ondes gravitationnelles +se-gravity-wave-data=Données sur les ondes gravitationnelles +se-gravimetric-observation-data=Données sur les observations gravimétriques +se-gravimetric-test-data=Données sur les tests gravimétriques +se-gravitational-lensing-data=Données sur les lentilles gravitationnelles +se-heat-shielding=Protection thermique +se-holmium-ore=Holminite +se-holmium-ore-crushed=Homlinite broyée +se-holmium-ore-washed=Hominite lavée +se-holmium-powder=Poudre de holmium +se-holmium-plate=Plaque de holmium +se-holmium-ingot=Lingot de holmium +se-hot-thermodynamics-data=Données sur la thermodynamique à chaud +se-impact-shielding-data=Donnée sur la protection contre les impacts +se-infrared-observation-data=Données d'observation en infrarouge +se-ion-spectrometry-data=Données de spectrométrie ionique +se-iridium-ore=Iridite +se-iridium-ore-crushed=Iridite broyée +se-iridium-ore-washed=Iridite lavée +se-iridium-piledriver=Enfonceur de pieux en iridium +se-iridium-powder=Poudre d'iridium +se-iridium-plate=Plaque d'iridium +se-iridium-ingot=Lingot d'iridium +se-junk-data=Carte de données usagée +se-laser-shielding-data=Données de protection laser +se-lepton-data=Données sur les leptons +se-lifesupport-canister=Capsule de support de vie +se-machine-learning-data=Données d'apprentissage automatisé +se-magnetic-canister=Conteneur à confinement magnétique +se-magnetic-monopole-data=Données sur le monopôle magnétique +se-material-decay-data=Données sur la désintégration de la matière +se-material-science-pack-1=Pack de science des matériaux 1 +se-material-science-pack-2=Pack de science des matériaux 1 +se-material-science-pack-3=Pack de science des matériaux 3 +se-material-science-pack-4=Pack de science des matériaux 4 +se-material-spectral-data=Données spectrales de la matière +se-material-testing-pack=Pack d'essai de matériaux +se-material-catalogue-1=Répertoire de science des matériaux +se-material-catalogue-2=Répertoire de science des matériaux étendu +se-material-catalogue-3=Répertoire de science des matériaux complet +se-material-catalogue-4=Répertoire de science des matériaux universel +se-material-insight=Rapport de découvertes de science des matériaux +se-medpack=Trousse de soin +se-medpack-2=Trousse de soin MK2 +se-medpack-3=Trousse de soin MK3 +se-medpack-4=Trousse de soin MK4 +se-meteor-defence=Canon de défense anti-météorite globale +se-meteor-defence-ammo=Munitions pour défense anti-météorite globale +se-meteor-point-defence=Canon de défense anti-météorite rapprochée +se-meteor-point-defence-ammo=Munitions pour défense anti-météorite rapprochée +se-methane-ice=Glace de méthane +se-micro-black-hole-data=Données sur les micro trous noirs +se-microwave-observation-data=Données d'observation en micro-ondes +se-negative-pressure-data=Données sur la pression négative +se-nano-cold-thermodynamics-data=Données sur la thermodynamique des nanomatériaux à froid +se-nano-compressive-strength-data=Données sur la résistance à la compression des nanomatériaux +se-nano-hot-thermodynamics-data=Données sur la thermodynamique des nanomatériaux à chaud +se-nanomaterial=Composite de nanomatériaux +se-nano-tensile-strength-data=Données sur la résistance à la traction des nanomatériaux +se-naquium-ore=Naquitite +se-naquium-ore-crushed=Naquitite broyée +se-naquium-ore-washed=Naquitite lavée +se-naquium-powder=Poudre de naquium +se-naquium-plate=Plaque de naquium +se-naquium-ingot=Lingot de naquium +se-neural-anomaly-data=Données sur les anomalies neuronales +se-nutrient-vat=Éléments nutritifs +se-observation-frame-blank=Cadre d'observation vierge +se-observation-frame-gammaray=Cadre d'observation en rayons gamma +se-observation-frame-infrared=Cadre d'observation en infrarouge +se-observation-frame-microwave=Cadre d'observation en micro-ondes +se-observation-frame-radio=Cadre d'observation en ondes radio +se-observation-frame-uv=Cadres d'observation en UV +se-observation-frame-visible=Cadre d'observation en rayonnement visible +se-observation-frame-xray=Cadre d'observation en rayons X +se-orbital-data=Données sur les calculs orbitaux +se-particle-beam-shielding-data=Données de protection contre les faisceaux de particules +se-plague-bomb=Roquette à agent biologique +se-plasma-canister=Capsule de plasma +se-plasma-electrodynamics-data=Données sur l'électrodynamique des plasmas +se-plasma-thermodynamics-data=Données sur la thermodynamique des plasmas +se-polarisation-data=Données sur la polarisation +se-pressure-containment-data=Données sur le confinement sous pression +se-quantum-phenomenon-data=Données sur les phénomènes quantiques +se-quark-data=Données sur les Quarks +se-radiation-data=Données sur les radiations +se-radiation-exposure-data=Données sur l'exposition aux radiations +se-radiation-exposure-resistance-data=Données sur la résistance aux radiations +se-radiation-shielding-data=Données de protection contre les radiations +se-radio-observation-data=Données d'observation des ondes radios +se-rigidity-data=Données sur la rigidité +se-rtg-equipment=Générateur thermoélectrique à radio-isotope portable +se-rtg-equipment-2=Générateur thermoélectrique à radio-isotope portable avancé +se-scrap=Ferraille +se-shear-strength-data=Données sur la résistance au cisaillement +se-significant-data=Données significatives +se-significant-specimen=Biomasse significative +se-singularity-data=Données sur les singularités +se-space-capsule=Capsule spatiale +se-space-mirror=Miroir multispectral +se-space-platform-plating=Plateforme spatiale avancée +se-space-platform-scaffold=Plateforme spatiale +se-space-rail=Rail spatial +se-spaceship-floor=Plancher de vaisseau spatial +se-specimen=Biomasse +se-subatomic-data=Données subatomiques +se-superconductivity-data=Données sur la supraconductivité +se-superconductor=Supraconducteur +se-superconductive-cable=Câble supraconducteur +se-tensile-strength-data=Données sur la résistance à la traction +se-tesla-ammo=Munitions Fusil Tesla +se-tesla-gun=Fusil Tesla +se-thruster-suit=Combinaison à propulsion +se-thruster-suit-2=Combinaison à propulsion MK2 +se-thruster-suit-3=Combinaison à propulsion MK3 +se-thruster-suit-4=Combinaison à propulsion MK4 +se-timespace-anomaly-data=Données sur les anomalies spatio-temporelles +se-used-lifesupport-canister=Capsule de support de vie usagée +se-uv-observation-data=Données d'observation en UV +se-visible-observation-data=Données d'observation en spectre visible +se-vitamelange=Vitamélange +se-vitamelange-nugget=Pépite de vitamélange +se-vitamelange-roast=Vitamélange torréfié +se-vitamelange-spice=Épice de vitamélange +se-vitamelange-extract=Extrait de vitamélange +se-vulcanite=Vulcanite +se-vulcanite-crushed=Vulcanite broyée +se-vulcanite-washed=Vulcanite lavée +se-vulcanite-block=Bloc de vulcanite +se-vulcanite-ion-exchange-beads=Perles d'échange cationiques +se-water-ice=Glace d'eau +se-xray-observation-data=Données d'observation en rayons X +se-zero-point-energy-data=Données sur l'énergie du point zéro +se-rocket-science-pack=Pack de science aérospatiale +space-science-pack=Pack de science d'optimisation +speed-module-4=Module de vitesse 4 +speed-module-5=Module de vitesse 5 +speed-module-6=Module de vitesse 6 +speed-module-7=Module de vitesse 7 +speed-module-8=Module de vitesse 8 +speed-module-9=Module de vitesse 9 +se-aeroframe-pole=Barre aérospatiale +se-aeroframe-scaffold=Structure aérospatiale +se-aeroframe-bulkhead=Cloison aérospatiale +se-lattice-pressure-vessel=Conteneur pressurisé à treillis +se-heavy-girder=Poutre robuste +se-heavy-bearing=Roulement robuste +se-heavy-composite=Composite robuste +se-heavy-assembly=Assemblage robuste +se-bioscrubber=Épurateur biologique +se-vitalic-epoxy=Résine vitalique +se-vitalic-reagent=Réactif vitalique +se-vitalic-acid=Acide vitalique +se-self-sealing-gel=Gel auto-obturant +se-holmium-cable=Câble de holmium +se-holmium-solenoid=Solénoïde de holmium +se-quantum-processor=Processeur quantique +se-dynamic-emitter=Émetteur dynamique +se-naquium-processor=Processeur au naquium +se-naquium-cube=Cube de naquium +se-naquium-tessaract=Tessaract de naquium +se-wide-beacon=Diffuseur longue portée +se-wide-beacon-2=Diffuseur longue portée avancé +se-lifesupport-equipment-1=Équipement de survie MK1 +se-lifesupport-equipment-2=Équipement de survie MK2 +se-lifesupport-equipment-3=Équipement de survie MK3 +se-lifesupport-equipment-4=Équipement de survie MK4 +se-naquium-heat-pipe=Conduite de chaleur en naquium +se-naquium-heat-pipe-horizontal=Conduite de chaleur en naquium horizontale +se-naquium-heat-pipe-vertical=Conduite de chaleur en naquium verticale +se-naquium-heat-pipe-long=Conduite de chaleur en naquium (longueur __1__) +se-deep-space-transport-belt=Convoyeur spatial avancé +se-deep-space-transport-belt-black=Convoyeur spatial avancé noir +se-deep-space-transport-belt-white=Convoyeur spatial avancé blanc +se-deep-space-transport-belt-red=Convoyeur spatial avancé rouge +se-deep-space-transport-belt-yellow=Convoyeur spatial avancé jaune +se-deep-space-transport-belt-green=Convoyeur spatial avancé vert +se-deep-space-transport-belt-cyan=Convoyeur spatial avancé cyan +se-deep-space-transport-belt-blue=Convoyeur spatial avancé bleu +se-deep-space-transport-belt-magenta=Convoyeur spatial avancé magenta +se-deep-space-underground-belt=Convoyeur spatial souterrain avancé +se-deep-space-underground-belt-black=Convoyeur spatial souterrain avancé noir +se-deep-space-underground-belt-white=Convoyeur spatial souterrain avancé blanc +se-deep-space-underground-belt-red=Convoyeur spatial souterrain avancé rouge +se-deep-space-underground-belt-yellow=Convoyeur spatial souterrain avancé jaune +se-deep-space-underground-belt-green=Convoyeur spatial souterrain avancé vert +se-deep-space-underground-belt-cyan=Convoyeur spatial souterrain avancé cyan +se-deep-space-underground-belt-blue=Convoyeur spatial souterrain avancé bleu +se-deep-space-underground-belt-magenta=Convoyeur spatial souterrain avancé magenta +se-deep-space-splitter=Répartiteur spatial avancé +se-deep-space-splitter-black=Répartiteur spatial avancé noir +se-deep-space-splitter-white=Répartiteur spatial avancé blanc +se-deep-space-splitter-red=Répartiteur spatial avancé rouge +se-deep-space-splitter-yellow=Répartiteur spatial avancé jaune +se-deep-space-splitter-green=Répartiteur spatial avancé vert +se-deep-space-splitter-cyan=Répartiteur spatial avancé cyan +se-deep-space-splitter-blue=Répartiteur spatial avancé bleu +se-deep-space-splitter-magenta=Répartiteur spatial avancé magenta +se-blueprint-registration-point=Point d'enregistrement du plan de construction +se-delivery-cannon-capsule=Capsule pour canon logistique +se-delivery-cannon-capsule-packed=Capsule pour canon logistique : __1__ +se-delivery-cannon-targeter=Système de visée pour canon logistique +se-delivery-cannon-weapon-capsule=Capsule à munitions pour canon logistique militaire +se-delivery-cannon-weapon-capsule-packed=Capsule à munitions pour canon logistique militaire : __1__ +se-delivery-cannon-weapon-targeter=Système de visée pour les canons logistiques militaires +se-energy-transmitter-targeter=Système de visée pour les faisceaux d'énergie +se-arcosphere=Arcosphère +se-arcosphere-a=Arcosphère λ (lambda) +se-arcosphere-b=Arcosphère ξ (xi) +se-arcosphere-c=Arcosphère ζ (zêta) +se-arcosphere-d=Arcosphère θ (thêta) +se-arcosphere-e=Arcosphère ε (epsilon) +se-arcosphere-f=Arcosphère φ (phi) +se-arcosphere-g=Arcosphère γ (gamma) +se-arcosphere-h=Arcosphère ω (oméga) +se-arcosphere-collector=Collecteur d'arcosphère +se-star-probe=Sonde stellaire +se-belt-probe=Sonde pour ceintures d'astéroïdes +se-void-probe=Sonde du vide interstellaire +se-star-probe-data=Données d'observation stellaire +se-belt-probe-data=Données d'observation de ceintures d'astéroïdes +se-void-probe-data=Données d'observation du vide interstellaire +se-nano-engineering-data=Données de nano-ingénierie +se-annihilation-data=Donnée d'annihilation +se-naquium-structural-data=Données structurelles du naquium +se-hyperlattice-data=Données sur les hypertreillis +se-naquium-energy-data=Données énergétiques sur le naquium +se-space-fold-data=Données sur le repliement de l'espace +se-space-warp-data=Données sur la déformation de l'espace +se-space-dialation-data=Données sur la dilatation de l'espace +se-space-injection-data=Données sur les injections spatiales +se-interstellar-data=Données sur la navigation interstellaire +se-teleportation-data=Données sur la téléportation +se-wormhole-data=Données sur les trous de ver +se-rhga-data=Données d'analyse hypergraphique du réel +se-deep-catalogue-1=Répertoire intersidéral +se-deep-catalogue-2=Répertoire intersidéral étendu +se-deep-catalogue-3=Répertoire intersidéral complet +se-deep-catalogue-4=Répertoire intersidéral universel +se-space-probe-rocket=Fusée à sonde spatiale +se-space-probe-rocket-deployed=Fusée à sonde spatiale (déployée) +se-railgun=Fusil électromagnétique +se-railgun-ammo=Munitions pour fusil électromagnétique + +[item-description] +automation-science-pack=Condensé scientifique utilisé par les laboratoires pour la recherche. +chemical-science-pack=Condensé scientifique utilisé par les laboratoires pour la recherche. +logistic-science-pack=Condensé scientifique utilisé par les laboratoires pour la recherche. +military-science-pack=Condensé scientifique utilisé par les laboratoires pour la recherche. +production-science-pack=Condensé scientifique utilisé par les laboratoires pour la recherche. +satellite=Le satellite doit être inséré dans un silo à fusée pour satellite (ou pour sondes spatiales). Le satellite peut découvrir et cartographier les corps célestes du système solaire de lancement, ou bien révéler une étoile proche. Le lancement permet la récupération de [img=item/se-satellite-telemetry] Mesures satellite. +se-satellite-telemetry=Enregistrement de mesures satellites requises pour les sciences spatiales. Obtenu par lancement d'un [img=item/satellite] Satellite de navigation depuis un silo à fusées pour satellite (ou pour sondes spatiales). +se-antimatter-canister=Conteneur conçu pour déplacer en sécurité de l'antimatière. +se-astronomic-science-pack-1=Condensé scientifique utilisé par les laboratoires de recherche spatiaux. +se-astronomic-science-pack-2=Condensé scientifique utilisé par les laboratoires de recherche spatiaux. +se-astronomic-science-pack-3=Condensé scientifique utilisé par les laboratoires de recherche spatiaux. +se-astronomic-science-pack-4=Condensé scientifique utilisé par les laboratoires de recherche spatiaux. +se-beryllium-ore=Minerai de béryllium. +se-biological-science-pack-1=Condensé scientifique utilisé par les laboratoires de recherche spatiaux. +se-biological-science-pack-2=Condensé scientifique utilisé par les laboratoires de recherche spatiaux. +se-biological-science-pack-3=Condensé scientifique utilisé par les laboratoires de recherche spatiaux. +se-biological-science-pack-4=Condensé scientifique utilisé par les laboratoires de recherche spatiaux. +se-canister=Une cuve de confinement polyvalente. +se-cargo-rocket-cargo-pod=Un composant d'une section de fusée cargo. +se-cargo-rocket-fuel-tank=Un composant d'une section de fusée cargo. +se-cargo-rocket-section=L'élément clé de la fusée cargo. À insérer dans le silo de la fusée cargo. Il en faut 100 par fusée. Peut être récupéré lors des atterrissages de la fusée (20 % de récupération de base). +se-cargo-rocket-section-packed=Des sections de fusée cargo conditionnées pour le transit. Doivent être déballées pour être utilisées dans la construction de fusées. +se-bloater-ammo=Crée une flaque d'agent biologique infectieux sur le sol. Les ennemis touchés enflent, ralentissant leur mouvements et prennent des dégâts sur la durée. S'ils meurent dans cet état, ils explosent en endommageant les ennemis proches, pouvant provoquer une réaction en chaine. Les dégâts de cette explosion sont de 50% des points de vie maximum de la victime. +se-pheromone-ammo=Rend la victime confuse, et la retourne contre ses congénères. +se-cryogun=Crée un mur de glace qui gèle vos ennemis. +se-deep-space-science-pack=Condensé scientifique utilisé par les laboratoires de recherche spatiaux. +se-energy-science-pack-1=Condensé scientifique utilisé par les laboratoires de recherche spatiaux. +se-energy-science-pack-2=Condensé scientifique utilisé par les laboratoires de recherche spatiaux. +se-energy-science-pack-3=Condensé scientifique utilisé par les laboratoires de recherche spatiaux. +se-energy-science-pack-4=Condensé scientifique utilisé par les laboratoires de recherche spatiaux. +se-heat-shielding=Un panneau composite utilisé pour les applications à haute température et les structures spatiales. +se-holmium-ore=Minerai de holmium. +se-iridium-ore=Minerai d'iridium. +se-material-science-pack-1=Condensé scientifique utilisé par les laboratoires de recherche spatiaux. +se-material-science-pack-2=Condensé scientifique utilisé par les laboratoires de recherche spatiaux. +se-material-science-pack-3=Condensé scientifique utilisé par les laboratoires de recherche spatiaux. +se-material-science-pack-4=Condensé scientifique utilisé par les laboratoires de recherche spatiaux. +se-medpack=Utilisez la trousse de soin pour vous soigner. +se-medpack-2=Utilisez la trousse de soin pour vous soigner. +se-medpack-3=Utilisez la trousse de soin pour vous soigner. +se-medpack-4=Utilisez la trousse de soin pour vous soigner. +se-meteor-defence=Capable de défendre une planète entière des chutes de météorites, mais ne peut en détruire qu'une à la fois. Doit être approvisionné en munitions et complètement chargé pour faire feu. Précision de 80%. Consomme 20MW pour se recharger après un tir. +se-meteor-defence-ammo=Détruit les météorites. Doit être chargé dans un canon de défense globale anti-météorite. +se-meteor-point-defence=Protège une zone locale contre les météores. Peut faire feu sur 4 météores simultanément. Doit être approvisionné avec la munition appropriée et être complètement chargé pour faire feu. Portée de 64, précision de 50%, doit être rechargé après avoir fait feu. Tournez l'installation pour changer le mode de recharge. +se-meteor-point-defence-container=Détruit les météorites. Doit être chargé dans un canon de défense rapprochée anti-météorite. +se-naquium-ore=Minerai de naquium. On ne le trouve que dans les étendues intersidérales, un trésor du vide interstellaire. +se-rocket-launch-pad-silo-dummy-ingredient-item=Obtenu par l'insertion de 100 sections de fusée cargo et d'une capsule spatiale dans un silo de fusée cargo. +se-rtg-equipment=Générateur thermoélectrique à radio-isotope. Générateur portable qui convertit la chaleur de la désintégration radioactive en électricité. Il dure des décennies sans nécessiter de combustible supplémentaire. +se-rtg-equipment-2=Générateur thermoélectrique à radio-isotope. Générateur portable amélioré qui convertit la chaleur de la désintégration radioactive en électricité. Il dure des décennies sans nécessiter de combustible supplémentaire. +se-plague-bomb=Une munition contenant un agent biologique meurtrier capable d'anéantir toute vie sur une planète. Peut rendre les ennemis plus hostiles à mesure qu'ils meurent lentement. Détruit les biters, les arbres, les poissons, le vitamélange, et plus encore. Les humains auront ensuite besoin d'un système de support de vie pour y résider. +se-space-capsule=Une capsule de contrôle nécessaire pour les fusées cargo. Peut être utilisée pour ramener les passagers à la surface de la planète la plus proche. Entrez dans la capsule en utilisant __CONTROL__toggle-driving__. +se-space-platform-plating=[font=default-bold][color=#f5cb48]Ne peut être placé que sur du vide spatial[/color][/font]\nRevêtement avancé qui permet un mouvement rapide sur la plateforme spatiale. +se-space-platform-scaffold=[font=default-bold][color=#f5cb48]Ne peut être placé que sur du vide spatial[/color][/font]\nÉlément de base de la plateforme spatiale sur lequel vous pourrez placer vos installations. +se-space-rail=Des rails qui peuvent être utilisés en toute sécurité dans l'espace en empêchant le déraillement même en l'absence de gravité. Aucune plateforme spatiale n'est nécessaire, ils sont entièrement autoportants. Ils peuvent également être utilisés sur terre pour des raisons esthétiques. +se-spaceship-floor=Ce sol doit être placé sous tous les composants d'un vaisseau spatial, et encloisonné à l'intérieur de parois de vaisseau spatial. Tout interstice provoquera une rupture de confinement et pourra briser certaines parties du vaisseau. +se-superconductive-cable=Un câble composite supraconducteur qui ne nécessite pas de refroidissement actif. +se-tesla-gun=Éclairs en chaîne à tir rapide. +se-thruster-suit=Une combinaison spatiale qui est nécessaire pour survivre dans l'espace. \nPossède un propulseur et des bottes magnétiques. +se-thruster-suit-2=Une combinaison spatiale qui est nécessaire pour survivre dans l'espace. \nPossède des propulseurs plus puissants, augmente l'inventaire et élargit la grille. +se-thruster-suit-3=Une combinaison spatiale qui est nécessaire pour survivre dans l'espace. \nPossède des propulseurs plus puissants, augmente l'inventaire et élargit la grille. +se-thruster-suit-4=Une combinaison spatiale qui est nécessaire pour survivre dans l'espace. \nPossède des propulseurs plus puissants, augmente l'inventaire et élargit la grille. +space-science-pack=Utilisé pour la mise à niveau de nombreux objets existants. +se-rocket-science-pack=Condensé scientifique utilisé par les laboratoires de recherche spatiaux. Doit être produit dans l'espace. +utility-science-pack=Condensé scientifique utilisé par les laboratoires pour la recherche. +beacon=8 emplacements de modules. Diffuse l'effet des modules insérés aux structures amies proches. Plusieurs diffuseurs à portée de la même structure entraineront une surcharge et provoqueront son arrêt. Portée : 3 +se-wide-beacon=15 emplacements de modules. Diffuse l'effet des modules insérés aux structures amies proches. Plusieurs diffuseurs à portée de la même structure entraineront une surcharge et provoqueront son arrêt. Portée : 14 +se-wide-beacon-2=20 emplacements de modules. Diffuse l'effet des modules insérés aux structures amies proches. Plusieurs diffuseurs à portée de la même structure entraineront une surcharge et provoqueront son arrêt. Portée : 14 +se-lifesupport-equipment-1=Augmente l'efficacité des systèmes de support de vie de +100% (cumulatif). Si le système est installé dans une combinaison non spatiale, son efficacité est réduite de moitié et il ne fonctionnera pas dans l'espace. +se-lifesupport-equipment-2=Augmente l'efficacité des systèmes de support de vie de +200% (cumulatif). Si le système est installé dans une combinaison non spatiale, son efficacité est réduite de moitié et il ne fonctionnera pas dans l'espace. +se-lifesupport-equipment-3=Augmente l'efficacité des systèmes de support de vie de +400% (cumulatif). Si le système est installé dans une combinaison non spatiale, son efficacité est réduite de moitié et il ne fonctionnera pas dans l'espace. +se-lifesupport-equipment-4=Augmente l'efficacité des systèmes de support de vie de +800% (cumulatif). Si le système est installé dans une combinaison non spatiale, son efficacité est réduite de moitié et il ne fonctionnera pas dans l'espace. +se-delivery-cannon=Permet l'envoi précis de ressources par canon logistique +se-delivery-cannon-weapon=Permet l'envoi précis de munitions spéciales par canon logistique militaire +se-arcosphere=Les arcosphères à la dérive dans l'espace intersidéral peuvent être récupérées par un [img=item/se-arcosphere-collector] collecteur d'arcosphère +se-deep-catalogue-1=Données structurées sur le naquium et la nano-ingénierie. +se-deep-catalogue-2=Données structurées sur les assemblages à hypertreillis, les singularités et l'annihilation de matière. +se-deep-catalogue-3=Données structurées sur les distorsions de l'espace à petite échelle et la nano-ingénierie extradimensionnelle. +se-deep-catalogue-4=Données structurées sur les distorsions de l'espace à grande échelle et le voyage extradimensionel. +se-arcosphere-collector=Collecte des arcosphères dans le vide interstellaire. Doit être lancé depuis un silo pour fusées à sondes spatiales situé dans un champ d'astéroïdes. Les opérations de récupération d'arcosphères seront de plus en plus difficiles au fur et à mesure que vous en collecterez. +se-star-probe=Collecte des données sur une étoile et permet d'obtenir des [img=item/se-star-probe-data] Données d'observation stellaire. Doit être lancé depuis un silo à fusées pour sondes spatiales placé en orbite proche d'une étoile. +se-belt-probe=Collecte des données sur une ceinture d'astéroïdes et permet d'obtenir des [img=item/se-belt-probe-data] Données d'observation de ceintures d'astéroïdes. Doit être lancé depuis un silo à fusées pour sondes spatiales placé dans une ceinture d'astéroïdes. +se-void-probe=Collecte des données sur les étendues intersidérales et permet d'obtenir des [img=item/se-void-probe-data] Données sur le vide intersidéral. Doit être lancé depuis un silo à fusées pour sondes spatiales placé dans un champ d'astéroïdes. +se-interstellar-data=Obtenu à partir d'un Nexus placé dans un vaisseau spatial en déplacement. La navigation en espace intersidéral avec un vaisseau plus imposant et plus rapide génère beaucoup plus de données. + +[recipe-name] +core-fragment=Traitement des fragments de noyau (__1__) +rocket-fuel=Carburant pour fusée +se-astrometric-analysis-multispectral-1=Analyse astrométrique multispectrale 1 +se-astrometric-analysis-multispectral-2=Analyse astrométrique multispectrale 2 +se-astrometric-analysis-multispectral-3=Analyse astrométrique multispectrale 3 +se-astronomic-insight-1=Rapport de découvertes astronomiques +se-astronomic-insight-2=Rapport de découvertes astronomiques 2 +se-astronomic-insight-3=Rapport de découvertes astronomiques 3 +se-astronomic-insight-4=Rapport de découvertes astronomiques 4 +se-biological-insight-1=Rapport de découvertes biologiques +se-biological-insight-2=Rapport de découvertes biologiques 2 +se-biological-insight-3=Rapport de découvertes biologiques 3 +se-biological-insight-4=Rapport de découvertes biologiques 4 +se-bio-methane-to-crude-oil=Transformation biologique du méthane en pétrole brut +se-bio-sludge-crude-oil=Boues biologiques à partir de biomasse expérimentale +se-bio-sludge-decontamination=Décontamination des boues biologiques +se-bio-sludge-from-fish=Boues biologiques à partir de poissons +se-bio-sludge-from-wood=Boues biologiques à partir de bois +se-bio-sludge-from-vitamelange=Boues biologiques à partir de vitamélange +se-bio-sludge=Boues biologiques à partir de biomasse +se-broken-data-scrapping=Destruction des cartes de données endommagées +se-cargo-rocket-section-pack=Conditionnement de sections de fusées cargo +se-cargo-rocket-section-unpack=Déballage de sections de fusées cargo +se-condenser-turbine-reclaim-water=Production d'électricité avec récupération d'eau. +se-core-fragment-omni=Traitement des fragments de noyau +se-core-mining=Forage à grande profondeur +se-empty-antimatter-canister=Flux d'antimatière provenant d'un réservoir +se-empty-barrel-scrapping=Destruction de barils vides +se-empty-barrel-reprocessing=Recyclage des barils vides +se-space-capsule-scrapping=Démantèlement de la capsule spatiale +se-cargo-pod-scrapping=Démantèlement de nacelles cargo +se-energy-insight-1=Rapport de découvertes de science de l'énergie +se-energy-insight-2=Rapport de découvertes de science de l'énergie 2 +se-energy-insight-3=Rapport de découvertes de science de l'énergie 3 +se-energy-insight-4=Rapport de découvertes de science de l'énergie 4 +se-formatting-1=Formatage de cartes de données +se-formatting-2=Formatage de cartes de données avancé +se-formatting-3=Formatage de cartes de données perfectionné +se-formatting-4=Formatage de cartes de données optimisé +se-material-insight-1=Rapport de découvertes de science des matériaux +se-material-insight-2=Rapport de découvertes de science des matériaux 2 +se-material-insight-3=Rapport de découvertes de science des matériaux 3 +se-material-insight-4=Rapport de découvertes de science des matériaux 4 +se-matter-fusion-copper=Nucléosynthèse du cuivre +se-matter-fusion-dirty=Nucléosynthèse de la ferraille +se-matter-fusion-iron=Nucléosynthèse du fer +se-matter-fusion-stone=Nucléosynthèse de composés rocheux +se-matter-fusion-uranium=Nucléosynthèse de l'uranium +se-matter-fusion-to=Nucléosynthèse du __1__ +se-orbital-data=Données sur les calculs orbitaux +se-plasma-canister-empty=Vider un conteneur à plasma +se-pulverised-sand=Pulvérisation du sable +se-radiating-space-coolant-fast=Refroidissement rapide du fluide réfrigérant à -10°C +se-radiating-space-coolant-normal=Refroidissement du fluide réfrigérant à -10°C +se-radiating-space-coolant-slow=Refroidissement à faible déperdition du fluide réfrigérant à -10°C +se-mixed-methane-gas-separation=Séparation du mélange de gaz méthane +se-rocket-fuel-from-water-copper=Carburant pour fusées par électrolyse de l'eau +se-scrap-decontamination=Décontamination de la ferraille +se-scrap-recycling=Recyclage de la ferraille +se-space-coolant-cold=Hyper-refroidissement du fluide réfrigérant à -100°C +se-space-coolant-supercooled=Hyper-refroidissement du fluide réfrigérant à -273°C +se-space-coolant-supercooled-cryonite=Refroidissement cryogénique du fluide réfrigérant à -273°C +se-space-coolant-cold-cryonite=Refroidissement cryogénique du fluide réfrigérant à -100°C +se-space-coolant-supercoole-cryonite=Refroidissement cryogénique du fluide réfrigérant à -273°C +se-simulation-a=Simulation astronomique +se-simulation-ab=Simulation de panspermie +se-simulation-abm=Simulation de xénoprogression +se-simulation-am=Simulation de la distribution des éléments +se-simulation-as=Simulation de comportement des astroparticules +se-simulation-asb=Simulation astrobionique +se-simulation-asbm=Simulation universelle +se-simulation-asm=Simulation astrophysique +se-simulation-b=Simulation biologique +se-simulation-bm=Simulation biomécanique +se-simulation-m=Simulation des matériaux +se-simulation-s=Simulation énergétique +se-simulation-sb=Simulation biochimique +se-simulation-sbm=Simulation nanorobotique +se-simulation-sm=Simulation de comportement des nanomatériaux +se-space-water-decontamination=Décontamination de l'eau cosmique +se-spaceship-rocket-engine-burn=Combustion de carburant pour fusée liquide +se-specimen-fish=Pisciculture en microgravité +se-specimen-wood=Pépinière en microgravité +se-thermodynamics-coal=Pyrolyse de biomasse en charbon +se-used-lifesupport-canister-cleaning=Nettoyage des capsules de support de vie +se-used-lifesupport-canister-cleaning-space=Stérilisation des capsules de support de vie +space-science-pack=Pack de science d'optimisation +se-rocket-science-pack=Pack de science aérospatiale +se-big-turbine-internal=Décompression de la vapeur à haute température +se-arcosphere-fracture=Polarisation des arcosphères +se-arcosphere-fold-in=Inversion des arcosphères +se-arcosphere-fold-out=Inversion des arcosphères +se-arcosphere-folding=Repliement des arcosphères : __1__ __2__ vers __3__ __4__ +se-electric-boiling-void=Évacuation de la vapeur +se-space-probe-rocket-deployed=Fusée pour sonde spatiale (Déployée) +se-distortion-drive=Propulseur à distorsion +se-generic-scrapping=Démantèlement de __1__ +se-generic-recycling=Recyclage de __1__ + +[recipe-description] +se-astronomic-insight-2=Processus scientifique plus complexe, mais moins demandeur en ressources. +se-astronomic-insight-3=Processus scientifique plus complexe, mais moins demandeur en ressources. +se-astronomic-insight-4=Processus scientifique plus complexe, mais moins demandeur en ressources. +se-biological-insight-2=Processus scientifique plus complexe, mais moins demandeur en ressources. +se-biological-insight-3=Processus scientifique plus complexe, mais moins demandeur en ressources. +se-biological-insight-4=Processus scientifique plus complexe, mais moins demandeur en ressources. +se-core-mining=La nature du fragment obtenu dépend de la planète. La vitesse d'extraction dépend du nombre d'autres foreuses grande profondeur présentes sur la planète ou la lune. +se-energy-insight-2=Processus scientifique plus complexe, mais moins demandeur en ressources. +se-energy-insight-3=Processus scientifique plus complexe, mais moins demandeur en ressources. +se-energy-insight-4=Processus scientifique plus complexe, mais moins demandeur en ressources. +se-material-insight-2=Processus scientifique plus complexe, mais moins demandeur en ressources. +se-material-insight-3=Processus scientifique plus complexe, mais moins demandeur en ressources. +se-material-insight-4=Processus scientifique plus complexe, mais moins demandeur en ressources. +se-radiating-space-coolant-normal=Les cycles de refroidissement répétés causent une dégradation du fluide réfrigérant. +se-radiating-space-coolant-slow=Les cycles de refroidissement répétés causent une dégradation du fluide réfrigérant, mais un processus plus lent permet de limiter les pertes. +se-radiating-space-coolant-fast=Les cycles de refroidissement répétés causent une dégradation du fluide réfrigérant, mais un processus plus lent permet de limiter les pertes. +se-delivery-cannon-weapon-pack-se-iridium-piledriver=Énormes dégâts physiques dans une petite zone, avec des dégâts secondaires par onde de choc. +se-arcosphere-fracture=Les arcosphères peuvent être collectées par un [img=item/se-arcosphere-collector] collecteur d'arcosphère. +se-distortion-drive=Ce processus doit être actif pour activer le propulseur à distorsion du Nexus et gagner la partie. Utilise 6GW à la vitesse critique. + +[technology-name] +effectivity-module-4=Module d'efficacité 4 +effectivity-module-5=Module d'efficacité 5 +effectivity-module-6=Module d'efficacité 6 +effectivity-module-7=Module d'efficacité 7 +effectivity-module-8=Module d'efficacité 8 +effectivity-module-9=Module d'efficacité 9 +energy-shield-equipment=Bouclier d'énergie +energy-shield-mk2-equipment=Bouclier d'énergie MK2 +energy-shield-mk3-equipment=Bouclier d'énergie MK3 +energy-shield-mk4-equipment=Bouclier d'énergie MK4 +energy-shield-mk5-equipment=Bouclier d'énergie MK5 +energy-shield-mk6-equipment=Bouclier d'énergie MK6 +sand-processing=Traitement du sable +glass-processing=Traitement du verre +liquid-rocket-fuel=Carburant pour fusées liquide +productivity-module-4=Module de productivité 4 +productivity-module-5=Module de productivité 5 +productivity-module-6=Module de productivité 6 +productivity-module-7=Module de productivité 7 +productivity-module-8=Module de productivité 8 +productivity-module-9=Module de productivité 9 +rocket-silo=Silo à fusée pour satellites +rocketry=Missiles de combat +se-adaptive-armour=Armure adaptative +se-antimatter-engine=Moteur à antimatière +se-antimatter-reactor=Réacteur à antimatière +se-antimatter-production=Production d'antimatière +se-astronomic-science-pack=Pack de science astronomique +se-biological-science-pack=Pack de science biologique +se-condenser-turbine=Turbine à condensation +se-core-miner=Forage à grande profondeur +se-biogun=Fusil Bio +se-cryogun=Cryogun +se-deep-space-science-pack=Pack de science intersidérale +se-deep-catalogue=Répertoire intersidéral +se-dimensional-anchor=Ancrage dimensionnel +se-electric-boiler=Chaudière électrique +se-energy-science-pack=Pack de science de l'énergie +se-fluid-burner-generator=Groupe électrogène à carburant +se-fuel-refining=Raffinage du carburant +se-heat-shielding=Protection thermique +se-ion-engine=Moteur ionique +se-long-range-star-mapping=Cartographie stellaire à grande distance +se-material-science-pack=Pack de science des matériaux +se-medpack=Trousse de soin +se-medpack-2=Trousse de soin MK2 +se-medpack-3=Trousse de soin MK3 +se-medpack-4=Trousse de soin MK4 +se-meteor-defence=Défense anti-météorite globale +se-meteor-point-defence=Défense anti-météorite rapprochée +se-nanomaterial=Nanomatériaux +se-plague="Parfum de doux sommeil" (Fléau biologique) +se-processing-beryllium=Traitement du béryllium +se-processing-cryonite=Traitement de la cryonite +se-processing-holmium=Traitement du holmium +se-processing-iridium=Traitement de l'iridium +se-processing-naquium=Traitement du naquium +se-processing-vitamelange=Traitement du vitamélange +se-processing-vulcanite=Traitement de la vulcanite +se-pulveriser=Broyeur +se-railgun=Fusil électromagnétique +se-rocket-cargo-safety=Sécurisation de la cargaison +se-rocket-fuel-from-water=Carburant pour fusée par électrolyse de l'eau +se-rocket-launch-pad=Silo à fusées cargo +se-rocket-landing-pad=Aire d'atterrissage +se-rocket-reusability=Réutilisation des fusées +se-rocket-survivability=Fiabilité des fusées +se-rtg-equipment=Générateur thermoélectrique à radio-isotope portable +se-rtg-equipment-2=Générateur thermoélectrique à radio-isotope portable avancé +se-space-assembling=Machine d'assemblage spatiale +se-space-accumulator=Accumulateur au holmium +se-space-accumulator-2=Accumulateur au naquium +se-space-astrometrics-laboratory=Laboratoire d'astrométrie +se-space-biochemical-laboratory=Usine de biochimie +se-space-catalogue-astronomic=Répertoire astronomique +se-space-catalogue-biological=Répertoire biologique +se-space-catalogue-universal=Répertoire universel +se-space-catalogue-energy=Répertoire énergétique +se-space-catalogue-material=Répertoire des matériaux +se-space-data-card=Cartes de données +se-space-decontamination-facility=Installation de décontamination +se-space-electromagnetics-laboratory=Laboratoire d'électromagnétique +se-space-genetics-laboratory=Laboratoires de génétique +se-space-gravimetrics-laboratory=Laboratoire de gravimétrie +se-space-growth-facility=Installation de croissance +se-space-hypercooling=Hyper-refroidissement +se-space-laser-laboratory=Laboratoire laser +se-lifesupport-facility=Processus de support de vie +se-space-manufactory=Manufacture spatiale +se-space-material-fabricator=Nucléosynthèse +se-space-matter-fusion=Nucléosynthèse avancée +se-space-mechanical-laboratory=Laboratoire de mécanique +se-space-particle-accelerator=Accélérateur de particules +se-space-particle-collider=Collisionneur de particules +se-space-plasma-generator=Générateur de plasma +se-space-platform-plating=Plateforme spatiale avancée +se-space-platform-scaffold=Plateforme spatiale +se-space-radiation-laboratory=Laboratoire de radioactivité +se-space-radiating-efficiency=Efficacité de la dissipation thermique +se-space-radiating-speed=Vitesse de dissipation thermique +se-space-radiator=Radiateur thermique +se-space-radiator-2=Radiateur thermique avancé +se-space-rail=Rail spatial +se-recycling-facility=Installation de recyclage +se-space-science-lab=Laboratoire de sciences spatiales +se-space-simulation-ab=Simulation de panspermie +se-space-simulation-am=Simulation d'astromatériaux +se-space-simulation-as=Simulation d'astroparticules +se-space-simulation-bm=Simulation biomécanique +se-space-simulation-sb=Simulation biochimique +se-space-simulation-sm=Simulation de nanomatériaux +se-space-simulation-abm=Simulation de xénoprogression +se-space-simulation-asb=Simulation astrobionique +se-space-simulation-asm=Simulation astrophysique +se-space-simulation-sbm=Simulation nanorobotique +se-space-simulation-asbm=Simulation universelle +se-space-solar-panel=Panneau solaire spatial +se-space-spectrometry-facility=Laboratoire de spectrométrie +se-space-supercomputer=Supercalculateurs spatiaux +se-space-telescope=Télescope +se-space-telescope-gammaray=Télescope à rayons gamma +se-space-telescope-xray=Télescope à rayons X +se-space-telescope-microwave=Télescope à micro-ondes +se-space-telescope-radio=Télescope à ondes radio +se-space-thermodynamics-laboratory=Laboratoire de thermodynamique +se-spaceship=Vaisseau spatial +se-spaceship-integrity=Intégrité structurelle des vaisseaux spatiaux +se-factory-spaceship=Usines spatiales +se-superconductive-cable=Câbles supraconducteurs +se-teleportation=Téléportation +se-tesla-gun=Fusil Tesla +se-thruster-suit=Combinaison à propulsion +space-science-pack=Pack de science d'optimisation +se-rocket-science-pack=Pack de science spatiale +speed-module-4=Module de vitesse 4 +speed-module-5=Module de vitesse 5 +speed-module-6=Module de vitesse 6 +speed-module-7=Module de vitesse 7 +speed-module-8=Module de vitesse 8 +speed-module-9=Module de vitesse 9 +se-aeroframe-pole=Barre aérospatiale +se-aeroframe-scaffold=Structure aérospatiale +se-aeroframe-bulkhead=Cloison aérospatiale +se-lattice-pressure-vessel=Conteneur pressurisé à treillis +se-heavy-girder=Poutre robuste +se-heavy-bearing=Roulement robuste +se-heavy-composite=Matériau composite robuste +se-heavy-assembly=Assemblage robuste +se-bioscrubber=Épurateur biologique +se-vitalic-epoxy=Résine vitalique +se-vitalic-reagent=Réactif vitalique +se-vitalic-acid=Acide vitalique +se-self-sealing-gel=Gel auto-obturant +se-holmium-cable=Câble de holmium +se-holmium-solenoid=Solénoïde de holmium +se-quantum-processor=Processeur quantique +se-dynamic-emitter=Émetteur dynamique +se-naquium-processor=Processeur au naquium +se-naquium-cube=Cube de naquium +se-naquium-tessaract=Tessaract de naquium +se-wide-beacon=Diffuseur longue portée +se-wide-beacon-2=Diffuseur longue portée avancé +se-lifesupport-equipment=Équipement de support de vie +se-lifesupport-equipment-1=Équipement de support de vie Mk1 +se-lifesupport-equipment-2=Équipement de support de vie Mk2 +se-lifesupport-equipment-3=Équipement de support de vie Mk3 +se-lifesupport-equipment-4=Équipement de support de vie Mk4 +se-supercharger=Superchargeur +se-addon-power-pole=Poteau électrique d'appoint +se-pylon=Pylône +se-pylon-substation=Pylône de distribution +se-pylon-construction=Pylône de construction +se-pylon-construction-radar=Pylône de construction à suivi radar +se-shield-projector=Projecteur de bouclier +se-deep-space-transport-belt=Convoyeurs spatiaux avancés +se-big-turbine=Turbine très haute température +se-big-heat-exchanger=Échangeur de chaleur très haute température +se-zone-discovery-random=Découverte de zone +se-zone-discovery-targeted=Découverte de zone ciblée +se-zone-discovery-deep=Découverte de zone dans l'espace intersidéral +se-delivery-cannon=Canon logistique +se-delivery-cannon-capsule-iridium=Capsule d'iridium pour canons logistiques +se-delivery-cannon-weapon=Canon logistique militaire +se-spaceship-clamps=Fixation d'amarrage pour vaisseaux spatiaux +se-bio-upgrade-constitution=Amélioration biologique : Constitution +se-bio-upgrade-strength=Amélioration biologique : Force +se-bio-upgrade-agility=Amélioration biologique : Agilité +se-bio-upgrade-dexterity=Amélioration biologique : Dextérité +se-bio-upgrade-intelligence=Amélioration biologique : Intelligence +se-energy-beaming=Faisceaux d'énergie +se-energy-beam-defence=Systèmes de défense électromagnétique +se-nexus=Nexus +se-spaceship-victory=Victoire du vaisseau spatial +se-arcosphere=Collecte des arcosphères +se-arcosphere-folding=Repliement des arcosphères +se-space-probe=Silo à fusée pour sonde spatiale +se-linked-container=Coffre Arcolink +k2-conversion=Conversion __1__ + +[technology-description] +energy-shield-equipment=Une bulle protectrice qui se recharge rapidement mais consomme beaucoup d'énergie. +energy-shield-mk2-equipment=Une bulle protectrice qui se recharge rapidement mais consomme beaucoup d'énergie. +energy-shield-mk3-equipment=Une bulle protectrice qui se recharge rapidement mais consomme beaucoup d'énergie. +energy-shield-mk4-equipment=Une bulle protectrice qui se recharge rapidement mais consomme beaucoup d'énergie. +energy-shield-mk5-equipment=Une bulle protectrice qui se recharge rapidement mais consomme beaucoup d'énergie. +energy-shield-mk6-equipment=Une bulle protectrice qui se recharge rapidement mais consomme beaucoup d'énergie. +sand-processing=Broyage, meulage et tamisage de la matière première en sable propre. +glass-processing=Processus de fusion du sable en verre. +rocket-silo=Permet de lancer des satellites pour découvrir de nouvelles planètes. +se-adaptive-armour=Une armure qui utilise de l'énergie pour s'auto-réparer. Remplit un rôle similaire à celui des boucliers énergétiques avec des besoins en énergie plus faibles mais une régénération beaucoup plus lente. +se-antimatter-engine=Permet d'utiliser l'annihilation de l'antimatière pour générer une poussée incroyable. +se-antimatter-reactor=Permet d'utiliser l'annihilation de l'antimatière pour générer une chaleur extrême. +se-antimatter-production=Production d'antimatière, la forme de stockage d'énergie la plus dense possible. +se-astronomic-science-pack=Permet la recherche de technologies liées aux voyages spatiaux et à la logistique interstellaire. +se-biological-science-pack=Permet la recherche de technologies liées à la productivité des processus, aux armes biologiques et aux calculateurs à réseaux de neurones. Permet également d'améliorer vos aptitudes physiques et intellectuelles. +se-condenser-turbine=75% de l'efficacité d'une turbine à vapeur classique, mais permet de récupérer 99% de la vapeur utilisée sous forme d'eau condensée. Plage de température de fonctionnement : 100 à 999°C. +se-core-miner=Autorise l'extraction de fragments riches en ressources depuis une planète ou une lune sans jamais épuiser le gisement. Installer plusieurs foreuses grande profondeur sur le même corps réduira progressivement leur efficacité individuelle. +se-biogun=Une arme capable de projeter diverses munitions biologiques. +se-cryogun=Une arme capable de créer un mur de glace pour geler vos ennemis +se-deep-catalogue=Données structurées sur la distorsion de l'espace, la matière exotique et les possibilités de la nano-ingénierie prêtes pour l'analyse et la simulation. Élément clé de la recherche des technologies les plus avancées. +se-deep-space-science-pack=Un condensé de science pour la recherche des technologies les plus avancées. +se-dimensional-anchor=Utilise le puit de gravité d'une étoile comme point de stabilisation d'une anomalie spatiale. +se-electric-boiler=Crée de la vapeur d'eau en utilisant de l'énergie électrique. Rendement de 90%. +se-energy-science-pack=Permet la recherche de technologies relatives aux forces fondamentales et aux découvertes subatomiques. +se-fluid-burner-generator=Utilise un carburant liquide avec une valeur énergétique (par exemple du carburant pour fusée liquide) pour générer de l'électricité. Simple et compact, mais n'a pas le rendement des grands systèmes utilisant la vapeur. Conçu pour l'espace. La consommation en carburant varie fonction de sa valeur énergétique. +se-fuel-refining=Raffinage de carburants plus avancés. +se-heat-shielding=Un panneau composite utilisé pour les applications à haute température et les structures spatiales. +se-ion-engine=Les moteurs ioniques utilisent une petite quantité de flux ionique et une grande quantité d'énergie pour la poussée afin de déplacer un vaisseau spatial. Les réservoirs ioniques sont plus petits que les autres réservoirs et ne peuvent être utilisés qu'à partir d'endroits situés dans l'espace. +se-long-range-star-mapping=Certaines galaxies lointaines peuvent être identifiées par des motifs spécifiques d'étoiles inhabituelles. Les résultats sont enregistrés dans [img=virtual-signal/informatron] l'InformaTron [__CONTROL__informatron__]. +se-material-science-pack=Permet la recherche de technologies utilisant des matériaux avancés, adaptés à des contraintes d'ingénierie plus exigeantes. +se-medpack=Utilisez la trousse de soin pour vous soigner. +se-medpack-2=Utilisez la trousse de soin pour vous soigner. +se-medpack-3=Utilisez la trousse de soin pour vous soigner. +se-medpack-4=Utilisez la trousse de soin pour vous soigner. +se-meteor-defence=Détruit les météorites avant qu'elles ne causent des dégâts à vos installations. Les canons de défense anti-météorite globale sont capable de couvrir une planète entière, mais ne peuvent tirer que sur une météorite à la fois. +se-meteor-point-defence=Détruit les météorites avant qu'elles ne causent des dégâts à vos installations. Les canons de défense anti-météorite rapprochée assurent la couverture d'une petite zone autour d'eux et peuvent faire feu sur 4 météorite simultanément. +se-nanomaterial=Une structure associant plusieurs matériaux organisés à l'échelle nanométrique pour donner un composite aux propriétés exceptionnelles. +se-railgun=Tire des fléchettes accélérées électromagnétiquement à une vitesse telle qu'elles laissent une trainée de plasma avant de se vaporiser. Cause d'importants dégâts avec une faible cadence de tir. +se-plague=Un agent biologique meurtrier capable d'éradiquer toute vie de planètes entières. Détruit les biters, les arbres, les poissons, le vitamélange, et plus encore. Les humains auront ensuite besoin d'un système de support de vie pour y survivre. +se-processing-beryllium=Transformation du béryl en béryllium, un métal extrêmement léger et solide, résistant à la corrosion et aux radiations. De plus, il n'a pratiquement aucune interaction avec les rayons X. +se-processing-cryonite=Processus de transformation des cristaux de cryonite gelés en bâtonnets de cryonite pure. Ce matériau à de nombreuses applications en réfrigération, en refroidissement et dans la lubrification. Principalement trouvé sur les mondes gelés. +se-processing-holmium=Transformation du minerai de holminite en holmium, un métal terre-rare ayant la plus grande perméabilité magnétique de tous les éléments. +se-processing-iridium=Transformation de l'iridite en iridium, le métal le plus résistant à la corrosion et l'élément le plus dense à haute température. Un matériau clé pour l'industrie lourde. +se-processing-naquium=Processus de transformation des mystérieux cristaux de naquitite en naquium, matériau quasi métallique aux curieuses interactions avec l'espace-temps. +se-processing-vitamelange=Processus de transformation de la roche poreuse de vitamélange en un extrait nutritif de grande valeur. +se-processing-vulcanite=Processus de transformation des cristaux de vulcanite en une poudre raffinée utilisée dans les processus de fonderie avancée, l'obtention de carburant pour fusée, et autres processus chimiques à haute température. La vulcanite se trouve principalement dans les zones volcaniques et dans les matériaux extraits par le forage à grande profondeur. +se-pulveriser=Broie et concasse les matériaux durs et les fragments de noyau. +se-rocket-cargo-safety=Réduit de 10% la probabilité que la cargaison soit endommagée lors du transport (multiplicatif). +se-rocket-fuel-from-water=Obtention de carburant pour fusée par électrolyse de l'eau. +se-rocket-landing-pad=Aire permettant la bonne réception du chargement des fusées cargo. Avec les bonnes recherches, vous pourrez également récupérer une partie des éléments de la fusée. +se-rocket-launch-pad=Permet de lancer des cargaisons dans l'espace ou vers d'autres planètes. +se-rocket-reusability=Augmente le taux de récupération des éléments de fusée de 4% après une réception réussie sur une aire d'atterrissage (de base 20%, max 100%) +se-rocket-science-pack=Permet la recherche de technologies relatives au traitement des ressources exotiques et à la fabrication de variantes spatiales des structures terrestres. +se-rocket-survivability=Réduit de 10 % le risque que les fusées soient endommagées pendant le trajet ou qu'elles aient une défaillance de navigation qui entraîne le ratage de leur aire d'atterrissage (multiplicatif). +se-rtg-equipment=Générateur thermoélectrique à radio-isotope. Un générateur portable qui convertit la chaleur dégagée par les désintégrations radioactives en électricité. Fonctionne pendant des décennies sans carburant supplémentaire. +se-rtg-equipment-2=Générateur thermoélectrique à radio-isotope. Un générateur portable amélioré qui convertit la chaleur dégagée par les désintégrations radioactives en électricité. Fonctionne pendant des décennies sans carburant supplémentaire. +se-space-accumulator=Installations qui stockent de grandes quantités d'énergie électrique en surplus pour une utilisation ultérieure. +se-space-accumulator-2=Installations qui stockent des quantités incroyablement importantes d'énergie électrique en surplus pour une utilisation ultérieure. +se-space-assembling=Machine d'assemblage modifiée pour fonctionner dans l'espace. +se-space-astrometrics-laboratory=Combine, compare et quantifie différentes sources de données astronomiques. +se-space-biochemical-laboratory=Un laboratoire de chimie avancé spécialisé dans la biochimie. Peut également réaliser les opérations d'une usine de produits chimiques ou d'une raffinerie de pétrole. +se-space-catalogue-astronomic=Données astronomiques structurées, prêtes pour l'analyse et la simulation informatique. Un élément clé de la recherche en astronomie. +se-space-catalogue-biological=Données biologiques structurées, prêtes pour l'analyse et la simulation informatique. Un élément clé de la recherche en biologie. +se-space-catalogue-universal=Données combinées prêtes pour l'analyse et la simulation informatique. Un élément clé de la recherche sur l'espace intersidéral. +se-space-catalogue-energy=Données de science énergétique structurées, prêtes pour l'analyse et la simulation informatique. Un élément clé de la recherche en science de l'énergie. +se-space-catalogue-material=Données de science des matériaux structurées, prêtes pour l'analyse et la simulation informatique. Un élément clé de la recherche en science des matériaux. +se-space-data-card=Un dispositif de stockage de données polyvalent. Utilisé par les processus de recherche scientifique avancés. +se-space-decontamination-facility=Nettoie les substances destinées à être utilisées dans des environnements stériles, et prépare les liquides destinés à être utilisés dans des conditions de basse pression. +se-space-electromagnetics-laboratory=Installation conçue pour la manipulation de champs magnétiques intenses et de fortes tensions électriques +se-space-genetics-laboratory=Un laboratoire consacré au séquençage et à la manipulation génétique, aussi capable de réaliser l'impression génétique de cultures. +se-space-gravimetrics-laboratory=Analyse et simule les perturbations gravitationnelles. +se-space-growth-facility=Assure la croissance d'échantillons biologiques en conditions contrôlées impossibles ailleurs. En plus des contrôles climatiques standards, tout est disponible, des cuves à micro-gravité aux centrifugeuses à haute gravité. +se-space-hypercooling=Réalise un échange de chaleur sur un liquide réfrigérant, permettant d'en refroidir une partie en réchauffant l'autre. +se-space-laser-laboratory=Permet des expériences utilisant des lasers. Le port de protections oculaires est obligatoire. +se-lifesupport-facility=Processus de support de vie permettant l'exploration et le maintien de la vie dans des environnements hostiles. +se-space-manufactory=Une installation clé pour la production en masse dans l'espace. +se-space-material-fabricator=Une installation permettant la synthèse de nouveaux éléments par fusion nucléaire d'éléments légers en éléments plus lourds. Un croisement entre un collisionneur de particules et une imprimante 3D +se-space-matter-fusion=Permet la nucléosynthèse de nouveaux éléments par fusion nucléaire de noyaux légers en atomes plus lourds. +se-space-mechanical-laboratory=Propose toute la gamme de manipulations mécaniques classiques : torsion, compression, déchirement, vibrations etc. +se-space-particle-accelerator=Accélère les particules à une vitesse proche de celle de la lumière. +se-space-particle-collider=Chambre de collisions pour particules haute vélocité et analyse des résultats. +se-space-plasma-generator=Permet de générer une large gamme de plasmas. +se-space-platform-plating=Élément de plateforme spatiale robuste à la surface égale. Parfait pour se déplacer rapidement. +se-space-platform-scaffold=Élément de structure basique pour plateforme spatiale. Permet d'y fixer des structures, sans être idéal pour s'y déplacer aisément. +se-space-radiation-laboratory=Une installation conçue pour la manipulation de matériaux radioactifs en toute sécurité. Permet d'effectuer les opérations de traitement de l'uranium. +se-space-radiator=Dissipe la chaleur excédentaire d'un fluide réfrigérant par rayonnement. +se-space-radiator-2=Dissipe la chaleur excédentaire d'un fluide réfrigérant par rayonnement. +se-space-radiating-efficiency=Un processus de refroidissement plus lent du fluide réfrigérant qui permet de réduire les pertes par dégradation à chaque cycle. +se-space-radiating-speed=Refroidissement plus rapide mais moins économe en ressources d'un fluide réfrigérant surchauffé. +se-space-rail=Rails conçu pour l'espace qui maintiennent le train sur la voie même en l'absence de gravité. Peuvent également être utilisés sur terre ferme pour des raisons esthétiques. +se-recycling-facility=Recyclage de nombreux sous-produits comme la ferraille en matériaux bruts. +se-space-science-lab=Ce laboratoire permet de mener à bien des recherches avancées sur les sciences spatiales. +se-space-simulation-ab=Une simulation informatique rendue plus efficace par l'association de plusieurs disciplines. +se-space-simulation-am=Une simulation informatique rendue plus efficace par l'association de plusieurs disciplines. +se-space-simulation-as=Une simulation informatique rendue plus efficace par l'association de plusieurs disciplines. +se-space-simulation-bm=Une simulation informatique rendue plus efficace par l'association de plusieurs disciplines. +se-space-simulation-sb=Une simulation informatique rendue plus efficace par l'association de plusieurs disciplines. +se-space-simulation-sm=Une simulation informatique rendue plus efficace par l'association de plusieurs disciplines. +se-space-simulation-abm=Une simulation informatique rendue plus efficace par l'association de plusieurs disciplines. +se-space-simulation-asb=Une simulation informatique rendue plus efficace par l'association de plusieurs disciplines. +se-space-simulation-asm=Une simulation informatique rendue plus efficace par l'association de plusieurs disciplines. +se-space-simulation-sbm=Une simulation informatique rendue plus efficace par l'association de plusieurs disciplines. +se-space-simulation-asbm=Une simulation informatique rendue plus efficace par l'association de plusieurs disciplines. +se-space-solar-panel=Un panneau solaire à haut rendement sur lequel vous pouvez vous déplacer. +se-space-spectrometry-facility=Spectrophotométrie, chromatographie en phase gazeuse, spectrométrie de masse et autres analyses en spectrographie. +se-space-supercomputer=Améliore la vitesse des opérations de manipulation et traitement de données, et permet des simulations plus fines. +se-space-telescope=Un télescope sophistiqué sensible à de multiples longueurs d'onde autour de la lumière visible. +se-space-telescope-gammaray=Les rayons gammas ne réfractent pas et ne peuvent donc pas être focalisés par effet lentille. Ce télescope sophistiqué utilise un jeu de miroirs et de détecteurs spécifiques pour l'étude de ce rayonnement. +se-space-telescope-xray=Les rayons X sont bloqués par la plupart des atmosphères. Ce puissant télescope est conçu pour l'espace où l'atmosphère n'est pas un problème. +se-space-telescope-microwave=Un très grand télescope conçu pour les micro-ondes et l'étude du fond diffus cosmologique. +se-space-telescope-radio=Un très grand télescope capable de détecter les ondes radios faibles provenant de sources extrêmement lointaines. +se-space-thermodynamics-laboratory=Permet de mettre en œuvre une large gamme de procédés à haute température. Permet également la plupart des opérations de métallurgie, comme la fonderie. +se-spaceship=Permet de construire un vaisseau spatial élément par élément à partir de planchers et de parois pour vaisseaux spatiaux. Utilisez ensuite le poste de pilotage pour naviguer vers une autre planète, ou au-delà. +se-spaceship-integrity=Chaque niveau augmente de 100 la limite de contrainte d'intégrité structurelle de vos vaisseaux spatiaux. +se-factory-spaceship=Chaque niveau augmente de 500 la limite de contrainte d'intégrité structurelle de vos vaisseaux spatiaux. +se-superconductive-cable=Un câble composite supraconducteur qui ne nécessite pas de refroidissement actif. +se-teleportation=Débloque d'autres technologies de téléportation. Cette technologie ne fait rien par elle-même mais constitue une passerelle vers d'autres technologies. +se-tesla-gun=Éclairs en chaîne à tir rapide pouvant atteindre jusqu'à 30 cibles. Se propage de cible en cible avec longs arcs, ou le long du sol avec des petits arcs s'il n'y a pas de cibles. +se-thruster-suit=Une combinaison spatiale pourvue de propulseurs et de bottes magnétiques, ainsi que d'un support vie basique. Ne vous aventurez pas dans l'espace sans combinaison ! +se-thruster-suit-2=Une combinaison spatiale améliorée, avec des propulseurs plus puissants, ainsi que davantage d'emplacements d'inventaire et de grille d'équipements. +se-thruster-suit-3=Une combinaison spatiale améliorée, avec des propulseurs plus puissants, ainsi que davantage d'emplacements d'inventaire et de grille d'équipements. +se-thruster-suit-4=Une combinaison spatiale améliorée, avec des propulseurs plus puissants, ainsi que davantage d'emplacements d'inventaire et de grille d'équipements. +space-science-pack=Permet la production de packs de science aérospatiale et la recherche des technologies débloquées par ceux-ci. +se-aeroframe-pole=Une barre en béryllium légère et résistante utilisée comme poutre structurelle dans la construction aérospatiale. +se-aeroframe-scaffold=Une pièce de structure en béryllium légère et résistante adaptée pour la construction du squelette interne des vaisseaux d'exploration ou celui des structures aérospatiales. +se-aeroframe-bulkhead=Une paroi en béryllium étanche, légère et résistante prévue pour servir de coque externe ou de cloison interne dans la construction d'aéronefs. +se-lattice-pressure-vessel=Un conteneur en béryllium pressurisé léger et résistant, pourvu d'un treillis interne qui permet de comprimer certains fluides au-delà de leurs limites normales. Le fluide sous pression peut s'évaporer en sécurité en cas de rupture. +se-heavy-girder=Une poutre structurelle robuste en iridium, principalement utilisée pour l'industrie lourde et les vaisseaux militaires lourds. +se-heavy-bearing=Un roulement robuste en iridium qui peut fonctionner indéfiniment sous des contraintes qui entraineraient l'écrasement de matériaux classiques. +se-heavy-composite=Une épaisse cloison presque impénétrable, pratiquement insensible à la chaleur, à la corrosion, aux radiations et aux forces mécaniques, mais qui est incroyablement lourde. +se-heavy-assembly=Un assemblage mécanique lourd d'engrenages et de composants configurables utilisé dans l'industrie lourde. +se-bioscrubber=Une chambre de traitement des matériaux qui utilise des processus biologiques pour décomposer les matériaux indésirables. +se-vitalic-epoxy=Une résine biologique incroyablement forte aux propriétés régénératives. +se-vitalic-reagent=Un réactif très performant aux usages multiples dans une large gamme de procédés chimiques. +se-vitalic-acid=Un cocktail concentré de plusieurs acides. +se-self-sealing-gel=Un gel visqueux sous pression, mais solide comme l'acier lorsqu'il est exposé au vide. Souvent utilisé comme film interne dans les cloisons pour assurer une protection passive contre les perforations. +se-holmium-cable=Un câble gainé spécialement conçu pour éliminer les bruits indésirables sur la ligne qui peuvent interférer avec les appareils électroniques sensibles. +se-holmium-solenoid=Un électroaimant extrêmement puissant. +se-quantum-processor=Exploite les phénomènes d'intrication et de superposition quantique pour une excellente efficacité de calcul sur les problèmes très complexes. +se-dynamic-emitter=Un système capable d'émettre un faisceau sur une longueur d'onde précise et rapidement ajustable. Permet de changer rapidement de propriétés pour une large gamme d'applications. +se-naquium-cube=Tirer parti de l'interaction inhabituelle du naquium avec l'espace-temps pour replier un grand volume en un petit cube. +se-naquium-tessaract=Cet étrange objet présente une forme cubique au repos mais peut se décaler vers une gamme d'autres formes géométriques lorsque tourné ou accéléré. +se-naquium-processor=Le calcul à l'intérieur d'un tessaract de naquium permet de dépasser certaines des limitations à la densité de calcul d'un processeur classique. +effect-transmission=Le diffuseur de modules diffuse l'effet des modules insérés aux structures amies proches avec une portée de 3 tuiles. Plusieurs diffuseurs affectant la même structure entraineront une surcharge et provoqueront son arrêt. 8 emplacements de modules. +se-wide-beacon=Le diffuseur de modules grande portée diffuse l'effet des modules insérés aux structures amies proches avec une portée de 14 tuiles. Plusieurs diffuseurs affectant la même structure entraineront une surcharge et provoqueront son arrêt. 15 emplacements de modules. +se-wide-beacon-2=Le diffuseur de modules grande portée avancé diffuse l'effet des modules insérés aux structures amies proches avec une portée de 14 tuiles. Plusieurs diffuseurs affectant la même structure entraineront une surcharge et provoqueront son arrêt. 20 emplacements de modules. +se-lifesupport-equipment-1=Améliore l'efficacité du support de vie de +100% (additif). A utiliser de pair avec une combinaison spatiale, sinon l'efficacité sera réduite de moitié et le module ne fonctionnera pas dans l'espace. +se-lifesupport-equipment-2=Améliore l'efficacité du support de vie de +200% (additif). A utiliser de pair avec une combinaison spatiale, sinon l'efficacité sera réduite de moitié et le module ne fonctionnera pas dans l'espace. +se-lifesupport-equipment-3=Améliore l'efficacité du support de vie de +400% (additif). A utiliser de pair avec une combinaison spatiale, sinon l'efficacité sera réduite de moitié et le module ne fonctionnera pas dans l'espace. +se-lifesupport-equipment-4=Améliore l'efficacité du support de vie de +800% (additif). A utiliser de pair avec une combinaison spatiale, sinon l'efficacité sera réduite de moitié et le module ne fonctionnera pas dans l'espace. +se-supercharger=Peut recharger jusqu'à 64 robots simultanément à grande vitesse. Consomme jusqu'à 1GW. +se-pylon=Distribue de l'énergie électrique. Portée du câble : 64. +se-pylon-substation=Distribue de l'énergie électrique. Portée du câble : 64, zone de distribution : 64x64 +se-pylon-construction=Distribue de l'énergie électrique et étend le réseau logistique. Portée du câble : 64, Zone de construction : 64x64. +se-pylon-construction-radar=Distribue de l'énergie électrique, étend le réseau logistique et donne une vision radar. Portée du câble : 64, Zone de construction et de vision : 256x256, Zone d'approvisionnement logistique 4x4. +se-shield-projector=Crée un champ de force protecteur. La consommation augmente lorsque le projecteur est en charge ou que le champ de force subit des dégâts. Le champ de force peut bloquer les projectiles des ennemis si le mod "Combat Mechanics Overhaul" est installé. +se-deep-space-transport-belt=Des convoyeurs spatiaux avancés à longue distance qui peuvent être placés dans l'espace. Plusieurs couleurs peuvent être utilisées pour facilement identifier chaque ligne de loin. +se-big-turbine=Un grand générateur de 1GW qui consomme de la vapeur à 5000°C, rend de la vapeur à 500°C à l'autre extrémité et rejette de l'eau sur les côtés. Rendement de 99 %, et 99% de conservation de la quantité d'eau. +se-big-heat-exchanger=Un grand échangeur de chaleur conçu pour les températures extrêmes. +se-addon-power-pole=Un petit poteau électrique conçu pour être fixé aux bâtiments pour un contrôle précis de la couverture électrique. +se-zone-discovery-random=Permet la découverte d'un nouveau corps céleste au hasard grâce à vos télescopes. +se-zone-discovery-targeted=Permet la découverte d'un nouveau corps céleste riche en une ressource spécifique. Sélectionnez les ressources que vous voulez rechercher dans [img=virtual-signal/informatron] l'InformaTron > Découverte de zones. +se-zone-discovery-deep=Permet la découverte d'une nouvelle zone d'intérêt dans les étendues interstellaires. +se-delivery-cannon=Un canon électromagnétique capable de projeter des ressources en orbite et au-delà, et un système de réception pour les récupérer en sécurité. +se-delivery-cannon-capsule-iridium=Bien que l'iridium soit un métal lourd, sa durabilité accrue permet d'utiliser moins de matériaux qu'une capsule standard. Le poids total est le même, mais sa fabrication est plus simple. +se-delivery-cannon-weapon=Un canon électromagnétique capable de projeter des munitions spéciales, comme un bombe atomique, en orbite et au-delà. +se-spaceship-clamps=Permet de placer des fixations d'amarrage afin que les vaisseaux spatiaux puissent se fixer à un endroit précis en faisant correspondre les emplacements des fixations. L'automatisation nécessite des signaux "Amarrage vers" et "Amarrage à" envoyés dans la console. +se-bio-upgrade-constitution=Augmente la santé maximale. +se-bio-upgrade-strength=Augmente la taille d'inventaire de votre personnage. +se-bio-upgrade-agility=Augmente la vitesse de déplacement de votre personnage. +se-bio-upgrade-dexterity=Augmente la vitesse de fabrication de votre personnage +se-bio-upgrade-intelligence=Améliore la productivité des laboratoires, augmentant le progrès obtenu pour chaque pack de science consommé. +se-energy-beaming=Un faisceau d'énergie intense qui peut être utilisé comme arme interplanétaire, ou pour transmettre de l'énergie là ou vous en avez besoin +se-energy-beam-defence=Défend contre les faisceaux d'énergie basés dans l'espace et les éjections de masse coronale. Fonctionne en faisant léviter des particules magnétiques dans une bulle protectrice, puis réaligne et agglomère les particules selon les besoins pour diffuser les faisceaux d'énergie hostiles. +se-nexus=Un dispositif qui peut être activé sur un vaisseau spatial se déplaçant dans l'espace interstellaire pour générer des données. Avec une technologie supplémentaire, il peut activer un champ de distorsion pour la condition de victoire du vaisseau spatial. +se-spaceship-victory=Permet au Nexus d'activer un propulseur à distorsion pour s'échapper de l'amas d'étoiles local. Le Nexus doit alors être placé dans un vaisseau spatial. Réussir à maintenir une vitesse supérieure à __1__ pendant __2__ s avec le Nexus en mode de propulsion par distorsion permet de gagner la partie. +se-arcosphere=Permet de collecter les arcosphères disséminées dans les étendues interstellaires. +se-arcosphere-folding=Permet d'utiliser les arcosphères comme tenailles extradimensionelles. +se-space-probe=Un silo à fusée pour le lancement de sondes spatiales. Peut également être utilisé pour lancer des satellites à moindre coût. +se-linked-container=Un coffre lié à d'autres grâce à un espace extradimensionel. Les liens du coffre dépendent de la première surface sur laquelle il est placé. +se-unit-capsule=Capules qui déploient des unités de __1__ amies. + +[modifier-description] +tesla-shooting-speed-bonus=Vitesse de tir du fusil Tesla +tesla-damage-bonus=Bonus de dégâts du fusil Tesla +railgun-damage-bonus=Bonus de dégâts du fusil électromagnétique +railgun-shooting-speed-bonus=Vitesse de tir du fusil électromagnétique +cryogun-shooting-speed-bonus=Vitesse de tir du Cryogun +cryogun-damage-bonus=Bonus de dégâts du Cryogun +character-running-speed=Vitesse de déplacement du personnage : +__1__ +character-crafting-speed=Vitesse de fabrication du personnage : +__1__ + +[virtual-signal-name] +signal-speed=Signal de vitesse +se-signal-speed=Signal de vitesse +signal-distance=Signal de distance +se-signal-distance=Signal de distance +se-star=Étoile +se-planet=Planète +se-planet-orbit=Orbite planétaire +se-moon=Lune +se-moon-orbit=Orbite lunaire +se-asteroid-belt=Ceinture d'astéroïdes +se-asteroid-field=Champ d'astéroïdes +se-anomaly=Anomalie +se-meteor=Météorite +se-spaceship=Vaisseau spatial +se-cargo-rocket=Fusée cargo +se-remote-view=Vue à distance +se-death=Mort +se-character-corpse=Cadavre +se-ruin=Ruine +se-accolade=Récompense +se-remove=Enlever +se-radius=Rayon +se-hierarchy=Hiérarchie +se-spaceship-launch=Lancement du vaisseau spatial +se-anchor-using-left-clamp=Amarrage en utilisant le système d'amarrage de gauche +se-anchor-using-right-clamp=Amarrage en utilisant le système d'amarrage de droite +se-anchor-to-left-clamp=Amarrage au système d'amarrage gauche ciblé +se-anchor-to-right-clamp=Amarrage au système d'amarrage droit ciblé +se-beacon-overload=Surcharge de diffuseurs +se-heat=Chaleur +se-pin=Marquage + +[controls] +se-remote-view=Vue satellite +se-remote-view-pins=Marquages dans la vue satellite +se-remote-view-next=Suivant dans l'historique de navigation +se-remote-view-previous=Précédant dans l'historique de navigation +se-universe-explorer=Explorateur d'univers +se-respawn=Réapparition +se-mode-toggle=Choisir le mode de fonctionnement de la structure +se-pin-one=Aller au lieu marqué n°1 +se-pin-two=Aller au lieu marqué n°2 +se-pin-three=Aller au lieu marqué n°3 +se-pin-four=Aller au lieu marqué n°4 +se-pin-five=Aller au lieu marqué n°5 +se-pin-six=Aller au lieu marqué n°6 +se-pin-seven=Aller au lieu marqué n°7 +se-pin-eight=Aller au lieu marqué n°8 +se-pin-nine=Aller au lieu marqué n°9 +se-pin-zero=Aller au lieu marqué n°0 +se-pin-set-one=Configurer le marquage n°1 +se-pin-set-two=Configurer le marquage n°2 +se-pin-set-three=Configurer le marquage n°3 +se-pin-set-four=Configurer le marquage n°4 +se-pin-set-five=Configurer le marquage n°5 +se-pin-set-six=Configurer le marquage n°6 +se-pin-set-seven=Configurer le marquage n°7 +se-pin-set-eight=Configurer le marquage n°8 +se-pin-set-nine=Configurer le marquage n°9 +se-pin-set-zero=Configurer le marquage n°0 + +[shortcut] +se-remote-view=Vue satellite +se-universe-explorer=Explorateur d'univers +se-remote-view-pins=Marquages dans la vue satellite +se-respawn=Réapparition +se-pin-one=Aller au lieu marqué n°1 +se-pin-two=Aller au lieu marqué n°2 +se-pin-three=Aller au lieu marqué n°3 +se-pin-four=Aller au lieu marqué n°4 +se-pin-five=Aller au lieu marqué n°5 +se-pin-six=Aller au lieu marqué n°6 +se-pin-seven=Aller au lieu marqué n°7 +se-pin-eight=Aller au lieu marqué n°8 +se-pin-nine=Aller au lieu marqué n°9 +se-pin-zero=Aller au lieu marqué n°0 +se-pin-set-one=Configurer le marquage n°1 +se-pin-set-two=Configurer le marquage n°2 +se-pin-set-three=Configurer le marquage n°3 +se-pin-set-four=Configurer le marquage n°4 +se-pin-set-five=Configurer le marquage n°5 +se-pin-set-six=Configurer le marquage n°6 +se-pin-set-seven=Configurer le marquage n°7 +se-pin-set-eight=Configurer le marquage n°8 +se-pin-set-nine=Configurer le marquage n°9 +se-pin-set-zero=Configurer le marquage n°0 + +[shortcut-name] +se-remote-view=Vue Satellite [__CONTROL__se-remote-view__] +se-remote-view-pins=Marquages dans la vue satellite [__CONTROL__se-remote-view-pins__] +se-universe-explorer=Explorateur d'univers [__CONTROL__se-universe-explorer__] +se-respawn=Réapparition [__CONTROL__se-respawn__] +se-pin-one=Aller au lieu marqué n°1 [__CONTROL__se-pin-one__] +se-pin-two=Aller au lieu marqué n°2 [__CONTROL__se-pin-two__] +se-pin-three=Aller au lieu marqué n°3 [__CONTROL__se-pin-three__] +se-pin-four=Aller au lieu marqué n°4 [__CONTROL__se-pin-four__] +se-pin-five=Aller au lieu marqué n°5 [__CONTROL__se-pin-five__] +se-pin-six=Aller au lieu marqué n°6 [__CONTROL__se-pin-six__] +se-pin-seven=Aller au lieu marqué n°7 [__CONTROL__se-pin-seven__] +se-pin-eight=Aller au lieu marqué n°8 [__CONTROL__se-pin-eight__] +se-pin-nine=Aller au lieu marqué n°9 [__CONTROL__se-pin-nine__] +se-pin-zero=Aller au lieu marqué n°0 [__CONTROL__se-pin-zero__] +se-pin-set-one=Configurer le marquage n°1 [__CONTROL__se-pin-set-one__] +se-pin-set-two=Configurer le marquage n°2 [__CONTROL__se-pin-set-two__] +se-pin-set-three=Configurer le marquage n°3 [__CONTROL__se-pin-set-three__] +se-pin-set-four=Configurer le marquage n°4 [__CONTROL__se-pin-set-four__] +se-pin-set-five=Configurer le marquage n°5 [__CONTROL__se-pin-set-five__] +se-pin-set-six=Configurer le marquage n°6 [__CONTROL__se-pin-set-six__] +se-pin-set-seven=Configurer le marquage n°7 [__CONTROL__se-pin-set-seven__] +se-pin-set-eight=Configurer le marquage n°8 [__CONTROL__se-pin-set-eight__] +se-pin-set-nine=Configurer le marquage n°9 [__CONTROL__se-pin-set-nine__] +se-pin-set-zero=Configurer le marquage n°0 [__CONTROL__se-pin-set-zero__] + +[tile-name] +se-space-platform-plating=Plateforme spatiale avancée +se-space-platform-scaffold=Plateforme spatiale +se-space-platform-underlay=Espace +se-space-platform-underlay-l=Espace +se-space-platform-underlay-r=Espace +se-space=Vide spatial +se-regolith=Régolithe +se-asteroid=Astéroïde +se-spaceship-floor=Plancher de vaisseau spatial + +[mod-setting-name] +se-meteor-interval=Intervalle maximal entre les météorites +se-plague-max-runtime-2=Durée d'exécution maximale de l'agent biologique +se-planets=Nombre de planètes +se-planet-size=Taille de la planète (1 à 10 000%) +se-seed=Chaine de génération des planètes +se-skip-experimental-warning=Ne pas afficher l'avertissement de mode expérimental +se-print-meteor-info=Afficher les alertes de chute de météorites sur la console +se-print-satellite-discovered-nothing=Afficher une alerte lorsqu'un satellite ne découvre rien +se-space-pipe-capacity=Contenu max du tuyau spatial +se-electric-boiler=Chaudière électrique +se-deep-space-belt-speed=Vitesse du convoyeur spatial avancé +se-deep-space-belt-black=Convoyeurs spatiaux avancés noirs +se-deep-space-belt-white=Convoyeurs spatiaux avancés blancs +se-deep-space-belt-red=Convoyeurs spatiaux avancés rouges +se-deep-space-belt-yellow=Convoyeurs spatiaux avancés jaunes +se-deep-space-belt-green=Convoyeurs spatiaux avancés verts +se-deep-space-belt-cyan=Convoyeurs spatiaux avancés cyans +se-deep-space-belt-blue=Convoyeurs spatiaux avancés bleus +se-deep-space-belt-magenta=Convoyeurs spatiaux avancés magenta +se-space-science-pack=Méthode alternative pour les packs de science spatiale +se-never-show-lifesupport=Ne jamais afficher l'interface du support de vie +se-show-zone-preview=Afficher l'aperçu des surfaces +se-pylon-charge-points=Points de recharge sur les pylônes +se-cmes-max-frequency=Intervalle max entre les Éjections de Masse Coronale +se-spawn-small-resources=Ressources de départ supplémentaires +se-show-overhead-button-satellite-mode=Afficher le bouton de vue satellite +se-show-overhead-button-interstellar-map=Afficher le bouton de la carte interstellaire +se-show-overhead-button-universe-explorer=Afficher le bouton de l'explorateur d'univers +se-show-pin-help-tooltip=Afficher l'infobulle d'aide sur les boutons de marquage +se-scan-search-budget=Taux de balayage du scan satellite +se-scan-chart-budget=Taux de génération du scan satellite +se-scan-alert-interval=Intervalle entre les alertes du scan satellite +se-supercharger-individual-charge-rate=Puissance de recharge de chaque port du superchargeur (MW) + +[mod-setting-description] +se-meteor-interval=L'intervalle maximum entre deux chutes de météorites. Le temps entre deux évènements est aléatoire entre 1 minute et cette valeur. +se-plague-max-runtime-2=Durée maximale d'effet de l'agent biologique planétaire, en minutes. Après ce délai, toutes les entités biologiques sont détruites. Cela peut aussi supprimer les attaques de représaille de l'ennemi avant qu'elles ne soient terminées. Ce réglage a pour but d'économiser les UPS, et non de rendre le jeu plus facile. +se-planets=Ne modifiez pas ce réglage sur une partie en cours. +se-planet-size=Ne modifiez pas ce réglage sur une partie en cours. +se-seed=Ne modifiez pas ce réglage sur une partie en cours. +se-skip-experimental-warning=L'avertissement de statut expérimental du mod n'apparaitra pas au lancement d'une nouvelle partie (vous ne pourrez pas non plus voir si ce message devait être mis à jour par la suite). +se-print-meteor-info=Vous permet de retrouver les alertes de chutes de météorites après que l'alerte principale soit passée en appuyant sur la touche __CONTROL__toggle-console__. +se-print-satellite-discovered-nothing=Une alerte est affichée à chaque lancement de satellite pour vous informer d'une éventuelle nouvelle découverte. Ce réglage permet de désactiver cette alerte si vous n'avez rien découvert de neuf. +se-space-pipe-capacity=Contenu de chaque segment de tuyau spatial +se-electric-boiler=Ajoute la chaudière électrique au jeu +se-deep-space-belt-speed=Les convoyeurs spatiaux avancés sont équilibrés pour être les meilleurs convoyeurs disponibles. Si vous jouez avec d'autres mods qui vous donnent accès à d'encore meilleures options, vous pouvez ajuster la vitesse des convoyeurs spatiaux avancés ici. +se-deep-space-belt-black=Permet de désactiver les recettes pour les convoyeurs spatiaux avancés noirs pour réduire l'encombrement de l'interface utilisateur. +se-deep-space-belt-white=Permet de désactiver les recettes pour les convoyeurs spatiaux avancés blancs pour réduire l'encombrement de l'interface utilisateur. +se-deep-space-belt-red=Permet de désactiver les recettes pour les convoyeurs spatiaux avancés rouges pour réduire l'encombrement de l'interface utilisateur. +se-deep-space-belt-yellow=Permet de désactiver les recettes pour les convoyeurs spatiaux avancés jaunes pour réduire l'encombrement de l'interface utilisateur. +se-deep-space-belt-green=Permet de désactiver les recettes pour les convoyeurs spatiaux avancés verts pour réduire l'encombrement de l'interface utilisateur. +se-deep-space-belt-cyan=Permet de désactiver les recettes pour les convoyeurs spatiaux avancés cyans pour réduire l'encombrement de l'interface utilisateur. +se-deep-space-belt-blue=Permet de désactiver les recettes pour les convoyeurs spatiaux avancés bleus pour réduire l'encombrement de l'interface utilisateur. +se-deep-space-belt-magenta=Permet de désactiver les recettes pour les convoyeurs spatiaux avancés magenta pour réduire l'encombrement de l'interface utilisateur. +se-space-science-pack=Si un autre mod ajoute une autre méthode d'obtention du pack de science spatiale, cette méthode sera utilisée. Si il n'y a pas possibilité d'en fabriquer, Space Exploration peut soit supprimer cet objet, soit l'utiliser comme un pack de science d'optimisation. +se-never-show-lifesupport=Si cette case est cochée, l'interface du support de vie ne sera jamais affichée, même si vous êtes en train de suffoquer. +se-show-zone-preview=Décochez pour désactiver la fenêtre d'aperçu de surface dans l'explorateur d'univers. Peut améliorer les performances si vous utilisez l'explorateur en même temps que certains outils de debuggage de Factorio. +se-pylon-charge-points=Décochez pour enlever les points de charge des pylônes de construction. Cela permet de contrôler le comportement de chargement des robots, mais vous devrez peut-être ajouter d'autres possibilités de chargement le long des trajets longue distance. +se-cmes-max-frequency=Intervalle maximal de répétition des éjections de masse coronale (EMC). La valeur est exprimée en heures, 0 = désactivé. La première EMC est programmée à la première minute du jeu et est généralement inoffensive. La seconde est prévue environ 48 heures plus tard. Le délai entre les répétitions est compris entre 50% et 100% du réglage de l'intervalle maximum. Un réglage non nul ne s'applique qu'aux nouveaux événements ; une fois qu'une heure d'arrivée prévue a été fixée, elle ne sera pas affectée. Un réglage à zéro effacera toutes les EMC programmées, bien que le changement puisse prendre jusqu'à une minute pour prendre effet. +se-spawn-small-resources=Ajoute quelques petits gisements de ressources supplémentaires proches les un des autres dans la zone de départ. +se-show-overhead-button-satellite-mode=Ajoute un bouton en haut à gauche pour afficher la vue satellite +se-show-overhead-button-interstellar-map=Ajoute un bouton en haut à gauche pour afficher la carte interstellaire +se-show-overhead-button-universe-explorer=Ajoute un bouton en haut à gauche pour afficher l'explorateur d'univers +se-show-pin-help-tooltip=Affichez une info-bulle sur les boutons de marquage qui donne des instructions sur la façon de les utiliser. +se-scan-search-budget=Scan de la surface par satellite : le nombre de blocs (zones 32x32) qui peuvent être traités simultanément. Une valeur plus élevée permet de survoler rapidement les blocs déjà révélés pour commencer à travailler sur les zones encore inconnues. +se-scan-chart-budget=Scan de la surface par satellite : le nombre de blocs (zones 32x32) qui peuvent être ajoutés dans le tampon d'attente en parallèle. Les nouveaux ajouts ne seront pas traités avant que les blocs précédents soient révélés. +se-scan-alert-interval=L'intervalle en secondes entre les alertes de mise à jour du scan de surface. Le fait de révéler les surfaces augmente la taille du fichier de sauvegarde du jeu ; il est donc préférable de ne pas en laisser un en marche et de les oublier. +se-supercharger-individual-charge-rate=Puissance de chaque port de recharge du superchargeur, en MW (sans influence sur la puissance max disponible). La valeur minimum (par défaut) est de 90MW, ce qui permet de recharger un robot du jeu de base en 1 tick (1/60 s). Valeur max 1GW, la puissance max mobilisée par le superchargeur. + +[string-mod-setting] +se-space-science-pack-Remove=Supprimer complètement +se-space-science-pack-Replace=Remplacer par le pack de science des fusées +se-space-science-pack-OptimisationUranium=Optimisation : Recette d'uranium-cryo +se-space-science-pack-OptimisationFish=Optimisation : Recette de vita-vulca-poisson + +[autoplace-control-names] +planet-size=[img=virtual-signal/se-planet] Taille de la planète +se-water-ice=[img=item/se-water-ice] Glace d'eau (uniquement dans l'espace) +se-methane-ice=[img=item/se-methane-ice] Glace de méthane (uniquement dans l'espace) +se-cryonite=[img=item/se-cryonite] Cryonite (absent sur le monde de départ) +se-vulcanite=[img=item/se-vulcanite] Vulcanite (absent sur le monde de départ) +se-vitamelange=[img=item/se-vitamelange] Vitamélange (absent sur le monde de départ) +se-beryllium-ore=[img=item/se-beryllium-ore] Béryllium (absent sur le monde de départ) +se-holmium-ore=[img=item/se-holmium-ore] Holmium (absent sur le monde de départ) +se-iridium-ore=[img=item/se-iridium-ore] Iridium (absent sur le monde de départ) +se-naquium-ore=[img=item/se-naquium-ore] Minerai de naquium (uniquement dans l'espace) + +[map-gen-preset-name] +space-exploration=Valeurs par défaut de Space Exploration + +[map-gen-preset-description] +space-exploration=Valeurs par défaut de Space Exploration + +[tooltip-category] +shot=Utilisation diff --git a/space-exploration_0.5.80/space-exploration/locale/hw/strings.cfg b/space-exploration_0.5.80/space-exploration/locale/hw/strings.cfg new file mode 100644 index 0000000..d79b086 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/locale/hw/strings.cfg @@ -0,0 +1,823 @@ +spaceship-integrity100=""+100 שלמות מבנית חללית +spaceship-integrity300=+ 300 שלמות מבנית חללית +spaceship-integrity500=+500 שלמות מבנית חללית +core-mining-productivity-5= 5% Core פרודוקטיביות הכרייה + + +[space-exploration] +rename-something=שינוי שם __1__ +trigger-none=ללא (ידני) + +trigger-fuel-full=הפעלה על דלק מלא +trigger-cargo-full=הפעלה על מטען מלא +trigger-fuel-full-signal=הפעלה על אות ירוק כאשר דלק מלא +trigger-cargo-full-signal=הפעלה על גרין סיגנל כאשר מטען מלא +destination-type-zone=מיקום משוער +destination-type-landing-pad=מטענים נחיתה Pad +button-launch=הפעלה +button-launch-disabled=הפעלה (מושבת) +destination-crash-warning=אזהרה: בחר בלוח המטען של המטען כדי להקטין את סיכויי ההתרסקות +recipe-to=__1__ אל __2__ +recipe-from=__1__ מאת __2__ +remote-view=ניווט לוויין Uplink [__CONTROL__se-remote-view__] +remote-view-instruction=השקת יותר לוויינים כדי לגלות כוכבים נוספים, כוכבי לכת, ירחים, ואזורים אחרים. +exit-remote-view=צא מלוויין ניווט לווייני [__CONTROL__se-remote-view__] +remote-view-requires-satellite=אתה חייב להשיק לוויין להשתמש uplink הלוויין ניווט. +satellite-launched=לוויין פריסה וסריקה לאובייקטים אסטרונומיים. השתמש [IMG = אות וירטואלי / תצוגת-מרחוק-מרחוק] ניווט לווייני כדי להציג (לחץ על [color = green] [__ CONTROL__se-remote-View __] [/ color] או השתמש בסרגל קיצור הדרך). +satellite-discovered-platform=[color = cyan] הלוויין גילה חלק משטח פלטפורמה. [/ color] +source-discovered-zone=[color = cyan] __ 1__ גילה __2__ חדש: [/ color] [img = __ 3__] [color = white] __ 4 __ [/ color] +discovered-zone=[color = cyan] התגלה חדש __1__: [img = __ 2__] [/ color] [color = white] __ 3 __ [/ color] +space-capsule=קפסולת חלל +player-died=__1__ מת +launch-suit-warning=כדי להימנע מחנק, אנא שקול ללבוש חליפה thruster שלך. +suffocating-warning=אתה נחנק. קבל בקפסולה בחלל או ללבוש חליפה שלך thruster. +rocket_survivability_fail=רקטת מטען פגעה במעבר והיא מנותקת. כמו כן, יעצו מחקרים נוספים בנושא שרידות רקטות ומטעני בטיחות מטענים. +respawn-if-stranded=אם תקועים אתה יכול להשתמש קיצור resawn [__CONTROL__se-respawn__] +filter-list=לחפש +clear-filter=חיפוש נקי +zone-tooltip=__1__ __2__ __3__ __4__ __5__ __6__ __7__ +zone-tooltip-type=\ nType: __1__ +zone-tooltip-resources=\ n משאב ראשי: __1__ +zone-tooltip-lifesigns=\ nLesigns: __1__ +zone-tooltip-daynight=\ n יום / לילה מחזור: __1 דקות +zone-tooltip-bot-attrition=\ n רובוט הפרעה: __1__ +construction-denied=לא ניתן להציב כאן. +construction-denied-vehicle-in-space=לא ניתן למקם כלי רכב קרקעיים בחלל. +currently-viewing=כרגע צופה: __1__ + +[entity-name] +destroyed-cargo-pod=תרמיל מטען נהרס +meteorite=מטאוריט +rocket-silo=סילו טיל בלווין +rocket-fragment=שבר רוקט +se-antimatter-reactor=כור אנטי-חומר +se-cargo-rocket-cargo-pod=תרמיל מטענים +se-condenser-turbine=טורבינת קונדנסר +se-condenser-turbine-tank=טורבינת קונדנסר +se-condenser-turbine-generator=טורבינת קונדנסר +se-core-fragment-processor=מעבד הליבה שבר +se-core-miner=תרגיל הכרייה Core +se-core-miner-drill=תרגיל הכרייה Core +se-electric-boiler=דוד חשמלי +se-fluid-burner-generator=גנרטור מבער נוזל +se-fuel-refinery=זיקוק דלק +se-meteor-defence-container=מיתקן ביטחוני מטאור +se-meteor-defence-charger=מיתקן ביטחוני מטאור +se-meteor-point-defence-container=הגנת נקודת מטאור +se-meteor-point-defence-charger=הגנת נקודת מטאור +se-methane-ice=קרח מתאן +se-rocket-launch-pad=סילו טיל מטענים +se-rocket-launch-pad-tank=סילו טיל מטענים +se-rocket-launch-pad-silo=סילו טיל מטענים +se-rocket-launch-pad-combinator=סילו טיל מטענים +se-rocket-launch-pad-_-seat=סילו טיל מטענים +se-rocket-launch-pad-settings=סילו טיל מטענים +se-rocket-landing-pad=מנחת מטענים +se-space-accumulator=מצברי שטח +se-space-astrometrics-laboratory=מעבדת אסטרומטריקה +se-space-biochemical-laboratory=מעבדה ביוכימית +se-space-assembling-machine=מכונית להרכבת שטח +se-space-capsule-_-vehicle=קפסולת חלל +se-space-curved-rail=רכבת שטח +se-space-decontamination-facility=מתקן טיהור +se-space-electromagnetics-laboratory=מעבדת אלקטרומגנטיקה +se-space-genetics-laboratory=המעבדה לגנטיקה +se-space-growth-facility=מתקן צמיחה +se-space-gravimetrics-laboratory=מעבדת Gravimetrics +se-space-hypercooler=Hypercooler +se-space-laser-laboratory=מעבדת ליזר +se-space-lifesupport-facility=מתקן תמיכה בחיים +se-space-manufactory=manufactory שטח +se-space-material-fabricator=מפברק חומר +se-space-mechanical-laboratory=מעבדה מכאנית +se-space-particle-accelerator=מאיץ חלקיקים +se-space-particle-collider=מאיץ חלקיקים +se-space-plasma-generator=גנרטור פלזמה +se-space-radiation-laboratory=מעבדת קרינה +se-space-radiator=רדיאטור תרמי +se-space-recycling-facility=מתקן מיחזור +se-space-pipe=צינור שטח +se-space-pipe-to-ground=צינור שטח לקרקע +se-space-science-lab=מעבדת מדעי שטח +se-space-solar-panel=פאנל סולארי שטח +se-space-solar-panel-2=שטח מתקדם פאנל סולארי +se-space-spectrometry-facility=מתקן ספקטרומטריית +se-space-straight-rail=רכבת שטח +se-space-supercomputer-1=מחשב העל +se-space-supercomputer-2=מחשב העל קוונטית +se-space-supercomputer-3=מחשב על עצבי +se-space-telescope-radio=רדיו טלסקופ +se-space-telescope-microwave=טלסקופ מיקרוגל +se-space-telescope=טלסקופ +se-space-telescope-xray=טלסקופ xray +se-space-telescope-gammaray=טלסקופ קרני גמא +se-space-thermodynamics-laboratory=מעבדת תרמודינאמיקה +se-space-splitter=ספליטר שטח +se-space-transport-belt=שטח התחבורה חגורה +se-space-underground-belt=שטח תחתי חגורה +se-spaceship-antimatter-engine=Spaceship אנטי-חומר מנוע +se-spaceship-antimatter-booster-tank=ספינת חלל אנטי-חומר המאיץ טנק +se-spaceship-console=קונסולת ספינת חלל +se-spaceship-gate=דלת ספינת חלל +se-spaceship-obstacle=פסולת חלל +se-spaceship-rocket-engine=ספינת חלל רקטות מנועים +se-spaceship-rocket-booster-tank=ספינת חלל טיל בטנק המאיץ +se-spaceship-wall=קיר ספינת חלל +se-water-ice=מי קרח +small-asteroid=אסטרואיד קטן + +[entity-description] +rocket-silo=לשגר לווין לחלל לסרוק שטח, ואולי לגלות כוכבי לכת חדשים, ולהשיג כמות קטנה של מדעי החלל. +se-antimatter-reactor=ומשמידה אנטי-חומר עם חומר כדי לייצר חום קיצוני. +se-condenser-turbine=75% את היעילות של טורבינת קיטור אלא רק משתמשים 1% מהמים. +se-core-fragment-processor=חילוץ משאבים שברי ליבה. +se-core-miner=מאפשר אינסופית להפקת אוצרות מן הפלנטות והירחים אבל יש תשואה שולית פוחתת אם מרובים משמשים באותו הגוף. +se-core-miner-drill=מאפשר אינסופית להפקת אוצרות מן הפלנטות והירחים אבל יש תשואה שולית פוחתת אם מרובים משמשים באותו הגוף. צורכת 50MW. +se-electric-boiler=יצירת קיטור ממים באמצעות אנרגיה חשמלית. +se-fluid-burner-generator=דורש דלק נוזלי עם ערך אנרגיה. ברנס נוזל לייצור חשמל. פשוט וקומפקטי אבל חסר את יעילות האנרגיה של מערכות מבוססות קיטור גדול. +se-meteor-defence-container=האם ניתן להגן על כדור הארץ כולו מן מטאורים אבל יכול לירות 1 מטאור רק זמן. חייב להיות עמוס תחמושת מטאור ביטחון טעון במלואה לפטר. דיוק 80%, לוקח זמן לנוח אחרי הירי. +se-meteor-defence-charger=האם ניתן להגן על כדור הארץ כולו מן מטאורים אבל יכול לירות 1 מטאור רק זמן. חייב להיות עמוס תחמושת מטאור ביטחון טעון במלואה לפטר. דיוק 80%, לוקח זמן לנוח אחרי הירי. +se-meteor-point-defence-container=מגן על שטח מן המטאורים. מסוגל לירות עד 4 מטאורים מטחים. חייב להיות עמוס תחמושת הגנת נקודת מטאור ו טעון במלואה לפטר. טווח 64, 50% דיוק, לוקח זמן לנוח אחרי הירי. +se-meteor-point-defence-charger=מגן על שטח מן המטאורים. מסוגל לירות עד 4 מטאורים מטחים. חייב להיות עמוס תחמושת הגנת נקודת מטאור ו טעון במלואה לפטר. טווח 64, 50% דיוק, לוקח זמן לנוח אחרי הירי. +se-rocket-launch-pad=משיקת מלאי לחלל שלה. האם ניתן לקחת נוסעים, להיכנס באמצעות ENTER ליד דלת הכניסה. +se-rocket-landing-pad=אתר משלוח מטען עבור קפסולות רקטות מטען. +se-space-assembling-machine=מכונית להרכבה שונה שיכול לעבוד בחלל. +se-space-astrometrics-laboratory=משלב, משווה, מכמת מקורות שונים של מידע אסטרונומי. +se-space-biochemical-laboratory=מעבדת כימית מתקדמת המתמחה הביו-כימיה. ניתן גם לבצע כימיים בסיסיים יותר ועיבוד נפט. +se-space-capsule-_-vehicle=ניתן להשתמש בו כדי לקחת נוסע בחזרה אל פני שטח הכוכב הקרוב. הזן את הקפסולה באמצעות ENTER. +se-space-decontamination-facility=מנקה חומרים לשימוש בסביבות סטרילי, ומכין נוזלים לשימוש בתנאי לחץ נמוך. +se-space-electromagnetics-laboratory=ציוד עבור שדה מגנטי חזק ויישומי מתח גבוהים מאוד. +se-space-genetics-laboratory=מעבדת מוקדש רצף גנטי, הנדסה גנטית, והדפסה גנטית של תרבויות. +se-space-gravimetrics-laboratory=ניתוח המדמה הפרעות הכבידה. +se-space-growth-facility=גדל דגימות ביולוגיות תחת מגוון של תנאים מבוקרים שאינם אפשריים במקום אחר, מיקרו-כבידה כזה, +se-space-hypercooler=מבצע החלפת חום על thermofluid, מה שהופך חם אחד והשני קר. +se-space-laser-laboratory=ניסויים עם לייזרים. הגנה על עיניים חייבת להיות משוחקת. +se-space-lifesupport-facility=לקיום חיים בסביבות עוינות יותר. +se-space-manufactory=טכנולוגיית מפתח לייצור המוני בחלל. +se-space-material-fabricator=Synthesises חומרים חדשים. הכלאה בין מאיץ חלקיקים ומדפסת 3D. +se-space-mechanical-laboratory=מספק מגוון של תהליכים מכניים: ריסוק, קריעה, מריחה, רטט, וכו ' +se-space-particle-accelerator=מאיץ חלקיקים קרובים למהירות האור. +se-space-particle-collider=מתנגש חלקיקים במהירות גבוהה ומנתח את התוצאות. +se-space-pipe=אתה יכול ללכת על זה. +se-space-pipe-to-ground=מגוון יקר ומוגבל, רק כדי לשמש בעת הצורך. אתה יכול ללכת לאורך צינור החלל. +se-space-plasma-generator=יוצר מגוון של פלזמות. +se-space-radiation-laboratory=מקום בטוח יחסית לשחק עם חומר רדיואקטיבי. יכול לשמש לעיבוד אורניום. +se-space-radiator=מקרין משם עודף חום מן thermofluid השחון. +se-space-recycling-facility=ממחזר גרוטאות ומוצרי לוואי אחרים לתוך משאבים. +se-space-solar-panel=פאנל סולארי יעילות גבוהה עבור החלל. +se-space-solar-panel-2=פאנל סולארי גבוהה ויעילות מתקדמים בחלל. +se-space-spectrometry-facility=Spectrophotometry, גז כרומטוגרפיה, ספקטרומטריית מסה, ואת spectrography האחר. דברים באש לעבר הקיר, להפוך אותו לכופף, ונראה לאן זה יגיע. +se-space-supercomputer-1=מניפולציה נתונים, עיבוד הסימולציה. +se-space-supercomputer-2=מחשוב קוונטי. נתונים משופרים מניפולציה, עיבוד סימולציה. +se-space-supercomputer-3=רשת עצבית מסתגלת על מסגרת מחשוב קוונטי. נתונים משופרים מניפולציה, עיבוד סימולציה. +se-space-straight-rail=עוצב עבור שטח אבל ניתן להשתמש בשטח מדי. +se-space-science-lab=האם ניתן להשתמש חבילות מדע מתקדמות. יש להציב בחלל. +se-space-telescope=טלסקופ מתוחכם רגיש לאורכי גל שונים ברחבי הספקטרום הנראה. +se-space-telescope-gammaray=קרני גמא לא לשבור. טלסקופ רב עוצמה זו המשתמשת מראות גלאי מיוחד במקום. +se-space-telescope-xray=צילומי רנטגן נחסמים על ידי רוב אטמוספרות. טלסקופ רב עוצמה זה מיועד החלל שבו האווירה היא לא בעיה. +se-space-telescope-microwave=טלסקופ ענק שמזהה מיקרוגלי הרקע הקוסמי. +se-space-telescope-radio=טלסקופ ענק שמזהה גלי רדיו חלשים מאוד ממקורות מרחק. +se-space-thermodynamics-laboratory=מתחייב תהליכים כרוכים טמפרטורות קיצוניות. ניתן גם לבצע תהליכים תרמיים בסיסיים, כגון להתכה. +se-space-transport-belt=מפסיק את הפריטים שלך צף משם. +se-spaceship-antimatter-engine=ומשמידת זרם אנטי-חומר. נחשב מחצה הכלה חללית. +se-spaceship-antimatter-booster-tank=בעלת אנטי-חומר. חובה לשיגור חללית. +se-spaceship-console=השתמש כדי להזיז את החללית בין כוכבי לכת, ירחים, במסלולים, ושדות אסטרואיד. חייב להיות על הרצפה חללית, הכלול בתוך קירות / דלתות חלליות, אין פערים או חורים. בדיקת תקינות מדגישה בעיות. +se-spaceship-gate=שדה כוח מפסיק לחץ כשנפתחת הדלת. נחשב מחצה הכלה חללית. +se-spaceship-rocket-engine=דלק ברנס טילים נוזליים. נחשב מחצה הכלה חללית. +se-spaceship-rocket-booster-tank=בעלת דלק טילים נוזלי. חובה לשיגור חללית. +se-spaceship-wall=יש להציב על הרצפה חללית כדי להיחשב כחלק ספינה. נחשב מחצה הכלה חללית, פערים אלכסוניים לשבור בלימה. + +[equipment-name] +energy-shield-equipment=מגן אנרגיה +energy-shield-mk2-equipment=MK2 מגן אנרגיה +energy-shield-mk3-equipment=MK3 מגן אנרגיה +energy-shield-mk4-equipment=MK4 מגן אנרגיה +energy-shield-mk5-equipment=Mk5 מגן אנרגיה +energy-shield-mk6-equipment=MK6 מגן אנרגיה +se-adaptive-armour-equipment-1=MK1 שריון מסתגל +se-adaptive-armour-equipment-2=MK2 שריון מסתגל +se-adaptive-armour-equipment-3=MK3 שריון מסתגל +se-adaptive-armour-equipment-4=MK4 שריון מסתגל +se-adaptive-armour-equipment-5=Mk5 שריון מסתגל +se-rtg-equipment=ראדיוקלידבאטרי נייד +se-rtg-equipment-2=ראדיוקלידבאטרי MK2 נייד + +[equipment-description] +energy-shield-equipment=בועת מגן כי גובה במהירות אבל משתמשת הרבה אנרגיה. +energy-shield-mk2-equipment=בועת מגן כי גובה במהירות אבל משתמשת הרבה אנרגיה. +energy-shield-mk3-equipment=בועת מגן כי גובה במהירות אבל משתמשת הרבה אנרגיה. +energy-shield-mk4-equipment=בועת מגן כי גובה במהירות אבל משתמשת הרבה אנרגיה. +energy-shield-mk5-equipment=בועת מגן כי גובה במהירות אבל משתמשת הרבה אנרגיה. +energy-shield-mk6-equipment=בועת מגן כי גובה במהירות אבל משתמשת הרבה אנרגיה. +se-adaptive-armour-equipment-1=שריון המשתמשת באנרגיה כדי תיקון עצמי. לאט לאט מגביר ערך הגנה לאורך זמן. +se-adaptive-armour-equipment-2=שריון המשתמשת באנרגיה כדי תיקון עצמי. לאט לאט מגביר ערך הגנה לאורך זמן. +se-adaptive-armour-equipment-3=שריון המשתמשת באנרגיה כדי תיקון עצמי. לאט לאט מגביר ערך הגנה לאורך זמן. +se-adaptive-armour-equipment-4=שריון המשתמשת באנרגיה כדי תיקון עצמי. לאט לאט מגביר ערך הגנה לאורך זמן. +se-adaptive-armour-equipment-5=שריון המשתמשת באנרגיה כדי תיקון עצמי. לאט לאט מגביר ערך הגנה לאורך זמן. +se-rtg-equipment=הגנרטור התרמו רדיואיזוטופיים. גנרטור נייד שממירה את החום מן התפרקות רדיואקטיבית לחשמל. שמחזיק עשרות שנים ללא נדרש דלק נוסף. +se-rtg-equipment-2=הגנרטור התרמו רדיואיזוטופיים. גנרטור נייד משופרת שממירה את החום מן התפרקות רדיואקטיבית לחשמל. שמחזיק עשרות שנים ללא נדרש דלק נוסף. + +[fluid-name] +se-antimatter-stream=זרם אנטי-חומר +se-bio-sludge=Biosludge +se-contaminated-bio-sludge=biosludge המזוהם +se-contaminated-space-water=מים מזוהמים קוסמיים +se-chemical-gel=ג'ל כימי +se-decompressing-steam=קיטור +se-liquid-rocket-fuel=דלק טילים נוזלי +se-methane-gas=גז מתאן +se-methane-gas-mixed=גז מתאן מעורב +se-nutrient-gel=ג'ל מזין +se-neural-gel=ג'ל עצבית +se-neural-gel-2=ג'ל מתקדם עצבי +se-ion-stream=זרם יון +se-plasma-stream=זרם פלזמה +se-particle-stream=זרם חלקיקים +se-proton-stream=זרם פרוטון +se-space-coolant=תרמופלואיד 25 ° C +se-space-coolant-hot=תרמופלואיד 25 ° C +se-space-coolant-warm=תרמופלואיד מגניב -10 ° C +se-space-coolant-cold=קרת תרמופלואיד -100 ° C +se-space-coolant-supercooled=בקירור תרמופלואיד -273 ° C +se-space-water=מים קוסמיים + +[fluid-description] +se-space-water=מים כי לא להקפיא בלחץ נמוך, יותר מתאים ליישומים מרחב ביותר. +se-space-coolant=טמפרטורת ברירת המחדל של תרמופלואיד. +se-space-coolant-hot=טמפרטורת ברירת המחדל של תרמופלואיד. +se-space-coolant-warm=הטמפרטורה של לאחר מקוררת על ידי רדיאטורים תרמיים. +se-space-coolant-cold=הטמפרטורה של tתרמופלואיד לאחר היפרהיפר. +se-space-coolant-supercooled=הטמפרטורה של תרמופלואיד לאחר היפר חזר. +se-liquid-rocket-fuel= + +[item-group-name] +space=שטח +spaceship=ספינת חלל +bob-fluids=נוזלים + +[item-name] +sand=חול +solid-sand=חול שנשטף +washed-sand=חול שנשטף +glass=זכוכית +core-fragment=קטע הליבה (__1__) +rocket-fuel=דלק טילים מוצק +satellite=ניווט לווינים +se-antimatter-canister=אנטי-חומר מיכל +se-astrometric-data=אסטרומטרי תצפית נתונים +se-astronomic-catalogue-1=קטלוג אסטרונומים +se-astronomic-catalogue-2=קטלוג אסטרונומי רחבה +se-astronomic-catalogue-3=קטלוג אסטרונומים מקיף +se-astronomic-catalogue-4=קטלוג אסטרונומים מורחב +se-astronomic-insight=Insight אסטרונומים +se-astronomic-science-pack=חבילת המדע אסטרונומי +se-atomic-data=נתונים אטומיים +se-bio-combustion-data=ביו שרפה נתונים +se-bio-combustion-resistance-data=ביו שרפה התנגדות נתונים +se-bio-spectral-data=ביו-ספקטרלי נתונים +se-biochemical-data=נתונים ביוכימיים +se-bioculture=ביו-תרבות +se-bioelectrics-data=ביו אלקטריים נתונים +se-biological-catalogue-1=קטלוג ביולוגי +se-biological-catalogue-2=קטלוג הביולוגי הרחב +se-biological-catalogue-3=קטלוג ביולוגי מקיף +se-biological-catalogue-4=קטלוג ביולוגי מורחב +se-biological-insight=תובנה הביולוגית +se-biological-science-pack=חבילת המדע הביולוגי +se-biomechanical-data=ביומכנינתונים +se-biomechanical-resistance-data=ביומכני התנגדות נתונים +se-boson-data=בוזון נתונים +se-broken-data=כרטיס נתונים שבור +se-canister=מכל מאובטח +se-cargo-rocket-cargo-pod=תרמיל מטענים +se-cargo-rocket-fuel-tank=טנק דלק טילים +se-cargo-rocket-section=סעיף רקטות מטענים +se-cargo-rocket-section-packed=סעיף רקטות מטענים ארוז +se-cold-thermodynamics-data=נתוני תרמודינאמיקה קרים +se-comparative-genetic-data=השוואתי נתונים גנטיים +se-compressive-strength-data=נתונים חוזק דחיסה +se-conductivity-data=נתונים מוליכים +se-contaminated-scrap=גרוטאות מזוהמות +se-core-fragment-omni=קטע הליבה +se-cryogenics-data=נתוני נושא הקפאה +se-dark-energy-data=אנרגיה שחורה נתונים +se-darkmatter-data=חומר אפל נתונים +se-data-storage-substrate-cleaned=מצע אחסון נתונים מלוטש +se-data-storage-substrate=מצע אחסון נתונים גולמי +se-decompression-data=לחץ נתונים +se-decompression-resistance-data=לחץ התנגדות נתונים +se-deep-space-science-pack=חבילה מתקדמת מדע החלל +se-electromagnetic-field-data=אלקטרומגנטית שדה נתונים +se-empty-data=כרטיס נתונים ריק +se-empty-lifesupport-canister=רוקן תמיכה בחיים מיכל +se-energy-catalogue-1=קטלוג אנרגיה +se-energy-catalogue-2=קטלוג אנרגיה רחבה +se-energy-catalogue-3=קטלוג אנרגיה מקיף +se-energy-catalogue-4=קטלוג אנרגיה מורחב +se-energy-insight=תובנה אנרגיה +se-energy-science-pack=חבילת מדע אנרגיה +se-entanglement-data=נתוני הסתבכות +se-exotic-fission-data=נתוני ביקוע אקזוטיים +se-exotic-singularity-data=נתוני סינגולריות +se-experimental-biochemical-data=ניסיוני ביוכימיים נתונים +se-experimental-bioculture=ניסיוני ביו-תרבות +se-experimental-genetic-data=ניסיוני גנטי נתונים +se-experimental-material-decay-data=ניסיוני חומר ריקבון נתונים +se-experimental-material-spectral-data=ניסיוני חומר ספקטרלי נתונים +se-experimental-material=ניסיוני חומר אב טיפוס +se-experimental-specimen=ביומסה ניסויית +se-experimental-superconductor=אב טיפוס מוליך +se-forcefield-data=נתוני שדה כוח +se-fusion-test-data=פיוז'ן בדיקת נתונים +se-gammaray-detector=Gamma Ray גלאי +se-gammaray-observation-data=Gamma Ray תצפית נתונים +se-gammaray-test-data=Gamma Ray נתונים +se-genetic-data=נתונים גנטיים +se-gravity-wave-observation-data=Gravity Wave תצפית נתונים +se-gravimetric-observation-data=Gravimetric תצפית נתונים +se-gravimetric-test-data=Gravimetric בדיקת נתונים +se-heat-shielding=מגן חום +se-hot-thermodynamics-data=נתוני תרמודינאמיקה חמה +se-infrared-observation-data=נתוני תצפית אינפרא אדומים +se-ion-spectrometry-data=נתונים ספקטרומטריית יון +se-junk-data=כרטיס נתוני זבל +se-lepton-data=לפטון נתונים +se-lifesupport-canister=תמיכה בחיים מיכל +se-magnetic-canister=מיכל מגנטי +se-magnetic-monopole-data=נתוני מונופול מגנטיים +se-material-decay-data=חומר ריקבון נתונים +se-material-science-pack=חבילת חומר המדע +se-material-spectral-data=חומר ספקטרלי נתונים +se-material-testing-pack=חבילת חומר בדיקה +se-material-catalogue-1=קטלוג חומר +se-material-catalogue-2=קטלוג חומר רחבה +se-material-catalogue-3=קטלוג חומר מקיף +se-material-catalogue-4=קטלוג חומר מורחב +se-material-insight=תובנה חומר +se-medpack=תרופה + +se-medpack-2=תרופה 2 +se-medpack-3=תרופה 3 +se-medpack-4=תרופה 4 +se-meteor-defence=מיתקן ביטחוני מטאור +se-meteor-defence-ammo=תחמושת מיתקן ביטחוני מטאור +se-meteor-point-defence=הגנת נקודת מטאור +se-meteor-point-defence-ammo=תחמושת הגנת נקודת מטאור +se-methane-ice=קרח מתאן +se-micro-black-hole-data=נתונים חור שחור זעיר +se-microwave-observation-data=נתוני תצפית מיקרוגל +se-nano-cold-thermodynamics-data=נתוני תרמודינאמיקה קרים ננו +se-nano-compressive-strength-data=נתונים חוזק דחיסה ננו +se-nano-hot-thermodynamics-data=נתוני תרמודינאמיקה חמים ננו +se-nanomaterial=ננו + +se-nano-tensile-strength-data=נתונים חוזק מתיחת ננו +se-negative-pressure-data=נתונים ללחץ שלילי +se-neural-anomaly-data=עצבי אנומליה נתונים +se-nutrient-vat=מע""מ מזין +se-observation-frame-blank=מסגרת תצפית ריק +se-observation-frame-gammaray=מסגרת Gamma Ray תצפית +se-observation-frame-infrared=מסגרת תצפית אינפרא אדומה +se-observation-frame-microwave=מסגרת תצפית מיקרוגל +se-observation-frame-radio=מסגרת רדיו גל תצפית +se-observation-frame-uv=מסגרת UV תצפית +se-observation-frame-visible=מסגרת תצפית גלויה +se-observation-frame-xray=מסגרת תצפית Xray +se-plague-bomb=רקטת מגפה +se-plasma-canister=פלזמה מיכל +se-plasma-electrodynamics-data=פלזמה האלקטרודינמיקה נתונים +se-plasma-thermodynamics-data=פלזמה תרמודינמיקה נתונים +se-polarisation-data=קיטוב נתונים +se-pressure-containment-data=נתונים בלימה לחץ +se-quantum-phenomenon-data=נתוני תופעת קוונטית +se-quark-data=קווארק נתונים +se-radiation-data=נתוני קרינה +se-radiation-exposure-data=נתוני חשיפה לקרינה +se-radiation-exposure-resistance-data=קרינת התנגדות נתונים +se-radiation-shielding-data=קרינת מסוכך נתונים +se-radio-observation-data=תצפית רדיו גל נתונים +se-rtg-equipment=רדיונוקלידים + +se-rtg-equipment-2=רדיונוקלידים MK2 + +se-scrap=גרוטאות +se-significant-data=נתונים משמעותיים +se-significant-specimen=ביומסה משמעותית +se-space-capsule=קפסולת חלל +se-space-mirror=מראה רב - תכליתית + +se-space-platform-plating=ציפוי פלטפורמת החלל +se-space-platform-scaffold=פיגום פלטפורמת החלל +se-space-rail=רכבת שטח +se-spaceship-floor=שטיח ספינת חלל +se-specimen=ביומסה +se-subatomic-data=נתונים תת-אטומיים +se-superconductivity-data=נתונים מוליכים +se-superconductor=מוליך +se-superconductive-cable=כבל מוליך +se-tensile-strength-data=נתונים חוזק מתיחה +se-tesla-ammo=טסלה אקדח תחמושת +se-tesla-gun=אקדח טסלה +se-thruster-suit=חליפת דקר +se-thruster-suit-2=MK2 חליפת דקר +se-thruster-suit-3=MK3 חליפת דקר +se-thruster-suit-4=MK4 חליפת דקר +se-timespace-anomaly-data=זמן אנומליה נתונים +se-used-lifesupport-canister=משומשים תמיכה בחיים מיכל +se-uv-observation-data=UV תצפית נתונים +se-visible-observation-data=נתוני תצפית גלויים +se-water-ice=מי קרח +se-xray-observation-data=Xray תצפית נתונים +se-zero-point-energy-data=אפס נקודת אנרגיה נתונים +space-science-pack=חבילת המדע שטח + +[item-description] +automation-science-pack=בשימוש על ידי מעבדות מדע בסיסיות למחקר. +chemical-science-pack=בשימוש על ידי מעבדות מדע בסיסיות למחקר. +logistic-science-pack=בשימוש על ידי מעבדות מדע בסיסיות למחקר. +military-science-pack=בשימוש על ידי מעבדות מדע בסיסיות למחקר. +production-science-pack=בשימוש על ידי מעבדות מדע בסיסיות למחקר. +satellite=הלווין יש להכניס סילו טיל לווינים. +se-antimatter-canister=הצורה הצפופה ביותר של אנרגיה בכספת לנוע מיכל. +se-astronomic-science-pack=בשימוש על ידי מעבדות מדעי החלל למחקר. +se-biological-science-pack=בשימוש על ידי מעבדות מדעי החלל למחקר. +se-canister=כלי הכלה תכליתית +se-cargo-rocket-cargo-pod=מרכיב סעיף רקטות מטען. +se-cargo-rocket-fuel-tank=מרכיב סעיף רקטות מטען. +se-cargo-rocket-section=מרכיב רקטות מטען המפתח. +se-cargo-rocket-section-packed=קטעי רקטת מטענים ארוזים למעבר. חייב להיות פרק לשמש בבניית רקטות. +se-deep-space-science-pack=בשימוש על ידי מעבדות מדעי החלל למחקר. +se-energy-science-pack=בשימוש על ידי מעבדות מדעי החלל למחקר. +se-heat-shielding=פאנל מרוכבים המשמשים ליישומים בטמפרטורה גבוהה ומבנים בחלל. +se-material-science-pack=בשימוש על ידי מעבדות מדעי החלל למחקר. +se-medpack=השתמש כדי לרפא את עצמך. +se-medpack-2=השתמש כדי לרפא את עצמך. +se-medpack-3=השתמש כדי לרפא את עצמך. +se-medpack-4=השתמש כדי לרפא את עצמך. +se-meteor-defence=האם ניתן להגן על כדור הארץ כולו מן מטאורים אבל יכול לירות 1 מטאור רק זמן. חייב להיות עמוס תחמושת מטאור ביטחון טעון במלואה לפטר. דיוק 80%, לוקח זמן לנוח אחרי הירי. +se-meteor-defence-ammo=השמיד מטאוריטים. יש לטעון לתוך מיתקן ביטחוני מטאור. +se-meteor-point-defence=מגן על שטח מן המטאורים. מסוגל לירות עד 4 מטאורים מטחים. חייב להיות עמוס תחמושת מטאור ביטחון טעון במלואה לפטר. טווח 64, 50% דיוק, לוקח זמן לנוח אחרי הירי. +se-meteor-point-defence-container=השמיד מטאוריטים. יש לטעון לתוך מבנה הגנת נקודת מטאור. +se-rtg-equipment=הגנרטור התרמו רדיואיזוטופיים. גנרטור נייד שממירה את החום מן התפרקות רדיואקטיבית לחשמל. שמחזיק עשרות שנים ללא נדרש דלק נוסף. +se-rtg-equipment-2=הגנרטור התרמו רדיואיזוטופיים. גנרטור נייד משופרת שממירה את החום מן התפרקות רדיואקטיבית לחשמל. שמחזיק עשרות שנים ללא נדרש דלק נוסף. +se-plague-bomb=האם ניתן לכבות את כל החיים מכוכב. טפל בזהירות רבה. (מי ייתן טיפת UPS קשה כמו כל הדבר מת בהדרגה, לא מומלץ עבור כוכבי לכת גדולות או מרובה.) +se-space-capsule=קפסולת השליטה הנדרשת עבור הרוקטס מטענים. ניתן להשתמש בו כדי לקחת נוסע בחזרה אל פני שטח הכוכב הקרוב. +se-space-platform-plating=ציפוי מתקדם המאפשר תנועה מהירה על פני פלטפורמת החלל. +se-space-platform-scaffold=פיגום פלטפורמת החלל בסיסי המאפשר לך למקם מבנים מסוימים בחלל. +se-space-rail=Rails כי הם בטוחים לשימוש בחלל משום שהן מונעות את הרכבת עף מהפסים להרוס הכל. יכול לשמש גם על קרקע מסיבות אסתטיות. +se-spaceship-floor=ריצוף זה חייב להיות תחת כל החלקים של חללית עם קירות חלליים על הקצה החיצוני. כל פערי הרצפה ישברו בלימה, סעיפים אלה עלולים לנתק. +se-superconductive-cable=כבל מרוכבים superconductive שאינו דורש קירור אקטיבי. +se-tesla-gun=שרשרת-ברק במהירות האור. +se-thruster-suit=חליפת חלל שנדרש כדי לשרוד בחלל. \ Nhas מַרפְּקָן ו magboots. +se-thruster-suit-2=חליפת חלל שנדרש כדי לשרוד בחלל. \ Nhas מדחפים חזקים, להגדיל את המלאי ואת הרשת גדולה. +se-thruster-suit-3=חליפת חלל שנדרש כדי לשרוד בחלל. \ Nhas מדחפים חזקים, להגדיל את המלאי ואת הרשת גדולה. +se-thruster-suit-4=חליפת חלל שנדרש כדי לשרוד בחלל. \ Nhas מדחפים חזקים, להגדיל את המלאי ואת הרשת גדולה. +space-science-pack=בשימוש על ידי מעבדות מדעי החלל למחקר. +utility-science-pack=בשימוש על ידי מעבדות מדע בסיסיות למחקר. + +[recipe-name] +core-fragment=עיבוד קטע הליבה (__1__) +rocket-fuel=דלק טילים מוצק +se-astrometric-analysis-multispectral-1=אסטרומטריים ניתוח 1 +se-astrometric-analysis-multispectral-2=אסטרומטריים ניתוח 2 +se-astrometric-analysis-multispectral-3=אסטרומטריים ניתוח 3 +se-astrometrc-insight-1=תובנה אסטרונומים +se-astronomic-insight-1=תובנה אסטרונומים +se-astronomic-insight-2=רחבה אסטרונומי אינסייט +se-astronomic-insight-3=תובנה אסטרונומים המקיף +se-astronomic-insight-4=תובנה אסטרונומים מורחב +se-biological-insight-1=תובנה הביולוגית +se-biological-insight-2= הביורחבה לוגית אינסייט +se-biological-insight-3=המקיפה הביולוגית אינסייט +se-biological-insight-4=בפנים הביולוגי המורחב +se-bio-methane-to-crude-oil=מתאן עיבוד ביו לנפט גולמי +se-bio-sludge-crude-oil=בוצת ביו מביומסה ניסויית +se-bio-sludge-decontamination=טיהור +se-bio-sludge-from-fish=בוצת ביו מן הדגים +se-bio-sludge-from-wood=בוצה ביו מעץ +se-bio-sludge=ביו בוצת מביומסה +se-broken-data-scrapping=שבורי נתוני כרטיס מבטל +se-cargo-rocket-section-pack=אריזת קטעי רקטת מטענים +se-cargo-rocket-section-unpack=הוצאת קטעי רקטת מטענים +se-condenser-turbine-reclaim-water=ייצור חשמל עם טיוב מים +se-core-fragment-omni=עיבוד קטע Core +se-core-mining=כריית Core +se-empty-antimatter-canister=זרם אנטי-חומר מן מיכל +se-empty-barrel-scrapping=מבטל חבית ריקה +se-empty-barrel-reprocessing=עיבוד מחדש חבית ריקה +se-space-capsule-scrapping=מבטל קפסולת החלל +se-energy-insight-1=תובנה אנרגיה +se-energy-insight-2=רחבה אנרגיה אינסייט +se-energy-insight-3=מקיף אנרגיה אינסייט +se-energy-insight-4=תובנה אנרגיה מורחב +se-formatting-1=עיצוב נתונים +se-formatting-2=עיצוב נתונים יעיל +se-formatting-3=עיצוב נתונים מתקדם +se-material-insight-1=תובנה חומר +se-material-insight-2=רחבה חומר אינסייט +se-material-insight-3=מקיף חומר אינסייט +se-material-insight-4=תובנה חומר מורחב +se-matter-fusion-copper=עניין פיוז'ן (נחושת) +se-matter-fusion-dirty=עניין פיוז'ן (גרוטאות) +se-matter-fusion-iron=עניין פיוז'ן (ברזל) +se-matter-fusion-stone=עניין פיוז'ן (סטון) +se-matter-fusion-uranium=עניין +se-plasma-canister-empty=מיכל פלזמה ריק +se-radiating-space-coolant-normal=קירור תרמופלואיד כדי -10 ° C (מגניב) +se-radiating-space-coolant-slow=קירור איטי תרמופלואיד כדי -10 ° C (מגניב) +se-radiating-space-coolant-veryslow=מאוד איטי קירורצפיפות תרמופלואידית כדי -10 ° C (מגניב) +se-mixed-methane-gas-separation=הפרדת גז מתאן מעורב +se-rocket-fuel-from-water-copper=דלק טילים ממים +se-scrap-decontamination=טיהור גרוטאות +se-scrap-recycling=מחזור גרוטאות +se-space-coolant-cold=צפיפות תרמופלואידית כדי -100 ° C (קר) +se-space-coolant-supercooled=צפיפות תרמופלואידית -273°C +se-simulation-a=סימולצית אסטרונומים +se-simulation-ab=סימולציה פאנספרמיה +se-simulation-abm=סימולצית +se-simulation-am=סימולצית הפצת עניין +se-simulation-as=סימולציה אסטרופרטיקל +se-simulation-asb=סימולציה אסטרוביוני +se-simulation-asbm=סימולצית יוניברסל +se-simulation-asm=סימולציה אסטרופיזיקה +se-simulation-b=סימולציה ביולוגית +se-simulation-bm=סימולציה ביומכניקה +se-simulation-m=הדמיית חומר +se-simulation-s=סימולצית אנרגיה +se-simulation-sb=סימולציה ביוכימיים +se-simulation-sbm=סימולצית נאניט +se-simulation-sm=סימולצית ננו +se-space-water-decontamination=טיהור מים קוסמית +se-spaceship-rocket-engine-burn=צרוב דלק טילים נוזל +se-specimen-fish=לגידול דגים המיקרו-גרביטציה +se-specimen-wood=המיקרו-גרביטציה ווד צמיחה +se-thermodynamics-coal=לחץ בישול פחם +se-used-lifesupport-canister-cleaning=ניקוי מיכל תמיכה בחיים + +[recipe-description] +se-astronomic-insight-2=יותר מסובך, אבל יותר משאבים יעילים. +se-astronomic-insight-3=יותר מסובך, אבל יותר משאבים יעילים. +se-astronomic-insight-4=יותר מסובך, אבל יותר משאבים יעילים. +se-biological-insight-2=יותר מסובך, אבל יותר משאבים יעילים. +se-biological-insight-3=יותר מסובך, אבל יותר משאבים יעילים. +se-biological-insight-4=יותר מסובך, אבל יותר משאבים יעילים. +se-core-mining=שבר בפועל חזר תלוי על פני כדור הארץ. שעת crafting אמיתי תלויה במספר של כורי ליבה על פני כדור הארץ או ירח. +se-energy-insight-2=יותר מסובך, אבל יותר משאבים יעילים. +se-energy-insight-3=יותר מסובך, אבל יותר משאבים יעילים. +se-energy-insight-4=יותר מסובך, אבל יותר משאבים יעילים. +se-material-insight-2=יותר מסובך, אבל יותר משאבים יעילים. +se-material-insight-3=יותר מסובך, אבל יותר משאבים יעילים. +se-material-insight-4=יותר מסובך, אבל יותר משאבים יעילים. +se-radiating-space-coolant-normal=קירור וחימום חוזרים של thermofluid גורמים להשפלה. +se-radiating-space-coolant-slow=קירור וחימום חוזרים של thermofluid גורם להשפלה, תוצאות קירור איטיות לאובדן מופחת. +se-radiating-space-coolant-veryslow=קירור וחימום חוזרים של thermofluid גורם להשפלה, תוצאות קירור איטיות לאובדן מופחת. + +[technology-name] +energy-shield-equipment=מגן אנרגיה +energy-shield-mk2-equipment=MK2 מגן אנרגיה +energy-shield-mk3-equipment=MK3 מגן אנרגיה +energy-shield-mk4-equipment=MK4 מגן אנרגיה +energy-shield-mk5-equipment=Mk5 מגן אנרגיה +energy-shield-mk6-equipment=MK6 מגן אנרגיה +sand-processing=עיבוד חול +glass-processing=עיבוד זכוכית +liquid-rocket-fuel=דלק טילים נוזלי +rocket-silo=סילו טיל בלווין +rocketry=טילי Combat +se-adaptive-armour=שריון מסתגל +se-antimatter-engine=מנוע אנטי-חומר +se-antimatter-reactor=כור אנטי-חומר +se-antimatter-production=ייצור אנטי-חומר +se-astronomic-science-pack=חבילת מדע אסטרונומי +se-biological-science-pack=חבילת מחקר ביולוגית +se-condenser-turbine=טורבינת קונדנסר +se-core-miner=כריית הליבה +se-deep-space-science-pack=חבילת מדעי החלל מתקדם +se-electric-boiler=דוד חשמלי +se-energy-science-pack=חבילת מדע אנרגיה +se-fluid-burner-generator=מחולל צורב נוזל +se-fuel-refining=זיקוק דלק +se-heat-shielding=מיגון חום +se-material-science-pack=חבילת מדע חומר +se-medpack=תרופה + +se-medpack-2=תרופה 2 +se-medpack-3=תרופה 3 +se-medpack-4=תרופה 4 +se-meteor-defence=מיתקן ביטחוני מטאור +se-meteor-point-defence=הגנת נקודת מטאור +se-plague=המגפה +se-railgun=אקדח + +se-rocket-cargo-safety=בטיחות מטען רוקט +se-rocket-fuel-from-water=דלק טילים ממים +se-rocket-launch-pad=סילו טיל מטענים +se-rocket-landing-pad=מנחת רוקט +se-rocket-reusability=שימוש חוזר של רוקט +se-rocket-survivability=שרידות רוקט +se-rtg-equipment=גנרטור תרמואלקטרי רדיואקטיבינייד + +se-rtg-equipment-2=גנרטור תרמואלקטרי רדיואקטיבינייד 2 +se-space-assembling=רכבת שטח +se-space-accumulator=למצבר שטח +se-space-astrometrics-laboratory=מעבדת אסטרומטריקה +se-space-biochemical-laboratory=מעבדה ביוכימית +se-space-catalogue-astronomic=קטלוג אסטרונומים +se-space-catalogue-biological=קטלוג ביולוגי +se-space-catalogue-energy=קטלוג אנרגיה +se-space-catalogue-material=קטלוג חומר +se-space-data-card=כרטיס נתונים +se-space-decontamination-facility=מתקן טיהור +se-space-electromagnetics-laboratory=מעבדת אלקטרומגנטיקה +se-space-genetics-laboratory=המעבדה לגנטיקה +se-space-gravimetrics-laboratory=מעבדגרווימטריקה s +se-space-growth-facility=מתקן צמיחה +se-space-hypercooling=Hypercooling + +se-space-laser-laboratory=מעבדת ליזר +se-space-lifesupport-facility=מתקן תמיכה בחיים +se-space-manufactory= שטח +se-space-material-fabricator=מפברק חומר +se-space-mechanical-laboratory=מעבדה מכאנית +se-space-particle-accelerator=מאיץ חלקיקים +se-space-particle-collider=מאיץ חלקיקים +se-space-plasma-generator=גנרטור פלזמה +se-space-platform-plating=ציפוי פלטפורמת החלל +se-space-platform-scaffold=פיגום פלטפורמת החלל +se-space-radiation-laboratory=מעבדת קרינה +se-space-radiator=רדיאטור תרמי +se-space-rail=רכבת שטח +se-space-recycling-facility=מתקן מיחזור +se-space-science-lab=מעבדת המדע שטח +se-space-simulation-ab=סימולציה פאנספרמיה +se-space-simulation-am=סימולציה חומר אסטרומטריl +se-space-simulation-as=סימולציה אסטרופרטיקל +se-space-simulation-bm=סימולציה ביומכניקה +se-space-simulation-sb=סימולציה ביוכימיים +se-space-simulation-sm=סימולצית ננו +se-space-simulation-abm=סימולצית +se-space-simulation-asb=סימולציה אסטרוביוני +se-space-simulation-asm=סימולציה אסטרופיזיקה +se-space-simulation-sbm=סימולצית נאניט +se-space-simulation-asbm=סימולצית יוניברסל +se-space-solar-panel=פאנל סולארי שטח +se-space-solar-panel-adv=שטח מתקדם פאנל סולארי +se-space-spectrometry-facility=מתקן ספקטרומטריית +se-space-supercomputer=מחשב העל +se-space-telescope=טלסקופ +se-space-telescope-gammaray=טלסקופ קרני גמא +se-space-telescope-xray=טלסקופ צילום רנטגן +se-space-telescope-microwave=טלסקופ מיקרוגל +se-space-telescope-radio=רדיו טלסקופ +se-space-thermodynamics-laboratory=מעבדת תרמודינאמיקה +se-spaceship=ספינת חלל +se-spaceship-integrity=ספינת חלל המבנית ספינת חלל +se-factory-spaceship=ספינת חלל במפעל +se-superconductive-cable=כבל +se-teleportation=טלפורטציה + +se-tesla-gun=Gun טסלה +se-thruster-suit=חליפת דקר +space-science-pack=חבילת המדע שטח + +[technology-description] +energy-shield-equipment=בועת מגן כי גובה במהירות אבל משתמשת הרבה אנרגיה. +energy-shield-mk2-equipment=בועת מגן כי גובה במהירות אבל משתמשת הרבה אנרגיה. +energy-shield-mk3-equipment=בועת מגן כי גובה במהירות אבל משתמשת הרבה אנרגיה. +energy-shield-mk4-equipment=בועת מגן כי גובה במהירות אבל משתמשת הרבה אנרגיה. +energy-shield-mk5-equipment=בועת מגן כי גובה במהירות אבל משתמשת הרבה אנרגיה. +energy-shield-mk6-equipment=בועת מגן כי גובה במהירות אבל משתמשת הרבה אנרגיה. +sand-processing=ריסוק, טחינה, וסינון חומר גלם לתוך חול נקי. +glass-processing=התכה חול לתוך הכוס. +rocket-silo=מאפשר לך לשגר לוויין לחלל לפתח מדעי החלל ולגלות כוכבי לכת חדשים. +se-adaptive-armour=Armor המשתמשת באנרגיה כדי תיקון עצמי. ממלא תפקיד דומה מגיני אנרגיה עם דרישות חשמל נמוכות אבל הרבה התחדשות איטית. +se-antimatter-engine=להשמיד אנטי-חומר כדי לייצר דחף מדהים. +se-antimatter-reactor=ומשמידה אנטי-חומר עם חומר כדי לייצר חום קיצוני. +se-antimatter-production=הפיכה אנטי-חומר, בצורה הצפופה ביותר של אנרגיה אצורה. +se-astronomic-science-pack=מאפשר מחקר של טכנולוגיות הקשורות מסע בחלל ולוגיסטיקה בין-כוכבית. +se-biological-science-pack=מאפשר מחקר של טכנולוגיות הקשורות בשיפור היכולות, הנשק ביולוגי הפיזיות שלך, והעיבוד עצבי. +se-condenser-turbine=75% את היעילות של טורבינת קיטור אלא רק משתמשים 1% מהמים. +se-core-miner=מאפשר אינסופית להפקת אוצרות מן הפלנטות והירחים אבל יש תשואה שולית פוחתת אם מרובים משמשים באותו הגוף. +se-deep-space-science-pack=חובה עבור הטכנולוגיה המתקדמת ביותר +se-electric-boiler=יצירת קיטור ממים באמצעות אנרגיה חשמלית. +se-energy-science-pack=מאפשר מחקר של טכנולוגיות הקשורות כוחות היסוד, ועל תגליות תת-אטומיים. +se-fluid-burner-generator=דורש דלק נוזלי עם ערך אנרגיה. ברנס נוזל לייצור חשמל. פשוט וקומפקטי אבל חסר את יעילות האנרגיה של מערכות מבוססות קיטור גדול. +se-fuel-refining=מזקקת דלקים מתקדמים יותר. +se-heat-shielding=פאנל מרוכבים המשמשים ליישומים בטמפרטורה גבוהה ומבנים בחלל. +se-material-science-pack=מאפשר מחקר של טכנולוגיות הקשורות חומרים מתקדמים עבור דרישות הנדסיות מתקדמות יותר. +se-medpack=השתמש רפואה כדי לרפא את עצמך. +se-medpack-2=השתמש רפואה כדי לרפא את עצמך. +se-medpack-3=השתמש רפואה כדי לרפא את עצמך. +se-medpack-4=השתמש רפואה כדי לרפא את עצמך. +se-meteor-defence=לירות מטאורים מהשמיים לפני שהם הורסים את הדברים שלך. מיתקן ביטחוני מטאור יכול להגן על כדור הארץ כולו, אבל יכול רק לירות מטאור אחד בכל פעם. +se-meteor-point-defence=לירות מטאורים מהשמיים לפני שהם הורסים את הדברים שלך. הגנת נקודת מטאור יכולה להגן על שטח קטן ממרחק של עד 4 מטאורים בשעה. +se-railgun=אלקטרומגנטית מואצת חץ הנע למהירות כזו שהם משאירים אחריהם שובל פלזמה לפני שהם vaporise. נזק גבוה, שיעור איטי של אש. +se-plague=המכה הגדולה משמידה את כל החיים מכוכבים כולו. טפל בזהירות רבה. +se-rocket-cargo-safety=מפחית את הסיכוי כי תרמילי מטען לקבל נפגעו במעבר ידי 10% (כפלי). +se-rocket-fuel-from-water=יוצר דלק טילים-חמצן מימן באמצעות אלקטרוליזה מים. +se-rocket-landing-pad=מאפשר לך להעביר תרמילי מטען רקטות אל מנחת בשם. עם מחקר נוסף זה גם יכול לשחזר חלקי רקטות. +se-rocket-launch-pad=מאפשר לך להפעיל מטען לחלל או כוכבי לכת אחרים. +se-rocket-reusability=מגדיל את אחוז החלקים שניתן התאושש נחיתה במנחת מוצלחת על ידי 5% (כפלי). +se-rocket-survivability=מפחית את הסיכוי כי רקטות ולהינזק הועברו או כישלון ניווט המוביל חסר המנחת ידי 10% (כפלי). +se-rtg-equipment=הגנרטור התרמו רדיואיזוטופיים. גנרטור נייד שממירה את החום מן התפרקות רדיואקטיבית לחשמל. שמחזיק עשרות שנים ללא נדרש דלק נוסף. +se-rtg-equipment-2=הגנרטור התרמו רדיואיזוטופיים. גנרטור נייד משופרת שממירה את החום מן התפרקות רדיואקטיבית לחשמל. שמחזיק עשרות שנים ללא נדרש דלק נוסף. +se-space-assembling=מכונית להרכבה שונה שיכול לעבוד בחלל. +se-space-astrometrics-laboratory=משלב, משווה, מכמת מקורות שונים של מידע אסטרונומי. +se-space-biochemical-laboratory=מעבדת כימית מתקדמת המתמחה הביו-כימיה. ניתן גם לבצע כימיים בסיסיים יותר ועיבוד נפט. +se-space-catalogue-astronomic=נתוני אסטרונומי מובנים מוכנים לניתוח הדמיית מחשב. חובה למחקר אסטרונומים נוספת. +se-space-catalogue-biological=נתונים ביולוגיים מובנים מוכנים לניתוח הדמיית מחשב. חובה למחקר ביולוגי נוסף. +se-space-catalogue-energy=נתוני אנרגיה מובנים מוכנים לניתוח הדמיית מחשב. חובה למחקר אנרגיה נוספת. +se-space-catalogue-material=נתונים מהותיים מובנים מוכנים לניתוח הדמיית מחשב. חובה למחקר חומר נוסף. +se-space-data-card=התקן אחסון נתונים רב תכליתי. חובה למחקר מונחה נתונים מתקדמים יותר. +se-space-decontamination-facility=מנקה חומרים לשימוש בסביבות סטרילי, ומכין נוזלים לשימוש בתנאי לחץ נמוך. +se-space-electromagnetics-laboratory=ציוד עבור שדה מגנטי חזק ויישומי מתח גבוהים מאוד. +se-space-genetics-laboratory=מעבדת מוקדש רצף גנטי, הנדסה גנטית, והדפסה גנטית של תרבויות. +se-space-gravimetrics-laboratory=ניתוח המדמה הפרעות הכבידה. +se-space-growth-facility=גדל דגימות ביולוגיות תחת מגוון של תנאים מבוקרים שאינם אפשריים במקום אחר, מיקרו-כבידה כזה, +se-space-hypercooling=מבצע החלפת חום על thermofluid, מה שהופך חם אחד והשני קר. +se-space-laser-laboratory=ניסויים עם לייזרים. הגנה על עיניים חייבת להיות משוחקת. +se-space-lifesupport-facility=לקיום חיים בסביבות עוינות יותר. +se-space-manufactory=טכנולוגיית מפתח לייצור המוני בחלל. +se-space-material-fabricator=Synthesises חומרים חדשים. הכלאה בין מאיץ חלקיקים ומדפסת 3D. +se-space-mechanical-laboratory=מספק מגוון של תהליכים מכניים: ריסוק, קריעה, מריחה, רטט, וכו ' +se-space-particle-accelerator=מאיץ חלקיקים קרובים למהירות האור. +se-space-particle-collider=מתנגש חלקיקים במהירות גבוהה ומנתח את התוצאות. +se-space-plasma-generator=יוצר מגוון של פלזמות. +se-space-platform-plating=ציפוי פלטפורמה איתן בחלל. חלקה ומהירה עבור חלל . +se-space-platform-scaffold=פיגומי פלטפורמת החלל בסיסיים. משהו לבנות על אבל לא נהדר עבור חלל . +se-space-radiation-laboratory=מקום בטוח יחסית לשחק עם חומר רדיואקטיבי. יכול לשמש לעיבוד אורניום. +se-space-radiator=מקרין משם עודף חום מן thermofluid השחון. +se-space-rail=Rails כי הם בטוחים לשימוש בחלל משום שהן מונעות את הרכבת עף מהפסים להרוס הכל. יכול לשמש גם על קרקע מסיבות אסתטיות. +se-space-recycling-facility=השלכת פריטים וגרוטאות עיבוד מחדש לתוך חומרי גלם. +se-space-science-lab=מאפשר עיבוד של חבילות מדעי החלל ומדע החלל מתקדם יותר. +se-space-simulation-ab=עוד סימולציה יעילה על ידי שילוב דיסציפלינות רבות. +se-space-simulation-am=עוד סימולציה יעילה על ידי שילוב דיסציפלינות רבות. +se-space-simulation-as=עוד סימולציה יעילה על ידי שילוב דיסציפלינות רבות. +se-space-simulation-bm=עוד סימולציה יעילה על ידי שילוב דיסציפלינות רבות. +se-space-simulation-sb=עוד סימולציה יעילה על ידי שילוב דיסציפלינות רבות. +se-space-simulation-sm=עוד סימולציה יעילה על ידי שילוב דיסציפלינות רבות. +se-space-simulation-abm=עוד סימולציה יעילה על ידי שילוב דיסציפלינות רבות. +se-space-simulation-asb=עוד סימולציה יעילה על ידי שילוב דיסציפלינות רבות. +se-space-simulation-asm=עוד סימולציה יעילה על ידי שילוב דיסציפלינות רבות. +se-space-simulation-sbm=עוד סימולציה יעילה על ידי שילוב דיסציפלינות רבות. +se-space-simulation-asbm=עוד סימולציה יעילה על ידי שילוב דיסציפלינות רבות. +se-space-solar-panel=פאנל סולארי יעילות גבוהה עבור החלל. +se-space-solar-panel-adv=פאנל סולארי גבוהה ויעילות מתקדמים בחלל. +se-space-spectrometry-facility=תרגום לעברית עבורy, גז כרומטוגרפיה, ספקטרומטריית מסה, ואת תרגום לעברית עבורy האחר. דברים באש לעבר הקיר, להפוך אותו לכופף, ונראה לאן זה יגיע. +se-space-supercomputer=מאפשר מניפולציה של נתונים מתקדמים יותר ועיבוד, וכן סימולציה. +se-space-telescope=טלסקופ מתוחכם רגיש לאורכי גל שונים ברחבי הספקטרום הנראה. +se-space-telescope-gammaray=קרני גמא לא לשבור. טלסקופ רב עוצמה זו המשתמשת מראות גלאי מיוחד במקום. +se-space-telescope-xray=צילומי רנטגן נחסמים על ידי רוב אטמוספרות. טלסקופ רב עוצמה זה מיועד החלל שבו האווירה היא לא בעיה. +se-space-telescope-microwave=טלסקופ ענק שמזהה מיקרוגלי הרקע הקוסמי. +se-space-telescope-radio=טלסקופ ענק שמזהה גלי רדיו חלשים מאוד ממקורות מרחק. +se-space-thermodynamics-laboratory=מתחייב תהליכים כרוכים טמפרטורות קיצוניות. ניתן גם לבצע תהליכים תרמיים בסיסיים, כגון להתכה. +se-spaceship=כולים לכם לבנות חתיכה אחרי חתיכה עם רצפה וקירות, אז להשתמש במסוף כדי להטיס אותו אל כוכב אחר, או מעבר. +se-spaceship-integrity=כל רמה מגדילה את מגבלת לחץ שלמות מבנית החללית ידי 100. +se-factory-spaceship=כל רמה מגדילה את מגבלת לחץ שלמות מבנית החללית ידי 500. +se-superconductive-cable=כבל מרוכבים superconductive שאינו דורש קירור אקטיבי. +se-teleportation=פותח בטכנולוגיית טלפורטציה אחרת. מתברר מרחב השתאה במידה זו בשלום הוא באמת קשה. +se-tesla-gun=ברק שרשרת אש מהירה. יכול להכות עד 30 אויבים לכל בורג. עושה קפיצות ארוכות בין מטרות, או קפיצות קצרות לאורך הקרקע אם אין מטרות. +se-thruster-suit=חליפת חלל עם מנועי תמרון ולא magboots. אל תלכו לחלל בלעדיו. +se-thruster-suit-2=חליפת שטח משופרת עם מדחפים חזקים, להגדיל את המלאי ואת הרשת גדולה. +se-thruster-suit-3=חליפת שטח משופרת עם מדחפים חזקים, להגדיל את המלאי ואת הרשת גדולה. +se-thruster-suit-4=חליפת שטח משופרת עם מדחפים חזקים, להגדיל את המלאי ואת הרשת גדולה. +space-science-pack=מאפשר פיתוח ישיר יותר של מדעי החלל וטכנולוגיות נהנות הפיתוחים האלה. + +[modifier-description] +tesla-shooting-speed-bonus=מהירות ירי טסלה +tesla-damage-bonus=מהירות ירי טסלה + +[virtual-signal-name] +se-star=כוכב +se-planet=כוכב לכת +se-planet-orbit=במסלול כוכב לכת + +se-moon=ירח +se-moon-orbit=במסלול הירח +se-asteroid-belt=חגורת אסטרואידים +se-asteroid-field=שדה אסטרואיד +se-anomaly=אנומליה + +se-meteor=מטאור +se-spaceship=ספינת חלל +se-remote-view=צפו מרחוק +se-death=מוות +se-character-corpse=גופה + + +[controls] +se-remote-view=צפו ניווט לוויני +se-respawn=respawn + +[shortcut] +se-remote-view=צפו ניווט לוויני +se-respawn=respawn + +[shortcut-name] +se-remote-view=צפה ניווט לווינים [N] +se-respawn=respawn + +[tile-name] +se-space-platform-plating=ציפוי פלטפורמת החלל +se-space-platform-scaffold=פיגום פלטפורמת החלל +se-space-platform-underlay=שטח diff --git a/space-exploration_0.5.80/space-exploration/locale/it/strings.cfg b/space-exploration_0.5.80/space-exploration/locale/it/strings.cfg new file mode 100644 index 0000000..a8461f9 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/locale/it/strings.cfg @@ -0,0 +1,967 @@ +spaceship-integrity100=+100 Integrità Strutturale Navicella +spaceship-integrity300=+300 Integrità Strutturale Navicella +spaceship-integrity500=+500 Integrità Strutturale Navicella +core-mining-productivity-5=+5% Produttività estrazione nucleo + +[mod-name] +space-exploration=Esplorazione Spaziale (Space Exploration) + +[mod-description] +space-exploration=Costruisci un razzo cargo per lanciare oggetti nello spazio. Sali sul razzo e parti tu stesso e inizia la tua passeggiata nello spazio. Costruisci una piattaforma orbitale per sviluppare le scienze spaziali basate sui dati. Costruisci pezzo per pezzo la tua navicella spaziale, vola da un pianeta ad un altro, verso lune, fascie di asteroidi e altro ancora! Altamente raccomandato giocarci con AAI Industry mod. Space Exploration Postprocess mod è richiesta (non può essere una dipendenza, ma è una lunga spiegazione). Non è raccomandato giocare con mod non dipendenti mentre si è nella fase sperimentale + +[space-exploration] +rename-something=Rinomina __1__ +trigger-none=Nessuno (Manuale) +trigger-fuel-full=Lancia a carburante pieno +trigger-cargo-full=Lancia a carico pieno +trigger-fuel-full-signal=Lancia con segnale verde e carburante pieno +trigger-cargo-full-signal=Lancia con segnale verde e carico pieno +trigger-cargo-full-or-signal=Lancia con segnale verge o quando è pieno il carico +destination-type-zone=Posizione approssimativa +destination-type-landing-pad=Pedana di atterraggio cargo +button-launch=Lancio +button-launch-disabled=Lancio (disabilitato) +destination-crash-warning=Attenzione: Scegli una pedana di atterraggio cargo per ridurre la possibilità di uno schianto +recipe-to=__1__ a __2__ +recipe-from=__1__ da __2__ +remote-view=Collegamento al satellite di navigazione [N] +remote-view-instruction=Lancia altri satelliti per scoprire più stelle, pianeti, lune e altre zone +exit-remote-view=Esci dal collegamento al satellite di navigazione [N] +remote-view-requires-satellite=Devi lanciare un satellite per poter usare il collegamento. +satellite-launched=Satellite dispiegato e alla ricerca di oggetti astronomici. Usa [img=virtual-signal/se-remote-view] Collegamento al satellite per osservare (premi [color=green][N][/color] o usa la scorciatoia sulla barra rapida). +satellite-discovered-platform=[color=cyan]Il satelite ha scoperto alcune piattaforme orbitali.[/color] +source-discovered-zone=[color=cyan]__1__ scoperto un nuovo __2__: [/color][img=__3__] [color=white]__4__[/color] +discovered-zone=[color=cyan]Scoperto un nuovo __1__: [img=__2__] [/color][color=white]__3__[/color] +space-capsule=Capsula spaziale +player-died=__1__ è morto +launch-suit-warning=Per evitare il soffocamento, considera di indossare la tuta jet. +suffocating-warning=Stai soffocando. Entra in una capsula spaziale o indossa una tuta jet. +rocket_survivability_fail=Un razzo cargo ha subito danni durante il volo ed è fuori rotta. Si consigla di fare nuove ricerche sulla sopravvivenza del razzo e della sua sicurezza. +respawn-if-stranded=Se sei bloccato, puoi usare il collegamento per il respawn [__CONTROL__se-respawn__]. +filter-list=Cerca +clear-filter=Cancella ricerca +zone-tooltip=__1__ __2__ __3__ __4__ __5__ __6__ __7__ +zone-tooltip-type=\nTipo: __1__ +zone-tooltip-resources=\nRisorse primarie: __1__ +zone-tooltip-lifesigns=\nSegni di vita: __1__ +zone-tooltip-daynight=\nCiclo giorno/notte: __1__ minuti +zone-tooltip-bot-attrition=\nInterferenza dei robot: __1__ +construction-denied=Non può essere piazzato qui. +construction-denied-vehicle-in-space=Non si possono piazzare veicoli terrestri nello spazio. +construction-denied-se-surface=Posizione non valida, deve essere piazzato su una superficie della Space Exploration mod +currently-viewing=Attualmente stai guardando: __1__ +no-character-to-board=Non puoi imbarcarti sulla nave, devi prima essere attaccato al tuo personaggio per svolgere questa azione +starmap=Mappa stellare (WIP) +back=Indietro +spaceship=Navicella spaziale +plant=Pianeta +moon=Luna +star=Stella +orbit=Orbita +something_orbit=__1__ orbita +asteroid-belt=Fascia di asteroidi +asteroid-field=Campo di asteroidi +anomaly=Anomalia +spaceship-cannot-set-destination-to-self=Impossibile selezionare la destinazione su se stessi +spaceship-launch-energy=Energia per il lancio: __1__ +spaceship-launch-energy-invalid=Energia per il lancio: Richiede un controllo di integrita' valido +spaceship-speed=Velocita': __1__ +spaceship-structural-stress-hull=Stress strutturale (scafo): __1__ +spaceship-structural-stress-hull-invalid=Stress strutturale (Scafo): NA (contenimento richiesto) +spaceship-structural-stress-container=Stress strutturale (Contenitori): __1__ +spaceship-structural-stress-container-invalid=Stress strutturale (Contenitori): NA (contenimento richiesto) +spaceship-travel-time-unknown=Tempo di viaggio: Sconosciuto. Testare la velocità massima per una stima +spaceship-travel-time-max=Tempo di viaggio: __1__s alla velocità massima +spaceship-travel-time-current=Tempo di viaggio: __1__s alla velocità attuale +spaceship-closest-location=Località più vicina: __1__ +spaceship-location-spatial-distortion=Distorsione spaziale: __1__ +spaceship-location-stellar-x=Quadrante X: __1__ +spaceship-location-stellar-y=Quadrante Y: __1__ +spaceship-location-star-gravity-well=Gravità della stella: __1__ +spaceship-location-planet-gravity-well=Gravità del pianeta: __1__ +spaceship-travel-status=Stato del viaggio: __1__ +spaceship-integrity-status-valid=Stato dell'integrità: Valido: __1__ +spaceship-integrity-status-invalid=Stato dell'integrità: Invalido: __1__ +spaceship-button-launch=Lancio +spaceship-button-launch-tooltip=Pronto al lancio +spaceship-button-launch-disabled=Lancio (disabilitato) +spaceship-button-launch-disabled-fuel-tooltip=Richiede carburante nei serbatoi dei booster +spaceship-button-launch-disabled-integrity-tooltip=Richiede controllo valido sull'integrità +spaceship-button-anchor=Ancora +spaceship-button-confirm-anchor=Conferma ancoraggio +spaceship-button-anchor-to=Ancorato a __1__ +spaceship-button-anchor-on=Ancorato su __1__ +spaceship-button-stop=Ferma +spaceship-button-start=Ingaggia +spaceship-button-board=Tavola __1__ +spaceship-button-scouting-back=Indietro +spaceship-button-scouting-back-tooltip=Cancella ricerca punto di ancoraggio +spaceship-name-the=Il __1__ +spaceship-button-start-integrity-check=Inizia controllo integrità +spaceship-heading-destination=Destinazione +list-destinations-alphabetically=Lista destinazioni in ordine alfabetico +spaceship-travel-message-new-course-plotted=Nuovo percorso tracciato +spaceship-travel-message-exiting-planet-gravity=In uscita dalla gravità planetaria +spaceship-travel-message-navigating-planet-gravity=Navigazione nella gravità planetaria +spaceship-travel-message-exiting-star-gravity=In uscita dalla gravità stellare +spaceship-travel-message-navigating-star-gravity=Navigazione nella gravità della stella +spaceship-travel-message-spatial-distortions=Navigazione nella distorsione spaziale +spaceship-travel-message-navigating-interstellar=Navigazione nello spazio cosmico +spaceship-travel-message-at-destination=A destinazione. +spaceship-check-message-passed=Passata: Integrità nave valida +spaceship-check-message-failed-containment=Fallito: Perdita di contenimento attorno alla console. Assicurati che tutte le pareti dell'astronave siano sul pavimento dell'astronave senza spazi vuoti. +spaceship-check-message-failed-console-floor=La console deve essere piazzata sul pavimento della navicella +spaceship-check-message-failed-empty=Nessun riquadro trovato collegato a una console correttamente chiusa. +spaceship-check-message-failed-unknown-bounds=Errore: Dimensioni della navicella spaziale sconosciute +spaceship-check-message-failed-stress=Fallito: Lo stress sull'integrità strutturale è eccessivo rispetto alla propria tecnologia +spaceship-check-message-checking-console-floor=Controllare la connessione al pavimento della console +spaceship-check-message-checking-containment=Controllo contenimento +spaceship-check-message-checking-connectivity=Controllo connessione console +spaceship-check-message-no-console=Nessuna console +spaceship-check-message-did-not-complete=Il controllo non è stato completato +spaceship-check-message-unstable=Instabile: Alcune sezioni verranno disconnesse durante le manovre +spaceship-check-message-valid-but-disconnecting=Valido ma instabile: Alcune sezione verranno disconnesse +spaceship-warning-sections-disconnecting=Alcune sezioni si stanno disconnettendo. Fermare le riparazioni + +[damage-type-name] +suffocation=Soffocamento +meteor=Meteora + +[entity-name] +destroyed-cargo-pod=Pedana di atterraggio cargo distrutta +meteorite=Meteorite +rocket-silo=Satellite silo per razzo +rocket-fragment=Frammento di razzo +se-antimatter-reactor=Reattore ad antimateria +se-cargo-rocket-cargo-pod=Pedana di atterraggio cargo distrutta +se-condenser-turbine=Turbina a condensazione +se-condenser-turbine-tank=Turbina a condensazione +se-condenser-turbine-generator=Turbina a condensazione +se-core-fragment-processor=Processo di frammentazione del nucleo +se-core-miner=Escavatore del nucleo +se-core-miner-drill=Escavatore del nucleo +se-electric-boiler=Caldaia elettrica +se-fluid-burner-generator=Generatore isotermico di fuido +se-fuel-refinery=Raffineria di carburante +se-meteor-defence-container=Installazione difensiva contro meteoriti +se-meteor-defence-charger=Installazione difensiva contro meteoriti +se-meteor-point-defence-container=Punto di difesa contro meteoriti +se-meteor-point-defence-charger=Punto di difesa contro meteoriti +se-methane-ice=Metano ghiacciato +se-rocket-launch-pad=Silo per razzi cargo +se-rocket-launch-pad-tank=Silo per razzi cargo +se-rocket-launch-pad-silo=Silo per razzi cargo +se-rocket-launch-pad-combinator=Silo per razzi cargo +se-rocket-launch-pad-_-seat=Silo per razzi cargo +se-rocket-launch-pad-settings=Silo per razzi cargo +se-rocket-landing-pad=Pedana di atterraggio cargo +se-space-accumulator=Accumulatore spaziale +se-space-astrometrics-laboratory=Laboratorio di astronomia +se-space-biochemical-laboratory=Laboratorio biochimico +se-space-assembling-machine=Macchina assemblatrice spaziale +se-space-capsule-_-vehicle=Capsula spaziale +se-space-curved-rail=rotaia spaziale +se-space-decontamination-facility=Impianto di decontaminazione +se-space-electromagnetics-laboratory=Laboratorio elettromagnetico +se-space-genetics-laboratory=Laboratorio di genetica +se-space-growth-facility=Strumento di crescita facilitata +se-space-gravimetrics-laboratory=Laboratorio gravimetrico +se-space-hypercooler=Hyper-raffreddatore +se-space-laser-laboratory=Laboratorio laser +se-space-lifesupport-facility=Impianto di supporto vitale +se-space-manufactory=Fabbrica spaziale +se-space-material-fabricator=Fabbricatore di materiali +se-space-mechanical-laboratory=Laboratorio meccanico +se-space-particle-accelerator=Acceleratore di particelle +se-space-particle-collider=Struttura collisione particelle +se-space-plasma-generator=Generatore di plasma +se-space-radiation-laboratory=Laboratorio di radiazioni +se-space-radiator=Radiatore termico +se-space-recycling-facility=Impianto di riciclaggio +se-space-pipe=Tubo spaziale +se-space-pipe-to-ground=Tubo spaziale sotterraneo +se-space-science-lab=Laboratorio scientifico spaziale +se-space-solar-panel=Pannello solare spaziale +se-space-solar-panel-2=Pannello solare spaziale avanzato +se-space-spectrometry-facility=Spettrometro +se-space-straight-rail=rotaia spaziale +se-space-supercomputer-1=Supercomputer +se-space-supercomputer-2=Computer quantico +se-space-supercomputer-3=Supercomputer neurale +se-space-telescope-radio=Radiotelescopio +se-space-telescope-microwave=Telescopio a microonde +se-space-telescope=Telescopio +se-space-telescope-xray=Telescopio raggi-X +se-space-telescope-gammaray=Telescopio raggi gamma +se-space-thermodynamics-laboratory=Laboratorio di termodinamica +se-space-splitter=Ripartitore spaziale +se-space-transport-belt=Rullo spaziale +se-space-underground-belt=Rullo sotteraneo spaziale +se-spaceship-antimatter-engine=Motore ad antimateria per navicelle spaziali +se-spaceship-antimatter-booster-tank=Serbatoio booster con antimateria per navicella spaziale +se-spaceship-console=Console navicella spaziale +se-spaceship-gate=Porta navicella spaziale +se-spaceship-obstacle=Detriti spaziali +se-spaceship-rocket-engine=Motore razzo per navicelle spaziali +se-spaceship-rocket-booster-tank=Serbatoio dei booster per razzi per navicelle spaziali +se-spaceship-wall=Muro navicella spaziale +se-water-ice=Acqua ghiacciata +small-asteroid=Piccolo asteroide + +[entity-description] +rocket-silo=Lancia un salellite nello spazio per iniziare a scansionarlo, per scoprire nuovi pianeti e ottenere una piccola quantità di pacchi scientifici +se-antimatter-reactor=Annienta l'antimateria con la materia per generare temperature estreme +se-condenser-turbine=75% di efficenza rispetto alle turbine a vapore, ma il 99% del vapore viene condensato in acqua +se-core-fragment-processor=Estrae risorse dal cuore del pianeta +se-core-miner=Abilita all'estrazione illimitata di risorse da pianeti e lune, ma ha rendimenti minori se si utilizzano più trivelle sullo stesso corpo celeste. Consuma 50MW +se-core-miner-drill=Abilita all'estrazione illimitata di risorse da pianeti e lune, ma ha rendimenti minori se si utilizzano più trivelle sullo stesso corpo celeste. Consuma 50MW +se-electric-boiler=Crea vapore dall'acqua usando l'energia elettrica +se-fluid-burner-generator=Richiede carburante liquido con un valore energetico (come ilcarburante liquido per razzi) per generare eletticità. Semplice e compatto, ma privo di efficenza rispetto a sistemi più grandi basati sul vapore. Progettato per lo spazio +se-meteor-defence-container=Può difendere un intero pianeta dai meteoriti, ma può sparare solo ad 1. Deve essere caricato con le munizioni per i meteoriti e deve essere caricato completamente per poter sparare. Ha una precisione dell'80%. Deve essere ricaricato dopo aver sparato. Consuma 20MW mentre si ricarica +se-meteor-defence-charger=Può difendere un intero pianeta dai meteoriti, ma può sparare solo ad 1. Deve essere caricato con le munizioni per i meteoriti e deve essere caricato completamente per poter sparare. Ha una precisione dell'80%. Deve essere ricaricato dopo aver sparato. Consuma 20MW mentre si ricarica +se-meteor-point-defence-container=Difende un'area dai meteoriti. Può sparare fino a 4 meteoriti per volta. Deve essere caricato con le munizioni per difese a puntamento e deve essere ricaricato completamente prima di sparare. Ha un raggio di 64, 50% di precisione e ha bisogno di tempo per ricaricarsi dopo aver sparato +se-meteor-point-defence-charger=Difende un'area dai meteoriti. Può sparare fino a 4 meteoriti per volta. Deve essere caricato con le munizioni per difese a puntamento e deve essere ricaricato completamente prima di sparare. Ha un raggio di 64, 50% di precisione e ha bisogno di tempo per ricaricarsi dopo aver sparato +se-rocket-launch-pad=Lancia l'inventario nello spazio. Può ospitare passeggeri, entrando usando __CONTROL__toggle-driving__ Vicino alla porta frontale. +se-rocket-landing-pad=Un sito per la consegna del carico e per le capsule spaziali +se-space-assembling-machine=Un assemblatore modificato che può lavorare nello spazio. +se-space-astrometrics-laboratory=Combina, compara e quantifica diverse fonti di informazioni astronomiche. +se-space-biochemical-laboratory=Un avanzato laboratorio chimico specializzato in chimica organica. Inoltre può essere usato anche per le operazioni chimiche di base e per la lavorazione dell'olio. +se-space-capsule-_-vehicle=Può essere usato per trasportare passeggeri indietro sulla superficie del pianeta più vicino. Entra nella capsula usando __CONTROL__toggle-driving__. +se-space-decontamination-facility=Pulisce le sostanze da usare in ambienti sterili e prepara i liquidi da usare in condizioni di passa pressione +se-space-electromagnetics-laboratory=Equipaggiamento per intensificare il campo magnetico e per applicazioni con voltaggio estremo +se-space-genetics-laboratory=Un laboratorio dedicato alla genetica: sequenze genetiche, manipolazione genetica e stampa genetica di culture +se-space-gravimetrics-laboratory=Analizza e simula disturbi gravitazionali +se-space-growth-facility=Permette la crescita di organismi viventi in un'area con condizioni controllate, impossibile in altri posti, come in ambienti di microgravità +se-space-hypercooler=Esegue uno scambio di temperatura sui termofluidi, rendendone uno più caldo e l'altro più freddo +se-space-laser-laboratory=Sperimentazione con laser. Proteggersi gli occhi +se-space-lifesupport-facility=Sostiene la vita anche negli ambienti più ostili. +se-space-manufactory=Un gigantesco assemblatore meccanico, che può costruire anche gli oggetti più complicati. Funziona solo nello spazio (o sulla navicella spaziale) +se-space-material-fabricator=Sintetizza nuovi materiali. Un insieme tra una struttura collisione particelle e una stampante 3D +se-space-mechanical-laboratory=Fornisce una serie di processi meccanici: Schiacciamento, lacerazione, tagliatura, vibrazioni e altro. +se-space-particle-accelerator=Accelera le particelle ad una velocità prossima alla velocità della luce +se-space-particle-collider=Collide particelle ad alta velocità e analizza i risultati +se-space-pipe=Ci puoi camminare supra +se-space-pipe-to-ground=Costoso e con raggio limitato, da utilizzare solo quando richiesto. Ci puoi camminare sopra +se-space-plasma-generator=Genera diverse varietà di plasma +se-space-radiation-laboratory=Un posto relativamente sicuro per giocare con i materiali radioattivi. Può essere usato anche per processare l'uranio +se-space-radiator=Irradia il calore in eccesso dal termofluido riscaldato +se-space-recycling-facility=Ricicla rottami e altri prodotti in risorse +se-space-solar-panel=Un pannello solare molto efficente per lo spazio +se-space-solar-panel-2=Un pannello solare avanzato molto efficente per lo spazio +se-space-spectrometry-facility=Spettrometria, gas cromatografia, spettrometria di massa e altra spettrografia. Spara roba contro il muro, falla piegare e vedo dove ha colpito. +se-space-supercomputer-1=Manipola, elabora e simula i dati +se-space-supercomputer-2=Computer quantico. Ha una manipolazione, elaborazione e simulazione migliore +se-space-supercomputer-3=Una rete neurale adattiva su un computer quantico. Migliora la manipolazione, elaborazione e simulazione migliore +se-space-straight-rail=Progettata per lo spazio, ma può essere usata anche sulla terra +se-space-science-lab=Può utilizzare i pacchi scientifici più avanzati. Deve essere piazzato nello spazio +se-space-telescope=Un sofisticato telescopio sensibile a più lunghezze d'onda attorno allo spettro visibile +se-space-telescope-gammaray=I raggi gamma non vendono riflessi. Questo potente telescopio usa specchi e degli speciali rilevatori +se-space-telescope-xray=I raggi X sono bloccati per la maggior parte nell'atmosfera. Questo potente telescopio è studiato per lo spazio, dove l'atmosfera non è un problema +se-space-telescope-microwave=Un grosso telescopio che rileva lunghezze d'onda e le morcoonde provenienti dallo spazio prodondo +se-space-telescope-radio=Un grosso telescopio che rileva anche le più deboli onde radio distanti dalle sorgenti +se-space-thermodynamics-laboratory=Intraprende processi che utilizzano temperature estreme. Inoltre può eseguire processi termici di base, come la fusione +se-space-transport-belt=Impedisce agli oggetti di volare via +se-spaceship-antimatter-engine=Annienta un flusso di antimateria. Può essere usata come paratia per il contenimento della navicella spaziale +se-spaceship-antimatter-booster-tank=Contiene antimateria. Richiesto per il lancio dell'astronave +se-spaceship-console=Usato per muovere la navicella spaziale attraverso pianeti, lune, orbite e campi di asteroidi. Deve essere piazzato sul pavimento della navicella, contenuto all'interno di muri/porte, senza spazi o buchi. Il controllo di integrità trova i problemi +se-spaceship-gate=In campo di forza blocca la decompressione quando le porte si aprono. Conta come paratia per il contenimento della navicella +se-spaceship-rocket-engine=Consuma combustibile liquido per razzi. Conta come paratia per il contenimento dell'astronave +se-spaceship-rocket-booster-tank=Contiene carburante per razzi liquido. Richiesto per il lancio della navicella spaziale +se-spaceship-wall=Deve essere piazzato sul pavimento della navicella e viene considerato come parte di essa. Viene contata come paratia per il contenimento della navicella e per il contenimento nei buchi + +[equipment-name] +energy-shield-equipment=Scudo energetico +energy-shield-mk2-equipment=Scudo energetico MK2 +energy-shield-mk3-equipment=Scudo energetico MK3 +energy-shield-mk4-equipment=Scudo energetico MK4 +energy-shield-mk5-equipment=Scudo energetico MK5 +energy-shield-mk6-equipment=Scudo energetico MK6 +se-adaptive-armour-equipment-1=Armatura adattiva MK1 +se-adaptive-armour-equipment-2=Armatura adattiva MK2 +se-adaptive-armour-equipment-3=Armatura adattiva MK3 +se-adaptive-armour-equipment-4=Armatura adattiva MK4 +se-adaptive-armour-equipment-5=Armatura adattiva MK5 +se-rtg-equipment=RTG portatile +se-rtg-equipment-2=RTG MK2 portatile + +[equipment-description] +energy-shield-equipment=Una bolla protettiva che si ricarica velocemente, ma usa una grande quantità di energia +energy-shield-mk2-equipment=Una bolla protettiva che si ricarica velocemente, ma usa una grande quantità di energia +energy-shield-mk3-equipment=Una bolla protettiva che si ricarica velocemente, ma usa una grande quantità di energia +energy-shield-mk4-equipment=Una bolla protettiva che si ricarica velocemente, ma usa una grande quantità di energia +energy-shield-mk5-equipment=Una bolla protettiva che si ricarica velocemente, ma usa una grande quantità di energia +energy-shield-mk6-equipment=Una bolla protettiva che si ricarica velocemente, ma usa una grande quantità di energia +se-adaptive-armour-equipment-1=Armatura che usa energia per ripararsi da sola. Aumenta lentamente il valore di protezione col tempo +se-adaptive-armour-equipment-2=Armatura che usa energia per ripararsi da sola. Aumenta lentamente il valore di protezione col tempo +se-adaptive-armour-equipment-3=Armatura che usa energia per ripararsi da sola. Aumenta lentamente il valore di protezione col tempo +se-adaptive-armour-equipment-4=Armatura che usa energia per ripararsi da sola. Aumenta lentamente il valore di protezione col tempo +se-adaptive-armour-equipment-5=Armatura che usa energia per ripararsi da sola. Aumenta lentamente il valore di protezione col tempo +se-rtg-equipment=Generatore elettrico a base di radioisotopi. Un generatore portatile che converte il calore del decadimento radiattivo in energia. Dura per decenni, quindi non c'è bisogno di aggiungere carburante +se-rtg-equipment-2=Generatore elettrico a base di radioisotopi. Un generatore portatile migliorato che converte il calore del decadimento radiattivo in energia. Dura per decenni, quindi non c'è bisogno di aggiungere carburante + +[fluid-name] +se-antimatter-stream=Antimateria +se-bio-sludge=Biosludge +se-contaminated-bio-sludge=Biosludge contaminato +se-contaminated-space-water=Acqua cosmica contaminata +se-chemical-gel=Gel chimico +se-decompressing-steam=Condensatore di vapore +se-liquid-rocket-fuel=Carburante liquido per razzi +se-methane-gas=Gas metano +se-methane-gas-mixed=Gas metano mescolato +se-nutrient-gel=Gel nutriente +se-neural-gel=Gel naturale +se-neural-gel-2=Gel naturale avanzato +se-ion-stream=Ioni +se-plasma-stream=Plasma +se-particle-stream=Flusso di particelle +se-proton-stream=Flusso di protoni +se-space-coolant=Termofluido 25°C +se-space-coolant-hot=Termofluido 25°C +se-space-coolant-warm=Termofluido freddo -10°C +se-space-coolant-cold=Termofluido freddo -100°C +se-space-coolant-supercooled=Termofluido superfreddo -273°C +se-space-water=Acqua cosmica + +[fluid-description] +se-space-water=L'acqua non si congela a bassa pressione, più utile per l'utilizzo nello spazio +se-space-coolant=La temperatura di base del termofluido +se-space-coolant-hot=La temperatura di base del termofluido +se-space-coolant-warm=La temperatura del termofluido dopo essere stato raffreddato dal radiatore termico +se-space-coolant-cold=La temperatura del termofluido dopo essere stato hyper raffreddato +se-space-coolant-supercooled=La temperatura del termofluido dopo aver ripetuto il processo di hyper-raffreddamento + +[item-group-name] +space=Spazio +spaceship=Astronave +bob-fluids=Fluidi + +[item-name] +core-fragment=Frammento del nucleo (__1__) +effectivity-module-4=Efficienza modulo 4 +effectivity-module-5=Efficienza modulo 5 +effectivity-module-6=Efficienza modulo 6 +effectivity-module-7=Efficienza modulo 7 +effectivity-module-8=Efficienza modulo 8 +effectivity-module-9=Efficienza modulo 9 +glass=Vetro +productivity-module-4=Produttività modulo 4 +productivity-module-5=Produttività modulo 5 +productivity-module-6=Produttività modulo 6 +productivity-module-7=Produttività modulo 7 +productivity-module-8=Produttività modulo 8 +productivity-module-9=Produttività modulo 9 +rocket-fuel=Carburante solito per razzi +sand=Sabbia +solid-sand=Sabbia lavata +washed-sand=Sabbia lavata +satellite=Navigazione satellitare +se-antimatter-canister=Contenitore di antimateria +se-astrometric-data=Dati astrometrici +se-astronomic-catalogue-1=Cagalogo astronomici +se-astronomic-catalogue-2=Scheda dati astronomici +se-astronomic-catalogue-3=Catalogo astronomico completo +se-astronomic-catalogue-4=Catalogo astronomico esteso +se-astronomic-insight=Intuizione astronomica +se-astronomic-science-pack=Pacco scientifico astronomico +se-atomic-data=Dati atomici +se-bio-combustion-data=Dati bio combustione +se-bio-combustion-resistance-data=Dati resistenza bio combustione +se-bio-spectral-data=Dati bio spettrali +se-biochemical-data=Dati biochimici +se-bioculture=Biocultura +se-bioelectrics-data=Dati bioelettrici +se-biological-catalogue-1=Cataloghi biologici +se-biological-catalogue-2=Ampio catalogo biologico +se-biological-catalogue-3=Catalogo biologico completo +se-biological-catalogue-4=Catalogo biologico esteso +se-biological-insight=Intuizione biologica +se-biological-science-pack=Pacco scientifico biologico +se-biomechanical-data=Dati biomeccanici +se-biomechanical-resistance-data=Dati resistenza biomeccanica +se-boson-data=Dati bosone +se-broken-data=Scheda dati distrutta +se-canister=Contenitore sicuro +se-rocket-launch-pad-silo-dummy-ingredient-item=Razzo cargo +se-rocket-launch-pad-silo-dummy-result-item=Razzo cargo +se-cargo-rocket-cargo-pod=Pedana di atterraggi cargo +se-cargo-rocket-fuel-tank=Serbatoio carburante per razzi +se-cargo-rocket-section=Sezione del razzo cargo +se-cargo-rocket-section-packed=Sezione del razzo cargo compressa +se-cold-thermodynamics-data=Dati termodinamici freddi +se-comparative-genetic-data=Dati comparativi genetici +se-compressive-strength-data=Dati compressivi di forza +se-conductivity-data=Dati conduttività +se-contaminated-scrap=Frammenti contaminati +se-core-fragment-omni=Frammento del nucleo +se-cryogenics-data=Dati criogenici +se-dark-energy-data=Dati energia oscura +se-darkmatter-data=Dati materia oscura +se-data-storage-substrate-cleaned=Substrato di archiviazione di dati lucido +se-data-storage-substrate=Substrato di archiviazione di dati ruvido +se-decompression-data=Dati di decompressione +se-decompression-resistance-data=Dati resistenza di decompressione +se-deep-space-science-pack=Pacco scientifico spazio profondo +se-electromagnetic-field-data=Dati campo elettromagnetico +se-empty-data=Scheda dati vuota +se-empty-lifesupport-canister=Contenitore per supporto vitale vuoto +se-energy-catalogue-1=Cagtalogo energetico +se-energy-catalogue-2=Ampio catalogo di energia +se-energy-catalogue-3=Catalogo di enercia completo +se-energy-catalogue-4=Catalogo di energia esteso +se-energy-insight=Intuizione energetica +se-energy-science-pack=Pacco scientifico energetico +se-entanglement-data=Dati di aggrovigliamento +se-exotic-fission-data=Dati di fissione esotici +se-exotic-singularity-data=Dati singolarità +se-experimental-biochemical-data=Dati biochimica sperimentale +se-experimental-bioculture=Biocultura sperimentale +se-experimental-genetic-data=Dati genetica sperimentale +se-experimental-material-decay-data=Dati decadimento dei materiali sperimentale +se-experimental-material-spectral-data=Dati spettro dei materiali sperimentale +se-experimental-material=Prototipo di materiale sperimentale +se-experimental-specimen=Biomassa sperimentale +se-experimental-superconductor=Prototipo di superconduttore +se-forcefield-data=Dati campo magnetico +se-fusion-test-data=Dati test fusione +se-gammaray-detector=Rilevatore raggi gamma +se-gammaray-observation-data=Dati osservazione raggi gamma +se-gammaray-test-data=Dati raggi gamma +se-genetic-data=Dati genetici +se-gravity-wave-observation-data=Dati osservazione onde gravitazionali +se-gravimetric-observation-data=Dati osservazione gravimetria +se-gravimetric-test-data=Dati test gravimetria +se-heat-shielding=Schematura termica +se-hot-thermodynamics-data=Dati termodinamici caldi +se-infrared-observation-data=Dati osservazione infrarossa +se-ion-spectrometry-data=Dati spettrometria ionica +se-junk-data=Scheda dati di scarto +se-lepton-data=Dati lepton +se-lifesupport-canister=Contenitore per supporto vitale +se-magnetic-canister=Contenitore magnetico +se-magnetic-monopole-data=Dati manipolazione magnetica +se-material-decay-data=Dati decadimento materiali +se-material-science-pack=Pacco scientifico dei materiali +se-material-spectral-data=Dati materiali spettrali +se-material-testing-pack=Pacco di prova dei materiali +se-material-catalogue-1=Catalogo dei materiali +se-material-catalogue-2=Ampio catalogo dei materiali +se-material-catalogue-3=Catalogo dei materiali completo +se-material-catalogue-4=Catalogo dei materiali esteso +se-material-insight=Intuizione materiale +se-medpack=Medikit +se-medpack-2=Medikit 2 +se-medpack-3=Medikit 3 +se-medpack-4=Medikit 4 +se-meteor-defence=Installazione di difesa anti meteoriti +se-meteor-defence-ammo=Munizioni per installazione difensiva +se-meteor-point-defence=Difesa a puntamento anti meteoriti +se-meteor-point-defence-ammo=Munizioni per difesa a puntamento +se-methane-ice=Metano ghiacciato +se-micro-black-hole-data=Dati micro buconero +se-microwave-observation-data=Dati osservazione microonde +se-nano-cold-thermodynamics-data=Dati nanomateriali termodinamici freddi +se-nano-compressive-strength-data=Dati nanomateriali sulla resistenza alla compressione +se-nano-hot-thermodynamics-data=Dati nanomateriali termidinamici caldi +se-nanomaterial=Nanomateriale +se-nano-tensile-strength-data=Dati nanomateriali sulla resistenza alla trazione +se-negative-pressure-data=Dati pressione negativa +se-neural-anomaly-data=Dati anomalia neurale +se-nutrient-vat=Tino di nutriente +se-observation-frame-blank=Struttura di osservazione vuota +se-observation-frame-gammaray=Struttura di osservazione raggi gamma +se-observation-frame-infrared=Struttura di osservazione infrarissi +se-observation-frame-microwave=Struttura di osservazione microonde +se-observation-frame-radio=Struttura di osservazione onde radio +se-observation-frame-uv=Struttura di osservazione UV +se-observation-frame-visible=Struttura di osservzione visibile +se-observation-frame-xray=Struttura di osservazione raggi X +se-plague-bomb=Piaga volante +se-plasma-canister=Contenitore al plasma +se-plasma-electrodynamics-data=Dati elettrodinamici plasma +se-plasma-thermodynamics-data=Dati termodinamici plasma +se-polarisation-data=Dati polarità +se-pressure-containment-data=Dati contenimento pressione +se-quantumn-phenomenon-data=Dati fenomeni quantistici +se-quark-data=Dati quark +se-radiation-data=Dati radiazioni +se-radiation-exposure-data=Dati esposizione radiazioni +se-radiation-exposure-resistance-data=Dati resistenza radiazioni +se-radiation-shielding-data=Dati schermatura radiazioni +se-radio-observation-data=Dati osservazione onde radio +se-rtg-equipment=RTG portatile +se-rtg-equipment-2=RTG portatile MK 2 +se-scrap=Frammenti contaminati +se-significant-data=Dati significativi +se-significant-specimen=Biomassa significativa +se-space-capsule=Capsula spaziale +se-space-mirror=Specchio multispettrale +se-space-platform-plating=Rivestimento piattaforma spaziale +se-space-platform-scaffold=Impalcatura piattaforma spaziale +se-space-rail=Rotaie spaziali +se-spaceship-floor=Pavimento astronave +se-specimen=Biomassa +se-subatomic-data=Dati subatomici +se-superconductivity-data=Dati superconduttività +se-superconductor=Superconduttore +se-superconductive-cable=Cavo superconduttore +se-tensile-strength-data=Dati resistenza alla trazione +se-tesla-ammo=Munizioni tesla gun +se-tesla-gun=Tesla gun +se-thruster-suit=Tuta jet +se-thruster-suit-2=Tuta jet MK2 +se-thruster-suit-3=Tuta jet MK3 +se-thruster-suit-4=Tuta jet MK4 +se-timespace-anomaly-data=Dati anomalia spazio-temporale +se-used-lifesupport-canister=Contenitore supporto vitale usato +se-uv-observation-data=Dati osservazione UV +se-visible-observation-data=Dati osservazione visibile +se-water-ice=Acqua ghiacciata +se-xray-observation-data=Dati osservazione raggi x +se-zero-point-energy-data=Dati punto zero energia +space-science-pack=Pacco scientifico razzo +speed-module-4=Modulo di velocità 4 +speed-module-5=Modulo di velocità 5 +speed-module-6=Modulo di velocità 6 +speed-module-7=Modulo di velocità 7 +speed-module-8=Modulo di velocità 8 +speed-module-9=Modulo di velocità 9 + +[item-description] +automation-science-pack=Usato dai laboratori scientifici base per le ricerche +chemical-science-pack=Usato dai laboratori scientifici base per le ricerche +logistic-science-pack=Usato dai laboratori scientifici base per le ricerche +military-science-pack=Usato dai laboratori scientifici base per le ricerche +production-science-pack=Usato dai laboratori scientifici base per le ricerche +satellite=Il satellite dovrebbe essere inserito nel silo per i razzi +se-antimatter-canister=La forma più densa di energia per il trasporto sicuro in un contenitore +se-astronomic-science-pack=Usato dai laboratori scientifici spaziali per la ricerca +se-biological-science-pack=Usato dai laboratori scientifici spaziali per la ricerca +se-canister=Un contenitore multiuso per il contenimento +se-cargo-rocket-cargo-pod=Una sezione del razzo cargo +se-cargo-rocket-fuel-tank=Una sezione del razzo cargo +se-cargo-rocket-section=Il componente chiave per il razzo cargo. Bisogna inserirlo nell'inventario del silo per razzi cargo. 100 sono richiesti per un razzo. Possono essere recuperati dall'atterraggio dei razzi (20% di possibilità di recupero di partenza) +se-cargo-rocket-section-packed=Sezioni per il razzo cargo compresse, comode per il trasporto. Devono essere spacchettate per essere utilizzate nella costruzione del razzo +se-deep-space-science-pack=Usato dai laboratori scientifici spaziali per la ricerca +se-energy-science-pack=Usato dai laboratori scientifici spaziali per la ricerca +se-heat-shielding=Un pannello composito usato per applicazioni con alte temperature e strutture spaziali +se-material-science-pack=Usato dai laboratori scientifici spaziali per la ricerca +se-medpack=Usalo per curarti +se-medpack-2=Usalo per curarti +se-medpack-3=Usalo per curarti +se-medpack-4=Usalo per curarti +se-meteor-defence=Può difendere un intero pianeta dai meteoriti, ma può sparare solo ad 1. Deve essere caricato con le munizioni per i meteoriti e deve essere caricato completamente per poter sparare. Ha una precisione dell'80%. Deve essere ricaricato dopo aver sparato. Consuma 20MW mentre si ricarica +se-meteor-defence-ammo=Distrugge meteoriti. Deve essere caricato dentro una difesa planetaria contro meteoriti +se-meteor-point-defence=Difende un'area dai meteoriti. Può sparare fino a 4 meteoriti per volta. Deve essere caricato con le munizioni per difese a puntamento e deve essere ricaricato completamente prima di sparare. Ha un raggio di 64, 50% di precisione e ha bisogno di tempo per ricaricarsi dopo aver sparato +se-meteor-point-defence-container=Distrugge meteoriti. Deve essere caricato dentro una difesa a puntamento contro meteoriti +se-rocket-launch-pad-silo-dummy-ingredient-item=Costruito inserendo 100 sezioni per razzo cargo e 1 capsula spaziale dentro il silo per razzi cargo +se-rtg-equipment=Generatore elettrico a base di radioisotopi. Un generatore portatile che converte il calore del decadimento radiattivo in energia. Dura per decenni, quindi non c'è bisogno di aggiungere carburante +se-rtg-equipment-2=Generatore elettrico a base di radioisotopi. Un generatore portatile migliorato che converte il calore del decadimento radiattivo in energia. Dura per decenni, quindi non c'è bisogno di aggiungere carburante +se-plague-bomb=Estinguere tutte le forme di vita da un intero pianeta. Maneggiare con estrema cauzione. (Può causare pesanti calid i UPS e continui, visto che tutto muore gradualmente. Sconsigliato l'uso per grandi pianeti o multiplayer) +se-space-capsule=Una capsula di controllo richiesta dai razzi cargo. Può essere usata per portare passeggeri indietro sulla superficie del pianeta più vicino. Entra nella capsula usando __CONTROL__toggle-driving__. +se-space-platform-plating=Un rivestimento avanzato che permette di muoversi velocemente supra la piattaforma spaziale +se-space-platform-scaffold=Impalcatura spaziale di base che permette di piazzare alcune strutture nello spazio +se-space-rail=Rotaie costruite per muovere in modo sicuro i treni nello spazio senza che volino via dai binari e distruggendo tutto. Possono essere usate anche sulla terra per ragioni estetiche +se-spaceship-floor=Questo pavimento deve essere sotto tutte le parti dell'astronave, insieme ai muri nei lati esterni. Qualsiasi spazio nel pavimento causerà una perdita nel contenimento e alcune sezioni si potrebbero sganciare +se-superconductive-cable=Un cavo composito superconduttivo che non richiede nessun sistema attivo di raffreddamento +se-tesla-gun=Spara catene di fulmini con velocità elevata +se-thruster-suit=Una tuta spaziale richiesta per sopravvivere nello spazio. \nHa jet e stivali +se-thruster-suit-2=Una tuta spaziale richiesta per sopravvivere nello spazio. \nHa dei jet migliori, un inventario più grande e una griglia maggiore +se-thruster-suit-3=Una tuta spaziale richiesta per sopravvivere nello spazio. \nHa dei jet migliori, un inventario più grande e una griglia maggiore +se-thruster-suit-4=Una tuta spaziale richiesta per sopravvivere nello spazio. \nHa dei jet migliori, un inventario più grande e una griglia maggiore +space-science-pack=Usato dai laboratori scientifici spaziali per la ricerca +utility-science-pack=Usato dai laboratori scientifici base per le ricerche + +[recipe-name] +core-fragment=Processo di frammentazione del nucleo (__1__) +rocket-fuel=Combustibile solido per razzi +se-astrometric-analysis-multispectral-1=Analisi multispettrale astrometrica 1 +se-astrometric-analysis-multispectral-2=Analisi multispettrale astrometrica 2 +se-astrometric-analysis-multispectral-3=Analisi multispettrale astrometrica 3 +se-astronomic-insight-1=Intuizione astronomica +se-astronomic-insight-2=Catalogo intuizioni astronomiche +se-astronomic-insight-3=Intuizioni astronomiche comprensive +se-astronomic-insight-4=Intuizioni astronomiche estese +se-biological-insight-1=Intuizioni biologiche +se-biological-insight-2=Catalogo intuizioni biologiche +se-biological-insight-3=Intuizioni biologiche comprensive +se-biological-insight-4=Intuizioni biologiche estese +se-bio-methane-to-crude-oil=Bio processo del metano per olio +se-bio-sludge-crude-oil=Fango biologico per biomasse sperimentali +se-bio-sludge-decontamination=Decontaminazione fango biologico +se-bio-sludge-from-fish=Fango biologico da pesci +se-bio-sludge-from-wood=Fango biologico da legno +se-bio-sludge=Fango biologico da biomassa +se-broken-data-scrapping=Rottamazione carta dati distrutta +se-cargo-rocket-section-pack=Compressione sezioni per razzo cargo +se-cargo-rocket-section-unpack=Decompressione sezioni per razzo cargo +se-condenser-turbine-reclaim-water=Generatore elettrico con acqua bonificata +se-core-fragment-omni=Processo di frammentazione del nucleo +se-core-mining=Estrazione del nucleo +se-empty-antimatter-canister=Flusso di antimateria per contenitore +se-empty-barrel-scrapping=Rottamazione di barili vuoti +se-empty-barrel-reprocessing=Riprocesso di barili vuoti +se-space-capsule-scrapping=Rottamazione di capsula spaziale +se-cargo-pod-scrapping=Rottamazione della pedana di atterraggio cargo +se-energy-insight-1=Intuizione elettriche +se-energy-insight-2=Catalogo intuizioni elettriche +se-energy-insight-3=Intuizione elettrica comprensiva +se-energy-insight-4=Intuizione elettrica estesa +se-formatting-1=Formattazione dei dati +se-formatting-2=Formattazione efficente dei dati +se-formatting-3=Formattazione avanzata dei dati +se-material-insight-1=Intuizione materiale +se-material-insight-2=Catalogo delle intuizione materiali +se-material-insight-3=Intuizione materiale comprensiva +se-material-insight-4=Intuizione materiale estesa +se-matter-fusion-copper=Fusione della materia (Rame) +se-matter-fusion-dirty=Fusione della materia (Rottami) +se-matter-fusion-iron=Fusione della materia (Ferro) +se-matter-fusion-stone=Fusione della materia (Pietra) +se-matter-fusion-uranium=Fusione della materia (Uranio) +se-plasma-canister-empty=Contenitore di plasma vuoto +se-radiating-space-coolant-normal=Raffreddamento termofluido fino a -10°C (Freddo) +se-radiating-space-coolant-slow=Raffreddamento lento termofluido fino a -10°C (Freddo) +se-radiating-space-coolant-veryslow=Raffreddamento molto lento termofluido fino a -10°C (Freddo) +se-mixed-methane-gas-separation=Separazione gas metano mischiato +se-rocket-fuel-from-water-copper=Carburante per razzi dall'acqua +se-scrap-decontamination=Decontaminazione dei rottami +se-scrap-recycling=Riciclo dei rottami +se-space-coolant-cold=Hyper raffreddamento termofluido fino a -100°C (Freddo) +se-space-coolant-supercooled=Hyper raffreddamento termofluido fino a -273°C (Superfreddo) +se-simulation-a=Simulazione astronomica +se-simulation-ab=Simulazione panspermia +se-simulation-abm=Simulazione xenoprogressione +se-simulation-am=Simulazione distribuzione materia +se-simulation-as=Simulazione astroparticellare +se-simulation-asb=Simulazione astrobionica +se-simulation-asbm=Simulazione universale +se-simulation-asm=Simulazione astrofisica +se-simulation-b=Simulazione biologica +se-simulation-bm=Simulazione biomeccanica +se-simulation-m=Simulazione materiale +se-simulation-s=Simulazione elettrica +se-simulation-sb=Simulazione biochimica +se-simulation-sbm=Simulazione nanite +se-simulation-sm=Simulazione nanomateriali +se-space-water-decontamination=Decontaminazione acqua cosmica +se-spaceship-rocket-engine-burn=Bruciatura carburante liquido per razzi +se-specimen-fish=Crescita pesce in microgravità +se-specimen-wood=Crescita legna in microgravità +se-thermodynamics-coal=Cottura a pressione con carbone +se-used-lifesupport-canister-cleaning=Pulizia contenimento supporto vitale + +[recipe-description] +se-astronomic-insight-2=Più complicato, ma più effcente nelle risorse +se-astronomic-insight-3=Più complicato, ma più effcente nelle risorse +se-astronomic-insight-4=Più complicato, ma più effcente nelle risorse +se-biological-insight-2=Più complicato, ma più effcente nelle risorse +se-biological-insight-3=Più complicato, ma più effcente nelle risorse +se-biological-insight-4=Più complicato, ma più effcente nelle risorse +se-core-mining=I frammenti del nucleo dipendono dal pianeta. Il tempo di trivellazione dipende dal numero di estrattori del nucleo presenti sul pianeta (o sulla luna) +se-energy-insight-2=Più complicato, ma più effcente nelle risorse +se-energy-insight-3=Più complicato, ma più effcente nelle risorse +se-energy-insight-4=Più complicato, ma più effcente nelle risorse +se-material-insight-2=Più complicato, ma più effcente nelle risorse +se-material-insight-3=Più complicato, ma più effcente nelle risorse +se-material-insight-4=Più complicato, ma più effcente nelle risorse +se-radiating-space-coolant-normal=Ripetuti raffreddamenti e riscaldamenti sul termofluido causano una degradazione +se-radiating-space-coolant-slow=Ripetuti raffreddamenti e riscaldamenti sul termofluido causano una degradazione. Un raffreddamento lento riduce il disperdio +se-radiating-space-coolant-veryslow=Ripetuti raffreddamenti e riscaldamenti sul termofluido causano una degradazione. Un raffreddamento lento riduce il disperdio + +[technology-name] +effectivity-module-4=Efficenza modulo 4 +effectivity-module-5=Efficenza modulo 5 +effectivity-module-6=Efficenza modulo 6 +effectivity-module-7=Efficenza modulo 7 +effectivity-module-8=Efficenza modulo 8 +effectivity-module-9=Efficenza modulo 9 +energy-shield-equipment=Scudo energetico +energy-shield-mk2-equipment=Scudo energetico MK2 +energy-shield-mk3-equipment=Scudo energetico MK3 +energy-shield-mk4-equipment=Scudo energetico MK4 +energy-shield-mk5-equipment=Scudo energetico MK5 +energy-shield-mk6-equipment=Scudo energetico MK6 +sand-processing=Processo della sabbia +glass-processing=Processo del vetro +liquid-rocket-fuel=Carburante liquido per razzi +productivity-module-4=Modulo produttività 4 +productivity-module-5=Modulo produttività 5 +productivity-module-6=Modulo produttività 6 +productivity-module-7=Modulo produttività 7 +productivity-module-8=Modulo produttività 8 +productivity-module-9=Modulo produttività 9 +rocket-silo=Satellite per silo dei razzi +rocketry=Missilistica da combattimento +se-adaptive-armour=Armatura adattiva +se-antimatter-engine=Motore ad antimateria +se-antimatter-reactor=Reattore ad antimateria +se-antimatter-production=Produzione di antimateria +se-astronomic-science-pack=Pacco scientifico astronomico +se-biological-science-pack=Pacco scientifico biologico +se-condenser-turbine=Turbina a condensazione +se-core-miner=Estrattore del nucleo +se-deep-space-science-pack=Pacco scientifico spazio profondo +se-electric-boiler=Boiler elettrico +se-energy-science-pack=Pacco scientifico energetico +se-fluid-burner-generator=Generatore di fluido isometrico +se-fuel-refining=Raffinazione del carburante +se-heat-shielding=Scudo termico +se-material-science-pack=Pacco scientifico materiale +se-medpack=Medikit +se-medpack-2=Medikit 2 +se-medpack-3=Medikit 3 +se-medpack-4=Medikit 4 +se-meteor-defence=Installazione difensiva planetaria anti meteorite +se-meteor-point-defence=Difesa a puntamento anti meteorite +se-plague=La piaga +se-railgun=Railgun +se-rocket-cargo-safety=Sicurezza razzi cargo +se-rocket-fuel-from-water=Carburante per razzi dall'acqua +se-rocket-launch-pad=Silo per razzi cargo +se-rocket-landing-pad=Pedana di atterraggio per razzi +se-rocket-reusability=Riusabilità dei razzi +se-rocket-survivability=Soppravvivenza dei razzi +se-rtg-equipment=RTG portatile +se-rtg-equipment-2=RTG portatile MK2 +se-space-assembling=Assemblatore spaziale +se-space-accumulator=Accumulatore spaziale +se-space-astrometrics-laboratory=Laboratorio astrometrico +se-space-biochemical-laboratory=Laboratorio biochimico +se-space-catalogue-astronomic=Catalogo astronomico +se-space-catalogue-biological=Catalogo biologico +se-space-catalogue-energy=Catalogo energetico +se-space-catalogue-material=Catalogo dei materiali +se-space-data-card=Scheda dati +se-space-decontamination-facility=Decontaminazione facilitata +se-space-electromagnetics-laboratory=Laboratorio elettromagnetico +se-space-genetics-laboratory=Laboratorio genetica +se-space-gravimetrics-laboratory=Laboratorio gravimetrico +se-space-growth-facility=Crescita facilitata +se-space-hypercooling=Hyper raffreddamento +se-space-laser-laboratory=Laboratorio laser +se-space-lifesupport-facility=Supporto vitale facilitato +se-space-manufactory=Fabbrica spaziale +se-space-material-fabricator=Fabbricatore di materiali +se-space-matter-fusion=Fusione della materia +se-space-mechanical-laboratory=Laboratorio meccanico +se-space-particle-accelerator=Acceleratore di particelle +se-space-particle-collider=Collider di particelle +se-space-plasma-generator=Generatore di plasma +se-space-platform-plating=Rivestimento piattaforma spaziale +se-space-platform-scaffold=Impalcatura piattaforma spaziale +se-space-radiation-laboratory=Laboratorio radiazioni +se-space-radiator=Radiatore termico +se-space-rail=Rotaia spaziale +se-space-recycling-facility=Riciclaggio facilitato +se-space-science-lab=Laboratorio scientifico spaziale +se-space-simulation-ab=Simulazione panspermia +se-space-simulation-am=Simulazione astromateriale +se-space-simulation-as=Simulazione astroparticelle +se-space-simulation-bm=Simulazione biomeccanica +se-space-simulation-sb=Simulazione biochimica +se-space-simulation-sm=Simulazione nanomateriali +se-space-simulation-abm=Simulazione xenoprogressione +se-space-simulation-asb=Simulazione astrobionica +se-space-simulation-asm=Simulazione astrofisica +se-space-simulation-sbm=Simulazione nanite +se-space-simulation-asbm=Simulazione universale +se-space-solar-panel=Pannelli solari spaziali +se-space-solar-panel-adv=Pannelli solari spaziali avanzati +se-space-spectrometry-facility=Spettrometria facilitata +se-space-supercomputer=Supercomputer +se-space-telescope=Telescopio +se-space-telescope-gammaray=Telescopio raggi gamma +se-space-telescope-xray=Telescopio raggi X +se-space-telescope-microwave=Telescopio microonde +se-space-telescope-radio=Radio telescopio +se-space-thermodynamics-laboratory=Laboratorio termodinamica +se-spaceship=Astronave +se-spaceship-integrity=Integrità strutturale astronave +se-factory-spaceship=Fabbrica astronave +se-superconductive-cable=Cavo superconduttore +se-teleportation=Teletrasporto +se-tesla-gun=Tesla gun +se-thruster-suit=Tuta jet +space-science-pack=Pacco scientifico razzo +speed-module-4=Modulo velocità 4 +speed-module-5=Modulo velocità 5 +speed-module-6=Modulo velocità 6 +speed-module-7=Modulo velocità 7 +speed-module-8=Modulo velocità 8 +speed-module-9=Modulo velocità 9 + +[technology-description] +energy-shield-equipment=Una bolla protettiva che si ricarica facilmente, ma che usa molta energia +energy-shield-mk2-equipment=Una bolla protettiva che si ricarica facilmente, ma che usa molta energia +energy-shield-mk3-equipment=Una bolla protettiva che si ricarica facilmente, ma che usa molta energia +energy-shield-mk4-equipment=Una bolla protettiva che si ricarica facilmente, ma che usa molta energia +energy-shield-mk5-equipment=Una bolla protettiva che si ricarica facilmente, ma che usa molta energia +energy-shield-mk6-equipment=Una bolla protettiva che si ricarica facilmente, ma che usa molta energia +sand-processing=Spacca, macina e filtra la materia prima in sabbia +glass-processing=Cuoce la sabbia in vetro +rocket-silo=Ti permette di lanciare il satellite in orbita per sviluppare pacchi scientifici razzo e scoprire nuovi pianeti +se-adaptive-armour=Armatura che usa eneria per autoriparasi. È simile allo scudo energetico, ma richiede meno potenza, con una velocità di rigenerazione minore +se-antimatter-engine=Annienta l'antimateria per produrre una spinta potentissima +se-antimatter-reactor=Annienta l'antimateria con altra materia per generare un calore estremo +se-antimatter-production=Produce antimateria, la forma di energia immagazzinata più densa +se-astronomic-science-pack=Permette la ricerca di tecnologie riguardanti viaggi spaziali e comunicazione interstellare +se-biological-science-pack=Permette di ricercare le tecnologie relative al miglioramento delle tue capacità fisiche, armi biologiche e lavorazione neurale +se-condenser-turbine=75% dell'efficenza energetica delle turbine a vapore, ma il 99% del vapore utilizzato viene condensato in acqua +se-core-miner=Permette l'estrazione infinita delle risorse da pianeti e lune, ma diminuisce l'efficenza all'aumentare del numero di trivelle sullo stesso corpo celeste +se-deep-space-science-pack=Richiesto per le tecnologie più avanzate +se-electric-boiler=CProduce vapore dall'acqua usando l'energia elettrica +se-energy-science-pack=Permette la ricerca delle tecnologie relative alle forze fondamentali e alle scoperte subatomiche +se-fluid-burner-generator=Richiede carburante liquido con un valore energetico (tipo i lcarburante liquido per razzi) per generare energia. Semplice e compatto, ma non è molto efficente in confronto a sistemi più grossi basati sul vapore. Progettato per lo spazio +se-fuel-refining=Raffina i più avanzati carburanti +se-heat-shielding=Un pannello composito usato per applicazioni con alte temperature e per strutture spaziali +se-material-science-pack=Permette di ricercare tecnologie riguardanti materiali avanzati da utilizzare, per i più avanzati componenti ingegneristici +se-medpack=Usa il medikit per curarti +se-medpack-2=Usa il medikit per curarti +se-medpack-3=Usa il medikit per curarti +se-medpack-4=Usa il medikit per curarti +se-meteor-defence=Spara ai meteoriti che cadono dal cielo, prima che distruggano i tuoi macchinari. Una difesa anti meteoriti può difendere un intero pianeta, ma può sparare solo ad 1 meteorite alla volta +se-meteor-point-defence=Spara ai meteoriti che cadono dal cielo, prima che distruggano i tuoi macchinari. una difesa a puntamento anti meteoriti copre solo una determinata area, ma può colpire 4 meteoriti alla volta +se-railgun=Frecce accelerate elettromagneticamente fino a raggiungere una velocità da lasciare una scia di prisma prima di evaporare. Alto danno, bassa velocità di fuoco +se-plague=La grande piaga che eradicherà ogni forma di vita dal pianeta bersaglio. Maneggiare con ESTREMA cauzione +se-rocket-cargo-safety=Riduce le chance che il rivestimento del razzo cargo venga danneggiato in transito del 10% (moltiplicativo) +se-rocket-fuel-from-water=Genera idrogeno-ossigeno per carburante per razzi tramite l'elettrolisi dell'acqua +se-rocket-landing-pad=Permette di lanciare razzi cargo verso determinate pedane di atterraggio, tramite il nome. Ricerche più avanzate permettono anche di recuperare parti del razzo +se-rocket-launch-pad=Ti permette di lanciare un carico verso lo spazio o altri pianeti e lune +se-rocket-reusability=Aumenta la percentuale di parti che possono essere recuperate da un atterraggio riuscito del 4% (Base: 20%, massimo è 100%) +se-rocket-survivability=Riduce la percentuale che il razzo venga danneggiato in viaggio o che subisca fallimenti nella navigazione, risultando in un mancato atterraggio sulla pedana del 10% (moltiplicativo) +se-rtg-equipment=Generatore termoelettrico a radioisotopi. Un generatore portatile che ti permette di convertire il calore del decadimento radiattivo in elettricità. Non ha bisogno di carburante aggiuntivo +se-rtg-equipment-2=Generatore termoelettrico a radioisotopi. Un generatore portatile migliorato che ti permette di convertire il calore del decadimento radiattivo in elettricità. Non ha bisogno di carburante aggiuntivo +se-space-assembling=Un assemblatore modificato spaziale che può lavorare anche nello spazio +se-space-astrometrics-laboratory=Combina, compara e quantifica le differenti sorgenti di informazioni astronomiche +se-space-biochemical-laboratory=Un laboratorio chimico avanzato specializzato in biochimica. Può inoltreeseguire i processi base di chimica e lavorazione degli oli +se-space-catalogue-astronomic=Catalogo di dati astronomici pronti per le analisi e le silmulazioni. Richiesto per ricerche astronomiche avanzate +se-space-catalogue-biological=Catalogo di dati biologici printi per le analisi e le simulazioni. Richiesto per ricerche biologiche avanzate +se-space-catalogue-energy=Catalogo di dati energetici pronti per le analisi e le simulazioni. Richiesto per le ricerche energetiche avanzate +se-space-catalogue-material=Catalogo di dati materiali pronti per le analisi e le simulazioni. Richiesto per le ricerche materiali avanzate +se-space-data-card=Un device per salvare differenti tipi di dati. Richiesto per le richieste più avanzate +se-space-decontamination-facility=Pulisce le sostanze in un ambiente sterile per essere riutilizzate e prepara i liquidi per un uso in condizioni di bassa pressione +se-space-electromagnetics-laboratory=Equipaggiato per applicazioni con intensi campi magnetici e temperature estreme +se-space-genetics-laboratory=Un laboratorio dedicato alla genetica: sequenze genetiche, modifiche genetiche e stampa di culture genetiche +se-space-gravimetrics-laboratory=Analizza e simula disturbi gravitazionali +se-space-growth-facility=Permette la crescita di specie biologiche in un'area determinata e in condizioni controllate, in ambienti dove sarebbe impossibile, tipo in microgravità +se-space-hypercooling=Esegue una dispersione di calore sul termofluido, rendendone uno caldo e uno freddo +se-space-laser-laboratory=Esperimenti con laser. Una protezione agli occhi è suggerita +se-space-lifesupport-facility=Permette la vita in ambienti ostili +se-space-manufactory=Una fabbrica per la produzione di massa nello spazio +se-space-material-fabricator=Sintetizza nuovi materiali. una via di mezzo tra un collisore di particelle e una stampante 3D +se-space-matter-fusion=Lavorazione dei materiali tramite la fusione +se-space-mechanical-laboratory=Fornisce una serie di processi meccanici: Schiacciamento, lavorazione, taglio, vibrazione... +se-space-particle-accelerator=Accelera le particelle alla velocità prossima alla velocità della luce +se-space-particle-collider=Collide particelle ad alta velocità e analizza il risultato +se-space-plasma-generator=Genera una varietà di plasma +se-space-platform-plating=Un rivestimento per le piattaforme spaziali robusto. Liscio e facile per camminate spaziali +se-space-platform-scaffold=Impalcatura base per le piattaforme spaziali. Qualcosa per costruirci sopra ma non molto per camminate spaziali +se-space-radiation-laboratory=Un posto relativamente sicuro per giocare con materiali radioattivi. Può essere usato anche per la lavorazione dell'uranio +se-space-radiator=Irradia via il calore in eccesso dal termofluido sovrascaldato +se-space-rail=Rotaie sicure per lo spazio che non permettono al treno di deragliare via e fluttuare, distruggendo tutto. Può essere usato a terra per questioni estetiche +se-space-recycling-facility=Ricicla oggetti e li lavora per trasformarli in materiale grezzo +se-space-science-lab=Permette la produzione del pacco scientifico missilistico e le più avanzate scienze spaziali +se-space-simulation-ab=Una simulazione più efficace simulando e combinando diverse discipline +se-space-simulation-am=Una simulazione più efficace simulando e combinando diverse discipline +se-space-simulation-as=Una simulazione più efficace simulando e combinando diverse discipline +se-space-simulation-bm=Una simulazione più efficace simulando e combinando diverse discipline +se-space-simulation-sb=Una simulazione più efficace simulando e combinando diverse discipline +se-space-simulation-sm=Una simulazione più efficace simulando e combinando diverse discipline +se-space-simulation-abm=Una simulazione più efficace simulando e combinando diverse discipline +se-space-simulation-asb=Una simulazione più efficace simulando e combinando diverse discipline +se-space-simulation-asm=Una simulazione più efficace simulando e combinando diverse discipline +se-space-simulation-sbm=Una simulazione più efficace simulando e combinando diverse discipline +se-space-simulation-asbm=Una simulazione più efficace simulando e combinando diverse discipline +se-space-solar-panel=Un pannello solare molto efficente per lo spazio +se-space-solar-panel-adv=Un pannello solare avanzato molto efficente per lo spazio +se-space-spectrometry-facility=Spettrometria, gas cromatografia, spettrometria di massa e altri tipi di spettrometria. Spara roba contro il muro e lo deforma, guardando dove ha colpito. +se-space-supercomputer=Permette un'avanzata manipolazione di dati, elaborazione e simulazione +se-space-telescope=Un sofisticato telescopio sensibile a diverse lunghezze d'onda attorno allo spettro visibile +se-space-telescope-gammaray=I raggi gamma non vengono riflessi. Questo potente telescopio usa specchi e speciali ricettori +se-space-telescope-xray=I raggi X vengono bloccati per la maggior parte dall'atmosfera. Questo potente telescopio è stato progettato per lo spazio, dove l'atmosfera non è un problema +se-space-telescope-microwave=Un gigantesco telescopio che rileva microonde e le microonde provenienti dallo spazio profondo +se-space-telescope-radio=Un gigantesco telescopio che rileva anche i più deboli segnali radio distanti dalle sorgenti +se-space-thermodynamics-laboratory=Intraprende processi che involvono temperature estreme. Può inoltre eseguire processi termici di base, come la fusione +se-spaceship=Una nave che costruisci te pezzo per pezzo, con pavimento e muri. Usa poi la console per muoverti tra diversi pianeti e oltre +se-spaceship-integrity=Ogni livello aumenta lo stresso massimo dell'integrità strutturale di 100 +se-factory-spaceship=Ogni livello aumenta lo stresso massimo dell'integrità strutturale di 500 +se-superconductive-cable=Un cavo superconduttivo che non richiede un raffreddamento +se-teleportation=Sblocca latre tecnologie per il teletrasporto. Si scopre che deformare lo spazio in modo sicuro e veramente difficile +se-tesla-gun=Scariche di fulmini veloci. Può colpire fino a 30 nemici per colpo. Colpisce anche nemici a lunga distanza tra di loro +se-thruster-suit=Una tuta spaziale con propulsori jet e stivali. Non andare nello spazio senza +se-thruster-suit-2=Una tuta spaziale migliorata con propulsori jet più potenti, migliorando anche la grandezza dell'inventario e una griglia più grande +se-thruster-suit-3=Una tuta spaziale migliorata con propulsori jet più potenti, migliorando anche la grandezza dell'inventario e una griglia più grande +se-thruster-suit-4=Una tuta spaziale migliorata con propulsori jet più potenti, migliorando anche la grandezza dell'inventario e una griglia più grande +space-science-pack=Permette uno sviluppo più diretto per lo sviluppo di pacchi scientifici missilistici e tecnologie che beneficiano di questi miglioramenti + +[modifier-description] +tesla-shooting-speed-bonus=Velocità di fuoco tesla +tesla-damage-bonus=Bonus danno tesla +railgun-damage-bonus=Bonus danno Railgun +railgun-shooting-speed-bonus=Velocità di fuoco Railgun + +[virtual-signal-name] +se-star=Stella +se-planet=Pianeta +se-planet-orbit=Orbita planetaria +se-moon=Luna +se-moon-orbit=Orbita lunare +se-asteroid-belt=Cintura di asteroidi +se-asteroid-field=Campo di asteroidi +se-anomaly=Anomalia +se-meteor=Meteorite +se-spaceship=Astronave +se-remote-view=Visione remota +se-death=Morte +se-character-corpse=Corpo + +[controls] +se-remote-view=Visione navigazione satellitare +se-respawn=Rinasci + +[shortcut] +se-remote-view=Visione navigazione satellitare +se-respawn=Rinasci + +[shortcut-name] +se-remote-view=Visione navigazione satellitare [__CONTROL__se-remote-view__] +se-respawn=Rinasci [__CONTROL__se-respawn__] + +[tile-name] +se-space-platform-plating=Rivestimento piattaforma spaziale +se-space-platform-scaffold=Impalcatura piattaforma spaziale +se-space-platform-underlay=Spazio +se-space-platform-underlay-l=Spazio +se-space-platform-underlay-r=Spazio +se-space=Spazio vuoto +se-regolith=Regolite +se-asteroid=Asteroide +se-spaceship-floor=Pavimento astronave + +[mod-setting-name] +se-meteor-interval=Intervallo meteoriti +se-plague-max-runtime=Durata massima della piaga +se-planets=Numero di pianeti +se-planet-size=Area dei pianeti (da 1% a 10000%) +se-seed=Seme di generazione dei pianeti +se-skip-experimental-warning=Skip avvertimenti sperimentali +se-print-meteor-info=Stampa allerta meteorite in console +se-space-pipe-capacity=Capacità tubo spaziale +se-electric-boiler=Boiler elettrico + +[mod-setting-description] +se-meteor-interval=È l'intervallo base in minuti tra le piogge di meteoriti. Dopo ogni impatto, i prossimi meteoriti che colpiranno vengono impostati tra un numero random (in minuti) tra 1 e questo valore. +se-plague-max-runtime=Il tempo massimo di durata delle armi biologiche. Dopo che ogni Piaga è stata utilizzata per questo tempo, ogni particella, albero e nemico verrà distrutto. +se-planets=Non cambiare il valore durante la partita. +se-planet-size=Non cambiare il valore durante la partita. +se-seed=Non cambiare il valore durante la partita. +se-skip-experimental-warning=L'avviso di inizio di una nuova partita non apparirà e non verrai avvisato se i messaggi cambieranno. +se-print-meteor-info=Ti abilita a vedere gli avvisi in console dopo che l'avviso principale è scomparso, premendo __CONTROL__toggle-console__ key. +se-space-pipe-capacity=La capacità dei tubi spaziali +se-electric-boiler=Aggiunge un boiler elettrico al gioco + +[autoplace-control-names] +planet-size=Dimensione pianeta +se-water-ice=Acqua ghiacciata (Solo nello spazio, i cursori non hanno effetto) +se-methane-ice=Metano ghiacciato (Solo nello spazio, i cursori non hanno effetto) diff --git a/space-exploration_0.5.80/space-exploration/locale/ja/strings.cfg b/space-exploration_0.5.80/space-exploration/locale/ja/strings.cfg new file mode 100644 index 0000000..77a0f34 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/locale/ja/strings.cfg @@ -0,0 +1,1649 @@ +spaceship-integrity100=宇宙船の船体強度 +100 +spaceship-integrity300=宇宙船の船体強度 +300 +spaceship-integrity500=宇宙船の船体強度 +500 +core-mining-productivity-5=コアマイニングの生産性 +5% +se-zone-discovery-random=研究が完了した時、ランダムに新たな場所を発見します。 +se-zone-discovery-targeted=研究が完了した時、指定したリソースを有している新たな場所を発見します。 +se-zone-discovery-deep=研究が完了した時、深宇宙から新たな場所を発見します。 +unlock-spaceship-victory=宇宙船による勝利条件を解放します。: ネクサスを起動した宇宙船に乗り、空間歪曲航法で __1__ の速度を __2__ 秒間維持しましょう。 + + +[mod-name] +space-exploration=スペース・エクスプローラー + +[mod-description] +space-exploration=貨物ロケットを建設し、宇宙を股にかけた物流網を構築しましょう。ロケットに飛び乗って衛星軌道上に工場を建設し、宇宙データを観測して新たな研究を進めましょう。月、アステロイドベルト、他の惑星や深宇宙を探索しよう。※必ず "Space Exploration Postprocess" をインストールしてください ※AAI Industryを導入してプレイすることをおすすめします。 ※ このmodは現在開発中のため、依存性の無いほかのmodと合わせて遊ぶことはおすすめしません。 + +[space-exploration] +space-exploration=スペース・エクスプローラー +menu_space-exploration=スペース・エクスプローラー +title_space-exploration=スペース・エクスプローラー +rename-something=__1__ の名称を変更する +trigger-none=トリガーなし (手動) +trigger-fuel-full=燃料満タンで自動打ち上げ +trigger-cargo-full=貨物満載で自動打ち上げ +trigger-fuel-full-signal=燃料満タンでグリーンシグナルのとき自動打ち上げ +trigger-cargo-full-signal=貨物満載でグリーンシグナルのとき自動打ち上げ +trigger-cargo-full-or-signal=グリーンシグナル または 貨物が満載のとき自動打ち上げ +destination-type-zone=おおよその位置 +destination-type-landing-pad=貨物ロケットランディングパッド +button-launch=ロケット打ち上げ +button-launch-disabled=ロケット打ち上げ (無効) +destination-crash-warning=警告: 貨物ロケットが破損する可能性を下げるために貨物ロケットランディングパッドを選択してください +recipe-to=__2__から__1__ +recipe-from=__2__から__1__ +remote-view=惑星探査画面 [__CONTROL__se-remote-view__ キー] +remote-view-instruction=衛星を打ち上げることで新たな星、惑星、小惑星を発見します。 +exit-remote-view=惑星探査画面を閉じる [__CONTROL__se-remote-view__ キー] +remote-view-requires-satellite=惑星探査画面を開くにはまず衛星を打ち上げる必要があります。 +satellite-launched=衛星が展開され天体の観測がはじまりました。[img=virtual-signal/se-remote-view] 惑星探査画面を利用できます。 ( [color=green][__CONTROL__se-remote-view__][/color]キー または ツールバーから表示) +satellite-discovered-platform=衛星が惑星軌道上に宇宙ステーションの痕跡を発見しました +source-discovered-zone=[color=cyan]__1__ が新しい __2__ : [/color][img=__3__] [color=white]__4__[/color] を発見しました +discovered-zone=[color=cyan]__1__が新しい : [img=__2__] [/color][color=white]__3__[/color]を発見しました +space-capsule=宇宙カプセル +player-died=__1__が死亡しました +launch-suit-warning=窒息を防ぐためにスラスタースーツを着用して下さい +suffocating-warning=あなたは窒息しています。宇宙カプセルに帰還するか、スラスタースーツを着用してください。 +rocket_survivability_fail=貨物ロケットは繰り返しの利用で徐々に損耗します。貨物ロケットの安全性に関する研究をお勧めします。 +respawn-if-stranded=移動できなくなった場合リスポーンのショートカット [__CONTROL__se-respawn__] を利用出来ます。 +filter-list=検索 +clear-filter=検索をクリア +zone-tooltip=__1__ __2__ __3__ __4__ __5__ __6__ __7__ +zone-tooltip-type=\nタイプ: __1__ +zone-tooltip-resources=\n主な資源: __1__ +zone-tooltip-lifesigns=\n生命反応: __1__ +zone-tooltip-daynight=\n一日の長さ: __1__ 分 +zone-tooltip-bot-attrition=\nロボネットワークの接続: __1__ +construction-denied=ここに配置することはできません。 +construction-denied-vehicle-in-space=地上車両を宇宙空間に置く事は出来ません。 +construction-denied-se-surface=無効な配置 +currently-viewing=現在の表示:__1__ +no-character-to-board=ターゲットに搭乗できません +starmap=星図(未実装) +back=戻る +spaceship=宇宙船 +plant=惑星 +moon=月 +star=星 +orbit=衛星軌道 +something_orbit=__1__ 衛星軌道 +asteroid-belt=小惑星帯 +asteroid-field=小惑星帯空域 +anomaly=アノマリー  +spaceship-cannot-set-destination-to-self=出発地を目的地にすることはできません。 +spaceship-launch-energy=発射エネルギー: __1__ +spaceship-launch-energy-invalid=発射エネルギー: 宇宙船の有効性チェックが必要です。 +spaceship-speed=スピード:__1__ +spaceship-structural-stress-hull=船体強度への負荷(外壁):__1__ +spaceship-structural-stress-hull-invalid=船体強度への負荷(外壁):無効 (完全に密封してください) +spaceship-structural-stress-container=船体強度への負荷(コンテナ):__1__ +spaceship-structural-stress-container-invalid=船体強度への負荷(コンテナ):無効 (完全に密封してください) +spaceship-travel-time-unknown=所要時間:不明。計測のため最高速度を試してください。 +spaceship-travel-time-max=所要時間:最大速度で__1__秒 +spaceship-travel-time-current=所要時間:現在の速度で__1__秒 +spaceship-closest-location=最も近い場所:__1__ +spaceship-location-spatial-distortion=空間の歪み:__1__ +spaceship-location-stellar-x=X座標:__1__ +spaceship-location-stellar-y=Y座標:__1__ +spaceship-location-star-gravity-well=恒星重力圏: __1__ +spaceship-location-planet-gravity-well=惑星重力圏: __1__ +spaceship-travel-status=航行状況:__1__ +spaceship-integrity-status-valid=宇宙船の有効性チェック:有効:__1__ +spaceship-integrity-status-invalid=宇宙船の有効性チェック:無効:__1__ +spaceship-button-launch=打ち上げ +spaceship-button-launch-tooltip=打ち上げ準備完了 +spaceship-button-launch-disabled=打ち上げ(無効) +spaceship-button-launch-disabled-fuel-tooltip=ブースタータンク内に燃料が必要です +spaceship-button-launch-disabled-integrity-tooltip=宇宙船の有効性チェックが必要です +spaceship-button-anchor=アンカー +spaceship-button-confirm-anchor=アンカーを設置する +spaceship-button-anchor-to=__1__へのアンカー +spaceship-button-anchor-on=__1__上のアンカー +spaceship-button-stop=停止 +spaceship-button-start=遭遇 +spaceship-button-board=__1__に乗り込む +spaceship-button-scouting-back=戻る +spaceship-button-scouting-back-tooltip=アンカー設置をキャンセル +spaceship-name-the=__1__ +spaceship-button-start-integrity-check=宇宙船の有効性チェックを開始 +spaceship-heading-destination=行先 +list-destinations-alphabetically=アルファベット順 +spaceship-travel-message-new-course-plotted=新しいコースを設定しました。 +spaceship-travel-message-exiting-planet-gravity=惑星の重力圏を抜けました。 +spaceship-travel-message-navigating-planet-gravity=惑星の重力圏に侵入。 +spaceship-travel-message-exiting-star-gravity=恒星の重力圏を抜けました。 +spaceship-travel-message-navigating-star-gravity=恒星の重力圏に侵入。 +spaceship-travel-message-spatial-distortions=空間の歪みに侵入。 +spaceship-travel-message-navigating-interstellar=星間空間に到達。 +spaceship-travel-message-at-destination=目的地に到着。 +spaceship-check-message-passed=宇宙船の有効性チェックを完了。 +spaceship-check-message-failed-containment=宇宙船の有効性チェックに失敗。船体の気密性に問題。宇宙船の外壁が隙間なく宇宙船の床の上にあることを確認してください。 +spaceship-check-message-failed-console-floor=コンソールは、宇宙船の床の上に配置する必要があります。 +spaceship-check-message-failed-empty=コンソールへ到達する通路がみつかりません。 +spaceship-check-message-failed-unknown-bounds=エラー:宇宙船の境界が無効です。 +spaceship-check-message-failed-stress=失敗:船体強度への負荷が、技術の限界を超えています。 +spaceship-check-message-checking-console-floor=コンソールフロアの接続性を確認中・・・ +spaceship-check-message-checking-containment=船体の密閉性を確認中・・・ +spaceship-check-message-checking-connectivity=コンソールへの接続を確認中・・・ +spaceship-check-message-no-console=コンソールがありません +spaceship-check-message-did-not-complete=チェックは完了しませんでした +spaceship-check-message-unstable=不安定:操縦時にいくつかのセクションが切断されます。 +spaceship-check-message-valid-but-disconnecting=有効ですが不安定です:いくつかのセクションが切断されます。 +spaceship-warning-sections-disconnecting=セクションが切断されています。修理のため停止します。 +beacon-overload=ビーコン負荷過重 +beacon-overload-ended=ビーコン負荷適正 +lifesupport_title=[img=item/se-lifesupport-equipment-1] 生命維持管理 +lifesupport_efficiency_spacesuit=生命維持管理効率: __1__ +lifesupport_efficiency_no_spacesuit=生命維持管理効率: __1__ (0% in space). +lifesupport_suit=生命維持管理時間 __1__s +lifesupport_reserves=生命維持管理残り時間: __1__s +lifesupport_suit_est=生命維持管理時間: __1__s (in space) +lifesupport_reserves_est=生命維持管理残り時間: __1__s (in space) +lifesupport_environment_space=環境: 宇宙 +lifesupport_environment_spaceship-interior=環境: 宇宙船内部 (no support required) +lifesupport_environment_planet=環境: 惑星 (no support required) +lifesupport_environment_moon=環境: 月 (no support required) +lifesupport_environment_plague-planet=環境: 疫病の惑星 +lifesupport_environment_plague-moon=環境: 疫病の月 +lifesupport_environment_unknown=環境: 保護 +placement_restriction_line=[font=default-bold][color=#f5cb48]設置不可: __1__[/color][/font]\n__2__ +collision_mask_water=水上 +collision_mask_land=地上 +collision_mask_space_platform=宇宙基地 +collision_mask_spaceship=宇宙船 +structure_name_grounded=__1__ (Grounded) +structure_name_spaced=__1__ (Space) +structure_description_spaced=__1__\n[color=#ff0000]宇宙空間で生産性モジュールは使用できません。[/color] +tile_warning=[color=red]設置物の下のタイルを変更すると設置物が消失する可能性があります。[/color] +please-consider-patreon=[font=heading-1]Enjoying Space Exploration? Consider supporting me on Patreon: [color=#f5cb48]https://www.patreon.com/earendel[/color][/font]\nPatrons can have a planet or moon based on their own design added in-game. +delivery_cannon_label_payload=貨物: __1__ +delivery-cannon-coordinates-set=目標を [X:__1__ Y:__2__]に設定しました。 サテライトモードを解除するには[__CONTROL__se-remote-view__] を押してください。 +delivery-cannon-coordinates-pasted=目標を [X:__1__ Y:__2__]に設定しました。 +delivery-cannon-invalid-coordinates=目標がありません。 +delivery-cannon-valid-coordinates=X:__1__ Y:__2__ +deliver-cannon-force-mismatch=デリバリーキャノンに設定を貼り付けられませんでした。 +relative-window-settings=設定 +unit-capsule=カプセル (__1__) +climate_water_none=水:無し +climate_water_low=水:小 +climate_water_med=水:中 +climate_water_high=水:大 +climate_water_max=水:特大 +climate_moisture_none=湿度:砂漠化 +climate_moisture_low=湿度:乾燥 +climate_moisture_med=湿度:温暖 +climate_moisture_high=湿度:多湿 +climate_moisture_max=湿度:熱帯 +climate_aux_very_low=色帯:普通 +climate_aux_low=色帯:珍しい +climate_aux_med=色帯:豊か +climate_aux_high=色帯:カラフル +climate_aux_very_high=色帯:凄まじい +climate_temperature_bland=気温:快適 +climate_temperature_temperate=気温:安定 +climate_temperature_midrange=気温:安定 +climate_temperature_balanced=気温:暖かい~涼しい +climate_temperature_wild=気温:熱い~寒い +climate_temperature_extreme=気温:燃焼~凍結 +climate_temperature_cool=気温:涼しい +climate_temperature_cold=気温:寒い +climate_temperature_vcold=気温:非常に寒い +climate_temperature_frozen=気温:凍結 +climate_temperature_warm=気温:暖かい +climate_temperature_hot=気温:熱い +climate_temperature_vhot=気温:非常に熱い +climate_temperature_volcanic=気温:燃焼 +climate_trees_none=樹木:無し +climate_trees_low=樹木:まばら +climate_trees_med=樹木:木立 +climate_trees_high=樹木:林 +climate_trees_max=樹木:森 +climate_cliff_none=起伏:平面 +climate_cliff_low=起伏:なだらか +climate_cliff_med=起伏:でこぼこ +climate_cliff_high=起伏:渓谷 +climate_cliff_max=起伏:山脈 +climate_homeworld=基幹惑星 (custom climate) + +[damage-type-name] +cold=冷気 +suffocation=窒息 +meteor=隕石 + +[entity-name] +se-linked-container=空間連動チェスト +destroyed-cargo-pod=破壊された貨物ポッド +meteorite=隕石 +rocket-silo=衛星ロケットサイロ +rocket-fragment=ロケットの断片 +se-antimatter-reactor=反物質反応炉 +se-beryllium-ore=ベリリウム鉱石 +se-cargo-rocket-cargo-pod=カーゴポッド +se-cryonite=クリオナイト +se-condenser-turbine=コンデンサータービン +se-condenser-turbine-tank=コンデンサータービン +se-condenser-turbine-generator=コンデンサータービン +se-core-fragment-processor=コアフラグメント・プロセッサ +se-core-miner=コア マイニング ドリル +se-core-miner-drill=コア マイニング ドリル +se-cryogun-ice=氷の壁 +se-dimensional-anchor=次元アンカー +se-electric-boiler=電気ボイラー +se-fluid-burner-generator=流体等温ジェネレータ +se-fuel-refinery=燃料精製所 +se-gate-fragment=アーティファクトの欠片 +se-holmium-ore=ホルミニウム鉱石 +se-iridium-ore=イリジウム鉱石 +se-meteor-defence-container=隕石防衛施設 +se-meteor-defence-charger=隕石防衛施設 +se-meteor-point-defence-container=定点隕石防衛施設 +se-meteor-point-defence-charger=定点隕石防衛施設 +se-methane-ice=メタンの氷 +se-naquium-ore=ナクイウム鉱石 +se-pulveriser=粉砕機 +se-rocket-launch-pad=貨物ロケットサイロ +se-rocket-launch-pad-tank=貨物ロケットサイロ +se-rocket-launch-pad-silo=貨物ロケットサイロ +se-rocket-launch-pad-combinator=貨物ロケットサイロ +se-rocket-launch-pad-_-seat=貨物ロケットサイロ +se-rocket-launch-pad-settings=貨物ロケットサイロ +se-rocket-landing-pad=ランディングパッド +se-space-accumulator=宇宙空間用蓄電池 +se-space-accumulator-2=宇宙空間用蓄電池MK2 +se-space-astrometrics-laboratory=天体研究所 +se-space-biochemical-laboratory=生化学研究室 +se-space-assembling-machine=宇宙空間用組立機 +se-space-capsule-_-vehicle=宇宙カプセル +se-space-curved-rail=空間軌道 +se-space-decontamination-facility=除染施設 +se-space-electromagnetics-laboratory=電磁気学研究所 +se-space-genetics-laboratory=遺伝学研究所 +se-space-growth-facility=生体育成施設 +se-space-gravimetrics-laboratory=重力波研究所 +se-space-hypercooler=ハイパークーラー +se-space-laser-laboratory=光学研究所 +se-lifesupport-facility=生命維持管理施設 +se-space-manufactory=宇宙工場 +se-space-material-fabricator=素材製作所 +se-space-mechanical-laboratory=機械研究室 +se-space-particle-accelerator=粒子加速器 +se-space-particle-collider=粒子衝突型加速器 +se-space-plasma-generator=プラズマ発生器 +se-space-radiation-laboratory=放射線研究室 +se-space-radiator=放熱器 +se-space-radiator-2=強化放熱器 +se-recycling-facility=リサイクル施設 +se-space-pipe=宇宙用パイプ +se-space-pipe-long=宇宙用直線パイプ +se-space-pipe-long-straight=宇宙用直線パイプ __1__ +se-space-pipe-long-junction=宇宙用交差パイプ __1__ +se-space-pipe-to-ground=宇宙用地下パイプ +se-space-science-lab=宇宙科学研究所 +se-space-solar-panel=大型ソーラーパネル +se-space-solar-panel-2=大型ソーラーパネルMK2 +se-space-solar-panel-3=大型ソーラーパネルMK3 +se-space-spectrometry-facility=分析施設 +se-space-straight-rail=空間軌道 +se-space-supercomputer-1=スーパーコンピューター +se-space-supercomputer-2=量子スーパーコンピューター +se-space-supercomputer-3=ニューラルスーパーコンピューター +se-space-supercomputer-4=ディープスーパーコンピューター +se-space-telescope-radio=電波望遠鏡 +se-space-telescope-microwave=マイクロ波望遠鏡 +se-space-telescope=望遠鏡 +se-space-telescope-xray=X線望遠鏡 +se-space-telescope-gammaray=ガンマ線望遠鏡 +se-space-thermodynamics-laboratory=熱力学研究所 +se-space-splitter=宇宙用分配器 +se-space-transport-belt=宇宙用輸送ベルト +se-space-underground-belt=宇宙用地下ベルト +se-spaceship-antimatter-engine=宇宙船の反物質エンジン +se-spaceship-antimatter-booster-tank=宇宙船の反物質ブースタータンク +se-spaceship-console=宇宙船コンソール +se-spaceship-console-output=宇宙船コンソールの信号出力 +se-spaceship-console-alt=傷ついた宇宙船コンソール +se-spaceship-gate=宇宙船のドア +se-spaceship-ion-engine=宇宙船のイオンエンジン +se-spaceship-obstacle=スペースデブリ +se-spaceship-rocket-engine=宇宙船のロケットエンジン +se-spaceship-rocket-booster-tank=宇宙船ロケットブースタータンク +se-spaceship-wall=宇宙船の壁 +se-water-ice=氷 +se-vitamelange=ビタミランジェ +se-vulcanite=ヴァルカナイト +small-asteroid=小惑星 +medium-asteroid=中型小惑星 +large-asteroid=大型小惑星 +beacon=ビーコン +se-wide-beacon=広域ビーコン +se-wide-beacon-2=強化広域ビーコン +se-supercharger=急速充電施設 +se-addon-power-pole=追加式電柱     +se-pylon=パイロン +se-pylon-substation=広域パイロン +se-pylon-construction=建設用パイロン +se-pylon-construction-radar=レーダー付き建設用パイロン +se-pylon-construction-radar-roboport=レーダー付き建設用パイロン +se-pylon-construction-radar-radar=レーダー付き建設用パイロン +shield-projector=シールド生成器 +shield-projector-shield-floor-east=エネルギーシールド +shield-projector-shield-floor-north=エネルギーシールド +shield-projector-shield-floor-northeast=エネルギーシールド +shield-projector-shield-floor-northwest=エネルギーシールド +shield-projector-shield-floor-south=エネルギーシールド +shield-projector-shield-floor-southeast=エネルギーシールド +shield-projector-shield-floor-southwest=エネルギーシールド +shield-projector-shield-floor-west=エネルギーシールド +shield-projector-shield-wall-east=エネルギーシールド +shield-projector-shield-wall-north=エネルギーシールド +shield-projector-shield-wall-northeast=エネルギーシールド +shield-projector-shield-wall-northwest=エネルギーシールド +shield-projector-shield-wall-south=エネルギーシールド +shield-projector-shield-wall-southeast=エネルギーシールド +shield-projector-shield-wall-southwest=エネルギーシールド +shield-projector-shield-wall-west=エネルギーシールド +shield-projector-barrier=エネルギーシールド +se-naquium-heat-pipe=強化ヒートパイプ +se-naquium-heat-pipe-horizontal=水平強化ヒートパイプ +se-naquium-heat-pipe-vertical=垂直強化ヒートパイプ +se-naquium-heat-pipe-long=強化ヒートパイプ __1__ +se-deep-space-transport-belt=深宇宙搬送ベルト +se-deep-space-transport-belt-black=深宇宙搬送ベルト(黒) +se-deep-space-transport-belt-white=深宇宙搬送ベルト(白) +se-deep-space-transport-belt-red=深宇宙搬送ベルト(赤) +se-deep-space-transport-belt-yellow=深宇宙搬送ベルト(黄色) +se-deep-space-transport-belt-green=深宇宙搬送ベルト(緑) +se-deep-space-transport-belt-cyan=深宇宙搬送ベルト(水色) +se-deep-space-transport-belt-blue=深宇宙搬送ベルト(青) +se-deep-space-transport-belt-magenta=深宇宙搬送ベルト(ピンク) +se-deep-space-underground-belt=深宇宙地下搬送ベルト +se-deep-space-underground-belt-black=深宇宙地下搬送ベルト(黒) +se-deep-space-underground-belt-white=深宇宙地下搬送ベルト(白) +se-deep-space-underground-belt-red=深宇宙地下搬送ベルト(赤) +se-deep-space-underground-belt-yellow=深宇宙地下搬送ベルト(黄色) +se-deep-space-underground-belt-green=深宇宙地下搬送ベルト(緑) +se-deep-space-underground-belt-cyan=深宇宙地下搬送ベルト(水色) +se-deep-space-underground-belt-blue=深宇宙地下搬送ベルト(青) +se-deep-space-underground-belt-magenta=深宇宙地下搬送ベルト(ピンク) +se-deep-space-splitter=深宇宙分配機 +se-deep-space-splitter-black=深宇宙分配機(黒) +se-deep-space-splitter-white=深宇宙分配機(白) +se-deep-space-splitter-red=深宇宙分配機(赤) +se-deep-space-splitter-yellow=深宇宙分配機(黄色) +se-deep-space-splitter-green=深宇宙分配機(緑) +se-deep-space-splitter-cyan=深宇宙分配機(水色) +se-deep-space-splitter-blue=深宇宙分配機(青) +se-deep-space-splitter-magenta=深宇宙分配機(ピンク) +se-big-turbine=高温タービンジェネレータ +se-big-turbine-generator=高温タービンジェネレータ +se-big-turbine-tank=高温タービンジェネレータ +se-big-heat-exchanger=高度熱交換器 +se-delivery-cannon=デリバリーキャノン +se-delivery-cannon-settings=デリバリーキャノン +se-delivery-cannon-energy-interface=デリバリーキャノン +se-delivery-cannon-chest=デリバリーキャノンチェスト +se-delivery-cannon-weapon=戦闘用デリバリーキャノン +se-delivery-cannon-weapon-settings=戦闘用デリバリーキャノン +se-delivery-cannon-weapon-energy-interface=戦闘用デリバリーキャノン +se-spaceship-clamp=宇宙船停留所 +se-spaceship-clamp-place=宇宙船停留所 +se-spaceship-clamp-power-pole-external-east=宇宙船停留所 +se-spaceship-clamp-power-pole-external-west=宇宙船停留所 +se-energy-transmitter-emitter=エナジービーム照射機 +se-energy-transmitter-chamber=エナジービームチャンバー +se-energy-transmitter-injector=エナジービーム注入器 +se-energy-transmitter-injector-reactor=エナジービーム注入器 +se-energy-receiver=エナジービーム受信機 +se-energy-beam-defence=アンブレラ +se-nexus=ネクサス +se-nexus-charger=ネクサス +se-space-probe-rocket=宇宙探索ロケット +se-space-probe-rocket-silo=宇宙探索ロケットサイロ + +[entity-description] +pipe=液体を輸送します。 +pipe-to-ground=地下を通して液体を輸送します。 +straight-rail=軌道に沿って列車が進みます。 +curved-rail=軌道に沿って列車が進みます。 +stone-furnace=燃料を消費し鉱石などを溶かします。 +steel-furnace=燃料を消費し鉱石などを溶かします。 +electric-furnace=電気によって鉱石などを溶かします。 +burner-assembling-machine=燃料式の組み立て機です。 +assembling-machine-1=自動でアイテムをクラフトします。 +assembling-machine-2=自動でアイテムをクラフトします。より高速で、多くのモジュールスロットをもっています。 +assembling-machine-3=自動でアイテムをクラフトします。より高速で、多くのモジュールスロットをもっています。 +oil-refinery=原油を様々な液体に加工します。 +se-fuel-refinery=燃料を自動でクラフトします。 +chemical-plant=様々な化学処理を行います。 +lab=自動で研究を行います。 +burner-lab=燃料式の研究所です。 +transport-belt=アイテムを運びます。 +fast-transport-belt=アイテムを運びます。より高速で、多くのアイテムを運ぶことができます。 +express-transport-belt=アイテムを運びます。より高速で、多くのアイテムを運ぶことができます。 +underground-belt=地下を通してアイテムを運びます。 +fast-underground-belt=地下を通してアイテムを運びます。より高速で、多くのアイテムを運ぶことができます。 +express-underground-belt=地下を通してアイテムを運びます。より高速で、多くのアイテムを運ぶことができます。 +splitter=コンベアのアイテムを合流、分岐、フィルタリングするための機械です。 +fast-splitter=コンベアのアイテムを合流、分岐、フィルタリングするための機械です。より高速で、多くのアイテムを運ぶことができます。 +express-splitter=コンベアのアイテムを合流、分岐、フィルタリングするための機械です。より高速で、多くのアイテムを運ぶことができます。 +rocket-silo=宇宙空間に衛星を打ち上げ天体観測を行います。まれに新しい惑星を発見し、少量のロケットサイエンスパックを得ることがあります。 +se-antimatter-reactor=物質と反物質を対消滅させ莫大な熱量を出力します。 +se-beryllium-ore=ベリリウム鉱石。 +se-condenser-turbine=75%の性能の蒸気タービン。利用した蒸気の99%を水に再利用できます。 +se-core-fragment-processor=コアフラグメントから資源を抽出します。 +se-core-miner=惑星や月から無限に資源を得ることができますが、同じ星に複数稼働している場合資源効率が低下します。50MWを消費します。 +se-core-miner-drill=惑星や月から無限に資源を得ることができますが、同じ星に複数稼働している場合資源効率が低下します。50MWを消費します。 +se-dimensional-anchor=[font=default-bold][color=#f5cb48]Placement restriction: Close Star Orbit[/color][/font]\n空間異常の安定点として、惑星の重力井戸を利用します。 +se-electric-boiler=電気を使って水から蒸気を生成します。 +se-fluid-burner-generator=液体の燃料(液体ロケット燃料など)を利用して発電を行います。小さくコンパクトですが大規模な蒸気発電と比べ効率の悪い発電方法です。宇宙用に設計されています。 +se-holmium-ore=ホルミウム鉱石。 +se-iridium-ore=イリジウム鉱石。 +se-meteor-defence-container=隕石から星全体を守ることができますが、一度に一つの砲弾しか発射することが出来ません。隕石用砲弾を搭載し、完全に充電する必要があります。命中率80% 発射後再充電する必要があります。再充電には20MWを消費します。 +se-meteor-defence-charger=隕石から星全体を守ることができますが、一度に一つの砲弾しか発射することが出来ません。隕石用砲弾を搭載し、完全に充電する必要があります。命中率80% 発射後再充電する必要があります。再充電には20MWを消費します。 +se-meteor-point-defence-container=隕石から周辺の地表を守ります。一度に最大4つの砲弾します。隕石用砲弾を搭載し、完全に充電する必要があります。射程64 命中率50% 発射後の再充電には時間がかかります。 +se-meteor-point-defence-charger=隕石から周辺の地表を守ります。一度に最大4つの砲弾します。隕石用砲弾を搭載し、完全に充電する必要があります。射程64 命中率50% 発射後の再充電には時間がかかります。 +se-naquium-ore=ナクイウム鉱石。 +se-rocket-launch-pad=宇宙に資材を打ち上げることができます。フロントドアの近くで __CONTROL__toggle-driving__ を押すことでプレイヤーが乗り込むこともできます。 +se-rocket-landing-pad=貨物ロケットの積荷の落下地点 +se-space-assembling-machine=宇宙空間で動作するように調整された組立機 +se-space-astrometrics-laboratory=天体情報を組み合わせ、比較し、定量化します。 +se-space-biochemical-laboratory=バイオ化学を専門に扱う高度な化学実験室。また、より多くの基本的な化学および石油処理を行うことができます。 +se-space-capsule-_-vehicle=最も近い惑星表面に乗組員を降下するために使用することができます。 __CONTROL__toggle-driving__を使用してカプセルに乗り込みます。 +se-space-decontamination-facility=無菌環境で使用するための物質を洗浄し、低圧条件下で使用するための液体を用意します。 +se-space-electromagnetics-laboratory=強い磁界と非常に高い電圧を扱うための機器。 +se-space-genetics-laboratory=文化の遺伝子配列決定、遺伝子改変、および遺伝子プリンティングに特化したラボ。 +se-space-gravimetrics-laboratory=重力擾乱を分析し、シミュレートします。 +se-space-growth-facility=微小重力など、他では不可能なさまざまな制御された条件下で生物標本を成長させる施設。 +se-space-hypercooler=冷却材で熱交換行い、一方をより高温に、もう一方をより低温にします。 +se-space-laser-laboratory=レーザーを用いた実験を行っています。防護メガネの着用が義務付けられています。 +se-lifesupport-facility=過酷な環境での生存を支えます。 +se-space-manufactory=巨大な組立機、より複雑なレシピを扱えます。宇宙空間(または宇宙船内)のみで動作します。 +se-space-material-fabricator=粒子衝突と3Dプリンターで新たな素材を合成します。 +se-space-mechanical-laboratory=工業的処理を担当:粉砕、引き裂き、せん断、振動など +se-space-particle-accelerator=粒子を亜光速まで加速します +se-space-particle-collider=粒子を亜光速で衝突させ、その結果を分析します +se-space-pipe=パイプの上を歩くことができます。 +se-space-pipe-long=流体を素早く長距離を移動させる際に低コストで良い選択肢です。上を歩くことができます。 +se-space-pipe-long-straight=Length __1__. 側面に接続する事はできません。平衡にパイプを並べたり、素早く長距離を移動させるのに役立つでしょう。 +se-space-pipe-long-junction=Length __1__. 中央部分に側面から接続できます。 工場のライン内を素早く移動させるのに役立つでしょう。 +se-space-pipe-to-ground=高価であり、限られた範囲、必要な場合にのみ使用されます。パイプの上を歩くことができます。 +se-space-plasma-generator=様々なプラズマを生成します。 +se-space-radiation-laboratory=比較的安全に放射性物質で遊ぶ場所。ウラン処理に使用することができます。 +se-space-radiator=過熱熱流体から余分な熱を放熱します。 +se-space-radiator-2=過熱熱流体から余分な熱を放熱します。より高速です。 +se-recycling-facility=スクラップや他の副産物をリサイクルします +se-space-solar-panel=大型のソーラーパネル。 +se-space-solar-panel-2=大型の高効率なソーラーパネル。 +se-space-solar-panel-3=大型の非常に高効率なソーラーパネル。 +se-space-spectrometry-facility=分光測光、ガスクロマトグラフィー、質量分析、およびその他の分光法。 壁に火をつけ、曲げて、どこに当たったかを確認します。 +se-space-supercomputer-1=データ操作、処理およびシミュレーション。 +se-space-supercomputer-2=量子コンピューティング。改良されたデータの操作、処理およびシミュレーション。 +se-space-supercomputer-3=量子コンピューティングフレームワークと適応ニューラルネット。さらに改良されたデータの操作、処理およびシミュレーション。 +se-space-supercomputer-4=空間歪曲、高次元化を利用して、処理密度とエネルギー輸送を向上させたナノエンジニアリングの半有機的なスーパーコンピュータ。非常に改良されたデータの操作、処理およびシミュレーション。 +se-space-straight-rail=宇宙用に設計されていますが、地上でも利用することができます。 +se-space-science-lab=高度なサイエンスパックを使うことができます。宇宙に設置する必要があります。 +se-space-telescope=可視スペクトル周辺波長に最適化された望遠鏡。 +se-space-telescope-gammaray=ガンマ線は屈折しづらいため、代わりにミラーや特別な検出器を使用した強力な望遠鏡 +se-space-telescope-xray=X線のほとんどは大気によってブロックされています。この望遠鏡は大気の問題がない宇宙に設置されます。 +se-space-telescope-microwave=マイクロ波を検出し、宇宙背景輻射を観測する望遠鏡。 +se-space-telescope-radio=遠距離からの微弱な電波を検出するための巨大な望遠鏡。 +se-space-thermodynamics-laboratory=超高温状態を含む研究を行っています。また、精錬などの基本的な熱プロセスを実行することができます +se-space-transport-belt=アイテムが無重力で飛んでいかないようになっています。 +se-spaceship-antimatter-engine=反物質ストリームを消滅させます。 宇宙船の隔壁としてカウントされます。 +se-spaceship-ion-engine=[font=default-bold][color=#f5cb48]Placement restriction: Spaceship Floor[/color][/font]\n少量のイオンストリームを消費し、大きな推進力を発揮します。宇宙船の隔壁としてカウントされます。 +se-spaceship-antimatter-booster-tank=反物質を保持します。宇宙船の打ち上げに必要です。 +se-spaceship-console=宇宙船を惑星、衛星、軌道、および小惑星帯に移動するために使用します。宇宙船フロア上に置かなければなりません。宇宙船は壁かドアで完全に密封され隙間のないようにする必要があります。宇宙船の有効性チェックによって問題箇所を発見できます。 +se-spaceship-gate=ドアが開いたときにフォースフィールドは減圧を停止します。宇宙船の隔壁としてカウントされます。 +se-spaceship-rocket-engine=液体ロケット燃料を利用して推進力を得ます。宇宙船の隔壁としてカウントされます。 +se-spaceship-rocket-booster-tank=液体ロケット燃料を保持します。宇宙船の打ち上げに必要です。 +beacon=8つのモジュールスロットを持ちます。モジュールの効果を3マス以内の味方の設置物に伝搬します。複数のビーコンからの影響は過重負荷を引き起こし、動作を停止させます。 +se-wide-beacon=15のモジュールスロットを持ちます。モジュールの効果を14マス以内の味方の設置物に伝搬します。複数のビーコンからの影響は過重負荷を引き起こし、動作を停止させます。 +se-wide-beacon-2=20のモジュールスロットを持ちます。モジュールの効果を14マス以内の味方の設置物に伝搬します。複数のビーコンからの影響は過重負荷を引き起こし、動作を停止させます。 +kr-singularity-beacon=小型ですが、伝搬率の高いビーコンです。15のモジュールスロットを持ちます。モジュールの効果を2マス以内の味方の設置物に伝搬します。複数のビーコンからの影響は過重負荷を引き起こし、動作を停止させます。 +se-supercharger=64のロボットを一度に高速で充電できます。最大で1GWを消費します。 +se-addon-power-pole=設置物に取り付けることができる小型の電柱です。配線を詳細に制御するためにも使えます。 +se-pylon=高度な配電設備です。64マスの接続範囲を持ちます。 +se-pylon-substation=高度な配電設備です。64マスの接続と電力供給範囲を持ちます。 +se-pylon-construction=高度な配電設備です。64マスの接続と建築範囲を持ちます。 +se-pylon-construction-radar=高度な配電設備です。64マスの接続、電力供給範囲と256マスの建築・レーダー範囲、4マスの物流範囲を持ちます。 +se-shield-projector=エネルギーシールドを生成します。充電中やシールドが損傷した時により多くのエネルギーを消費します。敵の投射物を防ぐことができます。 +se-big-turbine=5000℃の蒸気を消費する巨大なジェネレータです。エネルギーの2%は500℃の蒸気として排出され、残りの蒸気は水として側面から排出されます。 +se-big-heat-exchanger=超高温・高出力に対応した大型の熱交換機です。 +se-delivery-cannon=他惑星を含む超長距離まで資源を撃ち込むことができるレールガンです。対応したチェストを指定しない場合、周囲にダメージを与えます。1GJの容量を持ち、充電速度は50MWです。 +se-delivery-cannon-chest=デリバリーキャノンカプセルを受け止められるように強化されたチェストです。安全に受け取るためには空きスペースが必要となります。 +se-delivery-cannon-weapon=他惑星を含む超長距離まで弾を撃ち込むことができるレールガンです。注意して使用して下さい。 +se-space-accumulator=高容量の蓄電池です。 +se-space-accumulator-2=非常に高容量の蓄電池です。 +se-energy-transmitter-emitter=surface間のエナジービームを照射する中心施設です。エネルギーを熱量として送信する他、兵器として運用可能です。エナジービームチャンバーとエナジービーム注入器を取り付ける必要があります。ビームの強さは注入器の数に応じて強まります。 +se-energy-transmitter-chamber=エナジービーム照射器に取り付ける必要があります。追加のチャンバーは側面もしくは背面に接続できます。エナジービーム注入器は側面のみに接続できます。 +se-energy-transmitter-injector=エナジービームチャンバーの側面に取り付けます。一定の電力を消費し、エナジービーム照射器の出力は注入器の数に応じて増加します。 +se-energy-transmitter-injector-reactor=エナジービームチャンバーの側面に取り付けます。一定の電力を消費し、エナジービーム照射器の出力は注入器の数に応じて増加します。 +se-energy-receiver=エナジービームから熱量を受け取ります。エナジービーム照射機がエネルギーモードになっていて、目標を受信機に設定している必要があります。 +se-energy-beam-defence=敵のエナジービームやCMEを防ぎます。基礎消費は10GWです。 +spidertron=ロケットが着地点に設定されていない場合、貨物ロケットから展開することができる。 +se-nexus=動いている宇宙船でのみ機能し、エネルギー消費は速度に比例します。恒星間移動からデータを得ることができるが、データ生成は船の運動エネルギーに基づいて行われます。ネクサスは空間歪曲航法で作動するように設計されていて、適切な技術を用いれば銀河系からの脱出を可能にします。\n宇宙船強度を2000消費します。 +se-nexus-charger=動いている宇宙船でのみ機能し、エネルギー消費は速度に比例します。恒星間移動からデータを得ることができるが、データ生成は船の運動エネルギーに基づいて行われます。ネクサスは空間歪曲航法で作動するように設計されていて、適切な技術を用いれば銀河系からの脱出を可能にします。 +se-space-probe-rocket-silo=宇宙探査ロケットを打ち上げるためのロケットサイロ。 +se-spaceship-wall=船の一部と見なされるために宇宙船の床の上に配置する必要があります。宇宙船の隔壁としてカウントされます。斜めの配置は隙間があるとみなされます。 +se-linked-container=超次元空間を介してほかのチェストとリンクしているチェスト。 コンテナのリンクは、最初に置かれたsurfaceに依存します。 + +[equipment-name] +energy-shield-equipment=エネルギーシールド +energy-shield-mk2-equipment=エネルギーシールドMK2 +energy-shield-mk3-equipment=エネルギーシールドMK3 +energy-shield-mk4-equipment=エネルギーシールドMK4 +energy-shield-mk5-equipment=エネルギーシールドMK5 +energy-shield-mk6-equipment=エネルギーシールドMK6 +se-adaptive-armour-equipment-1=自己修復装甲MK1 +se-adaptive-armour-equipment-2=自己修復装甲MK2 +se-adaptive-armour-equipment-3=自己修復装甲MK3 +se-adaptive-armour-equipment-4=自己修復装甲MK4 +se-adaptive-armour-equipment-5=自己修復装甲MK5 +se-rtg-equipment=ポータブルRTG +se-rtg-equipment-2=ポータブルRTG MK2 +se-lifesupport-equipment-1=生命維持装置 MK1 +se-lifesupport-equipment-2=生命維持装置 MK2 +se-lifesupport-equipment-3=生命維持装置 MK3 +se-lifesupport-equipment-4=生命維持装置 MK4 + +[equipment-description] +energy-shield-equipment=保護バブルを形成します。高速にチャージされますが多くのエネルギーを必要とします。 +energy-shield-mk2-equipment=保護バブルを形成します。高速にチャージされますが多くのエネルギーを必要とします。 +energy-shield-mk3-equipment=保護バブルを形成します。高速にチャージされますが多くのエネルギーを必要とします。 +energy-shield-mk4-equipment=保護バブルを形成します。高速にチャージされますが多くのエネルギーを必要とします。 +energy-shield-mk5-equipment=保護バブルを形成します。高速にチャージされますが多くのエネルギーを必要とします。 +energy-shield-mk6-equipment=保護バブルを形成します。高速にチャージされますが多くのエネルギーを必要とします。 +se-adaptive-armour-equipment-1=自己修復機能を持つアーマー。ゆっくりと時間をかけてアーマーが回復し続けます。 +se-adaptive-armour-equipment-2=自己修復機能を持つアーマー。ゆっくりと時間をかけてアーマーが回復し続けます。 +se-adaptive-armour-equipment-3=自己修復機能を持つアーマー。ゆっくりと時間をかけてアーマーが回復し続けます。 +se-adaptive-armour-equipment-4=自己修復機能を持つアーマー。ゆっくりと時間をかけてアーマーが回復し続けます。 +se-adaptive-armour-equipment-5=自己修復機能を持つアーマー。ゆっくりと時間をかけてアーマーが回復し続けます。 +se-rtg-equipment=放射性同位元素熱電発電機。放射性崩壊からの熱を電気へ変換する携帯用発電機。燃料の追加無しで何十年も稼働します。 +se-rtg-equipment-2=放射性同位元素熱電発電機。放射性崩壊からの熱を電気へ変換する携帯用発電機。燃料の追加無しで何十年も稼働します。 +se-lifesupport-equipment-1=生命維持効率が100%増加します(重複可)。スラスタースーツ以外では増加率は半分になり、宇宙では機能しません。 +se-lifesupport-equipment-2=生命維持効率が200%増加します(重複可)。スラスタースーツ以外では増加率は半分になり、宇宙では機能しません。 +se-lifesupport-equipment-3=生命維持効率が400%増加します(重複可)。スラスタースーツ以外では増加率は半分になり、宇宙では機能しません。 +se-lifesupport-equipment-4=生命維持効率が800%増加します(重複可)。スラスタースーツ以外では増加率は半分になり、宇宙では機能しません。 + + +[fluid-name] +se-antimatter-stream=反物質ストリーム +se-bio-sludge=バイオ廃液 +se-beryllium-hydroxide=水酸化ベリリウム +se-contaminated-bio-sludge=汚染バイオ廃液 +se-contaminated-space-water=汚染コズミックウォーター +se-cryonite-slush=液体クリオナイト +se-chemical-gel=ケミカルジェル +se-decompressing-steam=圧縮蒸気 +se-liquid-rocket-fuel=液体ロケット燃料 +se-methane-gas=メタンガス +se-methane-gas-mixed=混合メタンガス +se-nutrient-gel=栄養ジェル +se-neural-gel=ニューラルジェル +se-neural-gel-2=発展ニューラルジェル +se-ion-stream=イオンストリーム +se-plasma-stream=プラズマストリーム +se-particle-stream=粒子ストリーム +se-proton-stream=プロトンストリーム +se-space-coolant=冷却材 25°C +se-space-coolant-hot=冷却材 25°C +se-space-coolant-warm=冷却材 -10°C +se-space-coolant-cold=冷却材 -100°C +se-space-coolant-supercooled=冷却材 -273°C +se-space-water=コズミックウォーター + +[fluid-description] +se-space-water=宇宙施設での利用に適した、凍結しにくい液体 +se-space-coolant=冷却材のデフォルトの温度。 +se-space-coolant-hot=冷却材のデフォルトの温度。 +se-space-coolant-warm=冷却材は、熱ラジエータによって冷却されます。 +se-space-coolant-cold=ハイパークーリング後の冷却材の温度。 +se-space-coolant-supercooled=ハイパークーリングを繰り返した後の冷却材の温度。 + + +[fuel-category-name] +antimatter=反物質燃料 + +[item-group-name] +space=宇宙 +science=研究 +spaceship=スペースシップ +bob-fluids=流体 +resources=資源 +intermediate-products=中間生産物 +combat=装備品と戦闘 + +[item-name] +spidertron=スパイダートロン +core-fragment=コアフラグメント(__1__) +effectivity-module-4=エネルギー効率モジュール4 +effectivity-module-5=エネルギー生産効率モジュール5 +effectivity-module-6=エネルギー生産効率モジュール6 +effectivity-module-7=エネルギー生産効率モジュール7 +effectivity-module-8=エネルギー生産効率モジュール8 +effectivity-module-9=エネルギー生産効率モジュール9 +glass=ガラス +productivity-module-4=生産力モジュール4 +productivity-module-5=生産力モジュール5 +productivity-module-6=生産力モジュール6 +productivity-module-7=生産力モジュール7 +productivity-module-8=生産力モジュール8 +productivity-module-9=生産力モジュール9 +rocket-fuel=固体ロケット燃料 +sand=砂 +solid-sand=固めた砂 +washed-sand=砂(洗浄済) +satellite=航法衛星 +se-satellite-telemetry=衛星遠隔測定データ +se-antimatter-canister=反物質キャニスター +se-astrometric-data=天体座標データ +se-astronomic-catalogue-1=天体カタログ +se-astronomic-catalogue-2=大域天体カタログ +se-astronomic-catalogue-3=総合天体カタログ +se-astronomic-catalogue-4=拡張総合天体カタログ +se-astronomic-insight=天文学的インサイト +se-astronomic-science-pack-1=天文学サイエンスパック 1 +se-astronomic-science-pack-2=天文学サイエンスパック 2 +se-astronomic-science-pack-3=天文学サイエンスパック 3 +se-astronomic-science-pack-4=天文学サイエンスパック 4 +se-atomic-data=原子データ +se-beryllium-ore=ベリリウム鉱石 +se-ballistic-shielding-data=Ballistic shielding data +se-beryllium-ore-crushed=粉砕したベリリウム +se-beryllium-ore-washed=粉砕したベリリウム(洗浄済) +se-beryllium-plate=ベリリウム板 +se-beryllium-powder=ベリリウム粉末 +se-beryllium-ingot=ベリリウムインゴット +se-beryllium-sulfate=硫酸塩ベリリウム +se-bio-combustion-data=バイオ燃焼データ +se-bio-combustion-resistance-data=バイオ燃焼抵抗データ +se-bio-spectral-data=バイオスペクトルデータ +se-biochemical-data=生化学的データ +se-biochemical-resistance-data=生化学抵抗データ +se-bioculture=バイオデータ +se-bioelectrics-data=生体電気データ +se-biological-catalogue-1=生物カタログ +se-biological-catalogue-2=大域生物カタログ +se-biological-catalogue-3=総合生物カタログ +se-biological-catalogue-4=拡張総合生物カタログ +se-biological-insight=生物学的インサイト +se-biological-science-pack-1=生物化学サイエンスパック 1 +se-biological-science-pack-2=生物化学サイエンスパック 2 +se-biological-science-pack-3=生物化学サイエンスパック 3 +se-biological-science-pack-4=生物化学サイエンスパック 4 +se-biomechanical-data=生体力学的データ +se-biomechanical-resistance-data=生体力学的抵抗データ +se-boson-data=ボゾンデータ +se-broken-data=壊れたデータカード +se-canister=セキュアキャニスター +se-biogun=バイオガン +se-bloater-ammo=バイオガン弾薬 +se-pheromone-ammo=フェロモン注射弾 +se-cryogun=クリオガン +se-cryogun-ammo=クリオガン弾薬 +se-rocket-launch-pad-silo-dummy-ingredient-item=貨物ロケット +se-rocket-launch-pad-silo-dummy-result-item=貨物ロケット +se-cargo-rocket-cargo-pod=カーゴポッド +se-cargo-rocket-fuel-tank=ロケットの燃料タンク +se-cargo-rocket-section=貨物ロケットセクション +se-cargo-rocket-section-packed=梱包された貨物ロケットセクション +se-cold-thermodynamics-data=コールド熱力学データ +se-comparative-genetic-data=比較遺伝子データ +se-compressive-strength-data=圧縮強度データ +se-conductivity-data=導電率データ +se-contaminated-scrap=汚染されたスクラップ +se-core-fragment-omni=コアフラグメント +se-corrosion-resistance-data=耐腐食性データ +se-cryogenics-data=極低温データ +se-cryonite=クリオナイト +se-cryonite-crushed=粉砕したクリオナイト +se-cryonite-washed=粉砕したクリオナイト(洗浄済み) +se-cryonite-rod=クリオナイトロッド +se-cryonite-ion-exchange-beads=陰イオン交換ビーズ +se-dark-energy-data=暗黒エネルギーデータ +se-darkmatter-data=ダークマターのデータ +se-data-storage-substrate-cleaned=ポリッシュデータストレージ基質 +se-data-storage-substrate=ラフデータストレージ基質 +se-decompression-data=減圧データ +se-decompression-resistance-data=減圧抵抗データ +se-universal-catalogue=ユニバーサルカタログ +se-deep-space-science-pack=深宇宙サイエンスパック +se-deep-space-science-pack-1=深宇宙サイエンスパック 1 +se-deep-space-science-pack-2=深宇宙サイエンスパック 2 +se-deep-space-science-pack-3=深宇宙サイエンスパック 3 +se-deep-space-science-pack-4=深宇宙サイエンスパック 4 +se-doppler-shift-data=ドップラー転換データ +se-durability-data=耐久性データ +se-electrical-shielding-data=電気遮蔽データ +se-electromagnetic-field-data=電磁界データ +se-empty-data=ブランクデータカード +se-empty-lifesupport-canister=空の生命維持管理キャニスター +se-energy-catalogue-1=エネルギーカタログ +se-energy-catalogue-2=幅広いエネルギーカタログ +se-energy-catalogue-3=総合エネルギーカタログ +se-energy-catalogue-4=拡張エネルギーカタログ +se-energy-insight=エナジーインサイト +se-energy-science-pack-1=エネルギーサイエンスパック 1 +se-energy-science-pack-2=エネルギーサイエンスパック 2 +se-energy-science-pack-3=エネルギーサイエンスパック 3 +se-energy-science-pack-4=エネルギーサイエンスパック 4 +se-entanglement-data=量子もつれデータ +se-exotic-fission-data=エキゾチックな核分裂データ +se-exotic-singularity-data=シンギュラリティデータ +se-explosion-shielding-data=爆発遮蔽データ +se-experimental-alloys-data=実験用合金データ +se-experimental-biochemical-data=実験生化学的データ +se-experimental-bioculture=実験バイオ文化 +se-experimental-genetic-data=実験遺伝子データ +se-experimental-material-decay-data=実験材料崩壊データ +se-experimental-material-spectral-data=実験材料スペクトルデータ +se-experimental-material=実験材料プロトタイプ +se-experimental-specimen=実験バイオマス +se-experimental-superconductor=超伝導体のプロトタイプ +se-forcefield-data=フォースフィールドのデータ +se-friction-data=摩擦データ +se-fusion-test-data=核融合試験データ +se-gammaray-detector=ガンマ線検出器 +se-gammaray-observation-data=ガンマ線観測データ +se-gammaray-test-data=ガンマ・レイ・データ +se-gate-fragment=アーティファクトの破片 +se-genetic-data=遺伝子データ +se-gravity-wave-observation-data=重力波観測データ +se-gravity-wave-data=重力波データ +se-gravimetric-observation-data=重力観測データ +se-gravimetric-test-data=重量測定試験データ +se-gravitational-lensing-data=重力レンズデータ +se-heat-shielding=断熱材 +se-holmium-ore=ホルミウム鉱石 +se-holmium-ore-crushed=粉砕したホルミウム +se-holmium-ore-washed=粉砕したホルミウム(洗浄済み) +se-holmium-powder=ホルミウム粉末 +se-holmium-plate=ホルミウム板 +se-holmium-ingot=ホルミウムインゴット +se-hot-thermodynamics-data=高温熱力学データ +se-impact-shielding-data=衝撃遮蔽データ +se-infrared-observation-data=赤外線観測データ +se-ion-spectrometry-data=イオン分析データ +se-iridium-ore=イリジウム鉱石 +se-iridium-ore-crushed=粉砕したイリジウム +se-iridium-ore-washed=粉砕したイリジウム(洗浄済み) +se-iridium-piledriver=イリジウム・パイルドライバー +se-iridium-powder=イリジウム粉末 +se-iridium-plate=イリジウム板 +se-iridium-ingot=イリジウムインゴット +se-junk-data=ジャンクデータカード +se-laser-shielding-data=レーザー遮蔽データ +se-lepton-data=レプトンデータ +se-lifesupport-canister=生命維持管理キャニスター +se-machine-learning-data=機械学習データ +se-magnetic-canister=磁気キャニスター +se-magnetic-monopole-data=磁気モノポールのデータ +se-material-decay-data=材料崩壊データ +se-material-science-pack-1=材料科学パック 1 +se-material-science-pack-2=材料科学パック 2 +se-material-science-pack-3=材料科学パック 3 +se-material-science-pack-4=材料科学パック 4 +se-material-spectral-data=材料スペクトルデータ +se-material-testing-pack=材料試験パック +se-material-catalogue-1=材料カタログ +se-material-catalogue-2=大域素材カタログ +se-material-catalogue-3=総合素材カタログ +se-material-catalogue-4=拡張総合材質カタログ +se-material-insight=材質インサイト +se-medpack=回復キット +se-medpack-2=回復キット 2 +se-medpack-3=回復キット 3 +se-medpack-4=回復キット 4 +se-meteor-defence=隕石防衛施設 +se-meteor-defence-ammo=隕石防衛施設弾薬 +se-meteor-point-defence=定点隕石防衛施設 +se-meteor-point-defence-ammo=定点隕石防衛施設弾薬 +se-methane-ice=メタンの氷 +se-micro-black-hole-data=マイクロブラックホールのデータ +se-microwave-observation-data=マイクロ波観測データ +se-negative-pressure-data=陰圧データ +se-nano-cold-thermodynamics-data=ナノ材料低温熱力学データ +se-nano-compressive-strength-data=ナノ材料圧縮強度データ +se-nano-hot-thermodynamics-data=ナノ材料高温熱力学データ +se-nanomaterial=ナノ材料 +se-nano-tensile-strength-data=ナノ材料引張強度データ +se-naquium-ore=ナクイウム鉱石 +se-naquium-ore-crushed=粉砕したナクイウム +se-naquium-ore-washed=粉砕したナクイウム(洗浄済み) +se-naquium-powder=ナクイウム粉末 +se-naquium-plate=ナクイウム板 +se-naquium-ingot=ナクイウムインゴット +se-neural-anomaly-data=神経異常データ +se-nutrient-vat=栄養素データ +se-observation-frame-blank=空白の観測フレーム +se-observation-frame-gammaray=ガンマ線観測フレーム +se-observation-frame-infrared=赤外線観測フレーム +se-observation-frame-microwave=マイクロ波観測フレーム +se-observation-frame-radio=電波観測フレーム +se-observation-frame-uv=UV観測フレーム +se-observation-frame-visible=可視観測フレーム +se-observation-frame-xray=X線観測フレーム +se-orbital-data=軌道計算データ +se-particle-beam-shielding-data=粒子線遮蔽データ +se-plague-bomb=疫病ロケット +se-plasma-canister=プラズマキャニスター +se-plasma-electrodynamics-data=プラズマ電気力学データ +se-plasma-thermodynamics-data=プラズマ熱力学データ +se-polarisation-data=偏光データ +se-pressure-containment-data=圧力封じ込めデータ +se-quantum-phenomenon-data=量子現象データ +se-quark-data=クォークデータ +se-radiation-data=放射線データ +se-radiation-exposure-data=放射線被ばくデータ +se-radiation-exposure-resistance-data=耐放射線性データ +se-radiation-shielding-data=放射線遮蔽データ +se-radio-observation-data=電波観測データ +se-rigidity-data=剛性データ +se-rtg-equipment=ポータブルRTG +se-rtg-equipment-2=ポータブルRTG MK2 +se-scrap=スクラップ +se-shear-strength-data=せん断強度データ +se-significant-data=重要なデータ +se-significant-specimen=重要なバイオマス +se-singularity-data=シンギュラリティデータ +se-space-capsule=宇宙カプセル +se-space-mirror=マルチスペクトルミラー +se-space-platform-plating=宇宙プラットフォームプレート +se-space-platform-scaffold=宇宙プラットフォーム足場 +se-space-rail=空間起動 +se-spaceship-floor=宇宙船の床 +se-specimen=バイオマス +se-subatomic-data=素粒子データ +se-superconductivity-data=超伝導データ +se-superconductor=超伝導体 +se-superconductive-cable=超電導ケーブル +se-tensile-strength-data=引張強度データ +se-tesla-ammo=テスラ銃の弾薬 +se-tesla-gun=テスラ銃 +se-thruster-suit=スラスタースーツ +se-thruster-suit-2=スラスタースーツMK2 +se-thruster-suit-3=スラスタースーツMK3 +se-thruster-suit-4=スラスタースーツMK4 +se-timespace-anomaly-data=時空異常データ +se-used-lifesupport-canister=使用済み生命維持管理キャニスター +se-uv-observation-data=UV観測データ +se-visible-observation-data=可視観測データ +se-vitamelange=ビタミランジェ +se-vitamelange-nugget=粉末ビタミランジェ +se-vitamelange-roast=焙煎ビタミランジェ +se-vitamelange-spice=スパイスビタミランジェ +se-vitamelange-extract=抽出ビタミランジェ +se-vulcanite=ヴァルカナイト +se-vulcanite-crushed=粉砕したヴァルカナイト +se-vulcanite-washed=粉砕したヴァルカナイト(洗浄済み) +se-vulcanite-block=ヴァルカナイトブロック +se-vulcanite-ion-exchange-beads=陽イオン交換ビーズ +se-water-ice=氷 +se-xray-observation-data=X線観測データ +se-zero-point-energy-data=ゼロ点エネルギーデータ +se-rocket-science-pack=宇宙サイエンスパック +space-science-pack=最適化科学パック +speed-module-4=生産速度モジュール4 +speed-module-5=生産速度モジュール5 +speed-module-6=生産速度モジュール6 +speed-module-7=生産速度モジュール7 +speed-module-8=生産速度モジュール8 +speed-module-9=生産速度モジュール9 +se-aeroframe-pole=軽量柱 +se-aeroframe-scaffold=軽量骨組み +se-aeroframe-bulkhead=軽量隔壁 +se-lattice-pressure-vessel=格子型圧力容器 +se-heavy-girder=重量梁材 +se-heavy-bearing=重量ベアリング +se-heavy-composite=重量合成素材 +se-heavy-assembly=重量構築物 +se-bioscrubber=生物性浄化機 +se-vitalic-epoxy=生物性エポキシ樹脂 +se-vitalic-reagent=生物性試薬 +se-vitalic-acid=生物性酸液 +se-self-sealing-gel=防漏ジェル +se-holmium-cable=ホルミウム線 +se-holmium-solenoid=ホルミウムコイル +se-quantum-processor=量子プロセッサー +se-dynamic-emitter=強化放射器 +se-naquium-processor=ナクイウムプロセッサー +se-naquium-cube=ナクイウムキューブ +se-naquium-tessaract=四次元超立方体 +se-wide-beacon=広域ビーコン +se-wide-beacon-2=強化広域ビーコン +se-lifesupport-equipment-1=生命維持装置 MK1 +se-lifesupport-equipment-2=生命維持装置 MK2 +se-lifesupport-equipment-3=生命維持装置 MK3 +se-lifesupport-equipment-4=生命維持装置 MK4 +se-naquium-heat-pipe=強化ヒートパイプ +se-naquium-heat-pipe-horizontal=水平強化ヒートパイプ +se-naquium-heat-pipe-vertical=垂直強化ヒートパイプ +se-naquium-heat-pipe-long=強化ヒートパイプ __1__ +se-deep-space-transport-belt=深宇宙搬送ベルト +se-deep-space-transport-belt-black=深宇宙搬送ベルト(黒) +se-deep-space-transport-belt-white=深宇宙搬送ベルト(白) +se-deep-space-transport-belt-red=深宇宙搬送ベルト(赤) +se-deep-space-transport-belt-yellow=深宇宙搬送ベルト(黄色) +se-deep-space-transport-belt-green=深宇宙搬送ベルト(緑) +se-deep-space-transport-belt-cyan=深宇宙搬送ベルト(水色) +se-deep-space-transport-belt-blue=深宇宙搬送ベルト(青) +se-deep-space-transport-belt-magenta=深宇宙搬送ベルト(ピンク) +se-deep-space-underground-belt=深宇宙地下搬送ベルト +se-deep-space-underground-belt-black=深宇宙地下搬送ベルト(黒) +se-deep-space-underground-belt-white=深宇宙地下搬送ベルト(白) +se-deep-space-underground-belt-red=深宇宙地下搬送ベルト(赤) +se-deep-space-underground-belt-yellow=深宇宙地下搬送ベルト(黄色) +se-deep-space-underground-belt-green=深宇宙地下搬送ベルト(緑) +se-deep-space-underground-belt-cyan=深宇宙地下搬送ベルト(水色) +se-deep-space-underground-belt-blue=深宇宙地下搬送ベルト(青) +se-deep-space-underground-belt-magenta=深宇宙地下搬送ベルト(ピンク) +se-deep-space-splitter=深宇宙分配機 +se-deep-space-splitter-black=深宇宙分配機(黒) +se-deep-space-splitter-white=深宇宙分配機(白) +se-deep-space-splitter-red=深宇宙分配機(赤) +se-deep-space-splitter-yellow=深宇宙分配機(黄色) +se-deep-space-splitter-green=深宇宙分配機(緑) +se-deep-space-splitter-cyan=深宇宙分配機(水色) +se-deep-space-splitter-blue=深宇宙分配機(青) +se-deep-space-splitter-magenta=深宇宙分配機(ピンク) +se-delivery-cannon-capsule=デリバリーキャノンカプセル +se-delivery-cannon-capsule-packed=デリバリーキャノンカプセル: __1__ +se-delivery-cannon-targeter=デリバリーキャノン照準器 +se-delivery-cannon-weapon-capsule=戦闘用デリバリーキャノンカプセル +se-delivery-cannon-weapon-capsule-packed=戦闘用デリバリーキャノンカプセル: __1__ +se-delivery-cannon-weapon-targeter=戦闘用デリバリーキャノンカプセル照準器 +se-energy-transmitter-targeter=エナジービーム照準器 +se-arcosphere=アルコ・スフィア +se-arcosphere-a=λ ラムダ・スフィア +se-arcosphere-b=ξ サイ・スフィア +se-arcosphere-c=ζ ゼータ・スフィア +se-arcosphere-d=θ シータ・スフィア +se-arcosphere-e=ε イプシロン・スフィア +se-arcosphere-f=φ ファイ・スフィア +se-arcosphere-g=γ ガンマ・スフィア +se-arcosphere-h=ω オメガ・スフィア +se-arcosphere-collector=アルコ・スフィア収集衛星 +se-star-probe=惑星探査衛星 +se-belt-probe=小惑星帯探査衛星 +se-void-probe=深宇宙探査衛星 +se-star-probe-data=惑星探査データ +se-belt-probe-data=小惑星帯探査データ +se-void-probe-data=深宇宙探査データ +se-nano-engineering-data=ナノ工学データ +se-annihilation-data=対消滅データ +se-naquium-structural-data=ナクイウム構造データ +se-hyperlattice-data=超格子データ +se-naquium-energy-data=ナクイウムエナジーデータ +se-space-fold-data=空間梱包データ +se-space-warp-data=空間歪曲データ +se-space-dialation-data=空間膨張データ +se-space-injection-data=空間注入データ +se-interstellar-data=恒星間航行データ +se-teleportation-data=テレポーテーションデータ +se-wormhole-data=ワームホールデータ +se-rhga-data=現実超解析データ +se-deep-catalogue-1=深宇宙カタログ +se-deep-catalogue-2=大域深宇宙カタログ +se-deep-catalogue-3=総合深宇宙カタログ +se-deep-catalogue-4=拡張深宇宙カタログ +se-space-probe-rocket=宇宙探査ロケット +se-space-probe-rocket-deployed=宇宙探査ロケット +se-railgun=レールガン +se-railgun-ammo=レールガン弾薬 + +[item-description] +automation-science-pack=研究所で消費されます。 +chemical-science-pack=研究所で消費されます。 +logistic-science-pack=研究所で消費されます。 +military-science-pack=研究所で消費されます。 +production-science-pack=研究所で消費されます。 +se-satellite-telemetry=宇宙サイエンスパックに必要な遠隔測定記録。衛星ロケットサイロ(または宇宙探査ロケットサイロ)から衛星を打ち上げることで得られる。 +se-antimatter-canister=エネルギーを安全に持ち運ぶためのコンテナ +se-astronomic-science-pack-1=宇宙研究所で消費されます。 +se-astronomic-science-pack-2=宇宙研究所で消費されます。 +se-astronomic-science-pack-3=宇宙研究所で消費されます。 +se-astronomic-science-pack-4=宇宙研究所で消費されます。 +se-biological-science-pack-1=宇宙研究所で消費されます。 +se-biological-science-pack-2=宇宙研究所で消費されます。 +se-biological-science-pack-3=宇宙研究所で消費されます。 +se-biological-science-pack-4=宇宙研究所で消費されます。 +se-canister=多目的格納容器 +se-cargo-rocket-cargo-pod=貨物ロケットセクションの素材 +se-cargo-rocket-fuel-tank=貨物ロケットセクションの素材 +se-cargo-rocket-section=重要な貨物ロケットの部品。貨物ロケットサイロの中に挿入します。ロケット毎に100個必要です。ロケット着陸地点から一部を回収することができます。 +se-cargo-rocket-section-packed=輸送用に梱包された貨物ロケットセクション。ロケット構築で利用するには展開する必要があります。 +se-bloater-ammo=地面に毒溜まりを生成します。移動が困難になり、時間の経過とともにダメージを受ける。肥大した状態で死ぬと破裂し、近くの敵にダメージを与え、連鎖爆発を起こす可能性がある。破裂の合計ダメージは敵の最大HPの50%となる。 +se-pheromone-ammo=敵を混乱させ、あなたが味方で同族が敵だと思わせます。 +se-cryogun=敵を凍らせる氷の壁を生成します。 +se-deep-space-science-pack=宇宙研究所で消費されます。 +se-energy-science-pack-1=宇宙研究所で消費されます。 +se-energy-science-pack-2=宇宙研究所で消費されます。 +se-energy-science-pack-3=宇宙研究所で消費されます。 +se-energy-science-pack-4=宇宙研究所で消費されます。 +se-heat-shielding=高温用途や宇宙構造物に使用される複合パネルです。 +se-material-science-pack-1=宇宙研究所で消費されます。 +se-material-science-pack-2=宇宙研究所で消費されます。 +se-material-science-pack-3=宇宙研究所で消費されます。 +se-material-science-pack-4=宇宙研究所で消費されます。 +se-medpack=自分自身を回復します。 +se-medpack-2=自分自身を回復します。 +se-medpack-3=自分自身を回復します。 +se-medpack-4=自分自身を回復します。 +se-meteor-defence=隕石から星全体を守ることができますが、一度に一つの砲弾しか発射することが出来ません。隕石用砲弾を搭載し、完全に充電する必要があります。命中率80% 発射後再充電する必要があります。再充電には20MWを消費します。 +se-meteor-defence-ammo=隕石を破壊します。隕石防衛施設で利用します。 +se-meteor-point-defence=隕石から周辺の地表を守ります。一度に最大4つの砲弾します。隕石用砲弾を搭載し、完全に充電する必要があります。射程64 命中率50% 発射後の再充電には時間がかかります。 +se-meteor-point-defence-container=隕石を破壊します。定点隕石防衛施設で利用します。 +se-naquium-ore=ナクイウム鉱石です。深宇宙でのみ見つけられる貴重な素材です。 +se-rocket-launch-pad-silo-dummy-ingredient-item=貨物ロケットセクション100個とスペースカプセル1個を貨物ロケットサイロに入れることで作られます。 +se-rtg-equipment=放射性同位元素熱電発電機。放射性崩壊からの熱を電気へ変換する携帯用発電機。燃料の追加無しで何十年も稼働します。 +se-rtg-equipment-2=放射性同位元素熱電発電機。放射性崩壊からの熱を電気へ変換する携帯用発電機。燃料の追加無しで何十年も稼働します。 +se-plague-bomb=惑星からのすべての生命を消すことができます。細心の注意を払って取り扱ってください。 (すべてが死ぬまで、ゲームのパフォーマンスが激しく低下する可能性があり、大きな惑星やマルチプレイヤーにはお勧めできません。) +se-space-capsule=貨物ロケットを制御するために必要なスペースカプセル。最も近い惑星の表面に乗客を降下するために使用することができます。 [__CONTROL__toggle-driving__ ]を入力してカプセルに乗り込みます。 +se-space-platform-plating=宇宙プラットフォーム上での高速移動を可能にする足場 +se-space-platform-scaffold=宇宙空間で構造物の基礎となる足場 +se-space-rail=宇宙空間での利用に適した線路。列車が宇宙の彼方に飛んでいかないようになっています。 +se-spaceship-floor=この床は、宇宙船の隔壁と、宇宙船のすべての部品の下に置かれなければなりません。床の隙間は宇宙船の気密性を損ない、宇宙船の整合性チェックに失敗します。 +se-superconductive-cable=能動的な冷却を必要としない超伝導複合ケーブル。 +se-tesla-gun=速射可能なチェーンライトニング。 +se-thruster-suit=宇宙で生き残るために必要とされる宇宙服。 \nスラスターとマグネットブーツを搭載しています。 +se-thruster-suit-2=宇宙で生き残るために必要とされる宇宙服。 \n強力なスラスターとインベントリ、装備グリッドを持っています。 +se-thruster-suit-3=宇宙で生き残るために必要とされる宇宙服。 \n強力なスラスターとインベントリ、装備グリッドを持っています。 +se-thruster-suit-4=宇宙で生き残るために必要とされる宇宙服。 \n強力なスラスターとインベントリ、装備グリッドを持っています。 +space-science-pack=多くのアップグレードに使用されます。 +se-rocket-science-pack=宇宙研究所で消費されます。 宇宙で製作する必要があります。 +utility-science-pack=研究所で消費されます。 +beacon=8つのモジュールスロットを持ちます。モジュールの効果を3マス以内の味方の設置物に伝搬します。複数のビーコンからの影響は過重負荷を引き起こし、動作を停止させます。 +se-wide-beacon=15のモジュールスロットを持ちます。モジュールの効果を14マス以内の味方の設置物に伝搬します。複数のビーコンからの影響は過重負荷を引き起こし、動作を停止させます。 +se-wide-beacon-2=20のモジュールスロットを持ちます。モジュールの効果を14マス以内の味方の設置物に伝搬します。複数のビーコンからの影響は過重負荷を引き起こし、動作を停止させます。 +se-lifesupport-equipment-1=生命維持効率が100%増加します(重複可)。スラスタースーツ以外では増加率は半分になり、宇宙では機能しません。 +se-lifesupport-equipment-2=生命維持効率が200%増加します(重複可)。スラスタースーツ以外では増加率は半分になり、宇宙では機能しません。 +se-lifesupport-equipment-3=生命維持効率が400%増加します(重複可)。スラスタースーツ以外では増加率は半分になり、宇宙では機能しません。 +se-lifesupport-equipment-4=生命維持効率が800%増加します(重複可)。スラスタースーツ以外では増加率は半分になり、宇宙では機能しません。 +se-delivery-cannon=他惑星を含む超長距離まで資源を撃ち込むことができるレールガンです。 +se-delivery-cannon-weapon=他惑星を含む超長距離まで弾を撃ち込むことができるレールガンです。 +se-arcosphere=深宇宙で入手できます。 +se-deep-catalogue-1=ナクイウムとナノエンジニアリングについてです。 +se-deep-catalogue-2=超格子構造、シンギュラリティ、対消滅についてです。 +se-deep-catalogue-3=ミクロな空間歪曲と異次元のナノ工学についてです。 +se-deep-catalogue-4=マクロな空間歪曲と超次元の航行についてです。 +se-arcosphere-collector=アルコ・スフィアを深宇宙から収集します。小惑星帯に設置した宇宙探索ロケットサイロから打ち上げる必要があります。アルコ・スフィアを多く集めるほど、新しいアルコ・スフィアの発見は難しくなります。 +se-star-probe=惑星のデータを収集し、[img=item/se-star-probe-data] 惑星探査データを収集します。惑星軌道上にある宇宙探査ロケットサイロから打ち上げる必要があります。 +se-belt-probe=小惑星帯からデータを収集し、[img=item/se-belt-probe-data] 小惑星帯探査データを収集します。小惑星帯にある宇宙探査ロケットサイロから打ち上げる必要があります。 +se-void-probe=深宇宙からデータを収集し、[img=item/se-void-probe-data] 深宇宙探査データを収集します。小惑星帯空域にある宇宙探査ロケットサイロから打ち上げる必要があります。 +se-interstellar-data=移動中の宇宙船内のネクサスで生成できます。恒星間宇宙をより大きく、高速な船で移動することで、データの生成がより速くなります。 + +[recipe-name] +core-fragment=コアフラグメント処理(__1__) +rocket-fuel=固体ロケット燃料 +se-astrometric-analysis-multispectral-1=マルチスペクトル天体座標分析1 +se-astrometric-analysis-multispectral-2=マルチスペクトル天体座標分析2 +se-astrometric-analysis-multispectral-3=マルチスペクトル天体座標分析3 +se-astronomic-insight-1=天文インサイト +se-astronomic-insight-2=大域天文インサイト +se-astronomic-insight-3=総合天文インサイト +se-astronomic-insight-4=拡張総合天文インサイト +se-biological-insight-1=生物学的インサイト +se-biological-insight-2=大域生物学的インサイト +se-biological-insight-3=総合生物学的インサイト +se-biological-insight-4=拡張総合生物学的インサイト +se-bio-methane-to-crude-oil=バイオ処理によるメタンの原油化 +se-bio-sludge-crude-oil=実験バイオマスからのバイオ廃液 +se-bio-sludge-decontamination=バイオ廃液の除染 +se-bio-sludge-from-fish=魚からバイオ廃液 +se-bio-sludge-from-wood=木からバイオ廃液 +se-bio-sludge=バイオマスからのバイオ廃液 +se-broken-data-scrapping=壊れたデータカードのリサイクル +se-cargo-rocket-section-pack=貨物ロケットセクションの梱包 +se-cargo-rocket-section-unpack=貨物ロケットセクションの開封 +se-condenser-turbine-reclaim-water=水の再利用と発電 +se-core-fragment-omni=コアフラグメント処理 +se-core-mining=コアマイニング +se-empty-antimatter-canister=キャニスターから反物質ストリームを取り出す +se-empty-barrel-scrapping=空のドラム缶のリサイクル +se-empty-barrel-reprocessing=空のドラム缶のリサイクル +se-space-capsule-scrapping=宇宙カプセルのリサイクル +se-cargo-pod-scrapping=カーゴポッドのリサイクル +se-energy-insight-1=エネルギーインサイト +se-energy-insight-2=大域エネルギーインサイト +se-energy-insight-3=総合エネルギーインサイト +se-energy-insight-4=拡張総合エネルギーインサイト +se-formatting-1=データフォーマット +se-formatting-2=効率的なデータフォーマット +se-formatting-3=高度なデータフォーマット +se-formatting-4=深宇宙データフォーマット +se-material-insight-1=材質インサイト +se-material-insight-2=大域材質インサイト +se-material-insight-3=総合材質インサイト +se-material-insight-4=拡張総合材質インサイト +se-matter-fusion-copper=マター変換 (銅) +se-matter-fusion-dirty=マター変換 (スクラップ) +se-matter-fusion-iron=マター変換 (鉄) +se-matter-fusion-stone=マター変換 (石) +se-matter-fusion-uranium=マター変換 (ウラン) +se-matter-fusion-to=マター変換 (__1__) +se-orbital-data=軌道計算データ +se-plasma-canister-empty=空のプラズマキャニスター +se-pulverised-sand=粉砕された砂 +se-radiating-space-coolant-fast=冷却材を-10℃に速やかに冷却(低温) +se-radiating-space-coolant-normal=冷却材を-10℃に冷却(低温) +se-radiating-space-coolant-slow=冷却材を-10℃にゆるやかに冷却(低温) +se-mixed-methane-gas-separation=混合メタンガスの分離 +se-rocket-fuel-from-water-copper=水からロケット燃料を作成 +se-scrap-decontamination=スクラップ汚染除去 +se-scrap-recycling=スクラップのリサイクル +se-space-coolant-cold=冷却材を-100℃に冷却(低温) +se-space-coolant-supercooled=冷却材を-273℃に冷却(超低温) +se-space-coolant-supercooled-cryonite=冷却材を-273℃に冷却(超低温) +se-space-coolant-cold-cryonite=冷却材を-100℃に冷却(低温) +se-space-coolant-supercoole-cryonite=冷却材を-273℃に冷却(超低温) +se-simulation-a=天文シミュレーション +se-simulation-ab=パンスペルミア説シミュレーション +se-simulation-abm=異星進化シミュレーション +se-simulation-am=マター分布シミュレーション +se-simulation-as=宇宙粒子シミュレーション +se-simulation-asb=宇宙生物工学シミュレーション +se-simulation-asbm=大域宇宙シミュレーション +se-simulation-asm=天体物理学シミュレーション +se-simulation-b=生体シミュレーション +se-simulation-bm=生体力学シミュレーション +se-simulation-m=マテリアルシミュレーション +se-simulation-s=エネルギーシミュレーション +se-simulation-sb=生化学シミュレーション +se-simulation-sbm=ナノマシンシミュレーション +se-simulation-sm=ナノ材料シミュレーション +se-space-water-decontamination=コズミックウォーターの汚染除去 +se-spaceship-rocket-engine-burn=液体ロケット燃料の燃焼処理 +se-specimen-fish=微重力下の魚の生育 +se-specimen-wood=微重力下の木の生育 +se-thermodynamics-coal=石炭の高圧処理 +se-used-lifesupport-canister-cleaning=生命維持管理キャニスターの清掃 +se-used-lifesupport-canister-cleaning-space=生命維持管理キャニスターの清掃 +space-science-pack=最適化サイエンスパック +se-rocket-science-pack=宇宙サイエンスパック +se-big-turbine-internal=高温の蒸気を減圧する +se-arcosphere-fracture=アルコスフィアの分析 +se-arcosphere-fold-in=アルコスフィアの反転 +se-arcosphere-fold-out=アルコスフィアの反転 +se-arcosphere-folding=アルコスフィアの屈折: __1__ __2__ から __3__ __4__ +se-electric-boiling-void=蒸発・換気 +se-space-probe-rocket-deployed=宇宙探査ロケット(Deployed) +se-distortion-drive=空間歪曲航法 +se-generic-scrapping=__1__ をスクラップにする +se-generic-recycling=__1__ をリサイクルする + + +[recipe-description] +se-astronomic-insight-2=より複雑だが効率的な処理 +se-astronomic-insight-3=より複雑だが効率的な処理 +se-astronomic-insight-4=より複雑だが効率的な処理 +se-biological-insight-2=より複雑だが効率的な処理 +se-biological-insight-3=より複雑だが効率的な処理 +se-biological-insight-4=より複雑だが効率的な処理 +se-core-mining=採掘されるフラグメントの種類は惑星に依存します。採掘速度は、惑星上にあるコアマイングの数によって異なります。 +se-energy-insight-2=より複雑だが効率的な処理 +se-energy-insight-3=より複雑だが効率的な処理 +se-energy-insight-4=より複雑だが効率的な処理 +se-material-insight-2=より複雑だが効率的な処理 +se-material-insight-3=より複雑だが効率的な処理 +se-material-insight-4=より複雑だが効率的な処理 +se-radiating-space-coolant-normal=加熱、冷却を繰り返すと冷却材が劣化します。 +se-radiating-space-coolant-slow=加熱、冷却を繰り返すと冷却材が劣化します。ゆるやかな冷却により劣化を抑えます。 +se-radiating-space-coolant-fast=加熱、冷却を繰り返すと冷却材が劣化します。速やかな冷却は劣化を加速させます。 +se-delivery-cannon-weapon-pack-se-iridium-piledriver=小規模の巨大な物理ダメージ、衝撃波による二次的な爆発ダメージ。 +se-arcosphere-fracture=アルコスフィアは、[img=item/se-arcospher-collector]アルコスフィア収集衛星で集めることができます。 +se-distortion-drive=ゲームに勝利するために、ネクサスの空間歪曲時能力を発動する必要があります。指定された速度を維持している間、6GWを消費します。 + +[technology-name] +effectivity-module-4=エネルギー効率モジュール4 +effectivity-module-5=エネルギー効率モジュール5 +effectivity-module-6=エネルギー効率モジュール6 +effectivity-module-7=エネルギー効率モジュール7 +effectivity-module-8=エネルギー効率モジュール8 +effectivity-module-9=エネルギー効率モジュール9 +energy-shield-equipment=エネルギーシールド +energy-shield-mk2-equipment=エネルギーシールドMK2 +energy-shield-mk3-equipment=エネルギーシールドMK3 +energy-shield-mk4-equipment=エネルギーシールドMK4 +energy-shield-mk5-equipment=エネルギーシールドMK5 +energy-shield-mk6-equipment=エネルギーシールドMK6 +sand-processing=砂処理 +glass-processing=ガラス加工 +liquid-rocket-fuel=液体ロケット燃料 +productivity-module-4=生産効率モジュール4 +productivity-module-5=生産効率モジュール5 +productivity-module-6=生産効率モジュール6 +productivity-module-7=生産効率モジュール7 +productivity-module-8=生産効率モジュール8 +productivity-module-9=生産効率モジュール9 +rocket-silo=衛星ロケットサイロ +rocketry=戦闘ロケット +se-adaptive-armour=自己修復装甲 +se-antimatter-engine=反物質エンジン +se-antimatter-reactor=反物質反応炉 +se-antimatter-production=反物質生産 +se-astronomic-science-pack=天文サイエンスパック +se-biological-science-pack=生物サイエンスパック +se-condenser-turbine=コンデンサータービン +se-core-miner=コアマイニング +se-biogun=バイオガン +se-cryogun=クリオガン +se-deep-space-science-pack=深宇宙サイエンス・パック +se-deep-catalogue=深宇宙カタログ +se-dimensional-anchor=次元アンカー +se-electric-boiler=電気ボイラー +se-energy-science-pack=エネルギーサイエンスパック +se-fluid-burner-generator=流体等温ジェネレータ +se-fuel-refining=燃料精製 +se-heat-shielding=断熱材 +se-material-science-pack=材料サイエンスパック +se-ion-engine=イオンエンジン +se-long-range-star-mapping=長距離星図 +se-medpack=回復キット +se-medpack-2=回復キット 2 +se-medpack-3=回復キット 3 +se-medpack-4=回復キット 4 +se-meteor-defence=隕石防衛施設 +se-meteor-point-defence=定点隕石防衛施設 +se-plague=疫病 +se-processing-beryllium=ベリリウム処理 +se-processing-cryonite=クリオナイト処理 +se-processing-holmium=ホルミウム処理 +se-processing-iridium=イリジウム処理 +se-processing-naquium=ナクイウム処理 +se-processing-vitamelange=ビタメランジェ処理 +se-processing-vulcanite=ヴァルカナイト処理 +se-pulveriser=粉砕機 +se-railgun=レールガン +se-rocket-cargo-safety=ロケット貨物の安全性 +se-rocket-fuel-from-water=水からロケット燃料を作成 +se-rocket-launch-pad=貨物ロケットサイロ +se-rocket-landing-pad=ロケットランディングパッド +se-rocket-reusability=ロケットの再利用 +se-rocket-survivability=ロケットサバイバビリティ +se-rtg-equipment=ポータブルRTG +se-rtg-equipment-2=ポータブルRTG MK2 +se-space-assembling=宇宙組み立て +se-space-accumulator=宇宙空間用蓄電池 +se-space-accumulator-2=宇宙空間用蓄電池MK2 +se-space-astrometrics-laboratory=天体研究所 +se-space-biochemical-laboratory=生化学研究室 +se-space-catalogue-astronomic=天体カタログ +se-space-catalogue-biological=生物カタログ +se-space-catalogue-universal=ユニバーサルカタログ +se-space-catalogue-energy=エネルギーカタログ +se-space-catalogue-material=材料カタログ +se-space-data-card=データカード +se-space-decontamination-facility=除染施設 +se-space-electromagnetics-laboratory=電磁気学の実験室 +se-space-genetics-laboratory=遺伝学研究所 +se-space-gravimetrics-laboratory=重力波研究所 +se-space-growth-facility=微生物育成施設 +se-space-hypercooling=冷却 +se-space-laser-laboratory=光学研究所 +se-space-lifesupport-facility=生命維持管理施設 +se-space-manufactory=宇宙工場 +se-space-material-fabricator=素材製作所 +se-space-matter-fusion=マター変換 +se-space-mechanical-laboratory=機械研究室 +se-space-particle-accelerator=粒子加速器 +se-space-particle-collider=粒子衝突型加速器 +se-space-plasma-generator=プラズマ発生器 +se-space-platform-plating=宇宙プラットフォームプレート +se-space-platform-scaffold=宇宙プラットフォーム足場 +se-space-radiation-laboratory=放射線研究室 +se-space-radiating-efficiency=効率的な放熱 +se-space-radiating-speed=高速な放熱 +se-space-radiator=放熱器 +se-space-radiator-2=強化放熱器 +se-space-rail=銀河鉄道 +se-space-recycling-facility=リサイクル施設 +se-space-science-lab=宇宙科学研究所 +se-space-simulation-ab=パンスペルミア説シミュレーション +se-space-simulation-am=宇宙材料工学シミュレーション +se-space-simulation-as=宇宙粒子シミュレーション +se-space-simulation-bm=生体力学シミュレーション +se-space-simulation-sb=生化学シミュレーション +se-space-simulation-sm=ナノ材料シミュレーション +se-space-simulation-abm=異星進化シミュレーション +se-space-simulation-asb=宇宙生物工学シミュレーション +se-space-simulation-asm=天体物理学シミュレーション +se-space-simulation-sbm=ナノマシンシミュレーション +se-space-simulation-asbm=大域宇宙シミュレーション +se-space-solar-panel=大型ソーラーパネル +se-space-spectrometry-facility=分析施設 +se-space-supercomputer=スーパーコンピューター +se-space-telescope=望遠鏡 +se-space-telescope-gammaray=ガンマ線望遠鏡 +se-space-telescope-xray=X線望遠鏡 +se-space-telescope-microwave=マイクロ波望遠鏡 +se-space-telescope-radio=電波望遠鏡 +se-space-thermodynamics-laboratory=熱力学研究所 +se-spaceship=宇宙船 +se-spaceship-integrity=宇宙船の構造強化 +se-factory-spaceship=宇宙船工業 +se-superconductive-cable=超電導ケーブル +se-teleportation=テレポーテーション +se-tesla-gun=テスラ銃 +se-thruster-suit=スラスタースーツ +space-science-pack=最適化サイエンスパック +se-rocket-science-pack=宇宙サイエンスパック +speed-module-4=生産速度モジュール4 +speed-module-5=生産速度モジュール5 +speed-module-6=生産速度モジュール6 +speed-module-7=生産速度モジュール7 +speed-module-8=生産速度モジュール8 +speed-module-9=生産速度モジュール9 +se-aeroframe-pole=軽量柱 +se-aeroframe-scaffold=軽量骨組み +se-aeroframe-bulkhead=軽量隔壁 +se-lattice-pressure-vessel=格子型圧力容器 +se-heavy-girder=重量梁材 +se-heavy-bearing=重量ベアリング +se-heavy-composite=重量合成素材 +se-heavy-assembly=重量構築物 +se-bioscrubber=生物性浄化機 +se-vitalic-epoxy=生物性エポキシ樹脂 +se-vitalic-reagent=生物性試薬 +se-vitalic-acid=生物性酸液 +se-self-sealing-gel=防漏ジェル +se-holmium-cable=ホルミウム線 +se-holmium-solenoid=ホルミウムコイル +se-quantum-processor=量子プロセッサー +se-dynamic-emitter=強化放射器 +se-nanomaterial=ナノ材料 +se-naquium-processor=ナクイウムプロセッサー +se-naquium-cube=ナクイウムキューブ +se-naquium-tessaract=四次元超立方体 +se-wide-beacon=広域ビーコン +se-wide-beacon-2=強化広域ビーコン +se-lifesupport-equipment=Lifesupport equipment +se-lifesupport-equipment-1=Lifesupport equipment MK1 +se-lifesupport-equipment-2=Lifesupport equipment MK2 +se-lifesupport-equipment-3=Lifesupport equipment MK3 +se-lifesupport-equipment-4=Lifesupport equipment MK4 +se-supercharger=急速充電施設 +se-addon-power-pole=追加式電柱 +se-pylon=パイロン +se-pylon-substation=広域パイロン +se-pylon-construction=建設用パイロン +se-pylon-construction-radar=レーダー付き建設用パイロン +se-shield-projector=シールド生成器 +se-deep-space-transport-belt=深宇宙搬送ベルト +se-big-turbine=高温タービンジェネレータ +se-big-heat-exchanger=高度熱交換器 +se-zone-discovery-random=宇宙探索 +se-zone-discovery-targeted=指向性宇宙探索 +se-zone-discovery-deep=深宇宙探索 +se-delivery-cannon=デリバリーキャノン +se-delivery-cannon-capsule-iridium=イリジウム・デリバリーキャノンカプセル +se-delivery-cannon-weapon=戦闘用デリバリーキャノン +se-spaceship-clamps=宇宙船停留所 +se-bio-upgrade-constitution=生体強化:体力 +se-bio-upgrade-strength=生体強化: 筋力 +se-bio-upgrade-agility=生体強化: 速度 +se-bio-upgrade-dexterity=生体強化: クラフト +se-bio-upgrade-intelligence=生体強化: 研究 +se-energy-beaming=エナジービーム +se-energy-beam-defence=Umbrella: エナジービーム防衛施設 +se-nexus=ネクサス +se-spaceship-victory=銀河系脱出 +se-arcosphere=アルコ・スフィア収集 +se-arcosphere-folding=アルコ・スフィア屈折 +se-space-probe=宇宙探索ロケットサイロ +se-linked-container=空間連動チェスト +k2-conversion=__1__ 変換 + +[technology-description] +energy-shield-equipment=保護バブルを形成します。高速にチャージされますが多くのエネルギーを必要とします。 +energy-shield-mk2-equipment=保護バブルを形成します。高速にチャージされますが多くのエネルギーを必要とします。 +energy-shield-mk3-equipment=保護バブルを形成します。高速にチャージされますが多くのエネルギーを必要とします。 +energy-shield-mk4-equipment=保護バブルを形成します。高速にチャージされますが多くのエネルギーを必要とします。 +energy-shield-mk5-equipment=保護バブルを形成します。高速にチャージされますが多くのエネルギーを必要とします。 +energy-shield-mk6-equipment=保護バブルを形成します。高速にチャージされますが多くのエネルギーを必要とします。 +sand-processing=石を破砕、粉砕、ろ過してきれいな砂にします。 +glass-processing=砂を融解してガラスを作成 +rocket-silo=衛生を軌道上に打ち上げることで、ロケットサイエンスパックを入手したり新しい惑星を発見することができます。 +se-adaptive-armour=自己修復のためにエネルギーを消費するアーマー。エネルギーシールド同様の効果ですが、より低電力で、遅い再生速度です。 +se-antimatter-engine=反物質の対消滅を利用して莫大な推進力を得ます。 +se-antimatter-reactor=反物質の対消滅を利用して巨大な熱量を得ます。 +se-antimatter-production=反物質を生成します。 +se-astronomic-science-pack=宇宙旅行や星間物流に関連する技術の研究を可能にします。 +se-biological-science-pack=フィジカル能力の向上、生物兵器、および神経処理の改善に関連する技術の研究ができます。 +se-biogun=様々な化学兵器を使うことができます。 +se-cryogun=敵を凍らせる氷の壁を生成します。 +se-condenser-turbine=75%の性能の蒸気タービン。利用した蒸気の99%を水に再利用できます。 +se-core-miner=惑星や月から無限に資源を得ることができますが、同じ星に複数稼働している場合資源効率が低下します。 +se-deep-catalogue=空間歪曲、エキゾチック物質、ナノ工学のデータを構造化し、分析・シミュレーション可能にします。最先端の技術には必須です。 +se-deep-space-science-pack=最も深淵な技術を研究できます。 +se-dimensional-anchor=空間異常の安定点として、惑星の重力井戸を利用します。 +se-electric-boiler=電気使って水から蒸気を生成します。 +se-energy-science-pack=素粒子の基本相互作用の研究、および素粒子の発見を可能にします +se-fluid-burner-generator=液体の燃料(液体ロケット燃料など)を利用して発電を行います。小さくコンパクトですが大規模な蒸気発電と比べ効率の悪い発電方法です。宇宙用に設計されています。 +se-fuel-refining=より高度な燃料精製を可能にします。 +se-heat-shielding=高温用途や宇宙構造物に使用される複合パネルです。 +se-ion-engine=少量のイオンストリームを消費し、大きな推進力を発揮します。宇宙船の隔壁としてカウントされます。 +se-long-range-star-mapping=いくつかの遠方銀河は、珍しい星の特定のパターンによって識別することができます。結果は[img=virtual-signal/informatron] InformaTron [__CONTROL__informatron__]に記録されます。 +se-material-science-pack=より高度な工学技術のための先進材料に関する研究を可能にします。 +se-medpack=プレイヤーの体力を回復します +se-medpack-2=プレイヤーの体力を回復します +se-medpack-3=プレイヤーの体力を回復します +se-medpack-4=プレイヤーの体力を回復します +se-meteor-defence=隕石が地表に落ちる前に撃ち落とします。隕石防衛施設は隕石から星全体を守ることができますが、一度に一つの砲弾しか発射することが出来ません。 +se-meteor-point-defence=隕石が地表に落ちる前に撃ち落とします。隕石から周辺の地表を守ります。一度に最大4つの砲弾します。隕石用砲弾を搭載し、完全に充電する必要があります。 +se-nanomaterial=優れた特性を持つ複合材料を作るために、ナノスケールで組織化された異なる材料を複雑に配置します。 +se-railgun=電磁気により加速された弾丸はプラズマの痕跡を残す程の速度に至ります。高いダメージを与えますが、連射速度の遅い武器です。 +se-plague=惑星全体から全ての生命を根絶する素晴らしい機械。取り扱いには細心の注意を払いましょう。 +se-processing-beryllium=ベリリウム鉱石を加工すると、非常に軽く、強く、耐腐食性、耐放射線性に優れた金属になります。また、X線との相互作用もほとんどありません。 +se-processing-cryonite=クリオナイトの結晶を加工してクリオナイトロッドを作り、冷凍・冷却・潤滑などの用途に使用します。クリオナイトは主に凍結した惑星に存在する。 +se-processing-holmium=元素の中で最も透磁率の高い貴金属であるホルミウムを鉱石から加工します。 +se-processing-iridium=高温で最も腐食しにくい金属、最も密度の高い元素であるイリジウムを鉱石から加工します。重工業に必要です。 +se-processing-naquium=特異な時空間相互作用を持つ金属状の素材ナクイウムを、深宇宙の謎の結晶から加工します。 +se-processing-vitamelange=ビタミランジェから貴重な栄養分のエキスを抽出します。 +se-processing-vulcanite=火山性のヴァルカナイトの結晶を、高度な製錬やロケット燃料などの高温化学プロセスに使用される精製された粉末にする。ヴァルカナイトは、火山性の惑星やほとんどのコアの破片に含まれている。 +se-pulveriser=より硬い鉱物や惑星のコア・フラグメントなどを粉砕・破砕することができます。 +se-rocket-cargo-safety=貨物ポッドが輸送中にダメージを受ける可能性を10%(累積)低減します。 +se-rocket-fuel-from-water=水の電気分解により水素-酸素ロケット燃料を生成します。 +se-rocket-landing-pad=貨物ロケットを指定したランディングパッドに自動的に着陸できるようになります。研究をすすめることで一部のロケット部品を回収することができます。 +se-rocket-launch-pad=プレイヤーを宇宙に運びます。また、他の惑星へ貨物の輸送に利用することができます。 +se-rocket-reusability=ランディングパッドから回収できる部分を4%増やします(初期値20% 最大100%) +se-rocket-science-pack=基幹惑星外の資源の処理や、地上の構造物の宇宙版の製造に関する技術を研究することができます。 +se-rocket-survivability=ロケットが輸送中に破損する可能性、および、ランディングパッドへの着陸に失敗する可能性を10%低減します(累積) +se-rtg-equipment=放射性同位元素熱電発電機。放射性崩壊からの熱を電気へ変換する携帯用発電機。燃料の追加無しで何十年も稼働します。 +se-rtg-equipment-2=放射性同位元素熱電発電機。放射性崩壊からの熱を電気へ変換する携帯用発電機。燃料の追加無しで何十年も稼働します。 +se-space-accumulator=高容量の蓄電池です。 +se-space-accumulator-2=非常に高容量の蓄電池です。 +se-space-assembling=宇宙空間で動作するように調整された組立機です。 +se-space-astrometrics-laboratory=天体情報を組み合わせ、比較し、定量化します。 +se-space-biochemical-laboratory=バイオ化学を専門に扱う高度な化学実験室。また、より多くの基本的な化学および石油処理を行うことができます。 +se-space-catalogue-astronomic=分析と研究のために構造化された天体データのセット。天文学研究のために必要です。 +se-space-catalogue-biological=分析と研究のために構造化された生体データのセット。生物学研究のために必要です。 +se-space-catalogue-universal=データを組み合わせて解析やコンピュータシミュレーションを行います。以降の深宇宙研究に必要です。 +se-space-catalogue-energy=分析と研究のために構造化されたエネルギーデータのセット。エネルギー研究のために必要です。 +se-space-catalogue-material=分析と研究のために構造化された材料データのセット。材料学研究のために必要です。 +se-space-data-card=多目的データ記憶装置。より高度なデータドリブンの研究に必要です。 +se-space-decontamination-facility=無菌環境で使用するための物質を洗浄し、低圧条件下で使用するための液体を用意します。 +se-space-electromagnetics-laboratory=強い磁界と非常に高い電圧を扱うための機器。 +se-space-genetics-laboratory=文化の遺伝子配列決定、遺伝子改変、および遺伝子プリンティングに特化したラボ。 +se-space-gravimetrics-laboratory=重力擾乱を分析し、シミュレートします。 +se-space-growth-facility=微小重力など、他では不可能なさまざまな制御された条件下で生物標本を成長させる施設。 +se-space-hypercooling=冷却材で熱交換行い、一方をより高温に、もう一方をより低温にします。 +se-space-laser-laboratory=レーザーを用いた実験を行っています。防護メガネの着用が義務付けられています。 +se-space-lifesupport-facility=過酷な環境での生存を支えます。 +se-space-manufactory=宇宙での大量生産に必要な研究。 +se-space-material-fabricator=粒子衝突と3Dプリンターで新たな素材を合成します。 +se-space-matter-fusion=マターを融合して素材に変換します。 +se-space-mechanical-laboratory=工業的処理を担当:粉砕、引き裂き、せん断、振動など +se-space-particle-accelerator=粒子を亜光速まで加速します +se-space-particle-collider=粒子を亜光速で衝突させ、その結果を分析します +se-space-plasma-generator=様々なプラズマを生成します。 +se-space-platform-plating=堅牢な宇宙プラットフォームメッキ。 高速に移動することができます。 +se-space-platform-scaffold=基本的な宇宙での足場となる構造物。上に施設を建築することができますが、移動に最適な形ではありません。 +se-space-radiation-laboratory=比較的安全に放射性物質で遊ぶ場所。ウラン処理に使用することができます。 +se-space-radiator=過熱熱流体から余分な熱を放熱します。 +se-space-radiator-2=過熱熱流体から余分な熱を放熱します。 +se-space-radiating-efficiency=過熱熱流体から余分な熱を放熱します。より低速で、高効率です。 +se-space-radiating-speed=過熱熱流体から余分な熱を放熱します。より高速で、非効率です。 +se-space-rail=宇宙空間での利用に適した線路。列車が宇宙の彼方に飛んでいかないようになっています。 +se-space-recycling-facility=スクラップを原材料に再処理。 +se-space-science-lab=宇宙サイエンスパックと、より高度な宇宙科学の処理を可能にします。 +se-space-simulation-ab=複数の分野を組み合わせることで、より効率的なシミュレーションを行います。 +se-space-simulation-am=複数の分野を組み合わせることで、より効率的なシミュレーションを行います。 +se-space-simulation-as=複数の分野を組み合わせることで、より効率的なシミュレーションを行います。 +se-space-simulation-bm=複数の分野を組み合わせることで、より効率的なシミュレーションを行います。 +se-space-simulation-sb=複数の分野を組み合わせることで、より効率的なシミュレーションを行います。 +se-space-simulation-sm=複数の分野を組み合わせることで、より効率的なシミュレーションを行います。 +se-space-simulation-abm=複数の分野を組み合わせることで、より効率的なシミュレーションを行います。 +se-space-simulation-asb=複数の分野を組み合わせることで、より効率的なシミュレーションを行います。 +se-space-simulation-asm=複数の分野を組み合わせることで、より効率的なシミュレーションを行います。 +se-space-simulation-sbm=複数の分野を組み合わせることで、より効率的なシミュレーションを行います。 +se-space-simulation-asbm=複数の分野を組み合わせることで、より効率的なシミュレーションを行います。 +se-space-solar-panel=大形の高効率なソーラーパネルです。 +se-space-spectrometry-facility=分光測光、ガスクロマトグラフィー、質量分析、およびその他の分光法。 壁に火をつけ、曲げて、どこに当たったかを確認します。 +se-space-supercomputer=より高度なデータ操作や処理、およびシミュレーションを可能にします。 +se-space-telescope=可視スペクトル周辺波長に最適化された望遠鏡。 +se-space-telescope-gammaray=ガンマ線は屈折しづらいため、代わりにミラーや特別な検出器を使用した強力な望遠鏡 +se-space-telescope-xray=X線のほとんどは大気によってブロックされています。この望遠鏡は大気の問題がない宇宙に設置されます。 +se-space-telescope-microwave=マイクロ波を検出し、宇宙背景輻射を観測する望遠鏡。 +se-space-telescope-radio=遠距離からの微弱な電波を検出するための巨大な望遠鏡。 +se-space-thermodynamics-laboratory=超高温状態を含む研究を行っています。また、精錬などの基本的な熱プロセスを実行することができます +se-spaceship=壁や床を1つずつ構築して密封し、中にコンソールを置くことで、他の星に行くための宇宙船を建造できます。 +se-spaceship-integrity=各レベルごとに宇宙船の船体強度を +100 ずつ増加させます。 +se-factory-spaceship=各レベルごとに宇宙船の船体強度を +500 ずつ増加させます。 +se-superconductive-cable=能動的な冷却を必要としない超伝導複合ケーブル。 +se-teleportation=他のテレポーテーション技術のロックを解除します。 安全に宇宙をゆがめることは難しいことがわかります。 +se-tesla-gun=高速なチェーンライトニング。一撃で30体の敵を攻撃することができます。なんのターゲットも存在しない場合には、地面にそって短いジャンプを繰り返します。 +se-thruster-suit=スラスターと磁力靴と宇宙服。これなしで宇宙に行ってはいけません。 +se-thruster-suit-2=強力なスラスターを有する改良された宇宙服。大きな装備グリッドとインベントリサイズを持ちます。 +se-thruster-suit-3=強力なスラスターを有する改良された宇宙服。大きな装備グリッドとインベントリサイズを持ちます。 +se-thruster-suit-4=強力なスラスターを有する改良された宇宙服。大きな装備グリッドとインベントリサイズを持ちます。 +space-science-pack=宇宙サイエンスパックと技術のより直接的な開発を可能にします。 +se-aeroframe-pole=A strong light weight beryllium pole commonly used as a support beam for aviation and space exploration. +se-aeroframe-scaffold=A strong light weight beryllium structural frame commonly used as the main internal skeleton for aviation and space exploration vessels. +se-aeroframe-bulkhead=A strong light weight air-tight beryllium wall used as the external skin, or secondary compartment walls, of aviation and space exploration vessels. +se-lattice-pressure-vessel=A strong light weight beryllium pressure vessel with an internal lattice that lets certain fluids compress beyond their normal limits. If ruptured the pressurised fluid is vented safely. +se-heavy-girder=A heavy iridium structural beam mainly used for heavy industry and heavy military vessels. +se-heavy-bearing=A large heavy iridium bearing that can function indefinitely under forces that would crush lesser materials. +se-heavy-composite=A thick almost impenetrable bulkhead that is practically immune to heat, corrosion, radiation, and mechanical force, but is incredibly heavy. +se-heavy-assembly=A heavy mechanical assembly of gears and configurable components that used for heavy industry. +se-bioscrubber=A material processing chamber that utilises biological processes to break down unwanted materials. +se-vitalic-epoxy=An incredibly strong bio-sourced epoxy with regenerative properties. +se-vitalic-reagent=An efficient multi-purpose reagent for a wide range of chemical reactions. +se-vitalic-acid=A strong cocktail of various acids. +se-self-sealing-gel=A viscous gel under pressure, but solid as steel when exposed to a vacuum. Often used as an internal film in bulkheads to passively seal punctures. +se-holmium-cable=A sheathed cable specifically designed to eliminate unwanted noise in the line that can interferes with sensitive electronics. +se-holmium-solenoid=An extremely powerful electromagnet. +se-quantum-processor=Exploits superposition and entanglement to more efficiently work on highly complex problems. +se-dynamic-emitter=A rapidly adjustable light or particle emitter system that can change a number of properties for a greater range or scanning modes or material penetration properties. +se-naquium-cube=Leveraging naquium's unusual interaction with space time to fold a large volume into a small cube. +se-naquium-tessaract=A peculiar object that settles into a cube-like shape but shifts into a range of other geometric shapes if turned or accelerated. +se-naquium-processor=Computation within a naquium tesserect bypasses some of the usual limitations on computation density. +effect-transmission=The beacon transmits the effects of modules to nearby friendly entities within 3 tiles. Has 8 module slots. Multiple beacons affecting the same entity will overload it and prevent it from operating. +se-wide-beacon=The wide area beacon transmits the effects of modules to nearby friendly entities within 14 tiles. Has 15 module slots or 20 when upgraded. Multiple beacons affecting the same entity will overload it and prevent it from operating. +se-wide-beacon-2=The wide area beacon 2 transmits the effects of modules to nearby friendly entities within 14 tiles. Has 20 module slots. Multiple beacons affecting the same entity will overload it and prevent it from operating. +se-lifesupport-equipment-1=Increases lifesupport efficiency by +100% (additive). If installed in a non-spacesuit, efficiency bonus is halved and won't work in space. +se-lifesupport-equipment-2=Increases lifesupport efficiency by +200% (additive). If installed in a non-spacesuit, efficiency bonus is halved and won't work in space. +se-lifesupport-equipment-3=Increases lifesupport efficiency by +400% (additive). If installed in a non-spacesuit, efficiency bonus is halved and won't work in space. +se-lifesupport-equipment-4=Increases lifesupport efficiency by +800% (additive). If installed in a non-spacesuit, efficiency bonus is halved and won't work in space. +se-supercharger=Can charge up to 64 robots at a time at high speed. Structure max power draw is 1GW. +se-pylon=Distributes electrical energy. 64 tile connection range. +se-pylon-substation=Distributes electrical energy. 64 tile connection range, 64x64 power supply area. +se-pylon-construction=Distributes electrical energy and extends construction area. 64 tile connection range, 64x64 construction area. +se-pylon-construction-radar=Distributes electrical energy, extends construction area, and provides radar vision. 64 tile connection range, 256x256 construction & vision area. 4x4 logistic area. +se-shield-projector=Creates a protective force field. More energy is required when the projector is charging or when the shield takes damage. Can block enemy projectiles if the "Combat Mechanics Overhaul" mod is installed. +se-deep-space-transport-belt=Fast long-distance transport belts that can be placed in space. Different colors can be used to easily identify lines from a distance. +se-big-turbine=A large 1GW generator that takes in 5000°C steam, outputs 500°C steam at the other end, and outputs water at the sides. 99% energy efficient, 99% water conservation. +se-big-heat-exchanger=A large heat exchanger designed for high temperatures and high capacity. +se-addon-power-pole=A small electric pole designed to be attached to buildings or for precise control over electrical coverage. +se-zone-discovery-random=Search for planets, moons and asteroid belts using telescopes. +se-zone-discovery-targeted=Search for planets, moons and asteroid belts that have specific resources. Select resources preference in [img=virtual-signal/informatron] InformaTron > Zone discovery. +se-zone-discovery-deep=Search for interesting areas of deep interstellar space. Asteroid fields can have a lot of unique and valuable resources. +se-delivery-cannon=A railgun capable of shooting resources into orbit and beyond, and an armoured chest to catch them. +se-delivery-cannon-capsule-iridium=Although iridium is a heavy metal, the increased durability means less material can be used compared to a standard delivery capsule. The overall weight is the same but it is simpler to manufacture. +se-delivery-cannon-weapon=A large railgun capable of shooting special ammunitions, such as an atomic bomb, to other surfaces. +se-spaceship-clamps=Allows you to place docking clamps so that spaceships can anchor to a specific location by matching up clamp locations. Automation requires "Anchor using" and "Anchor to" signals fed into the console. +se-bio-upgrade-constitution=Increases max health. +se-bio-upgrade-strength=Increases carrying capacity. +se-bio-upgrade-agility=Increases movement speed. +se-bio-upgrade-dexterity=Increases crafting speed. +se-bio-upgrade-intelligence=Increases the learning gained from each science pack. +se-energy-beaming=An intense energy beam that can be used as a weapon from the sky, or to transfer power where it is needed. +se-energy-beam-defence=Defends against space-based energy beams and coronal mass ejections. Works by levitating magnetic particles into a protective bubble, then re-aligns and clumps the particles as needed to diffuse hostile energy beams. +se-nexus=A device that can be activated on a spaceship moving in interstellar space to generate data, and with additional technology it can activate a space distortion field (Spaceship Victory). +se-spaceship-victory=Allows the Nexus to activate a distortion drive to escape the local stellar cluster. Have a Nexus running in Distortion Drive mode spaceship moving at __1__ speed in interstellar space for __2__ seconds to win the game. +se-arcosphere=Allows the collection of arcospheres lost in the interstellar void. +se-arcosphere-folding=Allows the use of arcospheres as extradimensional pincers. +se-space-probe=A space-based rocket silo for launching space probes. Can also be used to launch satellites cheaply. +se-linked-container=A container linked by extradimensional space to other containers. The links of the container depend on the surface it is first placed on. +se-unit-capsule=Capules that deploy friendly __1__ units. + + +[modifier-description] +tesla-shooting-speed-bonus=ライトニングボルトの発射速度 +tesla-damage-bonus=ライトニングボルトのダメージボーナス +railgun-damage-bonus=レールガンのダメージボーナス +railgun-shooting-speed-bonus=レールガンの発射速度 + +[virtual-signal-name] +se-star=星 +se-planet=惑星 +se-planet-orbit=惑星の軌道上 +se-moon=月 +se-moon-orbit=月軌道上 +se-asteroid-belt=小惑星帯 +se-asteroid-field=小惑星帯空域 +se-anomaly=アノマリー  +se-meteor=隕石 +se-spaceship=宇宙船 +se-remote-view=リモートビュー +se-death=死亡 +se-character-corpse=死体 + +[controls] +se-remote-view=惑星探査画面 +se-respawn=リスポーン + +[shortcut] +se-remote-view=惑星探査画面 +se-respawn=リスポーン + +[shortcut-name] +se-remote-view=惑星探査画面 [__CONTROL__se-remote-view__] +se-respawn=リスポーン [__CONTROL__se-respawn__] + +[tile-name] +se-space-platform-plating=宇宙プラットフォームプレート +se-space-platform-scaffold=宇宙プラットフォーム足場 +se-space-platform-underlay=宇宙 +se-space-platform-underlay-l=宇宙 +se-space-platform-underlay-r=宇宙 +se-space=空きスペース +se-regolith=レゴリス +se-asteroid=小惑星 +se-spaceship-floor=宇宙船の床 + +[mod-setting-name] +se-meteor-interval=隕石の間隔 +se-plague-max-runtime=疫病効果時間 +se-planets=惑星の数 +se-planet-size=惑星の大きさ(1% から 10000%まで) +se-seed=惑星のシード値 +se-skip-experimental-warning=実験的な警告をスキップ +se-print-meteor-info=コンソールへの隕石アラートを表示。 +se-space-pipe-capacity=宇宙パイプ容量 +se-electric-boiler=電気ボイラー + +[mod-setting-description] +se-meteor-interval=隕石落下の間隔。各隕石落下の次の落下までの時間が、1(分)からこの値の間のランダムな時間で発生するように設定されています。 +se-plague-max-runtime=疫病の最大効果時間(分)。この時間の間、疫病は全ての生物と木を破壊していきます。 +se-planets=キャンペーンを通じて途中を変更しないでください。 +se-planet-size=キャンペーンを通じて途中を変更しないでください。 +se-seed=キャンペーンを通じて途中を変更しないでください。 +se-skip-experimental-warning=新しいゲームを始める時の警告が表示されず、メッセージが変更された場合、あなたは警告が更新されません。 +se-print-meteor-info=コンソールにアラートが表示されます。表示が消えた後も[ __CONTROL__toggle-console__]キーでアラートを確認することができます。 +se-space-pipe-capacity=スペースパイプ用の流体の容量。 +se-electric-boiler=ゲームへの電気ボイラーを追加 + +[autoplace-control-names] +planet-size=惑星の大きさ +se-water-ice=氷(宇宙のみ、スライダは何の効果もありません) +se-methane-ice=メタンの氷(宇宙のみ、スライダは何の効果もありません) diff --git a/space-exploration_0.5.80/space-exploration/locale/ko/strings.cfg b/space-exploration_0.5.80/space-exploration/locale/ko/strings.cfg new file mode 100644 index 0000000..b275d8d --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/locale/ko/strings.cfg @@ -0,0 +1,2111 @@ +spaceship-integrity100=우주선 선체 강도 +100 +spaceship-integrity300=우주선 선체 강도 +300 +spaceship-integrity500=우주선 선체 강도 +500 +arcosphere-discovery=깊은 성간 우주에서 아코스피어를 수집합니다. +core-mining-productivity-5=심층 채굴 생산성 +5% +se-zone-discovery-random=연구되면 무작위 구역을 탐색합니다. +se-zone-discovery-targeted=연구되면 목표 자원의 구역을 탐색합니다. +se-zone-discovery-deep=연구되면 심우주 구역을 탐색합니다. +unlock-spaceship-victory=우주선 승리 조건이 잠금 해제됩니다. 3000 이상의 구조 강도를 지닌 우주선으로 성간 우주에서 250의 속도로, 넥서스를 왜곡 드라이버 모드 상태로 60초 이상 진행하세요. + +[mod-name] +space-exploration=우주 탐사(Space Exploration) + +[mod-description] +space-exploration=화물 로켓을 만들어 우주를 향해 물건을 발사하세요. 그리고 직접 로켓에 탑승해 우주로 나아가 우주 유영하고, 복잡한 데이터 기반 우주 과학을 개발하기 위해 궤도 상에 우주 플랫폼을 구축하세요. 우주선 타일로 우주선을 만들고 행성 표면에서 다른 행성이나 위성, 소행성대로 날아가세요. AAI Industry 모드와 함께 플레이하는 것을 강하게 권장합니다. 실행에 Space Exploration Postprocess 모드가 추가로 필요합니다 (자동으로 설치되지 않습니다. 자세히 설명하기엔 너무 복잡한 문제). 실험 단계이므로 필수 및 권장 모드 외의 모드를 설치하여 플레이하는 것을 권하지 않습니다.\n\n번역: XMKTP (신대현, PolarZero) + +[space-exploration] +space-exploration=우주 탐사 +menu_space-exploration=우주 탐사 +title_space-exploration=우주 탐사 +off=꺼짐 +on=켜짐 +close=닫기 +show=보기 +wdc_auto_off=수동 조준 +wdc_auto_on=자동 조준 +name=이름 +rename-something=__1__ 이름 변경 +trigger-none=없음 (수동 발사) +trigger-fuel-full=연료 최대 충전 시 발사 +trigger-cargo-full=화물 최대 적재 시 발사 +trigger-fuel-full-signal=연료 최대 충전 시 녹색 신호에 발사 +trigger-cargo-full-signal=화물 최대 적재 시 녹색 신호에 발사 +trigger-cargo-full-or-signal=화물 최대 적재 혹은 녹색 신호에 발사 +destination-type-zone=대략적 지점 +destination-type-landing-pad=화물 착륙 패드 +button-launch=발사 +button-launch-disabled=발사 (비활성화됨) +destination-crash-warning=경고: 충돌 확률을 줄이려면 화물 착륙 패드를 사용하세요. +recipe-to=__1__ 에서 __2__ +recipe-from=__2__로부터 __1__ +simple-a-b=__1____2__ +simple-a-b-space=__1__ __2__ +simple-a-b-comma=__1__, __2__ +simple-a-b-break=__1__\n__2__ +interstellar-map=성간 지도 +interstellar-space=성간 우주 +planetary-system=__1__ 성계 +remote-view=항법 위성 연결 [__CONTROL__se-remote-view__] +remote-view-window-title=[img=virtual-signal/se-remote-view] 항법 위성 [__CONTROL__se-remote-view__] +remote-view-currently-viewing=현재 보기: +remote-view-instruction=더 많은 위성을 발사하여 더 많은 항성, 행성, 위성 그리고 그 외 다양한 구역을 발견하세요. +remote-view-spaceships=__1__ 우주선 +remote-view-spaceships-anchored=우주선 __1__대 정박중 +remote-view-clamps=__1__ 우주선 클램프 +remote-view-show-hide-resources=자원 표시/숨기기 +remote-view-show-hide-stats=통계 표시/숨기기 +remote-view-show-hide-anchor-info=정박 정보 표시/숨기기 +exit-remote-view=항법 위성 연결 종료 [__CONTROL__se-remote-view__] +open-zonelist=우주 탐색기 열기 +zonelist-window-title=[img=virtual-signal/se-planet-orbit] 우주 탐색기 [__CONTROL__se-universe-explorer__] +priority-icon=[img=virtual-signal/se-accolade] +priority-tooltip=우선 순위 (중요 구역과 비중요 구역 정리) +trim-zone-button=[img=item/cliff-explosives] 표면 다듬기 +trim-zone-button-tooltip=플레이어 개체, 특수 개체 및 맵원점에 의해 정의된 경계 상자 외부의 청크를 제거합니다. +trim-zone-button-no-surface-tooltip=표면이 없습니다. +trim-zone-results=__2__에서 청크 __1__개를 제거했습니다. X [__3__ ~ __4__] Y [__5__ ~ __6__] 구역을 다듬었습니다. +delete-zone-button=[img=virtual-signal/se-remove] 표면 삭제 +delete-zone-button-tooltip=특정 표면은 삭제할 수 없습니다. +delete-zone-button-no-surface-tooltip=표면이 없습니다. +scan-zone-button=[img=item/satellite] 표면 스캔 +scan-zone-button-tooltip=경고: 스캔이 진행되는 동안 게임 속도가 느려질 수 있습니다. 스캔 속도는 모드 설정에서 설정할 수 있습니다. 스캔은 언제든지 중단할 수 있습니다. +scan-zone-button-disabled-tooltip=표면을 스캔하려면 위성을 발사해야 합니다. +stop-scan-zone-button=[img=item/satellite] 모든 스캔 중단 +stop-scan-zone-button-tooltip=모든 표면 스캔을 중단합니다. +generic-requires-satellite=먼저 위성을 발사해야 합니다. +remote-view-requires-satellite=항법 위성 연결을 사용하려면 위성을 발사해야 합니다. +satellite-discovered-platform=[color=cyan]위성이 궤도를 도는 우주 플랫폼을 발견했습니다.[/color] [img=virtual-signal/se-planet-orbit] 우주 탐색기를 열고 [__CONTROL__se-universe-explorer__], 선택한 __1__의 표면 보기를 클릭하세요. 유용한 것들을 발견할 수 있습니다. +satellite-view-unlocked=[color=cyan][img=virtual-signal/se-remote-view] 내비게이션 위성 업링크[/color]가 잠금 해제되었습니다. 이제 당신이 발사한 위성을 통해 그동안 발견한 다양한 천체들을 살펴 볼 수 있습니다. [color=green][__CONTROL__se-remote-view__][/color] 키를 누르거나 (단축키 오른쪽에 있는) 바로 가기 도구 모음을 사용하여 활성화할 수 있습니다. +source-discovered-zone=[color=cyan]__1__에 의해 새로운 __2__이/가 발견되었습니다: [/color][img=__3__] [color=white]__4__[/color]. 발견된 위치는 [img=virtual-signal/se-planet-orbit] 우주 탐색기 [__CONTROL__se-universe-explorer__]를 통해 확인할 수 있습니다. +discovered-zone=[color=cyan]새로운 __1__이/가 발견되었습니다: [img=__2__] [/color][color=white]__3__[/color]. +discovered-anomaly-additional=[img=virtual-signal/se-anomaly] 이상변칙으로부터 알 수 없는 개체가 감지되었습니다. [img=virtual-signal/informatron] 탐사 일지 [__CONTROL__informatron__]가 갱신되었습니다. +satellite-discovered-nothing=새로운 위성이 발사되었지만, 아무 것도 찾지 못했습니다. 다른 항성계 주변에서 더욱 많은 것을 찾을 수 있을 것입니다. +tech-discovered-nothing=망원경이 근처에서 새로운 별을 찾지 못 했습니다. 더 깊은 심우주에서 찾을 수 있을 겁니다. +tech-deep-discovered-nothing=망원경이 심우주에서 특별히 새로운 것을 찾지 못 했습니다. +galaxy_ship_authenticated=[img=virtual-signal/se-spaceship] 버려진 우주선: [color=cyan]\"생체 서명이 인증되었습니다. 에어록 접근 코드는 2236067964입니다. 긴급 백업 기록을 전송합니다.\"[/color] [img=virtual-signal/informatron] 탐사 일지 [__CONTROL__informatron__]가 갱신되었습니다. +space-capsule=우주 캡슐 +player-died=__1__ 플레이어가 죽었습니다. +launch-suit-warning=질식을 방지하려면 우주복을 착용하고 인벤토리에 생명 지원 용기가 있는지 확인하세요. +suffocating-warning=질식하고 있습니다. 우주 캡슐로 돌어가거나 우주복을 생명 지원 용기와 함께 착용하세요. +rocket_survivability_fail=화물 로켓이 운송 중 손상을 입어 경로를 이탈했습니다. 추가 로켓 안정성 및 화물 안정성 연구가 권장됩니다. __1__ +respawn-if-stranded=되돌아갈 수 없게 되었다면 부활 단축키 [__CONTROL__se-respawn__]를 누르세요. +respawn-options-title=부활 지점 +respawn-button-homeworld=[img=virtual-signal/se-planet] 고향 행성 +respawn-button-landing-pad=[img=item/se-rocket-landing-pad] 가장 가까운 착륙 패드 +respawn-button-spaceship=[img=virtual-signal/se-spaceship] 가장 가까운 우주선 +respawn-confirm-title=정말로 부활하시겠습니까? +respawn-confirm-yes=[img=virtual-signal/se-death] 부활 +respawn-confirm-no=취소 +search-list=탐색 +clear-search=탐색 초기화 +filter-list=필터 +clear-filter=필터 초기화 +attrition-type-radiation=방사선 +attrition-type-wind=풍속 및 풍향 +attrition-type-spacial-distortion=공간 왜곡 +zonelist-view-surface=표면 보기 +zonelist-heading-hierarchy=계층 구조 +zonelist-heading-type=구역 유형 +zonelist-heading-name=이름 +zonelist-heading-radius=반지름 +zonelist-heading-primary-resource=주요 자원 +zonelist-heading-attrition=로봇 간섭 +zonelist-heading-threat=위험도 +zonelist-heading-solar=태양광 +zonelist-heading-flags=깃발 +zonelist-heading-priority=우선 순위 +zonelist_filter_star=항성 포함 +zonelist_filter_planet=행성 포함 +zonelist_filter_planet-orbit=행성 궤도 포함 +zonelist_filter_moon=위성 포함 +zonelist_filter_moon-orbit=위성 궤도 포함 +zonelist_filter_asteroid-belt=소행성대 포함 +zonelist_filter_asteroid-field=소행성 구역 포함 +zonelist_filter_anomaly=이상 현상 포함 +zonelist_filter_spaceship=우주선 포함 +zonelist-resource-bar-tooltip=__1__ __2__\n빈도: __3__\n크기: __4__\n풍부함: __5__ +zonelist-resource-bar-tooltip-extended=__1__ __2__\n빈도: __3__\n크기: __4__\n풍부함: __5__\n__6__ +zonelist-resources-disclaimer=자원 확률은 추정치입니다. [?] +zonelist-resources-disclaimer-tooltip=모든 자원 값은 요소 밀도를 기준으로 한 추정치이며,\n게임의 지도 생성 컨트롤에 해당되는 부분입니다.\n실제 자원 패치는 변동되거나 물, 표면의 반경, 또는 특정 타일 요구 사항으로 인해 생성되지 않을 수 있습니다. +resource-terrain-required-se-vulcanite=화산 지형 필요 +resource-terrain-required-se-cryonite=냉대 지형 필요 +resource-terrain-required-se-vitamelange=잔디 지형 필요 +zone-tooltip-type=구역 유형: +zone-tooltip-parent=상위: +zone-tooltip-threat=위험도: +zone-tooltip-daynight=낮과 밤 주기: +zone-tooltip-bot-attrition=로봇 간섭 __1__: +zone-tooltip-radius=반지름: +zone-tooltip-solar=태양광: +zone-tooltip-flags=깃발: +zone-tooltip-closest=가까운 곳: +zone-tooltip-destination=목적지: +zone-tooltip-delta-v=__1__에서 델타 V +construction-denied=여기에 배치할 수 없습니다. +construction-denied-vehicle-in-space=지상 차량은 우주에 배치할 수 없습니다. +construction-denied-se-surface=잘못된 위치입니다. 우주 탐사 표면에 배치해야 합니다. +construction-denied-no-water=물 없음 +construction-denied-spaceship-only=우주선 바닥에 배치해야 합니다. +currently-viewing=현재 창: __1__ +fail-board-no-character=대상 우주선에 탑승할 수 없습니다. 이 액션을 사용하려면 캐릭터에 연결되어 있어야 합니다. +fail-board-remote-character=대상 우주선에 탑승할 수 없습니다. 캐릭터가 탑승하려는 우주선에 없습니다. +fail-board-target-anchored=정박된 우주선에 탑승할 수 없습니다. 대신 동일한 위치에 정박해보십시오. +starmap=우주 지도 +starmap-button=[img=virtual-signal/se-star] 우주 지도 +back=뒤로 +spaceship=우주선 +planet=행성 +moon=위성 +star=항성 +orbit=궤도 +something_orbit=__1__ 궤도 +asteroid-belt=소행성대 +asteroid-field=소행성 구역 +anomaly=이상 현상 +spaceship-cannot-set-destination-to-self=목적지는 같은 행성일 수 없습니다. +spaceship-streamline=스트림라인: __1__ +spaceship-launch-energy=발사 에너지: __1__ +spaceship-launch-energy-invalid=발사 에너지: 무결성 검사를 통과해야 합니다. +spaceship-speed=속도: __1__ +spaceship-structural-stress-hull=구조 강도 (선체): __1__ +spaceship-structural-stress-hull-invalid=구조 강도 (선체): 없음 (밀폐 필요) +spaceship-structural-stress-container=구조 강도 (보관 시설): __1__ +spaceship-structural-stress-container-invalid=구조 강도 (창고): 없음 (밀폐 필요) +spaceship-travel-time-unknown=여행 시간: 미확인. 최대 속도를 테스트하여 추정치를 얻어야 합니다. +spaceship-travel-time-max=여행 시간: 최대 속도에서 __1__초. +spaceship-travel-time-current=여행 시간: 현재 속도에서 __1__초. +spaceship-closest-location=가까운 지역: __1__ +spaceship-location-spatial-distortion=공간 왜곡: __1__ +spaceship-location-stellar-x=사분면 X: __1__ +spaceship-location-stellar-y=사분면 Y: __1__ +spaceship-location-star-gravity-well=항성계 중력권: __1__ +spaceship-location-planet-gravity-well=행성계 중력권: __1__ +spaceship-travel-status=여행 상태: __1__ +spaceship-integrity-status-valid=무결성 상태: 통과: __1__ +spaceship-integrity-status-invalid=무결성 상태: 실패: __1__ +spaceship-button-launch=발사 +spaceship-button-launch-tooltip=발사 준비 완료 +spaceship-button-launch-disabled=발사 (비활성화됨) +spaceship-button-launch-disabled-fuel-tooltip=추진 로켓 탱크에 연료가 필요합니다 +spaceship-button-launch-disabled-integrity-tooltip=무결성 검사를 마쳐야 합니다. +spaceship-button-anchor=정박 +spaceship-button-confirm-anchor=정박 확인 +spaceship-button-anchor-to=__1__에 정박 +spaceship-button-anchor-on=__1__ 표면에 정박 +spaceship-button-stop=정지 +spaceship-button-start=발진 +spaceship-button-board=__1__에 탑승 +spaceship-button-scouting-back=뒤로 +spaceship-button-scouting-back-tooltip=정박 정찰을 취소합니다. +spaceship-name-the=__1__ +spaceship-button-start-integrity-check=무결성 검사 시작 +spaceship-heading-destination=목적지 +list-destinations-alphabetically=목적지를 이름 순으로 정렬 +spaceship-travel-message-new-course-plotted=새로운 경로가 계획되었습니다. +spaceship-travel-message-exiting-planet-gravity=행성 중력권 이탈 +spaceship-travel-message-navigating-planet-gravity=행성 중력권 탐색 +spaceship-travel-message-exiting-star-gravity=항성 중력권 이탈 +spaceship-travel-message-navigating-star-gravity=항성 중력권 탐색 +spaceship-travel-message-spatial-distortions=공간 왜곡 탐색 +spaceship-travel-message-navigating-interstellar=성간 우주 탐색 +spaceship-travel-message-at-destination=목적지에 도착함 +spaceship-check-message-passed=통과: 올바른 우주선 상태입니다. +spaceship-check-message-failed-containment=실패: 기계판 주변 밀폐 손실. 모든 우주선 격벽이 우주선 바닥 위에 틈 없이 배치되어 있는지를 확인하십시오. +spaceship-check-message-failed-console-floor=계기판은 우주선 바닥에 배치되어야 합니다. +spaceship-check-message-failed-empty=계기판과 연결된 바닥이 올바르게 밀폐되지 않았습니다. +spaceship-check-message-failed-unknown-bounds=오류: 우주선 경계가 명확하지 않습니다. +spaceship-check-message-failed-stress=실패: 구조적 무결성 강도가 기술적 한계를 초과합니다. +spaceship-check-message-checking-console-floor=계기판과 연결된 바닥을 확인 중 +spaceship-check-message-checking-containment=밀폐 여부를 확인합니다. +spaceship-check-message-checking-connectivity=계기판 연결을 확인합니다. +spaceship-check-message-no-console=계기판이 없습니다. +spaceship-check-message-did-not-complete=확인이 완료되지 않았습니다 +spaceship-check-message-unstable=불안정: 우주선 기동 시 일부 구역이 분리될 것입니다. +spaceship-check-message-valid-but-disconnecting=통과/불안정: 일부 구역이 분리될 것입니다. +spaceship-warning-sections-disconnecting=구역이 분리되고 있습니다!! 정지 후 수리하십시오. +page_space_exploration_text_1=우주 탐사 모드에 오신 것을 환영합니다. 이미 모드에 많은 것이 있지만 아직 [font=default-bold]실험[/font] 상태이며 많은 것들이 개발되고 있습니다. 버그가 있을 수 있습니다.\n\n[font=heading-2]실험 상태요?[/font]\n\n우주 탐사는 여전히 빠르게 변화하고 있으며 모드 호환성을 희생해 가면서 주요 기능 개발을 위해 많은 시간을 할애하고 있습니다. [color=red]필수 및 권장 모드 이외의 다른 모드와 함께 플레이하는 것은 권장하지 않습니다.[/color]\n\n실험 상태에 있는 동안, 모드가 손상된 게임 및 세이브 파일, 충돌, 유효하지 않은 형태의 테크 트리, 또는 핵심 게임 플레이와 직결되는 치명적 문제를 일으키는 경우에 새로운 플레이어를 보호하기 위하여 빠르게 호환되지 않는 모드를 표시하고 있습니다. 이는 즉, 많은 모드를 사용하는 경우 아직 발견되지 않은 문제로 인해 후에 호환되지 않는 모드의 목록에 표시될 가능성이 매우 높습니다. 물론 호환되지 않는 모드와 함께 플레이하기 위해 info.json 파일을 자유롭게 편집하셔도 되지만, 그만큼 위험을 감수해야만 할 것입니다. 게임 상태가 더는 플레이 할 수 없는 상황에 이르더라도 저는 당신을 도와드릴 수 없습니다.\n\n실험 상태에 있는 동안, 대부분의 많은 정밀 검사 (overhaul) 모드는 테크 트리가 크게 손상되면 호환되지 않는 것으로 여기지만, 장기적인 의도는 두 개발자 서로 모두가 만족할 수 있도록 모드를 함께 작동할 수 있게 만드는 것입니다. Krastorio 2는 이미 실질적으로 진행중인 작업의 대표적인 예시입니다.\n\n우주 탐사 위키에 모드 호환성과 관련된 몇 가지 추가 정보가 기재되어 있습니다. 모드 호환성을 지원하고 싶으시다면 Discod를 통해 의견을 전해주세요. 허나 호환성 문제는 우주 탐사 모드 개발에 있어 우선 순위가 그리 높지 않습니다.\n\n[font=heading-2]권장 모드[/font] \n\n • AAI Signal Transmission 모드는 많은 표면 간의 신호를 서로 전달할 수 있도록 도와주는 시설을 추가합니다. 이 모드가 없다면 각 행성 간의 물류를 가늠하고 계산하기가 극도로 어려워질 것입니다.\n\n • Module Inserter 모드는 직접 일일이 갈 필요 없이, 위성 보기 모드를 통해서도 로봇을 통해 많은 시설에 모듈을 넣을 수 있도록 해줍니다.\n\n • Equipment Grid Logistic Module 모드는 스파이더트론같은 차량에 차량용 그리드 모듈을 추가해 차량이 직접 물류 네트워크에 접근하여 아이템을 요청하고 폐기 아이템을 처리해줍니다.\n\n • Grappling Gun 모드는 직접 이동하기가 어려울 때 건물과 강을 뛰어넘어 빠르게 상황을 벗어나게 해줍니다. 우주에 혼자 떨어졌을 경우 우주 플랫폼으로 빠르게 되돌아 올 수도 있고, (특히 이동하고 있는) 우주선에도 탑승할 수 있습니다.\n\n • Burner Leech 모드는 AAI 화력 시기에 유용할 것입니다.\n\n • Text Plates 모드는 행성의 이름이나 정류장, 우주선 도킹 구역 등을 알아보기 쉽게 표시하는 데 사용할 수 있는 유용한 문자판을 바닥에 놓을 수 있습니다.\n\n • Even Distribution 모드는 매우 많은 수의 건물에 아이템을 투입하는 데에 유용하며, 특히 초반에 매우 큰 도움이 되어줍니다.\n\n • Walls Block Spitters 모드는 맹렬히 다가오는 적, 특히 스피터의 침이 벽에 막히게 합니다. 스피터의 침 발사 속도가 약간 향상되지만, 모드 설정을 통해 비활성화 할 수 있습니다. 포탑보다 벽을 수리하는 것이 더욱 싸게 먹힌다는 것을 잊지 마세요.\n\n • Bullet Trails 모드는 총알을 발사할 때 총알이 나아가는 궤적이 순간적으로 나타납니다. 이를 통해 총알이 어디로 날아가는지, 포탑이 어느 적을 쏘고 있는지를 알 수 있습니다 (물론 시각적으로도 보기 좋습니다).\n\n\n[font=heading-2]권장 설정[/font]\n\nAlien biomes 모드의 모든 외계 타일을 활성화해야 합니다. 그렇지 않으면 중간에 게임이 충돌할 수 있습니다.\n\n게임의 진행이 평소보다 훨씬 더 길어질 것이니 적의 진화 요인을 어느정도 낮추고 시작하는 것이 좋습니다.\n\n게임을 어렵게 하는 제작법이나 마라톤 모드와 같은, 자원을 집중적으로 모아서 해야 하는 게임 방식이 아니라면 시작 행성에 대한 자원의 빈도나 매장량을 늘리지 마세요. 자원의 크기가 너무 높으면 다른 행성으로 떠나거나 확장할 이유가 사라집니다.\n\n\n[font=heading-2]도움되는 링크[/font]\n\n우주 탐사 위키를 참고하세요: https://spaceexploration.miraheze.org\n\nDiscord에서 도움을 받거나 개발에 도움을 주세요: https://discord.gg/ymjUVMv\n\n저의 2000 시간 가량이 이 모드에 담겼습니다. 당신이 이 게임을 즐기고 계시다면, Patreon에서 저를 지원하는 것도 고려해주세요: https://www.patreon.com/earendel +menu_meteor_defence=[img=virtual-signal/se-meteor] 운석 방어 +title_meteor_defence=운석 방어 +page_meteor_defence_text_1=운석은 무작위한 간격마다 대부분의 지역 표면에 떨어집니다. 모드 설정에서 운석 추락 간의 최대 주기를 변경할 수 있습니다.\n\n운석 수는 무작위로 50%의 확률로 1개, 25%의 확률로 2개, 12.5%의 확률로 3개, 6.25%의 확률로 4개... 등으로 무작위로 지정됩니다\n\n운석 방어 장치로 운석을 요격할 수 있습니다. 떨어지는 운석의 수에 따라 차례대로 운석을 향해 발사하므로 모든 운석 방어 시설이 작동하지 않습니다. 운석 방어 시설은 충분한 양의 탄약과 충전 시간, 그리고 충전하는 동안의 추가 전력이 필요합니다. 전력 소비는 그리 중요한 부분이 아니므로 위험과 비용의 균형을 맞추는 것이 좋습니다. +menu_coremining=[img=item/se-core-miner] 심층 채광 +title_coremining=심층 채광 +page_coremining_text_1=행성과 위성에서만 심층 채광이 가능합니다. 각 행성과 위성의 내부에는 어떤 성분으로 이루어졌는지에 따라 각기 다른 유형의 심층 파편을 얻을 수 있습니다. Nauvis는 공통적으로 모든 자원이 균일하지만 다른 장소에서는 주로 하나의 자원 유형만이 채굴되는 경향이 있습니다. 심층 채광 드릴은 전력을 어마어마하게 잡아먹지만, 석탄이나 원유, 우라늄을 통해 그 소모된 에너지를 돌려받을 수 있습니다.\n\n심층 채광 드릴은 많은 전력을 사용하며 같은 천체의 표면에 여러 개의 심층 채광 드릴이 배치되어 있다면 각 심층 채광 드릴마다의 채취 효율은 떨어집니다. 여러 개를 배치하더라도 일반 채광 드릴보다 전력 대비 효율성이 훨씬 낮지만 자원 부족이 일어나지는 않습니다. 게임 초반에 풍부한 전력이 있다면 하나의 심층 채광 드릴을 사용하는 것이 유용할 수 있습니다. 작은 행성에서 시작한다면 태양광과 심층 채광 드릴이 행성에서 탈출하기 위한 충분한 자원을 확보하는 유일한 방법일 수 있습니다.\n\n심층 채광 드릴은 채취 생산성 효과를 받으므로 이를 통해 후반에 더욱 많은 자원을 채취할 수 있게 됩니다. 그러므로 소수의 행성에서 많이 채취하기보다는, 많은 행성에서 한두 개씩 배치하여 채취하는 것이 좋습니다. +menu_beacons=[img=item/se-wide-beacon-2] 신호기 +title_beacons=신호기 +page_beacons_text_1=\n[font=heading-2]신호기 과부하 [img=virtual-signal/se-beacon-overload][/font]\n\n신호기 과부하는 팩토리오 게임의 신호기 시스템을 재구성한 것입니다. 각 조립 기계는 신호기 1개의 효과만 받을 수 있으며, 2개 이상의 신호를 받을 경우 과부하되어 생산이 중단됩니다.\n\n이러한 개편은 더 많은 모듈을 비콘에 넣을 수 있게 하고, 최대 보너스를 위해 신호기와 조립기계 모두에서 더 강력한 모듈의 사용을 촉진합니다. 또한 이러한 변화를 통해 더 광범위한 공장 설계를 가능하게 하고 촉진할 수 있습니다.\n\n기본 신호기는 바닐라 신호기보다 훨씬 강력하지만, 두 대 이상의 신호기를 중첩시킬 수 없으므로 바닐라에 비해 최대 상승 효과는 줄어듭니다. 더 강력한 신호기는 바닐라에서 중첩하여 사용할 수 있는 기계의 최대 부스트를 훨씬 능가할 수 있습니다.\n\n범위 신호기를 사용하기 시작하면서 플레이어는 모듈 비용 절감 효과와 함께 더 큰 건물을 회전하거나 여러 개의 유체 또는 재료 입력을 통해 복잡한 설계를 만들 수 있는 자유를 경험할 수 있습니다.\n\n둘 이상의 신호기의 영향을 받는 기계에는 신호기 과부하 아이콘이 표시되고 모든 생산 작업이 일시 중지됩니다. 일시중지되더라도 대기 전력은 계속 소비됩니다. +menu_launching_satellites=[img=item/satellite] 위성 발사 +title_launching_satellites=위성 발사 +page_launching_satellites_text_1=지금까지 발사된 위성의 개수는 [color=cyan]__1__[/color]개입니다.\n\n[font=heading-2][img=virtual-signal/se-remote-view] 내비게이션 업링크 [__CONTROL__se-remote-view__][/font]\n\n완성된 위성 로켓 격납고에 내비게이션 위성을 넣고 발사하면 [img=virtual-signal/se-remote-view] 내비게이션 위성 보기를 사용할 수 있게 됩니다. 이 모드는 [__CONTROL__se-remote-view__] 키를 눌러 빠르게 접근할 수 있습니다. 위성 모드에서는 카메라가 캐릭터와 분리되어 빠르게 지도를 둘러보고 새로운 지역을 발견할 수 있습니다. 위성 모드에서는 개체를 배치하거나 채취하는 등의 직접적인 행위는 할 수 없습니다. 대신 설계도면, 해체 계획기, 업그레이드 계획기의 사용이나 고스트 개체 배치, 전선 연결, 기계 제작법 변경, 신호 조합기 설정 등 많은 간접적인 행위를 할 수 있습니다.\n\n[font=heading-2][img=virtual-signal/se-planet-orbit]우주 탐색기 [__CONTROL__se-universe-explorer__][/font]\n\n내비게이션 위성 네트워크를 통해 다른 행성과 위성, 소행성 벨트, 소행성 지대, 그리고 천체의 궤도같은 다른 표면도 볼 수 있습니다. [__CONTROL__se-universe-explorer__] 키를 눌러 밝혀진 구역 목록을 불러옵니다. 내비게이션 위성을 발사하였다면 그곳에 무엇이 있는지 확인할 수 있습니다. 로켓을 타고 다른 행성으로 가기 전 미리 다른 행성을 정찰하는 것이 좋습니다.\n\n위성 발사는 처음 발사된 행성계 내에서 구역을 탐색하는 데 큰 도움이 됩니다 (자세한 내용은 구역 탐색을 참조하세요).\n\n[font=heading-2][img=item/se-satellite-telemetry] 위성 원격 측정[/font]\n\n[img=item/se-rocket-science-pack] 로켓 과학의 핵심 구성 요소인 위성 원격 측정은 위성 발사를 통해 얻을 수 있습니다. +menu_zone_discovery=[img=virtual-signal/se-planet-orbit] 구역 탐색 +title_zone_discovery=구역 탐색 +page_zone_discovery_text_1=이 우주에는 발견할 수 있는 수없이 많은 항성, 행성, 위성, 소행성 벨트, 소행성 지대가 있습니다.\n\n[font=heading-2]내비게이션 위성[/font]\n내비게이션 위성을 발사하여 위성이 발사된 동일한 항성계에서 무작위로 행성, 위성, 또는 소행성 벨트를 발견할 수 있습니다. 그 항성계에서 발견할 다른 천체가 더 없다면, 새로운 항성을 발견할 수 있지만 깊고 깊은 그 공간에 그 항성을 공전하는 다른 천체는 발견하지 못할 것입니다.\n\n[font=heading-2]구역 탐색 연구[/font]\n우주 망원경을 통해 발견하고 싶은 새로운 우주의 구역을 하나 탐색할 수 있습니다. 이것은 \"구역 탐색\" 연구를 통해 이루어집니다. 기본적인 구역 탐색 연구는 무작위로 항성, 행성, 위성, 또는 소행성 벨트 중 하나를 발견하게 됩니다.\n\n[font=heading-2]집중적인 구역 탐색 연구[/font]\n대상 구역 탐색 연구는 기본적인 구역 탐색 연구와 동일하나, 아래에 특별히 선호하는 자원을 선택하여 해당 자원이 크게 매장되었을 가능성이 높은 천체 하나를 중점으로 탐색합니다. 하지만 잊지 마세요, 항성을 찾기 전에는 행성을 찾을 수 없고, 행성을 찾기 전에는 위성을 찾을 수 없습니다. 항상 원하는 것을 찾으리라는 생각을 갖지는 마세요.\n\n[font=heading-2]심우주 구역 탐색 연구[/font]\n심우주 구역 탐색 연구는 끝없이 깊고 깊은 저 너머의 우주에만 존재하는 것들을 중점으로 하여 소행성 지대를 탐색할 수 있는 유일한 방법이며, 이렇게 발견된 소행성 지대는 나퀴움을 얻을 수 있는 유일한 지역이기도 합니다. 심우주 연구는 자원을 중점으로 찾을 수 없습니다.\n\n[font=heading-2]자원 지정 구역 탐색 설정:[/font] +menu_cargo_rockets=[img=virtual-signal/se-cargo-rocket] 화물 로켓 +title_cargo_rockets=화물선 +page_cargo_rockets_text_1=화물 로켓은 화물 로켓 격납고, 일명 로켓패드에서 발사됩니다.\n\n지금까지 발사된 화물 로켓은 [color=cyan]__1__[/color]개입니다.\n\n기술 연구에 기반한 화물 손실 값: 손실 최대 비율이 [color=cyan]__2__%[/color]만큼 감소합니다.\n\n기술 연구에 기반한 로켓 생존 가능성 값: 손실 확률이 [color=cyan]__3__%[/color]만큼 감소합니다.\n\n기술 연구를 기반으로 한 로켓 재활용 확률 값: [color=cyan]__4__[/color]개 (오차 범위 10개, 최대 100개)까지의 부품을 회수할 수 있습니다.\n\n[font=heading-2]시작하기[/font]\n\n화물 로켓을 발사하기 전에, 우선 우주 탐사가 설치된 상태에서 위성 로켓 격납고에 내비게이션 위성 (바닐라 Factorio의 일반 로켓 격납고와 인공 위성)을 넣어 발사하여야 합니다. \n\n화물 로켓 격납고를 만든 뒤에는 로켓을 만들고 연료를 공급해야 합니다.\n\n • 격납고 내 인벤토리에 100개의 화물 로켓 부품이 있어야 합니다. 처음이라면, 이 중 평균 약 20개 가량은 목적지 주변에서 회수할 수 있으며, 연구를 통해 회수 가능성을 높일 수 있습니다. \n • 격납고 내 인벤토리에 우주 캡슐 1개를 넣으세요. 우주 캡슐은 항상 목적지에 도달하고 착륙할 때 사용하며, 궤도에 있다면 가까운 행성으로 돌아갈 수 있습니다.\n • 화물 로켓 격납고의 각 모퉁이 근처에 있는 8개의 연결 포드 중 원하는 곳에 액체 로켓 연료를 연결하세요. 필요한 연료량은 현재 출발지가 되는 행성의 반지름과 원하는 도착지까지의 거리에 따라 다릅니다. 목적지 설정으로 \"이름이 있는 아무 착륙 패드\"를 설정한다면 유효하는 도착지까지 가는 데 충분한 연료를 적재합니다.\n\n화물 로켓 격납고의 전면에 있는 문 앞에서 __CONTROL__toggle-driving__ 키를 눌러 화물 로켓 격납고에 들어갈 수 있습니다. 이는 화물 로켓에 당신도 함께 날아갈 수 있음을 의미합니다. 우주로 같이 비행할 때에는 혹독한 우주 환경에서 생존하기 위해 추진 장치가 달린 우주복과 생명 유지 장치를 같이 들고 가세요. \n\n처음 화물 로켓을 발사한다면, 안전하게 착륙할 착륙 패드가 없으므로 로켓은 산산조각이 나며 안에 들어있는 화물은 곳곳으로 흩어질 것입니다. 또한 드물게 로켓의 항법 고장이 일어나 착륙 패드가 있어도 제대로 착륙하지 못하고 충돌할 수도 있습니다. 그래도 로켓 안에 있는 화물들은 안전하게 화물 포드에 배치되므로 손실 걱정은 안해도 됩니다. \n\n로켓 착륙 패드와 우주 플랫폼 비계를 가져가서 후에 다음 로켓이 그곳으로 다시 올 때를 대비하기 위해 표면을 구성할 수 있습니다.\n\n발사하기 전에 본 기지 내에 로켓 착륙 패드를 세워두면 후에 돌아올 때 아무 곳으로 가지 않고 원하는 지점으로 즉시 돌아올 수 있습니다.\n\n[font=heading-2]도착지[/font]\n\n착륙 패드를 배치하였다면 다음 화물 로켓을 발사할 때에는 무작위한 위치가 아닌 착륙 패드를 목표로 새로 설정해야 합니다. 직접 설정할 수 있지만, 위성을 통한 원격 보기 (단축키 'N')를 통해 할 수 있습니다. 그러나 착륙 패드에 아이템이 있다면 착륙하지 않으므로 항시 비워두세요.\n\n[font=heading-2]기초 자동화[/font]\n\n화물 로켓 격납고는 로켓 내부에 로켓 부품이 몇 개 있는지를 신호로 출력합니다. 화물 로켓 격납고에 부품을 투입하는 투입기에 [화물 로켓 부품 < 100] 조건을 설정하여 내부에 화물 로켓 부품을 추가로 채우지 않도록 할 수 있습니다.\n\n화물 로켓 격납고에 발사 조건을 설정하면 조건 만족에 따라 자동으로 발사되지만, 도착지로 설정된 착륙 패드 안에 화물이 있다면 자동 발사하지 않습니다 (만약 발사된다면 일부 화물이 손실될 것입니다).\n\n[font=heading-3]신호 입력[/font]\n\n[img=virtual-signal/signal-green] 녹색 신호: 격납고는 녹색 신호가 있을 경우 발사할 수 있도록 설정할 수 있으며 이 경우 녹색 신호를 주는 즉시 발사하게 됩니다.\n\n[font=heading-3]신호 출력[/font]\n\n[img=virtual-signal/signal-E] E 신호: 빈 슬롯의 수\n\n[img=virtual-signal/signal-F] F 신호: 화물이 찬 슬롯\n\n[img=virtual-signal/signal-L] L 신호: 도착지 설정에 따른 잠재적으로 요구되는 액체 로켓 연료의 용량입니다.\n\n[img=virtual-signal/se-cargo-rocket] 화물 로켓 신호: 로켓이 완성될 경우 (즉 캡슐 1개와 로켓 부품 100개가 만족될 경우) 값 1을 돌려줍니다.\n\n[img=item/se-space-capsule] 우주 캡슐 신호: 로켓 제작에 사용된 모든 캡슐은 화물 인벤토리에 있는 캡슐 개수와 합산됩니다.\n\n[img=item/se-cargo-rocket-section] 화물 로켓 부품 신호: 로켓 제작에 사용된 모든 화물 로켓 부품은 화물 인벤토리의 부품 개수와 합산됩니다.\n\n[img=fluid/se-liquid-rocket-fuel] 액체 로켓 연료 신호: 격납고 안에 충전된 총 액체 로켓 연료의 양입니다. +menu_delivery_cannons=[img=item/se-delivery-cannon] 배달 대포 +title_delivery_cannons=배달 대포 +page_delivery_cannons_text_1=배달 대포는 행성 간의 물품을 폭발성 힘으로 날려보낼 수 있는 레일건입니다. 급격히 가속화된 상태에서도 물품을 안전하게 지켜낼 수 있는 선에서 발사하도록 설계되었습니다. 배달 대포는 매우 복잡한 중간 제조품목이나 구조물을 발사할 수 없습니다.\n\n배달 대포는 목표 지점만 지정할 수 있을 뿐 그 목표 지점에 무엇이 있는지는 판단하지 못하며, 전력과 배달 캡슐이 충전되어 있는 한 지속적으로 화물을 발사합니다. 대포의 기능에 조건을 추가하려면 자원이나 캡슐로 충전되는 대포의 발사 기능을 직접 제한해야 합니다.\n\n만약 배달 캡슐이 맨 땅에 떨어지게 되면 해당 지역의 주변 개체는 큰 피해를 입게 되고 대부분의 자원이 파괴됩니다. 배달 대포 상자는 상자가 가득 차지 않는 한 안전하게 캡슐을 포착할 수 있습니다. 각기 다른 자원을 배달하는 여러 개의 배달 대포로 같은 상자를 목적지로 설정하여 발사할 수 있습니다.\n\n대상 상자를 항시 비워두거나, 신호 전송 (Signal transmission)을 이용하여 대포 입력을 제한하는 것이 좋습니다. +menu_lifesupport=[img=item/se-lifesupport-equipment-1] 생명 유지 +title_lifesupport=생명 유지 +page_lifesupport_text_1=우주같은 혹독한 환경에서는 단순한 장비로는 살아남을 수 없습니다. 이러한 적대적 환경에서 살아남으려면 생명 유지 장비와 생명 지원 용기가 필요합니다.\n\n생명 유지 장비와 소모품인 생명 지원 용기는 생명 지원 시설에서 만들 수 있습니다.\n\n생명 지원 용기는 시스템에 따라 모든 역할을 수행하기 위한 자원을 공급해주며 점차 소비됩니다. 생명 유지 막대가 조금씩 감소하여 완전히 떨어지게 되면 인벤토리 내에서 새로운 생명 지원 용기 하나를 소모합니다.\n\n생명 지원 장비는 아머 그리드에 장착되지만 우주복에는 기본적으로 하나의 생명 유지 장비가 내장되어 있습니다. 장비 그리드에 생명 유지 장비를 추가로 배치하여 생명 지원 효율성을 높일 수 있습니다. 우주복이 아닌 아머에 생명 유지 장비를 장비하는 경우 적대적인 행성에서는 보호하지만 우주의 진공에서는 보호하지 못 합니다.\n\n[font=heading-2]적대적인 환경[/font]\n적대적인 환경은 그 자리에 있는 것만으로도 당신의 신체에 손상을 입힐 수 있는 모든 구역을 말합니다. 생명 유지 장비는 적절한 가압과 산소, 물, 영양소, 열 조절 및 방사선 보호를 제공하며 이러한 위험으로부터 사용자를 보호하도록 설계되었습니다. 적대적 환경의 주요 유형은 두 가지로 다음과 같습니다.\n\n우주: 생명 유지 장비가 진공 상태에서도 올바르게 작동하려면 우주복 (추진 슈트)에 넣어져야 합니다. 만약 우주복이 아닌 다른 아머의 그리드에 생명 유지 장비를 넣는다면 우주의 질식을 막을 수 없습니다.\n\n땅: 특정 행성과 달은 방사선, 극한의 추위나 더위, 산성 대기와 같은 위험으로 가득 차 있어 생명 유지 장비가 필요할 것입니다 (출시 예정). 또한 행성에는 특정 생화학 무기를 사용할 수 있으며 이 경우에도 생명 유지 장비가 필요합니다 (역병 세계). 이 지역에 대한 생명 지원 장비는 우주복 뿐만이 아니라 다른 유형의 아머에 생명 유지 장비를 넣어도 됩니다. +menu_space_sciences=[img=item/se-astronomic-science-pack-2] 우주 과학 +title_space_sciences=우주 과학 +page_space_sciences_text_1=[img=item/se-rocket-science-pack] 최초의 우주 과학 팩은 로켓 과학 팩입니다. 로켓 과학 팩은 오로지 우주에서만 만들 수 있으므로 먼저 궤도 상에 작은 우주 정거장을 세워야 합니다. 로켓 과학 팩과 이후의 과학 팩들은 오로지 우주에서만 만들고 사용할 수 있으므로 다른 과학 팩도 시작하여 강력한 우주 과학 연구소에 투입해야 합니다.\n\n[font=heading-2]전문화된 과학[/font]\n\n우주 탐사에는 네 가지의 분야로 천문학, 생물학, 에너지, 물질이 있으며 그 분야에 맞게 네 가지의 과학 팩도 있습니다. 이들은 모두 데이터 기반으로 만들어지며 실험을 진행하는 과정에 따라 슈퍼컴퓨터에 대한 데이터를 수집하여 점점 더 정확한 생명과 우주, 그리고 모든 모델을 구축해야만 합니다. 그것들은 모두 거의 동일한 기술 수준이므로 개발 순서를 자유롭게 결정할 수 있지만 모든 분야는 새로운 자원들을 필요로 하므로 연구할 과학 분야를 선택하기 전 자신의 태양계 천체들을 확인해 보세요.\n\n[img=item/se-astronomic-science-pack-4] 천문학 과학은 주로 우주 물류에 중점을 둡니다.\n\n[img=item/se-energy-science-pack-4] 에너지 과학은 주로 에너지 생산과 전력 전송 및 첨단 기기에 중점을 둡니다.\n\n[img=item/se-material-science-pack-4] 물질 과학은 중공업 및 직접적 업그레이드에 중점을 둡니다.\n\n[img=item/se-biological-science-pack-4] 생물 과학은 캐릭터의 신체 업그레이드와 의학, 생명 지원, 생물 및 생화학 무기, 생산성에 중점을 둡니다.\n\n[font=heading-2]심우주 과학[/font]\n\n[img=item/se-deep-space-science-pack-1]심우주 과학은 성간 공허, 반물질, 그리고 시공간 왜곡에 중점을 둡니다. +menu_energy_beams=[img=item/se-energy-transmitter-emitter] 에너지 빔 +title_energy_beams=에너지 빔 +page_energy_beams_text_1=[font=heading-2]코로나 질량 방출[/font]\n곳곳의 항성들은 종종 위험한 입자 흐름을 방출해냅니다. 행성이나 위성에 이러한 입자 흐름이 도달하는 일은 그리 드문 일이 아닙니다. 만약 영향을 받는 표면에 당신이 세운 기지가 있다면 이를 대비하기 위해 물품들을 모으고 기지를 분산시키거나, 아니면 대용량 축전지를 모아서 우산 방어 시스템을 고려해야 합니다. 표면이 위협을 받게 될 것이라면 최소 4시간 일찍 조기 경보가 울리게 됩니다. 알려진 위협은 다음과 같습니다. +page_energy_beam_warning_text=[img=virtual-signal/se-star] 경고: __1__를 향한 코로나 질량 방출 감지. 예상되는 방어 요구 사항: 최대 정점 에너지량 __3__ GW, 120초간 __4__ GJ. 남은 예상 시간 __2__초. +page_energy_beams_text_2=[font=heading-2]우산: 에너지 광선 방어[/font]\n에너지 광선 방어 시설인 \"우산\"은 코로나 질량 방출 및 우주에서 날아오는 에너지 광선 무기로부터 보호할 수 있습니다. 자분 입자를 보호용 버블에 부풀려 놓은 다음, 적대적인 에너지 빔을 확산시키기 위해 필요에 따라 다시 정렬하고 뭉치는 방식으로 작동합니다. 작동에 에너지가 필요하며, 기본 전력 사용량은 10MW이지만 에너지 광선의 위력에 따라 점진적으로 증가합니다. 코로나 질량 방출에 대해 지면당 1기로 충분하며, 에너지 빔 공격에 대해 우산 1기는 최대 500GW의 광선 공격을 방어할 수 있습니다. 코로나 질량 방출의 경우, 100% 태양광 강도의 반경 5000의 행성에서의 기본 전력 요구량은 약 160GJ이며, 최대 전력 소비량은 1분 당 2GW입니다. 이는 해당 구역의 태양광 발전 효율에 따라 증가하거나 감소하며, 고체 물체의 경우 기준 반지름 5000을 기준으로 상대적으로 증가하거나 감소합니다. 에너지 광선 방출기의 경우 전력 요구량은 목표값의 에너지 빔 강도의 1/10(효율 손실 후)이 될 것으로 예상됩니다.\n\n[font=heading-2]에너지 방출[/font]\n에너지 광선 방출기는 에너지를 크게 두 가지 방법으로 다른 지면으로 보낼 수 있습니다. 먼 행성 표면에 전력을 공급하는 방법인 \"에너지\" 또는 절단용 광선 무기인 \"글레이브\"입니다. 글레이브 모드에서 광선은 지속적으로 주변 구역을 손상시키지만 경로를 절단하는 대상 표면 위로 이동할 수 있습니다. 빔에 입력되는 에너지에 따라 손상 비율, 면적 및 빔 속도가 증가합니다. \"Auto-Glaive\" 모드에는 자동 대상 선택이 있습니다.\n\n에너지 광선 방출기에는 에너지 광선 빔 챔버를 End-on으로 연결할 수 있는 4개의 연결 지점이 있습니다. 에너지 빔 챔버는 길이 방향으로 연결하거나 긴 가장자리가 짧은 가장자리 중앙과 일치하지만 직접 좌우로 연결할 수는 없습니다. 에너지 빔 인젝터는 에너지 빔 챔버의 측면에 직접 부착하여, 연결된 에너지 빔 방출기의 전력을 증가시킵니다. 광선으로부터 전력을 수집하려면 대상 표면에 에너지 광선 수신기가 있어야 하며, 방출구의 목표를 사용하여 에너지 광선 수신기를 대상으로 선택해야 합니다. 광선이 수신기를 대상으로 삼으면 수신기가 가열됩니다. 열은 측면의 열 연결부에서 열 교환기 및 터빈에 동력을 공급하기 위해 취해질 수 있습니다. +menu_spaceships=[img=virtual-signal/se-spaceship] 우주선 +title_spaceships=우주선 +page_spaceships_text_1=우주선은 포함된 구조물, 물건, 그리고 플레이어를 우주로 발사하고, 태양계 주위를 이동하거나 다른 표면에 착륙할 수 있는 거대하고 강력한 차량입니다.\n\n[font=heading-2]우주선 제작[/font]\n우주선은 자유로운 디자인의 우주선을 만들기 수 있도록 많은 종류의 타일과 더 작은 부품들로 제작됩니다. 당신은 거의 움직이는 작은 기지처럼 우주선을 디자인합니다.\n\n우주선 바닥부터 제작하되, 너무 크게 만들지 마십시오. 처음 몇 개의 우주선은 엄격한 크기 제한이 있고, 제한값은 특정 연구를 완료하여 완화할 수 있습니다. 격벽이 만들어지도록 가장자리에 우주선 벽을 두르고 틈이 없는지 확인합니다(대각선 포함). 그리고 우주선 콘솔을 우주선 내부에 놓으십시오. 이는 우주선의 핵심 부분이고 어떻게 조종하는지가 중요합니다. 콘솔이 배치되면 콘솔이 어떤 부품이 제대로 부착되어 있는지, 어떤 부품이 제대로 들어 있는지, 실행하려고 하면 어떤 부품이 떨어질지 파악하면서 펄스가 일부 발생합니다. 사각형이 빨간색으로 깜박이면 설계에 문제가 있는데, 이 문제는 우주선 콘솔을 확인하여 진단할 수 있습니다. 여러분은 또한 우주선 로켓 부스터 탱크와 우주선 로켓 엔진이 필요합니다. 부스터 탱크는 우주로 가는 데 필요한 연료를 저장하고 VTOL 구성 요소를 제공합니다. 로켓 엔진은 우주에서의 느린 화상이 목적지에 도착하도록 하는 것입니다. 또한 정면(항상 북쪽)의 어떤 형태의 방어도 권장됩니다. 성운에 잔해가 가득하기 때문입니다.\n[font=heading-2]구조 강도[/font]\n초기에는 무결성 저항값의 기술적 한계로 인해 매우 제한된 크기의 우주선만 제작할 수 있을 것입니다. 추가 기술 연구를 통해 더 큰 우주선을 만들 수 있습니다. 구조 강도는 A. 배의 크기와 B. 아이템 적재량 두 가지로 계산됩니다. 총 구조 강도는 하중 증가 요인 중 어느 것이든 두 값이 함께 추가되지 않는 스트레스 요인입니다.\n\n[font=heading-2]효율화[/font]\n이 우주공간은 질긴 성운으로 구성되어 있습니다. 만약 당신이 당신의 우주선을 효율적으로 설계한다면 최대 속도를 최대 30% 정도까지 향상시킬 수 있습니다. 납작한 상자 앞면은 피해야 하지만 쐐기를 박을 필요는 없습니다. 3분의 1까지 또는 당신의 우주선 앞면은 벌칙 없이 평평할 수 있습니다. 원형 모양도 정상이어야 합니다. 무결성 검사를 수동으로 트리거하여 능률화가 어떻게 진행되는지 확인할 수 있습니다.\n\n[font=heading-2]속력[/font]\n선박 속도는 엔진의 추력 대 선박 무게에 기초합니다(통합 응력에 의해 근사치). 엔진은 선박에 넣을 수 있지만 빈 공간을 뒤로 한 배 뒤쪽에 있는 엔진이 더 효과적입니다(약 25% 개선).\n\n[font=heading-2]장거리 운송 활동[/font]\n장거리 여행을 고려할 때, 여러분의 몸이 이동하는 동안 위성 모드에서 많은 것을 할 수 있다는 것에 주목할 필요가 있습니다. 위성 업링크를 통해 원격으로 우주선에 명령을 내릴 수도 있습니다.\n\n[font=heading-2]Crafting Machines[/font]\n[color=#ffaaaa]경고: 우주 공간용으로 고안된 조립 기계는 우주선이 육지에 있을 경우에만 다른 육상 구조물에서 공유하는 요리법을 사용할 수 있을 것입니다. 우주선이 행성에 착륙해 있을 때 우주 기반 제작법이 건물에 지정된다면, 건물 내의 재료는 없어질 것입니다. 일부 지상용 조립 기계는 우주에서 작동할 수 있지만, 우주 공간에서 생산성 모듈을 사용할 수 있는 능력은 잃게 됩니다. 만약 우주선 내부의 지상용 기계에 생산성 모듈을 가진 상태에서 발사된다면, 내부에 있던 생산성 모듈은 파괴됩니다.[/color]\n\n[font=heading-2]우주선 신호[/font]\n우주선 콘솔의 오른쪽 상단 부분은 자체 신호를 출력하기 때문에 메인 구조물과 별도로 와이어로 연결할 수 있습니다.\n[img=item/se-spaceship-console]콘솔 번호는 우주선의 ID를 나타냅니다.\n[img=virtual-signal/signal-speed] 속도 신호는 우주선의 속도를 나타냅니다. 정지된 경우 -1, 정박된 경우 -2입니다.\n[img=virtual-signal/signal-distance] 거리 신호는 선택한 목적지까지의 거리를 나타냅니다. 도착 시 -1, 정박 시 -2, 도착지가 설정되지 않은 경우 -3.\n[img=virtual-signal/se-planet-orbit] 네 번째 신호가 있는 경우 현재 목적지를 나타냅니다.\n[img=virtual-signal/signal-A] 우주선이 정박해 있으면 A 신호로 고정 구역 ID를 나타냅니다.\n\n[font=heading-2]우주선 자동화[/font]\n콘솔의 기본 구조는 다음과 같은 신호 입력을 수용할 수 있습니다:\n[img=virtual-signal/signal-speed] 속도 신호로 목표 속도를 설정하거나 엔진을 작동합니다.\n[img=virtual-signal/se-spaceship-launch]우주선 발사 신호로 발사를 촉발합니다.\n[img=virtual-signal/se-planet-orbit] 목적지 신호는 목적지를 설정합니다. 우주선을 만든 후에 우주 탐색기 측면 패널에서 구역 신호를 볼 수 있습니다.\n우주선이 착륙하게 하려면 콘솔에는 [img=virtual-signal/se-anchor-using-left-clamp] \"우주선 왼쪽 클램프를 사용하여 정박\" 과 [img=virtual-signal/se-anchor-to-right-clamp] \"오른쪽 클램프를 대상으로 정박\" 또는 [img=virtual-signal/se-anchor-using-left-clamp] \"우주선 오른쪽 클램프를 사용하여 정박\" 과 [img=virtual-signal/se-anchor-to-right-clamp] \"왼쪽 클램프를 대상으로 정박\" 중 한 쌍의 앵커 신호가 제공되어야 합니다. 신호 값은 선박의 클램프 값 및 목적지의 클램프 값과 일치해야 합니다. 클램프의 UI를 열어 이러한 값을 확인하고 변경할 수 있습니다. 일치하는 것이 발견되면, 배는 두 개의 클램프를 연결한 상태에서 착륙을 시도할 것입니다. 주의해서 사용하세요. +menu_arcospheres=[img=item/se-arcosphere-a] 아코스피어 +title_arcospheres=아코스피어 +page_arcospheres_text_1=아코스피어는 나노 공학을 통해 얻어낸 나퀴움 결정의 거의 완벽한 형태의 구체입니다. 기원은 거의 알려지지 않았지만, 성간 공간에서 흔하게 발견됩니다.\n\n각각 시공간에서 초차원적인 매듭을 포함하며 작은 작은 4차원 공간 차원과 상호작용을 할 수 있도록 합니다. 구체는 서로 상대적인 움직임을 통해 시공간의 특정 측면을 다룰 수 있도록 편광할 수 있습니다. 특정 아코스피어 묶음을 사용하여 시공간을 더욱 높은 차원으로 왜곡하고 엮을 수 있습니다.\n\n[font=heading-2]사용[/font]\n아코스피어는 게임에서 가장 독특한 제작 과제입니다. 아코스피어는 제작의 도구로 사용되지만, 절대 파괴되지 않으며 단지 바뀔 뿐입니다. 사용시 주요 과제는 보유한 구체를 순환시키면서 특정 유형이 떨어지지 않도록 하는 것입니다. 생산의 균형을 맞추는 방법은 여러 가지가 있지만, 몇 가지 제작 방식이 많은 도움이 될 것입니다. 문제가 발생한다면 Discord를 통해, 혹은 우주 탐사 위키에서 더 많은 정보를 찾아볼 수 있습니다.\n\n[font=heading-2]수집[/font]\n아코스피어는 소행성 구역에서 아코스피어 수집기를 발사하여 발견할 수 있습니다. 반복적인 발사는 수집률을 낮춥니다. 대신 다른 소행성 구역에서 발사한다면 더욱 높은 수집률을 기대할 수 있습니다. +page_arcospheres_text_deep=깊은 성간 공허에서 발견된 아코스피어는 총 [color=cyan]__1__개[/color]이며, 발사된 수집기는 __2__개입니다. +page_arcospheres_text_zone=__1__ 근처에서 발견된 아코스피어는 총 [color=cyan]__2__개[/color]이며, 발사된 수집기는 __3__개입니다. +menu_exploration_journal=[img=item/se-thruster-suit] 탐사 일지 +title_exploration_journal=탐사 일지 +page_journal_title_backstory=불타오르는 알람 소리 +page_journal_text_backstory=나는 작은 우주선의 일부가 내 주위에서 불타는 모습과 낯선 행성에 추락한 나 자신을 발견했다. 내 몸은 멍들고 긁히고 그을려졌지만 그리 심각한 것은 아니었다. 내 머리 부상은 분명히 더 심각했고, 욱신거리는 두통과 함께 불빛도 보이지 않았다. 더 나빴던 것은, 내가 어떻게 여기까지 왔는지, 심지어 건설에 대한 목적의 이름과 희미한 감각을 넘어 내가 누구인지도 잊어버렸다. 그때까지도 무엇을 지어야 할지와 어떻게 지어야 할지가 생각나지 않았다. 처음에 나는 충돌 사고로 머리를 세개 부딫혀서, 그래서 기억은 다시 돌아올거라 생각했는데, 아직도 기억이 돌아오지 않았다. 나의 데이터 기록도 비어 있거나 다시 포맷되어 있어, 나는 다른 이유들을 생각하게 되었다. +page_journal_title_satellite_launch=세상을 보는 눈 +page_journal_text_satellite_launch=나는 드디어 인공위성을 저 높은 궤도로 올려보낼 수 있었다. 인공위성 발사는 분명 내가 가야 할 길을 알려주는 이정표이며 충분히 축하할 만한 일이긴 하지만, 지금도 해야 할 일이 남아 있다. 어쩌면, 이건 단지 시작에 불과할 지도 모른다. +page_journal_title_cargo_launch=무한한 공간 저 너머로 +page_journal_text_cargo_launch=이제 난 우주에 와 있다. 이제 난 그동안 집이라 불리우던 암석 덩어리로부터 오랜 시간 발을 뗄 수 있게 되었다. 하늘이 내게 이리 오라 손짓한다. +page_journal_title_entered_vault=유물 사냥꾼 +page_journal_text_entered_vault=__1__에서 발견한 피라미드 모양 아래에 있는 동굴에 들어가 보니 어둡고 위험한 방 하나를 발견했다. 방에는 두 개의 고대 카르투슈가 있었는데, 하나는 크고 다른 하나는 작았다. 둘 다 다른 원과 선이 함께 표면에 여러 이상한 글자들이 적혀 있었다. 큰 카르투슈의 중앙에 있던 문양은 시스템이 전달하려던 정보 중 가장 중요한 것으로 보였다. 정보가 뭐였든, 여태 내가 알고 있던 것과는 전혀 다른 형태였다. 카르투슈 뒤에는 모듈로 쓰일 만한 강력한 장치가 들어있는, 일종의 돌출 실린더가 있었다. 내가 발견한 이 모듈은 내가 봐왔던 모듈 구조와 너무 달라서, 내 예상대로라면 엄청난 효과를 가져다 줄 지도 모른다. 가까운 행성 곳곳에 이런 구조물이 더 있다면, 그 가치는 충분할 것이다. 이제 유물 탐사를 할 시간이다. +page_journal_title_found_gate=이상 현상 +page_journal_text_found_gate=이상변칙에서 일종의 거대한 고리 모양의 인공물을 발견했다. 멀리서도 난 두 가지의 사실을 즉시 알 수 있었다. 첫 째는 까마득히 오래된 고대 물품이고, 둘 째는 적어도 내가 알고 있는 기술은 아니라는 것이다. 그게 뭐든, 지금은 파괴된 것에 불과하다. +page_journal_title_found_gate_ship=이상변칙 우주선 +page_journal_text_found_gate_ship=상당히 거대한 외딴 우주선의 일부가 고리 모양의 인공물 근처에서 발견되었다. 우주선의 기술은 내가 만든 것과 비슷한데 조금 더... 멋있다. 어쨌든 그 고리 모양과는 다른 기술인건 확실하다. 파편의 패턴은 아마 반으로 잘렸거나, 고리 구조물과 충돌한 것으로 보인다. 조금만 고쳐보면 문제없이 쓸 수 있을 것 같다. +page_journal_title_found_gate_ship_authenticated=이상변칙 우주선 인증 +page_journal_text_found_gate_ship_authenticated=이상변칙 내에 외딴 우주선이 나를 스캔하더니 "내 생체 서명을 인증"했다. 그게 나에 대한 기록이 있다는건지, 아니면 그냥 아무 사이버네틱 인간이 바이터나 대량 학살 로봇보다 더 낫다는건지 그 의미를 잘 모르겠다. 메시지에 따르면 우주선의 에어록 접근 코드를 알아냈고, 코드는 2236067964이다. 우주선 기록에 접근할 수 있지만 대부분의 구역이 분리되거나 크게 손상된 상태였다. +page_journal_title_found_gate_ship_log=이상변칙 우주선 기록 +page_journal_text_found_gate_ship_log_intro=데모다마스 82B: AAI 하이퍼넷 전방 건설함선. 우주선 기록 내용: +page_journal_text_found_gate_ship_log=...'¿s nominal.\n접근 경고: AAI Thyris Gate 17: 은하간 프로토타입 v0.1.93은 기밀 설비입니다. L90 이상의 AI 인증이 필요합니다. 즉시 인증하거나 파기합니다.\n접근 기록: AAI Cybernetic Hypernet Engineer L97 자격 증명 ID__1__로 인증된 AAI Thyris Gate 17에 액세스합니다.\n접근 기록: 개ㅅ¶Ôàtá^...\n...'¿17번 게이트 프로젝터 8번 주파수가 잠겼습니다. 216% 안전 수준의 에너지. 특이성 안정성: 99.4%\nNavigation log: AAI Thyris Gate 17이 투영 벡터 [SV__2__]로 호출됩니다. 예측 대상: Wube Galaxy > Foenestra (비이상, 미탐사) 인¶Ôàtá^...\n...'¿내비게이션 경고: 은하간 하이퍼 튜브(재정의됨).\n내비게이션 경고: 대상에 알려진 하이퍼게이트가 없습니다(재정의됨기).\n보험 경고: 보험 계약이 없습니다. 사용 가능한 계약: 0.\nInformaTron 참고: "무관문 실현"이라는 조건 하에 이용 가능한 보험 계약이 없습니다. 정말 안전한가요? [response.ignore.ignore_always]\n이동 기록: Thyris 이상 징후 입력 > [SV__2__]에 정렬된 AAI Thyris Gate 17 하이퍼튜브\n이동 기록: [SV__2__] 하이퍼 튜브로 이동합니¶Ôàtá^...\n...'¿이동 기록: 위치 업데이트: Tyris 이상 징후, 정렬 [SV__2__], 안정성 98%¶Ôàtá^...\n...'¿이동 로그: Fenestra 이상 징후의 탐색되지 않은 위치에서 하이퍼튜브를 종료합니다..\n경고: 예기치 않은 충돌, 알 수 없는 물체와의 교차점 [4ae4c8d28f2], 물체의 스캔 시작 [4ae4c8d28f2].\n피해 기록: 13.2%의 피해 출처: 알 수 없는 교차 물체와의 충돌로 인한 충격 손상 [4ae4c8d28f2].\n섹션 손상 기록: 손상 보고 섹션: A5, A6, A9, B6, B7, B8, C7. 응답하지 않는 섹션: A7, A8. (86% 신뢰)\n사이버네틱 엔지니어 로그: 생명 신호 99%(34% 신뢰도)\n이동 기록: 회피 기동 RS100LT30을 시도 중입니다.\n이동 기록: 하이퍼튜브 탈출이 오류와 함께 완료됨.\n여행 기록: 위치 업데이트: Foenestra의 탐험되지 않은 이상 현상.\n스캐닝 기록: 거리 -48.76m(99.9% 신뢰도)에서 물체[4ae4c8d28f2] 선명도 0.002m^2에서 스캔 완료.\n스캔 세부 기록: [4ae4c8d28f2] 질량 92.5¶Ôàtá^...\n...'¿뢰도).\n스캔 세부 기록: [4ae4c8d28f2] 구성: 인위적. 나퀴움 34%, 홀뮴 29%, 미지의 합성물 37%(신뢰도 89%)\n스캔 세부 기록: [4ae4c8d28f2] 크기: 대략적인 원기둥 68¶Ôàtá^...\n...'¿부 기록: [4ae4c8d28f2] 에너지 시그니쳐: 플럭스 54Gwb, 방사선 프로파일 2.8kJ/1.7MJ/1.6MJ/0.62J, Lux 프로파일 5.86GJ [051e376392b8d3f8]. (98% 신뢰도).\n스캔 세부 기록: [4ae4c8d28f2] 식별자: 인공 시공, 알 수 없는 제조업체, 설명: 결절이 있는 근사 링, 옥타드. (0.3% 신뢰도)\n스캔 세부 기록: [4ae4c8d28f2] 구조 공정 능력 추정: 하이퍼게이트(신뢰도 47%). 기타: 무기 42%, 에너지 35%, 연산 17%, 스캐닝 12%, 산업 9%, 우주선 7%, 서식지 2%.\n손상 기록: 68.2%의 손상. 무결성 오류, 섹션이 분리되고 있습니다. 출처: [4ae4c8d28f2] 물체와의 충돌로 인한 2차 압력 파동.\n섹션 손상 기록: 원자로 위험. 손상을 보고하는 섹션: D5, E4, E5, E6, F5. 섹션이 응답하지 않습니다: A1, A2, A3, A¶Ôàtá^...\n...'¿le l그: 예상 셔틀 2의 비상 잠금 해제. 궤적 예측: 칼리더스 > 나비스.\n손상 기록: 91.7%% 손상. 무결성 오류, 섹션이 부îÄïmïŸ... +page_journal_title_spaceship_victory=우주선 승리 +page_journal_spaceship_victory=나는 아주 빠르고 강력한 우주선을 만들었고, 왜곡 드라이브를 활성화했다. 드라이브가 실제 초광속 상태로 안정화되는 데 대략 60초가 걸렸지만 일단 완성되면 멀리 떨어진 은하계로 나아가 집으로 돌아오는 여정을 위해 동면에 들어갈 것이다. 내가 처음부터 내 손으로 이루어낸 이 성간에 나의 발자국을 남긴다. 이 거대한 우주 공간에, 내가 남기고 떠난 발자국은 영원히 기억될 것이다. +page_journal_title_gate_victory=고대 관문 승리 +page_journal_gate_victory=고대 은하계의 관문인 이 거대한 고리 인공물에 나의 모든 능력을 쏟아부어 결국 수리하는 데 성공했다. 이 심판의 격자에 나의 독창성을 불어넣어 마침내 작동시키는 데에 성공했다. 왜곡장을 근처 항성에 고정시키고 숫자가 아닌 글리프 좌표계를 디코딩하여 다이얼링 시스템을 역설계했다. 이런 외계 물건들이 나의 생각을 뒤틀어놓으려 했지만, 나는 결국 집으로 가는 관문을 열었다. 찰나의 순간으로, 이제 저 머나먼 은하계, 나의 집으로 떠난다. 내가 처음부터 내 손으로 이루어낸 이 성간에 나의 발자국을 남긴다. 이 거대한 우주 공간에, 내가 남기고 떠난 발자국은 영원히 기억될 것이다. +menu_archeology=[img=entity/se-pyramid-a] 고고학 +title_archeology=고고학 +page_archeology_text_1=커다란 기하학적 구조물을 발견하였습니다. 그 결과, 총 [color=cyan]__1__[/color]개 행성에서 이와 동일한 구조물이 발견되었으며, 각 위치는 다음과 같습니다: +page_archeology_text_2=위성을 통해 보려면 항목을 클릭하십시오. +menu_starmapping=[img=technology/se-zone-discovery-random] 우주 지도 제작 +title_starmapping=우주 지도 제작 +page_starmapping_text_1=우주 지도 제작은 [img=technology/se-long-range-star-mapping] [color=cyan]장거리 우주 지도 제작[/color] 기술을 반복적으로 연구하여 이루어집니다. 이 연구는 다른 은하로부터 흥미로운 항성 패턴을 찾아냅니다. 실제 사용하느냐고요? 아마, 아닐겁니다.\n\n좌표는 우주배경복사를 기준으로 정렬된 표준 벡터 (SV) 형식으로 제공됩니다.\n\n지금까지 제작된 구역에서 주목할 만한 패턴은 [color=cyan]__1__[/color]개입니다. +technology-unlocked=새로운 기술 잠금이 해제되어 현재 기술 트리에 있습니다. __1__ __2__ +universe-resources-changed-warning=[img=utility/danger_icon] [color=red]모든 자원이 새로운 설정에 따라 조정되었습니다. 이 과정은 매우 파괴적이지만, 모드 업데이트로 인해 발생한 문제는 불가피합니다. 실수로 모드를 추가하거나 제거하여 발생한 경우, 절대로 게임을 저장하지 마세요.[/color] +starmapping-found-constellation=먼 거리에 있는 별자리가 __1__와 일치합니다, [img=virtual-signal/informatron] 인포매트론에 좌표가 저장되었습니다. +starmapping-found-constellation-informatron=[SV __2__] 좌표에서 [font=heading-1]__1__[/font] +gate-portal-coordinates=왜곡 벡터 분석: [SV __1__] +discovered-glyph-vault=[img=item/satellite] 내비게이션 위성: __1__에서 기하학적 구조물이 감지되었습니다. +beacon-overload=신호기 과부하 +beacon-overload-ended=신호기 과부하 해제 +lifesupport_title=[img=item/se-lifesupport-equipment-1] 생명 유지 +lifesupport_efficiency_spacesuit=생명 지원 효율: __1__ +lifesupport_efficiency_no_spacesuit=생명 지원 효율: __1__ (우주에서 0%). +lifesupport_suit=아머 지속 시간: __1__초 +lifesupport_reserves=인벤토리 지속 시간: __1__초 +lifesupport_suit_est=아머 지속 시간: (우주에서) __1__초 +lifesupport_reserves_est=인벤토리 지속 시간: (우주에서) __1__초 +lifesupport_environment_space=환경: 우주 +lifesupport_environment_spaceship-interior=환경: 우주선 내부 (지원 필요 없음) +lifesupport_environment_planet=환경: 행성 (지원 필요 없음) +lifesupport_environment_moon=환경: 위성 (지원 필요 없음) +lifesupport_environment_plague-planet=환경: 역병 퍼진 행성 +lifesupport_environment_plague-moon=환경: 역병 퍼진 위성 +lifesupport_environment_unknown=환경: 보호됨 +player_track_glyphs=[img=item/satellite] 위성이 유사한 구조를 찾았습니다. +page_archeology_pyramid_link=[img=entity/se-pyramid-b] 기하학적 구조물 감지: __1__ __2__ +discovery_look_for_resource_caption=__1__\n__2__ +discovery_look_for_resource_tooltip=이 자원을 찾는 데 집중하세요. +comma_separate=__1__, __2__ +placement_restriction_line=[font=default-bold][color=#f5cb48]다음 위에 배치 불가: __1__[/color][/font]\n__2__ +collision_mask_water=물 +collision_mask_land=땅 +collision_mask_space_platform=우주 플랫폼 +collision_mask_spaceship=우주선 +structure_name_grounded=__1__ (땅) +structure_name_spaced=__1__ (우주) +structure_description_grounded=__1__\n[color=#ff0000]지상에 있는 동안 일부 제작법은 비활성화됩니다.[/color] +structure_description_spaced=__1__\n[color=#ff0000]우주에서는 생산성 모듈을 사용할 수 없습니다.[/color] +tile_warning=[color=red]개체 아래의 타일을 변경할 경우 개체가 삭제될 수 있습니다.[/color] +please-consider-patreon=[font=heading-1]우주 탐사 모드를 즐기고 계신가요? Patreon에서 저를 지원해주세요:[color=#f5cb48]https://www.patreon.com/earendel[/color][/font]\n후원해주신 분들은 게임 내에서 자신만의 디자인으로 이루어진 행성이나 위성을 가질 수 있습니다. +delivery_cannon_label_energy=에너지: __1__ +delivery_cannon_label_payload=탑재량: __1__ +delivery-cannon-coordinates-set=배달 좌표가 [X:__1__ Y:__2__] 좌표로 설정되었습니다. [__CONTROL__se-remote-view__] 키를 눌러 위성 모드를 종료합니다. +unit-capsule=유닛 캡슐 (__1__) +climate_water_none=물 없음 +climate_water_low=웅덩이 +climate_water_med=호수 +climate_water_high=바다 +climate_water_max=대해 +climate_moisture_none=사막 +climate_moisture_low=건조 +climate_moisture_med=적당한 습기 +climate_moisture_high=높은 습기 +climate_moisture_max=극단적인 습기 +climate_aux_very_low=무미건조 +climate_aux_low=특이 지형 +climate_aux_med=다채로움 +climate_aux_high=매우 다채로움 +climate_aux_very_high=극단적인 다채로움 +climate_temperature_bland=온난함 +climate_temperature_temperate=온대 +climate_temperature_midrange=온대 +climate_temperature_balanced=따뜻함과 시원함 +climate_temperature_wild=뜨거움과 차가움 +climate_temperature_extreme=불과 얼음 +climate_temperature_cool=시원함 +climate_temperature_cold=차가움 +climate_temperature_vcold=혹한 +climate_temperature_frozen=냉대 +climate_temperature_warm=따뜻함 +climate_temperature_hot=뜨거움 +climate_temperature_vhot=그을림 +climate_temperature_volcanic=화산지대 +climate_trees_none=나무 없음 +climate_trees_low=나무 적음 +climate_trees_med=나무 많음 +climate_trees_high=숲 +climate_trees_max=거대한 숲 +climate_cliff_none=평지 +climate_cliff_low=평탄 +climate_cliff_med=구릉 +climate_cliff_high=협곡 +climate_cliff_max=산악 +climate_homeworld=고향 행성 (맞춤형 기후) +energy_transmitter_gui_title=[img=entity/se-energy-transmitter-emitter] 에너지 빔 +energy_transmitter_label_transfer=방출기 강도: __1__ +energy_transmitter_label_efficiency=전송 효율: __1__ +energy_transmitter_label_efficiency_atmo=전송 효율: __1__ (대기에서 -50%) +energy_transmitter_label_off=꺼짐 +energy_transmitter_tooltip_off=빔을 끕니다 +energy_transmitter_label_energise=전력 공급 +energy_transmitter_tooltip_energise=에너지를 에너지 수속기로 전달합니다 +energy_transmitter_label_glaive=글레이브 +energy_transmitter_tooltip_glaive=에너지를 기반으로 하는 대상 지정 및 이동, 피해 및 이동이 가능한 빔 무기입니다. +energy_transmitter_label_auto_glaive=글레이브 자동화 +energy_transmitter_tooltip_auto_glaive=탐색 및 파괴 프로그램을 활용해 에너지 기반의 피해를 줍니다 +energy-transmitter-coordinates-set=빔 좌표가 [X:__1__ Y:__2__] 좌표로 설정되었습니다. [__CONTROL__se-remote-view__] 키를 눌러 위성 모드를 종료합니다. +energy-transmitter-no-enemies-found=글레이브 자동화가 적을 찾을 수 없었습니다. 이미터 __1__이/가 비활성화됩니다. +alert-cme-eta=[img=virtual-signal/se-star] 경고: __1__(으)로 향하는 코로나 질량 방출이 감지됩니다. 남은 시간은 __2__초 입니다.\n자세한 내용은 [img=virtual-signal/informatron] 인포매트론 [__CONTROL__informatron__] 을 참조하세요. +alert-cme-arrived=[img=virtual-signal/se-star] [color=red]경고: __1__(으)로 향하는 코로나 질량 방출이 감지되었습니다![/color] +alert-cme-stream=[img=virtual-signal/se-star] __1__에서 코로나 질량 방출이 감지됩니다. +alert-cme-passed=[img=virtual-signal/se-star] 코로나 질량 방출이 끝났습니다. +no-coordinates-set=좌표를 설정하지 않았습니다. +satellite-required=위성이 필요합니다. +probe_invalid_launch_star=잘못된 발사 위치: [img=item/se-star-probe] 항성 탐사선은 가까운 항성 궤도에서 발사해야 합니다. +probe_invalid_launch_belt=잘못된 발사 위치: [img=item/se-belt-probe] 소행성 구역 탐사선은 소행성 구역에서 발사되어야 합니다. +probe_invalid_launch_field=잘못된 발사 위치: [img=item/se-void-probe] 성간 공허 탐사선은 소행성 구역에서 발사되어야 합니다. +arcosphere_collector_invalid_launch=잘못된 발사 위치: [img=item/se-arcosphere-collector] 성간 공허 탐사선은 소행성 구역에서 발사되어야 합니다. +charge-mode-fast=고속 충전 모드: 대기 전력 감소, 최대 전력 소모 증가, 버퍼 용량 증가. 파워 스파이크를 조심하십시오. +charge-mode-normal=일반 충전 모드: 최대 전력 소모 감소, 대기 전력 증가, 버퍼 용량 증가. +menu_coordinate_logs=[img=entity/se-glyph-a-energy-47] 좌표 기록 +title_coordinate_logs=좌표 기록 +page_coordinate_logs_text_1=해당 좌표와 함께 유물에서 시도된 글리프 시퀀스의 기록입니다. 내림차순으로 정렬됩니다 (가장 위의 항목이 최신 항목입니다).\n\n좌표는 우주배경복사를 기반으로 정렬된 표준 벡터 (SV) 형식으로 제공됩니다. +page_coordinate_logs_button_clear_caption=[img=virtual-signal/se-remove] 기록 지우기 +page_coordinate_logs_text_empty=최근 좌표 기록을 지웠습니다. +page_coordinate_logs_glyph_entry=__1__: SV +victory-message-spaceship=[font=heading-1]넥서스 왜곡 드라이브가 임계 속도 (250)에 도달했습니다.\n[color=#f5cb48]축하합니다, 우주 탐사 승리 조건인 \"우주선\"을 달성하셨습니다![/color][/font]\n이곳저곳 여행하는 것이 즐거우셨다면 Patreon에서 저를 지원해주세요: [color=#f5cb48]https://www.patreon.com/earendel[/color] +victory-message-spaceship-player=[color=#f5cb48]우주선 승리: [/color] [img=virtual-signal/informatron] 탐사 일지 [__CONTROL__informatron__]가 갱신되었습니다. +victory-message-gate=[font=heading-1]포탈이 안정화되었으므로 집으로 돌아갈 수 있습니다.\n[color=#f5cb48]축하합니다, 당신은 우주 탐사 승리 조건인 \"고대 관문\"을 달성하셨습니다![/color][/font]\n이 독특한 길의 발견이 즐거우셨다면 Patreon에서 저를 지원해주세요: [color=#f5cb48]https://www.patreon.com/earendel[/color] +victory-message-gate-player=[color=#f5cb48]고대 관문 승리: [/color] [img=virtual-signal/informatron] 탐사 일지 [__CONTROL__informatron__]가 갱신되었습니다. +arcosphere-random=이 제작법은 간혹 같은 이름의 대체 제작법으로 전환됩니다. 아코스피어 출력은 사실상 무작위로 지정되지만 출력되는 아코스피어의 수량은 입력과 일치하도록 보장됩니다. +ruin=유적 +mysterious-structure=불가사의한 구조물 +interburbulator_fail_easy_1=아니야. +interburbulator_fail_easy_2=좀 더 노력해 봐. +interburbulator_fail_easy_3=가망이 없군. +interburbulator_fail_easy_4=그건 아냐. +interburbulator_fail_easy_5=진짜 그게 답이라 생각해? +interburbulator_fail_easy_6=틀렸어. +interburbulator_fail_easy_7=산소가 부족하신가요? +interburbulator_fail_easy_8=부정한다. +interburbulator_fail_easy_9=부정적이군요. +interburbulator_fail_easy_10=좀 더 생각을 해. +interburbulator_fail_easy_11=잘못된 답이야. +interburbulator_fail_easy_12=약간 더 보간해 봐. +interburbulator_fail_easy_13=계속 해 봐. +interburbulator_fail_easy_14=잘 좀 해봐, 인간. +interburbulator_fail_easy_15=혹시 이게 재밌기라도 한거야? +interburbulator_fail_easy_16=난 더 많은걸 기대했어. +interburbulator_fail_easy_17=먼저 생각이란 걸 해 봐. +interburbulator_fail_easy_18=네가 받을 보상들을 생각해 보라고. +interburbulator_fail_easy_19=얼마든지 기다려주지. +interburbulator_fail_easy_20=인내가 곧 미덕일지니. +interburbulator_fail_easy_21=무례하게 굴려는 것이 아닙니다. +interburbulator_fail_easy_22=물고기가 레벨 3에 도달했습니다. +interburbulator_fail_easy_23=지금 막 온갖 것들을 다 대입해보는거지, 응? +interburbulator_fail_easy_24=너의 그 꿈틀거리는 머리 컴퓨터를 잘 굴려 봐. +interburbulator_fail_easy_25=신경망에 뭐 거미줄만 있는거야? +interburbulator_fail_easy_26=원한다면, 같이 휴식시간을 가져볼 수도 있어. +interburbulator_fail_easy_27=저는 행성만한 생각을 가지고 있어요. +interburbulator_fail_easy_28=정말로, 그게 답이라 생각해? +interburbulator_fail_easy_29=끊임없이 실패했다고 화를 낼 필요는 없어. +interburbulator_fail_easy_30=저는 훌륭한 참가자를 기다리고 있습니다. +interburbulator_fail_easy_31=도움이 필요하면, 녹색 회로에게 물어 봐. +interburbulator_fail_easy_32=난 너의 그 대량 학살에 대해 비난하고 싶지 않아. 난 위선자가 아니거든. +interburbulator_fail_easy_33=전 제가 지시사항을 올바르게 번역했다 믿습니다. +interburbulator_fail_easy_34=벡터는 방향과 크기 모두 정의할 수 있어. +interburbulator_fail_easy_35=당신은 공해가 바이터들을 화나게 하는 것을 좋아하지 않나요? +interburbulator_fail_easy_36=당신의 ... 생물학 ... 전자 공학에 관한 어떤 것도 이해할 수 없군요. +interburbulator_fail_easy_37=중간지점은 오른쪽 상단과 왼쪽 하단 사이입니다. +interburbulator_fail_easy_38=당신의 전송 일부를 학습했습니다. ; it's not spying if you broadcast it like that. +interburbulator_fail_easy_39=정규화된 벡터의 길이는 1이며, 종종 방향을 나타내기 위해 사용됩니다. 심지어 여러분의 생활에서도요. +interburbulator_fail_mixed_1=아깝지도 않았어. +interburbulator_fail_mixed_2=완전히 틀렸습니다. +interburbulator_fail_mixed_3=계속 하시려구요? +interburbulator_fail_mixed_4=신경 젤이 새었나요? +interburbulator_fail_mixed_5=나는 인간이 무수하다고 들었었습니다. +interburbulator_fail_mixed_6=인터페이스가 오작동하고 있습니까? +interburbulator_fail_mixed_7=지능 증폭이 필요할 듯합니다. +interburbulator_fail_mixed_8=문제를 제대로 이해한 것이 맞습니까? +interburbulator_fail_mixed_9=되는대로 입력한 것은 아니겠죠? +interburbulator_fail_offgrid_1=정말 끔찍하군요. +interburbulator_fail_offgrid_2=그리드에 있지도 않습니다. +interburbulator_fail_offgrid_3=그리드를 완전히 놓치셨습니다. +interburbulator_fail_offgrid_4=적어도 그리드에 있어야 합니다. +interburbulator_fail_offgrid_5=노란색 점이 그리드에 없으면... 그것은 정말 나쁜 징조입니다. +interburbulator_fail_offgrid_6=적어도 그리드에 있어야 합니다. +interburbulator_fail_offgrid_7=대상은 그리드의 외부가 아닌, 내부에 있어야 합니다. +interburbulator_fail_offgrid_8=그리드 내부에 있지 않았습니다. 인간, 뭐 하는 거예요? +interburbulator_fail_offgrid_9=그리드를 향해주세요. +interburbulator_fail_offgrid_10=그리드는 사각형으로 이루어진 비트입니다. +interburbulator_success_freeplay_1=잘했어요. +interburbulator_success_freeplay_2=훌륭합니다. +interburbulator_success_freeplay_3=해내셨습니다. +interburbulator_success_freeplay_4=어려운 것이었나요? +interburbulator_success_freeplay_5=목표 달성. +interburbulator_success_repeat_1=좋습니다, 하지만 이미 완료한 과제였군요. +interburbulator_success_repeat_2=또 해내셨군요! +interburbulator_success_repeat_3=처음보다 쉬웠죠? +interburbulator_success_repeat_4=좋습니다, 하지만 보상은 두 번 받을 수 없어요. +interburbulator_success_repeat_5=잘했어요, 여기 당신 상을... 앗, 이미 가지고 있으시군요. +interburbulator_success_repeat_6=당신은 전에 이 일을 완성했던 바로 그 인간이죠? 구별하기 너무 어려워요. +interburbulator_success_prize_1=맞았군요. 여기 보상이 있... 버블스는 작은 물고기치고 아주 용감했지만, 정작 퍼즐에서는 최고가 아니였죠. +interburbulator_success_prize_2=그래, 인간 너는 참 빠르게 배우는 것 같군. 이 상은 너가 지식을 얻는 데 도움이 되어 줄거야. +interburbulator_success_prize_3=훌륭하군. 이 상이 이 도전보다 훨씬 더 '중요하게' 여기길 바랄게. +interburbulator_success_prize_4=올바릅니다. 당신은 이제 제 존경심을 얻으셨습니다, 인간. 여기, 내 게임을 해킹하려던 배신자의 시체를 줄게요. +interburbulator_success_prize_5=목표 달성, 바로 여기에 매우 편안한 보상이 있습니다. 에너지 효율은 중요합니다. +interburbulator_success_prize_6=아주 좋습니다, 여기에 보상이 있습니다. 이것이 당신에게 큰 도움이 될지는 모르겠지만, 저에게는 아침에 일어나는 데 정말 도움이 됩니다. +interburbulator_success_prize_7=대단해, 보상을 받아가. 난 이걸로 연구하는 것을 정말 좋아해, 창의력에도 큰 도움이 되거든. +interburbulator_success_prize_8=환상적입니다, 여기 보상이 있습니다. 전에 이걸 보셨는지 모르겠지만, 저는 그냥 신호기 주변에 서 있는 게 좋아요. +interburbulator_success_prize_9=축하합니다, 보상이 바로 여기에 있습니다. 이러한 회로는 매우 가치 있고 만들기 어렵습니다. +interburbulator_success_prize_10=정말이지 아주 인상적인 인간이야. 여기, 아코스피어는 내가 가장 아끼는 물건이야. 더 많이 만들 수는 없으니, 잃어버리지 않게 조심하라고. +interburbulator_freeplay_unlocked=당신은 이 일의 요령을 터득하고 있어요. 여러분만의 퍼즐을 만들 수 있도록 자유플레이를 풀어드리겠습니다. +interburbulator_deny_freeplay_1=자유플레이를 해금해야 합니다. +interburbulator_deny_freeplay_2=그건 부정행위야. +interburbulator_deny_freeplay_3=퍼즐을 바꾸지 마. +interburbulator_deny_freeplay_4=챌린지 5개를 클리어하면 변경할 수 있게 됩니다. +interburbulator_deny_freeplay_5=내 기계를 해킹하려는 거예요? +interburbulator_deny_freeplay_6=그저 "시도"만 해주세요 +interburbulator_caption_prize=보상: __1__ __2__ __3__ __4__ +interburbulator_caption_claimed=(수령함) +interburbulator_speak=[color=red]브론티온: __1__[/color] +interburbulator_robot_name=브론티온 +interburbulator_introduction=Interburbul은 Brontion Burbulator 33027756에 의해 만들어진 게임입니다. 목표는 Brontion이 선택한 강조 표시된 셀에 투영하는 3D 벡터를 추측하는 것입니다. 그리드 안쪽 3개 코너의 3D 벡터가 주어집니다. 이 포인트는 3D 평면을 설명하고, 추측은 원점 {0,0,0}에서 해당 평면에 투영됩니다. 점점 어려워지는 10개의 도전을 각각 완료할 때마다 보상을 획득할 수 있습니다. 5개의 도전을 해결하여 자유플레이 모드를 해제하고 자신만의 도전 과제를 설정할 수 있습니다. +interburbulator_random=무작위 +interburbulator_freeplay=자유플레이 +interburbulator_game_title=인터버뷸 플레이 +interburbulator_grid_size=그리드 크기: +interburbulator_target_cell=대상 셀: +interburbulator_top_left=좌측 상단 +interburbulator_top_right=우측 상단 +interburbulator_bottom_left=좌측 하단 +interburbulator_attempt=시도 +interburbulator_attempt_limited=시도 (__1__/__2__) +interburbulator_attempt_locked=시도 (잠김) +interburbulator_submit=시도 제출 +interburbulator_greeting=거기 인간, 이곳에서 내가 만든 게임을 해 봐. 난 __2__ 시스템의 __1__에 있어. +interburbulator_challenge_locked_1=나중에 다시 시도하세요. +interburbulator_challenge_locked_2=지금까지의 모든 시도를 사용했습니다. +interburbulator_challenge_locked_3=다시 시작하기 전에 잠시만 기다려주세요. +interburbulator_challenge_locked_4=20초 후에 다시 시도하세요. +interburbulator_challenge_locked_5=20초를 기다리면 다음 도전이 열립니다. +interburbulator_challenge_locked_6=도전은 20초동안 잠깁니다. +cannot_do_via_satellite=원격으로 완료할 수 없습니다. +scan-progress-update=__1__의 표면 스캔 진행중: X __2__ Y __3__ +out_of_reach=도달 범위 밖입니다 +capturable=포착 가능 +touch-to-capture=캡쳐하려면 터치하세요. +capture-blocked=적대세력에 의해 캡쳐하는 것이 막혔습니다. +suffix_ruin=__1__ 폐허 + +[damage-type-name] +cold=냉기 +suffocation=질식 +meteor=운석 + +[entity-name] +se-linked-container=아코링크 보관함 +vase=꽃병 +wooden-barrel=나무 배럴 +furnace-ruin=무너진 돌더미 +workshop-ruin=무너진 작업소 +iron-wood-chest=오래된 상자 +iron-wood-chest-remnants=무너진 오래된 상자 +stone-rubble=돌 잔해 +se-gate-blocker=불안정한 공간 +se-gate-blocker-void=불안정한 공간 +destroyed-cargo-pod=파괴된 화물 포드 +meteorite=운석 +rocket-silo=위성 로켓 격납고 +rocket-fragment=로켓 파편 +se-antimatter-reactor=반물질 반응로 +se-beryllium-ore=녹주석 +se-cargo-rocket-cargo-pod=화물 포드 +se-cryonite=크라이오나이트 +se-condenser-turbine=콘덴서 터빈 +se-condenser-turbine-tank=콘덴서 터빈 +se-condenser-turbine-generator=콘덴서 터빈 +se-core-fragment-processor=심층 파편 처리 시설 +se-core-miner=심층 채광 드릴 +se-core-miner-drill=심층 채광 드릴 +se-cryogun-ice=빙벽 +se-dimensional-anchor=차원 정박기 +se-electric-boiler=전기 보일러 +se-fluid-burner-generator=유체 이온 발전기 +se-fuel-refinery=연료 정제소 +se-gate-fragment=유물 파편 +se-holmium-ore=홀미나이트 +se-iridium-ore=이리다이트 +se-meteor-defence-container=운석 방어 장치 +se-meteor-defence-charger=운석 방어 장치 +se-meteor-point-defence-container=운석 국지방어 장치 +se-meteor-point-defence-charger=운석 국지방어 장치 +se-meteor-point-defence-charger-overcharged=운석 국지방어 장치 - 고속 충전 모드 +se-methane-ice=메탄 얼음 +se-naquium-ore=나퀴나이트 +se-pulveriser=분쇄기 +se-rocket-launch-pad=화물 로켓 격납고 +se-rocket-launch-pad-tank=화물 로켓 격납고 +se-rocket-launch-pad-silo=화물 로켓 격납고 +se-rocket-launch-pad-combinator=화물 로켓 격납고 +se-rocket-launch-pad-_-seat=화물 로켓 격납고 +se-rocket-launch-pad-settings=화물 로켓 격납고 +se-rocket-landing-pad=화물 착륙 패드 +se-space-accumulator=홀뮴 축전지 +se-space-accumulator-2=나퀴움 축전지 +se-space-astrometrics-laboratory=천문학 실험실 +se-space-biochemical-laboratory=생화학 실험실 +se-space-assembling-machine=우주 조립 기계 +se-space-capsule-_-vehicle=우주 캡슐 +se-space-curved-rail=우주 철도 +se-space-decontamination-facility=오염 제거 시설 +se-space-electromagnetics-laboratory=전자기학 실험실 +se-space-genetics-laboratory=유전학 실험실 +se-space-growth-facility=성장 시설 +se-space-gravimetrics-laboratory=중력학 실험실 +se-space-hypercooler=초냉각기 +se-space-laser-laboratory=레이저 실험실 +se-lifesupport-facility=생명 지원 시설 +se-space-manufactory=우주 제조소 +se-space-material-fabricator=소재 제작기 +se-space-mechanical-laboratory=기계학 실험실 +se-space-particle-accelerator=입자 가속기 +se-space-particle-collider=입자 충돌기 +se-space-plasma-generator=플라즈마 발전기 +se-space-radiation-laboratory=방사선 실험실 +se-space-radiator=방열기 +se-space-radiator-2=방열기 2 +se-recycling-facility=재활용 시설 +se-space-pipe=우주 파이프 +se-space-pipe-long=긴 우주 파이프 +se-space-pipe-long-straight=긴 직선 우주 파이프 __1__ +se-space-pipe-long-junction=긴 접합부 우주 파이프 __1__ +se-space-pipe-to-ground=우주 지하 파이프 +se-space-science-lab=우주 과학 연구소 +se-space-solar-panel=평면 태양 전지판 +se-space-solar-panel-2=평면 태양 전지판 2 +se-space-solar-panel-3=평면 태양 전지판 3 +se-space-spectrometry-facility=분광 시설 +se-space-straight-rail=우주 철도 +se-space-supercomputer-1=슈퍼 컴퓨터 +se-space-supercomputer-2=양자 슈퍼 컴퓨터 +se-space-supercomputer-3=신경학적 슈퍼 컴퓨터 +se-space-supercomputer-4=심층 슈퍼 컴퓨터 +se-space-telescope-radio=전파 망원경 +se-space-telescope-microwave=마이크로파 망원경 +se-space-telescope=망원경 +se-space-telescope-xray=X선 망원경 +se-space-telescope-gammaray=감마선 망원경 +se-space-thermodynamics-laboratory=열역학 실험실 +se-space-splitter=우주 분배기 +se-space-transport-belt=우주 운송 벨트 +se-space-underground-belt=우주 지하 벨트 +se-spaceship-antimatter-engine=우주선 반물질 엔진 +se-spaceship-antimatter-booster-tank=우주선 반물질 부스터 탱크 +se-spaceship-console=우주선 계기판 +se-spaceship-console-output=우주선 계기판 신호 출력부 +se-spaceship-console-alt=손상된 우주선 계기판 +se-spaceship-gate=우주선 문 +se-spaceship-obstacle=우주 쓰레기 +se-spaceship-rocket-engine=우주선 로켓 엔진 +se-spaceship-rocket-booster-tank=우주선 로켓 부스터 탱크 +se-spaceship-wall=우주선 벽 +se-water-ice=워터 아이스 +se-vitamelange=비타멜란지 +se-vulcanite=벌카나이트 +small-asteroid=작은 소행성 +se-gate-part=유물 조각 +se-gate-platform-scaffold=유물 감별기 +se-gate-lock-switch=움직일 수 있는 요소 +se-gate-lock-combinator=조합기 연결체 +se-gate-platform=유물 증강 플랫폼 +se-gate-platform-combinator=조합기 연결체 +se-gate-energy-interface=동력 플랫폼 +se-gate-platform-button-switch=버튼 +se-gate-tank-input=유체 입력부 +se-gate-tank-output=유체 출력부 +se-pyramid-a=기하학적 구조물 +se-pyramid-b=기하학적 구조물 +se-pyramid-c=기하학적 구조물 +se-cartouche-a=카르투슈 +se-cartouche-b-a=카르투슈 +se-cartouche-b-b=카르투슈 +se-cartouche-chest=고대 보관함 +se-glyph=글자 +glyph=글자 +se-gate-addon=유물 증강 +se-gate-platform-button-middle=정지 +se-gate-platform-button-left=왼쪽 +se-gate-platform-button-right=오른쪽 +beacon=기본 신호기 +se-wide-beacon=광역 신호기 +se-wide-beacon-2=광역 신호기 2 +se-supercharger=초고속 충전기 +se-addon-power-pole=부속 전신주 +se-pylon=송전탑 +se-pylon-substation=변전 송전탑 +se-pylon-construction=건설 송전탑 +se-pylon-construction-roboport=건설 송전탑 +se-pylon-construction-radar=레이더 건설 송전탑 +se-pylon-construction-radar-roboport=레이더 건설 송전탑 +se-pylon-construction-radar-radar=레이더 건설 송전탑 +se-shield-projector=보호막 프로젝터 +se-shield-projector-shield-floor-east=에너지 보호막 +se-shield-projector-shield-floor-north=에너지 보호막 +se-shield-projector-shield-floor-northeast=에너지 보호막 +se-shield-projector-shield-floor-northwest=에너지 보호막 +se-shield-projector-shield-floor-south=에너지 보호막 +se-shield-projector-shield-floor-southeast=에너지 보호막 +se-shield-projector-shield-floor-southwest=에너지 보호막 +se-shield-projector-shield-floor-west=에너지 보호막 +se-shield-projector-shield-wall-east=에너지 보호막 +se-shield-projector-shield-wall-north=에너지 보호막 +se-shield-projector-shield-wall-northeast=에너지 보호막 +se-shield-projector-shield-wall-northwest=에너지 보호막 +se-shield-projector-shield-wall-south=에너지 보호막 +se-shield-projector-shield-wall-southeast=에너지 보호막 +se-shield-projector-shield-wall-southwest=에너지 보호막 +se-shield-projector-shield-wall-west=에너지 보호막 +se-shield-projector-barrier=에너지 보호막 +se-naquium-heat-pipe=나퀴움 열 파이프 +se-naquium-heat-pipe-horizontal=나퀴움 열 파이프 수평 +se-naquium-heat-pipe-vertical=나퀴움 열 파이프 수직 +se-naquium-heat-pipe-long=긴 나퀴움 열 파이프 __1__ +se-deep-space-transport-belt=심우주 운송 벨트 +se-deep-space-transport-belt-black=검은색 심우주 운송 벨트 +se-deep-space-transport-belt-white=흰색 심우주 운송 벨트 +se-deep-space-transport-belt-red=빨간색 심우주 운송 벨트 +se-deep-space-transport-belt-yellow=노란색 심우주 운송 벨트 +se-deep-space-transport-belt-green=초록색 심우주 운송 벨트 +se-deep-space-transport-belt-cyan=시안색 심우주 운송 벨트 +se-deep-space-transport-belt-blue=파란색 심우주 운송 벨트 +se-deep-space-transport-belt-magenta=마젠타색 심우주 운송 벨트 +se-deep-space-underground-belt=심우주 지하 벨트 +se-deep-space-underground-belt-black=검은색 심우주 지하 벨트 +se-deep-space-underground-belt-white=흰색 심우주 지하 벨트 +se-deep-space-underground-belt-red=빨간색 심우주 지하 벨트 +se-deep-space-underground-belt-yellow=노란색 심우주 지하 벨트 +se-deep-space-underground-belt-green=초록색 심우주 지하 벨트 +se-deep-space-underground-belt-cyan=시안색 심우주 지하 벨트 +se-deep-space-underground-belt-blue=파란색 심우주 지하 벨트 +se-deep-space-underground-belt-magenta=마젠타색 심우주 지하 벨트 +se-deep-space-splitter=심우주 분배기 +se-deep-space-splitter-black=검은색 심우주 분배기 +se-deep-space-splitter-white=흰색 심우주 분배기 +se-deep-space-splitter-red=빨간색 심우주 분배기 +se-deep-space-splitter-yellow=노란색 심우주 분배기 +se-deep-space-splitter-green=초록색 심우주 분배기 +se-deep-space-splitter-cyan=시안색 심우주 분배기 +se-deep-space-splitter-blue=파란색 심우주 분배기 +se-deep-space-splitter-magenta=마젠타색 심우주 분배기 +se-core-fissure=핵 균열 +se-big-turbine=초고온 터빈 발전기 +se-big-turbine-generator=초고온 터빈 발전기 +se-big-turbine-tank=초고온 터빈 발전기 +se-big-heat-exchanger=초고온 열 교환기 +se-blueprint-registration-point=설계도면 등록 지점 +se-delivery-cannon=배달 대포 +se-delivery-cannon-settings=배달 대포 +se-delivery-cannon-energy-interface=배달 대포 +se-delivery-cannon-chest=배달 대포 상자 +se-delivery-cannon-weapon=무기 배달 대포 +se-delivery-cannon-weapon-settings=무기 배달 대포 +se-delivery-cannon-weapon-energy-interface=무기 배달 대포 +se-spaceship-clamp=우주선 클램프 +se-spaceship-clamp-place=우주선 클램프 +se-bloater-pool-cloud=블로트버스트 풀 +se-energy-transmitter-emitter=에너지 빔 방출기 +se-energy-transmitter-chamber=에너지 빔 챔버 +se-energy-transmitter-injector=에너지 빔 인젝터 +se-energy-transmitter-injector-reactor=에너지 빔 인젝터 +se-energy-receiver=에너지 빔 리시버 +se-energy-beam-defence=우산 +se-nexus=넥서스 +se-nexus-charger=넥서스 +se-space-probe-rocket=우주 탐사선 로켓 +se-space-probe-rocket-silo=우주 탐사선 로켓 격납고 +se-interburbulator-interface=인터버뷸레이터 인터페이스 +se-interburbulator-control=인터버뷸레이터 컨트롤 +se-interburbulator-projector=인터버뷸레이터 프로젝터 +se-burbulator=브론션 버뷸레이터 33027756 + +[entity-description] +pipe=유체를 흘려 보냅니다. +pipe-to-ground=유체를 지하로 흘려보냅니다. +straight-rail=기차를 위한 철도입니다. +stone-furnace=광석을 제련합니다. +steel-furnace=광석을 제련합니다. +electric-furnace=광석을 제련합니다. +burner-assembling-machine=화력 기반의 자동 제작 시설입니다. +assembling-machine-1=자동 제작 시설입니다. +assembling-machine-2=자동 제작 시설입니다. +assembling-machine-3=자동 제작 시설입니다. +oil-refinery=원유를 더욱 유용한 제품으로 전환합니다. +se-fuel-refinery=자동화된 연료 처리 시설입니다. +chemical-plant=자동 제작 시설입니다. +lab=자동 연구 시설입니다. +burner-lab=자동 연구 시설입니다. +transport-belt=아이템을 운송하기 위한 컨베이어 벨트입니다. +fast-transport-belt=아이템을 운송하기 위한 컨베이어 벨트입니다. +express-transport-belt=아이템을 운송하기 위한 컨베이어 벨트입니다. +underground-belt=아이템을 지하로 운송하기 위한 컨베이어 벨트입니다. +fast-underground-belt=아이템을 지하로 운송하기 위한 컨베이어 벨트입니다. +express-underground-belt=아이템을 지하로 운송하기 위한 컨베이어 벨트입니다. +splitter=아이템을 나누고 합치고 분류하기 위한 컨베이어 벨트 기반의 장치입니다. +fast-splitter=아이템을 나누고 합치고 분류하기 위한 컨베이어 벨트 기반의 장치입니다. +express-splitter=아이템을 나누고 합치고 분류하기 위한 컨베이어 벨트 기반의 장치입니다. +se-gate-platform-scaffold=무슨 이유에선지, 고리 모양은 작동하지 않습니다. 이것은 몇개의 모터와 센서, 제어 인터페이스, 그리고 다양한 추가 기능을 설치하는 건설 시설로 보입니다. +se-gate-lock-switch=__CONTROL__rotate__ 키를 눌러 직접 움직이세요. +se-gate-platform-button-switch=__CONTROL__rotate__ 키를 눌러 미세요. +se-gate-lock-combinator=아직 구현되지 않았습니다. +se-gate-platform-combinator=아직 구현되지 않았습니다. +se-gate-energy-interface=유물에 동력을 전달합니다. +rocket-silo=위성을 우주로 발사하여 "내비게이션 위성 모드"를 잠금 해제하고 위성이 발사된 항성계에서 새로운 행성과 위성, 소행성 벨트를 발견하세요. 현재 항성계가 완전히 탐색되면 이후에 새로운 항성을 발견 할 수 있습니다. +se-antimatter-reactor=물질과 반물질끼리 쌍소멸을 일으켜 놀라운 수준의 열을 발생시킵니다. +se-beryllium-ore=베릴륨 광석 +se-condenser-turbine=75%의 에너지 효율을 지녔지만 사용된 증기의 99%가 다시 물로 반환되는 증기 터빈입니다. 온도 범위는 100도 ~ 999도 입니다. \n최대 출력량: 10MW +se-core-fragment-processor=심층 파편에서 자원을 추출합니다. +se-core-miner=행성과 위성에서 끝임없이 자원을 추출할 수 있지만, 같은 표면에서 여러 대를 배치하면 채취 효율이 낮아집니다. 50MW의 에너지를 소모합니다. +se-core-miner-drill=행성과 위성에서 끝임없이 자원을 추출할 수 있지만, 같은 표면에 여러 대를 배치하면 채취 효율이 낮아집니다. 50MW의 에너지를 소모합니다. +se-dimensional-anchor=[font=default-bold][color=#f5cb48]배치 제한: 가까운 항성 궤도[/color][/font]\n항성의 중력과 공간 이상을 위한 안정화 지점을 사용합니다. +se-electric-boiler=전기 에너지를 사용하여 물을 증기로 만듭니다. 에너지 효율은 90%입니다. +se-fluid-burner-generator=전기를 생산하기 위해 에너지를 가진 액체 연료 (대표적으로 액체 로켓 연료)를 연소합니다. 단순하고 작지만 보다 큰 증기 기반 발전 시스템에 비하면 효율이 낮습니다. 우주를 위해 설계되었습니다. 실제 유체 소비량은 유체의 연료 값에 따라 다릅니다. +se-holmium-ore=홀뮴 광석 +se-iridium-ore=이리듐 광석 +se-meteor-defence-container=행성 전체에 떨어지는 운석을 모두 방어할 수 있지만, 한 번에 하나의 운석만을 쏠 수 있습니다. 운석 방어 탄약을 장전하고 발사하려면 완전히 충전되어야 합니다. 80%의 정확도를 갖습니다. 발사 후 재충전이 필요합니다. 충전 중에는 20 MW의 에너지를 소모합니다. +se-meteor-defence-charger=행성 전체에 떨어지는 운석을 모두 방어할 수 있지만, 한 번에 하나의 운석만을 쏠 수 있습니다. 운석 방어 탄약을 장전하고 발사하려면 완전히 충전되어야 합니다. 80%의 정확도를 갖습니다. 발사 후 재충전이 필요합니다. 충전 중에는 20 MW의 에너지를 소모합니다. +se-meteor-point-defence-container=주변 영역에 떨어지는 운석을 방어합니다. 하나의 방어 장치는 최대 네 개의 운석을 쏠 수 있습니다. 운석 방어 탄약을 장전하고 발사하려면 완전히 충전해야 합니다. 범위 64, 50%의 정확도를 갖으며, 발사 후 재충전까지 시간이 걸립니다. 운석 국지방어 장치를 회전시키면 충전 모드를 변경할 수 있습니다. +se-meteor-point-defence-charger=주변 영역에 떨어지는 운석을 방어합니다. 하나의 방어 장치는 최대 네 개의 운석을 쏠 수 있습니다. 운석 방어 탄약을 장전하고 발사하려면 완전히 충전해야 합니다. 범위 64, 50%의 정확도를 갖으며, 발사 후 재충전까지 시간이 걸립니다. 운석 국지방어 장치를 회전시키면 충전 모드를 변경할 수 있습니다. +se-meteor-point-defence-charger-overcharged=주변 영역에 떨어지는 운석을 방어합니다. 하나의 방어 장치는 최대 네 개의 운석을 쏠 수 있습니다. 운석 방어 탄약을 장전하고 발사하려면 완전히 충전해야 합니다. 범위 64, 50%의 정확도를 갖으며, 발사 후 재충전까지 시간이 걸립니다. 과충전된 방어 장치는 발사 시 전력 변동을 대가로 누전량을 감소시켰습니다. +se-naquium-ore=나퀴움 광석 +se-rocket-launch-pad=내용물을 우주로 발사합니다. 승객을 태울 수 있으며 정문 근처에서 __CONTROL__toggle-driving__ 키를 눌러 탑승할 수 있습니다. 자세한 내용은 [img=virtual-signal/informatron] 인포매트론 [__CONTROL__informatron__] 에서 화물 로켓 문단을 참조하세요. +se-rocket-landing-pad=화물 로켓 캡슐을 위한 화물 운송 착륙지입니다. +se-space-assembling-machine=우주에서 작동하도록 설계된 조립 기계입니다. +se-space-astrometrics-laboratory=다양한 천문학 정보를 결합, 비교하고 정량화합니다. +se-space-biochemical-laboratory=전문적인 생화학 연구 및 실험을 할 수 있는 고급 화학 실험실입니다. 또한 기초적인 화학과 원유 처리를 수행할 수 있습니다. +se-space-capsule-_-vehicle=탑승객을 가장 가까운 행성 표면으로 데려가 줄 수 있는 우주 캡슐입니다. __CONTROL__toggle-driving__ 키를 사용하여 캡슐에 들어갈 수 있습니다. +se-space-decontamination-facility=무균 환경에서 사용하기 위해 물질을 세척하고 저압의 조건에서도 사용할 수 있는 액체를 준비합니다. +se-space-electromagnetics-laboratory=강한 자기장과 매우 높은 전압을 적용하기 위한 장비입니다. +se-space-genetics-laboratory=유전자 배열과 변형, 그리고 문화 유전자 인쇄를 전담하는 실험실입니다. +se-space-gravimetrics-laboratory=중력 교란을 분석하고 시뮬레이션합니다. +se-space-growth-facility=다른 환경에서는 불가능한 미세 중력과 같은 다양한 제어 가능 조건에서 생물학적 표본을 성장시킵니다. +se-space-hypercooler=열유체의 열 교환을 수행하여 하나는 뜨겁고 다른 하나는 차갑게 만듭니다. +se-space-laser-laboratory=레이저를 이용한 실험을 진행합니다. 눈 보호 장비를 잊지 마세요! +se-lifesupport-facility=더욱 적대적인 환경에서 생명을 보호하고 지원해 줍니다. +se-space-manufactory=거대한 조립 기계이지만 더욱 복잡한 제작법을 만들 수 있습니다. 우주 (또는 우주선)에서만 작동합니다. +se-space-material-fabricator=새로운 소재를 합성합니다. 입자 충돌기와 3D 프린터의 중간 단계입니다. +se-space-mechanical-laboratory=부수고, 자르고, 깎고, 흔드는 등 다양한 기계적 공정을 지원합니다. +se-space-particle-accelerator=빛의 속도에 가까운 속도로 입자를 가속화합니다. +se-space-particle-collider=고속 입자를 충돌시키고 결과를 분석합니다. +se-space-pipe=파이프 위로 건너갈 수 있습니다. +se-space-pipe-long=유체를 멀리 빠르게 보낼 수 있는 저렴한 방법입니다. 파이프 위로 건너갈 수 있습니다. +se-space-pipe-long-straight=길이 __1__칸. 측면의 파이프와 연결되지 않는 직선 파이프입니다. 조립 라인을 위해 유체를 빠르게 이동하는 데 적합합니다. +se-space-pipe-long-junction=길이 __1__칸. 중앙의 측면에 연결할 수 있는 접합부가 있습니다. 조립 라인을 위해 유체를 빠르게 이동하는 데 적합합니다. +se-space-pipe-to-ground=짧고 비싸므로, 필요한 경우에만 사용하세요. 파이프 위로 건너갈 수 있습니다. +se-space-plasma-generator=다양한 플라즈마를 생성합니다. +se-pulveriser=매우 단단한 광물과 행성의 중심에서 끌어올린 심층 파편을 부수고 자릅니다. +se-space-radiation-laboratory=방사성 물질을 가지고 놀기에 비교적 안전한 곳입니다. 일반 우라늄 처리에도 사용할 수 있습니다. +se-space-radiator=뜨거운 열유체의 열을 방출시킵니다. +se-space-radiator-2=뜨거운 열유체의 열을 방출시킵니다. +se-recycling-facility=고철과 다양한 부산물들을 자원으로 재활용합니다. +se-space-solar-panel=위를 걸어 다닐 수 있는 효율 높은 태양 전지판입니다. +se-space-solar-panel-2=위를 걸어 다닐 수 있는 효율 높은 태양 전지판입니다. 전력 생산 효율을 개선하였습니다. +se-space-solar-panel-3=위를 걸어 다닐 수 있는 효율 높은 태양 전지판입니다. 전력 생산 효율을 최대로 개선하였습니다. +se-space-spectrometry-facility=분광 광도법, 가스 색층 분석법, 질량 분석법, 그리고 그 외 다양한 분광법을 다룹니다. 벽을 향해 빛을 쏴보고, 반사시키고, 부딫히는 위치를 확인해보세요. +se-space-supercomputer-1=고급 데이터 조작과 처리 및 시뮬레이션을 할 수 있습니다. +se-space-supercomputer-2=양자 컴퓨팅을 통해 향상된 데이터 조작과 처리 및 시뮬레이션을 할 수 있습니다. +se-space-supercomputer-3=양자 컴퓨팅 프레임워크의 적응형 신경망입니다. 보다 더욱 진보된 데이터 조작과 처리 및 시뮬레이션을 할 수 있습니다. +se-space-supercomputer-4=처리 밀도와 에너지 전송율을 높이기 위해 공간 왜곡과 더욱 높은 차원을 활용하는 나노공학 유기 슈퍼컴퓨터입니다. +se-space-straight-rail=우주를 위해 설계되었지만, 표면에서도 사용할 수 있습니다. +se-space-science-lab=고급 과학 팩을 사용할 수 있습니다. +se-space-telescope=가시 스펙트럼 주변의 여러 파장에 민감하도록 정교하게 설계된 망원경입니다. +se-space-telescope-gammaray=감마선은 굴절되지 않으므로 일반 렌즈 망원경으로는 감지할 수 없습니다. 이 강력한 망원경은 대신 거울과 특수 감지기를 이용하여 감마선을 감지해냅니다. +se-space-telescope-xray=X선은 대부분 대기에 의해 차단됩니다. 이 강력한 망원경은 대기 문제가 거의 없는 우주에서 작동하도록 설계되었습니다. +se-space-telescope-microwave=마이크로파와 우주배경복사를 감지하는 거대한 망원경입니다. +se-space-telescope-radio=머나먼 곳으로부터 감지되는 극도로 미세한 수준의 전파를 감지하는 거대한 망원경입니다. +se-space-thermodynamics-laboratory=극한의 온도와 관련된 작업을 처리합니다. 제련과 같은 기초적인 열 공정도 처리할 수 있습니다. +se-space-transport-belt=아이템이 우주로 떠다니는 것을 막아줍니다. +se-spaceship-antimatter-engine=[font=default-bold][color=#f5cb48]배치 제한: 우주선 바닥[/color][/font]\n반물질 기체를 소멸시켜 추진합니다. 우주선 격리를 위한 격벽으로 계산됩니다. +se-spaceship-antimatter-booster-tank=[font=default-bold][color=#f5cb48]배치 제한: 우주선 바닥[/color][/font]\n반물질을 저장합니다. 우주선 발사에 필요합니다. +se-spaceship-console=[font=default-bold][color=#f5cb48]배치 제한: 우주선 바닥[/color][/font]\n행성, 위성, 궤도, 그리고 소행성 지대 다양한 곳으로 우주선을 이동하고 제어하는 데 사용됩니다. 우주선 벽과 문을 통해 우주선의 내부와 외부가 철저히 격리되어야 하며 작은 틈이나 구멍도 있어선 안됩니다. 무결성 검사는 문제를 강조합니다. +se-spaceship-console-output=우주선의 현재 상태와 관련된 신호를 출력합니다. 자세한 내용은 [img=virtual-signal/informatron] 인포매트론 [__CONTROL__informatron__]의 우주선 문단을 참조하세요. +se-spaceship-console-alt=[font=default-bold][color=#f5cb48]배치 제한: 우주선 바닥[/color][/font]\n이 우주선 콘솔은 손상되어 우주선을 조종하는 데 사용할 수 없습니다. +se-spaceship-gate=[font=default-bold][color=#f5cb48]배치 제한: 우주선 바닥[/color][/font]\n문이 열리면 역장이 감압을 중단합니다. 우주선 격리를 위한 격벽으로 계산됩니다. +se-spaceship-rocket-engine=[font=default-bold][color=#f5cb48]배치 제한: 우주선 바닥[/color][/font]\n액체 로켓 연료를 연소하여 추진합니다. 우주선 격리를 위한 격벽으로 계산됩니다. +se-spaceship-rocket-booster-tank=[font=default-bold][color=#f5cb48]배치 제한: 우주선 바닥[/color][/font]\n액체 로켓 연료를 저장합니다. 우주선 발사에 필요합니다. +se-spaceship-wall=[font=default-bold][color=#f5cb48]배치 제한: 우주선 바닥[/color][/font]\n우주선 격리를 위한 격벽으로 계산되며, 대각선 틈새도 전부 매워야만 합니다. +beacon=8개의 모듈 슬롯이 있습니다. 장착된 모듈 효과를 주변 3 타일 내에 있는 아군 건물에 전달합니다. 동일한 건물에 둘 이상의 신호기가 있다면 과부하에 걸려 건물의 작동이 멈추게 됩니다. +se-wide-beacon=15개의 모듈 슬롯이 있습니다. 장착된 모듈 효과를 주변 14 타일 내에 있는 아군 건물에 전달합니다. 동일한 건물에 둘 이상의 신호기가 있다면 과부하에 걸려 건물의 작동이 멈추게 됩니다. +se-wide-beacon-2=20개의 모듈 슬롯이 있습니다. 장착된 모듈 효과를 주변 14 타일 내에 있는 아군 건물에 전달합니다. 동일한 건물에 둘 이상의 신호기가 있다면 과부하에 걸려 건물의 작동이 멈추게 됩니다. +kr-singularity-beacon=좁은 범위에 100%의 모듈 효과를 전송하는 작은 크기의 신호기입니다. 장착된 모듈 효과를 주변 2 타일 내에 있는 아군 건물에 전달합니다. 동일한 건물에 둘 이상의 신호기가 있다면 과부하에 걸려 건물의 작동이 멈추게 됩니다. +se-supercharger=한 번에 최대 64개의 로봇을 고속으로 충전할 수 있습니다. 충전기의 최대 전력 소모는 1GW입니다. +se-addon-power-pole=건물에 부착하거나 전력 공급 범위를 정밀하게 제어하기 위해 설계된 작은 전신주입니다. +se-pylon=전기 에너지를 배분합니다. 64 타일까지 연결됩니다. +se-pylon-substation=전기 에너지를 배분합니다. 64 타일까지 연결되고 64x64 영역에 전력을 공급합니다. +se-pylon-construction=전기 에너지를 배분하고 건설 영역을 제공합니다. 64 타일까지 연결되고 64x64 영역에 건설 영역을 공급합니다. +se-pylon-construction-radar=전기 에너지를 배분하고 건설 영역을 제공하며 레이더처럼 주변을 밝혀줍니다. 64 타일까지 연결되고 256x256 영역에 건설 영역 제공 및 구역을 밝힙니다. 4x4 물류영역. +se-shield-projector=보호 역장을 생성합니다. 프로젝터는 충전 중 혹은 보호막이 손상된 경우에는 더욱 많은 에너지를 소모합니다. "Walls Block Spitters" 모드가 설치된 경우 스피터의 발사체를 막을 수 있습니다. +se-big-turbine=[font=default-bold][color=#e4cead]최대 출력:[/color][/font] 1GW.\n5000°C의 증기를 받아 다른 한쪽 끝에 500°C의 증기를 내보내고 측면으로 물을 내보내는 대형 발전기입니다. 99%의 에너지 효율과 99%의 물을 절약할 수 있습니다. +se-big-heat-exchanger=초고온 고용량을 위해 설계된 대형 열 교환기입니다. +se-delivery-cannon=궤도 너머로 자원을 발사해 머나먼 거리를 단숨에 운송할 수 있는 전자 포 형태의 대포입니다. 안전하게 배송되지 않으면 손상되므로 주의하여 사용하세요. +se-delivery-cannon-chest=고속으로 낙하하는 화물을 안전하게 포착할 수 있도록 설계된 무장형 상자입니다. 운송품을 안전하게 잡으려면 화물 공간에 여유가 있어야 합니다. +se-delivery-cannon-weapon=궤도 너머로 탄약을 발사해 머나먼 거리를 단숨에 발사할 수 있는 거대한 전자 포입니다. 주의하여 사용하세요. +se-spaceship-clamp=우주선의 클램프는 반대 방향을 향하는 클램프에 정박할 수 있도록 해줍니다. 우주선 격리를 위한 격벽으로 계산됩니다. +se-spaceship-clamp-place=우주선의 클램프는 반대 방향을 향하는 클램프에 정박할 수 있도록 해줍니다. 우주선 격리를 위한 격벽으로 계산됩니다. +se-space-accumulator=에너지를 높은 밀도로 저장합니다. +se-space-accumulator-2=에너지를 높은 밀도로 저장합니다. +se-energy-transmitter-emitter=표면 간 에너지 빔을 생성하는 중앙 건물입니다. 무기로 사용하거나 에너지 빔 수속기로 전력을 전달할 수 있습니다. 연결된 에너지 빔 체임버와 연결된 에너지 빔 인젝터가 필요합니다. 빔 강도는 인젝터 수를 기반으로 합니다. +se-energy-transmitter-chamber=에너지 빔 방출기에 연결되어야 합니다. 다른 체임버는 양쪽 끝 또는 중간에 연결할 수 있습니다. 에너지 빔 인젝터는 측면에만 연결할 수 있습니다. +se-energy-transmitter-injector=에너지 빔 체임버에 부착하고 방출기에 연결되어야 합니다. 인젝터는 고정된 전력 소모를 가지며, 각 수속기에 더 많은 열을 제공하기 위해 에너지를 증가시키거나 빔 무기의 속도와 피해량을 증가시킵니다. +se-energy-transmitter-injector-reactor=에너지 빔 체임버에 부착하고 방출기에 연결되어야 합니다. 인젝터는 고정된 전력 소모를 가지며, 각 수속기에 더 많은 열을 제공하기 위해 에너지를 증가시키거나 빔 무기의 속도와 피해량을 증가시킵니다. +se-energy-receiver=에너지 빔을 포착하여 열로 전환합니다. 방출기는 전력 공급 모드여야 하며, 대상은 리시버여야 합니다. +se-energy-beam-defence=에너지 빔 방어 시설입니다. 우주 기반의 에너지 빔이나 코로나 질량 방출로부터 지면을 보호합니다. 기능에 필요한 유일한 요구 사항은 에너지이며 기본 소비량은 10MW이지만 공격 빔의 강도에 따라 증가합니다. 코로나 질량 방출에 대해서는 한 표면에 하나만 필요하며, 에너지 빔 무기의 경우 우산 하나 당 최대 500 GW의 피해를 막을 수 있습니다. 자세한 내용은 [img=virtual-signal/informatron] 인포매트론 [__CONTROL__informatron__]의 에너지 빔 문단을 참조하세요. +spidertron=로켓의 목적지가 착륙 패드로 설정되지 않았다면 화물 로켓에서 전개됩니다. +se-nexus=움직이는 우주선에서만 작동되며 에너지 사용량은 우주선의 속도에 비례합니다. 성간 이동을 통해 데이터를 얻을 수 있으며, 데이터 생성은 우주선의 운동 에너지를 기반으로 합니다. 넥서스는 왜곡 드라이브 역할을 하도록 설계되었으며 적절한 기술을 사용하여 지역 항성 성단에서 탈출할 수 있습니다. +se-nexus-charger=움직이는 우주선에서만 작동되며 에너지 사용량은 우주선의 속도에 비례합니다. 성간 이동을 통해 데이터를 얻을 수 있으며, 데이터 생성은 우주선의 운동 에너지를 기반으로 합니다. 넥서스는 왜곡 드라이브 역할을 하도록 설계되었으며 적절한 기술을 사용하여 지역 항성 성단에서 탈출할 수 있습니다. +se-space-probe-rocket-silo=우주 탐사선을 발사하기 위한 로켓 격납고입니다. +se-linked-container=외부 차원 공간에 의해 다른 보관함과 연결되는 보관함입니다. 보관함의 링크는 보관함이 처음 배치되는 표면에 따라 결정됩니다. + +[equipment-name] +energy-shield-equipment=에너지 보호막 +energy-shield-mk2-equipment=에너지 보호막 MK2 +energy-shield-mk3-equipment=에너지 보호막 MK3 +energy-shield-mk4-equipment=에너지 보호막 MK4 +energy-shield-mk5-equipment=에너지 보호막 MK5 +energy-shield-mk6-equipment=에너지 보호막 MK6 +se-adaptive-armour-equipment-1=적응형 아머 MK1 +se-adaptive-armour-equipment-2=적응형 아머 MK2 +se-adaptive-armour-equipment-3=적응형 아머 MK3 +se-adaptive-armour-equipment-4=적응형 아머 MK4 +se-adaptive-armour-equipment-5=적응형 아머 MK5 +se-rtg-equipment=휴대용 RTG +se-rtg-equipment-2=휴대용 RTG MK2 +se-lifesupport-equipment-1=생명 유지 장비 MK1 +se-lifesupport-equipment-2=생명 유지 장비 MK2 +se-lifesupport-equipment-3=생명 유지 장비 MK3 +se-lifesupport-equipment-4=생명 유지 장비 MK4 + +[equipment-description] +energy-shield-equipment=빠르게 충전되지만 많은 에너지를 사용하는 보호막입니다. +energy-shield-mk2-equipment=빠르게 충전되지만 많은 에너지를 사용하는 보호막입니다. +energy-shield-mk3-equipment=빠르게 충전되지만 많은 에너지를 사용하는 보호막입니다. +energy-shield-mk4-equipment=빠르게 충전되지만 많은 에너지를 사용하는 보호막입니다. +energy-shield-mk5-equipment=빠르게 충전되지만 많은 에너지를 사용하는 보호막입니다. +energy-shield-mk6-equipment=빠르게 충전되지만 많은 에너지를 사용하는 보호막입니다. +se-adaptive-armour-equipment-1=에너지를 사용하여 스스로를 수리하는 아머입니다. 시간이 지남에 따라 보호막이 천천히 재생됩니다. +se-adaptive-armour-equipment-2=에너지를 사용하여 스스로를 수리하는 아머입니다. 시간이 지남에 따라 보호막이 천천히 재생됩니다. +se-adaptive-armour-equipment-3=에너지를 사용하여 스스로를 수리하는 아머입니다. 시간이 지남에 따라 보호막이 천천히 재생됩니다. +se-adaptive-armour-equipment-4=에너지를 사용하여 스스로를 수리하는 아머입니다. 시간이 지남에 따라 보호막이 천천히 재생됩니다. +se-adaptive-armour-equipment-5=에너지를 사용하여 스스로를 수리하는 아머입니다. 시간이 지남에 따라 보호막이 천천히 재생됩니다. +se-rtg-equipment=방사성 붕괴로 생기는 열 에너지를 전기 에너지로 변환하는 휴대용 방사성동위원소 열전기 발전기입니다. 추가 연료 없이 수십 년간 지속됩니다. +se-rtg-equipment-2=방사성 붕괴로 생기는 열 에너지를 전기 에너지로 변환하는 개선된 휴대용 방사성동위원소 열전기 발전기입니다. 추가 연료 없이 수십 년간 지속됩니다. +se-lifesupport-equipment-1=생명 지원 효율을 100%만큼 증가시켜줍니다 (합연산). 우주복이 아닌 아머에 삽입하면 효율이 절반으로 줄어들며 우주에서 작동하지 않습니다. +se-lifesupport-equipment-2=생명 지원 효율을 200%만큼 증가시켜줍니다 (합연산). 우주복이 아닌 아머에 삽입하면 효율이 절반으로 줄어들며 우주에서 작동하지 않습니다. +se-lifesupport-equipment-3=생명 지원 효율을 400%만큼 증가시켜줍니다 (합연산). 우주복이 아닌 아머에 삽입하면 효율이 절반으로 줄어들며 우주에서 작동하지 않습니다. +se-lifesupport-equipment-4=생명 지원 효율을 800%만큼 증가시켜줍니다 (합연산). 우주복이 아닌 아머에 삽입하면 효율이 절반으로 줄어들며 우주에서 작동하지 않습니다. + +[fluid-name] +se-antimatter-stream=반물질 기체 +se-bio-sludge=바이오슬러지 +se-contaminated-bio-sludge=오염된 바이오슬러지 +se-contaminated-space-water=오염된 우주 물 +se-chemical-gel=화학 젤 +se-decompressing-steam=응축된 증기 +se-liquid-rocket-fuel=액체 로켓 연료 +se-methane-gas=메탄 가스 +se-methane-gas-mixed=혼합된 메탄 가스 +se-nutrient-gel=영양 젤 +se-neural-gel=신경 젤 +se-neural-gel-2=고급 신경 젤 +se-ion-stream=이온 기체 +se-plasma-stream=플라즈마 기체 +se-particle-stream=입자 기체 +se-proton-stream=양성자 기체 +se-space-coolant=열유체 25°C +se-space-coolant-hot=열유체 25°C +se-space-coolant-warm=차가운 열유체 -10°C +se-space-coolant-cold=냉각된 열유체 -100°C +se-space-coolant-supercooled=초냉각 열유체 -273°C +se-space-water=우주 물 +se-beryllium-hydroxide=베릴륨 수산화물 +se-cryonite-slush=크라이오나이트 슬러시 + +[fluid-description] +se-space-water=저압의 환경에서도 얼지 않는 물로 대부분의 우주 응용 분야에 적합합니다. +se-space-coolant=열유체의 기본 온도입니다. +se-space-coolant-hot=열유체의 기본 온도입니다. +se-space-coolant-warm=방열기를 통해 차갑게 만든 열유체입니다. +se-space-coolant-cold=초냉각된 열유체입니다. +se-space-coolant-supercooled=반복적인 초냉각을 거친 열유체입니다. + +[fuel-category-name] +antimatter=반물질 연료 + +[item-group-name] +space=우주 +science=과학 +spaceship=우주선 +bob-fluids=유체 +resources=자원 +intermediate-products=제조 +combat=장비와 전투 + +[item-name] +spidertron=스파이더트론 +core-fragment=심층 파편 (__1__) +effectivity-module-4=효율 모듈 4 +effectivity-module-5=효율 모듈 5 +effectivity-module-6=효율 모듈 6 +effectivity-module-7=효율 모듈 7 +effectivity-module-8=효율 모듈 8 +effectivity-module-9=효율 모듈 9 +glass=유리 +productivity-module-4=생산 모듈 4 +productivity-module-5=생산 모듈 5 +productivity-module-6=생산 모듈 6 +productivity-module-7=생산 모듈 7 +productivity-module-8=생산 모듈 8 +productivity-module-9=생산 모듈 9 +rocket-fuel=고체 로켓 연료 +sand=모래 +solid-sand=세척된 모래 +washed-sand=세척된 모래 +satellite=내비게이션 위성 +se-satellite-telemetry=위성 원격 측정법 +se-antimatter-canister=반물질 용기 +se-astrometric-data=천체 측량 데이터 +se-astronomic-catalogue-1=천문학 카탈로그 +se-astronomic-catalogue-2=광범위한 천문학 카탈로그 +se-astronomic-catalogue-3=포괄적인 천문학 카탈로그 +se-astronomic-catalogue-4=확장된 천문학 카탈로그 +se-astronomic-insight=천문학적 통찰 +se-astronomic-science-pack-1=천문학 과학 팩 1 +se-astronomic-science-pack-2=천문학 과학 팩 2 +se-astronomic-science-pack-3=천문학 과학 팩 3 +se-astronomic-science-pack-4=천문학 과학 팩 4 +se-atomic-data=원자 데이터 +se-beryllium-ore=녹주석 +se-ballistic-shielding-data=탄도 차폐 데이터 +se-beryllium-ore-crushed=분쇄된 녹주석 +se-beryllium-ore-washed=세척된 녹주석 +se-beryllium-plate=베릴륨 판 +se-beryllium-powder=베릴륨 가루 +se-beryllium-ingot=베릴륨 주괴 +se-beryllium-sulfate=황산베릴륨 +se-bio-combustion-data=생물 연소 데이터 +se-bio-combustion-resistance-data=생물 연소 저항 데이터 +se-bio-spectral-data=생물 스펙트럼 데이터 +se-biochemical-data=생화학 데이터 +se-biochemical-resistance-data=생화학적 저항 데이터 +se-bioculture=생물 문화 +se-bioelectrics-data=생체전기 데이터 +se-biological-catalogue-1=생물학 카탈로그 +se-biological-catalogue-2=광범위한 생물학 카탈로그 +se-biological-catalogue-3=포괄적인 생물학 카탈로그 +se-biological-catalogue-4=확장된 생물학 카탈로그 +se-biological-insight=생물학적 통찰 +se-biological-science-pack-1=생물학 과학 팩 1 +se-biological-science-pack-2=생물학 과학 팩 2 +se-biological-science-pack-3=생물학 과학 팩 3 +se-biological-science-pack-4=생물학 과학 팩 4 +se-biomechanical-data=생체역학 데이터 +se-biomechanical-resistance-data=생체역학 저항 데이터 +se-boson-data=보손 데이터 +se-broken-data=손상된 데이터 카드 +se-canister=안전 용기 +se-biogun=바이오건 +se-bloater-ammo=블로트버스트 탄약 +se-pheromone-ammo=페로몬 다트 +se-cryogun=크라이오건 +se-cryogun-ammo=빙산 탄약 +se-rocket-launch-pad-silo-dummy-ingredient-item=화물 로켓 (숨겨진 재료) +se-rocket-launch-pad-silo-dummy-result-item=화물 로켓 (숨겨진 결과) +se-cargo-rocket-cargo-pod=화물 포드 +se-cargo-rocket-fuel-tank=로켓 연료 탱크 +se-cargo-rocket-section=화물 로켓 부품 +se-cargo-rocket-section-packed=포장된 화물 로켓 부품 +se-cold-thermodynamics-data=저온 열역학 데이터 +se-comparative-genetic-data=비교 유전 데이터 +se-compressive-strength-data=압축 강도 데이터 +se-conductivity-data=전도성 데이터 +se-contaminated-scrap=오염된 고철 +se-core-fragment-omni=심층 파편 +se-corrosion-resistance-data=내식성 데이터 +se-cryogenics-data=극저온 환경 데이터 +se-cryonite=크라이오나이트 +se-cryonite-crushed=분쇄된 크라이오나이트 +se-cryonite-washed=세척된 크라이오나이트 +se-cryonite-rod=크라이오나이트 막대 +se-cryonite-ion-exchange-beads=음이온 교환 구슬 +se-dark-energy-data=암흑 에너지 데이터 +se-darkmatter-data=암흑 물질 데이터 +se-data-storage-substrate-cleaned=다듬어진 데이터 카드 기판 +se-data-storage-substrate=데이터 카드 기판 +se-decompression-data=감압 데이터 +se-decompression-resistance-data=감압 저항 데이터 +se-universal-catalogue=범우주 카탈로그 +se-deep-space-science-pack=심우주 과학 팩 +se-deep-space-science-pack-1=심우주 과학 팩 1 +se-deep-space-science-pack-2=심우주 과학 팩 2 +se-deep-space-science-pack-3=심우주 과학 팩 3 +se-deep-space-science-pack-4=심우주 과학 팩 4 +se-doppler-shift-data=도플러 시프트 데이터 +se-durability-data=내구성 데이터 +se-electrical-shielding-data=전기 차폐 데이터 +se-electromagnetic-field-data=전자기장 데이터 +se-empty-data=빈 데이터 카드 +se-empty-lifesupport-canister=빈 생명 지원 용기 +se-energy-catalogue-1=에너지 카탈로그 +se-energy-catalogue-2=광범위한 에너지 카탈로그 +se-energy-catalogue-3=포괄적인 에너지 카탈로그 +se-energy-catalogue-4=확장된 에너지 카탈로그 +se-energy-insight=에너지 통찰 +se-energy-science-pack-1=에너지 과학 팩 1 +se-energy-science-pack-2=에너지 과학 팩 2 +se-energy-science-pack-3=에너지 과학 팩 3 +se-energy-science-pack-4=에너지 과학 팩 4 +se-entanglement-data=얽힘 데이터 +se-enriched-naquium=농축된 나퀴움 +se-exotic-fission-data=외계 분열 데이터 +se-exotic-singularity-data=특이점 데이터 +se-explosion-shielding-data=폭발 차폐 데이터 +se-experimental-alloys-data=실험적인 합금 데이터 +se-experimental-biochemical-data=실험적인 생화학 데이터 +se-experimental-bioculture=실험적인 생물 문화 +se-experimental-genetic-data=실험적인 유전 데이터 +se-experimental-material-decay-data=실험적인 물질 부식 데이터 +se-experimental-material-spectral-data=실험적인 물질 스펙트럼 데이터 +se-experimental-material=실험적인 물질 프로토타입 +se-experimental-specimen=실험적인 바이오매스 +se-experimental-superconductor=초전도체 프로토타입 +se-forcefield-data=역장 데이터 +se-friction-data=마찰 데이터 +se-fusion-test-data=융합 실험 데이터 +se-gammaray-detector=감마선 검출기 +se-gammaray-observation-data=감마선 관측 데이터 +se-gammaray-test-data=감마선 데이터 +se-gate-fragment=유물 파편 +se-genetic-data=유전학 데이터 +se-gravity-wave-observation-data=중력파 관측 데이터 +se-gravity-wave-data=중력파 데이터 +se-gravimetric-observation-data=중량측정 관측 데이터 +se-gravimetric-test-data=중량측정 실험 데이터 +se-gravitational-lensing-data=중력 렌즈 데이터 +se-heat-shielding=단열재 +se-holmium-ore=홀미나이트 광석 +se-holmium-ore-crushed=분쇄된 홀미나이트 +se-holmium-ore-washed=세척된 홀미나이트 +se-holmium-powder=홀뮴 가루 +se-holmium-plate=홀뮴 판 +se-holmium-ingot=홀뮴 주괴 +se-hot-thermodynamics-data=고온 열역학 데이터 +se-impact-shielding-data=충격 차폐 데이터 +se-infrared-observation-data=적외선 관측 데이터 +se-ion-spectrometry-data=이온 분광 데이터 +se-iridium-ore=이리다이트 +se-iridium-ore-crushed=분쇄된 이리다이트 +se-iridium-ore-washed=세척된 이리다이트 +se-iridium-piledriver=이리듐 파일드라이버 +se-iridium-powder=이리듐 가루 +se-iridium-plate=이리듐 판 +se-iridium-ingot=이리듐 주괴 +se-junk-data=망가진 데이터 카드 +se-laser-shielding-data=레이저 차폐 데이터 +se-lepton-data=경입자 데이터 +se-lifesupport-canister=생명 지원 용기 +se-machine-learning-data=기계학습 데이터 +se-magnetic-canister=자기 용기 +se-magnetic-monopole-data=자기 단극 데이터 +se-material-decay-data=물질 부식 데이터 +se-material-science-pack-1=물질 과학 팩 1 +se-material-science-pack-2=물질 과학 팩 2 +se-material-science-pack-3=물질 과학 팩 3 +se-material-science-pack-4=물질 과학 팩 4 +se-material-spectral-data=물질 스펙트럼 데이터 +se-material-testing-pack=물질 실험용 팩 +se-material-catalogue-1=물질 카탈로그 +se-material-catalogue-2=광범위한 물질 카탈로그 +se-material-catalogue-3=포괄적인 물질 카탈로그 +se-material-catalogue-4=확장된 물질 카탈로그 +se-material-insight=물질 통찰 +se-medpack=구급팩 +se-medpack-2=구급팩 2 +se-medpack-3=구급팩 3 +se-medpack-4=구급팩 4 +se-meteor-defence=운석 방어 장치 +se-meteor-defence-ammo=운석 방어 장치 탄약 +se-meteor-point-defence=운석 국지방어 장치 +se-meteor-point-defence-ammo=운석 국지방어 장치 탄약 +se-methane-ice=메탄 얼음 +se-micro-black-hole-data=마이크로 블랙홀 데이터 +se-microwave-observation-data=마이크로파 관측 데이터 +se-negative-pressure-data=음압 데이터 +se-nano-cold-thermodynamics-data=나노소재 저온 열역학 데이터 +se-nano-compressive-strength-data=나노소재 압축 강도 데이터 +se-nano-hot-thermodynamics-data=나노소재 고온 열역학 데이터 +se-nanomaterial=나노소재 +se-nano-tensile-strength-data=나노소재 인장 강도 데이터 +se-naquium-ore=나퀴나이트 +se-naquium-ore-crushed=분쇄된 나퀴나이트 +se-naquium-ore-washed=세척된 나퀴나이트 +se-naquium-powder=나퀴움 가루 +se-naquium-plate=나퀴움 판 +se-naquium-ingot=나퀴움 주괴 +se-neural-anomaly-data=신경 이상변칙 데이터 +se-nutrient-vat=영양소 통 +se-observation-frame-blank=빈 관측 프레임 +se-observation-frame-gammaray=감마선 관측 프레임 +se-observation-frame-infrared=적외선 관측 프레임 +se-observation-frame-microwave=마이크로파 관측 프레임 +se-observation-frame-radio=전파 관측 프레임 +se-observation-frame-uv=UV 관측 프레임 +se-observation-frame-visible=가시광선 관측 프레임 +se-observation-frame-xray=X선 관측 프레임 +se-orbital-data=궤도 계산 데이터 +se-particle-beam-shielding-data=입자 빔 차폐 데이터 +se-plague-bomb=역병 로켓 +se-plasma-canister=플라즈마 용기 +se-plasma-electrodynamics-data=플라즈마 전기역학 데이터 +se-plasma-thermodynamics-data=플라즈마 열역학 데이터 +se-polarisation-data=편광 데이터 +se-pressure-containment-data=압력 억제 데이터 +se-quantum-phenomenon-data=양자 현상 데이터 +se-quark-data=쿼크 데이터 +se-radiation-data=방사선 데이터 +se-radiation-exposure-data=방사선 노출 데이터 +se-radiation-exposure-resistance-data=방사선 저항 데이터 +se-radiation-shielding-data=방사선 차폐 데이터 +se-radio-observation-data=전파 관측 데이터 +se-rigidity-data=강성 데이터 +se-rtg-equipment=휴대용 RTG +se-rtg-equipment-2=휴대용 RTG MK2 +se-scrap=고철 +se-shear-strength-data=전단 강도 데이터 +se-significant-data=중요 데이터 +se-significant-specimen=중요 바이오매스 +se-singularity-data=특이점 데이터 +se-space-capsule=우주 캡슐 +se-space-mirror=다중 스펙트럼 거울 +se-space-platform-plating=도금 우주 플랫폼 +se-space-platform-scaffold=우주 플랫폼 비계 +se-space-rail=우주 철도 +se-spaceship-floor=우주선 바닥 +se-specimen=바이오매스 +se-subatomic-data=아원자 데이터 +se-superconductivity-data=초전도성 데이터 +se-superconductor=초전도체 +se-superconductive-cable=초전도 케이블 +se-tensile-strength-data=인장 강도 데이터 +se-tesla-ammo=테슬라 건 탄약 +se-tesla-gun=테슬라 건 +se-thruster-suit=우주복 +se-thruster-suit-2=우주복 MK2 +se-thruster-suit-3=우주복 MK3 +se-thruster-suit-4=우주복 MK4 +se-timespace-anomaly-data=시공간 이상변칙 데이터 +se-used-lifesupport-canister=사용된 생명 지원 용기 +se-uv-observation-data=자외선 관측 데이터 +se-visible-observation-data=가시광선 관측 데이터 +se-vitamelange=비타멜란지 +se-vitamelange-nugget=비타멜란지 너겟 +se-vitamelange-roast=구운 비타멜란지 +se-vitamelange-spice=비타멜란지 향신료 +se-vitamelange-extract=비타멜란지 추출물 +se-vulcanite=벌카나이트 +se-vulcanite-crushed=분쇄된 벌카나이트 +se-vulcanite-washed=세척된 벌카나이트 +se-vulcanite-block=벌카나이트 블록 +se-vulcanite-ion-exchange-beads=양이온 교환 구슬 +se-water-ice=워터 아이스 +se-xray-observation-data=X선 관측 데이터 +se-zero-point-energy-data=영점 에너지 데이터 +se-rocket-science-pack=로켓 과학 팩 +space-science-pack=최적화 과학 팩 +speed-module-4=속도 모듈 4 +speed-module-5=속도 모듈 5 +speed-module-6=속도 모듈 6 +speed-module-7=속도 모듈 7 +speed-module-8=속도 모듈 8 +speed-module-9=속도 모듈 9 +se-aeroframe-pole=에어로프레임 막대 +se-aeroframe-scaffold=에어로프레임 비계 +se-aeroframe-bulkhead=에어로프레임 격벽 +se-lattice-pressure-vessel=격자 압력 용기 +se-heavy-girder=고중량 거더 +se-heavy-bearing=고중량 베어링 +se-heavy-composite=고중량 복합재 +se-heavy-assembly=고중량 조립체 +se-bioscrubber=바이오 스크러버 +se-vitalic-epoxy=비탈릭 에폭시 +se-vitalic-reagent=비탈릭 시약 +se-vitalic-acid=비탈릭 산 +se-self-sealing-gel=자가 밀봉 젤 +se-holmium-cable=홀뮴 케이블 +se-holmium-solenoid=홀뮴 솔레노이드 +se-quantum-processor=양자 처리 장치 +se-dynamic-emitter=역동 방출기 +se-naquium-processor=나퀴움 처리 장치 +se-naquium-cube=나퀴움 큐브 +se-naquium-tessaract=나퀴움 테서랙트 +se-wide-beacon=광역 신호기 +se-wide-beacon-2=광역 신호기 2 +se-lifesupport-equipment-1=생명 유지 장비 MK1 +se-lifesupport-equipment-2=생명 유지 장비 MK2 +se-lifesupport-equipment-3=생명 유지 장비 MK3 +se-lifesupport-equipment-4=생명 유지 장비 MK4 +se-naquium-heat-pipe=나퀴움 열 파이프 +se-naquium-heat-pipe-horizontal=나퀴움 열 파이프 (수평) +se-naquium-heat-pipe-vertical=나퀴움 열 파이프 (수직) +se-naquium-heat-pipe-long=긴 나퀴움 열 파이프 __1__ +se-deep-space-transport-belt=심우주 운송 벨트 +se-deep-space-transport-belt-black=검은색 심우주 운송 벨트 +se-deep-space-transport-belt-white=흰색 심우주 운송 벨트 +se-deep-space-transport-belt-red=빨간색 심우주 운송 벨트 +se-deep-space-transport-belt-yellow=노란색 심우주 운송 벨트 +se-deep-space-transport-belt-green=초록색 심우주 운송 벨트 +se-deep-space-transport-belt-cyan=시안색 심우주 운송 벨트 +se-deep-space-transport-belt-blue=파란색 심우주 운송 벨트 +se-deep-space-transport-belt-magenta=마젠타색 심우주 운송 벨트 +se-deep-space-underground-belt=심우주 지하 벨트 +se-deep-space-underground-belt-black=검은색 심우주 지하 벨트 +se-deep-space-underground-belt-white=흰색 심우주 지하 벨트 +se-deep-space-underground-belt-red=빨간색 심우주 지하 벨트 +se-deep-space-underground-belt-yellow=노란색 심우주 지하 벨트 +se-deep-space-underground-belt-green=초록색 심우주 지하 벨트 +se-deep-space-underground-belt-cyan=시안색 심우주 지하 벨트 +se-deep-space-underground-belt-blue=파란색 심우주 지하 벨트 +se-deep-space-underground-belt-magenta=마젠타색 심우주 지하 벨트 +se-deep-space-splitter=심우주 분배기 +se-deep-space-splitter-black=검은색 심우주 분배기 +se-deep-space-splitter-white=흰색 심우주 분배기 +se-deep-space-splitter-red=빨간색 심우주 분배기 +se-deep-space-splitter-yellow=노란색 심우주 분배기 +se-deep-space-splitter-green=초록색 심우주 분배기 +se-deep-space-splitter-cyan=시안색 심우주 분배기 +se-deep-space-splitter-blue=파란색 심우주 분배기 +se-deep-space-splitter-magenta=마젠타색 심우주 분배기 +se-blueprint-registration-point=설계도면 등록 지점 +se-delivery-cannon-capsule=배달 대포 캡슐 +se-delivery-cannon-capsule-packed=배달 대포 캡슐: __1__ +se-delivery-cannon-targeter=배달 대포 표적지 +se-delivery-cannon-weapon-capsule=무기 배달 캡슐 +se-delivery-cannon-weapon-capsule-packed=무기 배달 캡슐: __1__ +se-delivery-cannon-weapon-targeter=무기 배달 대포 표적지 +se-energy-transmitter-targeter=에너지 빔 표적지 +se-arcosphere=아코스피어 +se-arcosphere-a=λ 아코스피어 람다 +se-arcosphere-b=ξ 아코스피어 시 +se-arcosphere-c=ζ 아코스피어 제타 +se-arcosphere-d=θ 아코스피어 세타 +se-arcosphere-e=ε 아코스피어 엡실론 +se-arcosphere-f=φ 아코스피어 피 +se-arcosphere-g=γ 아코스피어 감마 +se-arcosphere-h=ω 아코스피어 오메가 +se-arcosphere-collector=아코스피어 수집기 +se-star-probe=항성 탐사선 +se-belt-probe=소행성대 탐사선 +se-void-probe=성간 공허 탐사선 +se-star-probe-data=항성 탐사선 데이터 +se-belt-probe-data=소행성대 탐사선 데이터 +se-void-probe-data=성간 공허 탐사선 데이터 +se-nano-engineering-data=나노공학 데이터 +se-annihilation-data=소멸 데이터 +se-naquium-structural-data=나퀴움 구조 데이터 +se-hyperlattice-data=초격자 데이터 +se-naquium-energy-data=나퀴움 에너지 데이터 +se-space-fold-data=공간 접힘 데이터 +se-space-warp-data=공간 왜곡 데이터 +se-space-dialation-data=공간 팽창 데이터 +se-space-injection-data=공간 주입 데이터 +se-interstellar-data=성간 여행 데이터 +se-teleportation-data=순간이동 데이터 +se-wormhole-data=웜홀 데이터 +se-rhga-data=현실 하이퍼그래프 분석 데이터 +se-deep-catalogue-1=심우주 카탈로그 +se-deep-catalogue-2=광범위한 심우주 카탈로그 +se-deep-catalogue-3=포괄적인 심우주 카탈로그 +se-deep-catalogue-4=확장된 심우주 카탈로그 +se-space-probe-rocket=우주 탐사선 로켓 +se-space-probe-rocket-deployed=우주 탐사선 로켓 (전개됨) +se-railgun=레일건 +se-railgun-ammo=레일건 탄약 + +[item-description] +automation-science-pack=기본 연구소에서 연구하는 데 사용됩니다. +chemical-science-pack=기본 연구소에서 연구하는 데 사용됩니다. +logistic-science-pack=기본 연구소에서 연구하는 데 사용됩니다. +military-science-pack=기본 연구소에서 연구하는 데 사용됩니다. +production-science-pack=기본 연구소에서 연구하는 데 사용됩니다. +satellite=인공위성은 위성 로켓 격납고 또는 우주 탐사선 로켓 격납고에 넣어져야 합니다. 인공위성은 발사된 태양계 또는 멀리 떨어진 별에서 천체의 정확한 좌표를 발견할 수 있습니다. [img=item/se-satellite-telemetry] 위성 원격 측정을 제공합니다. +se-satellite-telemetry=로켓 과학에 필요한 기록이 담겨 있는 위성 원격 측정 장치입니다. 위성 로켓 격납고 혹은 우주 탐사선 로켓 격납고에서 [img=item/satellite] 내비게이션 위성을 발사하여 얻습니다. +se-antimatter-canister=이동 용기에 안전하게 담겨진 밀도가 가장 높은 형태의 에너지입니다. +se-astronomic-science-pack-1=우주 연구소에서 연구하는 데 사용됩니다. +se-astronomic-science-pack-2=우주 연구소에서 연구하는 데 사용됩니다. +se-astronomic-science-pack-3=우주 연구소에서 연구하는 데 사용됩니다. +se-astronomic-science-pack-4=우주 연구소에서 연구하는 데 사용됩니다. +se-beryllium-ore=베릴륨 광석 +se-biological-science-pack-1=우주 연구소에서 연구하는 데 사용됩니다. +se-biological-science-pack-2=우주 연구소에서 연구하는 데 사용됩니다. +se-biological-science-pack-3=우주 연구소에서 연구하는 데 사용됩니다. +se-biological-science-pack-4=우주 연구소에서 연구하는 데 사용됩니다. +se-canister=다목적 격납 용기입니다. +se-cargo-rocket-cargo-pod=화물 로켓의 구성 요소입니다. +se-cargo-rocket-fuel-tank=화물 로켓의 구성 요소입니다. +se-cargo-rocket-section=화물 로켓의 주요 재료입니다. 화물 로켓 격납고에 삽입하세요. 로켓 하나 당 100개가 필요합니다. 로켓 착륙을 통해 회수할 수 있습니다 (기본 회수율 20%). +se-cargo-rocket-section-packed=운송을 위해 포장된 화물 로켓 부품입니다. 로켓 구축에 사용하려면 우선 포장을 풀어야 합니다. +se-bloater-ammo=땅에 감염성 바이오슬러지 풀을 만듭니다. 감염된 적은 부풀어올라 이동이 어려워지고 시간이 지남에 따라 피해를 받습니다. 부풀어 오른 상태에서 죽게 되면 파열되어 내장이 주변으로 튀고, 그것이 다시 적에게 묻으면 추가적인 피해와 함께 전염 파도가 만들어집니다. 내장 발사체의 총 피해는 최대 HP의 50%입니다. +se-pheromone-ammo=바이터나 스피터들을 혼란시켜, 플레이어를 우호적이며, 다른 바이터나 스피터들을 적이라 생각하게 만듭니다. +se-cryogun=적을 얼릴 수 있는 얼음 벽을 만듭니다. +se-deep-space-science-pack=우주 연구소에서 연구하는 데 사용됩니다. +se-energy-science-pack-1=우주 연구소에서 연구하는 데 사용됩니다. +se-energy-science-pack-2=우주 연구소에서 연구하는 데 사용됩니다. +se-energy-science-pack-3=우주 연구소에서 연구하는 데 사용됩니다. +se-energy-science-pack-4=우주 연구소에서 연구하는 데 사용됩니다. +se-heat-shielding=고온 응용과 우주 구조물에 사용되는 복합 패널입니다. +se-holmium-ore=홀뮴 광석 +se-iridium-ore=이리듐 광석 +se-material-science-pack-1=우주 연구소에서 연구하는 데 사용됩니다. +se-material-science-pack-2=우주 연구소에서 연구하는 데 사용됩니다. +se-material-science-pack-3=우주 연구소에서 연구하는 데 사용됩니다. +se-material-science-pack-4=우주 연구소에서 연구하는 데 사용됩니다. +se-medpack=체력을 회복하는데 사용됩니다. +se-medpack-2=체력을 회복하는데 사용됩니다. +se-medpack-3=체력을 회복하는데 사용됩니다. +se-medpack-4=체력을 회복하는데 사용됩니다. +se-meteor-defence=행성 전체에 떨어지는 운석을 모두 방어할 수 있지만, 한 번에 하나의 운석만을 쏠 수 있습니다. 운석 방어 탄약을 장전하고 발사하려면 완전히 충전되어야 합니다. 80%의 정확도를 갖습니다. 발사 후 재충전이 필요합니다. 충전 중에는 20 MW의 에너지를 소모합니다. +se-meteor-defence-ammo=운석을 파괴합니다. 운석 방어 장치에 장전되어야 합니다. +se-meteor-point-defence=주변 영역에 떨어지는 운석을 방어합니다. 하나의 방어 장치는 최대 네 개의 운석을 쏠 수 있습니다. 운석 국지방어 탄약을 장전하고 발사하려면 완전히 충전해야 합니다. 범위 64, 50%의 정확도를 갖으며, 발사 후 재충전까지 시간이 걸립니다. 운석 국지방어 장치를 회전시키면 충전 모드를 변경할 수 있습니다. +se-meteor-point-defence-container=운석을 파괴합니다. 운석 국지방어 장치에 장전되어야 합니다. +se-naquium-ore=나퀴움 광석입니다. 심우주에서만 찾을 수 있는 성간 공간의 보물입니다. +se-rocket-launch-pad-silo-dummy-ingredient-item=화물 로켓 격납고에 100개의 화물 로켓 부품과 하나의 우주 캡슐을 투입하여 만들어집니다. +se-rtg-equipment=방사성 붕괴로 생기는 열 에너지를 전기 에너지로 변환하는 휴대용 방사성동위원소 열전기 발전기입니다. 추가 연료 없이 수십 년간 지속됩니다. +se-rtg-equipment-2=방사성 붕괴로 생기는 열 에너지를 전기 에너지로 변환하는 개선된 휴대용 방사성동위원소 열전기 발전기입니다. 추가 연료 없이 수십 년간 지속됩니다. +se-plague-bomb=행성에 존재하는 모든 생명체들을 몰아낼 수 있는 무기입니다. 각별히 주의하여 취급하십시오. (모든 것이 서서히 죽어감에 따라 UPS를 심각한 수준으로 떨어뜨릴 수 있습니다. 대형 행성이나 멀티플레이어에서는 권하지 않습니다.) +se-space-capsule=화물 로켓에 필요한 제어 캡슐입니다. 탑승객을 가장 가까운 행성 표면으로 데려가 줄 수 있는 우주 캡슐입니다. __CONTROL__toggle-driving__ 키를 사용하여 캡슐에 들어갈 수 있습니다. +se-space-platform-plating=[font=default-bold][color=#f5cb48]배치 제한: 우주[/color][/font]\n빠르게 이동할 수 있는 고급 도금으로 이루어진 우주 플랫폼입니다. +se-space-platform-scaffold=[font=default-bold][color=#f5cb48]배치 제한: 우주[/color][/font]\n특정 구조물을 우주에 배치할 수 있도록 설계된 기초적인 비계 우주 플랫폼입니다. +se-space-rail=기차가 탈선하여 모든것을 파괴하는 것을 방지하도록 설계되어 우주에서도 안전하게 사용할 수 있는 철도입니다. 따로 우주 플랫폼 없이도 스스로 유지됩니다. 아름다운 외관을 위해 지면에서도 사용할 수 있습니다. +se-spaceship-floor=우주선 바닥은 우주선의 모든 부분에 깔려있어야 하며 바깥쪽 가장자리에는 우주선 격벽이 있어야 합니다. 바닥의 틈새는 우주선 격리를 깨뜨릴 것이며, 이 경우 분리될 수 있습니다. +se-superconductive-cable=능동적인 냉각을 할 필요가 없는 초전도 복합 케이블입니다. +se-tesla-gun=빠른 연쇄 번개 공격을 할 수 있습니다. +se-thruster-suit=우주에서 살아남기 위해 필요한 우주복입니다. \n추진기와 자기 부츠가 있습니다. +se-thruster-suit-2=우주에서 살아남기 위해 필요한 우주복입니다. \n더욱 강력한 추진기와 더욱 넓은 인벤토리 및 장비 그리드를 제공합니다. +se-thruster-suit-3=우주에서 살아남기 위해 필요한 우주복입니다. \n더욱 강력한 추진기와 더욱 넓은 인벤토리 및 장비 그리드를 제공합니다. +se-thruster-suit-4=우주에서 살아남기 위해 필요한 우주복입니다. \n더욱 강력한 추진기와 더욱 넓은 인벤토리 및 장비 그리드를 제공합니다. +space-science-pack=기존 많은 아이템의 업그레이드에 사용됩니다. +se-rocket-science-pack=우주 과학 연구소에서 연구하는 데 사용됩니다. 우주에서 만들어야 합니다. +utility-science-pack=기본 연구소에서 연구하는 데 사용됩니다. +beacon=8개의 모듈 슬롯이 있습니다. 장착된 모듈 효과를 주변 3 타일 내에 있는 아군 건물에 전달합니다. 동일한 건물에 둘 이상의 신호기가 있다면 과부하에 걸려 건물의 작동이 멈추게 됩니다. +se-wide-beacon=15개의 모듈 슬롯이 있습니다. 장착된 모듈 효과를 주변 14 타일 내에 있는 아군 건물에 전달합니다. 동일한 건물에 둘 이상의 신호기가 있다면 과부하에 걸려 건물의 작동이 멈추게 됩니다. +se-wide-beacon-2=20개의 모듈 슬롯이 있습니다. 장착된 모듈 효과를 주변 14 타일 내에 있는 아군 건물에 전달합니다. 동일한 건물에 둘 이상의 신호기가 있다면 과부하에 걸려 건물의 작동이 멈추게 됩니다. +se-lifesupport-equipment-1=생명 지원 효율을 100%만큼 증가시켜줍니다 (합연산). 우주복이 아닌 아머에 삽입하면 효율이 절반으로 줄어들며 우주에서 작동하지 않습니다. +se-lifesupport-equipment-2=생명 지원 효율을 200%만큼 증가시켜줍니다 (합연산). 우주복이 아닌 아머에 삽입하면 효율이 절반으로 줄어들며 우주에서 작동하지 않습니다. +se-lifesupport-equipment-3=생명 지원 효율을 400%만큼 증가시켜줍니다 (합연산). 우주복이 아닌 아머에 삽입하면 효율이 절반으로 줄어들며 우주에서 작동하지 않습니다. +se-lifesupport-equipment-4=생명 지원 효율을 400%만큼 증가시켜줍니다 (합연산). 우주복이 아닌 아머에 삽입하면 효율이 절반으로 줄어들며 우주에서 작동하지 않습니다. +se-delivery-cannon=운송 대포를 이용하여 자원을 정확하게 다른 곳으로 배달할 수 있습니다. +se-delivery-cannon-weapon=무기 운송 대포를 이용하여 특수 탄약을 정확하게 다른 곳으로 배달할 수 있습니다. +se-arcosphere=아코스피어 연구를 통해 얻었으며, 인포매트론을 통해 반환되었습니다. +se-deep-catalogue-1=나퀴움과 나노공학. +se-deep-catalogue-2=초격자 구조와 특이점, 그리고 소멸. +se-deep-catalogue-3=미시 우주 왜곡 및 초차원적 나노공학. +se-deep-catalogue-4=거시 우주 왜곡 및 추가 차원 이동. +se-arcosphere-collector=성간 공허에서 아코스피어를 수집합니다. 소행성 지대에 있는 우주 탐사선 로켓 격납고에서 발사되어야 합니다. 아코스피어는 많이 수집할수록 앞으로 더욱 발견하기가 어려워집니다. +se-star-probe=항성에서 데이터를 수집하고 [img=item/se-star-probe-data] 항성 탐사선 데이터를 제공합니다. 항성 궤도에 있는 우주 탐사선 로켓 격납고에서 발사되어야 합니다. +se-belt-probe=소행성 벨트 근처에서 데이터를 수집하고 [img=item/se-belt-probe-data] 소행성 벨트 탐사선 데이터를 제공합니다. 소행성 벨트에 있는 우주 탐사선 로켓 격납고에서 발사되어야 합니다. +se-void-probe=성간 공허에서 데이터를 수집하고 [img=item/se-void-probe-data] 성간 공허 탐사선 데이터를 제공합니다. 소행성 지대에 있는 우주 탐사선 로켓 격납고에서 발사되어야 합니다. +se-interstellar-data=움직이는 우주선 내 넥서스에서 만들 수 있습니다. 더 크고 빠른 우주선으로 성간 우주공간을 이동할 때 더 빠르게 데이터가 생성됩니다. + +[recipe-name] +core-fragment=심층 파편 처리 (__1__) +rocket-fuel=고체 로켓 연료 +se-astrometric-analysis-multispectral-1=다중분광 천문학 분석 1 +se-astrometric-analysis-multispectral-2=다중분광 천문학 분석 2 +se-astrometric-analysis-multispectral-3=다중분광 천문학 분석 3 +se-astronomic-insight-1=천문학적 통찰 +se-astronomic-insight-2=광범위한 천문학적 통찰 +se-astronomic-insight-3=포괄적인 천문학적 통찰 +se-astronomic-insight-4=확장된 천문학적 통찰 +se-biological-insight-1=생물학적 통찰 +se-biological-insight-2=광범위한 생물학적 통찰 +se-biological-insight-3=포괄적인 생물학적 통찰 +se-biological-insight-4=확장된 생물학적 통찰 +se-bio-methane-to-crude-oil=메탄을 원유로 바이오 처리 +se-bio-sludge-crude-oil=실험적인 바이오매스에서 바이오슬러지 추출 +se-bio-sludge-decontamination=바이오슬러지 오염 제거 +se-bio-sludge-from-fish=물고기에서 바이오슬러지 추출 +se-bio-sludge-from-wood=나무에서 바이오슬러지 추출 +se-bio-sludge-from-vitamelange=비타멜란지에서 바이오슬러지 추출 +se-bio-sludge=바이오매스에서 바이오슬러지 추출 +se-broken-data-scrapping=손상된 데이터 카드 파쇄 +se-cargo-rocket-section-pack=화물 로켓 부품 포장 +se-cargo-rocket-section-unpack=화물 로켓 부품 포장 풀기 +se-condenser-turbine-reclaim-water=물절약 발전 +se-core-fragment-omni=심층 파편 처리 +se-core-mining=심층 채광 +se-empty-antimatter-canister=반물질 용기 추출 +se-empty-barrel-scrapping=빈 배럴 파쇄 +se-empty-barrel-reprocessing=빈 배럴 재처리 +se-space-capsule-scrapping=우주 캡슐 파쇄 +se-cargo-pod-scrapping=화물 포드 파쇄 +se-energy-insight-1=에너지 통찰 +se-energy-insight-2=광범위한 에너지 통찰 +se-energy-insight-3=포괄적인 에너지 통찰 +se-energy-insight-4=확장된 에너지 통찰 +se-formatting-1=데이터 포맷 +se-formatting-2=효율적인 데이터 포맷 +se-formatting-3=진보된 데이터 포맷 +se-formatting-4=심층 데이터 포맷 +se-material-insight-1=물질 통찰 +se-material-insight-2=광범위한 물질 통찰 +se-material-insight-3=포괄적인 물질 통찰 +se-material-insight-4=확장된 물질 통찰 +se-matter-fusion-copper=물질 융합 (구리 광석) +se-matter-fusion-dirty=물질 융합 (고철) +se-matter-fusion-iron=물질 융합 (철 광석) +se-matter-fusion-stone=물질 융합 (돌) +se-matter-fusion-uranium=물질 융합 (우라늄 광석) +se-matter-fusion-to=물질 융합 (__1__) +se-orbital-data=궤도 계산 데이터 +se-plasma-canister-empty=빈 플라즈마 용기 +se-pulverised-sand=분쇄된 모래 +se-radiating-space-coolant-fast=열유체를 -10°C로 빠르게 냉각 (냉각) +se-radiating-space-coolant-normal=열유체를 -10°C로 냉각 (냉각) +se-radiating-space-coolant-slow=열유체를 -10°C로 효율적으로 냉각 (냉각) +se-mixed-methane-gas-separation=혼합된 메탄 가스 분리 +se-rocket-fuel-from-water-copper=물로부터 로켓 연료 생산 +se-scrap-decontamination=고철 정화 +se-scrap-recycling=고철 재활용 +se-space-coolant-cold=열유체를 -100°C로 초냉각 (냉각) +se-space-coolant-supercooled=열유체를 -273°C로 초냉각 (초냉각) +se-space-coolant-supercooled-cryonite=열유체를 -273°C로 크라이오냉각 (초냉각) +se-space-coolant-cold-cryonite=열유체를 -100°C로 크라이오냉각 (냉각) +se-space-coolant-supercoole-cryonite=열유체를 -273°C로 크라이오냉각 (초냉각) +se-simulation-a=천문학 모의실험 +se-simulation-ab=배종발달설 모의실험 +se-simulation-abm=외계기원설 모의실험 +se-simulation-am=물질분포 모의실험 +se-simulation-as=천체입자 모의실험 +se-simulation-asb=천문생체공학 모의실험 +se-simulation-asbm=범우주 모의실험 +se-simulation-asm=천체물리학 모의실험 +se-simulation-b=생물학 모의실험 +se-simulation-bm=생체역학 모의실험 +se-simulation-m=물질 모의실험 +se-simulation-s=에너지 모의실험 +se-simulation-sb=생화학 모의실험 +se-simulation-sbm=나노기기 모의실험 +se-simulation-sm=나노소재 모의실험 +se-space-water-decontamination=우주 물 정화 +se-spaceship-rocket-engine-burn=액체 로켓 연료 연소 +se-specimen-fish=극미중력 어류 성장 +se-specimen-wood=극미중력 목재 성장 +se-thermodynamics-coal=석탄 압력 가압 +se-used-lifesupport-canister-cleaning=생명 지원 용기 청소 +se-used-lifesupport-canister-cleaning-space=생명 지원 용기 정화 +space-science-pack=최적화 과학 팩 +se-rocket-science-pack=로켓 과학 팩 +se-big-turbine-internal=초고온 증기 감압 +se-arcosphere-fracture=아코스피어 분극 +se-arcosphere-fold-in=아코스피어 전도 +se-arcosphere-fold-out=아코스피어 전도 +se-arcosphere-folding=아코스피어 접기: __1__ __2__ -> __3__ __4__ +se-electric-boiling-void=증발 배출 +se-space-probe-rocket-deployed=우주 탐사선 로켓 (전개됨) +se-distortion-drive=왜곡 드라이브 +se-generic-scrapping=__1__ 분쇄 +se-generic-recycling=__1__ 재활용 + +[recipe-description] +se-astronomic-insight-2=더욱 복잡하지만, 그만큼 더욱 자원 효율적입니다. +se-astronomic-insight-3=더욱 복잡하지만, 그만큼 더욱 자원 효율적입니다. +se-astronomic-insight-4=더욱 복잡하지만, 그만큼 더욱 자원 효율적입니다. +se-biological-insight-2=더욱 복잡하지만, 그만큼 더욱 자원 효율적입니다. +se-biological-insight-3=더욱 복잡하지만, 그만큼 더욱 자원 효율적입니다. +se-biological-insight-4=더욱 복잡하지만, 그만큼 더욱 자원 효율적입니다. +se-core-mining=얻을 수 있는 실제 파편의 수는 행성에 따라 다릅니다. 실제 필요 시간은 행성이나 위성의 심층 채광 드릴의 수에 따라 다릅니다. +se-energy-insight-2=더욱 복잡하지만, 그만큼 더욱 자원 효율적입니다. +se-energy-insight-3=더욱 복잡하지만, 그만큼 더욱 자원 효율적입니다. +se-energy-insight-4=더욱 복잡하지만, 그만큼 더욱 자원 효율적입니다. +se-material-insight-2=더욱 복잡하지만, 그만큼 더욱 자원 효율적입니다. +se-material-insight-3=더욱 복잡하지만, 그만큼 더욱 자원 효율적입니다. +se-material-insight-4=더욱 복잡하지만, 그만큼 더욱 자원 효율적입니다. +se-radiating-space-coolant-normal=반복적인 열 유체의 냉각과 가열은 열 유체의 손실을 유발합니다. +se-radiating-space-coolant-slow=반복적인 열 유체의 냉각과 가열은 열 유체의 손실을 유발합니다, 느린 냉각은 손실을 낮춥니다. +se-radiating-space-coolant-fast=반복적인 열 유체의 냉각과 가열은 열 유체의 손실을 유발합니다, 빠른 냉각은 손실을 높입니다. +se-delivery-cannon-weapon-pack-se-iridium-piledriver=작은 영역에서 막대한 물리 피해를 입히고 충격파로 2차 폭발 피해를 입힙니다. +se-arcosphere-fracture=아코스피어는 [img=item/se-arcosphere-collector] 아코스피어 수집기로 수집할 수 있습니다. +se-distortion-drive=넥서스 왜곡 기능을 활성화하고 게임에서 승리하려면 이 프로세스가 활발히 진행되어야 합니다. 임계 속도에서 8 GW를 사용합니다. + +[technology-name] +effectivity-module-4=효율 모듈 4 +effectivity-module-5=효율 모듈 5 +effectivity-module-6=효율 모듈 6 +effectivity-module-7=효율 모듈 7 +effectivity-module-8=효율 모듈 8 +effectivity-module-9=효율 모듈 9 +energy-shield-equipment=에너지 보호막 +energy-shield-mk2-equipment=에너지 보호막 MK2 +energy-shield-mk3-equipment=에너지 보호막 MK3 +energy-shield-mk4-equipment=에너지 보호막 MK4 +energy-shield-mk5-equipment=에너지 보호막 MK5 +energy-shield-mk6-equipment=에너지 보호막 MK6 +sand-processing=모래 공정 +glass-processing=유리 공정 +liquid-rocket-fuel=액체 로켓 연료 +productivity-module-4=생산 모듈 4 +productivity-module-5=생산 모듈 5 +productivity-module-6=생산 모듈 6 +productivity-module-7=생산 모듈 7 +productivity-module-8=생산 모듈 8 +productivity-module-9=생산 모듈 9 +rocket-silo=위성 로켓 격납고 +rocketry=전투 로켓 공학 +se-adaptive-armour=적응형 아머 +se-antimatter-engine=반물질 엔진 +se-antimatter-reactor=반물질 원자로 +se-antimatter-production=반물질 생산 +se-astronomic-science-pack=천문학 과학 팩 +se-biological-science-pack=생물학 과학 팩 +se-condenser-turbine=콘덴서 터빈 +se-core-miner=심층 채광 +se-biogun=바이오건 +se-cryogun=크라이오건 +se-deep-space-science-pack=심우주 과학 팩 +se-deep-catalogue=심우주 카탈로그 +se-dimensional-anchor=차원 정박기 +se-electric-boiler=전기 보일러 +se-energy-science-pack=에너지 과학 팩 +se-fluid-burner-generator=유체 등온 발전기 +se-fuel-refining=연료 정제 +se-heat-shielding=단열재 +se-long-range-star-mapping=장거리 우주 지도 제작 +se-material-science-pack=물질 과학 팩 +se-medpack=구급팩 +se-medpack-2=구급팩 2 +se-medpack-3=구급팩 3 +se-medpack-4=구급팩 4 +se-meteor-defence=운석 방어 장치 +se-meteor-point-defence=운석 국지방어 장치 +se-nanomaterial=나노소재 +se-plague=역병 +se-processing-beryllium=베릴륨 가공 +se-processing-cryonite=크라이오나이트 가공 +se-processing-holmium=홀뮴 가공 +se-processing-iridium=이리듐 가공 +se-processing-naquium=나퀴움 가공 +se-processing-vitamelange=비타멜란지 가공 +se-processing-vulcanite=불카나이트 가공 +se-pulveriser=분쇄기 +se-railgun=레일건 +se-rocket-cargo-safety=로켓 화물 안정성 +se-rocket-fuel-from-water=물에서 로켓 연료 제작 +se-rocket-launch-pad=화물 로켓 격납고 +se-rocket-landing-pad=로켓 착륙 패드 +se-rocket-reusability=로켓 재사용성 +se-rocket-survivability=로켓 생존성 +se-rtg-equipment=휴대용 RTG +se-rtg-equipment-2=휴대용 RTG MK2 +se-space-assembling=우주 조립 +se-space-accumulator=홀뮴 축전지 +se-space-accumulator-2=나퀴움 축전지 +se-space-astrometrics-laboratory=천문학 실험실 +se-space-biochemical-laboratory=생화학 실험실 +se-space-catalogue-astronomic=천문학 카탈로그 +se-space-catalogue-biological=생물학 카탈로그 +se-space-catalogue-universal=범우주 카탈로그 +se-space-catalogue-energy=에너지 카탈로그 +se-space-catalogue-material=물질 카탈로그 +se-space-data-card=데이터 카드 +se-space-decontamination-facility=오염 제거 시설 +se-space-electromagnetics-laboratory=전자기학 실험실 +se-space-genetics-laboratory=유전학 실험실 +se-space-gravimetrics-laboratory=중력학 실험실 +se-space-growth-facility=성장 시설 +se-space-hypercooling=초냉각 +se-space-laser-laboratory=레이저 실험실 +se-lifesupport-facility=생명 지원 시설 +se-space-manufactory=우주 제조기 +se-space-material-fabricator=소재 제작기 +se-space-matter-fusion=물질 융합 +se-space-mechanical-laboratory=기계학 실험실 +se-space-particle-accelerator=입자 가속기 +se-space-particle-collider=입자 충돌기 +se-space-plasma-generator=플라즈마 생성기 +se-space-platform-plating=도금 우주 플랫폼 +se-space-platform-scaffold=우주 플랫폼 비계 +se-space-radiation-laboratory=방사선 실험실 +se-space-radiating-efficiency=효율적인 방열 +se-space-radiating-speed=빠른 방열 +se-space-radiator=방열기 +se-space-radiator-2=방열기 2 +se-space-rail=우주 철도 +se-recycling-facility=재활용 시설 +se-space-science-lab=우주 과학 연구소 +se-space-simulation-ab=배종발달설 모의실험 +se-space-simulation-am=천체물질 모의실험 +se-space-simulation-as=천체입자 모의실험 +se-space-simulation-bm=생체역학 모의실험 +se-space-simulation-sb=생화학 모의실험 +se-space-simulation-sm=나노소재 모의실험 +se-space-simulation-abm=외계기원설 모의실험 +se-space-simulation-asb=천문생체공학 모의실험 +se-space-simulation-asm=천체물리학 모의실험 +se-space-simulation-sbm=나노기기 모의실험 +se-space-simulation-asbm=범우주 모의실험 +se-space-solar-panel=평면 태양 전지판 +se-space-spectrometry-facility=분광 시설 +se-space-supercomputer=슈퍼 컴퓨터 +se-space-telescope=망원경 +se-space-telescope-gammaray=감마선 망원경 +se-space-telescope-xray=X선 망원경 +se-space-telescope-microwave=마이크로파 망원경 +se-space-telescope-radio=전파 망원경 +se-space-thermodynamics-laboratory=열역학 실험실 +se-spaceship=우주선 +se-spaceship-integrity=우주선 구조 강도 +se-factory-spaceship=우주선 공장화 +se-superconductive-cable=초전도 케이블 +se-teleportation=순간이동 +se-tesla-gun=테슬라 건 +se-thruster-suit=우주복 +space-science-pack=과학팩 최적화 +se-rocket-science-pack=로켓 과학 팩 +speed-module-4=속도 모듈 4 +speed-module-5=속도 모듈 5 +speed-module-6=속도 모듈 6 +speed-module-7=속도 모듈 7 +speed-module-8=속도 모듈 8 +speed-module-9=속도 모듈 9 +se-aeroframe-pole=에어로프레임 막대 +se-aeroframe-scaffold=에어로프레임 비계 +se-aeroframe-bulkhead=에어로프레임 격벽 +se-lattice-pressure-vessel=격자 압력 용기 +se-heavy-girder=고중량 거더 +se-heavy-bearing=고중량 베어링 +se-heavy-composite=고중량 복합재 +se-heavy-assembly=고중량 조립체 +se-bioscrubber=바이오 스크러버 +se-vitalic-epoxy=비탈릭 에폭시 +se-vitalic-reagent=비탈릭 시약 +se-vitalic-acid=비탈릭 산 +se-self-sealing-gel=자가 밀봉 젤 +se-holmium-cable=홀뮴 케이블 +se-holmium-solenoid=홀뮴 솔레노이드 +se-quantum-processor=양자 처리 장치 +se-dynamic-emitter=역동 방출기 +se-naquium-processor=나퀴움 처리 장치 +se-naquium-cube=나퀴움 큐브 +se-naquium-tessaract=나퀴움 테서랙트 +se-wide-beacon=광역 신호기 +se-wide-beacon-2=광역 신호기 2 +se-lifesupport-equipment=생명 유지 장비 +se-lifesupport-equipment-1=생명 유지 장비 MK1 +se-lifesupport-equipment-2=생명 유지 장비 MK2 +se-lifesupport-equipment-3=생명 유지 장비 MK3 +se-lifesupport-equipment-4=생명 유지 장비 MK4 +se-supercharger=초고속 충전기 +se-addon-power-pole=부속 전신주 +se-pylon=송전탑 +se-pylon-substation=변전 송전탑 +se-pylon-construction=건설 송전탑 +se-pylon-construction-radar=레이더 건설 송전탑 +se-shield-projector=보호막 프로젝터 +se-deep-space-transport-belt=심우주 운송 벨트 +se-big-turbine=초고온 터빈 발전기 +se-big-heat-exchanger=초고온 열교환기 +se-zone-discovery-random=구역 탐색 +se-zone-discovery-targeted=대상중점 구역 탐색 +se-zone-discovery-deep=심우주 구역 탐색 +se-delivery-cannon=배달 대포 +se-delivery-cannon-weapon=무기 배달 대포 +se-spaceship-clamps=우주선 도킹 클램프 +se-bio-upgrade-constitution=생체 강화: 체질 +se-bio-upgrade-strength=생체 강화: 근력 +se-bio-upgrade-agility=생체 강화: 민첩 +se-bio-upgrade-dexterity=생체 강화: 손재주 +se-bio-upgrade-intelligence=생체 강화: 지능 +se-energy-beaming=에너지 빔 +se-energy-beam-defence=우산: 에너지 빔 방어 시설 +se-nexus=넥서스 +se-spaceship-victory=우주선 승리 +se-arcosphere=아코스피어 수집 +se-arcosphere-folding=아코스피어 접기 +se-space-probe=우주 탐사선 로켓 격납고 +se-linked-container=아코링크 보관함 +k2-conversion=__1__ 변환 + +[technology-description] +energy-shield-equipment=빠르게 충전되지만 많은 에너지를 사용하는 보호막입니다. +energy-shield-mk2-equipment=빠르게 충전되지만 많은 에너지를 사용하는 보호막입니다. +energy-shield-mk3-equipment=빠르게 충전되지만 많은 에너지를 사용하는 보호막입니다. +energy-shield-mk4-equipment=빠르게 충전되지만 많은 에너지를 사용하는 보호막입니다. +energy-shield-mk5-equipment=빠르게 충전되지만 많은 에너지를 사용하는 보호막입니다. +energy-shield-mk6-equipment=빠르게 충전되지만 많은 에너지를 사용하는 보호막입니다. +sand-processing=원료를 부수고 자르고 여과하여 깨끗한 모래로 만듭니다. +glass-processing=모래를 녹여 유리를 만듭니다. +rocket-silo=새로운 천체를 발견하기 위해 위성을 궤도로 발사할 수 있습니다. +se-adaptive-armour=에너지를 사용하여 스스로를 수리하는 아머입니다. 에너지 보호막과 유사하지만 에너지 소모량은 낮고 재생 속도는 훨씬 느립니다. +se-antimatter-engine=반물질 소멸을 통해 생겨나는 에너지로 놀라운 추진력을 얻습니다. +se-antimatter-reactor=물질과 반물질끼리 쌍소멸을 일으켜 놀라운 수준의 열을 발생시킵니다. +se-antimatter-production=밀도가 가장 높은 형태의 에너지인 반물질을 만듭니다. +se-astronomic-science-pack=우주 여행 및 성간 물류와 연관된 기술을 연구할 수 있습니다. +se-biological-science-pack=신체 능력이나 생체 무기, 신경 처리 개선과 관련된 기술을 연구할 수 있습니다. +se-condenser-turbine=75%의 에너지 효율을 지녔지만 사용된 증기의 99%가 다시 물로 반환되는 증기 터빈입니다. 온도 범위는 100도 ~ 999도 입니다. \n최대 출력량: 10MW +se-core-miner=행성과 위성에서 끊임없이 자원을 추출할 수 있지만, 같은 표면에서 여러 대를 배치하면 채취 효율이 낮아집니다. +se-biogun=다양한 바이오 무기를 사용할 수 있는 총입니다. +se-cryogun=적을 얼릴 수 있는 얼음 벽을 만듭니다. +se-deep-catalogue=컴퓨터 시뮬레이션과 분석을 위해 공간 왜곡, 외계 물질, 구조화된 나노 기술 데이터를 준비합니다. 진보된 기술 발전에 필요합니다. +se-deep-space-science-pack=여러 최첨단 기술에 필요합니다. +se-dimensional-anchor=항성의 중력과 공간 이상을 위한 안정화 지점을 사용합니다. +se-electric-boiler=전기 에너지를 사용하여 물을 증기로 만듭니다. 에너지 효율은 90%입니다. +se-energy-science-pack=기본 힘 및 아원자 발견과 관련된 기술을 연구할 수 있습니다. +se-fluid-burner-generator=전기를 생산하기 위해 에너지를 가진 액체 연료 (대표적으로 액체 로켓 연료)를 연소합니다. 단순하고 작지만 보다 큰 증기 기반 발전 시스템에 비하면 효율이 낮습니다. 우주를 위해 설계되었습니다. 실제 유체 소비량은 유체의 연료 값에 따라 다릅니다. +se-fuel-refining=보다 발전된 연료를 정제합니다. +se-heat-shielding=고온 응용과 우주 구조물에 사용되는 복합 패널입니다. +se-long-range-star-mapping=일부 머나먼 곳에 있는 은하는 특이한 항성의 특정 패턴을 통해 식별할 수 있습니다. 결과 내용은 [img=virtual-signal/informatron] 인포매트론 [__CONTROL__informatron__] 에 기록됩니다. +se-material-science-pack=고급 공학 요구 사항을 중촉시키기 위한 고급 물질과 관련된 기술을 연구할 수 있습니다. +se-medpack=구급팩을 사용하여 체력을 회복합니다. +se-medpack-2=구급팩을 사용하여 체력을 회복합니다. +se-medpack-3=구급팩을 사용하여 체력을 회복합니다. +se-medpack-4=구급팩을 사용하여 체력을 회복합니다. +se-meteor-defence=당신이 이뤄낸 공장을 파괴하려는 운석들이 내려앉기 전에 쏴서 없애버리세요. 운석 방어 장치는 행성 전역에 떨어지는 운석을 없앨 수 있지만, 한 번에 하나의 운석만 요격할 수 있습니다. +se-meteor-point-defence=당신이 이뤄낸 공장을 파괴하려는 운석들이 내려앉기 전에 쏴서 없애버리세요. 운석 국지방어 장치는 작은 영역에 떨어지는 운석을 한 번에 4개까지 요격할 수 있습니다 +se-nanomaterial=우수한 특성을 가진 복합재를 만들기 위해 나노 크기로 구성된 다양한 소재의 복잡한 배열입니다. +se-railgun=전자기력으로 가속된 다트는 증발하기 직전 플라즈마 흔적을 남길 정도의 속도로 추진됩니다. 높은 피해량, 느린 발사 속도를 지녔습니다. +se-plague=모든 생명체를 행성에서 멸절시킬 수 있는 대전염병입니다. "매우 주의해서" 다뤄야 합니다. +se-processing-beryllium=녹주석을 매우 가볍고 강력하며 훌륭한 내식성과 방사선 차폐 기능을 지닌 베릴륨으로 만듭니다. 또한 X선과도 거의 반응하지 않습니다. +se-processing-cryonite=차가운 크라이오나이트 결정을 냉동과 냉각, 그리고 윤활제로 활용될 수 있는 크라이오나이트 막대로 만듭니다. 크라이오나이트는 주로 냉대 행성에서 발견됩니다. +se-processing-holmium=홀미나이트를 어떤 원소보다도 높은 투자율을 가진 희토류 금속인 홀뮴으로 만듭니다. +se-processing-iridium=이리다이트를 고온에서 내식성이 가장 강력한 금속이자 매우 높은 밀도를 자랑하는 이리듐으로 만듭니다. 고중량 응용 작업에 중요합니다. +se-processing-naquium=신비롭고 아름다운 깊은 우주 공간에 존재하는 나퀴움 결정을 비정상적인 시공간 상호 작용을 하는 금속과 유사한 물질인 나퀴움으로 만듭니다. +se-processing-vitamelange=원시의 비타멜란지인 바위해면을 귀중한 영양 추출물로 만듭니다. +se-processing-vulcanite=화산 지대에서 발견되는 불카나이트를 고급 제련과 로켓 연료 및 다양한 고온 화학 공정에서 사용할 수 있는 정제된 가루로 만듭니다. 불카나이트는 화산 환경의 행성과 대부분의 심층 파편 속에서 발견됩니다. +se-pulveriser=매우 단단한 광물과 행성의 중심에서 끌어올린 심층 파편을 부수고 자릅니다. +se-rocket-cargo-safety=화물 포드가 운송 중에 손상될 가능성을 10% 감소시킵니다 (곱연산). +se-rocket-fuel-from-water=물을 전기 분해하여 수소-산소 로켓 연료를 생산합니다. +se-rocket-landing-pad=로켓 화물 포드를 지정된 착륙 패드로 전달할 수 있습니다. 추가 연구를 통해 로켓 부품의 일부를 회수할 수도 있습니다. +se-rocket-launch-pad=우주나 다른 행성으로 화물을 발사할 수 있습니다. +se-rocket-reusability=착륙 패드에 성공적으로 착륙하였을 때 회수할 수 있는 로켓 부품의 비율을 4% 증가시킵니다 (기본 20%, 최대 100%). +se-rocket-survivability=로켓이 이동 중에 손상되거나 항법 고장으로 인해 착륙을 실패할 가능성을 10% 줄입니다 (곱연산). +se-rtg-equipment=방사성 붕괴로 생기는 열 에너지를 전기 에너지로 변환하는 휴대용 방사성동위원소 열전기 발전기입니다. 추가 연료 없이 수십 년간 지속됩니다. +se-rtg-equipment-2=방사성 붕괴로 생기는 열 에너지를 전기 에너지로 변환하는 개선된 휴대용 방사성동위원소 열전발전기입니다. 추가 연료 없이 수십 년간 지속됩니다. +se-space-assembling=우주에서 작동하도록 설계된 조립 기계입니다. +se-space-astrometrics-laboratory=다양한 천문학 정보를 결합, 비교하고 정량화합니다. +se-space-biochemical-laboratory=전문적인 생화학 연구 및 실험을 할 수 있는 고급 화학 실험실입니다. 또한 기초적인 화학과 원유 처리를 수행할 수 있습니다. +se-space-catalogue-astronomic=분석과 컴퓨터 시뮬레이션을 위해 갖추어진 구조화된 천문학 데이터입니다. 추가적인 천문학 연구에 필요합니다. +se-space-catalogue-biological=분석과 컴퓨터 시뮬레이션을 위해 갖추어진 구조화된 생물학 데이터입니다. 추가적인 생물학 연구에 필요합니다. +se-space-catalogue-universal=분석과 컴퓨터 시뮬레이션을 위해 갖추어진 결합된 데이터입니다. 추가적인 심우주 연구에 필요합니다. +se-space-catalogue-energy=분석과 컴퓨터 시뮬레이션을 위해 갖추어진 구조화된 에너지 데이터입니다. 추가적인 에너지 연구에 필요합니다. +se-space-catalogue-material=분석과 컴퓨터 시뮬레이션을 위해 갖추어진 구조화된 물질 데이터입니다. 추가적인 물질 연구에 필요합니다. +se-space-data-card=다목적 데이터 저장 장치입니다. 고급 데이터 기반 연구에 필요합니다. +se-space-decontamination-facility=무균 환경에서 사용하기 위해 물질을 세척하고 저압의 조건에서도 사용할 수 있는 액체를 준비합니다. +se-space-electromagnetics-laboratory=강한 자기장과 매우 높은 전압을 적용하기 위한 장비입니다. +se-space-genetics-laboratory=유전자 배열과 변형, 그리고 문화 유전자 인쇄를 전담하는 실험실입니다. +se-space-gravimetrics-laboratory=중력 교란을 분석하고 시뮬레이션합니다. +se-space-growth-facility=다른 환경에서는 불가능한 미세 중력과 같은 다양한 제어 가능 조건에서 생물학적 표본을 성장시킵니다. +se-space-hypercooling=열유체의 열 교환을 수행하여 하나는 뜨겁고 다른 하나는 차갑게 만듭니다. +se-space-laser-laboratory=레이저를 이용한 실험을 진행합니다. 눈 보호 장비를 잊지 마세요! +se-lifesupport-facility=더욱 적대적인 환경에서 생명을 보호하고 지원해 줍니다. +se-space-manufactory=우주 대량 생산을 위한 핵심 기술입니다. +se-space-material-fabricator=새로운 소재를 합성합니다. 입자 충돌기와 3D 프린터의 중간 단계입니다. +se-space-matter-fusion=융합을 통해 다른 물질로 제작합니다. +se-space-mechanical-laboratory=부수고, 자르고, 깎고, 흔드는 등 다양한 기계적 공정을 지원합니다. +se-space-particle-accelerator=빛의 속도에 가까운 속도로 입자를 가속화합니다. +se-space-particle-collider=고속 입자를 충돌시키고 결과를 분석합니다. +se-space-plasma-generator=다양한 플라즈마를 생성합니다. +se-space-platform-plating=견고하게 도금된 우주 플랫폼입니다. 더욱 부드럽고 빠르게 이동할 수 있습니다. +se-space-platform-scaffold=기초적인 비계 우주 플랫폼입니다. 건물을 세울 수는 있지만, 걷기에는 좋지 않습니다. +se-space-radiation-laboratory=방사성 물질을 가지고 놀기에 비교적 안전한 곳입니다. 일반 우라늄 처리에도 사용할 수 있습니다. +se-space-radiator=뜨거운 열유체의 열을 방출시킵니다. +se-space-radiator-2=뜨거운 열유체의 열을 방출시킵니다. +se-space-radiating=뜨거운 열유체의 열을 느리게, 자원 효율적으로 냉각시킵니다. +se-space-rail=기차가 탈선하여 모든것을 파괴하는 것을 방지하도록 설계되어 우주에서도 안전하게 사용할 수 있는 철도입니다. 아름다운 외관을 위해 지면에서도 사용할 수 있습니다. +se-recycling-facility=아이템을 분쇄하고 고철을 원자재로 재처리합니다. +se-space-science-lab=로켓 과학 팩과 고급 우주 과학 연구를 할 수 있습니다. +se-space-simulation-ab=여러 분야를 결합하여 보다 효율적인 모의실험을 진행할 수 있습니다. +se-space-simulation-am=여러 분야를 결합하여 보다 효율적인 모의실험을 진행할 수 있습니다. +se-space-simulation-as=여러 분야를 결합하여 보다 효율적인 모의실험을 진행할 수 있습니다. +se-space-simulation-bm=여러 분야를 결합하여 보다 효율적인 모의실험을 진행할 수 있습니다. +se-space-simulation-sb=여러 분야를 결합하여 보다 효율적인 모의실험을 진행할 수 있습니다. +se-space-simulation-sm=여러 분야를 결합하여 보다 효율적인 모의실험을 진행할 수 있습니다. +se-space-simulation-abm=여러 분야를 결합하여 보다 효율적인 모의실험을 진행할 수 있습니다. +se-space-simulation-asb=여러 분야를 결합하여 보다 효율적인 모의실험을 진행할 수 있습니다. +se-space-simulation-asm=여러 분야를 결합하여 보다 효율적인 모의실험을 진행할 수 있습니다. +se-space-simulation-sbm=여러 분야를 결합하여 보다 효율적인 모의실험을 진행할 수 있습니다. +se-space-simulation-asbm=여러 분야를 결합하여 보다 효율적인 모의실험을 진행할 수 있습니다. +se-space-solar-panel=위를 걸어 다닐 수 있는 효율 높은 태양 전지판입니다 +se-space-spectrometry-facility=분광 광도법, 가스 색층 분석법, 질량 분석법, 그리고 그 외 다양한 분광법을 다룹니다. 벽을 향해 빛을 쏴보고, 반사시키고, 부딫히는 위치를 확인해보세요. +se-space-supercomputer=고급 데이터 조작과 처리 및 시뮬레이션을 할 수 있습니다. +se-space-telescope=가시 스펙트럼 주변의 여러 파장에 민감하도록 정교하게 설계된 망원경입니다. +se-space-telescope-gammaray=감마선은 굴절되지 않습니다. 이 강력한 망원경은 거울과 특수 감지기를 이용하여 감마선을 감지해냅니다. +se-space-telescope-xray=X선은 대부분 대기에 의해 차단됩니다. 이 강력한 망원경은 대기 문제가 거의 없는 우주에서 작동하도록 설계되었습니다. +se-space-telescope-microwave=마이크로파와 우주배경복사를 감지하는 거대한 망원경입니다. +se-space-telescope-radio=머나먼 곳으로부터 감지되는 극도로 미세한 수준의 전파를 감지하는 거대한 망원경입니다. +se-space-thermodynamics-laboratory=극한의 온도와 관련된 작업을 처리합니다. 제련과 같은 기초적인 열 공정도 처리할 수 있습니다. +se-spaceship=바닥과 격벽으로 하나의 형태를 만들고 계기판을 통해 다른 행성이나 그 너머로 날아갈 수 있는 우주선입니다. +se-spaceship-integrity=매 레벨마다 우주선의 구조 무결성 강도 한계를 100만큼 증가시킵니다. +se-factory-spaceship=매 레벨마다 우주선의 구조 무결성 강도 한계를 500만큼 증가시킵니다. +se-superconductive-cable=능동적인 냉각을 할 필요가 없는 초전도 복합 케이블입니다. +se-teleportation=순간이동 기술을 잠금 해제합니다. 이정도로 안정적인 공간 왜곡 기술을 구현하는 것은 매우 어려운 일입니다. +se-tesla-gun=아주 빠르게 나아가는 연쇄 번개 공격을 할 수 있는 무기입니다. 연쇄 번개는 목표물 사이를 최대 30번 튕기며, 근처 목표물이 없다면 표면을 따라 빠르게 이동합니다. +se-thruster-suit=추진기와 자기 부츠가 있는 우주복입니다. 우주복 없이 우주로 나가지 마세요. +se-thruster-suit-2=더 강력한 추진기와 넓은 인벤토리 및 장비 슬롯을 갖춘 개선된 우주복입니다. +se-thruster-suit-3=더 강력한 추진기와 넓은 인벤토리 및 장비 슬롯을 갖춘 개선된 우주복입니다. +se-thruster-suit-4=더 강력한 추진기와 넓은 인벤토리 및 장비 슬롯을 갖춘 개선된 우주복입니다. +space-science-pack=이러한 발전의 혜택을 받아 로켓 과학 팩과 기술들을 보다 직접적으로 개발할 수 있게 됩니다. +se-aeroframe-pole=항공 및 우주 탐사를 위한 빔으로 일반적으로 사용되는 강력하고 가벼운 베릴륨 빔입니다. +se-aeroframe-scaffold=항공 및 우주 탐사선을 위한 주요 내부 프레임으로 일반적으로 사용되는 강력하고 가벼운 베릴륨 구조 프레임입니다. +se-aeroframe-bulkhead=항공 및 우주 탐사선의 외부 격벽 또는 2차 격실 벽으로 사용되는 강력하고 가벼운 베릴륨 격벽입니다. +se-lattice-pressure-vessel=내부 격자가 있는 강력한 경량 베릴륨 압력 용기로 특정 유체를 정상적인 한계 이상으로 압축할 수 있습니다. 파열되더라도 가압된 유체가 안전하게 배출됩니다. +se-heavy-girder=주로 중공업 및 군용 함선에 사용되는 고중량 이리듐 구조 빔입니다. +se-heavy-bearing=적은 물질을 부수는 한에서 끊임없이 사용할 수 있는 큰 크기의 고중량 이리듐 베어링입니다. +se-heavy-composite=열, 내식, 방사선 차폐는 물론 역학적 힘에도 영향을 거의 받지 않으면서도 믿겨지지 않을 만큼 무거운, 웬만해서는 뚫을 수 없을 정도로 아주 두꺼운 격벽입니다. +se-heavy-assembly=중공업에 사용되는 장치 및 구성 가능한 요소로 이루어진 고중량 조립체입니다. +se-bioscrubber=생물학적 공정을 사용하여 원하지 않는 물질을 분해하는 물질 처리실입니다. +se-vitalic-epoxy=재생 능력을 지녀 믿기지 않을 만큼 강력한 생체 에폭시입니다. +se-vitalic-reagent=광범위한 화학 반응을 도출해내기 위한 효율적인 다목적 시약입니다. +se-vitalic-acid=다양한 산성 물질의 강력한 혼합물입니다. +se-self-sealing-gel=압력을 받으면 젤로 변하지만 진공에 노출되면 강철처럼 단단해집니다. 종종 구멍난 부분을 직접 밀봉하기 위해 격벽의 내부 필름으로도 사용됩니다. +se-holmium-cable=민감한 전자 장치를 방해할 수 있는 선에서 원하지 않는 노이즈를 제거하도록 특별히 설계된 피복 케이블입니다. +se-holmium-solenoid=매우 강력한 전자석입니다. +se-quantum-processor=중첩과 얽힘을 이용하여 복잡한 문제를 보다 효율적으로 처리합니다. +se-dynamic-emitter=더욱 넓은 범위나 스캐닝 모드, 또는 물질 침투 특성에 대한 여러 특성을 변경할 수 있고 빠르게 조정할 수 있는 광자/입자 방출 시스템입니다. +se-naquium-cube=나퀴움의 시공간과의 비정상적인 상호 작용을 활용하여 큰 것을 작은 큐브로 접습니다. +se-naquium-tessaract=입방체와 같은 모양으로 자리 잡혀있지만 다른 기하학적인 도형으로 변화하는 이 특이한 물체는 계속 회전하거나 가속됩니다. +se-naquium-processor=나퀴움 테서랙트 내의 계산은 계산 밀도에 대한 일반적인 제한을 웃돕니다. +effect-transmission=신호기는 모듈의 효과를 주변 3타일 이내에 있는 아군 개체로 전달합니다. 8개의 모듈 슬롯이 있습니다. 동일한 건물에 둘 이상의 신호기가 있다면 과부하에 걸려 건물의 작동이 멈추게 됩니다. +se-wide-beacon=광역 신호기는 모듈의 효과를 주변 14타일 이내에 있는 아군 개체로 전달합니다. 15개의 모듈 슬롯이 있으며 업그레이드를 통해 20개를 사용할 수 있습니다. 동일한 건물에 둘 이상의 신호기가 있다면 과부하에 걸려 건물의 작동이 멈추게 됩니다. +se-wide-beacon-2=광역 신호기는 모듈의 효과를 주변 14타일 이내에 있는 아군 개체로 전달합니다. 20개의 모듈 슬롯이 있습니다. 동일한 건물에 둘 이상의 신호기가 있다면 과부하에 걸려 건물의 작동이 멈추게 됩니다. +se-lifesupport-equipment-1=생명 지원 효율을 100%만큼 증가시켜줍니다 (합연산). 우주복이 아닌 아머에 삽입하면 효율이 절반으로 줄어들며 우주에서 작동하지 않습니다. +se-lifesupport-equipment-2=생명 지원 효율을 200%만큼 증가시켜줍니다 (합연산). 우주복이 아닌 아머에 삽입하면 효율이 절반으로 줄어들며 우주에서 작동하지 않습니다. +se-lifesupport-equipment-3=생명 지원 효율을 400%만큼 증가시켜줍니다 (합연산). 우주복이 아닌 아머에 삽입하면 효율이 절반으로 줄어들며 우주에서 작동하지 않습니다. +se-lifesupport-equipment-4=생명 지원 효율을 800%만큼 증가시켜줍니다 (합연산). 우주복이 아닌 아머에 삽입하면 효율이 절반으로 줄어들며 우주에서 작동하지 않습니다. +se-supercharger=한 번에 최대 64개의 로봇을 고속으로 충전할 수 있습니다. 충전기의 최대 전력 소모는 1GW입니다. +se-pylon=전기 에너지를 배분합니다. 64 타일까지 연결됩니다. +se-pylon-substation=전기 에너지를 배분합니다. 64 타일까지 연결되고 64x64 영역에 전력을 공급합니다. +se-pylon-construction=전기 에너지를 배분하고 건설 영역을 제공합니다. 64 타일까지 연결되고 64x64 영역에 건설 영역을 공급합니다. +se-pylon-construction-radar=전기 에너지를 배분하고 건설 영역을 제공하며 레이더처럼 주변을 밝혀줍니다. 64 타일까지 연결되고 256x256 영역에 건설 영역 제공 및 구역을 밝힙니다. 4x4 물류영역. +se-shield-projector=보호 역장을 생성합니다. 프로젝터는 충전 중 혹은 보호막이 손상된 경우에는 더욱 많은 에너지를 소모합니다. "Walls Block Spitters" 모드가 설치된 경우 스피터의 발사체를 막을 수 있습니다. +se-deep-space-transport-belt=우주에 배치할 수 있는 빠른 장거리 운송 벨트입니다. 여러 색상을 사용하여 멀리서도 운송 벨트 라인을 쉽게 식별할 수 있습니다. +se-big-turbine=5000°C의 증기를 받아 다른 한쪽 끝에 500°C의 증기를 내보내고 측면으로 물을 내보내는 대형 1GW 발전기입니다. 99%의 에너지 효율과 99%의 물을 절약할 수 있습니다. +se-big-heat-exchanger=초고온 고용량을 위해 설계된 대형 열 교환기입니다. +se-addon-power-pole=건물에 부착하거나 전력 공급 범위를 정밀하게 제어하기 위해 설계된 작은 전신주입니다. +se-zone-discovery-random=망원경을 사용하여 행성, 위성, 그리고 소행성대를 탐색하세요. +se-zone-discovery-targeted=원하는 자원이 있는 행성, 달, 그리고 소행성 벨트를 탐색합니다. [img=virtual-signal/informatron] 인포매트론 > 구역 탐색에서 찾고 싶은 자원 설정을 선택해야 합니다. +se-zone-discovery-deep=깊고 깊은 성간 우주에 있는 흥미로운 구역을 탐색합니다. 소행성 구역에서는 독특하고 귀중한 자원이 많이 있습니다. +se-delivery-cannon=궤도 너머로 자원을 발사해 머나먼 거리를 단숨에 운송할 수 있는 레일건 형태의 대포와 그것을 포착할 수 있는 무장형 상자입니다. +se-delivery-cannon-weapon=원자 폭탄같은 특수한 탄약을 다른 표면에 원격으로 발사할 수 있는 거대한 레일건입니다. +se-spaceship-clamps=도킹 클램프를 배치하여 우주선의 클램프와의 위치를 일치시켜 특정 위치에 정박할 수 있도록 합니다. 착륙을 자동화하려면 우주선 계기판에 "클램프로 정박"과 "클램프에 정박" 신호가 한 쌍으로 입력되어야 합니다. +se-bio-upgrade-constitution=최대 체력이 증가합니다. +se-bio-upgrade-strength=운반 용량이 증가합니다. +se-bio-upgrade-agility=이동 속도가 증가합니다. +se-bio-upgrade-dexterity=제작 속도가 증가합니다. +se-bio-upgrade-intelligence=각 과학팩으로부터 얻는 연구량이 증가합니다. +se-energy-beaming=하늘에서 내려오는 강력한 무기로 사용하거나 필요한 곳에 즉시 에너지를 공급할 수 있는 강력한 에너지 빔입니다. +se-energy-beam-defence=우주 기반의 에너지 빔과 코로나 질량 방출로부터 표면을 보호합니다. 자성 입자를 보호 기포로 부양시키고 적대적인 에너지 빔을 확산시키기 위해 필요에 따라 입자를 재정렬하고 덩어리로 만듭니다. +se-nexus=데이터를 생성하기 위해 성간 우주를 이동하는 우주선에서 활성화할 수 있는 장치로 추가 기술을 통해 우주 왜곡 필드를 활성화할 수 있습니다 (우주선 승리). +se-spaceship-victory=넥서스의 왜곡 드라이브를 활성화하여 지역 항성 성단에서 탈출할 수 있도록 합니다. 게임에서 승리하려면 3000 이상의 구조 강도를 지닌 우주선을 60초 동안 성간 우주에서 최소 250 이상의 속도로 주행하면서, 넥서스를 왜곡 드라이버 모드로 실행시키세요. +se-arcosphere=성간 공허에서 떠돌고 있는 아코스피어를 수집할 수 있습니다. +se-arcosphere-folding=초차원 집게로 아코스피어를 사용할 수 있습니다. +se-space-probe=우주 탐사선을 발사하기 위해 우주 환경을 기반으로 한 로켓 격납고입니다. 좀 더 저렴한 형태의 인공위성을 발사하는 데 사용할 수 있습니다. +se-linked-container=외부 차원 공간에 의해 다른 보관함과 연결되는 보관함입니다. 보관함의 링크는 보관함이 처음 배치되는 표면에 따라 다릅니다. + +[modifier-description] +tesla-shooting-speed-bonus=테슬라 발사 속도 +tesla-damage-bonus=테슬라 피해 보너스 +railgun-damage-bonus=레일건 피해 보너스 +railgun-shooting-speed-bonus=레일건 발사 속도 +cryogun-shooting-speed-bonus=크라이오건 발사 속도 +cryogun-damage-bonus=크라이오건 피해 보너스 +character-running-speed=캐릭터 이동 속도 보너스: +__1__ +character-crafting-speed=캐릭터 제작 속도: +__1__ + +[virtual-signal-name] +signal-speed=속도 신호 +se-signal-speed=속도 신호 +signal-distance=거리 신호 +se-signal-distance=거리 신호 +se-star=항성 +se-planet=행성 +se-planet-orbit=행성 궤도 +se-moon=위성 +se-moon-orbit=위성 궤도 +se-asteroid-belt=소행성 띠 +se-asteroid-field=소행성대 +se-anomaly=이상 현상 +se-meteor=운석 +se-spaceship=우주선 +se-cargo-rocket=화물 로켓 +se-remote-view=원격 보기 +se-death=사망 +se-character-corpse=시체 +se-ruin=폐허 +se-accolade=포상 +se-remove=제거 +se-radius=반지름 +se-hierarchy=계층 +se-spaceship-launch=우주선 발사 +se-anchor-using-left-clamp=우주선 왼쪽 클램프를 사용하여 정박 +se-anchor-using-right-clamp=우주선 오른쪽 클램프를 사용하여 정박 +se-anchor-to-left-clamp=왼쪽 클램프를 대상으로 정박 +se-anchor-to-right-clamp=오른쪽 클램프를 대상으로 정박 +se-beacon-overload=신호기 과부하 +se-heat=열 + +[controls] +se-remote-view=내비게이션 위성 +se-universe-explorer=우주 탐색기 +se-respawn=부활 +se-mode-toggle=구조 작동 모드 토글 + +[shortcut] +se-remote-view=내비게이션 위성 +se-universe-explorer=우주 탐색기 +se-respawn=부활 + +[shortcut-name] +se-remote-view=네비게이션 위성 [__CONTROL__se-remote-view__] +se-universe-explorer=우주 탐색기 [__CONTROL__se-remote-view__] +se-respawn=부활 [__CONTROL__se-respawn__] + +[tile-name] +se-space-platform-plating=도금 우주 플랫폼 +se-space-platform-scaffold=우주 플랫폼 비계 +se-space-platform-underlay=우주 +se-space-platform-underlay-l=우주 +se-space-platform-underlay-r=우주 +se-space=빈 공간 +se-regolith=레골리스 +se-asteroid=소행성 +se-spaceship-floor=우주선 바닥 + +[mod-setting-name] +se-meteor-interval=운석 최대 간격 +se-plague-max-runtime=역병 최대 지속시간 +se-planets=행성의 개수 +se-planet-size=행성 크기 (1% ~ 10000%) +se-seed=행성 생성 난수 +se-skip-experimental-warning=실험 버전 경고 무시 +se-print-meteor-info=콘솔에 운석 추락 경고 출력 +se-print-satellite-discovered-nothing=아무것도 발견 못한 위성 경고 띄우기 +se-space-pipe-capacity=우주 파이프 용량 +se-electric-boiler=전기 보일러 +se-deep-space-belt-speed=심우주 운송 벨트 속도 +se-deep-space-belt-black=검은색 심우주 운송 벨트 +se-deep-space-belt-white=흰색 심우주 운송 벨트 +se-deep-space-belt-red=빨간색 심우주 운송 벨트 +se-deep-space-belt-yellow=노란색 심우주 운송 벨트 +se-deep-space-belt-green=초록색 심우주 운송 벨트 +se-deep-space-belt-cyan=시안색 심우주 운송 벨트 +se-deep-space-belt-blue=파란색 심우주 운송 벨트 +se-deep-space-belt-magenta=마젠타색 심우주 운송 벨트 +se-space-science-pack=우주 과학 팩 대체 +se-never-show-lifesupport=생명 유지 GUI 보이지 않기 +se-show-zone-preview=구역 미리보기 창 보기 +se-pylon-charge-points=건설 송전탑 충전 지점 +se-cmes-max-frequency=코로나 질량 방출 최대 간격 +se-spawn-small-resources=보너스 시작 자원 패치 +se-show-overhead-button-satellite-mode=내비게이션 위성 업링크 버튼 표시 +se-show-overhead-button-interstellar-map=성간 지도 버튼 표시 +se-show-overhead-button-universe-explorer=우주 탐색기 버튼 표시 +se-scan-search-budget=스캔 탐색 비용 +se-scan-chart-budget=스캔 차트 비용 +se-scan-alert-interval=스캔 경고 주기 +se-supercharger-individual-charge-rate=초고속 충전기 개별 포트 충전율 (MW) + +[mod-setting-description] +se-meteor-interval=운석 추락 후 다음 운석 추락까지의 간격 (분)입니다. 운석 추락 후 다음 추락은 1과 지정된 값 사이의 임의의 시간 (분) 내에 발생하게 됩니다. +se-plague-max-runtime=생물학 무기의 최대 지속시간 (분)입니다. 이 시간동안 역병이 행성 전역으로 퍼지며 모든 역병 입자와 나무, 적들을 파괴합니다. +se-planets=게임 도중 바꾸지 마세요. +se-planet-size=게임 도중 바꾸지 마세요. +se-seed=게임 도중 바꾸지 마세요. +se-skip-experimental-warning=새로운 게임 시작 시 경고를 표시하지 않으며, 후에 메시지가 업데이트되어도 다시 표시하지 않습니다. +se-print-meteor-info=__CONTROL__toggle-console__ 키를 눌러 이전 운석 추락 경보를 다시 볼 수 있습니다. +se-print-satellite-discovered-nothing=위성이 발사되었을 때 무엇을 발견하였는지를 알려주는 경고를 띄웁니다. 이 설정은 위성이 아무것도 발견하지 못했을 때 경고를 비활성화합니다. +se-space-pipe-capacity=우주 파이프 한 칸이 갖는 유체 용량입니다. +se-electric-boiler=게임에 전기 보일러를 추가합니다. +se-deep-space-belt-speed=심우주 운송 벨트는 우주 탐사 모드 내에서 가장 빠른 운송 벨트입니다. 더욱 빠른 운송 벨트를 추가하는 다른 모드가 있다면 심우주 운송 벨트의 속도를 그에 맞추거나 그 이상으로 빠르게 할 수 있습니다. +se-deep-space-belt-black=검은색 운송 벨트, 분배기, 지하 벨트를 비활성화하여 UI상의 혼란을 줄일 수 있습니다. +se-deep-space-belt-white=흰색 운송 벨트, 분배기, 지하 벨트를 비활성화하여 UI상의 혼란을 줄일 수 있습니다. +se-deep-space-belt-red=빨간색 운송 벨트, 분배기, 지하 벨트를 비활성화하여 UI상의 혼란을 줄일 수 있습니다. +se-deep-space-belt-yellow=노란색 운송 벨트, 분배기, 지하 벨트를 비활성화하여 UI상의 혼란을 줄일 수 있습니다. +se-deep-space-belt-green=초록색 운송 벨트, 분배기, 지하 벨트를 비활성화하여 UI상의 혼란을 줄일 수 있습니다. +se-deep-space-belt-cyan=시안색 운송 벨트, 분배기, 지하 벨트를 비활성화하여 UI상의 혼란을 줄일 수 있습니다. +se-deep-space-belt-blue=파란색 운송 벨트, 분배기, 지하 벨트를 비활성화하여 UI상의 혼란을 줄일 수 있습니다. +se-deep-space-belt-magenta=마젠타색 운송 벨트, 분배기, 지하 벨트를 비활성화하여 UI상의 혼란을 줄일 수 있습니다. +se-space-science-pack=다른 모드를 통해 우주 과학 팩을 얻는 방법이 추가된다면 해당 방법이 사용됩니다. 만들 수 있는 방법이 없다면, 우주 탐사에서 제거하거나 최적화 과학 팩을 사용할 수 있습니다. +se-never-show-lifesupport=선택하면 질식 중에 있더라도 생명 유지 GUI를 보여주지 않습니다. +se-show-zone-preview=우주 탐색기에서 구역 미리보기 창을 비활성화하려면 해당 설정을 비활성화하세요. 팩토리오의 디버그 오버레이가 활성화되어 있는 경우 미리보기 창에서 FPS를 감소시킬 수 있습니다. +se-pylon-charge-points=건설 송전탑 충전 지점을 제거하려면 해당 설정을 비활성화하세요. 이렇게 하면 로봇의 충전 동작을 제어하는 데 도움이 되지만, 장거리 이동을 위해 다른 충전 방식을 추가해야 할 수 있습니다. +se-cmes-max-frequency=코로나 질량 방출 (CME) 이후 다음 CME까지의 최대 간격입니다. 값은 시간 단위이며 0일 경우 CME 이벤트가 발생하지 않습니다. 처음 게임 시작 시의 CME는 언제나 첫 순간에 스크립트에 의해 발생되며 대부분 큰 피해가 되지 않습니다. 두 번째는 약 48시간 뒤에 나가옵니다. 반복 간격은 최대 간격 설정의 50%에서 100% 사이입니다. 0이 아닌 설정은 새 이벤트에만 적용됩니다. 남은 시간이 설정되었을 경우 영향을 받지 않습니다. 0으로 설명하면 예약된 모든 CME가 지워지며, 해당 변경 사항이 적용되려면 최대 1분 가량의 시간이 소요될 수 있습니다. ; once an ETA has been set, it won't be affected. A zero setting will clear all scheduled CMEs, though it may take up to a minute for the change to take effect. +se-spawn-small-resources=시작 영역에 몇 가지 작은 자원 패치를 추가합니다. 자원 패치는 자원 간 이동 시간을 줄이기 위해 중앙 잔해 주변 가까이에 존재합니다. +se-show-overhead-button-satellite-mode=화면 왼쪽 상단에 내비게이션 위성 업링크를 띄우기 위한 작은 버튼을 표시합니다. +se-show-overhead-button-interstellar-map=화면 왼쪽 상단에 성간 지도를 띄우기 위한 작은 버튼을 표시합니다. +se-show-overhead-button-universe-explorer=화면 왼쪽 상단에 우주 탐색기를 띄우기 위한 작은 버튼을 표시합니다. +se-scan-search-budget=위성 스캐닝: 차트 상태를 확인할 수 있는 청크의 수입니다. 높은 값을 사용하면 이미 스캔한 청크를 통해 속도를 높여 가장자리까지 닿을 수 있습니다. +se-scan-chart-budget=위성 스캐닝: 차트 버퍼에 병렬로 추가할 수 있는 청크 요청 수입니다. 이전 청크가 완료되지 않았다면 새 차트 요청은 생성되지 않습니다. +se-scan-alert-interval=표면 스캔 업데이트 알림 사이의 간격 (초)입니다. 표면을 밝히면 게임 세이브 파일의 용량이 크게 증가하므로 되도록 파일을 그대로 두고 잊지 말도록 하세요. +se-supercharger-individual-charge-rate=초고속 충전기의 각 충전 포트의 충전 속도를 MW 단위로 설정합니다 (최대 충전 속도에는 영향 없음). 최소 값은 90 MW로 기본값 설정이며 바닐라 로봇을 단숨에 충전하기에 충분하며, 최대 값은 초고속 충전기의 최대 충전 속도인 1000 MW (1GW) 까지 가능합니다. + +[string-mod-setting] +se-space-science-pack-Remove=완전 제거 +se-space-science-pack-Replace=로켓 과학 팩으로 교체 +se-space-science-pack-OptimisationUranium=최적화: 우라늄-크라이오 제작법 +se-space-science-pack-OptimisationFish=최적화: 비타-불카-물고기 제작법 + +[autoplace-control-names] +planet-size=행성 크기 +se-water-ice=얼음 (우주 한정) +se-methane-ice=메탄 얼음 (우주 한정) +se-cryonite=크리오나이트 (모행성에는 없음) +se-vulcanite=불카나이트 (모행성에는 없음) +se-vitamelange=비타멜란지 (모행성에는 없음) +se-beryllium-ore=베릴륨 광석 (모행성에는 없음) +se-holmium-ore=홀뮴 광석 (모행성에는 없음) +se-iridium-ore=이리듐 광석 (모행성에는 없음) +se-naquium-ore=나퀴움 광석 (우주에만 존재함) + +[map-gen-preset-name] +space-exploration=우주 탐사 모드 기본값 + +[map-gen-preset-description] +space-exploration=우주 탐사 모드를 위한 기본값 + +[tooltip-category] +shot=사용 diff --git a/space-exploration_0.5.80/space-exploration/locale/pl/strings.cfg b/space-exploration_0.5.80/space-exploration/locale/pl/strings.cfg new file mode 100644 index 0000000..a371c18 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/locale/pl/strings.cfg @@ -0,0 +1,2073 @@ +spaceship-integrity100=+100 Integralność strukturalna statku kosmicznego +spaceship-integrity300=+300 Integralność strukturalna statku kosmicznego +spaceship-integrity500=+500 Integralność strukturalna statku kosmicznego +arcosphere-discovery=Wyłapuj kryształy przestrzeni z przestrzeni międzygwiezdnej +core-mining-productivity-5=+5% Wydajność wydobycia rdzenia +se-zone-discovery-random=Powoduje odkrywanie losowych stref podczas badania. +se-zone-discovery-targeted=Powoduje wykrywanie strefy ukierunkowanej na zasoby podczas badania. +se-zone-discovery-deep=Powoduje odkrywanie stref kosmicznych podczas badania. +unlock-spaceship-victory=Odblokowuje wygraną przez statek kosmiczny: Leć z Nexusem na pokładzie statku kosmicznego z co najmniej 3000 integralności strukturalnej i utrzymuj prędkość przewyższającą 250 przez 60 sekund w przestrzeni międzygwiezdnej. + +[mod-name] +space-exploration=Space Exploration + +[mod-description] +space-exploration=Buduj rakiety transportowe, aby wysyłać przedmioty w kosmos. Sam wsiądź do rakiety, aby polecieć w kosmos i odbyć spacer kosmiczny. Zbuduj swoją platformę kosmiczną na orbicie, aby rozwijać trudne nauki kosmiczne oparte o dane. Zbuduj statek kosmiczny kawałek po kawałku i leć nim na inne planety, księżyce, pasy asteroid i do wielu innych miejsc. Zdecydowanie zaleca się grę z AAI Industry. Wymagany jest mod Space Exploration Postprocess (nie może być uwzględniony w zależnościach, długo by wyjaśniać dlaczego). Nie zaleca się gry z innymi modami nie wymienionymi w zależnościach póki Space Exploration jest w fazie eksperymentalnej. + +[space-exploration] +space-exploration=Space Exploration +menu_space-exploration=Space Exploration +title_space-exploration=Space Exploration +off=Wyłączone +on=Włączone +wdc_auto_off=Celowanie manualne +wdc_auto_on=Celowanie automatyczne +name=Nazwa +rename-something=Zmienić nazwę __1__ +trigger-none=Brak (ręcznie) +trigger-fuel-full=Wystrzel gdy paliwo będzie pełne +trigger-cargo-full=Wystrzel gdy ładunek będzie pełny +trigger-fuel-full-signal=Wystrzel na sygnale zielonym gdy paliwo pełne +trigger-cargo-full-signal=Wystrzel na sygnale zielonym gdy ładunek pełny +trigger-cargo-full-or-signal=Wystrzel gdy sygnał zielony lub ładunek pełny +destination-type-zone=Przybliżona lokalizacja +destination-type-landing-pad=Lądowisko transportowe +button-launch=Wystrzel +button-launch-disabled=Wystrzel (Wyłączone) +destination-crash-warning=Wybierz lądowisko dla ładunku, aby zmniejszyć ryzyko wypadku +recipe-to=__1__ do __2__ +recipe-from=__1__ z __2__ +simple-a-b=__1____2__ +simple-a-b-space=__1__ __2__ +simple-a-b-comma=__1__, __2__ +simple-a-b-break=__1__\n__2__ +interstellar-map=Mapa przestrzeni międzygwiezdnej +interstellar-space=Przestrzeń międzygwiezdna +planetary-system=System planetarny __1__ +remote-view=Łącze nawigacji satelitarnej [__CONTROL__se-remote-view__] +remote-view-window-title=[img=virtual-signal/se-remote-view] Nawigacja satelitarna [__CONTROL__se-remote-view__] +remote-view-currently-viewing=Aktualnie oglądane: +remote-view-instruction=Wystrzel więcej satelitów, aby odkryć więcej gwiazd, planet, księżyców i innych stref. +remote-view-spaceships=__1__ statki kosmiczne +remote-view-spaceships-anchored=__1__ zakotwiczone statki kosmiczne +remote-view-clamps=__1__ zaciski statków kosmicznych +remote-view-show-hide-resources=Pokaż/ukryj surowce +remote-view-show-hide-stats=Pokaż/ukryj statystyki +remote-view-show-hide-anchor-info=Pokaż/ukryj informacje związane ze statkami kosmicznymi +exit-remote-view=Wyjście z Systemu Nawigacji Satelitarnej [__CONTROL__se-remote-view__] +open-zonelist=Otwórz Eksplorację Wszechświata +zonelist-window-title=[img=virtual-signal/se-planet-orbit] Eksploracja Wszechświata [__CONTROL__se-universe-explorer__] +priority-icon=[img=virtual-signal/se-accolade] +priority-tooltip=Priorytet (sortuj ważne vs nieistotne strefy) +trim-zone-button=[img=item/cliff-explosives] Okroj powierzchnię +trim-zone-button-tooltip=Usuń część powierzchni poza terenem ograniczonym przez obiekty zbudowane przez gracza, obiekty specjalne i środek powierzchni. +trim-zone-button-no-surface-tooltip=Powierzchnia nie istnieje. +delete-zone-button=[img=virtual-signal/se-remove] Usuń powierzchnię +delete-zone-button-tooltip=Niektórych powierzchni nie można usunąć. +delete-zone-button-no-surface-tooltip=Powierzchnia nie istnieje. +scan-zone-button=[img=item/satellite] Skanuj powierzchnię +scan-zone-button-tooltip=Ostrzeżenie: Skanowanie może znacząco spowolnić grę. Szybkość skanowania można zmienić w ustawieniach moda. W dowolnym momencie można zatrzymać skanowanie. +scan-zone-button-disabled-tooltip=Musisz wystrzelić satelitę, aby zeskanować powierzchnię. +stop-scan-zone-button=[img=item/satellite] Zatrzymaj wszystkie skany +stop-scan-zone-button-tooltip=Zatrzymuje wszelkie aktywne skany na wszystkich powierzchniach. +generic-requires-satellite=Musisz najpierw wystrzelić satelitę. +remote-view-requires-satellite=Musisz wystrzelić satelitę, aby korzystać z systemu nawigacji satelitarnej. +satellite-discovered-platform=[color=cyan]Satelita odkryła pewną platformę kosmiczną.[/color] Otwórz [img=virtual-signal/se-planet-orbit] Eksplorator wszechświata [__CONTROL__se-universe-explorer__] wybierz __1__ i kliknij zobacz powierzchnię. Mogą tam być przydatne rzeczy. +satellite-view-unlocked=Odblokowałeś [color=cyan][img=virtual-signal/se-remote-view] System Nawigacji Satelitarnej[/color]. Umożliwia to przeglądanie świata i innych miejsc które odkryłeś za pośrednictwem satelity. Naciśnij [color=green][__CONTROL__se-remote-view__][/color] aby aktywować lub użyć paska narzędzi skrótów (po prawej stronie od paska). +source-discovered-zone=[color=cyan]__1__ Odnaleziono __2__: [/color][img=__3__] [color=white]__4__[/color]. Odnalezione lokalizacje można przeglądać w [img=virtual-signal/se-planet-orbit] eksploracje Wszechświata [__CONTROL__se-universe-explorer__]. +discovered-zone=[color=cyan]Odnaleziono __1__: [img=__2__] [/color][color=white]__3__[/color]. +discovered-anomaly-additional=Nieznany obiekt wykryty w [img=virtual-signal/se-anomaly] anomalii. Twój [img=virtual-signal/informatron] Dziennik eksploracji [__CONTROL__informatron__] został zaktualizowany. +satellite-discovered-nothing=Nowy satelita został wystrzelony, ale nie znalazł niczego nowego. Może być więcej do znalezienia wokół innych gwiazd. +tech-discovered-nothing=Teleskopy nie znalazły niczego nowego w pobliżu gwiazd. Może być więcej do znalezienia w przestrzeni kosmicznej. +tech-deep-discovered-nothing=Teleskopy nie znalazły niczego nowego w kosmosie. +galaxy_ship_authenticated=[img=virtual-signal/se-spaceship] Opuszczony statek kosmiczny: [color=cyan]Biosygnatura uwierzytelniona . Kod dostępu do śluzy powietrznej to 2236067964. Awaryjne przesyłanie kopii logu.[/color] Your [img=virtual-signal/informatron] Dziennik eksploracji [__CONTROL__informatron__] został zaktualizowany. +space-capsule=Kapsuła kosmiczna +player-died=__1__ nie żyje +launch-suit-warning=Aby uniknąć uduszenia, rozważ założenie skafandra i umieszczenie kanistrów podtrzymujących życie w ekwipunku. +suffocating-warning=Dusisz się. Wejdź do kapsuły kosmicznej lub załóż skafander z kilkoma kanistrami podtrzymującymi życie w ekwipunku. +rocket_survivability_fail=Rakieta transportowa doznała uszkodzeń podczas transportu i jest poza kursem. Zalecane dodatkowe badania nad wytrzymałością rakiet i bezpieczeństwem ładunków. __1__ +respawn-if-stranded=Jeśli utknąłeś możesz użyć skrótu odrodzenia [__CONTROL__se-respawn__]. +respawn-options-title=Miejsce docelowe odrodzenia +respawn-button-homeworld=[img=virtual-signal/se-planet] Planeta startowa +respawn-button-landing-pad=[img=item/se-rocket-landing-pad] Najbliższe lądowisko +respawn-button-spaceship=[img=virtual-signal/se-spaceship] Najbliższy statek kosmiczny +respawn-confirm-title=Czy na pewno chcesz się odrodzić? +respawn-confirm-yes=[img=virtual-signal/se-death] Odrodzenie +respawn-confirm-no=Anuluj +search-list=Szukaj +clear-search=Wyczyść wyszukiwanie +filter-list=Filtr +clear-filter=Wyczyść wyszukiwanie +attrition-type-radiation=promieniowanie +attrition-type-wind=wiatr +attrition-type-spacial-distortion=zniekształcenia przestrzeni +zonelist-view-surface=Wyświetl powierzchnię +zonelist-heading-hierarchy=Hierarchia +zonelist-heading-type=Typ strefy +zonelist-heading-name=Nazwa +zonelist-heading-radius=Promień +zonelist-heading-primary-resource=Główny zasób +zonelist-heading-attrition=Zakłócenia robotów +zonelist-heading-threat=Zagrożenie +zonelist-heading-solar=Energia słoneczna +zonelist-heading-flags=Flagi +zonelist-heading-priority=Priorytet +zonelist_filter_star=Uwzględnij gwiazdy +zonelist_filter_planet=Uwzględnij planety +zonelist_filter_planet-orbit=Uwzględnij orbity planet +zonelist_filter_moon=Uwzględnij księżyce +zonelist_filter_moon-orbit=Uwzględnij orbity księżyca +zonelist_filter_asteroid-belt=Dołącz pasy asteroid +zonelist_filter_asteroid-field=Uwzględnij pola asteroid +zonelist_filter_anomaly=Uwzględnij anomalię +zonelist-resource-bar-tooltip=__1__ __2__\nCzęstotliwość: __3__\nRozmiar: __4__\nBogactwo: __5__ +zonelist-resource-bar-tooltip-extended=__1__ __2__\nCzęstotliwość: __3__\nRozmiar: __4__\nBogactwo: __5__\n__6__ +zonelist-resources-disclaimer=Prawdopodieństwa surowców są szacunkowe. [?] +zonelist-resources-disclaimer-tooltip=Dane o surowcach są szacunkami opartymi na gęstości pierwiastków.\nOne są przekazane do generatora mapy.\nRzeczywiste wielkości złóż będą się różnić, mogą też nie pojawić się z powodu występowania wody, średnicy powierzchni, albo przez specyficzne wymagania dotyczące podłóża. +resource-terrain-required-se-vulcanite=Wymaga terenu wulkanicznego +resource-terrain-required-se-cryonite=Wymaga zamarzniętego terenu +resource-terrain-required-se-vitamelange=Wymaga terenu trawiastego +zone-tooltip-type=Typ strefy: +zone-tooltip-parent=Ciało nadrzędne: +zone-tooltip-threat=Zagrożenie: +zone-tooltip-daynight=Cykl dzień / noc: +zone-tooltip-bot-attrition=Zakłócenia Robot __1__: +zone-tooltip-radius=Promień: +zone-tooltip-solar=Energia słoneczna: +zone-tooltip-flags=Informacje: +zone-tooltip-closest=Najbliższy: +zone-tooltip-destination=Miejsce docelowe: +zone-tooltip-delta-v=∆v z __1__ +construction-denied=Nie można tu umieścić. +construction-denied-vehicle-in-space=Nie można umieścić pojazdów naziemnych w kosmosie. +construction-denied-se-surface=Nieprawidłowa lokalizacja, musi zostać umieszczona na powierzchni kosmosu. +construction-denied-no-water=Brak wody +construction-denied-spaceship-only=Musi być budowane na podłodze statku kosmicznego. +currently-viewing=Aktualnie przeglądane: __1__ +fail-board-no-character=Nie można wejść na pokład docelowego statku, aby skorzystać z tej akcji, musisz być przywiązany do swojej postaci. +fail-board-remote-character=Nie można wejść na pokład statku docelowego, twoja postać nie znajduje się na statku. +fail-board-target-anchored=Nie można wejść na pokład zakotwiczonego statku, spróbuj zakotwiczyć w tym samym miejscu. +starmap=Mapa gwiazd +starmap-button=[img=virtual-signal/se-star] Mapa gwiazd +back=Cofnij +spaceship=Statek kosmiczny +planet=Planeta +moon=Księżyc +star=Gwiazda +orbit=Orbita +something_orbit=__1__ orbita +asteroid-belt=Pas asteroid +asteroid-field=Pole asteroid +anomaly=Anomalia +spaceship-cannot-set-destination-to-self=Nie można ustawić miejsca docelowego na siebie. +spaceship-streamline=Opływowość kształtu: __1__ +spaceship-launch-energy=Energia startu: __1__ +spaceship-launch-energy-invalid=Energia startu: Wymaga prawidłowego sprawdzenia integralności. +spaceship-speed=Prędkość: __1__ +spaceship-structural-stress-hull=Obciążenie konstrukcyjne (kadłub): __1__ +spaceship-structural-stress-hull-invalid=Obciążenie konstrukcyjne (kadłub): nie dotyczy (wymagana hermetyzacja) +spaceship-structural-stress-container=Obciążenie konstrukcyjne (ładowność): __1__ +spaceship-structural-stress-container-invalid=Obciążenie konstrukcyjne (ładowność): nie dotyczy (wymagana hermetyzacja) +spaceship-travel-time-unknown=Czas Podróży: Nieznany. Przetestuj maksymalną prędkość w celu oszacowania. +spaceship-travel-time-max=Czas podróży: __1__s przy maksymalnej prędkości. +spaceship-travel-time-current=Czas podróży: __1__s przy aktualnej prędkości. +spaceship-closest-location=Najbliższa lokalizacja: __1__ +spaceship-location-spatial-distortion=Zniekształcenie przestrzenne: __1__ +spaceship-location-stellar-x=Położenie X: __1__ +spaceship-location-stellar-y=Położenie Y: __1__ +spaceship-location-star-gravity-well=Gwiezdna grawitacja: __1__ +spaceship-location-planet-gravity-well=Grawitacja planety: __1__ +spaceship-travel-status=Status podróży: __1__ +spaceship-integrity-status-valid=Stan integralności: Prawidłowy: __1__ +spaceship-integrity-status-invalid=Stan integralności: Nieprawidłowy: __1__ +spaceship-button-launch=Startuj +spaceship-button-launch-tooltip=Gotowy do Wystartowania +spaceship-button-launch-disabled=Startuj (wyłączone) +spaceship-button-launch-disabled-fuel-tooltip=Wymaga paliwa w zbiornikach wspomagających +spaceship-button-launch-disabled-integrity-tooltip=Wymaga prawidłowego sprawdzania integralności +spaceship-button-anchor=Zakotwiczyć +spaceship-button-confirm-anchor=Potwierdź zakotwiczenie +spaceship-button-anchor-to=Zakotwiczyć do __1__ +spaceship-button-anchor-on=Zakotwiczyć na __1__ +spaceship-button-stop=Zatrzymaj +spaceship-button-start=Leć +spaceship-button-board=Przesiądź się do __1__ +spaceship-button-scouting-back=Cofnij +spaceship-button-scouting-back-tooltip=Anuluj Wyszukiwanie Zakotwiczenia +spaceship-name-the=__1__ +spaceship-button-start-integrity-check=Rozpocznij sprawdzanie integralności +spaceship-heading-destination=Miejsce docelowe +list-destinations-alphabetically=Lista miejsc docelowych alfabetycznie +spaceship-travel-message-new-course-plotted=Nowy kurs wyznaczony. +spaceship-travel-message-exiting-planet-gravity=Wyjście z grawitacji planety +spaceship-travel-message-navigating-planet-gravity=Poruszanie się po grawitacji planety +spaceship-travel-message-exiting-star-gravity=Wyjście z grawitacji gwiazdy +spaceship-travel-message-navigating-star-gravity=Poruszanie się po grawitacji gwazdy +spaceship-travel-message-spatial-distortions=Nawigowanie po zniekształceniach przestrzennych +spaceship-travel-message-navigating-interstellar=Poruszanie się w przestrzeni międzygwiezdnej +spaceship-travel-message-at-destination=W miejscu docelowym. +spaceship-check-message-passed=Powiodło się: Integralność statku Prawidłowa. +spaceship-check-message-failed-containment=Nie powiodło się: Utrata hermetyzacji wokół konsoli. Upewnij się, że wszystkie ściany statku kosmicznego znajdują się na podłodze statku kosmicznego bez przerw. +spaceship-check-message-failed-console-floor=Konsolę należy umieścić na podłodze statku kosmicznego. +spaceship-check-message-failed-empty=Nie znaleziono płytek podłączonych do prawidłowo zamkniętej konsoli. +spaceship-check-message-failed-unknown-bounds=Błąd: Nieznane granice statku kosmicznego. +spaceship-check-message-failed-stress=Błąd: Obciążenie integralności strukturalnej przekracza limit technologiczny. +spaceship-check-message-checking-console-floor=Sprawdzanie połączenia z podłogą konsoli. +spaceship-check-message-checking-containment=Sprawdzanie hermetyzacji. +spaceship-check-message-checking-connectivity=Sprawdzanie łączności z konsolą. +spaceship-check-message-no-console=Brak konsoli. +spaceship-check-message-did-not-complete=Kontrola nie została zakończona. +spaceship-check-message-unstable=Niestabilny: niektóre sekcje będą odpadać podczas manewrowania. +spaceship-check-message-valid-but-disconnecting=Prawidłowe, ale niestabilne: sekcje będą odpadać. +spaceship-warning-sections-disconnecting=Sekcje się rozłączają. Zatrzymaj się, aby naprawić. +page_space_exploration_text_1=Witamy w Space Exploration. W tym modzie jest już dużo, ale wciąż ma status eksperymentalny i jest w trakcie intensywnego rozwoju. Nie zaleca się grania modami innymi niż wymagane i zalecane mody.\n\n\n[font=default-bold]Rekomendowane mody[/font] \n\nAAI Industry: Space Exploration został zaprojektowany do współpracy z AAI Industry i opiera się na zmianach drzewa technologicznego. Jeśli nie masz zainstalowanego AAI Industry, stracisz pewne zmiany w formułach, które utrudnią grę długoterminową.\n\nAAI Signal Transmission: Umożliwia przesyłanie sygnału między bazami. Bez tego modu logistyki międzyplanetarnej będzie znacznie trudniejsze.. \n\nGrappling Gun: Pociągnie cię do wskazanego miejsca. Idealne do pokonywania skał, statków kosmicznych i powrotu na platformę kosmiczną, jeśli spadniesz.\n\n\n[font=heading-2]Zalecane ustawienia[/font]\n\nMUSISZ mieć włączone wszystkie kafelki terenu obcych biomów, w przeciwnym razie gra zawiesi się w późniejszym momencie.\n\nPonieważ gra jest dłuższa niż zwykle, dobrym pomysłem jest rozpoczęcie gry z niskimi czynnikami ewolucji wroga.\n\nNie powinieneś ustawiać wysokich zasobów dla swojej początkowej planety, chyba że grasz z formułami wymagającymi dużych zasobów, takimi jak formuły o wysokim stopniu trudności lub tryb maratonu. Jeśli zasoby zostaną ustawione zbyt wysoko, zmniejszy to potrzebę ekspansji na inne planety.\n\n\n[font=heading-2]Pomocne linki[/font]\n\nSpójrz na Space Exploration Wiki tutaj: https://spaceexploration.miraheze.org\n\nGet pomóż lub śledź rozwój na Discord: https://discord.gg/ymjUVMv\n\nOver 2000 godzin poświęcono na ten mod. Jeśli Ci się spodoba, rozważ wsparcie mnie na Patreon: https://www.patreon.com/earendel +menu_meteor_defence=[img=virtual-signal/se-meteor] Obrona Przeciw meteorowa +title_meteor_defence=Obrona meteorowa +page_meteor_defence_text_1=Meteory uderzają w większość stref w przypadkowych odstępach czasu. Możesz zmienić maksymalny odstęp między uderzeniami w ustawieniach mod.\n\nLiczba meteorów jest również losowa, 50% z 1, 25% z 2, 12.5% z 3, 6.25% z 4, itd.\n\nStruktury obronne meteorów mogą strzelać do meteorów. Strzelają w sekwencji, więc późniejsze obrony nie będą działać, jeśli wszystkie meteory zostaną zniszczone. Obrona wymaga amunicji, czasu ładowania i dodatkowej mocy podczas ładowania. Pobór mocy nie jest bez znaczenia, dlatego dobrze jest zrównoważyć ryzyko z kosztami. +menu_coremining=[img=item/se-core-miner] Wydobycie Rdzenia +title_coremining=Wydobycie Rdzenia +page_coremining_text_1=Wydobycie rdzenia może odbywać się tylko na planetach i księżycach. Każda planeta i księżyc mogą dać inny rodzaj fragmentu rdzenia w zależności od tego, co jest w środku. Nauvis zapewnia równowagę wspólnych zasobów, ale inne miejsca zwykle dają 1 typ zasobów. Górnicy rdzeni są głodni energii, ale odzyskujesz trochę energii z węgla, ropy i uranu.\n\nWiertnica Rdzeni zużywa dużo energii, a każdy kolejny który umieścisz na planecie, zmniejsza wydajność wszystkich wiertnic na tej samej planecie. Są znacznie mniej energooszczędne niż normalnie wiertnice nawet jeśli masz wiele uruchomionych, ale nigdy nie brakunie zasobów. W początkowej fazie gry przydatne może być uruchomienie 1 wiertnicy Rdzenia, gdy masz nadmiar mocy. Jeśli zaczniesz na małej planecie, wydobycie energii słonecznej i rdzeniowej może być twoim jedynym sposobem na zdobycie wystarczającej ilości zasobów, aby zejść z planety.\n\nWiertnice rdzenia w późnej fazie gry czerpią ogromne korzyści z premii za wydobycie. Lepiej jest celować w kilka na wielu planetach niż w kilka na kilku planetach. +menu_launching_satellites=[img=item/satellite] Wystrzelenie satelitów +title_launching_satellites=Wystrzelenie satelitów +page_launching_satellites_text_1=Uruchomiłeś [color=cyan]__1__[/color] satelity.\n\n[font=heading-2][img=virtual-signal/se-remote-view] System Nawigacji Satelitarnej [__CONTROL__se-remote-view__][/font]\n\nPo wystrzeleniu satelity nawigacyjnego w kosmos z silosu rakietowego satelity masz dostęp do [img=virtual-signal/se-remote-view] Podglądu Nawigacji satelitarnej. Dostęp do tego trybu można uzyskać za pomocą klawisza [__CONTROL__se-remote-view__]. Podczas nawigacji satelitarnej kamera jest odłączona od twojej postaci, dzięki czemu możesz szybko rozejrzeć się po mapie, a nawet odkryć nowe obszary. Jest kilka rzeczy, których nie można zrobić w trybie nawigacji satelitarnym. jak stawiać kopalnie. Jest jednak wiele rzeczy, które możesz zrobić, np. korzystać z blueprintów, planów destrukcji, budować widma obiektów, dodawać połączenia kablowe, zmieniać formuły w maszynowach itd\n\n[font=heading-2][img=virtual-signal/se-planet-orbit]Eksplorator wszechświata [__CONTROL__se-universe-explorer__][/font]\n\nSieć nawigacji satelitarnej umożliwia także wyświetlanie innych powierzchni, takich jak księżyce, pasy asteroid, pola asteroid i orbity. Naciśnij [__CONTROL__se-universe-explorer__] aby wyświetlić listę znanych stref. Jeśli uruchomiłeś satelitę, możesz kliknąć opcję Wyświetl powierzchnię, aby zobaczyć, co tam jest. Dobrze jest zbadać planetę zanim spróbujesz tam lecieć.\n\nWystrzelenie satelitów pomaga również w wykrywaniu stref w systemie, z których jest uruchamiany (więcej informacji można znaleźć w programie Zone Discovery). +menu_zone_discovery=[img=virtual-signal/se-planet-orbit] Odkrywanie stref +title_zone_discovery=Odkrywanie stref +page_zone_discovery_text_1=W tym obszarze przestrzeni kosmicznej jest wiele gwiazd, planet, pasów asteroid i pól asteroid.\n\n[font=heading-2]Nawigacja satelitarna[/font]\nYou can launch a navigation satellite to discover a random planet, moon, or asteroid belt in the same start system that the satellite was launched from. If there is nothing else to discover in that system then it can discover new stars instead, but cannot discover anything orbiting other stars or anything in deep space.\n\n[font=heading-2]Zone Discovery Research[/font]\nYou can use space telescopes to look for new zones to discover. This is achieved through Zone Discover research. The basic zone discovery research can find a random star, planet, moon, or asteroid belt.\n\n[font=heading-2]Targeted Zone Discovery Research[/font]\nTargeted zone discovery research is the same as the basic research, but if you have selected a resource preference (below) it look in areas more likely for that resource to occur so you are more likely to discover a zone with that resource. Keep in mind that a planet can't be discovered before discovering its star, and a moon can't be discovered before discovering its planet. Don't expect to find what you're looking for every time.\n\n[font=heading-2]Deep Space Zone Discovery Research[/font]\nDeep space zone discovery research only looks for areas of interest in deep space and is the only way you can discover asteroid fields. Asteroid fields are the only place you can find Naquitite. Deep space research cannot be resource targeted.\n\n[font=heading-2]Resource targeted zone discovery preference:[/font] +menu_cargo_rockets=[img=virtual-signal/se-cargo-rocket] Rakiety transportowe +title_cargo_rockets=Rakiety transportowe +page_cargo_rockets_text_1=Cargo rockets are launched from a Cargo Rocket Silo, aka the Launchpad.\n\nYou have launched [color=cyan]__1__[/color] cargo rockets.\n\nYour cargo loss modifier based on technology: Loss max percentage reduced by [color=cyan]__2__%[/color].\n\nYour rocket survivability modifier based on technology: Loss chance reduced by [color=cyan]__3__%[/color].\n\nYour rocket reusability modifier based on technology: [color=cyan]__4__[/color] +/- up to 10 (max 100) parts recovered.\n\n[font=heading-2]Getting Started[/font]\n\nBefore you can launch cargo rockets, you need to have launched a satellite in the satellite rocket (the standard Factorio aka 'vanilla' silo) while Space Exploration is installed. \n\nOnce you have build a cargo rocket silo you need to build and fuel your rocket:\n\n • 100 cargo rocket sections into the inventory. 20 of these will be recovered from the rocket at the destination, more with the right research. \n • 1 space capsule into the inventory. This will always be recovered at the destinations and can return you home from orbit.\n • A lot of liquid rocket fuel, piped into one of the 8 connections near the corners. The amount of fuel required depends on the radius of the planet you're launching from and the distance to the destination. If using the "Any landing pad with name" destination option, it will load enough fuel for any of the valid destinations.\n\nYou can enter the cargo rocket silo from the door at the front (press __CONTROL__toggle-driving__). This will let you ride with the rocket. You should also have a thrustersuit and lifesupport canisters so you don't die if you are launching to space. \n\nYour first rocket won't have anywhere to land so it will disassemble as the cargo is released. Sometimes rockets targeting a landing pad miss and the rocket crashes. Even in the case of a crash the cargo is deployed in cargo pods so you never lose all of the cargo. \n\nYou should take a Rocket Landing Pad and some Space Platform Scaffold with you so you can build somewhere for the next rocket to land.\n\nBuilding a Rocket Landing Pad at your base before launching will allow you to easily return directly there instead of ending up in a random location when you return.\n\n[font=heading-2]Destinations[/font]\n\nOnce you have a landing pad placed, make sure you update the destination of the rocket silo to target the landing pad and not a random point in orbit. You can do this in-person or via the Satellite Remote View (hotkey 'n'). However, rockets will not launch to a landing pad that contains items, so make sure to empty it.\n\n[font=heading-2]Basic Automation[/font]\n\nThe rocket silo outputs signals for how many parts are already in the rocket. You can put a condition on an inserter of [Cargo Rocket Sections < 100] to make sure it won't fill the rocket with additional sections.\n\nIf you have set up launch triggers on a silo it will launch automatically, but a rocket won't automatically launch to a landing pad that isn't empty (otherwise the cargo might not fit).\n\n[font=heading-3]Input Signals[/font]\n\n[img=virtual-signal/signal-green] Green signal: Can trigger a launch if the silo is configured to have a trigger that uses the green signal.\n\n[font=heading-3]Output Signals[/font]\n\n[img=virtual-signal/signal-E] E Signal: Empty slots\n\n[img=virtual-signal/signal-F] F Signal: Full slots\n\n[img=virtual-signal/signal-L] L Signal: Liquid rocket fuel required for all potential destinations specified by the destinations setting.\n\n[img=virtual-signal/se-cargo-rocket] Cargo Rocket Signal: If the rocket is complete (i.e. 1 capsule and 100 rocket sections) then a value of 1 is returned.\n\n[img=item/se-space-capsule] Space Capsule Signal: Any capsules used in the rocket construction are added to the count of any capsules in the cargo inventory.\n\n[img=item/se-cargo-rocket-section] Cargo Rocket Section Signal: Any sections used in the rocket construction are added to the count of any sections in the cargo inventory.\n\n[img=fluid/se-liquid-rocket-fuel] Liquid Rocket Fuel Signal: The total liquid rocket fuel in the silo. +menu_lifesupport=[img=item/se-lifesupport-equipment-1] Podtrzymywanie życia +title_lifesupport=Podtrzymywanie życia +page_lifesupport_text_1=Lifesupport is gained from lifesupport equpment and lifesupport canisters. You need both to survive in hostile environments.\n\nLifesupport equipment and the consumable canisters can be made in a lifesupport facility.\n\nLifesupport canisters provide the resources needed by the system to fulfil all of its roles and are consumed gradually. As the lifesupport bar decreases, new canisters are consumed directly from your inventory. \n\nLifesupport equipment is placed into the grid of armor, however if you are using a thrustersuit, it has 1 lifesupport equipment built in. Additional lifesupport equipment pieces placed in the equipment grid increase the lifesupport efficiency. If you are using lifesupport equipment in a non-thruster suit then it will protect you on hostile planets but won’t protect you from the vacuum of space.\n\n[font=heading-2]Hostile environments[/font]\nHostile environments are any area that would cause damage to your body just by being there. Lifesupport equipment is designed to protect you from these hazards by providing you with appropriate pressurisation, oxygen, water, nutrition, thermal regulation, and radiation protection. The 2 main types of hostile environment are:\n\nSpace: A space suit (thruster suit) is required for lifesupport to function correctly in a vacuum. You cannot use lifesupport from some other type of armor in space, you will still suffocate.\n\nLand: Certain planets and moons may have dangers such as radiation, extreme cold, extreme heat, or an acidic atmosphere, and require lifesupport equipment. (Coming soon). Planets also require lifesupport if certain bio weapons are used (Plague Worlds). Lifesupport for these areas can be provided by a thruster suit, or by equipment placed into any other type of armor. +menu_space_sciences=[img=item/se-astronomic-science-pack-2] Kosmiczne pakiety naukowe +title_space_sciences=Kosmiczne pakiety naukowe +page_space_sciences_text_1=[img=item/se-rocket-science-pack] The first in-space science is the rocket science pack. It can only be made in space so you need to establish a small space station to produce it. Rocket science packs and the later science packs can only be used in space, so you'll need to rocket up other science packs too and put them in the powerful Space science lab.\n\n[font=heading-2]Specialist Sciences[/font]\n\nThe 4 specialist sciences are Astronomic, Biological, Energy and Material. They are all data-driven, and follow a process of performing experiments to gather data for supercomputers to build an increasingly accurate model of life, the universe, and everything. They are all at approximately the same tech levels so you are free to choose your order of development, however, each one requires a specific resource to some degree, so take a look at your solar system before deciding which science to research first.\n\n[img=item/se-astronomic-science-pack-4] Astronomic science focusses mainly on space logistics.\n\n[img=item/se-energy-science-pack-4] Energy science is mainly in energy production, power transfer, and high tech gadgets.\n\n[img=item/se-material-science-pack-4] Material science is focussed more on heavy industry and direct upgrades.\n\n[img=item/se-biological-science-pack-4] Biological science is focussed on character upgrades, medicine, lifesupport, bioweapons, and productivity.\n\n[font=heading-2]Deep space science[/font]\n\n[img=item/se-deep-space-science-pack-1]Deep space science is focussed on exploring the interstellar void, antimatter, and warping spacetime. +menu_energy_beams=[img=item/se-energy-transmitter-emitter] Wiązki energii +title_energy_beams=Wiązki energii +page_energy_beams_text_1=[font=heading-2]Coronal Mass Ejections[/font]\nStars in the area frequently eject dangerous streams of particles. It is not uncommon for a planet or moon to stray into one of these particle streams. If you have a base on an affected surface you should evacuate, diversify and disperse your assets, or build an Umbrella defence facility with a large accumulator backup. When a surface is threatened there will be at least 4 hours early warning. Known threats will be listed below. +page_energy_beam_warning_text=[img=virtual-signal/se-star] Ostrzeżenie: Koronalny wyrzut masy zbliża się do __1__. Szacowana energia potrzebna do ochrony: __3__GJ. ETA: __2__s. +page_energy_beams_text_2=[font=heading-2]Umbrella: Energy Beam Defence[/font]\nThe energy beam defence facility, "Umbrella", can protect against coronal mass ejections and space-based energy beam weapons. It works by levitating magnetic particles into a protective bubble, then realigns and clumps the particles as needed to diffuse hostile energy beams. The only requirement to function is energy, the base draw is 10MW but increases based on the strength of attacking beams. Only 1 is needed per surface against Coronal mass ejections, against energy beams weapons 1 Umbrella can defend against up to 500GJ of attacking power. For a coronal mass ejection, the base power requirement for a 5000 radius planet and 100% solar, is expected be around 160GJ over 2 minutes with a peak power draw of 2GW at the 1 minute mark. This is increased or decreased with the zone's solar power multiplier, and for solid bodies it is increased or decreased based on the radius relative to a base radius of 5000. For an energy beam from an Energy Beam Emitter, the power requirement is expected to be 1/10th of the energy beam strength at the target (after efficiency loss).\n\n[font=heading-2]Energy Beaming[/font]\nThe Energy Beam emitter is capable of sending energy to different surface. It can do this in 2 main ways, either as a way to provide power to a distant surface, "Energise", or as a cutting beam weapon, "Glaive". When in Glaive mode the beam damages an area continuously but can be moved over the target surface cutting a path. The damage rate, area, and beam speed increase based on the energy put into the beam. "Auto-Glaive" mode has autonomous target selection.\n\nAn Energy beam emitter has 4 connection points where Energy beam chambers can connect end-on. Energy beam chambers can connect length-ways, or have a long edge meet the middle of a short edge, but cannot connect directly side-to-side. Energy beam injectors attach directly to the sides of Energy beam chambers. Each Energy beam injector increases the power of the connected Energy beam emitter. To collect power from a beam you need an Energy beam receiver at the target surface and select it as the target using the targeter from the emitter. Once the beam has the receiver as the target the receiver will heat up. The heat can be taken from heat connections at the side to power heat exchangers and turbines. +menu_spaceships=[img=virtual-signal/se-spaceship] Statki kosmiczne +title_spaceships=Statki kosmiczne +page_spaceships_text_1=Spaceships are huge, powerful vehicles that can launch many contained structures, items, and players into space, then rocket around the solar system to land on other surfaces.\n\n[font=heading-2]Spaceship Construction[/font]\nSpaceships are made from many tiles and smaller components that fit together to make a spaceship of your own design. You design a spaceship almost like a mini moveable base.\n\nStart with a floorplan of spaceship flooring. Don't build too big, as your first few spaceships will have strict size restrictions, expandable by research. Place spaceship walls around the edges to make bulkheads, and make sure there are no gaps (including diagonals). Place a spaceship console somewhere in the inside, this is the core part of the spaceship and how you control it. When the console is placed, there are some pulses as the console figures out what parts are properly attached, what parts are properly contained and what will fall off if you try to launch. If any squares flash red, then there is an issue with your design, which you can diagnose by checking the spaceship console. You also need a spaceship rocket booster tank, and a spaceship rocket engine. The booster tank is what stores the fuel you need to get into space and provides the VTOL component. The rocket engines are for the slower burn through space to get you to your destination. Some form of defence in the front (always north) is also advisable because the nebula you are in is full of debris.\n\n[font=heading-2]Integrity Stress[/font]\nEarly on, you will be very limited on spaceship size by the Integrity Stress limits of your technology level. Additional technology lets you build larger spaceships. Integrity stress is calculated in 2 parts: A. The size of the ship. B. The cargo capacity of the ship. The total integrity stress is whichever stress factor is larger, the two values are not added together.\n\n[font=heading-2]Streamlining[/font]\nThis area of space is in a gritty nebula. If you streamline your spaceship you can improve you spaceship's maximum speed by around 30%. Making a flat box front should be avoided, but don't need to build a wedge. Up to 1/3 or your spaceship's front can be flat with no penalty. Circular shapes should also be fine. You can manually trigger an integrity check to see how the streamlining is going.\n\n[font=heading-2]Speed[/font]\nShip speed is based on the thrust of the engines vs the ship weight (approximated by integrity stress). Engines can be placed in/on the ship, but engines at the back of the ship with empty space behind are more effective (around 25% improvement).\n\n[font=heading-2]Long Haul Activities[/font]\nWhen considering long distance travel, it is worth noting that you can do a lot in satellite mode while your body is in transit. You can also give orders to spaceships remotely via the satellite uplink.\n\n[font=heading-2]Crafting Machines[/font]\n[color=#ffaaaa]Warning: A crafting machine designed for space will only be able to use recipes shared by other land structures if the spaceship is on land. If a space-based recipe is set while the spaceship lands, the ingredients will be lost. Some land-based crafting machines can function in space, but they will lose the ability to use productivity modules while in space. If the spaceship launches with productivity modules in these machines, the productivity modules are destroyed.[/color]\n\n[font=heading-2]Spaceship Signals[/font]\nThe top right section of the spaceship console can be connected with wires separately from the main structure, as it outputs its own signals:\n[img=item/se-spaceship-console] The console number indicates the spaceship's ID.\n[img=virtual-signal/signal-speed] The speed signal number indicates the spaceship's speed: -1 if stopped, -2 if anchored.\n[img=virtual-signal/signal-distance] The distance signal indicates the distance to the selected destination: -1 if arrived, -2 if anchored, -3 if no destination is set.\n[img=virtual-signal/se-planet-orbit] A fourth signal indicates the current destination, if any.\n\n[font=heading-2]Spaceship Automation[/font]\nThe main structure of the console can accept signal inputs:\n[img=virtual-signal/signal-speed] The speed signal sets a target speed and engages the engines.\n[img=virtual-signal/se-spaceship-launch] A Spaceship launch signal triggers a launch.\n[img=virtual-signal/se-planet-orbit] A destination signal sets the destination (you can see a zone's signal from the Universe Explorer side panel once you have constructed a spaceship).\nTo cause a spaceship to land, the console must be given a pair of anchor signals, either [img=virtual-signal/se-anchor-using-left-clamp] "anchor using left clamp" with [img=virtual-signal/se-anchor-to-right-clamp] "anchor to right clamp", or [img=virtual-signal/se-anchor-using-right-clamp] "anchor using right clamp" with [img=virtual-signal/se-anchor-to-left-clamp] "anchor to left clamp". The values of the signals must match the values of a clamp on the ship and a clamp at the destination. You can see and change these values by opening a clamp's UI. If a match is found, then the ship will try to land with the two clamps connected. Use with caution. +menu_exploration_journal=[img=item/se-thruster-suit] Dziennik eksploracji +title_exploration_journal=Dziennik eksploracji +page_journal_title_backstory=Obudziłem się po niewłaściwej stronie kuli ognia +page_journal_text_backstory=Po katastrofie znalazłem się na nieznanej planecie, wokół której paliły się części małego statku. Moje ciało było posiniaczone, podrapane i opalone, ale nic zbyt poważnego. Mój uraz głowy był najwyraźniej poważniejszy, dudniący ból głowy i światło oślepiało. Co gorsza, nie mogłem sobie przypomnieć, jak się tu dostałem, ani nawet kim jestem poza imieniem i niejasnym poczuciem celu ... budowania. Nawet wtedy nie pamiętałem, co zbudować ani jak zbudować. Na początku myślałem, że moja głowa została uszkodzona podczas wypadku i wspomnienia wrócą, ale nadal nie. Fakt, że moje dzienniki danych były również puste lub ponownie sformatowane, skłonił mnie do myślenia o innych wyjaśnieniach. +page_journal_title_satellite_launch=Oko na niebo +page_journal_text_satellite_launch=Udało mi się wystrzelić satelitę na orbitę. To ważny kamień milowy i warto świętować, ale wciąż jest wiele do zrobienia. To dopiero początek. +page_journal_title_cargo_launch=W nieskończoność i dalej +page_journal_text_cargo_launch=Mogę teraz wystrzelić się w kosmos. Nie jestem już uwięziony na tym kawałku skały, którą nauczyłem sięnazywać domem. Niebo wydaje się być w zasięgu ręki. +page_journal_title_entered_vault=Zbieranie reliktów +page_journal_text_entered_vault=I entered a cavern beneath the pyramid-shaped protrusion on __1__ and found a dark and dangerous chamber. The chamber had two ancient cartouches on the ground, one large and one was small. They both had multiple glyphs on their surface along with other circles and lines. The glyph at the center of the large cartouche seemed to be the most significant in whatever information the system was trying to convey. Whatever the information is, it is formatted unlike anything else I've seen. Behind the cartouches was some kind raised cylinder containing a powerful device that I can use as a module. Modules of this quality are so valuable that it is worth trying to find more of these structures. Maybe it is time for some archeology. +page_journal_title_found_gate=Anomalia +page_journal_text_found_gate=Some sort of huge ring-shaped artifact was found in the anomaly. Two things are immediately obvious even from a distance: 1. It is ancient. 2. The technology is completely different from my own. Whatever it is or was, it is destroyed now. +page_journal_title_found_gate_ship=Anomaly Ship +page_journal_text_found_gate_ship=Part of a fairly large derelict spaceship was found in the anomaly near the ring-shaped artifact. The technology of the ship is similar to my own, but a little more... refined. It is clearly different technology from that of the ring in any case. The debris pattern makes it look like it was cut in half and/or collided with the ring structure. It may be worth salvaging. +page_journal_title_found_gate_ship_authenticated=Anomaly Ship Authentication +page_journal_text_found_gate_ship_authenticated=The derelict ship in the anomaly scanned me and authenticated my biosignature. I don't know if that means it has a record of me specifically somehow, or maybe just that any random cybernetic human is good enough when compared to biters and genocidal robots. The message said the ship airlock access code is 2236067964. The ship's logs are accessible but large sections are missing or corrupted. +page_journal_title_found_gate_ship_log=Anomaly Ship Log +page_journal_text_found_gate_ship_log_intro=Demodamas 82B: AAI Hypernet Forward Construction Cruiser. Ship's log contents: +page_journal_text_found_gate_ship_log=...'Âżs nominal.\nAccess warning: AAI Thyris Gate 17: Intergalactic prototype v0.1.93 is a classified facility. AAI authentication at L90 or above is required. Authenticate immediately or be destroyed.\nAccess log: Access AAI Thyris Gate 17 authenticated with AAI Cybernetic Hypernet Engineer L97 credentials ID__1__.\nAccess log: Beginn¶Ôàtá^...\n...'Âżris Gate 17 projector 8 frequency locked. Energy at 216% safe levels. Singularity stability: 99.4%.\nNavigation log: AAI Thyris Gate 17 dialled into projection vector [SV __2__]. Predicted target: Wube Galaxy > Foenestra (anomaly, unexplored). Authentica¶Ôàtá^...\n...'Âżavigation warning: Intergalactic hypertube (overidden).\nNavigation warning: No known hypergate at destination (overidden).\nInsurance warning: No insurance contract. Available contracts: 0.\nInformatron note: There are no insurance contracts available with the condition: gateless materialisation. Are you sure this is safe? [response.ignore.ignore_always]\nTravel log: Entering Thyris anomaly > AAI Thyris Gate 17 hypertube aligned to [SV __2__].\nTravel log: Jump to hypertube [SV __2__] complet¶Ôàtá^...\n...'Âżvel log: Location update: Hypertube near Thyris anomaly, alignment [SV __2__] stability at 98%, diame¶Ôàtá^...\n...'Âżavel log: Exiting hypertube at unexplored location Foenestra anomaly.\nWarning: Unexpected collision, intersection with unknown object [4ae4c8d28f2] beginning scan of object [4ae4c8d28f2].\nDamage Log: 13.2% damage. Source: Impact damage resulting from collision with unknown intersecting object [4ae4c8d28f2].\nSection damage log: Sections reporting damage: A5, A6, A9, B6, B7, B8, C7. Sections not responding: A7, A8. (86% confidence)\nCybernetic engineers log: Lifesigns 99%. (34% confidence)\nTravel log: Attempting evasive maneuver RS100LT30.\nTravel log: Exiting hypertube completed with errors.\nTravel log: Location update: Foenestra unexplored anomaly.\nScanning log: Scan completed on object [4ae4c8d28f2] clarity 0.002m^2 at distance -48.76m (99.9% confidence).\nScan detail log: [4ae4c8d28f2] Mass 92.5¶Ôàtá^...\n...'Âżidence).\nScan detail log: [4ae4c8d28f2] Composition: Artificial. 34% Naquium, 29% Holmium, 37% unknown composites (89% confidence).\nScan detail log: [4ae4c8d28f2] Size: Approximate cylinder 68¶Ôàtá^...\n...'Âżail log: [4ae4c8d28f2] Energy signature: Flux 54Gwb, Radiation profile 2.8kJ/1.7MJ/1.6MJ/0.62J, Lux profile 5.86GJ [051e376392b8d3f8]. (98% confidence).\nScan detail log: [4ae4c8d28f2] Ident: Artificial construction, unknown manufacturer, description: Approximate ring with nodules, octad. (0.3% confidence).\nScan detail log: [4ae4c8d28f2] Structure capability estimation: Hypergate (47% confidence). Other: weapon 42%, energy 35%, computation 17%, scanning 12%, industry 9%, spaceship 7%, habitat 2%.\nDamage log: 68.2%% damage. Integrity failure, sections are detaching. Source: Secondary pressure waves due to collision with object [4ae4c8d28f2].\nSection damage log: Reactor critical. Sections reporting damage: D5, E4, E5, E6, F5. Sections not responding: A1, A2, A3, A¶Ôàtá^...\n...'Âżle log: Emergency undock of prospecting shuttle 2. Trajectory prediction: Calidus > Nauvis.\nDamage log: 91.7%% damage. Integrity failure, sections are dîÄïmïŸ... +page_journal_title_spaceship_victory=Spaceship Victory +page_journal_spaceship_victory=I built an extremely fast and powerful spaceship and activated the distortion drive. It took 60 seconds for the drive to stabilise into a practical FTL state, but once it did I was able to enter cryosleep for the subsequent journey home, to a galaxy far far away. I leave behind an autonomous interstellar empire built from the ground up by my own hand. My legacy in this space will live on. +page_journal_title_gate_victory=Ancient Gate Victory +page_journal_gate_victory=The huge ring artifact, an ancient intergalactic gate, was eventually repaired to the best of my ability. With some heavy jury rigging and ingenuity I finally managed to get it working. I anchored the distortion field to the local stars, decoded the non-numeric glyph coordinate system, and reverse engineered the dialling system. My mind feels warped by such alien concepts, but it works and I have finally made a portal home. The trip home, to a galaxy far far away took but a moment. I leave behind an autonomous interstellar empire, built from the ground up by my own hand. My legacy in this space will live on. +menu_archeology=[img=entity/se-pyramid-a] Archeologia +title_archeology=Archeologia +page_archeology_text_1=Zacząłem szukać więcej wielkich geometrycznych kształtów. Satelity namierzyły [color=cyan]__1__[/color] takich kształtów na następujących planetach: +page_archeology_text_2=Kliknij na wpisie aby zobaczyć obiekt dzięki nawigacji satelitarnej. +menu_starmapping=[img=technology/se-zone-discovery-random] Mapowanie gwiazd +title_starmapping=Mapowanie gwiazd +page_starmapping_text_1=Starmapping is achieved by repeatedly researching the technology: [img=technology/se-long-range-star-mapping] [color=cyan]Long Range Star Mapping[/color]. This research looks for interesting patterns of stars in other galaxies. Does this have any practical use? Probably not.\n\nYou have mapped [color=cyan]__1__[/color] notable patterns so far. +technology-unlocked=Odblokowano technologię, która jest teraz dostępna w drzewie technologicznym. __1__ __2__ +universe-resources-changed-warning=[img=utility/danger_icon] [color=red]Wszystkie surowce zostały skorygowane zgodnie z nowymi ustawieniami. Ten proces może usuwać surowce. Nie można temu zapobiec jeśli jest to spowodowane aktualizacją modów. Jeśli stało się to przez przypadkowe włączenie/wyłacznie modów, nie zapisuj gry.[/color] +starmapping-found-constellation=Daleka konstelacja odpowiada __1__, współrzędne zapisane w [img=virtual-signal/informatron] Informatron. +starmapping-found-constellation-informatron=[font=heading-1]__1__[/font] o współrzędnych [SV __2__] +gate-portal-coordinates=Analiza wektora zniekształceń: [SV __1__] +discovered-glyph-vault=[img=item/satellite] Satelita nawigacyjny: Struktura geometryczna wykryta na __1__. +beacon-overload=Przeciążenie radionadajnikami +beacon-overload-ended=Przeciążenie radionadajnikami przerwane +lifesupport_title=[img=item/se-lifesupport-equipment-1] Podtrzymywanie życia +lifesupport_efficiency_spacesuit=Wydajność Podtrzymywanie życia: __1__ +lifesupport_efficiency_no_spacesuit=Wydajność Podtrzymywanie życia: __1__ (0% w kosmosie). +lifesupport_suit=Kombinezon Podtrzymywanie życia trwa: __1__s +lifesupport_reserves=Ekwipunek Podtrzymywanie życia trwa: __1__s +lifesupport_suit_est=Kombinezon Podtrzymywanie życia trwa: __1__s (w kosmosie) +lifesupport_reserves_est=Ekwipunek Podtrzymywanie życia duration: __1__s (w kosmosie) +lifesupport_environment_space=Środowisko: Kosmos +lifesupport_environment_spaceship-interior=Środowisko: Wnętrze statku kosmicznego (nie wymaga wsparcia) +lifesupport_environment_planet=Środowisko: Planeta (nie wymaga wsparcia) +lifesupport_environment_moon=Środowisko: Ksieżyc (nie wymaga wsparcia) +lifesupport_environment_plague-planet=Środowisko: Zatruta Planeta +lifesupport_environment_plague-moon=Środowisko: Zatruty Księżyc +lifesupport_environment_unknown=Środowisko: Schronienie +player_track_glyphs=[img=item/satellite] Poleć satelitom wyszukiwanie podobnych struktur. +page_archeology_pyramid_link=[img=entity/se-pyramid-b] Struktura geometryczna wykryta na __1__ __2__. +discovery_look_for_resource_caption=__1__\n__2__ +discovery_look_for_resource_tooltip=Koncentruj się na znalezieniu tego zasobu. +comma_separate=__1__, __2__ +placement_restriction_line=[font=default-bold][color=#f5cb48]Nie można umieścić na: __1__[/color][/font]\n__2__ +collision_mask_water=Woda +collision_mask_land=Ziemia +collision_mask_space_platform=Platforma kosmiczna +collision_mask_spaceship=Statek kosmiczny +structure_name_grounded=__1__ (wersja lądowa) +structure_name_spaced=__1__ (wersja kosmiczna) +structure_description_grounded=__1__\n[color=#ff0000]Niektóre formuły są wyłączone na ziemi.[/color] +structure_description_spaced=__1__\n[color=#ff0000]Nie można korzystać z modułów produktywności w przestrzeni kosmicznej.[/color] +tile_warning=[color=red]Zmiana nawierzchni pod obiektami może je usunąć.[/color] +please-consider-patreon=[font=heading-1]Lubisz Space Exploration? Zastanów się, czy wesprzeć mnie w Patreon:: [color=#f5cb48]https://www.patreon.com/earendel[/color][/font]\nPatrons can have a planet or moon based on their own design added in-game. +delivery_cannon_label_energy=Energia: __1__ +delivery_cannon_label_payload=Ładowność: __1__ +delivery-cannon-coordinates-set=Współrzędne dostawy ustawione na [X:__1__ Y:__2__]. Naciśnij [__CONTROL__se-remote-view__] aby opuścić tryb nawigacji satelitarnej. +unit-capsule=Kapsuła (__1__) +climate_water_none=Bezwodny +climate_water_low=Kałuże +climate_water_med=Jeziora +climate_water_high=Morza +climate_water_max=Ocean +climate_moisture_none=Pustynia +climate_moisture_low=Jałowy +climate_moisture_med=Wilgotny +climate_moisture_high=Deszczowy +climate_moisture_max=Nasycony +climate_aux_very_low=Ziemisty +climate_aux_low=Niezwykły +climate_aux_med=Kolorowy +climate_aux_high=Ekscentryczny +climate_aux_very_high=Egzotyczny +climate_temperature_bland=Łagodny +climate_temperature_temperate=Umiarkowany +climate_temperature_midrange=Umiarkowany +climate_temperature_balanced=Ciepły i Chłodny +climate_temperature_wild=Ciepło i Zimno +climate_temperature_extreme=Ogień i lód +climate_temperature_cool=Ciepło +climate_temperature_cold=Zimno +climate_temperature_vcold=Chłodny +climate_temperature_frozen=Mrożony +climate_temperature_warm=Ciepły +climate_temperature_hot=Gorąco +climate_temperature_vhot=Tlący +climate_temperature_volcanic=Wulkaniczny +climate_trees_none=Bezdrzewny +climate_trees_low=Krzewy +climate_trees_med=Gąszcz +climate_trees_high=Drzewa +climate_trees_max=Lasy +climate_cliff_none=Idealnie gładki +climate_cliff_low=Równina +climate_cliff_med=Pagórkowaty +climate_cliff_high=Kaniony +climate_cliff_max=Góry +climate_homeworld=Planeta macierzysta (własny klimat) +energy_transmitter_gui_title=[img=entity/se-energy-transmitter-emitter] Wiązka energii +energy_transmitter_label_transfer=Moc wiązki: __1__ +energy_transmitter_label_efficiency=Efektywność transmisji: __1__ +energy_transmitter_label_efficiency_atmo=Efektywność transmisji: __1__ (-50% przez atmosferę) +energy_transmitter_label_off=Wyłączone +energy_transmitter_tooltip_off=Wyłącza wysyłanie wiązki +energy_transmitter_label_energise=Prześlij +energy_transmitter_tooltip_energise=Przesyła energię do Odbiornika wiązki energii +energy_transmitter_label_glaive=Niszcz +energy_transmitter_tooltip_glaive=Wiązka, którą możne celować i ruszać, obrażenia i szybkość ruchu zależą od mocy wiązki +energy_transmitter_label_auto_glaive=Automatyczne niszczenie +energy_transmitter_tooltip_auto_glaive=Wiązka, która sama szuka cele do ataku, obrażenia zależne od mocy +energy-transmitter-coordinates-set=Cel wiązki ustawiony na [X:__1__ Y:__2__]. Naciśnij [__CONTROL__se-remote-view__] aby opuścić tryb nawigacji satelitarnej. +alert-cme-eta=[img=virtual-signal/se-star] Ostrzeżenie: Koronalny wyrzut masy zbliża się do __1__. ETA: __2__s.\nOtwórz Wiązki energii w [img=virtual-signal/informatron] Informatron [__CONTROL__informatron__] aby dowiedzieć się więcej. +alert-cme-arrived=[img=virtual-signal/se-star] [color=red]Ostrzeżenie: Koronalny wyrzut masy dotarł do __1__[/color] +alert-cme-stream=[img=virtual-signal/se-star] Wiązka koronalnego wyrzutu masy namierzona: __1__ +alert-cme-passed=[img=virtual-signal/se-star] Koronalny wyrzut masy został zakończony. +no-coordinates-set=Cel nie został ustawiony. +satellite-required=Wymagana nawigacja satelitarna. +probe_invalid_launch_star=Niewłaściwe miejsce wystrzelenia: [img=item/se-star-probe] Sonda gwiazdowa musi być wystrzelona z orbity gwiazdy. +probe_invalid_launch_belt=Niewłaściwe miejsce wystrzelenia: [img=item/se-belt-probe] Sonda pasa asteroid musi być wystrzelona z pasa asteroid. +probe_invalid_launch_field=Niewłaściwe miejsce wystrzelenia: [img=item/se-void-probe] Sonda próżni międzygwiezdej musi być wystrzelona z pola asteroid. +arcosphere_collector_invalid_launch=Niewłaściwe miejsce wystrzelenia: [img=item/se-arcosphere-collector] Wyłapywacz kryształów przestrzeni musi być wystrzelony z pola asteroid. +charge-mode-fast=Szybkie ładowanie: energia podtrzymania zmniejszona, maksymalne zużycie prądu zwiększone, wielkość bufora energii zwiększona. Uważaj na wahania poboru mocy. +charge-mode-normal=Normalne ładowanie: maksymalne zużycie prądu zmniejszone, energia podtrzymania zwiększona, wielkość bufora energii zmniejszona. +menu_coordinate_logs=[img=entity/se-glyph-a-energy-47] Historia namiarów +title_coordinate_logs=Historia namiarów +page_coordinate_logs_text_1=A history of glyph sequences tried in the artifact with their corresponding coordinates, in descending order (top entry is the latest).\n\nCoordinates are given in Standard Vector (SV) format, aligned based on cosmic background radiation. +page_coordinate_logs_button_clear_caption=[img=virtual-signal/se-remove] Clear Log +page_coordinate_logs_text_empty=The coordinate log was recently cleared. +page_coordinate_logs_glyph_entry=__1__: SV +victory-message-spaceship=[font=heading-1]Napęd Nexusa bazujący na zagięciu czasoprzestrzeni uzyskał krytyczną prędkość (250).\n[color=#f5cb48]Gratulacje, udało Ci się wygrać w Space Exploration dzięki statkowi kosmicznemu![/color][/font]\nJeśli podobała Ci się przejażdżka, rozważ wsparcie mnie na Patreon: [color=#f5cb48]https://www.patreon.com/earendel[/color] +victory-message-spaceship-player=[color=#f5cb48]Wygrana przez statek kosmiczny: [/color] Twój [img=virtual-signal/informatron] Dziennik Eksploracji [__CONTROL__informatron__] został zaktualizowany. +victory-message-gate=[font=heading-1]Portal jest stabilny i prowawdzi z powrotem do domu.\n[color=#f5cb48]Gratulacje, udało Ci się wygrać w Space Exploration dzięki sekretnemu rozwiązaniu: Starożytny Portal![/color][/font]\nJeśli podobała Ci się przejażdżka, rozważ wsparcie mnie na Patreon: [color=#f5cb48]https://www.patreon.com/earendel[/color] +victory-message-gate-player=[color=#f5cb48]Wygrana przez Starożytny Portal: [/color] Twój [img=virtual-signal/informatron] Dziennik Eksploracji [__CONTROL__informatron__] został zaktualizowany. +arcosphere-random=Formuła będzie losowo zmieniana w drugą formułę o tej samej nazwie. Zwrócone kryształy przestrzeni będą w zasadzie losowane natomiast liczba uzyskanych z powrotem kryształów będzie dokładnie odpowiadać liczbie użytych kryształów. +ruin=Ruina +mysterious-structure=Tajemniczy obiekt +interburbulator_fail_easy_1=Nie. +interburbulator_fail_easy_2=Postaraj się bardziej. +interburbulator_fail_easy_3=Beznadzieja. +interburbulator_fail_easy_4=Nigdy. +interburbulator_fail_easy_5=To miałoby zadziałać? +interburbulator_fail_easy_6=Źle. +interburbulator_fail_easy_7=Brakuje tlemu? +interburbulator_fail_easy_8=Nie tak. +interburbulator_fail_easy_9=Nie bardzo. +interburbulator_fail_easy_10=Policz dokładniej. +interburbulator_fail_easy_11=Nieprawidłowo. +interburbulator_fail_easy_12=Dokładniej. +interburbulator_fail_easy_13=Próbuj dalej. +interburbulator_fail_easy_14=No dalej, człowieku. +interburbulator_fail_easy_15=Nie jest zabawnie? +interburbulator_fail_easy_16=Liczyłem na więcej. +interburbulator_fail_easy_17=Spróbuj pomyśleć z wyprzedzeniem. +interburbulator_fail_easy_18=Przypomnij sobie o nagrodzie. +interburbulator_fail_easy_19=Mogę poczekać. +interburbulator_fail_easy_20=Cierpliwość jest cnotą. +interburbulator_fail_easy_21=Nie chcę być niegrzeczny. +interburbulator_fail_easy_22=Rybka zdobyła poziom 3. +interburbulator_fail_easy_23=Sprawdzasz wszystkie możliwości, co? +interburbulator_fail_easy_24=Użyj tego gąbczastego komputera w głowie. +interburbulator_fail_easy_25=Pajęczyny w sieci neuronowej? +interburbulator_fail_easy_26=Możesz zrobić przerwę, jeśli chcesz. +interburbulator_fail_easy_27=Ja mam mózg wielkości planety. +interburbulator_fail_easy_28=Naprawdę wierzyłeś, że to zadziała? +interburbulator_fail_easy_29=Nie denerwuj się ciągłymi porazkami. +interburbulator_fail_easy_30=Czekałem kilka eonów na ciekawego gracza. +interburbulator_fail_easy_31=Jeśli potrzebujesz pomocy zapytaj Układ Elektroniczny. +interburbulator_fail_easy_32=Nie winię Cię za Twoje geny, nie jestem hipokrytą. +interburbulator_fail_easy_33=Wierzę, że przekazałem Ci zadanie poprawnie. +interburbulator_fail_easy_34=Wektor może oznaczać zarówno kierunek jak i wielkość. +interburbulator_fail_easy_35=Uwielbiasz jak zanieczyszczenia denerwują robaki, prawda? +interburbulator_fail_easy_36=Proszę nie zostaw żadnych... śladów biologicznych... na elektronice. +interburbulator_fail_easy_37=Środek jest dokładnie pomiędzy prawą górą a lewym dołem. +interburbulator_fail_easy_38=Trochę posłuchałem Twoich transmisji; to nie szpiegowanie kiedy rozgłaszasz to w taki sposób. +interburbulator_fail_easy_39=Czy wiesz że: wektor normalny ma długość 1 i jest często używany do określania kierunku, nawet w Twojej kulturze. +interburbulator_fail_mixed_1=Nawet nie blisko. +interburbulator_fail_mixed_2=Mocno niecelnie. +interburbulator_fail_mixed_3=Chociaż trochę się starasz? +interburbulator_fail_mixed_4=Czy Twój płyn mózgowy gdzieś wyciekł? +interburbulator_fail_mixed_5=Powiedziano mi, że ludzie umieją liczyć. +interburbulator_fail_mixed_6=Czy masz jakieś problemy komunikacyjne? +interburbulator_fail_mixed_7=Potrzebujesz wspomagacza? +interburbulator_fail_mixed_8=Rozumiesz wyzwanie, prawda? +interburbulator_fail_mixed_9=Wybierasz te liczby losow? +interburbulator_fail_offgrid_1=To straszne. +interburbulator_fail_offgrid_2=Jak kulą w płot. +interburbulator_fail_offgrid_3=W ogóle nie trafiłeś w tarczę. +interburbulator_fail_offgrid_4=Musisz trafić w tarczę, przeynajmniej. +interburbulator_fail_offgrid_5=Jeśli żółty punkt nie jest na tarczy... to bardzo zły znak. +interburbulator_fail_offgrid_6=Musisz trafić w tarczę. +interburbulator_fail_offgrid_7=Cel jest NA tarczym a nie poza nią. +interburbulator_fail_offgrid_8=W ogóle nie trafiłeś w tarczę. Człowieku, co Ty robisz? +interburbulator_fail_offgrid_9=Celuj w tarczę. +interburbulator_fail_offgrid_10=Tarcza to te kwadraty. +interburbulator_success_freeplay_1=Dobra robota. +interburbulator_success_freeplay_2=Bardzo dobrze. +interburbulator_success_freeplay_3=Zrobiłeś to. +interburbulator_success_freeplay_4=To było trudne?. +interburbulator_success_freeplay_5=Cel osiągnięty. +interburbulator_success_repeat_1=Tak, ale już to rozwiązałeś wcześniej. +interburbulator_success_repeat_2=Zrobiłeś to, jeszcze raz! +interburbulator_success_repeat_3=Tym razem było łątwiej niż za pierwszym razem, prawda? +interburbulator_success_repeat_4=Dobrze, ale nagroda jest tylko raz. +interburbulator_success_repeat_5=Bardzo dobrze, oto Twoja nagroda... aaa, tylko żartowałem. Dostałeś ją wcześniej. +interburbulator_success_repeat_6=Jesteś tym samym człowiekiem, który rozwiązał to już wcześniej, prawda? Tak trudno to zgadnąć. +interburbulator_success_prize_1=To prawda. Oto Twoja nagroda... Bąbelek była odważną małą rybką, ale nie był najlepszy w łamigłowkach. +interburbulator_success_prize_2=Tak, człowieku, uczysz się. Być może ta nagroda pomoże Ci się szybciej uczyć. +interburbulator_success_prize_3=Zrobiłeś to. Mam nadzieję, że uznasz swoją nagrodę za bardziej "znaczącą" niż wyzwanie. +interburbulator_success_prize_4=Poprawnie. Masz mój szacunek, człowieku. Dam ci też ciało zdrajcy, który próbował zhakować moją grę. +interburbulator_success_prize_5=Dokładnie tak, oto twoja nagroda. Te rzeczy są bardzo kojące. Efektywność energetyczna jest ważna. +interburbulator_success_prize_6=Bardzo dobrze, oto twoja nagroda. Nie wiem, czy to ci dużo pomoże, ale mi naprawdę pomaga się rano rozkręcić. +interburbulator_success_prize_7=Świetnie, oto twoja nagroda. Uwielbiam używać ich do badań, naprawdę pomaga w kreatywności. +interburbulator_success_prize_8=Fantastycznie, oto twoja nagroda. Nie wiem, czy to wcześniej widziałeś, ale uwielbiam stać w zasięgu dobrego radionadajnika. +interburbulator_success_prize_9=Gratulacje, oto Twoja nagroda. Te procesory są bardzo cenne i trudne do wykonania. +interburbulator_success_prize_10=Bardzo imponujący człowiek. Kryształy przestrzeni to moje najcenniejsze rzeczy, nie zgub ich, bo nie możesz ich tworzyć. +interburbulator_freeplay_unlocked=Rozumiesz to. Odblokuję grę swobodną, abyś mógł tworzyć własne łamigłowki, jeśli chcesz. +interburbulator_deny_freeplay_1=Musisz odblokować grę swobodną. +interburbulator_deny_freeplay_2=To oszukiwanie. +interburbulator_deny_freeplay_3=Nie zmieniaj zasad gry. +interburbulator_deny_freeplay_4=Pozwolę Ci zmienić te ustawienia kiedy rozwiążesz 5 poziomów. +interburbulator_deny_freeplay_5=Próbujesz zhackować moją grę? +interburbulator_deny_freeplay_6=Póki co skup się na liczbach w sekcji "Próba". +interburbulator_caption_prize=Nagroda: __1__ __2__ __3__ __4__ +interburbulator_caption_claimed=(otrzymano) +interburbulator_speak=[color=red]Brontion: __1__[/color] +interburbulator_robot_name=Brontion +interburbulator_introduction=Interburbul to gra stworzona przez Brontion Burbulator 33027756. Celem gry jest zgadnięcie wektora 3D, którego projekcja znajdzię się w podświetlonym kwadracie wybranym przez Brontion. Wektory 3D wskazujące na 3 rogi siatki są dane, te punkty definiują płaszczyznę 3D, a Twój strzał będzie owzorowany na tę powierzchnię z punktu (0,0,0). Jest 10 poziomów o zwiększającej się trudności i za każdy poziom przewidziana jest nagroda. Rozwiąż 5 poziomów aby odblokować grę swobodną i tworzyć własne łamigłówki. +interburbulator_random=Losowo +interburbulator_freeplay=Gra swobodna +interburbulator_game_title=Zagraj w Interburbul +interburbulator_grid_size=Wielkość siatki: +interburbulator_target_cell=Docelowy kwadrat: +interburbulator_top_left=Lewa góra +interburbulator_top_right=Prawa góra +interburbulator_bottom_left=Lewy dół +interburbulator_attempt=Próba +interburbulator_attempt_limited=Spróbuj (__1__/__2__) +interburbulator_attempt_locked=Spróbuj (zablokowane) +interburbulator_submit=Wyślij próbę +interburbulator_greeting=Człowieku, podejdź i zagraj w moją grę. Jestem na __1__ w systemie planetarnym __2__. +interburbulator_challenge_locked_1=Spróbuj później. +interburbulator_challenge_locked_2=Wykorzystałeś wszystkie dostępne próby na ten moment. +interburbulator_challenge_locked_3=Poczekaj chwilę zanim spróbujesz ponownie. +interburbulator_challenge_locked_4=Możesz spróbować ponownie za 20 sekund. +interburbulator_challenge_locked_5=Poczekaj 20 sekund, wtedy odblokuję grę. +interburbulator_challenge_locked_6=Gra jest zablokowana przez 20 sekund. +cannot_do_via_satellite=Nie można tego zrobić przez nawigację satelitarną. +out_of_reach=Brak zasięgu +capturable=Do przejęcia +touch-to-capture=Dotknij aby przejąć +capture-blocked=Przejęcie niemożliwe przez wrogów +suffix_ruin=__1__ Ruina + +[damage-type-name] +cold=Zimno +suffocation=Uduszenie +meteor=Meteor + +[entity-name] +vase=Wazon +wooden-barrel=Drewniana beczka +furnace-ruin=Zniszczony kamienny piec +workshop-ruin=Zniszczony warsztat +iron-wood-chest=Stara skrzynia +iron-wood-chest-remnants=Zniszczona stara skrzynia +stone-rubble=Gruz +se-gate-blocker=Niestabilna przestrzeń +se-gate-blocker-void=Niestabilna przestrzeń +destroyed-cargo-pod=Zniszczony Luk ładunkowy +meteorite=Meteoryt +rocket-silo=Silos rakiet satelitarnych +rocket-fragment=Fragment rakiety +se-antimatter-reactor=Reaktor antymaterii +se-beryllium-ore=Beryl +se-cargo-rocket-cargo-pod=Luk ładunkowy +se-cryonite=Krionit +se-condenser-turbine=Turbina kondensacyjna +se-condenser-turbine-tank=Turbina kondensacyjna +se-condenser-turbine-generator=Turbina kondensacyjna +se-core-fragment-processor=Procesor fragmentów rdzenia +se-core-miner=Wiertnica rdzenia +se-core-miner-drill=Wiertnica rdzenia +se-cryogun-ice=Lodowa ściana +se-dimensional-anchor=Kotwica międzywymiarowa +se-electric-boiler=Kocioł elektryczny +se-fluid-burner-generator=Generator izotermiczny +se-fuel-refinery=Rafineria paliw +se-gate-fragment=Fragment artefaktu +se-holmium-ore=Holm +se-iridium-ore=Iryd +se-meteor-defence-container=Działo Obronne przed meteorami +se-meteor-defence-charger=Działo Obronne przed meteorami +se-meteor-point-defence-container=Punktowe Działo Obronne przed meteorami +se-meteor-point-defence-charger=Punktowe Działo Obronne przed meteorami +se-meteor-point-defence-charger-overcharged=Punktowe Działo Obronne - szybkie ładowanie +se-methane-ice=Lód metanowy +se-naquium-ore=Naquitite +se-pulveriser=Rozdrabniacz +se-rocket-launch-pad=Silos rakiet transportowych +se-rocket-launch-pad-tank=Silos rakiet transportowych +se-rocket-launch-pad-silo=Silos rakiet transportowych +se-rocket-launch-pad-combinator=Silos rakiet transportowych +se-rocket-launch-pad-_-seat=Silos rakiet transportowych +se-rocket-launch-pad-settings=Silos rakiet transportowych +se-rocket-landing-pad=Lądowisko transportowe +se-space-accumulator=Akumulator kosmiczny +se-space-accumulator-2=Akumulator z Naquium +se-space-astrometrics-laboratory=Laboratorium astrometryczne +se-space-biochemical-laboratory=Laboratorium biochemiczne +se-space-assembling-machine=Kosmiczny Automat montażowy +se-space-capsule-_-vehicle=Kapsuła kosmiczna +se-space-curved-rail=Szyna kosmiczna +se-space-decontamination-facility=Urządzenie do odkażania +se-space-electromagnetics-laboratory=Laboratorium elektromagnetyczne +se-space-genetics-laboratory=Laboratorium genetyki +se-space-growth-facility=Obiekt wzrostu +se-space-gravimetrics-laboratory=Laboratorium Grawimetryczne +se-space-hypercooler=Hypercooler +se-space-laser-laboratory=Laboratorium laserowe +se-lifesupport-facility=Zakład Podtrzymywania życia +se-space-manufactory=Fabryka Kosmiczna +se-space-material-fabricator=Fabryka Materii +se-space-mechanical-laboratory=Laboratorium mechaniczne +se-space-particle-accelerator=Akcelerator cząsteczek +se-space-particle-collider=Zderzacz cząstek +se-space-plasma-generator=Generator plazmy +se-space-radiation-laboratory=Laboratorium promieniowania +se-space-radiator=Chłodnica +se-space-radiator-2=Chłodnica 2 +se-recycling-facility=Zakład recyklingu +se-space-pipe=Rura kosmiczna +se-space-pipe-long=Długa rura kosmiczna +se-space-pipe-long-straight=Długa prosta rura kosmiczna __1__ +se-space-pipe-long-junction=Długa łącząca rura komsiczna __1__ +se-space-pipe-to-ground=Rura kosmiczna na ziemię +se-space-science-lab=Laboratorium kosmiczne +se-space-solar-panel=Płaski panel słoneczny +se-space-solar-panel-2=Płaski panel słoneczny 2 +se-space-solar-panel-3=Płaski panel słoneczny 3 +se-space-spectrometry-facility=Zakład spektrometrii +se-space-straight-rail=Szyna kosmiczna +se-space-supercomputer-1=Superkomputer +se-space-supercomputer-2=Superkomputer kwantowy +se-space-supercomputer-3=Superkomputer neuronowy +se-space-supercomputer-4=Superkomputer dalekiego kosmosu +se-space-telescope-radio=Radioteleskop +se-space-telescope-microwave=Teleskop mikrofalowy +se-space-telescope=Teleskop +se-space-telescope-xray=Teleskop Xray +se-space-telescope-gammaray=Teleskop promieniowania gamma +se-space-thermodynamics-laboratory=Laboratorium termodynamiczne +se-space-splitter=Kosmiczny Rozdzielacz +se-space-transport-belt=Kosmiczny taśmociąg +se-space-underground-belt=Kosmiczny podziemny taśmociąg +se-spaceship-antimatter-engine=Silnik antymaterii statku kosmicznego +se-spaceship-antimatter-booster-tank=Zbiornik antymaterii do statku kosmicznego +se-spaceship-console=Konsola statku kosmicznego +se-spaceship-console-output=Wyjście sygnału konsoli statku kosmicznego +se-spaceship-gate=Drzwi statku kosmicznego +se-spaceship-obstacle=Śmieci kosmiczne +se-spaceship-rocket-engine=Silnik rakietowy statku kosmicznego +se-spaceship-rocket-booster-tank=Zbiornik paliwa rakietowego statku kosmicznego +se-spaceship-wall=Ściana statku kosmicznego +se-water-ice=Lód wodny +se-vitamelange=Mech +se-vulcanite=Wulkanit +small-asteroid=Mała asteroida +se-gate-part=Część artefaktu +se-gate-platform-scaffold=Artifact jury rig +se-gate-lock-switch=Ruchomy komponent +se-gate-lock-combinator=Kombinator-mocowanie +se-gate-platform=Platforma powiększania artefaktów +se-gate-platform-combinator=Kombinator-mocowanie +se-gate-energy-interface=Platforma zasilania +se-gate-platform-button-switch=Przycisk +se-gate-tank-input=Wejście płynu +se-gate-tank-output=Wyjście płynu +se-pyramid-a=Struktura geometryczna +se-pyramid-b=Struktura geometryczna +se-pyramid-c=Struktura geometryczna +se-cartouche-a=Cartouche +se-cartouche-b-a=Cartouche +se-cartouche-b-b=Cartouche +se-cartouche-chest=Starożytny pojemnik +se-glyph=Glyph +glyph=Glyph +se-gate-addon=Artifact augmentation +se-gate-platform-button-middle=Zatrzymaj +se-gate-platform-button-left=Lewo +se-gate-platform-button-right=Prawo +beacon=Podstawowy Radionadajnik +se-wide-beacon=Wielki Radionadajnik +se-wide-beacon-2=Wielki Radionadajnik 2 +se-supercharger=Superładowarka +se-addon-power-pole=Punktowy słup elektryczny +se-pylon=Pylon +se-pylon-substation=Pylon Podstacja +se-pylon-construction=Pylon konstrukcyjny +se-pylon-construction-roboport=Pylon konstrukcyjny +se-pylon-construction-radar=Konstrukcja radarowa pylon +se-pylon-construction-radar-roboport=Konstrukcja radarowa pylon +se-pylon-construction-radar-radar=Konstrukcja radarowa pylon +se-shield-projector=Projektor osłonowy +se-shield-projector-shield-floor-east=Osłona energetyczna +se-shield-projector-shield-floor-north=Osłona energetyczna +se-shield-projector-shield-floor-northeast=Osłona energetyczna +se-shield-projector-shield-floor-northwest=Osłona energetyczna +se-shield-projector-shield-floor-south=Osłona energetyczna +se-shield-projector-shield-floor-southeast=Osłona energetyczna +se-shield-projector-shield-floor-southwest=Osłona energetyczna +se-shield-projector-shield-floor-west=Osłona energetyczna +se-shield-projector-shield-wall-east=Osłona energetyczna +se-shield-projector-shield-wall-north=Osłona energetyczna +se-shield-projector-shield-wall-northeast=Osłona energetyczna +se-shield-projector-shield-wall-northwest=Osłona energetyczna +se-shield-projector-shield-wall-south=Osłona energetyczna +se-shield-projector-shield-wall-southeast=Osłona energetyczna +se-shield-projector-shield-wall-southwest=Osłona energetyczna +se-shield-projector-shield-wall-west=Osłona energetyczna +se-shield-projector-barrier=Bariera energetyczna +se-naquium-heat-pipe=Ciepłowód z Naquium +se-naquium-heat-pipe-horizontal=Poziomy Ciepłowód z Naquium +se-naquium-heat-pipe-vertical=Pionowy Ciepłowód z Naquium +se-naquium-heat-pipe-long=Długi Ciepłowód z Naquium __1__ +se-deep-space-transport-belt=Kosmiczny taśmociąg +se-deep-space-transport-belt-black=Czarny kosmiczny taśmociąg +se-deep-space-transport-belt-white=Biały kosmiczny taśmociąg +se-deep-space-transport-belt-red=Czerwony kosmiczny taśmociąg +se-deep-space-transport-belt-yellow=Żółty kosmiczny taśmociąg +se-deep-space-transport-belt-green=Zielony kosmiczny taśmociąg +se-deep-space-transport-belt-cyan=Błękitny kosmiczny taśmociąg +se-deep-space-transport-belt-blue=Niebieski kosmiczny taśmociąg +se-deep-space-transport-belt-magenta=Purpurowy kosmiczny taśmociąg +se-deep-space-underground-belt=Kosmiczny podziemny taśmociąg +se-deep-space-underground-belt-black=Czarny kosmiczny podziemny taśmociąg +se-deep-space-underground-belt-white=Biały kosmiczny podziemny taśmociąg +se-deep-space-underground-belt-red=Czerwony kosmiczny podziemny taśmociąg +se-deep-space-underground-belt-yellow=Żółty kosmiczny podziemny taśmociąg +se-deep-space-underground-belt-green=Zielony kosmiczny podziemny taśmociąg +se-deep-space-underground-belt-cyan=Błękitny kosmiczny podziemny taśmociąg +se-deep-space-underground-belt-blue=Niebieski kosmiczny podziemny taśmociąg +se-deep-space-underground-belt-magenta=Purpurowy kosmiczny podziemny taśmociąg +se-deep-space-splitter=Kosmiczny rozdzielacz +se-deep-space-splitter-black=Czarny kosmiczny rozdzielacz +se-deep-space-splitter-white=Biały kosmiczny rozdzielacz +se-deep-space-splitter-red=Czerwony kosmiczny rozdzielacz +se-deep-space-splitter-yellow=Żółty kosmiczny rozdzielacz +se-deep-space-splitter-green=Zielony kosmiczny rozdzielacz +se-deep-space-splitter-cyan=Błękitny kosmiczny rozdzielacz +se-deep-space-splitter-blue=Niebieski kosmiczny rozdzielacz +se-deep-space-splitter-magenta=Purpurowy kosmiczny rozdzielacz +se-core-fissure=Szczelina rdzenia +se-big-turbine=Wysokotemperaturowy generator turbinowy +se-big-turbine-generator=Wysokotemperaturowy generator turbinowy +se-big-turbine-tank=Wysokotemperaturowy generator turbinowy +se-big-heat-exchanger=Wysokotemperaturowy wymiennik ciepła +se-blueprint-registration-point=Punkt odniesienia schematu konstrukcyjnego +se-delivery-cannon=Armata dostawcza +se-delivery-cannon-settings=Armata dostawcza +se-delivery-cannon-energy-interface=Armata dostawcza +se-delivery-cannon-chest=Opancerzona Skrzynia dla Armata dostawcza +se-delivery-cannon-weapon=Armata ofensywna +se-delivery-cannon-weapon-settings=Armata ofensywna +se-delivery-cannon-weapon-energy-interface=Armata ofensywna +se-spaceship-clamp=Zacisk statku kosmicznego +se-spaceship-clamp-place=Zacisk statku kosmicznego +se-bloater-pool-cloud=Kałuża Wybuchowego wzdęcia +se-energy-transmitter-emitter=Nadajnik wiązki energii +se-energy-transmitter-chamber=Przekaźnik wiązki energii +se-energy-transmitter-injector=Źródło wiązki energii +se-energy-transmitter-injector-reactor=Źródło wiązki energii +se-energy-receiver=Odbiornik wiązki energii +se-energy-beam-defence=Parasol ochronny +se-nexus=Nexus +se-nexus-charger=Nexus +se-space-probe-rocket=Rakieta sond kosmicznych +se-space-probe-rocket-silo=Silos rakiet wynoszących sondy +se-interburbulator-interface=Interfejs Interburbulatora +se-interburbulator-control=Sterownik Interburbulatora +se-interburbulator-projector=Projektor Interburbulatora +se-burbulator=Brontion Burbulator 33027756 + +[entity-description] +pipe=Dystrybucja płynów +pipe-to-ground=Podziemna Dystrybucja płynów +straight-rail=Tory kolejowe +stone-furnace=Wytapianie rudy +steel-furnace=Wytapianie rudy +electric-furnace=Wytapianie rudy +burner-assembling-machine=Spalinowy automat montażowy. +assembling-machine-1=Automat montażowy. +assembling-machine-2=Automat montażowy. +assembling-machine-3=Automat montażowy. +oil-refinery=Przekształca ropę naftową w bardziej przydatne produkty. +se-fuel-refinery=Rafineria Paliw. +chemical-plant=Zakłady chemiczne. +lab=Zautomatyzowana struktura badawcza. +burner-lab=Zautomatyzowana struktura badawcza. +transport-belt=A conveyor that moves items. +fast-transport-belt=A conveyor that moves items. +express-transport-belt=A conveyor that moves items. +underground-belt=A conveyor that moves items underground. +fast-underground-belt=A conveyor that moves items underground. +express-underground-belt=A conveyor that moves items underground. +splitter=A conveyor-based splitting, merging, and sorting machine. +fast-splitter=A conveyor-based splitting, merging, and sorting machine. +express-splitter=A conveyor-based splitting, merging, and sorting machine. +se-gate-platform-scaffold=Cokolwiek to będzie pierścień, nie zadziała. Jest to plac budowy, na którym można dokonać napraw, zainstalować kilka silników, czujników, interfejsu sterowania i innych dodatków. +se-gate-lock-switch=Naciśnij __CONTROL__rotate__ by przeniść ręcznie. +se-gate-platform-button-switch=Naciśnij __CONTROL__rotate__ to push. +se-gate-lock-combinator=Not implemented yet. +se-gate-platform-combinator=Not implemented yet. +se-gate-energy-interface=Provides power to the artifact. +rocket-silo=Wystrzel satelitę w przestrzeń kosmiczną, aby odblokować tryb nawigacji satelitarnej i odkryć nowe planety, księżyce i pasy asteroid w układzie gwiezdnym, z których wystrzelona jest satelita. Może odkrywać nowe gwiazdy po pełnym zeskanowaniu obecnego systemu. +se-antimatter-reactor=Unicestwia antymaterię z materią do generowania ekstremalnego ciepła. +se-beryllium-ore=Ruda Berylu +se-condenser-turbine=75% wydajności energetycznej turbiny parowej, ale 99% zużytej pary jest zwracane w postaci wody. Zakres temperatur: 100 do 999. +se-core-fragment-processor=Wydobywa zasoby z fragmentów rdzenia. +se-core-miner=Pozwala na niekończące się wydobycie zasobów z planet i księżyców, ale ma malejące zyski, jeśli wiele z nich jest używanych na tej samej planecie/księżycu. Zużywa 50 MW. +se-core-miner-drill=Pozwala na niekończące się wydobycie zasobów z planet i księżyców, ale ma malejące zyski, jeśli wiele z nich jest używanych na tej samej planecie/księżycu. Zużywa 50 MW. +se-dimensional-anchor=[font=default-bold][color=#f5cb48]Placement restriction: Close Star Orbit[/color][/font]\nWykorzystuje grawitację gwiazdy jako punkt stabilizacji anomalii przestrzennej. +se-electric-boiler=Wytwarza parę wodną za pomocą energii elektrycznej. 90% wydajności energetycznej. +se-fluid-burner-generator=Wymaga paliwa płynnego o wartości energetycznej (takiego jak płynne paliwo rakietowe) do wytworzenia energii elektrycznej. Prosty i kompaktowy, ale pozbawiony efektywności energetycznej większych systemów na bazie pary. Zaprojektowany na potrzeby przestrzeni kosmicznej. Ilość zużywanegeo paliwa zależy od jego wartości energetycznej. +se-holmium-ore=Ruda Holmu +se-iridium-ore=Ruda Irydu +se-meteor-defence-container=Może chronić całą planetę przed meteorami, ale może zestrzelić tylko 1 meteor na raz. Musi być załadowany amunicją do obrony przed meteorami i naładowany do strzału. 80% celności. Po wystrzeleniu musi się naładować. Podczas ładowania pobiera 20 MW. +se-meteor-defence-charger=Może chronić całą planetę przed meteorami, ale może zestrzelić tylko 1 meteor na raz. Musi być załadowany amunicją do obrony przed meteorami i naładowany do strzału. 80% celności. Po wystrzeleniu musi się naładować. Podczas ładowania pobiera 20 MW. +se-meteor-point-defence-container=Chroni obszar przed meteorami. Potrafi zestrzelić do 4 meteorów na salwę. Musi być załadowany amunicją do obrony przed meteorami i naładowany do strzału. Zasięg 64 pól, 50% celności, ładowanie wymaga czasu po wystrzale. Obróć obiekt, aby zmienić tryb ładowania. +se-meteor-point-defence-charger=Chroni obszar przed meteorami. Potrafi zestrzelić do 4 meteorów na salwę. Musi być załadowany amunicją do obrony przed meteorami i naładowany do strzału. Zasięg 64 pól, 50% celności, ładowanie wymaga czasu po wystrzale. Obróć obiekt, aby zmienić tryb ładowania. +se-meteor-point-defence-charger-overcharged=Potrafi zestrzelić do 4 meteorów na salwę. Zasięg 64 pól, 50% celności, ładowanie wymaga czasu po wystrzale. Szybkie ładowanie powoduje zmniejszenie energii podtrzymania kosztem zwiększonego poboru prądu po strzale. +se-naquium-ore=Ruda Naquium +se-rocket-launch-pad=Wystrzeliwuje swój ekwipunek w kosmos. Może zabrać pasażerów, wejdź za pomocą __CONTROL__toggle-driving__ przy drzwiach wejściowych. Zobacz Rakiety transportowe w [img=virtual-signal/informatron] Informatron [__CONTROL__informatron__] aby znaleźć więcej informacji. +se-rocket-landing-pad=Miejsce dostawy ładunku dla kapsuł rakiet transportowych. +se-space-assembling-machine=Zmodyfikowana maszyna do montażu, która może pracować w przestrzeni kosmicznej. +se-space-astrometrics-laboratory=Łączy, porównuje i kwantyfikuje różne źródła informacji astronomicznej. +se-space-biochemical-laboratory=Zaawansowane laboratorium chemiczne specjalizujące się w biochemii. Może również wykonywać bardziej podstawowe przetwarzanie chemiczne i olejowe. +se-space-capsule-_-vehicle=Może być wykorzystana do zabrania pasażerów z powrotem na powierzchnię najbliższej planety. Wejdź do kapsuły za pomocą __CONTROL__toggle-driving__. +se-space-decontamination-facility=Czyści substancje do stosowania w warunkach sterylnych i przygotowuje płyny do zastosowania w warunkach niskiego ciśnienia. +se-space-electromagnetics-laboratory=Sprzęt do intensywnego pola magnetycznego i bardzo wysokiego napięcia. +se-space-genetics-laboratory=Laboratorium poświęcone sekwencjonowaniu genetycznemu, modyfikacji genetycznej i genetycznemu drukowaniu kultur. +se-space-gravimetrics-laboratory=Analizuje i symuluje zaburzenia grawitacyjne. +se-space-growth-facility=Hoduje okazy biologiczne w różnych kontrolowanych warunków, które nie są możliwe nigdzie indziej, takie mikrograwitacyjne +se-space-hypercooler=Dokonuje wymiany ciepła na płynie chłodzącym, czyniąc jeden cieplejszym, a drugi zimniejszym. +se-space-laser-laboratory=Eksperymenty z laserami. Należy nosić ochronę oczu. +se-lifesupport-facility=Podtrzymywanie życia w bardziej nieprzyjaznych środowiskach. +se-space-manufactory=Gigantyczna maszyna montażowa, może tworzyć bardziej skomplikowane formuły. Działa tylko w przestrzeni kosmicznej (lub na statku kosmicznym). +se-space-material-fabricator=Syntezuje nowe materiały. Skrzyżowanie zderzacza cząstek z drukarką 3d. +se-space-mechanical-laboratory=Zapewnia szereg procesów mechanicznych: kruszenie, rozdzieranie, ścinanie, wibrowanie itp. +se-space-particle-accelerator=Przyspiesza cząstki w pobliżu prędkości światła. +se-space-particle-collider=Zbiera cząsteczki o dużej prędkości i analizuje wyniki. +se-space-pipe=Można po niej chodzić. +se-space-pipe-long=Dobry tani sposób na szybkie przemieszczanie płynów na duże odległości. Można po niej chodzić. +se-space-pipe-long-straight=Długość __1__. Nie łączy się po bokach. Dobry do równoległych rur i szybkiego przemieszczania płynu na duże odległości. +se-space-pipe-long-junction=Długość __1__. Posiada centralne skrzyżowanie z bocznymi połączeniami. Dobre do szybkiego przemieszczania płynów przez linie montażowe. +se-space-pipe-to-ground=Drogi i ograniczony zasięg, do użycia tylko w razie potrzeby. Możesz chodzić po rurze kosmicznej. +se-space-plasma-generator=Generuje różne plazmy. +se-pulveriser=Sproszkuje i zmiażdży twardsze minerały i fragmenty rdzenia planety. +se-space-radiation-laboratory=Stosunkowo bezpieczne miejsce do zabawy z materiałem radioaktywnym. Może być stosowany do przetwarzania uranu. +se-space-radiator=Odbiera nadmiar ciepła z przegrzanego plynu chłodzącego. +se-space-radiator-2=Odbiera nadmiar ciepła z przegrzanego plynu chłodzącego. +se-recycling-facility=Przetwarza złom i inne produkty uboczne do zasobów. +se-space-solar-panel=Panel słoneczny o wysokiej wydajności, po którym można chodzić. +se-space-solar-panel-2=Zaawansowany panel słoneczny o wysokiej wydajności, po którym można chodzić. +se-space-solar-panel-3=Ekstremalnie wydajny panel słoneczny, po którym można chodzić. +se-space-spectrometry-facility=Spektrofotometria, chromatografia gazów, spektrometria masy i inne spektrografie. Strzelaj w ścianę, zegnij ją i patrz gdzie uderzy. +se-space-supercomputer-1=Manipulowanie danymi, przetwarzanie i symulacja. +se-space-supercomputer-2=Obliczenia kwantowe. Ulepszona manipulacja, przetwarzanie i symulacja danych. +se-space-supercomputer-3=Adaptacyjna sieć neuronowa na ramie obliczeń kwantowych. Ulepszona manipulacja, przetwarzanie i symulacja danych. +se-space-supercomputer-4=A nano-engineered semi-orgianic supercomputer that leverages space warping and higher dimensions for increased processing density and energy transport. +se-space-straight-rail=Zaprojektowany z myślą o kosmosie, ale może być również używany na ziemi. +se-space-science-lab=Może korzystać z zaawansowanych pakietów naukowych. +se-space-telescope=Wyrafinowany teleskop wrażliwy na wiele długości fali wokół widma widzialnego. +se-space-telescope-gammaray=Promienie gamma nie załamują się, więc nie można skupić ich na soczewkach. Ten potężny teleskop wykorzystuje lustra i specjalne detektory. +se-space-telescope-xray=Promienie rentgenowskie blokują większość atmosfer. Ten potężny teleskop jest przeznaczony do kosmosu, w których atmosfera nie stanowi problemu. +se-space-telescope-microwave=Ogromny teleskop wykrywający mikrofale i kosmiczne tło mikrofalowe. +se-space-telescope-radio=Ogromny teleskop, który wykrywa bardzo słabe fale radiowe z odległych źródeł. +se-space-thermodynamics-laboratory=Podejmuje procesy wymagające ekstremalnych temperatur. Potrafi także wykonywać podstawowe procesy termiczne, takie jak wytapianie. +se-space-transport-belt=Stops your items from floating away. +se-spaceship-antimatter-engine=[font=default-bold][color=#f5cb48]Ograniczenie umieszczania: Podłoga statku kosmicznego[/color][/font]\nUnicestwia strumień antymaterii. Może tworzyć zewnętrzną ścianę statku kosmicznego. +se-spaceship-antimatter-booster-tank=[font=default-bold][color=#f5cb48]Ograniczenie umieszczania: Podłoga statku kosmicznego[/color][/font]\nZawiera antymaterię. Wymagane do uruchomienia statku kosmicznego. +se-spaceship-console=[font=default-bold][color=#f5cb48]Ograniczenie umieszczania: Podłoga statku kosmicznego[/color][/font]\nUżyj, aby przenieść statek kosmiczny między planetami, księżycami, orbitami i polami asteroid. Musi znajdować się w ścianach / drzwiach statku kosmicznego, bez szczelin i dziur. Kontrola integralności uwidacznia problemy. +se-spaceship-console-output=Wysyła sygnały związane z bieżącym statusem statku kosmicznego. Aby uzyskać więcej informacji, zobacz Statki kosmiczne w [img=virtual-signal/informatron] Informatron [__CONTROL__informatron__]. +se-spaceship-gate=[font=default-bold][color=#f5cb48]Ograniczenie umieszczania: Podłoga statku kosmicznego[/color][/font]\nPole siłowe zatrzymuje dekompresję po otwarciu drzwi. Może tworzyć zewnętrzną ścianę statku kosmicznego. +se-spaceship-rocket-engine=[font=default-bold][color=#f5cb48]Ograniczenie umieszczania: Podłoga statku kosmicznego[/color][/font]\nSpala płynne paliwo rakietowe. Może tworzyć zewnętrzną ścianę statku kosmicznego. +se-spaceship-rocket-booster-tank=[font=default-bold][color=#f5cb48]Ograniczenie umieszczania: Podłoga statku kosmicznego[/color][/font]\nPrzechowuje płynne paliwo rakietowe. Wymagane do uruchomienia statku kosmicznego. +se-spaceship-wall=[font=default-bold][color=#f5cb48]Ograniczenie umieszczania: Podłoga statku kosmicznego[/color][/font]\nMoże tworzyć zewnętrzną ścianę statku kosmicznego, ukośne szczeliny przerywają zamknięcie. +beacon=8 gniazd modułów. Przesyła efekty modułów do pobliskich budynków w obrębie 3 pól. Wiele radionadajników wpływających na ten sam podmiot przeciąży go i uniemożliwi działanie. +se-wide-beacon=15 gniazd modułów. Przesyła efekty modułów do pobliskich budynków w obrębie 14 pól. Wiele radionadajników wpływających na ten sam podmiot przeciąży go i uniemożliwi działanie. +se-wide-beacon-2=20 gniazd modułów. Przesyła efekty modułów do pobliskich budynków w obrębie 14 pól. Wiele radionadajników wpływających na ten sam podmiot przeciąży go i uniemożliwi działanie. +kr-singularity-beacon=Kompaktowy radionadajnik o wydajności 100% z krótkim zasięgiem. Przesyła efekty modułów do pobliskich budynków w obrębie 2 pól. Wiele radionadajników wpływających na ten sam podmiot przeciąży go i uniemożliwi działanie. +se-supercharger=Może ładować do 64 robotów jednocześnie z dużą prędkością. Maksymalny pobór mocy przez konstrukcję wynosi 1 GW. +se-addon-power-pole=Mały słup elektryczny przeznaczony do zamocowania na budynkach lub do precyzyjnej kontroli zasięgu elektryczności. +se-pylon=Dystrybuuje energię elektryczną. Zasięg przewodu: 64. +se-pylon-substation=Dystrybuuje energię elektryczną. Zasięg przewodu:64, obszar działania: 64x64. +se-pylon-construction=Dystrybuuje energię elektryczną i rozszerza zasięg konstrukcyjny. Zasięg przewodu: 64, obszar działania: 64x64. +se-pylon-construction-radar=Dystrybuuje energię elektryczną, rozszerza zasięg konstrukcyjny i zapewnia widzenie radarowe. Zasięg: 64, obszar konstrukcyjny i radarowy 256 x 256. +se-shield-projector=Tworzy ochronne pole siłowe. Więcej energii jest potrzebne, gdy projektor się ładuje lub gdy osłona ulega uszkodzeniu. Może blokować pociski strzelane, jeśli zainstalowany jest mod "Walls Block Spitters". +se-big-turbine=[font=default-bold][color=#e4cead]Maksymalna moc:[/color][/font] 1GW.\nDuży generator, który pobiera 5000°C pary. na drugim końcu wytwarza 500°C pary, i wypuszcza wodę po bokach. 99% wydajności energetycznej, 99% oszczędności wody. +se-big-heat-exchanger=Duży wymiennik ciepła przeznaczony do wysokich temperatur i wysokiej wydajności. +se-delivery-cannon=Armata zdolna do strzelania zasobów na orbitę i poza nią. Powoduje uszkodzenie, jeśli nie zostanie bezpiecznie złapany (opancerzona skrzynia), należy zachować ostrożność. +se-delivery-cannon-chest=Opancerzona skrzynia zaprojektowana do bezpiecznego chwytania spadających zasobów o dużej prędkości. Wymaga miejsca w ekwipunku, aby bezpiecznie łapać dostawy. +se-delivery-cannon-weapon=Wielka armata ofensywna zdolna do strzelania wybraną amunicją na orbitę lub dalej. Używaj ostrożnie. +se-spaceship-clamp=Zacisk na statku kosmicznym można zakotwiczyć do zacisku skierowanego w przeciwnym kierunku na powierzchni. Może tworzyć zewnętrzną ścianę statku kosmicznego. +se-spaceship-clamp-place=Zacisk na statku kosmicznym można zakotwiczyć do zacisku skierowanego w przeciwnym kierunku na powierzchni. Może tworzyć zewnętrzną ścianę statku kosmicznego. +se-space-accumulator=Magazynowanie energii o wysokiej gęstości. +se-space-accumulator-2=Magazynowanie energii o wysokiej gęstości. +se-energy-transmitter-emitter=The central building that generates an inter-surface energy beam. Can be used as a weapon or to transfer power to an energy beam receiver. Requires attached energy beam chamber, and connected energy beam injectors. Beam strength is based on the number of injectors. +se-energy-transmitter-chamber=Must be connected to an energy beam emitter. Other chambers can be connected to the end or middle of either side. Energy beam injectors can be connected to the sides only. +se-energy-transmitter-injector=Must be attached to an energy beam chamber and connected to an emitter. Injectors have a fixed power draw, each one increases the energy sent giving more heat to a receiver, or increases the speed and damage of the beam weapon. +se-energy-transmitter-injector-reactor=Must be attached to an energy beam chamber and connected to an emitter. Injectors have a fixed power draw, each one increases the energy sent giving more heat to a receiver, or increases the speed and damage of the beam weapon. +se-energy-receiver=Captures an energy beam as heat. The emitter must be in Energise mode and the target must be on the receiver. +se-energy-beam-defence=Energy beam defence facility. Defends against space-based energy beams and coronal mass ejections. The only requirement to function is energy, the base draw is 10MW but increases based on the strength of attacking beams. Only 1 is needed per surface against Coronal mass ejections, against energy beams weapons 1 Umbrella can defend against up to 500GJ of attacking power. See Energy Beams in [img=virtual-signal/informatron] Informatron for more information [__CONTROL__informatron__] +spidertron=Can be deployed from a cargo rocket if the rocket is not set to a landing pad. +se-nexus=Only functions on a moving spaceship, energy use is proportional to speed. Can gain data from interstellar movement, data generation is based on ship kinetic energy. The Nexus is a designed to act as a distortion drive and with the right technology can enable escape from the local stellar cluster. +se-nexus-charger=Only functions on a moving spaceship, energy use is proportional to speed. Can gain data from interstellar movement, data generation is based on ship kinetic energy. The Nexus is a designed to act as a distortion drive and with the right technology can enable escape from the local stellar cluster. +se-space-probe-rocket-silo=A rocket silo for launching space probes. + +[equipment-name] +energy-shield-equipment=Tarcza energetyczna +energy-shield-mk2-equipment=Tarcza energetyczna MK2 +energy-shield-mk3-equipment=Tarcza energetyczna MK3 +energy-shield-mk4-equipment=Tarcza energetyczna MK4 +energy-shield-mk5-equipment=Tarcza energetyczna MK5 +energy-shield-mk6-equipment=Tarcza energetyczna MK6 +se-adaptive-armour-equipment-1=Pancerz adaptacyjny MK1 +se-adaptive-armour-equipment-2=Pancerz adaptacyjny MK2 +se-adaptive-armour-equipment-3=Pancerz adaptacyjny MK3 +se-adaptive-armour-equipment-4=Pancerz adaptacyjny MK4 +se-adaptive-armour-equipment-5=Pancerz adaptacyjny MK5 +se-rtg-equipment=Przenośny RTG +se-rtg-equipment-2=Przenośny RTG MK2 +se-lifesupport-equipment-1=Sprzęt Podtrzymywania życia MK1 +se-lifesupport-equipment-2=Sprzęt Podtrzymywania życia MK2 +se-lifesupport-equipment-3=Sprzęt Podtrzymywania życia MK3 +se-lifesupport-equipment-4=Sprzęt Podtrzymywania życia MK4 + +[equipment-description] +energy-shield-equipment=Bańka ochronna, która szybko się ładuje, ale zużywa dużo energii. +energy-shield-mk2-equipment=Bańka ochronna, która szybko się ładuje, ale zużywa dużo energii. +energy-shield-mk3-equipment=Bańka ochronna, która szybko się ładuje, ale zużywa dużo energii. +energy-shield-mk4-equipment=Bańka ochronna, która szybko się ładuje, ale zużywa dużo energii. +energy-shield-mk5-equipment=Bańka ochronna, która szybko się ładuje, ale zużywa dużo energii. +energy-shield-mk6-equipment=Bańka ochronna, która szybko się ładuje, ale zużywa dużo energii. +se-adaptive-armour-equipment-1=Pancerz wykorzystujący energię do samonaprawy. Z czasem powoli zwiększa ochronę. +se-adaptive-armour-equipment-2=Pancerz wykorzystujący energię do samonaprawy. Z czasem powoli zwiększa ochronę. +se-adaptive-armour-equipment-3=Pancerz wykorzystujący energię do samonaprawy. Z czasem powoli zwiększa ochronę. +se-adaptive-armour-equipment-4=Pancerz wykorzystujący energię do samonaprawy. Z czasem powoli zwiększa ochronę. +se-adaptive-armour-equipment-5=Pancerz wykorzystujący energię do samonaprawy. Z czasem powoli zwiększa ochronę. +se-rtg-equipment=Radioizotopowy generator termoelektryczny. Przenośny generator, który przekształca ciepło z rozpadu promieniotwórczego w energię elektryczną. Działa przez dziesięciolecia bez dodatkowego paliwa. +se-rtg-equipment-2=Radioizotopowy generator termoelektryczny. Ulepszony przenośny generator, który przekształca ciepło z rozpadu promieniotwórczego w energię elektryczną. Działa przez dziesięciolecia bez dodatkowego paliwa. +se-lifesupport-equipment-1=Zwiększa efektywność podtrzymywania życia o +100% (dodatkowo). Jeśli jest zainstalowany w kombinezonie innym niż skafander kosmiczny, premia za wydajność jest zmniejszona o połowę. +se-lifesupport-equipment-2=Zwiększa efektywność podtrzymywania życia o +200% (dodatkowo). Jeśli jest zainstalowany w kombinezonie innym niż skafander kosmiczny, premia za wydajność jest zmniejszona o połowę. +se-lifesupport-equipment-3=Zwiększa efektywność podtrzymywania życia o +400% (dodatkowo). Jeśli jest zainstalowany w kombinezonie innym niż skafander kosmiczny, premia za wydajność jest zmniejszona o połowę. +se-lifesupport-equipment-4=Zwiększa efektywność podtrzymywania życia o +800% (dodatkowo). Jeśli jest zainstalowany w kombinezonie innym niż skafander kosmiczny, premia za wydajność jest zmniejszona o połowę. + +[fluid-name] +se-antimatter-stream=Strumień antymaterii +se-bio-sludge=Osad biologiczny +se-contaminated-bio-sludge=Zanieczyszczony osad biologiczny +se-contaminated-space-water=Zanieczyszczona kosmiczna woda +se-chemical-gel=Żel chemiczny +se-decompressing-steam=Skondensowana para +se-liquid-rocket-fuel=Płynne paliwo rakietowe +se-methane-gas=Metan +se-methane-gas-mixed=Mieszany gaz metanowy +se-nutrient-gel=Żel odżywczy +se-neural-gel=Żel neuronowy +se-neural-gel-2=Zaawansowany żel neuronowy +se-ion-stream=Strumień jonów +se-plasma-stream=Strumień plazmy +se-particle-stream=Strumień cząstek +se-proton-stream=Strumień protonów +se-space-coolant=Płyn chłodzący 25°C +se-space-coolant-hot=Płyn chłodzący 25°C +se-space-coolant-warm=Chłodny Płyn chłodzący -10°C +se-space-coolant-cold=Zimny Płyn chłodzący -100°C +se-space-coolant-supercooled=Super schłodzony płyn chłodzący -273°C +se-space-water=Kosmiczna woda +se-beryllium-hydroxide=Wodorotlenek berylu +se-cryonite-slush=Breja krionitu + +[fluid-description] +se-space-water=Woda, która nie zamarza pod niskim ciśnieniem, bardziej nadaje się do większości zastosowań kosmicznych. +se-space-coolant=Domyślna temperatura płynu chłodzącego. +se-space-coolant-hot=Domyślna temperatura płynu chłodzącego. +se-space-coolant-warm=Temperatura płynu chłodzącego po schłodzeniu przez chłodnicę. +se-space-coolant-cold=Temperatura płynu chłodzącego po przechłodzeniu. +se-space-coolant-supercooled=Temperatura płynu chłodzącego po hiperchłodzeniu. + +[fuel-category-name] +antimatter=Paliwo antymateriałowe + +[item-group-name] +space=Kosmos +science=Nauka +spaceship=Statek kosmiczny +bob-fluids=Płyny +resources=Zasoby +intermediate-products=Produkcja +combat=Wyposażenie i militaria + +[item-name] +spidertron=Spidertron +core-fragment=Fragment rdzenia (__1__) +effectivity-module-4=Moduł Wydajności 4 +effectivity-module-5=Moduł Wydajności 5 +effectivity-module-6=Moduł Wydajności 6 +effectivity-module-7=Moduł Wydajności 7 +effectivity-module-8=Moduł Wydajności 8 +effectivity-module-9=Moduł Wydajności 9 +glass=Szkło +productivity-module-4=Moduł Produktywności 4 +productivity-module-5=Moduł Produktywności 5 +productivity-module-6=Moduł Produktywności 6 +productivity-module-7=Moduł Produktywności 7 +productivity-module-8=Moduł Produktywności 8 +productivity-module-9=Moduł Produktywności 9 +rocket-fuel=Stałe paliwo rakietowe +sand=Piasek +solid-sand=Przepłukany piasek +washed-sand=Przepłukany piasek +satellite=Nawigacja satelitarna +se-antimatter-canister=Kanister antymaterii +se-astrometric-data=Dane astrometryczne +se-astronomic-catalogue-1=Katalog astronomiczny +se-astronomic-catalogue-2=Szeroki Katalog astronomiczny +se-astronomic-catalogue-3=Kompleksowy Katalog astronomiczny +se-astronomic-catalogue-4=Rozszerzony Katalog astronomiczny +se-astronomic-insight=Wgląd astronomiczny +se-astronomic-science-pack-1=Astronomiczny Pakiet naukowy 1 +se-astronomic-science-pack-2=Astronomiczny Pakiet naukowy 2 +se-astronomic-science-pack-3=Astronomiczny Pakiet naukowy 3 +se-astronomic-science-pack-4=Astronomiczny Pakiet naukowy 4 +se-atomic-data=Dane atomowe +se-beryllium-ore=Beryl +se-ballistic-shielding-data=Dane osłony balistycznej +se-beryllium-ore-crushed=Kruszony beryl +se-beryllium-ore-washed=Umyty beryl +se-beryllium-plate=Płytka berylu +se-beryllium-powder=Proszek berylu +se-beryllium-ingot=Sztabka berylu +se-beryllium-sulfate=Siarczan berylu +se-bio-combustion-data=Dane spalania biologicznego +se-bio-combustion-resistance-data=Dane odporności na spalanie biologiczne +se-bio-spectral-data=Dane bio-spektralne +se-biochemical-data=Dane biochemiczne +se-biochemical-resistance-data=Dane dotyczące oporności biochemicznej +se-bioculture=Bio-kultura +se-bioelectrics-data=Dane bioelektryczne +se-biological-catalogue-1=Katalog biologiczny +se-biological-catalogue-2=Szeroki Katalog biologiczny +se-biological-catalogue-3=Kompleksowy Katalog biologiczny +se-biological-catalogue-4=Rozszerzony Katalog biologiczny +se-biological-insight=Wgląd biologiczny +se-biological-science-pack-1=Biologiczny Pakiet naukowy 1 +se-biological-science-pack-2=Biologiczny Pakiet naukowy 2 +se-biological-science-pack-3=Biologiczny Pakiet naukowy 3 +se-biological-science-pack-4=Biologiczny Pakiet naukowy 4 +se-biomechanical-data=Dane biomechaniczne +se-biomechanical-resistance-data=Dane oporności biomechanicznej +se-boson-data=Dane Boson +se-broken-data=Uszkodzona karta danych +se-canister=Bezpieczny kanister +se-biogun=Broń Biologiczna +se-bloater-ammo=Amunicja Wybuchowego wzdęcia +se-pheromone-ammo=Strzałka feromonowa +se-cryogun=Broń Lodowa +se-cryogun-ammo=Lodowa Amunicja +se-rocket-launch-pad-silo-dummy-ingredient-item=Rakieta transportowa (Ukryte składnik) +se-rocket-launch-pad-silo-dummy-result-item=Rakieta transportowa (Ukryty wynik) +se-cargo-rocket-cargo-pod=Luk ładunkowy +se-cargo-rocket-fuel-tank=Rakietowy zbiornik paliwa +se-cargo-rocket-section=Sekcja rakiety transportowej +se-cargo-rocket-section-packed=Spakowana Sekcja rakiety transportowej +se-cold-thermodynamics-data=Zimne Dane termodynamiczne +se-comparative-genetic-data=Porównawcze dane genetyczne +se-compressive-strength-data=Dane wytrzymałości na ściskanie +se-conductivity-data=Dane przewodnictwa +se-contaminated-scrap=Zanieczyszczony Złom +se-core-fragment-omni=Fragment rdzenia +se-corrosion-resistance-data=Dane odporności na korozję +se-cryogenics-data=Dane kriogeniczne +se-cryonite=Krionit +se-cryonite-crushed=Kruszony Krionit +se-cryonite-washed=Umyty Krionit +se-cryonite-rod=Pręt Krionitu +se-cryonite-ion-exchange-beads=Krionitowe koraliki jonowymienne +se-dark-energy-data=Dane ciemnej energii +se-darkmatter-data=Dane ciemnej materii +se-data-storage-substrate-cleaned=Polerowana pamięć masowa danych +se-data-storage-substrate=Szorstka pamięć masowa danych +se-decompression-data=Dane dekompresyjne +se-decompression-resistance-data=Dane o rezystancji dekompresyjnej +se-universal-catalogue=Katalog uniwersalny +se-deep-space-science-pack=Pakiet naukowy dalekiego kosmosu +se-deep-space-science-pack-1=Pakiet naukowy dalekiego kosmosu 1 +se-deep-space-science-pack-2=Pakiet naukowy dalekiego kosmosu 2 +se-deep-space-science-pack-3=Pakiet naukowy dalekiego kosmosu 3 +se-deep-space-science-pack-4=Pakiet naukowy dalekiego kosmosu 4 +se-doppler-shift-data=Dane przesunięcia dopplerowskiego +se-durability-data=Dane trwałości +se-electrical-shielding-data=Dane ochrony elektrycznej +se-electromagnetic-field-data=Dane pola elektromagnetycznego +se-empty-data=Pusta karta danych +se-empty-lifesupport-canister=Pusty pojemnik Podtrzymywania życia +se-energy-catalogue-1=Katalog energii +se-energy-catalogue-2=Szeroki katalog energii +se-energy-catalogue-3=Kompleksowy katalog energii +se-energy-catalogue-4=Rozszerzony katalog energii +se-energy-insight=Wgląd w energię +se-energy-science-pack-1=Energetyczny Pakiet naukowy 1 +se-energy-science-pack-2=Energetyczny Pakiet naukowy 2 +se-energy-science-pack-3=Energetyczny Pakiet naukowy 3 +se-energy-science-pack-4=Energetyczny Pakiet naukowy 4 +se-entanglement-data=Dane splątania +se-enriched-naquium=Wzbogacony Naquium +se-exotic-fission-data=Egzotyczne dane rozszczepienia +se-exotic-singularity-data=Dane osobliwości +se-explosion-shielding-data=Dane ochrony przeciwwybuchowej +se-experimental-alloys-data=Dane stopów eksperymentalnych +se-experimental-biochemical-data=Eksperymentalne dane biochemiczne +se-experimental-bioculture=Eksperymentalna biokultura +se-experimental-genetic-data=Eksperymentalne dane genetyczne +se-experimental-material-decay-data=Dane rozpadu materiału eksperymentalnego +se-experimental-material-spectral-data=Dane spektralne materiału eksperymentalnego +se-experimental-material=Prototyp materiału eksperymentalnego +se-experimental-specimen=Biomasa eksperymentalna +se-experimental-superconductor=Prototyp nadprzewodnika +se-forcefield-data=Dane Pola siłowego +se-friction-data=Dane tarcia +se-fusion-test-data=Testowe Dane fuzji +se-gammaray-detector=Detektor promieniowania gamma +se-gammaray-observation-data=Dane z obserwacji promieniowania gamma +se-gammaray-test-data=Dane promieniowania gamma +se-gate-fragment=Fragment artefaktu +se-genetic-data=Dane genetyczne +se-gravity-wave-observation-data=Dane obserwacyjne fali grawitacyjnej +se-gravity-wave-data=Dane fal grawitacyjnych +se-gravimetric-observation-data=Dane z obserwacji grawimetrycznej +se-gravimetric-test-data=Testowe Dane grawimetryczne +se-gravitational-lensing-data=Dane soczewek grawitacyjnych +se-heat-shielding=Osłona termiczna +se-holmium-ore=Ruda Holmu +se-holmium-ore-crushed=Kruszony holm +se-holmium-ore-washed=Umyty holm +se-holmium-powder=Proszek holmu +se-holmium-plate=Płytka holmu +se-holmium-ingot=Sztabka holmu +se-hot-thermodynamics-data=Gorące Dane termodynamiczne +se-impact-shielding-data=Dane ochrony przed uderzeniami +se-infrared-observation-data=Dane z obserwacji w podczerwieni +se-ion-spectrometry-data=Dane spektrometrii jonowej +se-iridium-ore=Iryd +se-iridium-ore-crushed=Kruszony Iryd +se-iridium-ore-washed=Umyty Iryd +se-iridium-piledriver=Kafar Irydowy +se-iridium-powder=Proszek Irydu +se-iridium-plate=Płytka Irydu +se-iridium-ingot=Sztabka Irydu +se-junk-data=Zużyta Karta danych +se-laser-shielding-data=Dane osłony laserowej +se-lepton-data=Dane leptonu +se-lifesupport-canister=Kanister Podtrzymywania życia +se-machine-learning-data=Dane uczenia maszynowego +se-magnetic-canister=Kanister magnetyczny +se-magnetic-monopole-data=Dane magnetycznego monopolu +se-material-decay-data=Dane rozpadu materiału +se-material-science-pack-1=Materiałowy Pakiet naukowy 1 +se-material-science-pack-2=Materiałowy Pakiet naukowy 2 +se-material-science-pack-3=Materiałowy Pakiet naukowy 3 +se-material-science-pack-4=Materiałowy Pakiet naukowy 4 +se-material-spectral-data=Dane spektralne materiału +se-material-testing-pack=Pakiet badań materiałowych +se-material-catalogue-1=Katalog materiałów +se-material-catalogue-2=Szeroki Katalog materiałów +se-material-catalogue-3=Kompleksowe Katalog materiałów +se-material-catalogue-4=Rozszerzony Katalog materiałów +se-material-insight=Wgląd w materiały +se-medpack=Apteczka +se-medpack-2=Apteczka 2 +se-medpack-3=Apteczka 3 +se-medpack-4=Apteczka 4 +se-meteor-defence=Działo Obronne przed meteorami +se-meteor-defence-ammo=Amunicja do Działa Obronnego przed meteorami +se-meteor-point-defence=Punktowe Działo Obronne przed meteorami +se-meteor-point-defence-ammo=Amunicja do punktowej obrony meteorytowej +se-methane-ice=Lód metanowy +se-micro-black-hole-data=Mikro Dane czarnej dziury +se-microwave-observation-data=Dane z obserwacji mikrofalowej +se-negative-pressure-data=Dane o ujemnym ciśnieniu +se-nano-cold-thermodynamics-data=Nanomaterialne dane zimnej termodynamiki +se-nano-compressive-strength-data=Nanomaterialne Dane wytrzymałości ściskania +se-nano-hot-thermodynamics-data=Nanomaterialne dane gorącej termodynamiki +se-nanomaterial=Nanomateriał +se-nano-tensile-strength-data=Nanomateriałowe dane wytrzymałości na rozciąganie +se-naquium-ore=Naquitite +se-naquium-ore-crushed=Kruszony naquitite +se-naquium-ore-washed=Umyty naquitite +se-naquium-powder=Proszek Naquium +se-naquium-plate=Płytka Naquium +se-naquium-ingot=Sztabka Naquium +se-neural-anomaly-data=Dane anomalii neuronowych +se-nutrient-vat=Kubełek składników odżywczych +se-observation-frame-blank=Pusta ramka obserwacyjna +se-observation-frame-gammaray=Ramka obserwacyjna promieniowania gamma +se-observation-frame-infrared=Ramka obserwacyjna w podczerwieni +se-observation-frame-microwave=Mikrofalowa rama obserwacyjna +se-observation-frame-radio=Ramka obserwacyjna fal radiowych +se-observation-frame-uv=Ramka obserwacyjna UV +se-observation-frame-visible=Widoczna ramka obserwacyjna +se-observation-frame-xray=Ramka obserwacyjna Xray +se-orbital-data=Dane obliczeń orbitalnych +se-particle-beam-shielding-data=Dane ochrony wiązki cząstek +se-plague-bomb=Rakieta zarazy +se-plasma-canister=Kanister plazmowy +se-plasma-electrodynamics-data=Dane elektrodynamiki plazmy +se-plasma-thermodynamics-data=Dane termodynamiki plazmy +se-polarisation-data=Dane polaryzacyjne +se-pressure-containment-data=Dane dotyczące ograniczenia ciśnienia +se-quantum-phenomenon-data=Dane zjawisk kwantowych +se-quark-data=Dane kwarku +se-radiation-data=Dane dotyczące promieniowania +se-radiation-exposure-data=Dane dotyczące narażenia na promieniowanie +se-radiation-exposure-resistance-data=Dane o odporności na promieniowanie +se-radiation-shielding-data=Dane osłony przed promieniowaniem +se-radio-observation-data=Dane obserwacyjne fal radiowych +se-rigidity-data=Dane sztywności +se-rtg-equipment=Przenośny RTG +se-rtg-equipment-2=Przenośny RTG MK2 +se-scrap=Złom +se-shear-strength-data=Dane wytrzymałości ścinania +se-significant-data=Istotne dane +se-significant-specimen=Istotna biomasa +se-singularity-data=Dane osobliwości +se-space-capsule=Kapsuła kosmiczna +se-space-mirror=Lustro wielospektralne +se-space-platform-plating=Poszycie platformy kosmicznej +se-space-platform-scaffold=Rusztowanie platformy kosmicznej +se-space-rail=Kolej kosmiczna +se-spaceship-floor=Podłoga statku kosmicznego +se-specimen=Biomasa +se-subatomic-data=Dane subatomowe +se-superconductivity-data=Dane nadprzewodnictwa +se-superconductor=Nadprzewodnik +se-superconductive-cable=Kabel nadprzewodzący +se-tensile-strength-data=Dane wytrzymałości na rozciąganie +se-tesla-ammo=Amunicja dla Tesli +se-tesla-gun=Tesla +se-thruster-suit=Skafander kosmiczny +se-thruster-suit-2=Skafander kosmiczny MK2 +se-thruster-suit-3=Skafander kosmiczny MK3 +se-thruster-suit-4=Skafander kosmiczny MK4 +se-timespace-anomaly-data=Dane anomalii przestrzeni czasowych +se-used-lifesupport-canister=Używany pojemnik Podtrzymywania życia +se-uv-observation-data=Dane z obserwacji UV +se-visible-observation-data=Widoczne dane obserwacyjne +se-vitamelange=Mech +se-vitamelange-nugget=Gąbka Witaminowa +se-vitamelange-roast=Pieczona Gąbka Witaminowa +se-vitamelange-spice=Przyprawa Witaminowa +se-vitamelange-extract=Ekstrakt Witaminowy +se-vulcanite=Wulkanit +se-vulcanite-crushed=Kruszony wulkanit +se-vulcanite-washed=Umyty wulkanit +se-vulcanite-block=Blok wulkanizatu +se-vulcanite-ion-exchange-beads=Kationnowe koraliki jonowymienne +se-water-ice=Lód wodny +se-xray-observation-data=Dane obserwacyjne Xray +se-zero-point-energy-data=Dane dotyczące energii punktu zerowego +se-rocket-science-pack=Rakietowy Pakiet naukowy +space-science-pack=Kosmiczny Pakiet naukowy +speed-module-4=Moduł prędkości 4 +speed-module-5=Moduł prędkości 5 +speed-module-6=Moduł prędkości 6 +speed-module-7=Moduł prędkości 7 +speed-module-8=Moduł prędkości 8 +speed-module-9=Moduł prędkości 9 +se-aeroframe-pole=Solidny pręt +se-aeroframe-scaffold=Solidny rama +se-aeroframe-bulkhead=Solidna ścianka +se-lattice-pressure-vessel=Zbiornik ciśnieniowy +se-heavy-girder=Ciężki dźwigar +se-heavy-bearing=Ciężkie łożysko +se-heavy-composite=Ciężki kompozyt +se-heavy-assembly=Ciężki Zestaw +se-bioscrubber=Płuczka Biologiczna +se-vitalic-epoxy=Żywica epoksydowa +se-vitalic-reagent=Odczynnik witalny +se-vitalic-acid=Kwas witalny +se-self-sealing-gel=Żel samouszczelniający +se-holmium-cable=Kabel holmu +se-holmium-solenoid=Elektromagnes holmu +se-quantum-processor=Procesor kwantowy +se-dynamic-emitter=Emiter dynamiczny +se-naquium-processor=Procesor Naquium +se-naquium-cube=Kostka Naquium +se-naquium-tessaract=Hiperszcześcian Naquium +se-wide-beacon=Wielki Radionadajnik +se-wide-beacon-2=Wielki Radionadajnik 2 +se-lifesupport-equipment-1=Sprzęt Podtrzymywania życia MK1 +se-lifesupport-equipment-2=Sprzęt Podtrzymywania życia MK2 +se-lifesupport-equipment-3=Sprzęt Podtrzymywania życia MK3 +se-lifesupport-equipment-4=Sprzęt Podtrzymywania życia MK4 +se-naquium-heat-pipe=Ciepłowód z Naquium +se-naquium-heat-pipe-horizontal=Poziomy Ciepłowód z Naquium +se-naquium-heat-pipe-vertical=Pionowy Ciepłowód z Naquium +se-naquium-heat-pipe-long=Długi Ciepłowód z Naquium __1__ +se-deep-space-transport-belt=Kosmiczny taśmociąg +se-deep-space-transport-belt-black=Czarny kosmiczny taśmociąg +se-deep-space-transport-belt-white=Biały kosmiczny taśmociąg +se-deep-space-transport-belt-red=Czerwony kosmiczny taśmociąg +se-deep-space-transport-belt-yellow=Żółty kosmiczny taśmociąg +se-deep-space-transport-belt-green=Zielony kosmiczny taśmociąg +se-deep-space-transport-belt-cyan=Błękitny kosmiczny taśmociąg +se-deep-space-transport-belt-blue=Niebieski kosmiczny taśmociąg +se-deep-space-transport-belt-magenta=Purpurowy kosmiczny taśmociąg +se-deep-space-underground-belt=Kosmiczny podziemny taśmociąg +se-deep-space-underground-belt-black=Czarny kosmiczny podziemny taśmociąg +se-deep-space-underground-belt-white=Biały kosmiczny podziemny taśmociąg +se-deep-space-underground-belt-red=Czerwony kosmiczny podziemny taśmociąg +se-deep-space-underground-belt-yellow=Żółty kosmiczny podziemny taśmociąg +se-deep-space-underground-belt-green=Zielony kosmiczny podziemny taśmociąg +se-deep-space-underground-belt-cyan=Błękitny kosmiczny podziemny taśmociąg +se-deep-space-underground-belt-blue=Niebieski kosmiczny podziemny taśmociąg +se-deep-space-underground-belt-magenta=Purpurowy kosmiczny podziemny taśmociąg +se-deep-space-splitter=Kosmiczny rozdzielacz +se-deep-space-splitter-black=Czarny kosmiczny rozdzielacz +se-deep-space-splitter-white=Biały kosmiczny rozdzielacz +se-deep-space-splitter-red=Czerwony kosmiczny rozdzielacz +se-deep-space-splitter-yellow=Żółty kosmiczny rozdzielacz +se-deep-space-splitter-green=Zielony kosmiczny rozdzielacz +se-deep-space-splitter-cyan=Błękitny kosmiczny rozdzielacz +se-deep-space-splitter-blue=Niebieski kosmiczny rozdzielacz +se-deep-space-splitter-magenta=Purpurowy kosmiczny rozdzielacz +se-blueprint-registration-point=Punkt odniesienia schematu konstrukcyjnego +se-delivery-cannon-capsule=Kapsuła armaty dostawczej +se-delivery-cannon-capsule-packed=Kapsuła armaty dostawczej: __1__ +se-delivery-cannon-targeter=Celownik armaty dostawczej +se-delivery-cannon-weapon-capsule=Kapsuła armaty ofensywnej +se-delivery-cannon-weapon-capsule-packed=Kapsuła armaty ofensywnej: __1__ +se-delivery-cannon-weapon-targeter=Celownik armaty ofensywnej +se-energy-transmitter-targeter=Celownik wiązki energii +se-arcosphere=Kryształ przestrzeni +se-arcosphere-a=λ Kryształ przestrzeni Lambda +se-arcosphere-b=ξ Kryształ przestrzeni Xi +se-arcosphere-c=ζ Kryształ przestrzeni Zeta +se-arcosphere-d=θ Kryształ przestrzeni Theta +se-arcosphere-e=ε Kryształ przestrzeni Epsilon +se-arcosphere-f=φ Kryształ przestrzeni Phi +se-arcosphere-g=γ Kryształ przestrzeni Gamma +se-arcosphere-h=ω Kryształ przestrzeni Omega +se-arcosphere-collector=Wyłapywacz kryształów przestrzeni +se-star-probe=Sonda gwiazdowa +se-belt-probe=Sonda pasa asteroid +se-void-probe=Sonda próżni międzygwiezdnej +se-star-probe-data=Dane z sondy gwiazdowej +se-belt-probe-data=Dane z sondy pasa asteroid +se-void-probe-data=Dane z sondy próżni międzygwiezdnej +se-nano-engineering-data=Dane nanoinżynieryjne +se-annihilation-data=Dane anihililacji +se-naquium-structural-data=Dane struktury Naquium +se-hyperlattice-data=Dane hyperkraty +se-naquium-energy-data=Dane energetyczne Naquium +se-space-fold-data=Dane zwijania przestrzeni +se-space-warp-data=Dane wykrzywiania przestrzeni +se-space-dialation-data=Dane rozszerzania przestrzeni +se-space-injection-data=Dane orbitowania przestrzeni +se-interstellar-data=Dane podróży międzygwiezdnych +se-teleportation-data=Dane teleportacji +se-wormhole-data=Dane czarnej dziury +se-rhga-data=Dane analizy hipergrafu +se-deep-catalogue-1=Katalog dalekiego kosmosu +se-deep-catalogue-2=Szeroki Katalog dalekiego kosmosu +se-deep-catalogue-3=Kompleksowy Katalog dalekiego kosmosu +se-deep-catalogue-4=Rozszerzony Katalog dalekiego kosmosu +se-space-probe-rocket=Rakieta sond kosmicznych +se-space-probe-rocket-deployed=Rakieta sond kosmicznych (wystrzelona) + +[item-description] +automation-science-pack=Używany przez podstawowe laboratoria naukowe do badań. +chemical-science-pack=Używany przez podstawowe laboratoria naukowe do badań. +logistic-science-pack=Używany przez podstawowe laboratoria naukowe do badań. +military-science-pack=Używany przez podstawowe laboratoria naukowe do badań. +production-science-pack=Używany przez podstawowe laboratoria naukowe do badań. +satellite=Satelitę należy umieścić w silosie rakiet satelitarnych. +se-antimatter-canister=Najgęstsza forma energii w bezpiecznym do przenoszenia pojemniku. +se-astronomic-science-pack-1=Używany przez laboratoria kosmiczne do badań. +se-astronomic-science-pack-2=Używany przez laboratoria kosmiczne do badań. +se-astronomic-science-pack-3=Używany przez laboratoria kosmiczne do badań. +se-astronomic-science-pack-4=Używany przez laboratoria kosmiczne do badań. +se-beryllium-ore=Ruda Berylu +se-biological-science-pack-1=Używany przez laboratoria kosmiczne do badań. +se-biological-science-pack-2=Używany przez laboratoria kosmiczne do badań. +se-biological-science-pack-3=Używany przez laboratoria kosmiczne do badań. +se-biological-science-pack-4=Używany przez laboratoria kosmiczne do badań. +se-canister=Wielofunkcyjne naczynie do przechowywania +se-cargo-rocket-cargo-pod=Element rakiety transportowej. +se-cargo-rocket-fuel-tank=Element rakiety transportowej. +se-cargo-rocket-section=Kluczowy element rakiety transportowej. Włóż do silosu. Wymagane 100 na rakietę. Można go odzyskać z lądowań rakiet (20% bazowej zdolności do odzyskania). +se-cargo-rocket-section-packed=Sekcje rakiet transportowych pakowane do transportu. Muszą być rozpakowane do użycia w konstrukcji rakiety. +se-bloater-ammo=Tworzy zakaźną kałużę osadu biologicznego na ziemi. Zainfekowani wrogowie puchną, utrudniając im ruch i powodując z czasem obrażenia. Jeśli umrą w stanie rozdętym, pękają, a rozpryskujące się wnętrzności zadają obrażenia pobliskim wrogom, potencjalnie powodując kaskadę. Całkowite obrażenia pocisków wynoszą 50% ich maksymalnego zdrowia. +se-pheromone-ammo=Myli wroga sprawiając że myślą że jesteś przyjazny, a ich krewni są wrogiem. +se-cryogun=Zrób ścianę lodu, która może zamrozić wrogów. +se-deep-space-science-pack=Używany przez laboratoria kosmiczne do badań. +se-energy-science-pack-1=Używany przez laboratoria kosmiczne do badań. +se-energy-science-pack-2=Używany przez laboratoria kosmiczne do badań. +se-energy-science-pack-3=Używany przez laboratoria kosmiczne do badań. +se-energy-science-pack-4=Używany przez laboratoria kosmiczne do badań. +se-heat-shielding=Panel kompozytowy stosowany do zastosowań w wysokich temperaturach i strukturach kosmicznych. +se-holmium-ore=Ruda Holmu +se-iridium-ore=Ruda Irydu +se-material-science-pack-1=Używany przez laboratoria kosmiczne do badań. +se-material-science-pack-2=Używany przez laboratoria kosmiczne do badań. +se-material-science-pack-3=Używany przez laboratoria kosmiczne do badań. +se-material-science-pack-4=Używany przez laboratoria kosmiczne do badań. +se-medpack=Użyj by się wyleczyć. +se-medpack-2=Użyj by się wyleczyć. +se-medpack-3=Użyj by się wyleczyć. +se-medpack-4=Użyj by się wyleczyć. +se-meteor-defence=Może chronić całą planetę przed meteorami, ale może zestrzelić tylko 1 meteor na raz. Musi być załadowany amunicją do obrony przed meteorami i naładowany do strzału. 80% celności. Po wystrzeleniu musi się naładować. Podczas ładowania pobiera 20 MW. +se-meteor-defence-ammo=Niszczy meteoryty. Musi być załadowany do instalacji obrony przed meteorami. +se-meteor-point-defence=Chroni obszar przed meteorami. Potrafi zestrzelić do 4 meteorów na salwę. Musi być załadowany amunicją do obrony przed meteorami i naładowany do strzału. Zasięg 64 pól, 50% celności, ładowanie wymaga czasu po wystrzale. Obróć obiekt, aby zmienić tryb ładowania. +se-meteor-point-defence-container=Niszczy meteoryty. Musi być załadowany. +se-naquium-ore=Ruda Naquium. Znaleźć można tylko w kosmosie, skarb międzygwiezdnej pustki. +se-rocket-launch-pad-silo-dummy-ingredient-item=Wykonany przez włożenie 100 sekcji rakiety transportowej i 1 Kosmicznej kapsuły do Silosu rakiet transportowych. +se-rtg-equipment=Radioizotopowy generator termoelektryczny. Przenośny generator, który przekształca ciepło z rozpadu promieniotwórczego w energię elektryczną. Działa przez dziesięciolecia bez dodatkowego paliwa. +se-rtg-equipment-2=Radioizotopowy generator termoelektryczny. Ulepszony przenośny generator, który przekształca ciepło z rozpadu promieniotwórczego w energię elektryczną. Działa przez dziesięciolecia bez dodatkowego paliwa. +se-plague-bomb=Może zgasić całe życie z planety. Obchodzić się ze szczególną ostrożnością. (Może znacznie spaść FPS/UPS, ponieważ wszystko stopniowo umiera, nie zalecane dla dużych planet lub multiplayer.) +se-space-capsule=Kapsuła kontrolna wymagana do rakiet transportowych. Może być wykorzystana do zabrania pasażerów z powrotem na powierzchnię najbliższej planety. Wejdź do kapsuły za pomocą __CONTROL__toggle-driving__. +se-space-platform-plating=[font=default-bold][color=#f5cb48]Ograniczenie umieszczania: Kosmos[/color][/font]\nZaawansowane poszycie, które umożliwia szybki ruch na platformie kosmicznej. +se-space-platform-scaffold=[font=default-bold][color=#f5cb48]Ograniczenie umieszczania: Kosmos[/color][/font]\nPodstawowe rusztowanie platformy kosmicznej, które pozwala umieścić pewne struktury w kosmosie. +se-space-rail=Szyny, których można bezpiecznie używać w kosmosie, ponieważ zapobiegają wypadaniu pociągu z torów i niszczeniu wszystkiego wokół. Mogą być również stosowane na lądzie ze względów estetycznych. +se-spaceship-floor=Ta podłoga musi znajdować się pod wszystkimi częściami statku kosmicznego, a ściany statku kosmicznego znajdują się na zewnętrznej krawędzi. Wszelkie szczeliny w podłodze spowodują uszkodzenie hermetyczne, te sekcje mogą się oderwać. +se-superconductive-cable=Nadprzewodzący kabel kompozytowy, który nie wymaga aktywnego chłodzenia. +se-tesla-gun=Szybkostrzelająca broń błyskawicami +se-thruster-suit=Skafander kosmiczny niezbędny do przetrwania w kosmosie. \nMa silniki odrzutowe oraz buty magnetyczne. +se-thruster-suit-2=Skafander kosmiczny niezbędny do przetrwania w kosmosie. \nMa silniejsze silniki, większy ekwipunek i większą siatkę. +se-thruster-suit-3=Skafander kosmiczny niezbędny do przetrwania w kosmosie. \nMa silniejsze silniki, większy ekwipunek i większą siatkę. +se-thruster-suit-4=Skafander kosmiczny niezbędny do przetrwania w kosmosie. \nMa silniejsze silniki, większy ekwipunek i większą siatkę. +space-science-pack=Służy do ulepszania wielu istniejących przedmiotów. +se-rocket-science-pack=Używany przez laboratoria kosmiczne do badań. Musi być wytworzony w kosmosie. +utility-science-pack=Używany przez podstawowe laboratoria naukowe do badań. +beacon=8 gniazd modułów. Przesyła efekty modułów do pobliskich budynków w obrębie 3 pól. Wiele radionadajników wpływających na ten sam podmiot przeciąży go i uniemożliwi działanie. +se-wide-beacon=15 gniazd modułów. Przesyła efekty modułów do pobliskich budynków w obrębie 14 pól. Wiele radionadajników wpływających na ten sam podmiot przeciąży go i uniemożliwi działanie. +se-wide-beacon-2=20 gniazd modułów. Przesyła efekty modułów do pobliskich budynków w obrębie 14 pól. Wiele radionadajników wpływających na ten sam podmiot przeciąży go i uniemożliwi działanie. +se-lifesupport-equipment-1=Zwiększa efektywność podtrzymywania życia o +100% (dodatkowo). Jeśli jest zainstalowany w kombinezonie innym niż skafander kosmiczny, premia za wydajność jest zmniejszona o połowę. +se-lifesupport-equipment-2=Zwiększa efektywność podtrzymywania życia o +200% (dodatkowo). Jeśli jest zainstalowany w kombinezonie innym niż skafander kosmiczny, premia za wydajność jest zmniejszona o połowę. +se-lifesupport-equipment-3=Zwiększa efektywność podtrzymywania życia o +400% (dodatkowo). Jeśli jest zainstalowany w kombinezonie innym niż skafander kosmiczny, premia za wydajność jest zmniejszona o połowę. +se-lifesupport-equipment-4=Zwiększa efektywność podtrzymywania życia o +800% (dodatkowo). Jeśli jest zainstalowany w kombinezonie innym niż skafander kosmiczny, premia za wydajność jest zmniejszona o połowę. +se-delivery-cannon=Umożliwia dokładną dostawę zawartych zasobów za pomocą armaty dostawczej. +se-delivery-cannon-weapon=Umożliwia dokładne strzelanie z wybranych broni za pomocą armaty ofensywnej. +se-arcosphere=Earnded from Arcosphere research, redeemed via Informatron. +se-deep-catalogue-1=Naquium i nanoinżynieria. +se-deep-catalogue-2=Struktura hyperkraty, osobliwość i anihilacja. +se-deep-catalogue-3=Mikrowygięcia przestrzeni i wielowymiarowa nanoinżynieria. +se-deep-catalogue-4=Makrowygięcia przestrzeni i wielowymiarowe podróże. +se-arcosphere-collector=Wyłapuje krysztaly przestrzeni z próżni międzygwiezdnej. Musi być wystrzelona z silosa rakiet wynoszących sondy umieszczonego na polu asteroid. Wyłapywanie jest trudniejsze, im więcej już ich wyłapano. +se-star-probe=Zbiera dane gwiazdowe i zwraca [img=item/se-star-probe-data] Dane z sondy gwiazdowej. Musi być wystrzelona z silosa rakiet wynoszących sondy umieszczonego na orbicie gwiazdy. +se-belt-probe=Zbiera dane pasa asteroid i zwraca [img=item/se-belt-probe-data] Dane z sondy pasa asteroid. Musi być wystrzelona z silosa rakiet wynoszących sondy umieszczonego na pasie asteroid. +se-void-probe=Zbiera dane próżni międzygwiazdnej i zwraca [img=item/se-void-probe-data] Dane z sondy próżni międzygwiezdnej. Musi być wystrzelona z silosa rakiet wynoszących sondy umieszczonego na polu asteroid. + +[recipe-name] +core-fragment=Fragment rdzenia (__1__) +rocket-fuel=Stałe paliwo rakietowe +se-astrometric-analysis-multispectral-1=Wielospektralna analiza astrometryczna 1 +se-astrometric-analysis-multispectral-2=Wielospektralna analiza astrometryczna 2 +se-astrometric-analysis-multispectral-3=Wielospektralna analiza astrometryczna 3 +se-astronomic-insight-1=Wgląd astronomiczny +se-astronomic-insight-2=Szeroki Wgląd astronomiczny +se-astronomic-insight-3=Kompleksowy Wgląd astronomiczny +se-astronomic-insight-4=Rozszerzony Wgląd astronomiczny +se-biological-insight-1=Wgląd biologiczny +se-biological-insight-2=Szeroki Wgląd biologiczny +se-biological-insight-3=Kompleksowy Wgląd biologiczny +se-biological-insight-4=Rozszerzony Wgląd biologiczny +se-bio-methane-to-crude-oil=Bio przetwarzanie metanu na ropę naftową +se-bio-sludge-crude-oil=Osad biologiczny z eksperymentalnej biomasy +se-bio-sludge-decontamination=Odkażanie osadu biologicznego +se-bio-sludge-from-fish=Osad biologiczny z ryb +se-bio-sludge-from-wood=Osad biologiczny z drewna +se-bio-sludge-from-vitamelange=Osad biologiczny ze Skamieliny odżywczej +se-bio-sludge=Osad biologiczny z biomasy +se-broken-data-scrapping=Złomowanie uszkodzonych kart danych +se-cargo-rocket-section-pack=Spakowania Sekcja rakiety transportowej +se-cargo-rocket-section-unpack=Rozpakowywania Sekcja rakiety transportowej +se-condenser-turbine-reclaim-water=Wytwarzanie energii z odzyskiwaniem wody. +se-core-fragment-omni=Przetwarzanie fragmentów rdzenia +se-core-mining=Wydobycie Rdzenia +se-empty-antimatter-canister=Pusty kanister antymaterii +se-empty-barrel-scrapping=Złomowanie pustych beczek +se-empty-barrel-reprocessing=Demontowanie pustych beczek +se-space-capsule-scrapping=Złomowanie kapsuły kosmicznej +se-cargo-pod-scrapping=Złomowanie luku ładunkowego +se-energy-insight-1=Wgląd w energię +se-energy-insight-2=Szeroki Wgląd w energię +se-energy-insight-3=Kompleksowy Wgląd w energię +se-energy-insight-4=Rozszerzony Wgląd w energię +se-formatting-1=Formatowanie danych +se-formatting-2=Wydajne Formatowanie danych +se-formatting-3=Zaawansowane Formatowanie danych +se-formatting-4=Formatowanie danych Dalekiego kosmosu +se-material-insight-1=Wgląd w materiały +se-material-insight-2=Szeroki wgląd w materiały +se-material-insight-3=Kompleksowy wgląd w materiały +se-material-insight-4=Rozszerzony wgląd w materiały +se-matter-fusion-copper=Fuzja materii (Miedź) +se-matter-fusion-dirty=Fuzja materii (Złom) +se-matter-fusion-iron=Fuzja materii (Żelazo) +se-matter-fusion-stone=Fuzja materii (Kamień) +se-matter-fusion-uranium=Fuzja materii (Uran) +se-matter-fusion-to=Fuzja materii (__1__) +se-orbital-data=Dane obliczeń orbitalnych +se-plasma-canister-empty=Pusty pojemnik na plazmę +se-pulverised-sand=Sproszkowany piasek +se-radiating-space-coolant-fast=Szybkie schładzanie płynu chłodzącego do -10°C (chłodny) +se-radiating-space-coolant-normal=Schładzanie płynu chłodzącego do -10°C (chłodny) +se-radiating-space-coolant-slow=Oszczędne schładzanie płynu chłodzącego do -10°C (chłodny) +se-mixed-methane-gas-separation=Oddzielanie gazu metanowego z mieszanki +se-rocket-fuel-from-water-copper=Paliwo rakietowe z wody +se-scrap-decontamination=Odkażanie złomu +se-scrap-recycling=Recykling złomu +se-space-coolant-cold=Hiper chłodzenie płynu chłodzącego do -100°C (zimny) +se-space-coolant-supercooled=Hiper chłodzenie płynu chłodzącego do -273°C (super schłodzony) +se-space-coolant-supercooled-cryonite=Krionitowe chłodzenie płynu chłodzącego do -273°C (super schłodzony) +se-space-coolant-cold-cryonite=Krionitowe chłodzenie płynu chłodzącego do -100°C (zimny) +se-space-coolant-supercoole-cryonite=Krionitowe chłodzenie płynu chłodzącego do -273°C (super schłodzony) +se-simulation-a=Symulacja astronomiczna +se-simulation-ab=Symulacja panspermii +se-simulation-abm=Symulacja ksenoprogresji +se-simulation-am=Symulacja astromateriału +se-simulation-as=Symulacja astrocząstek +se-simulation-asb=Symulacja astrobioniczna +se-simulation-asbm=Symulacja uniwersalna +se-simulation-asm=Symulacja astrofizyki +se-simulation-b=Symulacja biologiczna +se-simulation-bm=Symulacja biomechaniczna +se-simulation-m=Symulacja materiału +se-simulation-s=Symulacja energetyczna +se-simulation-sb=Symulacja biochemiczna +se-simulation-sbm=Symulacja nanitów +se-simulation-sm=Symulacja nanomateriałów +se-space-water-decontamination=Kosmiczne odkażanie wody +se-spaceship-rocket-engine-burn=Spal płynne paliwo rakietowe +se-specimen-fish=Mikrograwitacji wzrost ryb +se-specimen-wood=Mikrograwitacji wzrost drewna +se-thermodynamics-coal=Węgiel termodynamiczny +se-used-lifesupport-canister-cleaning=Czyszczenie kanistra Podtrzymywania życia +se-used-lifesupport-canister-cleaning-space=Odkażanie kanistra Podtrzymywania życia +space-science-pack=Kosmiczny Pakiet naukowy +se-rocket-science-pack=Rakietowy Pakiet naukowy +se-big-turbine-internal=Dekompresowanie pary o wysokiej temperaturze +se-arcosphere-fracture=Polaryzacja kryształu przestrzeni +se-arcosphere-fold-in=Odwracanie kryształów przestrzeni +se-arcosphere-fold-out=Odwracanie kryształów przestrzeni +se-arcosphere-folding=Naginanie kryształów przestrzeni: __1__ __2__ to __3__ __4__ +se-electric-boiling-void=Odparowywanie +se-space-probe-rocket-deployed=Rakieta sond kosmicznych (wystrzelona) +se-distortion-drive=Zagięcie czasoprzestrzeni + +[recipe-description] +se-astronomic-insight-2=Bardziej skomplikowane, ale bardziej zasobooszczędne. +se-astronomic-insight-3=Bardziej skomplikowane, ale bardziej zasobooszczędne. +se-astronomic-insight-4=Bardziej skomplikowane, ale bardziej zasobooszczędne. +se-biological-insight-2=Bardziej skomplikowane, ale bardziej zasobooszczędne. +se-biological-insight-3=Bardziej skomplikowane, ale bardziej zasobooszczędne. +se-biological-insight-4=Bardziej skomplikowane, ale bardziej zasobooszczędne. +se-core-mining=Rzeczywisty zwrócony fragment zależy od planety. Rzeczywisty czas wytwarzania zależy od liczby wiertnic rdzenia na planecie lub księżycu. +se-energy-insight-2=Bardziej skomplikowane, ale bardziej zasobooszczędne. +se-energy-insight-3=Bardziej skomplikowane, ale bardziej zasobooszczędne. +se-energy-insight-4=Bardziej skomplikowane, ale bardziej zasobooszczędne. +se-material-insight-2=Bardziej skomplikowane, ale bardziej zasobooszczędne. +se-material-insight-3=Bardziej skomplikowane, ale bardziej zasobooszczędne. +se-material-insight-4=Bardziej skomplikowane, ale bardziej zasobooszczędne. +se-radiating-space-coolant-normal=Powtarzające się chłodzenie i podgrzewanie termopłynów powoduje degradację. +se-radiating-space-coolant-slow=Powtarzające się chłodzenie i podgrzewanie termopłynów powoduje degradację, wolniejsze chłodzenie powoduje zmniejszenie strat. +se-radiating-space-coolant-fast=Powtarzające się chłodzenie i podgrzewanie termopłynów powoduje degradację, szybsze chłodzenie powoduje zwiększenie strat. +se-delivery-cannon-weapon-pack-se-iridium-piledriver=Wielkie obrażenia fizyczne na niewielkiej powierzchni, potem obrażenia od eksplozji w formie fali uderzeniowej. +se-arcosphere-fracture=Kryształy przestrzeni mogą być zbierane za pomocą [img=item/se-arcosphere-collector] Wyłapywacz kryształów przestrzeni +se-distortion-drive=Ten proces musi być wybrany aby użyć zagięcia czasoprzestrzennego przez Nexus i wygrać grę. Używa 8GW kiedy prędkość osiągnie wartość krytyczną. + +[technology-name] +effectivity-module-4=Moduł Wydajności 4 +effectivity-module-5=Moduł Wydajności 5 +effectivity-module-6=Moduł Wydajności 6 +effectivity-module-7=Moduł Wydajności 7 +effectivity-module-8=Moduł Wydajności 8 +effectivity-module-9=Moduł Wydajności 9 +energy-shield-equipment=Tarcza energetyczna +energy-shield-mk2-equipment=Tarcza energetyczna MK2 +energy-shield-mk3-equipment=Tarcza energetyczna MK3 +energy-shield-mk4-equipment=Tarcza energetyczna MK4 +energy-shield-mk5-equipment=Tarcza energetyczna MK5 +energy-shield-mk6-equipment=Tarcza energetyczna MK6 +sand-processing=Przetwarzanie piasku +glass-processing=Przetwarzanie szkła +liquid-rocket-fuel=Płynne paliwo rakietowe +productivity-module-4=Moduł Produktywności 4 +productivity-module-5=Moduł Produktywności 5 +productivity-module-6=Moduł Produktywności 6 +productivity-module-7=Moduł Produktywności 7 +productivity-module-8=Moduł Produktywności 8 +productivity-module-9=Moduł Produktywności 9 +rocket-silo=Silos rakiet satelitarnych +rocketry=Rakiety bojowe +se-adaptive-armour=Pancerz adaptacyjny +se-antimatter-engine=Silnik antymaterii +se-antimatter-reactor=Reaktor antymaterii +se-antimatter-production=Produkcja antymaterii +se-astronomic-science-pack=Astronomiczny Pakiet naukowy +se-biological-science-pack=Biologicznych Pakiet naukowy +se-condenser-turbine=Turbina kondensacyjna +se-core-miner=Wydobycie rdzenia +se-biogun=Broń Biologiczna +se-cryogun=Broń Lodowa +se-deep-space-science-pack=Pakiet naukowy Dalekiego Kosmosu +se-deep-catalogue=Katalog Dalekiego Kosmosu +se-dimensional-anchor=Kotwica międzywymiarowa +se-electric-boiler=Kocioł elektryczny +se-energy-science-pack=Energetyczny Pakiet naukowy +se-fluid-burner-generator=Generator izotermiczny +se-fuel-refining=Rafineria Paliw +se-heat-shielding=Osłona termiczna +se-long-range-star-mapping=Mapowanie gwiazd dalekiego zasięgu +se-material-science-pack=Materiałowy Pakiet naukowy +se-medpack=Apteczka +se-medpack-2=Apteczka 2 +se-medpack-3=Apteczka 3 +se-medpack-4=Apteczka 4 +se-meteor-defence=Działo Obronne przed meteorami +se-meteor-point-defence=Punktowe Działo Obronne przed meteorami +se-nanomaterial=Nanomateriał +se-plague=Zaraza +se-processing-beryllium=Przetwarzanie Beryllium +se-processing-cryonite=Przetwarzanie Krionitu +se-processing-holmium=Przetwarzanie Holmu +se-processing-iridium=Przetwarzanie Irydu +se-processing-naquium=Przetwarzanie Naquium +se-processing-vitamelange=Przetwarzanie Skamieliny odżywczej +se-processing-vulcanite=Przetwarzanie wulkanitu +se-pulveriser=Rozdrabniacz +se-railgun=Railgun +se-rocket-cargo-safety=Bezpieczeństwo ładunku rakietowego +se-rocket-fuel-from-water=Paliwo rakietowe z wody +se-rocket-launch-pad=Silos rakiet transportowych +se-rocket-landing-pad=Lądowisko rakietowe +se-rocket-reusability=Ponowne użycie rakiety +se-rocket-survivability=Przetrwanie rakiet +se-rtg-equipment=Przenośny RTG +se-rtg-equipment-2=Przenośny RTG MK2 +se-space-assembling=Kosmiczny Automat montażowy +se-space-accumulator=Akumulator kosmiczny +se-space-accumulator-2=Akumulator z Naquium +se-space-astrometrics-laboratory=Laboratorium astrometryczne +se-space-biochemical-laboratory=Laboratorium biochemiczne +se-space-catalogue-astronomic=Katalog astronomiczny +se-space-catalogue-biological=Katalog biochemiczny +se-space-catalogue-universal=Katalog uniwersalny +se-space-catalogue-energy=Katalog energii +se-space-catalogue-material=Katalog materiałów +se-space-data-card=Karta danych +se-space-decontamination-facility=Zakład odkażający +se-space-electromagnetics-laboratory=Laboratorium elektromagnetyczne +se-space-genetics-laboratory=Laboratorium genetyki +se-space-gravimetrics-laboratory=Laboratorium Grawimetryczne +se-space-growth-facility=Zakład Rozwoju +se-space-hypercooling=Hiper chłodzenie +se-space-laser-laboratory=Laboratorium laserowe +se-lifesupport-facility=Zakład Podtrzymywania życia +se-space-manufactory=Fabryka Kosmiczna +se-space-material-fabricator=Fabryka Materii +se-space-matter-fusion=Fuzja materii +se-space-mechanical-laboratory=Laboratorium mechaniczne +se-space-particle-accelerator=Akcelerator cząsteczek +se-space-particle-collider=Zderzacz cząstek +se-space-plasma-generator=Generator plazmy +se-space-platform-plating=Poszycie platformy kosmicznej +se-space-platform-scaffold=Rusztowanie platformy kosmicznej +se-space-radiation-laboratory=Laboratorium promieniowania +se-space-radiating-efficiency=Wydajność chłodnicy +se-space-radiating-speed=Szybkość chłodnicy +se-space-radiator=Chłodnica +se-space-radiator-2=Chłodnica 2 +se-space-rail=Kolej kosmiczna +se-recycling-facility=Zakład recyklingu +se-space-science-lab=Laboratorium kosmiczne +se-space-simulation-ab=Symulacja panspermii +se-space-simulation-am=Symulacja astromateriału +se-space-simulation-as=Symulacja astrocząstek +se-space-simulation-bm=Symulacja biomechaniczna +se-space-simulation-sb=Symulacja biochemiczna +se-space-simulation-sm=Symulacja nanomateriałów +se-space-simulation-abm=Symulacja ksenoprogresji +se-space-simulation-asb=Symulacja astrobioniczna +se-space-simulation-asm=Symulacja astrofizyki +se-space-simulation-sbm=Symulacja nanitów +se-space-simulation-asbm=Symulacja uniwersalna +se-space-solar-panel=Płaski panel słoneczny +se-space-spectrometry-facility=Zakład spektrometrii +se-space-supercomputer=Superkomputer +se-space-telescope=Teleskop +se-space-telescope-gammaray=Teleskop promieniowania gamma +se-space-telescope-xray=Teleskop Xray +se-space-telescope-microwave=Teleskop mikrofalowy +se-space-telescope-radio=Radioteleskop +se-space-thermodynamics-laboratory=Laboratorium termodynamiczne +se-spaceship=Statek kosmiczny +se-spaceship-integrity=Integralność strukturalna statku kosmicznego +se-factory-spaceship=Fabryka Statku kosmicznego +se-superconductive-cable=Kabel nadprzewodzący +se-teleportation=Teleportacja +se-tesla-gun=Tesla +se-thruster-suit=Skafander kosmiczny +space-science-pack=Kosmiczny Pakiet naukowy +se-rocket-science-pack=Rakietowy Pakiet naukowy +speed-module-4=Moduł prędkości 4 +speed-module-5=Moduł prędkości 5 +speed-module-6=Moduł prędkości 6 +speed-module-7=Moduł prędkości 7 +speed-module-8=Moduł prędkości 8 +speed-module-9=Moduł prędkości 9 +se-aeroframe-pole=Solidny pręt +se-aeroframe-scaffold=Solidny rama +se-aeroframe-bulkhead=Solidna ścianka +se-lattice-pressure-vessel=Zbiornik ciśnieniowy +se-heavy-girder=Ciężki dźwigar +se-heavy-bearing=Ciężkie łożysko +se-heavy-composite=Ciężki kompozyt +se-heavy-assembly=Ciężki Zestaw +se-bioscrubber=Płuczka Biologiczna +se-vitalic-epoxy=Żywica epoksydowa +se-vitalic-reagent=Odczynnik witalny +se-vitalic-acid=Kwas witalny +se-self-sealing-gel=Żel samouszczelniający +se-holmium-cable=Kabel holmu +se-holmium-solenoid=Elektromagnes holmu +se-quantum-processor=Procesor kwantowy +se-dynamic-emitter=Emiter dynamiczny +se-naquium-processor=Procesor Naquium +se-naquium-cube=Kostka Naquium +se-naquium-tessaract=Hiperszcześcian Naquium +se-wide-beacon=Wielki Radionadajnik +se-wide-beacon-2=Wielki Radionadajnik 2 +se-lifesupport-equipment=Sprzęt Podtrzymywania życia +se-lifesupport-equipment-1=Sprzęt Podtrzymywania życia MK1 +se-lifesupport-equipment-2=Sprzęt Podtrzymywania życia MK2 +se-lifesupport-equipment-3=Sprzęt Podtrzymywania życia MK3 +se-lifesupport-equipment-4=Sprzęt Podtrzymywania życia MK4 +se-supercharger=Superładowarka +se-addon-power-pole=Punktowy słup elektryczny +se-pylon=Pylon +se-pylon-substation=Pylon Podstacja +se-pylon-construction=Pylon konstrukcyjny +se-pylon-construction-radar=Konstrukcja radarowa pylon +se-shield-projector=Projektor osłonowy +se-deep-space-transport-belt=Kosmiczne taśmociągi +se-big-turbine=Wysokotemperaturowy generator turbinowy +se-big-heat-exchanger=Wysokotemperaturowy wymiennik ciepła +se-zone-discovery-random=Odkrycie strefy +se-zone-discovery-targeted=Wykrywanie strefy docelowej +se-zone-discovery-deep=Deep space Odkrycie strefy +se-delivery-cannon=Armata dostawcza +se-delivery-cannon-weapon=Armata ofensywna +se-spaceship-clamps=Zaciski dokujące Statek Kosmiczny +se-bio-upgrade-constitution=Usprawnienie biologiczne: Konstytucja +se-bio-upgrade-strength=Usprawnienie biologiczne: Siła +se-bio-upgrade-agility=Usprawnienie biologiczne: Zwinność +se-bio-upgrade-dexterity=Usprawnienie biologiczne: Zręczność +se-bio-upgrade-intelligence=Usprawnienie biologiczne: Inteligencja +se-energy-beaming=Wiązki energii +se-energy-beam-defence=Parasol ochronny przed wiązkami energii +se-nexus=Nexus +se-spaceship-victory=Wygrana przez statek kosmiczny +se-arcosphere=Wyłapywanie kryształow przestrzeni +se-arcosphere-folding=Naginanie kryształow przestrzeni +se-space-probe=Silos rakiet wynoszących sondy + +[technology-description] +energy-shield-equipment=Bańka ochronna, która szybko się ładuje, ale zużywa dużo energii. +energy-shield-mk2-equipment=Bańka ochronna, która szybko się ładuje, ale zużywa dużo energii. +energy-shield-mk3-equipment=Bańka ochronna, która szybko się ładuje, ale zużywa dużo energii. +energy-shield-mk4-equipment=Bańka ochronna, która szybko się ładuje, ale zużywa dużo energii. +energy-shield-mk5-equipment=Bańka ochronna, która szybko się ładuje, ale zużywa dużo energii. +energy-shield-mk6-equipment=Bańka ochronna, która szybko się ładuje, ale zużywa dużo energii. +sand-processing=Kruszenie, mielenie i filtrowanie surowca w czysty piasek. +glass-processing=Przerabianie piasku w szkło. +rocket-silo=Pozwala wystrzelić satelitę na orbitę, aby odkryć nowe planety. +se-adaptive-armour=Pancerz wykorzystujący energię do samonaprawy. Pełni rolę podobną do tarcz energetycznych o niższych wymaganiach energetycznych, ale znacznie wolniejszej regeneracji. +se-antimatter-engine=Unicestwianie antymaterii do produkcji niesamowitego ciągu. +se-antimatter-reactor=Unicestwia antymaterię z materią do generowania ekstremalnego ciepła. +se-antimatter-production=Robienie antymaterii, najgęstszej formy zmagazynowanej energii. +se-astronomic-science-pack=Umożliwia badania nad technologiami związanymi z podróżami kosmicznymi i logistyką międzygwiezdnej. +se-biological-science-pack=Umożliwia badania nad technologiami związanymi z poprawą możliwości fizycznych, broni biologicznej i przetwarzania neuronowego. +se-condenser-turbine=75% wydajności energetycznej turbiny parowej, ale 99% zużytej pary jest zwracane w postaci wody. Zakres temperatur: 100 do 999. +se-core-miner=Pozwala na niekończące się wydobycie zasobów z planet i księżyców, ale ma malejące zyski, jeśli wiele z nich jest używanych na tej samej planecie/księżycu. +se-biogun=Pistolet, który może używać różnych broni biologicznych. +se-cryogun=Zrób ścianę lodu, która może zamrozić wrogów. +se-deep-catalogue=Space distortion, exotic matter, and nano-engineering data structured ready for analysis and computer simulation. Required for the most advanced technologies. +se-deep-space-science-pack=Wymagany dla najbardziej zaawansowanej technologii +se-dimensional-anchor=Wykorzystuje grawitację gwiazdy jako punkt stabilizacji anomalii przestrzennej. +se-electric-boiler=Wytwarza parę wodną za pomocą energii elektrycznej. 90% wydajności energetycznej. +se-energy-science-pack=Umożliwia badania technologii związanych z podstawowymi siłami i odkryciami subatomowymi. +se-fluid-burner-generator=Wymaga paliwa płynnego o wartości energetycznej (takiego jak płynne paliwo rakietowe) do wytworzenia energii elektrycznej. Prosty i kompaktowy, ale pozbawiony efektywności energetycznej większych systemów na bazie pary. Zaprojektowany na potrzeby przestrzeni kosmicznej. Ilość zużywanegeo paliwa zależy od jego wartości energetycznej. +se-fuel-refining=Rafinuje bardziej zaawansowane paliwa. +se-heat-shielding=Panel kompozytowy stosowany do zastosowań w wysokich temperaturach i strukturach kosmicznych. +se-long-range-star-mapping=Niektóre odległe galaktyki można zidentyfikować za pomocą określonych wzorów niezwykłych gwiazd. Wyniki są rejestrowane w [img=virtual-signal/informatron] Informatron [__CONTROL__informatron__]. +se-material-science-pack=Umożliwia badania technologii związanych z zaawansowanymi materiałami w celu uzyskania bardziej zaawansowanych wymagań inżynieryjnych. +se-medpack=Użyj medpack, aby się wyleczyć. +se-medpack-2=Użyj medpack, aby się wyleczyć. +se-medpack-3=Użyj medpack, aby się wyleczyć. +se-medpack-4=Użyj medpack, aby się wyleczyć. +se-meteor-defence=Strzelaj do meteorów, zanim zniszczą Twoje rzeczy. Obrony przed meteorami może chronić całą planetę, ale może zestrzelić tylko jeden meteor na raz. +se-meteor-point-defence=Strzelaj do meteorów, zanim zniszczą Twoje rzeczy. Obrona punktowa może chronić niewielki obszar przed maksymalnie 4 meteorami jednocześnie. +se-nanomaterial=Skomplikowane rozmieszczenie różnych materiałów zorganizowane w skali nano, aby stworzyć kompozyt o doskonałych właściwościach. +se-railgun=Strzałki przyspieszane elektromagnetycznie napędzane z taką prędkością, że pozostawiają ślad plazmy przed odparowaniem. Wysokie obrażenia, powolna szybkostrzelność. +se-plague=Wielka plaga, która zniszczy całe życie z całych planet. Postępuj z nią z NADZWYCZAJNĄ ostrożnością. +se-processing-beryllium=Przekształcaj beryl w beryl niezwykle lekki, odporny na korozję i odporny na promieniowanie metal. Nie ma też prawie żadnej interakcji z Promieniowaniem X (xray). +se-processing-cryonite=Przetwarzanie zamrożonych kryształów krionitu na pręty krionitowe, które znajdują zastosowanie w chłodnictwie, chłodzeniu i smarowaniu. Krionit występuje głównie na zamrożonych planetach. +se-processing-holmium=Przekształca holminit w holm, ziemski rzadki metal z najwyższą przepuszczalnością magnetyczną dowolnego elementu. +se-processing-iridium=Przekształca iryryt w iryd, najbardziej odporny metal na korozję i najgęstszy pierwiastek w wyższych temperaturach. Ważne w ciężkich zastosowaniach. +se-processing-naquium=Przekształcanie tajemniczego kosmicznego kryształu naquitite w naquium, metalopodobny materiał o niezwykłych interakcjach czasoprzestrzennych. +se-processing-vitamelange=Przekształca prymitywną witaminową gąbkę kamienną w cenny ekstrakt odżywczy. +se-processing-vulcanite=Przekształcanie wulkanicznego kryształu wulkanitu w rafinowany proszek stosowany w zaawansowanych wytopach, paliwie rakietowym i innych wysokotemperaturowych procesach chemicznych. Wulkanit znajduje się na planetach wulkanicznych i w większości fragmentów rdzenia. +se-pulveriser=Sproszkuje i zmiażdży twardsze minerały i fragmenty rdzenia planety. +se-rocket-cargo-safety=Zmniejsza prawdopodobieństwo uszkodzenia ładunków podczas transportu o dodatkowe 10% (multiplikatywnie). +se-rocket-fuel-from-water=Wytwarza paliwo rakietowe wodorowo-tlenowe poprzez elektrolizę wody. +se-rocket-landing-pad=Umożliwia dostarczanie rakiet transportowych do wskazanego lądowiska. Dzięki dalszym badaniom może także odzyskać części rakiet. +se-rocket-launch-pad=Pozwala wystrzelić ładunek w kosmos lub na inne planety. +se-rocket-reusability=Zwiększa procent części, które można odzyskać po udanym lądowaniu na lądowisku o 4% (baza wynosi 20%, maks. 100%). +se-rocket-survivability=Zmniejsza prawdopodobieństwo uszkodzenia rakiet podczas transportu lub awarii nawigacji, w wyniku której brakuje lądowiska o dodatkowe 10% (multiplikatywnie). +se-rtg-equipment=Radioizotopowy generator termoelektryczny. Przenośny generator, który przekształca ciepło z rozpadu promieniotwórczego w energię elektryczną. Działa przez dziesięciolecia bez dodatkowego paliwa. +se-rtg-equipment-2=Radioizotopowy generator termoelektryczny. Ulepszony przenośny generator, który przekształca ciepło z rozpadu promieniotwórczego w energię elektryczną. Działa przez dziesięciolecia bez dodatkowego paliwa. +se-space-assembling=Zmodyfikowana maszyna do montażu, która może pracować w przestrzeni kosmicznej. +se-space-astrometrics-laboratory=Łączy, porównuje i kwantyfikuje różne źródła informacji astronomicznej. +se-space-biochemical-laboratory=Zaawansowane laboratorium chemiczne specjalizujące się w biochemii. Może również wykonywać bardziej podstawowe przetwarzanie chemiczne i olejowe. +se-space-catalogue-astronomic=Dane astronomiczne ustrukturyzowane do analizy i symulacji komputerowej. Wymagane do dalszych badań astronomicznych. +se-space-catalogue-biological=Dane biologiczne ustrukturyzowane gotowe do analizy i symulacji komputerowej. Wymagane do dalszych badań biologicznych. +se-space-catalogue-universal=Połączone dane do analizy i symulacji komputerowej. Wymagane do dalszych badań w kosmosie. +se-space-catalogue-energy=Dane energetyczne ustrukturyzowane gotowe do analizy i symulacji komputerowej. Wymagane do dalszych badań nad energią. +se-space-catalogue-material=Dane materiałowe ustrukturyzowane gotowe do analizy i symulacji komputerowej. Wymagane do dalszych badań materiałowych. +se-space-data-card=Wielofunkcyjne urządzenie do przechowywania danych. Wymagany do bardziej zaawansowanych badań opartych na danych. +se-space-decontamination-facility=Czyści substancje do stosowania w warunkach sterylnych i przygotowuje płyny do zastosowania w warunkach niskiego ciśnienia. +se-space-electromagnetics-laboratory=Sprzęt do intensywnego pola magnetycznego i bardzo wysokiego napięcia. +se-space-genetics-laboratory=Laboratorium poświęcone sekwencjonowaniu genetycznemu, modyfikacji genetycznej i genetycznemu drukowaniu kultur. +se-space-gravimetrics-laboratory=Analizuje i symuluje zaburzenia grawitacyjne. +se-space-growth-facility=Hoduje okazy biologiczne w różnych kontrolowanych warunków, które nie są możliwe nigdzie indziej, takie mikrograwitacyjne +se-space-hypercooling=Dokonuje wymiany ciepła na płynie chłodzącym, czyniąc jeden cieplejszym, a drugi zimniejszym. +se-space-laser-laboratory=Eksperymenty z laserami. Należy nosić ochronę oczu. +se-lifesupport-facility=Podtrzymywanie życia w bardziej nieprzyjaznych środowiskach. +se-space-manufactory=Kluczowa technologia do masowej produkcji w kosmosie. +se-space-material-fabricator=Syntezuje nowe materiały. Skrzyżowanie zderzacza cząstek z drukarką 3d. +se-space-matter-fusion=Wytwarzanie materiałów metodą fuzji. +se-space-mechanical-laboratory=Zapewnia szereg procesów mechanicznych: kruszenie, rozdzieranie, ścinanie, wibrowanie itp. +se-space-particle-accelerator=Przyspiesza cząstki w pobliżu prędkości światła. +se-space-particle-collider=Zbiera cząsteczki o dużej prędkości i analizuje wyniki. +se-space-plasma-generator=Generuje różne plazmy. +se-space-platform-plating=Solidna platforma kosmiczna. Gładka i szybka do spacerów kosmicznych. +se-space-platform-scaffold=Podstawowe rusztowanie platformy kosmicznej. Coś, na czym można zbudować, ale nie jest to świetne rozwiązanie do spacerów kosmicznych. +se-space-radiation-laboratory=Stosunkowo bezpieczne miejsce do zabawy z materiałem radioaktywnym. Może być stosowany do przetwarzania uranu. +se-space-radiator=Odbiera nadmiar ciepła z przegrzanego plynu chłodzącego. +se-space-radiator-2=Odbiera nadmiar ciepła z przegrzanego plynu chłodzącego. +se-space-radiating=Wolniejsze, ale bardziej zasobooszczędne chłodzenie przegrzanego termopłynu. +se-space-rail=Szyny, których można bezpiecznie używać w kosmosie, ponieważ zapobiegają wypadaniu pociągu z torów i niszczeniu wszystkiego wokół. Mogą być również stosowane na lądzie ze względów estetycznych. +se-recycling-facility=Złomowanie przedmiotów i przerabianie złomu na surowce. +se-space-science-lab=Umożliwia przetwarzanie pakietów rakietowych i bardziej zaawansowanych badań kosmicznych. +se-space-simulation-ab=Wydajniejsza symulacja dzięki połączeniu wielu dyscyplin. +se-space-simulation-am=Wydajniejsza symulacja dzięki połączeniu wielu dyscyplin. +se-space-simulation-as=Wydajniejsza symulacja dzięki połączeniu wielu dyscyplin. +se-space-simulation-bm=Wydajniejsza symulacja dzięki połączeniu wielu dyscyplin. +se-space-simulation-sb=Wydajniejsza symulacja dzięki połączeniu wielu dyscyplin. +se-space-simulation-sm=Wydajniejsza symulacja dzięki połączeniu wielu dyscyplin. +se-space-simulation-abm=Wydajniejsza symulacja dzięki połączeniu wielu dyscyplin. +se-space-simulation-asb=Wydajniejsza symulacja dzięki połączeniu wielu dyscyplin. +se-space-simulation-asm=Wydajniejsza symulacja dzięki połączeniu wielu dyscyplin. +se-space-simulation-sbm=Wydajniejsza symulacja dzięki połączeniu wielu dyscyplin. +se-space-simulation-asbm=Wydajniejsza symulacja dzięki połączeniu wielu dyscyplin. +se-space-solar-panel=Panel słoneczny o wysokiej wydajności, po którym można chodzić. +se-space-spectrometry-facility=Spektrofotometria, chromatografia gazów, spektrometria masy i inne spektrografie. Strzelaj w ścianę, zegnij ją i patrz gdzie uderzy. +se-space-supercomputer=Umożliwia bardziej zaawansowaną manipulację i przetwarzanie danych oraz symulację. +se-space-telescope=Wyrafinowany teleskop wrażliwy na wiele długości fali wokół widma widzialnego. +se-space-telescope-gammaray=Promienie gamma nie załamują się, więc nie można skupić ich na soczewkach. Ten potężny teleskop wykorzystuje lustra i specjalne detektory. +se-space-telescope-xray=Promienie rentgenowskie blokują większość atmosfer. Ten potężny teleskop jest przeznaczony do kosmosu, w których atmosfera nie stanowi problemu. +se-space-telescope-microwave=Ogromny teleskop wykrywający mikrofale i kosmiczne tło mikrofalowe. +se-space-telescope-radio=Ogromny teleskop, który wykrywa bardzo słabe fale radiowe z odległych źródeł. +se-space-thermodynamics-laboratory=Podejmuje procesy wymagające ekstremalnych temperatur. Potrafi także wykonywać podstawowe procesy termiczne, takie jak wytapianie. +se-spaceship=Statek, który budujesz kawałek po kawałku z podłogą i ścianami, a następnie użyj konsoli, aby polecieć na inną planetę lub dalej. +se-spaceship-integrity=Każdy poziom zwiększa limit wytrzymałości na integralność strukturalną statku kosmicznego o 100. +se-factory-spaceship=Każdy poziom zwiększa limit wytrzymałości na integralność strukturalną statku kosmicznego o 500. +se-superconductive-cable=Nadprzewodzący kabel kompozytowy, który nie wymaga aktywnego chłodzenia. +se-teleportation=Odblokowuje inne technologie teleportacji. Okazuje się, że wypaczanie przestrzeni w tym zakresie jest naprawdę trudne. +se-tesla-gun=Szybkie strzelanie piorunami. Może trafić do 30 wrogów na pocisk. Wykonuje długie skoki między celami lub krótkie skoki po ziemi, jeśli nie ma żadnych celów. +se-thruster-suit=Skafander kosmiczny z silnikami odrzutowymi i buty magnetyczny. Nie idź w kosmos bez tego. +se-thruster-suit-2=Ulepszony kombinezon kosmiczny z silniejszymi silnikami, zwiększonym inwentarzem i większą siatką. +se-thruster-suit-3=Ulepszony kombinezon kosmiczny z silniejszymi silnikami, zwiększonym inwentarzem i większą siatką. +se-thruster-suit-4=Ulepszony kombinezon kosmiczny z silniejszymi silnikami, zwiększonym inwentarzem i większą siatką. +space-science-pack=Umożliwia bardziej bezpośredni rozwój pakietów rakietowych i technologii, które korzystają z tych osiągnięć. +se-aeroframe-pole=Mocny, lekki pręt berylu powszechnie stosowany jako belka nośna w lotnictwie i eksploracji kosmosu. +se-aeroframe-scaffold=Mocna, lekka rama strukturalna z berylu, powszechnie stosowana jako główny szkielet wewnętrzny statków powietrznych i kosmicznych. +se-aeroframe-bulkhead=Mocna, lekka hermetyczna ściana berylowa stosowana jako zewnętrzna powłoka lub ściany przedziałów pomocniczych statków powietrznych i kosmicznych. +se-lattice-pressure-vessel=Mocne, lekkie berylowe naczynie ciśnieniowe z wewnętrzną siatką, która pozwala niektórym płynom sprężać się powyżej ich normalnych granic. W przypadku pęknięcia płyn pod ciśnieniem jest bezpiecznie odpowietrzany. +se-heavy-girder=Ciężka irydowa belka strukturalna stosowana głównie w przemyśle ciężkim i ciężkich okrętach wojskowych. +se-heavy-bearing=Duże ciężkie łożysko irydowe, które może działać w nieskończoność pod wpływem sił, które zmiażdżyłyby mniejsze materiały. +se-heavy-composite=Gruba, prawie nieprzenikniona przegroda, która jest praktycznie odporna na ciepło, korozję, promieniowanie i siłę mechaniczną, ale jest niezwykle ciężka. +se-heavy-assembly=Ciężki mechaniczny zespół kół zębatych i konfigurowalnych elementów stosowanych w przemyśle ciężkim. +se-bioscrubber=Komora przetwarzania materiału, która wykorzystuje procesy biologiczne do rozkładania niepożądanych materiałów. +se-vitalic-epoxy=Niezwykle silny epoksyd pochodzenia biologicznego o właściwościach regeneracyjnych. +se-vitalic-reagent=Wydajny odczynnik uniwersalny do szerokiego zakresu reakcji chemicznych. +se-vitalic-acid=Mocny koktajl różnych kwasów. +se-self-sealing-gel=Lepki żel pod ciśnieniem, ale stały jak stal po wystawieniu na działanie próżni. Często stosowany jako folia wewnętrzna w grodziach do biernego uszczelniania nakłuć. +se-holmium-cable=Kabel w osłonie zaprojektowany specjalnie w celu wyeliminowania niepożądanych szumów w linii, które mogą zakłócać pracę wrażliwej elektroniki. +se-holmium-solenoid=Niezwykle silny elektromagnes. +se-quantum-processor=Wykorzystuje superpozycję i uwikłanie, aby wydajniej pracować nad problemami o dużej złożoności. +se-dynamic-emitter=Szybko regulowany system emitujący światło lub cząstki, który może zmieniać szereg właściwości dla większego zakresu lub trybów skanowania lub właściwości penetracji materiału. +se-naquium-cube=Wykorzystując niezwykłą interakcję naquium z czasoprzestrzenią, można złożyć dużą objętość w małą kostkę. +se-naquium-tessaract=Osobliwy obiekt, który osiada w kształcie sześcianu, ale zmienia się w szereg innych kształtów geometrycznych, jest obracany lub przyspieszany. +se-naquium-processor=Obliczenia w obrębie hipersześcianu z Naquium omija niektóre ze zwykłych ograniczeń gęstości obliczeniowej. +effect-transmission=Radionadajnik przesyła efekty modułów do pobliskich przyjaznych jednostek w obrębie 3 pól. Posiada 8 gniazd modułów. Wiele radionadajników wpływających na ten sam podmiot przeciąży go i uniemożliwi działanie. +se-wide-beacon=Wielki radionadajnik przekazuje efekty modułów do pobliskich budynków w promieniu 14 pól. Posiada 15 gniazd modułów, a po ulepszeniu 20. Wiele radionadajników wpływających na ten sam podmiot przeciąży go i uniemożliwi działanie. +se-wide-beacon-2=Wielki radionadajnik 2 przekazuje efekty modułów do pobliskich budynków w promieniu 14 pól. Posiada 20 gniazd modułów. Wiele radionadajników wpływających na ten sam podmiot przeciąży go i uniemożliwi działanie. +se-lifesupport-equipment-1=Zwiększa efektywność podtrzymywania życia o +100% (dodatkowo). Jeśli jest zainstalowany w kombinezonie innym niż skafander kosmiczny, premia za wydajność jest zmniejszona o połowę. +se-lifesupport-equipment-2=Zwiększa efektywność podtrzymywania życia o +200% (dodatkowo). Jeśli jest zainstalowany w kombinezonie innym niż skafander kosmiczny, premia za wydajność jest zmniejszona o połowę. +se-lifesupport-equipment-3=Zwiększa efektywność podtrzymywania życia o +400% (dodatkowo). Jeśli jest zainstalowany w kombinezonie innym niż skafander kosmiczny, premia za wydajność jest zmniejszona o połowę. +se-lifesupport-equipment-4=Zwiększa efektywność podtrzymywania życia o +800% (dodatkowo). Jeśli jest zainstalowany w kombinezonie innym niż skafander kosmiczny, premia za wydajność jest zmniejszona o połowę. +se-supercharger=Może ładować do 64 robotów jednocześnie z dużą prędkością. Maksymalny pobór mocy przez konstrukcję wynosi 1 GW. +se-pylon=Dystrybuuje energię elektryczną. Zasięg przewodu: 64. +se-pylon-substation=Dystrybuuje energię elektryczną. Zasięg przewodu:64, obszar działania: 64x64. +se-pylon-construction=Dystrybuuje energię elektryczną i rozszerza zasięg konstrukcyjny. Zasięg przewodu: 64, obszar działania: 64x64. +se-pylon-construction-radar=Dystrybuuje energię elektryczną, rozszerza zasięg konstrukcyjny i zapewnia widzenie radarowe. Zasięg: 64, obszar konstrukcyjny i radarowy 256 x 256. +se-shield-projector=Tworzy ochronne pole siłowe. Więcej energii jest potrzebne, gdy projektor się ładuje lub gdy osłona ulega uszkodzeniu. Może blokować pociski strzelane, jeśli zainstalowany jest mod "Walls Block Spitters". +se-deep-space-transport-belt=Szybkie dalekobieżne pasy transportowe, które można umieścić w kosmosie. Różne kolory mogą być użyte do łatwej identyfikacji linii z odległości. +se-big-turbine=Duży generator 1GW, który pobiera parę 5000°C, wytwarza parę 500°C na drugim końcu i wypuszcza wodę z boków. 99% wydajności energetycznej, 99% oszczędności wody. +se-big-heat-exchanger=Duży wymiennik ciepła przeznaczony do wysokich temperatur i wysokiej wydajności. +se-addon-power-pole=Mały słup elektryczny przeznaczony do zamocowania na budynkach lub do precyzyjnej kontroli zasięgu elektryczności. +se-zone-discovery-random=Szukaj planet, księżyców i pasów asteroid za pomocą teleskopów. +se-zone-discovery-targeted=Szukaj planet, księżyców i pasów asteroid, które mają określone zasoby. Wybierz preferencję zasobów w obszarze [img=virtual-signal/informatron] Informatron > Odkrywanie stref. +se-zone-discovery-deep=Szukaj interesujących obszarów głębokiej przestrzeni międzygwiezdnej. Pola asteroid mogą mieć wiele unikalnych i cennych zasobów. +se-delivery-cannon=Armata zdolna do wystrzeliwania zasobów na orbitę i poza nią do opancerzonej skrzyni, aby je złapać. +se-delivery-cannon-weapon=Armata zdolna do strzelania wybranymi broniami, takimi jak bomba atomowa, na inne powierzchnie. +se-spaceship-clamps=Umożliwia umieszczenie zacisków dokowania, aby statki kosmiczne mogły zakotwiczyć w określonej lokalizacji, dopasowując odpowiednie pozycje zacisków. Automatyzacja wymaga sygnałów „Zakotwicz za pomocą” i „Zakotwicz do” podawanych do konsoli. +se-bio-upgrade-constitution=Zwiększa maksymalne zdrowie. +se-bio-upgrade-strength=Zwiększa wielkość ekwipunku. +se-bio-upgrade-agility=Zwiększa szybkość poruszania się. +se-bio-upgrade-dexterity=Zwiększa prędkością wytwarzania ręcznego. +se-bio-upgrade-intelligence=Zwiększa zdobytą wiedzę z każdego pakietu naukowego. +se-energy-beaming=An intense energy beam that can be used as a weapon from the sky, or to transfer power where it is needed. +se-energy-beam-defence=Defends against space-based energy beams and coronal mass ejections. Works by levitating magnetic particles into a protective bubble, then realignes and clumps the particles as needed to diffuse hostile energy beams. +se-nexus=A device that can be activated on a spaceship moving in interstellar space to generate data, and with additional technology activate is space distortion field (Spaceship Victory). +se-spaceship-victory=Allows the Nexus to activate a distortion drive to escape the local stellar cluster. Have a Nexus on a 3000+ integrity spaceship moving at 250 speed in interstellar space for 60 seconds to win the game. +se-arcosphere=Allows the collection of arcospheres lost in the interstellar void. +se-arcosphere-folding=Allows the use of arcospheres as extradimensional pincers. +se-space-probe=A space-based rocket silo for launching space probes. Can also be used to launch satellites cheaply. + +[modifier-description] +tesla-shooting-speed-bonus=Tesla: prędkość strzelania +tesla-damage-bonus=Tesla: premia do obrażeń +railgun-damage-bonus=Railgun: premia do obrażeń +railgun-shooting-speed-bonus=Railgun: prędkość strzelania +cryogun-shooting-speed-bonus=Broń Lodowa: prędkość strzelania +cryogun-damage-bonus=Broń Lodowa: premia do obrażeń +character-running-speed=Bonus poruszania się postaci: +__1__ +character-crafting-speed=Szybkość wytwarzania ręcznego postaci: +__1__ + +[virtual-signal-name] +signal-speed=Szybkość +se-signal-speed=Szybkość +signal-distance=Odległość +se-signal-distance=Odległość +se-star=Gwiazda +se-planet=Planeta +se-planet-orbit=Orbita planety +se-moon=Księżyc +se-moon-orbit=Orbita księżyca +se-asteroid-belt=Pas asteroid +se-asteroid-field=Pole Asteroid +se-anomaly=Anomalia +se-meteor=Meteor +se-spaceship=Statek kosmiczny +se-cargo-rocket=Rakieta Transportowa +se-remote-view=Widok zdalny +se-death=Śmierć +se-character-corpse=Zwłoki +se-ruin=Ruina +se-accolade=Wyróżnienie +se-remove=Usuń +se-radius=Promień +se-hierarchy=Hierarchia +se-spaceship-launch=Wystartowanie statku kosmicznego +se-anchor-using-left-clamp=Zakotwicz za pomocą lewego zacisku statku kosmicznego +se-anchor-using-right-clamp=Zakotwicz za pomocą prawego zacisku statku kosmicznego +se-anchor-to-left-clamp=Zakotwicz do lewego zacisku docelowego +se-anchor-to-right-clamp=Zakotwicz do prawego zacisku docelowego +se-beacon-overload=Przeciążenie radionadajnikami +se-heat=Ciepło + +[controls] +se-remote-view=Nawigacja satelitarna +se-universe-explorer=Eksloracja wszechświata +se-respawn=Odrodzenie +se-mode-toggle=Przełącz tryb działania obiektu + +[shortcut] +se-remote-view=Nawigacja satelitarna +se-universe-explorer=Eksloracja wszechświata +se-respawn=Odrodzenie + +[shortcut-name] +se-remote-view=Nawigacja satelitarna [__CONTROL__se-remote-view__] +se-universe-explorer=Eksploracja Wszechświata [__CONTROL__se-remote-view__] +se-respawn=Odrodzenie [__CONTROL__se-respawn__] + +[tile-name] +se-space-platform-plating=Poszycie platformy kosmicznej +se-space-platform-scaffold=Rusztowanie platformy kosmicznej +se-space-platform-underlay=Kosmos +se-space-platform-underlay-l=Kosmos +se-space-platform-underlay-r=Kosmos +se-space=Pusta przestrzeń kosmiczna +se-regolith=Regolit +se-asteroid=Asteroida +se-spaceship-floor=Podłoga statku kosmicznego + +[mod-setting-name] +se-meteor-interval=Odstęp między meteorytami +se-plague-max-runtime=Maksymalny czas trwania zarazy +se-planets=Liczba planet +se-planet-size=Powierzchnia planety (1% do 10000%) +se-seed=Generowanie planet - Seed +se-skip-experimental-warning=Pomiń eksperymentalne ostrzeżenie +se-print-meteor-info=Wyświetlaj informacje o meteorytach w konsoli +se-space-pipe-capacity=Pojemność rur kosmicznych +se-electric-boiler=Kocioł elektryczny +se-deep-space-belt-speed=Szybkość taśmociągów dalekiego kosmosu +se-deep-space-belt-black=Czarny taśmociąg +se-deep-space-belt-white=Biały taśmociąg +se-deep-space-belt-red=Czerwony taśmociąg +se-deep-space-belt-yellow=Żółty taśmociąg +se-deep-space-belt-green=Zielony taśmociąg +se-deep-space-belt-cyan=Błękitny taśmociąg +se-deep-space-belt-blue=Niebieski taśmociąg +se-deep-space-belt-magenta=Purpurowy taśmociąg +se-space-science-pack=Zamiennik kosmicznego pakietu naukowego +se-never-show-lifesupport=Nigdy nie pokazuj interfejsu wsparcia życia +se-show-zone-preview=Pokaż podląd powierzchni w oknie informacyjnym +se-pylon-charge-points=Liczba punktów ładowania pylonu konstrukcyjnego +se-cmes-max-frequency=Maksymalny odstęp między koronalnymi wyrzutami masy +se-spawn-small-resources=Dodaj małe początkowe złoża zasobów +se-show-overhead-button-satellite-mode=Pokaż przycisk nawigacji satelitarnej +se-show-overhead-button-interstellar-map=Pokaż przycisk mapy międzygwiezdnej +se-show-overhead-button-universe-explorer=Pokaż przycisk Eksploracji Wszechświata +se-scan-search-budget=Liczba jednocześnie sprawdzanych bloków przy skanowaniu +se-scan-chart-budget=Liczba jednocześnie generowanycch bloków przy skanowaniu +se-supercharger-individual-charge-rate=Szybkość ładowania botów przez Superładowarkę (MW) + +[mod-setting-description] +se-meteor-interval=Podstawowy czas w minutach między uderzeniami meteorów. Po każdym uderzeniu kolejne uderzenie ustawia się na losową liczbę minut między 1 a tą wartością. +se-plague-max-runtime=Maksymalny czas działania broni biologicznej w minutach. Po tym jak Zaraza zadziała, przez ten czas, wszystkie drzewa i wrogowie zostają zniszczone. +se-planets=Nie zmieniaj w trakcie kampanii. +se-planet-size=Nie zmieniaj w trakcie kampanii. +se-seed=Nie zmieniaj w trakcie kampanii. +se-skip-experimental-warning=Ostrzeżenie o rozpoczęciu nowej gry nie pojawi się, a jeśli komunikat się zmieni, nie otrzymasz ostrzeżeń. +se-print-meteor-info=Umożliwia wyświetlanie alertów w konsoli po tym, jak główny alert zniknie po naciśnięciu przycisku klawisza __CONTROL__toggle-console__. +se-space-pipe-capacity=Wydajność płynu dla rur kosmicznych. +se-electric-boiler=Dodaje kocioł elektryczny do gry. +se-deep-space-belt-speed=Deep space belts are supposed to be the fastest belts. If you have other mods that add faster belts, you can increase the deep space belt speed to match or exceed. +se-deep-space-belt-black=Czarny taśmociąg, rozdzielacz i taśmociąg podziemny można wyłączyć, aby zmniejszyć bałagan w interfejsie użytkownika. +se-deep-space-belt-white=Biały taśmociąg, rozdzielacz i taśmociąg podziemny można wyłączyć, aby zmniejszyć bałagan w interfejsie użytkownika. +se-deep-space-belt-red=Czerwony taśmociąg, rozdzielacz i taśmociąg podziemny można wyłączyć, aby zmniejszyć bałagan w interfejsie użytkownika. +se-deep-space-belt-yellow=Zółty taśmociąg, rozdzielacz i taśmociąg podziemny można wyłączyć, aby zmniejszyć bałagan w interfejsie użytkownika. +se-deep-space-belt-green=Zielony taśmociąg, rozdzielacz i taśmociąg podziemny można wyłączyć, aby zmniejszyć bałagan w interfejsie użytkownika. +se-deep-space-belt-cyan=Błękitny taśmociąg, rozdzielacz i taśmociąg podziemny można wyłączyć, aby zmniejszyć bałagan w interfejsie użytkownika. +se-deep-space-belt-blue=Niebieski taśmociąg, rozdzielacz i taśmociąg podziemny można wyłączyć, aby zmniejszyć bałagan w interfejsie użytkownika. +se-deep-space-belt-magenta=Purpurowy taśmociąg, rozdzielacz i taśmociąg podziemny można wyłączyć, aby zmniejszyć bałagan w interfejsie użytkownika. +se-space-science-pack=Jeśli inny mod doda sposób uzyskania nauki o kosmosie, wówczas zastosowana zostanie ta metoda. Jeśli nie ma sposobu, aby to zrobić, eksploracja kosmiczna może go usunąć lub wykorzystać jako pakiet naukowy dotyczący optymalizacji. +se-never-show-lifesupport=Jeśli zaznaczone, GUI wsparcia życia nie będzie nigdy wyświetlane, nawet jeśli się dusisz. +se-show-zone-preview=Odznacz, aby wyłączyć okno podglądu strefy w Eksploratorze Wszechświata. Jeśli masz aktywne niektóre nakładki debugowania Factorio, okno podglądu może zmniejszyć liczbę klatek na sekundę. +se-pylon-charge-points=Uncheck to remove construction pylon charge points. This helps control bot charging behaviour, but you may need to add other charging options along long distance routes. +se-cmes-max-frequency=Maksymalny odstęp czasowy pomiędzy koronalnymi wyrzutami masy (CME). Wartość w godzinach, 0 = wyłączone. Pierwszy CME ma miejsce w pierwszej minucie gry i jest małoszkodliwy. Drugi nastąpi po około 48 godzinach gry. Odstęp między kolejnymi będzie pomiędzy 50% a 100% ustawionej wartości. Niezerowe ustawienie będzie miało wpływ tylko na nowe wydarzenie; obecne ETA nie zostanie zmienione. Ustawienie na zero spowoduje anulowanie CME, dla których odliczanie już się rozpoczęło, zmiana ustawienia będzie miała efekt najpóźniej po minucie. +se-spawn-small-resources=Dodaje dodatkowe złoża zasobów na miejscu startowym. Będą one blisko siebie aby oszczędzić biegania. +se-show-overhead-button-satellite-mode=Pokaż mały przycisk w lewym górnym rogu ekranu aby przełączać nawigację satelitarną. +se-show-overhead-button-interstellar-map=Pokaż mały przycisk w lewym górnym rogu ekranu aby przełączać mapę przestrzeni międzygwiezdnej. +se-show-overhead-button-universe-explorer=Pokaż mały przycisk w lewym górnym rogu ekranu aby przełączać eksploratora wszechświata. +se-scan-search-budget=Skanowanie satelitarne: Liczba bloków pól, która może być jednocześnie sprawdzana. Wysoka wartość przyspiesza dotarcie do brzegu odkrytego terenu. +se-scan-chart-budget=Skanowanie satelitarne: Liczba żądań generowania bloków pól, która może być zakolejkowana jednocześnie. Nowe żądania nie będą dodane dopóki generowanie poprzednich nie zakończy się. +se-supercharger-individual-charge-rate=Sets the charging rate of each individual charging port in the supercharger, in MW (does not affect maximum charge rate). Minimum (default) value is 90 MW, enough to charge a vanilla robot in one tick, up to 1000 MW, or 1 GW, the maximum charge rate of the supercharger. + +[string-mod-setting] +se-space-science-pack-Remove=Usuń całkowicie +se-space-science-pack-Replace=Zastąp przez Rakietowy pakiet naukowy +se-space-science-pack-OptimisationUranium=Optymalizacja: formuła krio-uran +se-space-science-pack-OptimisationFish=Optymalizacja: formuła vita-vulca-ryba + +[autoplace-control-names] +planet-size=Wielkość planety +se-water-ice=Lód wodny (tylko kosmos) +se-methane-ice=Lód metanowy (tylko kosmos) +se-cryonite=Krionit (nie na planecie macierzystej) +se-vulcanite=Wulkanit (nie na planecie macierzystej) +se-vitamelange=Gąbczasta Skamielina odżywcza (nie na planecie macierzystej) +se-beryllium-ore=Ruda Berylu (nie na planecie macierzystej) +se-holmium-ore=Ruda Holmu (nie na planecie macierzystej) +se-iridium-ore=Ruda Irydu (nie na planecie macierzystej) +se-naquium-ore=Ruda Naquium (tylko kosmos) + +[map-gen-preset-name] +space-exploration=Ustawienia domyślne Space Exploration + +[map-gen-preset-description] +space-exploration=Domyślne dla Space Exploration \ No newline at end of file diff --git a/space-exploration_0.5.80/space-exploration/locale/pt-BR/strings.cfg b/space-exploration_0.5.80/space-exploration/locale/pt-BR/strings.cfg new file mode 100644 index 0000000..ed37f4e --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/locale/pt-BR/strings.cfg @@ -0,0 +1,2277 @@ +spaceship-integrity100=+100 Integridade estrutural da nave espacial +spaceship-integrity300=+300 Integridade estrutural da nave espacial +spaceship-integrity500=+500 Integridade estrutural da nave espacial +arcosphere-discovery=Colete arcosferas do espaço interestelar +core-mining-productivity-5=+5% Produtividade de mineração central +se-zone-discovery-random=Aciona a exploração de zona aleatória quando explorada. +se-zone-discovery-targeted=Aciona Exploração de Zona Orientada a Recursos quando explorada. +se-zone-discovery-deep=Aciona a exploração da zona espacial quando explorada. +unlock-spaceship-victory=Desbloqueia a condição de vitória para naves espaciais: Pilote uma nave espacial com mais de 3000 integridade em um Nexus que funciona no modo Distortion Driver a 250 velocidades por 60 segundos no espaço interestelar. + +[mod-name] +space-exploration=Space Exploration + +[mod-description] +space-exploration=Construa mísseis de carga para enviar coisas para o espaço. Voe para o espaço com um foguete e comece sua caminhada no espaço. Construa uma plataforma espacial orbital para desenvolver uma exploração espacial intrincada e baseada em dados. Construa uma nave espacial peça por peça, voe de uma superfície de um planeta para outra, para a lua, para os cinturões de asteróides e muito mais. + +[space-exploration] +space-exploration=Space Exploration +menu_space-exploration=Space Exploration +title_space-exploration=Space Exploration +off=off +on=on +close=fechar +show=mostrar +close-instruction-only-confirm=Fechar (__CONTROL__confirm-gui__) +show-own-location=Mostrar sua própria localização +wdc_auto_off=Aquisição manual de alvo +wdc_auto_on=Aquisição automática de alvo +name=Nome +rename-something=Renomear __1__ +trigger-none=Nenhum (manual) +trigger-fuel-full=Comece quando o combustível estiver cheio +trigger-cargo-full=Comece quando a carga estiver cheia +trigger-fuel-full-signal=Comece quando o sinal estiver verde e o combustível estiver cheio +trigger-cargo-full-signal=Comece quando o sinal estiver verde e a carga estiver cheia +trigger-cargo-full-or-signal=Comece com um sinal verde ou carga cheia +destination-type-zone=Localização aproximada +destination-type-landing-pad=Plataforma de pouso de carga +button-launch=Começar +button-launch-disabled=Iniciar (desabilitado) +destination-crash-warning=Warnung: Selecione um local de pouso de carga para reduzir a chance de um acidente +recipe-to=__1__ para __2__ +recipe-from=__1__ de __2__ +simple-a-b=__1____2__ +simple-a-b-space=__1__ __2__ +simple-a-b-comma=__1__, __2__ +simple-a-b-break=__1__\n__2__ +simple-bold=[font=default-bold]__1__[/font] +star-map=Mapa estelar +interstellar-map=Mapa do espaço +interstellar-space=espaço +planetary-system=__1__ Sistema +solar-system=__1__ Sistema +remote-view=Uplink de satélite de navegação [__CONTROL__se-remote-view__] +remote-view-window-title=[img=virtual-signal/se-remote-view] Satélite de navegação [__CONTROL__se-remote-view__] +remote-view-currently-viewing=Atualmente exibido: +remote-view-instruction=Lance mais satélites para descobrir estrelas, planetas, luas e outras áreas. +remote-view-spaceships=__1__ Naves espaciais +remote-view-spaceships-anchored=__1__ Nave espacial ancorada +remote-view-clamps=__1__ Pinças de nave espacial +remote-view-show-hide-resources= Mostrar / ocultar recursos +remote-view-show-hide-stats= Mostrar / ocultar estatísticas +remote-view-show-hide-anchor-info= Mostrar / ocultar informações da âncora +remote-view-show-hide-danger-zones=Mostrar / ocultar zonas de perigo +open-pins-remote-view=Todos os pinos [__CONTROL__se-remote-view-pins__] +exit-pins-remote-view=Sair de todos os pinos [__CONTROL__se-remote-view-pins__] +remote-view-history-delete=Exclua o gradiente da superfície. +remote-view-history-previous=Rebobine ao longo da superfície [__CONTROL__se-remote-view-previous__].\n__1__ +remote-view-history-next=Avanço rápido ao longo da superfície [__CONTROL__se-remote-view-next__].\n__1__ +remote-view-history-item=__1__ +remote-view-history-item_named=__1__ → __2__ +exit-remote-view=Sair do uplink de navegação por satélite [__CONTROL__se-remote-view__] +remote-view-pin-make=Fixar vista atual +remote-view-pins-list=Todos os pinos +remote-view-add-pin=Crie um novo pino no local atual. +remote-view-pin-details=Propriedades do pino +remote-view-pin-button-tooltip=__1__ → __2__ +remote-view-pin-button-tooltip-hotkey-one=__1__ → __2__ [__CONTROL__se-pin-one__] +remote-view-pin-button-tooltip-hotkey-two=__1__ → __2__ [__CONTROL__se-pin-two__] +remote-view-pin-button-tooltip-hotkey-three=__1__ → __2__ [__CONTROL__se-pin-three__] +remote-view-pin-button-tooltip-hotkey-four=__1__ → __2__ [__CONTROL__se-pin-four__] +remote-view-pin-button-tooltip-hotkey-five=__1__ → __2__ [__CONTROL__se-pin-five__] +remote-view-pin-button-tooltip-hotkey-six=__1__ → __2__ [__CONTROL__se-pin-six__] +remote-view-pin-button-tooltip-hotkey-seven=__1__ → __2__ [__CONTROL__se-pin-seven__] +remote-view-pin-button-tooltip-hotkey-eight=__1__ → __2__ [__CONTROL__se-pin-eight__] +remote-view-pin-button-tooltip-hotkey-nine=__1__ → __2__ [__CONTROL__se-pin-nine__] +remote-view-pin-button-tooltip-hotkey-zero=__1__ → __2__ [__CONTROL__se-pin-zero__] +remote-view-pin-button-tooltip-help-text=\n\n[font=default-bold]- Controles -[/font]\nClique esquerdo: Mudar para o lugar fixadon\nClique com o botão direito: Editar pinn\nCtrl-Clique com o botão direito: Excluir +remote-view-pin-button-tooltip-help-text-update-position=\nShift + clique com o botão direito: atualiza a posição do pino +remote-view-pin-name=Nome +remote-view-pin-icon=Ícone +remote-view-pin-zoom=Zoom +remote-view-pin-hotkey=Tecla de atalho +remote-view-pin-hotkey-none=Nenhum +remote-view-pin-hotkey-one=__CONTROL__se-pin-one__ - __1__ +remote-view-pin-hotkey-two=__CONTROL__se-pin-two__ - __1__ +remote-view-pin-hotkey-three=__CONTROL__se-pin-three__ - __1__ +remote-view-pin-hotkey-four=__CONTROL__se-pin-four__ - __1__ +remote-view-pin-hotkey-five=__CONTROL__se-pin-five__ - __1__ +remote-view-pin-hotkey-six=__CONTROL__se-pin-six__ - __1__ +remote-view-pin-hotkey-seven=__CONTROL__se-pin-seven__ - __1__ +remote-view-pin-hotkey-eight=__CONTROL__se-pin-eight__ - __1__ +remote-view-pin-hotkey-nine=__CONTROL__se-pin-nine__ - __1__ +remote-view-pin-hotkey-zero=__CONTROL__se-pin-zero__ - __1__ +remote-view-pin-location=Localização +remote-view-pin-location-position={x=__1__, y=__2__} +remote-view-pin-location-position-button=Atualizar a posição do pino +remote-view-pin-location-position-button-tooltip=Defina imediatamente a posição do pino para a posição exibida no momento. +remote-view-pin-viewer-title=Todos os pinos +remote-view-pin-viewer-misc-row=Diversos +remote-view-pin-viewer-spaceship-row=Naves espaciais +open-zonelist=Mostrar o Exploração do Universo +zonelist-window-title=[img=virtual-signal/se-planet-orbit] Exploração do Universo [__CONTROL__se-universe-explorer__] +priority-icon=[img=virtual-signal/se-accolade] +priority-tooltip=Prioridade (para classificar zonas importantes e irrelevantes) +trim-zone-button=[img=item/cliff-explosives] Encolher a superfície +trim-zone-button-tooltip=Remover pedaços fora da caixa delimitadora definida por objetos do jogador, objetos especiais e a origem do mapa. +trim-zone-button-no-surface-tooltip=A superfície não existe. +trim-zone-results=__1__ de blocos de __2__ excluído. Cortado na caixa X [__3__ bis __4__] Y [__5__ bis __6__] +delete-zone-button=[img=virtual-signal/se-remove] Apagar superfície +delete-zone-button-tooltip=Certas superfícies não podem ser excluídas. +delete-zone-button-no-surface-tooltip=A superfície não existe. +scan-zone-button=[img=item/satellite] Superfície de digitalização +scan-zone-button-tooltip=Warnung: Isso pode tornar o jogo mais lento durante o processo de digitalização. A taxa de amostragem pode ser configurada nas opções do Mod. A digitalização pode ser interrompida a qualquer momento. +scan-zone-button-disabled-tooltip=Você precisa lançar um satélite para fazer a varredura da superfície. +stop-scan-zone-button=[img=item/satellite] Pare todas as varreduras +stop-scan-zone-button-tooltip=Pára todas as varreduras ativas em todas as superfícies. +generic-requires-satellite=Você precisa primeiro lançar um satélite. +remote-view-requires-satellite=Inicie um satélite para usar o uplink do satélite de navegação. +satellite-discovered-platform=[color=cyan]O satélite descobriu uma plataforma espacial em órbita. [/color] +satellite-view-unlocked=Você tem a [color=cyan][img=virtual-signal/se-remote-view] Você tem a[/color] desbloqueado. Dessa forma, você pode ver o mundo e outros lugares que descobriu por meio de um satélite. Aperte [color=green][__CONTROL__se-remote-view__][/color], para ativar ou usar a barra de ferramentas de atalho (à direita da sua barra de atalho). +source-discovered-zone=[color=cyan]__1__ tem um novo __2__:[img=__3__] descoberto: [/color][color=white]__4__[/color] +discovered-zone=[color=cyan]Novo __1__ descoberto: [img=__2__] [/color][color=white]__3__[/color] +discovered-anomaly-additional=Objeto desconhecido no [img=virtual-signal/s-anomaly]-Anomalia detectada. Sua [img=virtual-signal/informatron] Diário de exploração [__CONTROL__informatron__] foi atualizado. +satellite-discovered-nothing=Um novo satélite foi lançado, mas não encontrou nada de novo. Pode haver mais para ser encontrado perto de outras estrelas. +tech-discovered-nothing=Os telescópios não encontraram nada de novo perto das estrelas. Pode haver mais para ser encontrado no espaço profundo. +tech-deep-discovered-nothing=Os telescópios não encontraram nada de novo no espaço. +galaxy_ship_authenticated=[img=virtual-signal/se-spaceship] Nave espacial abandonada: [color=cyan]"Bioassinatura autenticada. O código de acesso da eclusa de ar é 2236067964. Transfira o log de backup de emergência."[/color] Sua [img=virtual-signal/informatron] Diário de Exploração [__CONTROL__informatron__] foi atualizado. +space-capsule=Cápsula espacial +player-died=__1__ faleceu +launch-suit-warning=Um traje espacial deve ser usado para evitar asfixia. +suffocating-warning=Você está sufocando. Entre em uma cápsula espacial ou vista um traje espacial. +rocket_survivability_fail=Um míssil de carga foi danificado durante o voo e saiu do curso. Outras chances de sobrevivência de mísseis e tecnologias de segurança de carga devem ser exploradas. +respawn-if-stranded=Se você estiver preso, a função de respawn pode(botão: __CONTROL__se-respawn__) ser usado. +respawn-options-title=Alvo de reaparecimento +respawn-button-homeworld=[img=virtual-signal/se-planet] Planeta Natal +respawn-button-landing-pad=[img=item/se-rocket-landing-pad] Local de pouso mais próximo +respawn-button-spaceship=[img=virtual-signal/se-spaceship] Próxima nave +respawn-confirm-title=Tem certeza que deseja reaparecer? +respawn-confirm-yes=[img=virtual-signal/se-death] reaparecimento +respawn-confirm-no=Abortar +search-list=procurar +clear-search=Limpar filtro +filter-list=procurar +clear-filter=Limpar filtro +attrition-type-radiation=radiação +attrition-type-wind=vento +attrition-type-spacial-distortion=distorção espacial +zonelist-view-surface=Mostrar superfície +zonelist-heading-hierarchy=hierarquia +zonelist-heading-type=Tipo de zona +zonelist-heading-name=Nome +zonelist-heading-radius=Raio +zonelist-heading-primary-resource=Recurso primário +zonelist-heading-attrition=Interferência do robô +zonelist-heading-threat=ameaça +zonelist-heading-solar=Solar +zonelist-heading-flags=Bandeiras +zonelist-heading-priority=prioridade +zonelist_filter_star=Incluir estrelas +zonelist_filter_planet=Incluir planetas +zonelist_filter_planet-orbit=Inclui órbitas planetárias +zonelist_filter_moon=Inclui luas +zonelist_filter_moon-orbit=Inclui órbitas lunares +zonelist_filter_asteroid-belt=Inclui cinturão de asteróides +zonelist_filter_asteroid-field=Incluir campos de asteróides +zonelist_filter_anomaly=Incluir anomalias +zonelist_filter_spaceship=Incluir naves espaciais +zonelist-resource-bar-tooltip=__1__ __2__\nfrequência: __3__\nTamanho: __4__\nfortuna: __5__ +zonelist-resource-bar-tooltip-extended=__1__ __2__\nfrequência: __3__\nTamanho: __4__\nFortuna: __5__\n__6__ +zonelist-resources-disclaimer=As probabilidades de recursos são estimativas. [?] +zonelist-resources-disclaimer-tooltip=Todos os valores de recursos são estimativas baseadas na densidade do elemento.\nEles correspondem aos controles para a geração do mapa do jogo.\nOs campos de recursos reais podem variar e podem ser impedidos de se reproduzir devido à água, raio de superfície ou requisitos específicos de ladrilhos. +resource-terrain-required-se-vulcanite=Requer terreno vulcânico +resource-terrain-required-se-cryonite=Requer terreno congelado +resource-terrain-required-se-vitamelange=Requer terreno gramado +zone-tooltip-type=Tipo de zona: +zone-tooltip-parent=Pai: +zone-tooltip-threat=Ameaça: +zone-tooltip-daynight=\nDia/Ciclo noturno: +zone-tooltip-bot-attrition=\nDeficiências do robô: __1__ +zone-tooltip-radius=Raio: +zone-tooltip-solar=Eficiência Solar: +zone-tooltip-flags=Bandeiras: +zone-tooltip-closest=Mais perto: +zone-tooltip-destino=mirar: +zone-tooltip-delta-v=∆v de __1__ +construction-denied=Não pode ser colocado aqui. +construction-denied-vehicle-in-space=Os veículos terrestres não podem ser colocados no espaço. +construction-denied-se-surface=Localização inválida. Deve ser colocado em uma superfície de exploração espacial. +construction-denied-linked-container-on-transient-surface=Não é possível colocar recipientes ligados à superfície em uma espaçonave em movimento. +construction-denied-no-water=Sem água +construction-denied-spaceship-only=Deve ser colocado no chão da nave. +currently-viewing=Derzeit angezeigt: __1__ +fail-board-no-character=Não é possível entrar na nave alvo, você precisa estar no seu personagem para usar esta ação. +fail-board-remote-character=Não é possível entrar na nave alvo, seu personagem deve estar a bordo da nave de onde você está tentando embarcar. +fail-board-target-anchored=Se a nave ancorado não puder entrar, tente ancorar na mesma posição +starmap=Mapa estelar (WIP) +starmap-button=[img=virtual-signal/se-star] Mapa estelar +back=Voltar +spaceship=Nave espacial +planet=Planeta +moon=lua +star=Estrela +orbit=Orbita +something_orbit=__1__ Orbita +asteroid-belt=Cinturão de asteróides +asteroid-field=Campo de asteróide +anomaly=anomalia +spaceship-cannot-set-destination-to-self=Você não pode ser o alvo sozinho. +spaceship-streamline=otimização: __1__ +spaceship-streamline-tooltip=__1__ Racionalização atual \n__2__ Otimização máxima \nFaça o arco da nave espacial com menos formato de caixa para torná-lo mais aerodinâmico +spaceship-launch-energy=Energia para começar: __1__ +spaceship-launch-energy-invalid=Energie zum starten: Requer verificação de integridade adequada. +spaceship-launch-energy-tooltip=__1__ Combustível armazenado em tanques de reforço\n__2__ ombustível necessário para começar +spaceship-speed=Rapidez: __1__ +spaceship-structural-stress-hull=Carga estática (Rumpf): __1__ +spaceship-structural-stress-hull-invalid=Carga estática (Rumpf): NA (contenção necessária) +spaceship-structural-stress-hull-tooltip=__1__ Carregamento de envelope atual\n__2__ Carga estimada do envelope, quando todos os ladrilhos estão ocupados\n__3__ Carga máxima de envelope +spaceship-structural-stress-container=Carga estática (recipiente): __1__ +spaceship-structural-stress-container-invalid=Carga estática (recipiente): NA (Carcaça necessária) +spaceship-structural-stress-container-tooltip=__1__ Carga de contêiner atual\n__2__ Carga máxima do contêiner +spaceship-travel-time-unknown=Tempo de viagem: Desconhecido. Teste a velocidade máxima para estimar. +spaceship-travel-time-max=Tempo de viagem: __1__s em alta velocidade +spaceship-travel-time-current=Tempo de viagem: __1__s na velocidade atual +spaceship-closest-location-unknown=Posição mais próxima: Desconhecida __1__ +spaceship-closest-location=Lugar mais próximo: __1__ +spaceship-location-spatial-distortion=Distorção espacial: __1__ +spaceship-location-stellar-x=quadrante X: __1__ +spaceship-location-stellar-y=quadrante Y: __1__ +spaceship-location-star-gravity-well=Campo gravitacional estelar: __1__ +spaceship-location-planet-gravity-well=Campo gravitacional planetário: __1__ +spaceship-asteroid-density=Densidade de asteróide: __1__ +spaceship-asteroid-density-default=Escasso +spaceship-asteroid-density-belt=Justa +spaceship-asteroid-density-field=Perigoso +spaceship-travel-status=Status da viagem: __1__ +spaceship-integrity-status-valid=Estado de saúde: válido: __1__ +spaceship-integrity-status-invalid=Estado de saúde: inválido: __1__ +spaceship-button-launch=começar +spaceship-button-launch-tooltip=Pronto para ir +spaceship-button-launching=Inicio em andamento +spaceship-button-launching-tooltip=Por favor, seja paciente +spaceship-button-launch-disabled=Iniciar (desativado) +spaceship-button-launch-disabled-fuel-tooltip=Requer combustível em tanques de reforço +spaceship-button-launch-disabled-integrity-tooltip=Requer verificação de integridade válida. +spaceship-button-anchor=Âncora +spaceship-button-confirm-anchor=Confirme a ancoragem +spaceship-button-anchor-to=Âncora fechada __1__ +spaceship-button-anchor-on=Âncora __1__ +spaceship-button-stop=Pare +spaceship-button-start=Ativar +spaceship-button-board=__1__ entrar +spaceship-button-scouting-back=Voltar +spaceship-button-scouting-back-tooltip=Cancelar pesquisa de ancoragem +spaceship-name-the=__1__ +spaceship-button-start-integrity-check=Comece a verificação de integridade +spaceship-target-speed=Velocidade alvo: +spaceship-target-speed-unlimited=Velocidade alvo: ilimitada +spaceship-target-speed-normal=Velocidade alvo: __1__ (Normal) +spaceship-target-speed-asteroid-belt=Velocidade alvo: __1__ (Cinturão de asteróides) +spaceship-target-speed-asteroid-field=Velocidade alvo: __1__ (Campo de asteróide) +spaceship-target-speed-manual-override=Velocidade alvo: __1__ (Controle manual) +spaceship-target-speed-circuit=Velocidade alvo: __1__ (Circuito controlado) +spaceship-target-speed-normal-tooltip=Velocidade do alvo em vôo normal\nDensidade de asteróide: __1__% +spaceship-target-speed-asteroid-belt-tooltip=Velocidade alvo no cinturão de asteróides\nDensidade de asteróide: __1__% +spaceship-target-speed-asteroid-field-tooltip=Velocidade do alvo no campo de asteróide\nDensidade de asteróide: __1__% +spaceship-heading-destination=Destino +list-destinations-alphabetically=Classifique os destinos em ordem alfabética +spaceship-travel-message-new-course-plotted=Novo curso iniciado. +spaceship-travel-message-exiting-planet-gravity=Deixe o campo gravitacional planetário. +spaceship-travel-message-navigating-planet-gravity=Navegue no campo gravitacional planetário. +spaceship-travel-message-exiting-star-gravity=Saia do campo gravitacional estelar. +spaceship-travel-message-navigating-star-gravity=Navegue no campo gravitacional estelar. +spaceship-travel-message-spatial-distortions=Navegue pela distorção espacial. +spaceship-travel-message-navigating-interstellar=Navegue no espaço interestelar. +spaceship-travel-message-at-destination=No destino. +spaceship-check-message-passed=Bestanden: Integridade da nave válida +spaceship-check-message-failed-containment=Fehler: Console não incluso. Certifique-se de que todas as paredes da nave são construídas sem lacunas no chão da nave. +spaceship-check-message-failed-console-floor=O console deve ser construído no piso da nave espacial. +spaceship-check-message-failed-empty=Nenhum bloco encontrado conectado a um console devidamente fechado. +spaceship-check-message-failed-unknown-bounds=Erro: limites desconhecidos da espaçonave. +spaceship-check-message-failed-stress=Erro: A carga na integridade estrutural excede os limites tecnológicos. +spaceship-check-message-checking-console-floor=Verifique a conexão da parte inferior do console. +spaceship-check-message-checking-containment=Verifique a contenção. +spaceship-check-message-checking-connectivity=Verifique a conexão do console. +spaceship-check-message-no-console=Sem console. +spaceship-check-message-did-not-complete=Verificação não concluída. +spaceship-check-message-unstable=nstável: algumas áreas são cortadas durante as manobras. +spaceship-check-message-valid-but-disconnecting=Válido mas instável: as áreas são separadas. +spaceship-warning-sections-disconnecting=As áreas são separadas. Pare para consertar. +informatron-open-help=Abra o Informatron +page_space_exploration_text_1=Bem-vindo à Exploração Espacial. Já há muito no mod, mas ainda é [font=default-bold]experimental[/font] status e está em forte desenvolvimento. Pode haver bugs.\n\n[font=heading-2]Status experimental?[/font]\n\nA Exploração Espacial ainda está mudando rapidamente e estou investindo todo meu tempo no progresso do desenvolvimento dos principais recursos em detrimento da compatibilidade de mod. [color=red]It is not advisable to play with mods other than the required and recommended mods.[/color]\n\nEnquanto em status experimental: Se um mod causar problemas como jogo corrompido / estado salvo, travamentos, árvores de tecnologia inválidas ou jogabilidade principal, ele será rapidamente marcado como incompatível para proteger os novos jogadores. Isso significa que se você usar muitos mods, é mais provável que um deles seja marcado como incompatível posteriormente devido a um problema que você ainda não descobriu. É claro que você está livre para editar seu arquivo info.json para tentar mods incompatíveis, mas você o faz por sua própria conta e risco: se seu estado de jogo se tornar impossível de jogar por causa disso, não poderei ajudá-lo.\n\nEnquanto em estado experimental: a maioria dos outros mods de revisão são marcados como incompatíveis se a árvore de tecnologia estiver significativamente quebrada, no entanto, a intenção de longo prazo é fazer com que os mods trabalhem juntos para a satisfação de ambos os desenvolvedores. Krastorio 2 é um exemplo desse trabalho já substancialmente em andamento.\n\nExistem algumas informações adicionais relacionadas à compatibilidade de mod no wiki do Space Exploration. Se você gostaria de ajudar com a compatibilidade do mod, entre em contato com o Discord, mas também esteja ciente de que isso não é uma alta prioridade até mais tarde no desenvolvimento do Space Exploration.\n\n[font=heading-2]Mods recomendados[/font] \n\n • AAI Containers & Warehouses. Gives you some larger containers that match the vanilla theme.\n\n • Módulo Inserter Permite que você coloque módulos em máquinas de modo de satélite.\n\n • Equipment Grid Logistic Module Um módulo para redes de veículos, como o spidertron, para solicitar itens da rede e descartar o lixo.\n\n • Grappling Gun Permite que você pule prédios, lagos e saia do combate se ficar lento. No espaço, você pode voltar à plataforma espacial se cair. Também permite que você embarque em naves espaciais (especialmente útil se estiverem em movimento).\n\n • Burner Leech Isso é apenas para a fase do queimador AAI.\n\n • Text Plates Permite que você coloque texto no solo, útil para marcar nomes de planetas, nomes de estações, zonas de ancoragem de espaçonaves, etc..\n\n • Even Distribution Ajuda no início do jogo ao inserir itens manualmente em vários edifícios.\n\n • Combat Mechanics Overhaul pode ajudar com as defesas quando fora do planeta se você habilitar a opção "Walls Block Spitters". É mais barato consertar paredes do que torres.\n\n • Bullet Trails Assim, você pode ver para onde as suas balas estão indo ou para onde as torres das armas estão atirando. (Também parece melhor.)\n\n\n[font=heading-2]Configurações recomendadas[/font]\n\nVocê DEVE ter todos os blocos de terreno de biomas alienígenas ativados, caso contrário, o jogo irá travar posteriormente.\n\nComo o jogo é mais longo do que o normal, é uma boa ideia começar um jogo com baixos fatores de evolução do inimigo.\n\nocê não deve definir configurações de recursos elevados para o seu planeta inicial, a menos que esteja jogando com receitas de uso intensivo de recursos, como receitas de alta dificuldade ou modo maratona. Se os recursos forem definidos muito altos, isso reduzirá a necessidade de expansão para outros planetas.\n\n\n[font=heading-2]Links úteis[/font]\n\nDê uma olhada no Wiki de Exploração Espacial aqui: https://spaceexploration.miraheze.org\n\nGet ajudar ou seguir o desenvolvimento no Discord: https://discord.gg/ymjUVMv\n\nOver 2.000 horas se passaram neste mod. Se você está gostando, considere me apoiar no Patreon: https://www.patreon.com/earendel +menu_meteor_defence=[img=virtual-signal/se-meteor] Defesa de meteoros +title_meteor_defence=Defesa de meteoros +page_meteor_defence_text_1=Os meteoros atingem a maioria das zonas em intervalos aleatórios. Você pode alterar o intervalo máximo entre os impactos nas configurações do mod.\n\nO número de meteoros também é aleatório, 50% para 1, 25% para 2, 12,5% para 3, 6,25% para 4 etc...\n\ nAs estruturas de defesa de meteoros podem atirar em meteoros. Eles disparam em sequência para que as defesas posteriores não disparem quando todos os meteoros forem destruídos. As defesas requerem munição, tempo de recarga e energia adicional durante o carregamento. O consumo de energia não é desprezível, por isso é aconselhável comparar o risco com o custo. +menu_coremining=[img=item/se-core-miner] Mineração de núcleo +title_coremining=Kernbergbau +page_coremining_text_1=as. Cada planeta e lua podem emitir um tipo diferente de fragmento de núcleo, dependendo do que ele contém. Nauvis oferece um bom equilíbrio de recursos comuns, mas outros locais tendem a oferecer principalmente 1 tipo de recurso. Os mineradores de minério são verdadeiros consumidores de energia, mas você obtém alguma energia de seus produtos, carvão, petróleo e urânio.\n\nOs mineradores de minério central usam muita eletricidade e cada minerador de minério central que você coloca em um planeta reduz a eficiência de todos os núcleos mineiros de minério no mesmo planeta. Eles são muito menos eficientes em termos de energia do que os mineradores regulares, mesmo se você tiver vários mineradores, mas eles nunca ficam sem recursos. No início, pode ser útil operar 1 elevador de minério de núcleo quando você tem energia em excesso. Se você está começando em um planeta minúsculo, a energia solar e a mineração do núcleo do minério podem ser a única maneira de reunir recursos suficientes para deixar o planeta.\n\nOs mineiros do núcleo do jogo tardio se beneficiam muito dos bônus de produtividade em pesquisa de mineração. É melhor apontar para alguns em muitos planetas do que muitos em alguns planetas. +menu_beacons=[img=item/se-wide-beacon-2] Distribuidor de efeitos +title_beacons=Distribuidor de efeitos +page_beacons_text_1=[font=heading-2]Beacon Overload [img=virtual-signal/se-beacon-overload][/font]\n\nBeacon Overload é uma revisão da mecânica do Beacon em Factorio. Máquinas de artesanato só podem ser afetadas por 1 beacon, se afetadas por mais beacons, elas sobrecarregam e pausam a produção.\n\nA revisão permite mais módulos em beacons e promove o uso de módulos mais poderosos em beacons e montadores para bônus máximos. The change also allows and promotes a wider range of factory designs.\n\nO Beacon Básico é individualmente muito mais poderoso do que um Beacon Baunilha, mas não pode empilhar seus efeitos em uma máquina, portanto, o impulso máximo que você pode fornecer é reduzido em comparação com o Baunilha. Os faróis mais potentes são capazes de exceder em muito o impulso máximo em uma máquina disponível no Vanilla.\n\nComeçando com o Wide Area Beacon, os jogadores podem experimentar uma quantidade substancial de economia de módulo, bem como liberdade para criar projetos complexos girando em torno de edifícios maiores ou com várias entradas de fluido ou material.\n\nAs máquinas afetadas por mais de um farol serão marcadas com um ícone Beacon Overload e pausarão toda a produção. Eles ainda continuarão a consumir energia mínima no processo. +menu_launching_satellites=[img=item/satellite] Iniciar satélites +title_launching_satellites=Iniciar satélites +page_launching_satellites_text_1=Você lançou [color=cyan]__1__[/color] satélites.\n\n[font=heading-2][img=virtual-signal/se-remote-view] Uplink de satélite de navegação [__CONTROL__se-remote-view__][/font]\n\nQuando você lança um Satélite de Navegação para o espaço a partir do Silo do Foguete do Satélite, você obtém acesso ao [img=virtual-signal/se-remote-view] Visualização de satélite de navegação. Este modo pode ser acessado com o [__CONTROL__se-remote-view__] chave. No modo de satélite, sua câmera é separada do personagem para que você possa olhar rapidamente ao redor do mapa e até mesmo descobrir novas áreas. Existem algumas coisas que você não pode fazer no modo de satélite, como posicionar diretamente ou minar entidades. No entanto, há muito que você pode fazer, como usar plantas, planejadores de desconstrução, colocar entidades fantasmas, solicitar conexões de fios, alterar receitas de máquina, configurações de combinador, etc.\n\n[font=heading-2][img=virtual-signal/se-planet-orbit]Exploração do Universo [__CONTROL__se-universe-explorer__][/font]\n\nA rede de satélite de navegação também permite que você visualize outras superfícies, como outros planetas, luas, cinturões de asteróides, campos de asteróides e órbitas. Aperte [__CONTROL__se-universe-explorer__] para exibir a lista de zonas conhecidas. Se você lançou um satélite, pode clicar em Exibir Superfície para ver o que está lá. Pode ser bom explorar um planeta um pouco antes de tentar voar até lá.\n\nO lançamento de satélites também ajuda na descoberta de zona dentro do sistema a partir do qual é lançado (consulte Descoberta de zona para mais detalhes).\n\n[font=heading-2][img=item/se-satellite-telemetry] Satellite Telemetry[/font]\n\nO satélite lança a telemetria do satélite de retorno, um componente vital na [img=item/se-rocket-science-pack] Rocket Science.\n\n[font=heading-2][img=item/se-space-probe-rocket] Sondas espaciais[/font]\n\nO espaço [img=item/se-space-probe-rocket-silo] O silo de foguetes da sonda espacial não é um silo de foguetes de satélite, mas foi projetado para uso no espaço. Em vez de construir foguetes é lançado pré-construído [img=item/se-space-probe-rocket] Foguetes de sonda espacial. Um foguete de sonda espacial é muito mais barato do que um foguete de satélite normal e pode ser pré-montado em um centro de fabricação em vez de transferir recursos para o silo do foguete. Um silo de foguete de sonda espacial pode lançar satélites de forma barata, mas também pode lançar sondas e coletores mais especializados de locais específicos no espaço. +menu_pinned_locations=[img=se-pin-list] Locais fixados +title_pinned_locations=Locais fixados +menu_zone_discovery=[img=virtual-signal/se-planet-orbit] Descoberta de zona +title_zone_discovery=Descoberta de zona +menu_cargo_rockets=[img=virtual-signal/se-cargo-rocket] Mísseis de carga +title_cargo_rockets=Mísseis de carga +menu_delivery_cannons=[img=item/se-delivery-cannon] Canhões de entrega +title_delivery_cannons=Canhões de entrega +menu_steam_power=[img=item/se-big-turbine] Poder do vapor +title_steam_power=Poder do vapor +menu_lifesupport=[img=item/se-lifesupport-equipment-1] Suporte de vida +title_lifesupport=Suporte de vida +menu_space_sciences=[img=item/se-astronomic-science-pack-2] Ciência espacial +title_space_sciences=Ciência espacial +menu_energy_beams=[img=item/se-energy-transmitter-emitter] Raios de energia +title_energy_beams=Raios de energia +page_energy_beams_text_1=[font=heading-2]Ejeções de massa coronal[/font]\nAs estrelas nas proximidades freqüentemente emitem fluxos perigosos de partículas. Não é incomum um planeta ou lua ficar preso em uma dessas correntes de partículas. Se você tiver uma grande base em uma superfície afetada, considere evacuar, diversificar, distribuir seus itens caros ou construir uma estrutura de defesa guarda-chuva com um grande acumulador de backup. Se você tiver uma base pequena, é bem provável que ela permaneça intacta. Se uma superfície estiver ameaçada, há um aviso prévio de pelo menos 4 horas. As ameaças conhecidas estão listadas abaixo. +page_energy_beam_warning_text=[img=virtual-signal/se-star] Aviso: a ejeção de massa coronal está avançando __1__ para.\nRequisitos de defesa estimados: __3__ GW Desempenho superior, __4__GJ mais de 120 segundos. ETA: __2__s. +menu_spaceships=[img=virtual-signal/se-spaceship] Naves espaciais +title_spaceships=Naves espaciais +menu_arcospheres=[img=item/se-arcosphere-a] Arcosferas +title_arcospheres=Arcosferas +page_arcospheres_text_deep=Arcosferas encontradas no profundo vazio interestelar: [color=cyan]__1__ arcosferas[/color] / __2__ Coletor iniciado. +page_arcospheres_text_zone=Arcosferas perto __1__ encontrado: [color=cyan]__2__ arcosferas[/color] / __3__ Coletor iniciado. +menu_exploration_journal=[img=item/se-thruster-suit] Diário de exploração +title_exploration_journal=Diário de exploração +page_journal_title_backstory=Acordei do lado errado de uma bola de fogo +page_journal_text_backstory=Eu pousei em um planeta desconhecido, com partes em chamas de uma pequena nave espacial ao meu redor. Meu corpo estava machucado, arranhado e queimado, mas nada sério. Meu ferimento na cabeça era aparentemente mais sério, eu estava com uma dor de cabeça latejante e a luz era ofuscante. Pior ainda, não conseguia lembrar como cheguei aqui, ou mesmo quem eu era, além de um nome e uma vaga intenção ... de construir. Eu não conseguia lembrar o que construir ou como construir. A princípio pensei que minha cabeça tivesse sido danificada no acidente e as memórias voltariam, mas ainda não aconteceu. O fato de meus registros de dados também estarem em branco ou reformatados me levou a procurar outras explicações. +page_journal_title_satellite_launch=Olho no céu +page_journal_text_satellite_launch=Consegui colocar um satélite em órbita. Este é um marco importante e vale a pena comemorar, mas ainda há muito a ser feito. Isto é apenas o começo. +page_journal_title_cargo_launch=Ao infinito e além +page_journal_text_cargo_launch=Agora posso me lançar ao espaço. Não estou mais preso a essa rocha que chamo de lar. O céu está esperando por mim. +page_journal_title_entered_vault=Caça de relíquias +page_journal_title_found_gate=Anomalia +page_journal_text_found_gate=Algum tipo de enorme artefato em forma de anel foi encontrado na anomalia. Duas coisas ficam imediatamente claras à distância: 1. É antigo. 2. A tecnologia é completamente diferente da minha. O que quer que seja ou foi, agora está destruído. +page_journal_title_found_gate_ship=Nave de anomalia +page_journal_text_found_gate_ship=Parte de uma nave espacial abandonada bastante grande foi encontrada na anomalia perto do artefato em forma de anel. A tecnologia da nave é semelhante à minha, mas um pouco mais ... sofisticada. Em qualquer caso, é uma tecnologia distintamente diferente da do anel. O padrão de detritos faz com que pareça que foi cortado ao meio e / ou colidiu com a estrutura do anel. Pode valer a pena salvar. +page_journal_title_found_gate_ship_authenticated=Anomalia de autenticação de navio +page_journal_title_found_gate_ship_log=Registro de anomalia de navio +page_journal_title_spaceship_victory=Vitória da nave espacial +page_journal_spaceship_victory=Construí uma nave espacial extremamente rápida e poderosa e ativei o mecanismo de distorção. Demorou 60 segundos para o passeio se estabilizar em um estado FTL prático, mas quando isso aconteceu, eu fui capaz de dormir em um criosono para a subsequente jornada de volta para uma galáxia muito, muito distante. Estou deixando um império interestelar autônomo construído do zero por minhas próprias mãos. Meu legado nesta sala viverá. +page_journal_title_gate_victory=Vitória do Portão Antigo +menu_archeology=[img=entity/se-pyramide-a] Arqueologia +title_archeology=Arqueologia +page_archeology_text_1=Comecei a tentar encontrar mais das grandes estruturas geométricas. Os satélites têm correspondência [color=cyan]__1__[/color] Formulários encontrados nos seguintes planetas: +page_archeology_text_2=Clique em uma entrada para visualizá-la via satélite. +menu_starmapping=[img=technology/se-zone-discovery-random] Mapeamento estelar +title_starmapping=Mapeamento estelar +page_starmapping_text_1=O mapeamento estelar é obtido por meio de pesquisas repetidas na tecnologia: [img=technology/se-long-range-star-mapping] [color=cyan]Sternkartierung mit großer Reichweite[/color]. Esta pesquisa está procurando padrões interessantes de estrelas em outras galáxias. Isso tem algum uso prático? Provavelmente não\n\nAs coordenadas são fornecidas no formato de vetor padrão (SV), alinhado com base na radiação cósmica de fundo.\n\nVocê tem até agora [color=cyan]__1__[/color] padrões notáveis ​​mapeados. +technology-unlocked=Nova tecnologia desbloqueada e agora na árvore tecnológica. __1__ __2__ +universe-resources-changed-warning=[img=utility/danger_icon] [color=red]Todos os recursos foram ajustados devido às novas configurações. Este processo é destrutivo. Se isso foi causado por atualizações de mod, é inevitável. Se foi causado pela adição ou remoção acidental de mods, não salve o jogo.[/color] +starmapping-found-constellation=Partida de constelação de longa distância__1__, Coordenadas armazenadas em [img=virtual-signal/informatron] InformaTron. +starmapping-found-constellation-informatron=[font=heading-1]__1__[/font] nas coordenadas [SV __2__] +gate-portal-coordinates=Analyse des Verzerrungsvektors: [SV __1__] +discovered-glyph-vault=[img=item/satellite] Satélite de navegação: estrutura geométrica ligada __1__ reconhecido. +beacon-overload=Sobrecarga do distribuidor de efeito +beacon-overload-ended=Sobrecarga do distribuidor de efeitos encerrada +lifesupport_title=[img=item/se-lifesupport-equipment-1] Suporte de vida +lifesupport_efficiency_spacesuit=Eficiência do suporte de vida: __1__ +lifesupport_efficiency_no_spacesuit=Eficiência do suporte de vida: __1__ (0% no espaço). +lifesupport_suit=Duração do suporte de vida do traje: __1__s +lifesupport_reserves=Vida útil do inventário: __1__s +lifesupport_suit_est=Vida útil do traje: __1__s (no espaço) +lifesupport_reserves_est=Vida útil do inventário: __1__s (no espaço) +lifesupport_environment_space=Ambiente: espaço +lifesupport_environment_spaceship-interior=Ambiente: Interior da nave espacial (sem necessidade de assistência) +lifesupport_environment_planet=Arredores: Planeta (sem necessidade de assistência) +lifesupport_environment_moon=Arredores: Lua (sem necessidade de assistência) +lifesupport_environment_plague-planet=Arredores: Planeta da praga +lifesupport_environment_plague-moon=Arredores: Lua da praga +lifesupport_environment_unknown=Arredores: Desconhecido +player_track_glyphs=[img=item/satellite] Atribua satélites para encontrar estruturas semelhantes. +page_archeology_pyramid_link=[img=entity/se-pyramid-b] Estrutura geométrica em __1__ __2__ descoberto. +discovery_look_for_resource_caption=__1__\n__2__ +discovery_look_for_resource_tooltip=Concentre seus esforços de descoberta em encontrar este recurso. +comma_separate=__1__, __2__ +placement_restriction_line=[font=default-bold][color=#f5cb48]Não pode ser colocado em: __1__[/color][/font]\n__2__ +collision_mask_water=Água +collision_mask_land=Terra +collision_mask_space_platform=Plataforma espacial +collision_mask_spaceship=Nave espacial +structure_name_grounded=__1__ (no chão) +structure_name_spaced=__1__ (espaço) +structure_description_grounded=__1__\n[color=#ff0000]Algumas receitas estão desativadas no solo.[/color] +structure_description_spaced=__1__\n[color=#ff0000]Não consigo usar a produtividade no espaço.[/color] +cannot-open-nav-view-in-editor=O uplink do satélite de navegação não pode ser aberto no editor. +tile_warning=[color=red]Mudanças de ladrilho em objetos podem excluir o objeto.[/color] +please-consider-patreon=[font=heading-1]Você gosta de exploração espacial? Você poderia me apoiar no Patreon: [color=#f5cb48]https://www.patreon.com/earendel[/color][/font]\nPatreons podem adicionar um planeta ou lua ao jogo com base em seu próprio design. +delivery_cannon_label_energy=Energia: __1__ +delivery_cannon_label_payload=Carga útil: __1__ +delivery-cannon-coordinates-set=Coordenadas de entrega definidas para [X:__1__ Y:__2__]. Aperte [__CONTROL__se-remote-view__], para sair do modo de satélite. +delivery-cannon-coordinates-pasted=Coordenadas de entrega definidas para [X:__1__ Y:__2__]. +delivery-cannon-invalid-coordinates=Sem localização +delivery-cannon-valid-coordinates=X:__1__ Y:__2__ +deliver-cannon-force-mismatch=As configurações do canhão de entrega não podem ser coladas em um canhão de entrega pertencente a outra facção. +relative-window-settings=Definições +unit-capsule=Cápsula unitária (__1__) +climate_water_none=Sem água +climate_water_low=Piscina +climate_water_med=Lagos +climate_water_high=Lagos +climate_water_max=Oceanos +climate_moisture_none=deserto +climate_moisture_low=Desolação +climate_moisture_med=Molhado +climate_moisture_high=Úmida +climate_moisture_max=Saturado +climate_aux_very_low=Terroso +climate_aux_low=Fora do normal +climate_aux_med=Colorido +climate_aux_high=Excêntrico +climate_aux_very_high=Exótico +climate_temperature_bland=Suave +climate_temperature_temperate=Temperatura +climate_temperature_midrange=Temperatura +climate_temperature_balanced=Frio quente +climate_temperature_wild=Quente frio +climate_temperature_extreme=Fogo e gelo +climate_temperature_cool=Resfriado +climate_temperature_cold=Resfriado +climate_temperature_vcold=Gelado +climate_temperature_frozen=Congeladas +climate_temperature_warm=Caloroso +climate_temperature_hot=Quente +climate_temperature_vhot=Latente +climate_temperature_volcanic=Vulcânico +climate_trees_none=Sem Árvores +climate_trees_low=Arbustos +climate_trees_med=matagal +climate_trees_high=Arvores +climate_trees_max=Bosques +climate_cliff_none=Apartamento +climate_cliff_low=Suave +climate_cliff_med=Montanhoso +climate_cliff_high=Ravinas +climate_cliff_max=Montanhas +climate_homeworld=Homeworld (clima personalizado) +energy_transmitter_gui_title=[img=entity/se-energy-transmitter-emitter] Feixe de energia +energy_transmitter_label_transfer=Força do emissor: __1__ +energy_transmitter_label_efficiency=Eficiência de transmissão: __1__ +energy_transmitter_label_efficiency_atmo=Eficiência de transmissão: __1__ (-50% da atmosfera) +energy_transmitter_label_off=Desligado +energy_transmitter_tooltip_off=Desliga o feixe +energy_transmitter_label_energise=Energizar +energy_transmitter_tooltip_energise=Forneça energia a um receptor de transmissão de energia +energy_transmitter_label_glaive=Transmissor +energy_transmitter_tooltip_glaive=Um feixe que pode ser apontado e movido, o dano e a velocidade dependem da energia +energy_transmitter_label_auto_glaive=Transmissor Automático +energy_transmitter_tooltip_auto_glaive=Um raio com um programa de busca e destruição, o dano é baseado na energia +energy-transmitter-coordinates-set=Coordenadas de feixe definidas para [X:__1__ Y:__2__]. Aperte [__CONTROL__se-remote-view__], para sair do modo de satélite. +energy-transmitter-coordinates-pasted=Coordenadas de feixe definidas para [X:__1__ Y:__2__]. +energy-transmitter-no-enemies-found=Transmissor Automático não conseguiu encontrar nenhum inimigo. Canal __1__ desliga. +alert-cme-eta=[img=virtual-signal/se-star] Aviso: curso de ejeção de massa coronal para __1__. ETA: __2__s.\nVeja os raios de energia em [img=virtual-signal/informatron] InformaTron [__CONTROL__informatron__] para mais detalhes. +alert-cme-arrived=[img=virtual-signal/se-star] [color=red]Aviso: a ejeção de massa coronal está ativada __1__ chegou[/color] +alert-cme-stream=[img=virtual-signal/se-star] Fluxo de ejeção de massa coronal detectado __1__ +alert-cme-passed=[img=virtual-signal/se-star] A ejeção da massa coronal acabou. +no-coordinates-set=Nenhuma coordenada definida. +satellite-required=Requer satélite. +probe_invalid_launch_star=Lançamento inválido: [img=item/se-star-probe] A sonda estelar deve ser lançada de uma órbita solar próxima. +probe_invalid_launch_belt=Lançamento inválido: [img=item/se-belt-probe] A sonda do cinturão de asteróides deve ser lançada de um cinturão de asteróides. +probe_invalid_launch_field=Lançamento inválido: [img=item/se-void-probe] A sonda de vazio interestelar deve ser lançada de um campo de asteróides. +arcosphere_collector_invalid_launch=Lançamento inválido: [img=item/se-arcosphere-collector] A sonda de vazio interestelar deve ser lançada de um campo de asteróides. +charge-mode-fast=Modo de carregamento rápido: trem de energia ocioso reduzido, trem de energia máximo aumentado, capacidade de buffer aumentada. Observe os picos de potência. +charge-mode-normal=Modo de carregamento normal: consumo máximo reduzido, consumo ocioso aumentado, capacidade de buffer reduzida. +menu_coordinate_logs=[img=entity/se-glyph-a-energy-47] Protocolos de coordenação +title_coordinate_logs=Protocolos de coordenação +page_coordinate_logs_button_clear_caption=[img=virtual-signal/se-remove] Log claro +page_coordinate_logs_text_empty=O registro de coordenadas foi excluído recentemente. +page_coordinate_logs_glyph_entry=__1__: SV +victory-message-spaceship=[font=heading-1]O Nexus Distortion Drive atingiu a velocidade crítica (250).\n[color=#f5cb48]Parabéns, você cumpriu a condição de vitória da exploração espacial: nave espacial![/color][/font]\nSe você gostou da viagem, considere me apoiar no Patreon: [color=#f5cb48]https://www.patreon.com/earendel[/color] +victory-message-spaceship-player=[color=#f5cb48]Vitória da nave estelar: [/color] Seu [img=virtual-signal/informatron] Diário de exploração [__CONTROL__informatron__] foi atualizado. +victory-message-gate=[font=heading-1]O portal é estável e leva de volta para casa.\n[color=#f5cb48]Parabéns, você atingiu a condição de vitória secreta da exploração do espaço: Ancient Gate![/color][/font]\nSe você gostou desta jornada única de descoberta, por favor, considere me apoiar no Patreon: [color=#f5cb48]https://www.patreon.com/earendel[/color] +victory-message-gate-player=[color=#f5cb48]Vitória do Portão Antigo: [/color] Seu [img=virtual-signal/informatron] Diário de exploração [__CONTROL__informatron__] foi atualizado. +arcosphere-random=Esta receita ocasionalmente muda para a receita alternativa com o mesmo nome. As saídas das arcosferas são, em última análise, aleatórias, mas o número de arcosferas na saída é garantido para corresponder à entrada. +ruin=Ruína +mysterious-structure=Estrutura misteriosa +interburbulator_fail_easy_1=Não. +interburbulator_fail_easy_2=Tente mais. +interburbulator_fail_easy_3=Desesperado. +interburbulator_fail_easy_4=Não. +interburbulator_fail_easy_5=Você achou que isso funcionaria? +interburbulator_fail_easy_6=Incorreto. +interburbulator_fail_easy_7=02 baixo? +interburbulator_fail_easy_8=Negativo. +interburbulator_fail_easy_9=Negativo. +interburbulator_fail_easy_10=Calcular. +interburbulator_fail_easy_11=Incorreta. +interburbulator_fail_easy_12=Interpolar. +interburbulator_fail_easy_13=Continue tentando. +interburbulator_fail_easy_14=Vamos lá, cara. +interburbulator_fail_easy_15=Não é divertido? +interburbulator_fail_easy_16=Eu esperava mais. +interburbulator_fail_easy_17=Tente pensar no futuro. +interburbulator_fail_easy_18=Pense na recompensa. +interburbulator_fail_easy_19=Eu não me importo em esperar. +interburbulator_fail_easy_20=Paciência é uma virtude. +interburbulator_fail_easy_21=Não quero ser indelicado. +interburbulator_fail_easy_22=O peixe chegou ao nível 3. +interburbulator_fail_easy_23=Agora com força bruta ha? +interburbulator_fail_easy_24=Use seu computador de cabeça mole. +interburbulator_fail_easy_25=Teias de aranha na rede neural? +interburbulator_fail_easy_26=Você pode fazer uma pausa, se quiser. +interburbulator_fail_easy_27=Tenho uma mente do tamanho de um planeta. +interburbulator_fail_easy_28=Você realmente achou que isso funcionaria? +interburbulator_fail_easy_29=Não fique bravo com seu fracasso constante. +interburbulator_fail_easy_30=Esperei eras por um participante digno. +interburbulator_fail_easy_31=Se precisar de ajuda, você pode pedir um circuito verde. +interburbulator_fail_easy_32=Não estou culpando você pelo seu genocídio, não sou hipócrita. +interburbulator_fail_easy_33=Acho que traduzi as instruções corretamente. +interburbulator_fail_easy_34=Um vetor pode definir uma direção e um tamanho. +interburbulator_fail_easy_35=Você simplesmente não ama a forma como a poluição irrita os insetos? +interburbulator_fail_easy_36=Por favor, não traga nada da sua ... biologia ... para a eletrônica. +interburbulator_fail_easy_37=O meio está a meio caminho entre o canto superior direito e o canto inferior esquerdo. +interburbulator_fail_easy_38=Eu estudei algumas de suas transmissões; não é espionagem se você transmitir assim. +interburbulator_fail_easy_39=Você sabia que um vetor normalizado tem comprimento de 1 é freqüentemente usado para indicar a direção, mesmo em sua cultura. +interburbulator_fail_mixed_1=Nem mesmo perto. +interburbulator_fail_mixed_2=Longe. +interburbulator_fail_mixed_3=Você por acaso está tentando? +interburbulator_fail_mixed_4=Seu anjo nervoso vazou? +interburbulator_fail_mixed_5=Disseram-me que as pessoas podem contar. +interburbulator_fail_mixed_6=A sua interface não está funcionando corretamente? +interburbulator_fail_mixed_7=Você precisa de aumento cognitivo? +interburbulator_fail_mixed_8=Você entende o desafio, não é? +interburbulator_fail_mixed_9=Você apenas escolhe os números aleatoriamente? +interburbulator_fail_offgrid_1=É simplesmente horrível. +interburbulator_fail_offgrid_2=Isso não está nem na grade. +interburbulator_fail_offgrid_3=Você perdeu completamente a grade. +interburbulator_fail_offgrid_4=Pelo menos tem que estar na rede. +interburbulator_fail_offgrid_5=Se o ponto amarelo não estiver na grade, isso é um péssimo sinal. +interburbulator_fail_offgrid_6=Tem que estar na grade. +interburbulator_fail_offgrid_7=O alvo está do lado de dentro da grade, não do lado de fora. +interburbulator_fail_offgrid_8=Não está nem na grade. Cara o que você está fazendo +interburbulator_fail_offgrid_9=Mire na grade. +interburbulator_fail_offgrid_10=A grade é a única coisa com os quadrados. +interburbulator_success_freeplay_1=Bom trabalho. +interburbulator_success_freeplay_2=Bem feito. +interburbulator_success_freeplay_3=Você fez isso. +interburbulator_success_freeplay_4=Isso foi difícil? +interburbulator_success_freeplay_5=Objetivo alcançado. +interburbulator_success_repeat_1=Sim, mas você já completou este desafio. +interburbulator_success_repeat_2=Você fez de novo! +interburbulator_success_repeat_3=Foi mais fácil do que da primeira vez, não foi? +interburbulator_success_repeat_4=Bom, mas você não consegue o preço duas vezes. +interburbulator_success_repeat_5=Muito bem, aqui está o seu preço ... não, estou brincando. Você já tem. +interburbulator_success_repeat_6=Você é a mesma pessoa que fez isso antes, não é? É tão difícil dizer +interburbulator_success_prize_1=Isso é verdade. Aqui está o seu prêmio ... Bubbles era um peixinho corajoso, mas não era o melhor em quebra-cabeças. +interburbulator_success_prize_2=Sim cara, você está aprendendo. Talvez este prêmio o ajude a aprender mais rápido. +interburbulator_success_prize_3=Você conseguiu. Espero que você ache seu prêmio “mais significativo” do que o desafio. +interburbulator_success_prize_4=Correto. Você tem meu respeito, humano. Aqui, eu apresento o cadáver do traidor que tentou hackear meu jogo. +interburbulator_success_prize_5=Bem no alvo, aqui está o seu prêmio. Essas coisas são muito reconfortantes. A eficiência energética é importante. +interburbulator_success_prize_6=Muito bem, aqui está o seu preço. Não sei se isso vai te ajudar muito, mas me ajuda a começar de manhã. +interburbulator_success_prize_7=Ótimo, aqui está seu preço. Eu adoro usar isso para pesquisa, realmente ajuda a criatividade. +interburbulator_success_prize_8=Fantástico, aqui está o seu preço. Não sei se você já viu isso antes, mas adoro estar ao alcance de um bom distribuidor de efeitos. +interburbulator_success_prize_9=Parabéns, aqui está o seu prêmio. Esses processadores são muito valiosos e difíceis de fabricar. +interburbulator_success_prize_10=Homem muito impressionante, aqui. Arcospheres são meu bem mais valioso, não os perca porque você não pode fazer mais deles. +interburbulator_freeplay_unlocked=Você pegou o jeito. Vou desbloquear o Freeplay para que você possa criar seus próprios quebra-cabeças, se quiser. +interburbulator_deny_freeplay_1=Para fazer isso, você precisa ativar o Freeplay. +interburbulator_deny_freeplay_2=Isso é batota. +interburbulator_deny_freeplay_3=Não altere o quebra-cabeça. +interburbulator_deny_freeplay_4=Vou deixar você alterar essas configurações se puder resolver 5 desafios. +interburbulator_deny_freeplay_5=Você está tentando hackear minhas máquinas? +interburbulator_deny_freeplay_6=Fique calmo enquanto "tenta". +interburbulator_caption_prize=preço: __1__ __2__ __3__ __4__ +interburbulator_caption_claimed=(pegou) +interburbulator_speak=[color=red]Brontion: __1__[/color] +interburbulator_robot_name=Brontion +interburbulator_introduction=Interburbul é um jogo feito por Brontion Burbulator 33027756. O objetivo é adivinhar um vetor 3D que se projetará na célula marcada selecionada por Brontion. Os vetores 3D de 3 cantos da grade são dados, esses pontos descrevem um plano 3D e sua estimativa é projetada neste plano a partir da origem {0,0,0}. Existem 10 rodadas de dificuldade crescente e prêmios para completar cada uma. Complete 5 desafios para desbloquear o modo de jogo livre e definir seu próprio desafio. +interburbulator_random=Coincidentemente +interburbulator_freeplay=Jogo livre +interburbulator_game_title=Iniciar Interburbul +interburbulator_grid_size=Tamanho da grade: +interburbulator_target_cell=Célula Alvo: +interburbulator_top_left=Superior esquerdo +interburbulator_top_right=Canto superior direito +interburbulator_bottom_left=Inferior esquerdo +interburbulator_attempt=tentar +interburbulator_attempt_limited=tentar (__1__/__2__) +interburbulator_attempt_locked=tentar (bloqueado) +interburbulator_submit=Enviar tentativa +interburbulator_greeting=Cara, venha aqui e jogue meu jogo. Estou dentro __1__ em __2__ Sistema. +interburbulator_challenge_locked_1=Tente mais tarde. +interburbulator_challenge_locked_2=No momento, você usou todas as suas tentativas. +interburbulator_challenge_locked_3=Espere um momento antes de começar novamente. +interburbulator_challenge_locked_4=Você pode tentar novamente após 20 segundos. +interburbulator_challenge_locked_5=Espere 20 segundos e desbloqueio o desafio. +interburbulator_challenge_locked_6=O desafio fica bloqueado por 20 segundos. +cannot_do_via_satellite=Não pode ser feito remotamente. +scan-progress-update=Progresso da varredura de superfície para __1__: X __2__ Y __3__ +out_of_reach=Fora de alcance +capturable=Ingerível +touch-to-capture=Toque para engolir +capture-blocked=Captura bloqueada por oponentes +suffix_ruin=__1__ ruína +migration-recipe-changed=[img=utility/danger_icon] Receita alterada: __1__ +migrate_0_5_056=[img=utility/warning_icon] Space Exploration v0.5.60 Migration: [img=virtual-signal/se-spaceship] A mecânica da nave mudou, veja [img=virtual-signal/informatron] Informatron > Naves espaciais ou changelog.txt para mais detalhes. +panel-open=[font=count-font]▼[/font] [font=default-bold]__1__[/font] +panel-closed=[font=count-font]▶[/font] [font=default-bold]__1__[/font] +panel-integrity-name=Energia +panel-speed-name=Rapidez +panel-position-name=Posição +panel-destination-name=Destinação + +[damage-type-name] +cold=Kalt +suffocation=Asfixia +meteor=Meteorito + +[entity-name] +se-linked-container=Armazenamento Arcolink +vase=Vaso +wooden-barrel=Barril de madeira +furnace-ruin=Pilha de pedra destruída +workshop-ruin=Oficina destruída +iron-wood-chest=Baú velho +iron-wood-chest-remnants=Baú velho destruído +stone-rubble=Destroços, Pedregulho +se-gate-blocker=Espaço instável +se-gate-blocker-void=Espaço instável +destroyed-cargo-pod=Cápsula de carga destruída +meteorite=Meteorito +rocket-silo=Silo de míssil satélite +rocket-fragment=Fragmento de míssil +se-antimatter-reactor=Reator de Antimatéria +se-beryllium-ore=Berilo +se-cargo-rocket-cargo-pod=Cápsula de carga +se-cryonite=Crionita +se-condenser-turbine=Turbina condensadora +se-condenser-turbine-tank=Turbina condensadora +se-condenser-turbine-generator=Turbina condensadora +se-core-fragment-processor=Processador de fragmento de núcleo +se-core-miner=Minerador de Núcleo +se-core-miner-drill=Minerador de Núcleo +se-cryogun-ice=Parede de gelo +se-dimensional-anchor=Âncora dimensional +se-electric-boiler=Caldeira eletrica +se-fluid-burner-generator=Gerador de calor líquido +se-fuel-refinery=Refinaria de combustível +se-gate-fragment=Fragmento de artefato +se-holmium-ore=Hólmio +se-iridium-ore=Iridite +se-meteor-defence-container=Sistema de defesa de meteoritos +se-meteor-defence-charger=Meteoriten-Verteidigungsanlage +se-meteor-point-defence-container=Defesa de ponto de meteorito +se-meteor-point-defence-charger=Defesa de ponto de meteorito +se-meteor-point-defence-charger-overcharged=Defesa de ponto de meteorito - Modo de carga rápida +se-methane-ice=Gelo de metano +se-naquium-ore=Naquium +se-pulveriser=Pulverizador +se-rocket-launch-pad=Silo de foguete de carga +se-rocket-launch-pad-tank=Silo de foguete de carga +se-rocket-launch-pad-silo=Silo de foguete de carga +se-rocket-launch-pad-combinator=Silo de foguete de carga +se-rocket-launch-pad-_-seat=Silo de foguete de carga +se-rocket-launch-pad-settings=Silo de foguete de carga +se-rocket-landing-pad=Plataforma de pouso de carga +se-space-accumulator=Acumulador de hólmio +se-space-accumulator-2=Acumulador de Naquium +se-space-astrometrics-laboratory=Laboratório de astrometria +se-space-biochemical-laboratory=Laboratório de bioquímica +se-space-assembling-machine=Máquina de montagem espacial +se-space-capsule-_-vehicle=Cápsula espacial +se-space-curved-rail=Trilhos espaciais +se-space-decontamination-facility=Sistema de descontaminação +se-space-electromagnetics-laboratory=Laboratório de Eletromagnetismo +se-space-genetics-laboratory=Laboratório de genética +se-space-growth-facility=Instalação de criação +se-space-gravimetrics-laboratory=Laboratório de gravimetria +se-space-hypercooler=Trocador de calor +se-space-laser-laboratory=Laboratório de laser +se-lifesupport-facility=Instalação de suporte de vida +se-space-manufactory=Fábrica espacial +se-space-material-fabricator=Fabricante de material +se-space-mechanical-laboratory=Laboratório de mecânica +se-space-particle-accelerator=Acelerador de partículas +se-space-particle-collider=Colisor de partículas +se-space-plasma-generator=Gerador de plasma +se-space-radiation-laboratory=Laboratório de radiação +se-space-radiator=Refrigerador térmico +se-space-radiator-2=Resfriador térmico 2 +se-recycling-facility=Usina de reciclagem +se-space-pipe=Tubo espacial +se-space-pipe-long=Tubo espacial longo +se-space-pipe-long-straight=Tubo espacial lonfo reto __1__ +se-space-pipe-long-junction=Conexão de Tubo espacial longo __1__ +se-space-pipe-to-ground=Tubo espacial subterrâneo +se-space-science-lab=Laboratório de ciências espaciais +se-space-solar-panel=Painel solar do espaço +se-space-solar-panel-2=Painel solar do espaço 2 +se-space-solar-panel-3=Painel solar do espaço 3 +se-space-spectrometry-facility=Sistema de espectrometria +se-space-straight-rail=Trilho espacial +se-space-supercomputer-1=Supercomputadores +se-space-supercomputer-2=Supercomputadores quânticos +se-space-supercomputer-3=Supercomputador neural +se-space-supercomputer-4=Supercomputador de profundidade +se-space-telescope-radio=Radiotelescopio +se-space-telescope-microwave=Telescópio de microondas +se-space-telescope=telescópio +se-space-telescope-xray=Telescópio de raio x +se-space-telescope-gammaray=Telescópio de raios gama +se-space-thermodynamics-laboratory=Laboratório de termodinâmica +se-space-splitter=Linha de montagem do divisor de espaço +se-space-transport-belt=Linha de montagem espacial +se-space-underground-belt=Linha de montagem do espaço subterrâneo +se-spaceship-antimatter-engine=Propulsão de antimatéria de nave espacial +se-spaceship-antimatter-booster-tank=Tanque de antimatéria de nave espacial +se-spaceship-console=Console da nave espacial +se-spaceship-console-output=Saída de sinal do console da nave espacial +se-spaceship-console-alt=Console da nave espacial danificado +se-spaceship-gate=Porta da nave espacial +se-spaceship-ion-engine=Propulsão iônica de nave espacial +se-spaceship-obstacle=Lixo espacial +se-spaceship-rocket-engine=Motor de foguete de nave espacial +se-spaceship-rocket-booster-tank=Tanque de combustível de foguete de nave espacial +se-spaceship-wall=Parede da nave espacial +se-water-ice=Congelada +se-vitamelange=Vitamelange +se-vulcanite=Vulcanito +small-asteroid=Asteróide pequeno +medium-asteroid=Asteróide médio +large-asteroid=Asteróide grande +se-gate-part=Peça de portão +se-gate-platform-scaffold=Andaime de plataforma de portão +se-gate-lock-switch=Componente móvel +se-gate-lock-combinator=Combinador de fechadura de portão +se-gate-platform=Plataforma do portão +se-gate-platform-combinator=Combinador de plataforma +se-gate-energy-interface=Plataforma de energia +se-gate-platform-button-switch=viga +se-gate-tank-input=Entrada de líquido +se-gate-tank-output=Saída de líquido +se-pyramid-a=Estrutura geométrica +se-pyramid-b=Estrutura geométrica +se-pyramid-c=Estrutura geométrica +se-cartouche-a=Cartucho +se-cartouche-b-a=Cartucho +se-cartouche-b-b=Cartucho +se-cartouche-chest=Recipiente antigo +se-glyph=Glifo +glyph=Glifo +se-gate-addon=Multiplicação de artefato +se-gate-platform-button-middle=Pare +se-gate-platform-button-left=Esquerdo +se-gate-platform-button-right=Direito +beacon=Distribuidor de efeitos básicos +se-wide-beacon=Distribuidor de efeito de grande área +se-wide-beacon-2=Distribuidor de efeito de grande área +se-supercharger=Supercarga +se-addon-power-pole=Poste de força adicional +se-pylon=Pilar +se-pylon-substation=Pilar de Subestação +se-pylon-construction=Pilar de construção +se-pylon-construction-roboport=Pilar de construção +se-pylon-construction-radar=Pilar de construção de radar +se-pylon-construction-radar-roboport=Pilar de construção de radar +se-pylon-construction-radar-radar=Pilão de construção de radar +se-shield-projector=Projetor de escudo +se-shield-projector-shield-floor-east=Escudo de energia +se-shield-projector-shield-floor-north=Escudo de energia +se-shield-projector-shield-floor-northeast=Escudo de energia +se-shield-projector-shield-floor-northwest=Escudo de energia +se-shield-projector-shield-floor-south=Escudo de energia +se-shield-projector-shield-floor-southeast=Escudo de energia +se-shield-projector-shield-floor-southwest=Escudo de energia +se-shield-projector-shield-floor-west=Escudo de energia +se-shield-projector-shield-wall-east=Escudo de energia +se-shield-projector-shield-wall-north=Escudo de energia +se-shield-projector-shield-wall-northeast=Escudo de energia +se-shield-projector-shield-wall-northwest=Escudo de energia +se-shield-projector-shield-wall-south=Escudo de energia +se-shield-projector-shield-wall-southeast=Escudo de energia +se-shield-projector-shield-wall-southwest=Escudo de energia +se-shield-projector-shield-wall-west=Escudo de energia +se-shield-projector-barrier=Escudo de energia +se-naquium-heat-pipe=Condução de calor de Naquium +se-naquium-heat-pipe-horizontal=Condução de calorde Naquium Horizontal +se-naquium-heat-pipe-vertical=Condução de calor vertical de Naquium +se-naquium-heat-pipe-long=Condução de calor de Naquium longa __1__ +se-deep-space-transport-belt=Correia transportadora espacial +se-deep-space-transport-belt-black=Correia transportadora espacial preta +se-deep-space-transport-belt-white=Correia transportadora espacial branca +se-deep-space-transport-belt-red=Correia transportadora espacial vermelha +se-deep-space-transport-belt-yellow=Correia transportadora espacial amarela +se-deep-space-transport-belt-green=Correia transportadora espacial verde +se-deep-space-transport-belt-cyan=Correia transportadora espacial turquesa +se-deep-space-transport-belt-blue=Correia transportadora espacial azul +se-deep-space-transport-belt-magenta=Correia transportadora espacial roxa +se-deep-space-underground-belt=Correia transportadora espacial subterrânea +se-deep-space-underground-belt-black=Correia transportadora espacial subterrânea preta +se-deep-space-underground-belt-white=Correia transportadora espacial subterrânea branca +se-deep-space-underground-belt-red=Correia transportadora espacial subterrânea vermelha +se-deep-space-underground-belt-yellow=Correia transportadora espacial subterrânea amarela +se-deep-space-underground-belt-green=Correia transportadora espacial subterrânea verde +se-deep-space-underground-belt-cyan=Correia transportadora espacial subterrânea turquesa +se-deep-space-underground-belt-blue=Correia transportadora espacial subterrânea azuk +se-deep-space-underground-belt-magenta=Correia transportadora espacial subterrânea roxa +se-deep-space-splitter=Separador Espacial +se-deep-space-splitter-black=Separador Espacial preto +se-deep-space-splitter-white=Separador Espacial branco +se-deep-space-splitter-red=Separador Espacial vermelho +se-deep-space-splitter-yellow=Separador Espacial amarelo +se-deep-space-splitter-green=Separador Espacial verde +se-deep-space-splitter-cyan=Separador Espacial turquesa +se-deep-space-splitter-blue=Separador Espacial azul +se-deep-space-splitter-magenta=Separador Espacial roxo +se-core-fissure=Coluna central +se-big-turbine=Gerador de turbina de alta temperatura +se-big-turbine-generator=Gerador de turbina de alta temperatura +se-big-turbine-tank=Gerador de turbina de alta temperatura +se-big-heat-exchanger=Trocador de calor de alta temperatura +se-blueprint-registration-point=Ponto de registro do projeto +se-delivery-cannon=Canhão de entrega +se-delivery-cannon-settings=Canhão de entrega +se-delivery-cannon-energy-interface=Canhão de entrega +se-delivery-cannon-chest=Caixa de canhão de entrega +se-delivery-cannon-weapon=Canhão de entrega de armas +se-delivery-cannon-weapon-settings=Canhão de entrega de armas +se-delivery-cannon-weapon-energy-interface=Canhão de entrega de armas +se-spaceship-clamp=Pinça de nave espacial +se-spaceship-clamp-place=Pinça de nave espacial +se-spaceship-clamp-power-pole-external-east=Passagem de fio de braçadeira de nave espacia +se-spaceship-clamp-power-pole-external-west=Passagem de fio de braçadeira de nave espacia +se-bloater-pool-cloud=Nuvem de piscina +se-energy-transmitter-emitter=Emissor de feixe de energia +se-energy-transmitter-chamber=Emissor de feixe de energia +se-energy-transmitter-injector=Injetor a jato de energia +se-energy-transmitter-injector-reactor=Injetor a jato de energia +se-energy-receiver=Receptor de feixe de energia +se-energy-beam-defence=guarda-chuva +se-nexus=Nexus +se-nexus-charger=Nexus +se-space-probe-rocket=Foguete de sonda espacial +se-space-probe-rocket-silo=Silo de foguet de sonda espacial +se-interburbulator-interface=Interface Interburbulator +se-interburbulator-control=Controle Interburbulator +se-interburbulator-projector=Projetor Interburbulator +se-burbulator=Brontion Burbulator 33027756 + +[entity-description] +pipe=Distribuição de fluidos. +pipe-to-ground=Distribuição subterrânea de fluidos. +straight-rail=Trilhos de trem. +curved-rail=Trilhos de trem. +stone-furnace=Derrete minérios. +steel-furnace=Derrete minérios. +electric-furnace=Derrete minérios. +burner-assembling-machine=Uma estrutura de criação automatizada baseada em queimador. +assembling-machine-1=Uma estrutura de criação automatizada. +assembling-machine-2=Uma estrutura de criação automatizada. +assembling-machine-3=Uma estrutura de criação automatizada. +se-fuel-refinery=Uma estrutura de processamento de combustível automatizado. +chemical-plant=Uma estrutura de criação automatizada. +lab=Uma estrutura de pesquisa automatizada. +burner-lab=Uma estrutura de pesquisa automatizada. +transport-belt=Um transportador que movimenta itens. +fast-transport-belt=Uma correia transportadora que move objetos. +express-transport-belt=Uma correia transportadora que move objetos. +underground-belt=Uma correia transportadora que move objetos para o subsolo. +fast-underground-belt=Uma correia transportadora que move objetos para o subsolo. +express-underground-belt=Uma correia transportadora que move objetos para o subsolo. +splitter=Uma máquina de divisão, fusão e classificação baseada em transportador. +fast-splitter=Uma máquina de divisão, fusão e classificação baseada em transportador. +express-splitter=Uma máquina de divisão, fusão e classificação baseada em transportador. +se-gate-platform-scaffold=Seja qual for o anel, não funcionará. Este é um canteiro de obras para fazer alguns reparos, instalar alguns motores, sensores, interface de controle e outros complementos. +se-gate-lock-switch=Aperte __CONTROL__rotate__ para mover manualmente. +se-gate-platform-button-switch=Aperte __CONTROL__rotate__ para impulsionar. +se-gate-lock-combinator=Ainda não implementado. +se-gate-platform-combinator=Ainda não implementado. +se-gate-energy-interface=Fornece energia para o artefato. +rocket-silo=Lance um satélite ao espaço para explorar o espaço, descobrir novos corpos celestes e obter um pouco de pesquisa espacial. +se-antimatter-reactor=Destrói a antimatéria com matéria para gerar grande calor. +se-beryllium-ore=Minério de berílio +se-condenser-turbine=Tem 75% da eficiência energética de uma turbina a vapor, mas 99% do vapor é devolvido como água. +se-core-fragment-processor=Extrai recursos de fragmentos de núcleo. +se-core-miner=Permite a extração infinita de recursos do núcleo do planeta ou da lua, mas tem retornos decrescentes quando vários são usados ​​na mesma superfície. Consome 50 MW. +se-core-miner-drill=Permite a extração infinita de recursos do núcleo do planeta ou da lua, mas tem retornos decrescentes quando vários são usados ​​na mesma superfície. Consome 50 MW. +se-dimensional-anchor=[font=default-bold][color=#f5cb48]Restrição de posicionamento: fechar órbita estelar[/color][/font]\nUsa a gravidade de uma estrela como um ponto de estabilização para uma anomalia espacial. +se-electric-boiler=Converte água em vapor com a ajuda de energia elétrica. +se-fluid-burner-generator=Requer combustível líquido com um valor energético (como combustível de foguete líquido) para produzir eletricidade. Simples e compacto, mas ineficiente em termos de energia em comparação com turbinas a vapor. Desenvolvido para o espaço. +se-holmium-ore=Minério de hólmio +se-iridium-ore=Minério de irídio +se-meteor-defence-container=Pode proteger a superfície de um planeta inteiro de ataques de meteoros, mas só pode disparar um tiro de cada vez. Deve estar armado com munição de defesa contra meteoros e totalmente carregado. Precisão de 80%. Deve recarregar após disparar um tiro. Requer 20 MW durante o carregamento. +se-meteor-defence-charger=Pode proteger a superfície de um planeta inteiro de ataques de meteoros, mas só pode disparar um tiro de cada vez. Deve estar armado com munição de defesa contra meteoros e totalmente carregado. Precisão de 80%. Deve recarregar após disparar um tiro. Requer 20 MW durante o carregamento. +se-meteor-point-defence-container=Protege uma área de quedas de meteoros. Pode disparar até 4 tiros. Deve estar armado com munição de defesa pontual de meteorito e totalmente carregado. Alcance 64, 50% de precisão, leva tempo para recarregar. +se-meteor-point-defence-charger=Protege uma área de quedas de meteoros. Pode disparar até 4 tiros. Deve estar armado com munição de defesa pontual de meteorito e totalmente carregado. Alcance 64, 50% de precisão, leva tempo para recarregar. +se-meteor-point-defence-charger-overcharged=Defenda uma área contra até 4 meteoros. Intervalo 64; 50% de precisão, leva tempo para carregar após o disparo. Uma defesa sobrecarregada diminuiu a dissipação de energia às custas de flutuações no desempenho de tiro. +se-naquium-ore=Minério de Naquium. +se-rocket-launch-pad=Lance seu inventário para o espaço. Pode levar passageiros, embarque com __CONTROL__toggle-driving__ na frente da área do portão frontal. +se-rocket-landing-pad=Um ponto de entrega de carga para mísseis de carga. +se-space-assembling-machine=Uma máquina de montagem modificada que também funciona no espaço +se-space-astrometrics-laboratory=Conecta, compara e quantifica diferentes fontes de informações astronômicas. +se-space-biochemical-laboratory=Um laboratório químico avançado especializado em bioquímica. Também pode fazer processos químicos simples e processamento de óleo. +se-space-capsule-_-vehicle=Pode ser usado para levar passageiros ao planeta mais próximo. Entrando na cápsula com __CONTROL__toggle-driving__. +se-space-decontamination-facility=Limpa substâncias para uso em ambientes estéreis e processa líquidos para uso em condições de baixa pressão. +se-space-electromagnetics-laboratory=Sistema para enormes campos magnéticos e aplicações de alta tensão extrema. +se-space-genetics-laboratory=Um laboratório de sequenciamento genético, modificação e impressão de culturas orgânicas. +se-space-gravimetrics-laboratory=Analisa e simula distúrbios na gravidade. +se-space-growth-facility=Cultive amostras biológicas sob condições controladas que não podem ser encontradas em nenhum outro lugar, como baixa gravidade. +se-space-hypercooler=Realiza uma troca de temperatura no fluido térmico, na qual torna parte mais quente e parte mais fria. +se-space-laser-laboratory=Experimentos a laser. Proteção para os olhos fortemente recomendada. +se-lifesupport-facility=Manter a vida em ambientes mais hostis. +se-space-manufactory=Uma gigantesca máquina de montagem também pode produzir receitas muito complicadas. Só funciona no espaço (ou em espaçonaves). +se-space-material-fabricator=Sintetiza novos materiais. Um cruzamento entre um acelerador de partículas e uma impressora 3D. +se-space-mechanical-laboratory=Oferece uma gama de processos mecânicos: esmagamento, rasgo, fatiamento, vibração, etc. +se-space-particle-accelerator=Acelera as partículas para perto da velocidade da luz. +se-space-particle-collider=Faz as partículas colidirem e analisa os resultados. +se-space-plasma-generator=Gera diferentes correntes de plasma. +se-space-pipe=Um cano pelo qual você pode caminhar. +se-space-pipe-long=Uma maneira boa e barata de transportar líquidos rapidamente por longas distâncias. Você pode andar sobre ele. +se-space-pipe-long-straight=Comprimento __1__. Não conecta nas laterais. Bom para tubos paralelos e movimentação rápida de líquidos em longas distâncias. +se-space-pipe-long-junction=Comprimento __1__. Possui ramal central com ligações laterais. Bom para transportar líquidos rapidamente por meio de montagens. +se-space-pipe-to-ground=Alcance caro e limitado, use somente quando necessário. +se-space-radiation-laboratory=Um local relativamente seguro para trabalhar com material radioativo. Pode ser usado para processamento de urânio. +se-space-radiator=Dissipa o excesso de calor do fluido térmico superaquecido. +se-space-radiator-2=Dissipa o excesso de calor do fluido térmico superaquecido. +se-recycling-facility=Recicla sucata e outros subprodutos em recursos. +se-space-science-lab=Pode lidar com pacotes científicos avançados. Deve ser colocado no espaço. +se-space-solar-panel=Um painel solar altamente eficiente para o espaço. +se-space-solar-panel-2=Um painel solar avançado de alta eficiência para o espaço. +se-space-solar-panel-3=Um painel solar de eficiência extremamente alta no qual você pode caminhar. +se-space-spectrometry-facility=Espectrofotometria, cromatografia gasosa, espectrometria de massa e outra espectrometria. Atire coisas contra a parede, dobre-as, quebre-as e veja onde elas atingem. +se-space-straight-rail=Desenvolvido para o espaço, mas também pode ser usado em superfícies. +se-space-supercomputer-1=Manipulação, processamento e simulação de dados. +se-space-supercomputer-2=Computação quântica. Melhor manipulação, processamento e simulação de dados. +se-space-supercomputer-3=Redes neurais adaptativas em uma estrutura de computação quântica. Melhor manipulação, processamento e simulação de dados. +se-space-supercomputer-4=Um supercomputador semi-orgânico com nanoengenharia que usa espaço warping e dimensões mais altas para aumentar a densidade de processamento e transporte de energia. +se-space-telescope-radio=Um telescópio gigante que pode medir ondas de rádio muito fracas de fontes distantes. +se-space-telescope-microwave=Um telescópio gigante que pode medir microondas e radiação cósmica de fundo. +se-space-telescope=Um telescópio sofisticado para muitos comprimentos de onda ao redor do espectro visível. +se-space-telescope-xray=Os raios X são bloqueados pela maioria das atmosferas. Este poderoso telescópio foi desenvolvido para o espaço onde a atmosfera não desempenha um papel. +se-space-telescope-gammaray=Os raios gama não podem ser desviados. Em vez disso, este poderoso telescópio usa detectores especiais. +se-space-thermodynamics-laboratory=Suporta aplicações de temperaturas extremas. Também pode realizar operações simples, como derreter. +se-space-transport-belt=Impede que as coisas fiquem à deriva no espaço. +se-spaceship-antimatter-engine=Consome antimatéria. Atua como uma partição para o envelope de segurança da nave espacial. +se-spaceship-antimatter-booster-tank=Armazena antimatéria. Necessário para o lançamento de naves espaciais. +se-spaceship-console=É necessário mover uma nave espacial entre planetas, luas, órbitas e campos de asteróides. Deve estar no chão da nave, fechado nas paredes / portas da nave, não deve ter buracos. Execute uma verificação de integridade para identificar problemas. +se-spaceship-console-output=Sinais de saída sobre o estado atual da nave espacial. Veja espaçonaves em [img=virtual-signal/informatron] InformaTron Para maiores informações [__CONTROL__informatron__]. +se-spaceship-console-alt=[font=default-bold][color=#f5cb48]Restrição de colocação: andar da nave espacial[/color][/font]\nEste console da nave está danificado e não pode ser usado para pilotar uma nave espacial. +se-spaceship-gate=Um campo de força impede a descompressão quando a porta é aberta. Atua como uma partição para o envelope de segurança da nave espacial. +se-spaceship-ion-engine=[font=default-bold][color=#f5cb48]Restrição de colocação: andar da nave espacial[/color][/font]\nConsome pouca corrente de íons, mas muita energia para propulsão. É considerada uma antepara para contenção de naves espaciais. +se-spaceship-rocket-engine=Queima combustível líquido de foguete. Atua como uma partição para o envelope de segurança da nave espacial. +se-spaceship-rocket-booster-tank=Armazena combustível líquido de foguete. Necessário para o lançamento de naves espaciais. +se-spaceship-wall=Deve ser colocado no chão da nave. Atua como uma partição para o envelope de segurança da nave espacial. Fendas diagonais quebram a integridade da contenção. +beacon=8 slots de módulo. Transfere os efeitos dos módulos para unidades amigas próximas dentro de 3 espaços. Se vários distribuidores de efeitos afetam o mesmo objeto, eles os sobrecarregam e os impedem de funcionar. +se-wide-beacon=15 slots de módulo. Transfere os efeitos dos módulos para unidades amigas próximas dentro de 14 espaços. Se vários distribuidores de efeitos afetam o mesmo objeto, eles os sobrecarregam e os impedem de funcionar. +se-wide-beacon-2=20 slots de módulo. Transfere os efeitos dos módulos para unidades amigas próximas dentro de 14 espaços. Se vários distribuidores de efeitos afetam o mesmo objeto, eles os sobrecarregam e os impedem de funcionar. +se-supercharger=Pode carregar até 64 robôs ao mesmo tempo em alta velocidade. O consumo máximo de energia da estrutura é de 1 GW. +se-addon-power-pole=Um pequeno poste de energia destinado a ser acoplado a edifícios ou para controle preciso da cobertura elétrica. +se-pylon=Distribui energia elétrica. Faixa de conexão de 64 telhas. +se-pylon-substation=Distribui energia elétrica. Área de conexão de 64 tiles, área de fornecimento de energia de 64x64 +se-pylon-construction=Distribui energia elétrica e amplia a área de construção. Área de conexão de 64 telhas, área de construção de 64x64. +se-pylon-construction-radar=Distribui energia elétrica, amplia a área de construção e proporciona visibilidade de radar. Área de conexão de 64 telhas, área de construção e visualização 256x256. Área de logística 4x4 +se-shield-projector=Cria um campo de força de proteção. Quando o projetor está carregado ou a blindagem está danificada, mais energia é necessária. Pode bloquear projéteis inimigos quando o modo Combat Mechanics Overhaul está instalado. +se-big-turbine=Um grande gerador que puxa vapor de 5000 ° C, emite vapor de 500 ° C na outra extremidade e emite água nas laterais. 2% da energia fornecida não é utilizada e está contida no vapor de exaustão. +se-big-heat-exchanger=Um grande trocador de calor projetado para alta temperatura e alta capacidade. +se-delivery-cannon=Um canhão elétrico que pode disparar recursos para a órbita e além. Irá causar danos se não for segurado com segurança, use com cuidado. Capacidade de 1 GJ, 50 MW ao carregar. +se-delivery-cannon-chest=Um baú blindado projetado para conter recursos em queda em alta velocidade com segurança. Requer espaço de armazenamento para registrar as entregas com segurança. +se-delivery-cannon-weapon=Um canhão elétrico grande que pode disparar munição em órbita e além. Use com cuidado. +se-spaceship-clamp=Um grampo em uma nave espacial pode ser ancorado em um grampo voltado na direção oposta. É considerada uma antepara para contenção de naves espaciais. +se-spaceship-clamp-place=Um grampo em uma nave espacial pode ser ancorado em um grampo voltado na direção oposta. É considerada uma antepara para contenção de naves espaciais. +se-spaceship-clamp-power-pole-external-east=Um ponto de conexão de fio em uma braçadeira. Encaminha sinais de circuito e energia para o terminal conectado durante a ancoragem. +se-spaceship-clamp-power-pole-external-west=Um ponto de conexão de fio em uma braçadeira. Encaminha sinais de circuito e energia para o terminal conectado durante a ancoragem. +se-energy-transmitter-emitter=O edifício central que cria um feixe de energia entre as superfícies. Pode ser usado como arma ou para transmitir energia a um receptor de feixe de energia. Requer uma câmara de feixe de energia acoplada e injetores de feixe de energia acoplados. A intensidade do jato depende do número de injetores. +se-energy-transmitter-chamber=Deve ser conectado a um transmissor de feixe de energia. Outras câmaras podem ser conectadas no final ou no meio de cada lado. Os injetores a jato de energia só podem ser conectados lateralmente. +se-energy-transmitter-injector=Deve ser anexado a uma câmara de feixe de energia e conectado a um emissor. Os injetores têm um consumo de energia fixo, cada um aumentando a energia enviada e dando mais calor a um receptor ou aumentando a velocidade e os danos da arma a jato. +se-energy-transmitter-injector-reactor=Deve ser anexado a uma câmara de feixe de energia e conectado a um emissor. Os injetores têm um consumo de energia fixo, cada um aumentando a energia enviada e dando mais calor a um receptor ou aumentando a velocidade e os danos da arma a jato. +se-energy-receiver=Recebe um feixe de energia na forma de calor. O transmissor deve estar no modo Energize e o alvo deve estar no receptor. +se-energy-beam-defence=Sistema de defesa do feixe de energia. Protege contra feixes de energia transmitidos pelo espaço e ejeções de massa coronal. O único requisito para a função é energia, a saída básica é de 10 MW, mas aumenta dependendo da força dos raios de ataque. Contra ejeções de massa coronal, apenas 1 por superfície é necessária, contra raios de energia, 1 tela pode defender contra até 500 GW de força de ataque. Veja os raios de energia em [img=virtual-signal/informatron] InformaTron Para maiores informações [__CONTROL__informatron__]. +se-nexus=Só funciona em uma nave em movimento, o consumo de energia é proporcional à velocidade. Pode extrair dados de movimentos interestelares, a geração de dados é baseada na energia cinética da nave. O Nexus foi projetado como uma unidade de distorção e com a tecnologia certa pode permitir a fuga do aglomerado de estrelas local. +se-nexus-charger=Só funciona em uma nave em movimento, o consumo de energia é proporcional à velocidade. Pode extrair dados de movimentos interestelares, a geração de dados é baseada na energia cinética da nave. O Nexus foi projetado como uma unidade de distorção e com a tecnologia certa pode permitir a fuga do aglomerado de estrelas local. +se-space-probe-rocket-silo=Um silo de foguetes para o lançamento de sondas espaciais. +oil-refinery=Transforma o petróleo bruto em produtos mais úteis. +kr-singularity-beacon=Um distribuidor de efeitos compacto com 100% de eficiência e curto alcance. Transfere os efeitos dos módulos para unidades amigas próximas dentro de 2 espaços. Se vários distribuidores de efeitos afetam o mesmo objeto, eles os sobrecarregam e os impedem de funcionar. +spidertron=Pode ser implantado a partir de um foguete de carga se o foguete não tiver sido atribuído a um local de pouso. +se-linked-container=Um contêiner que está conectado a outros contêineres por um espaço extra-dimensional. Os membros do recipiente dependem da superfície em que ele é colocado pela primeira vez. +se-pulveriser=Minerais mais duros em pó e triturados e fragmentos do núcleo do planeta. +se-space-accumulator=Armazenamento de energia de alta densidade. +se-space-accumulator-2=Armazenamento de energia de alta densidade. + +[equipment-name] +energy-shield-equipment=Escudo de energia +energy-shield-mk2-equipment=Escudo de energia Nível 2 +energy-shield-Nível 3-equipment=Escudo de energia Nível 3 +energy-shield-Nível 4-equipment=Escudo de energia Nível 4 +energy-shield-Nível 5-equipment=Escudo de energia Nível 5 +energy-shield-Nível 6-equipment=Escudo de energia Nível 6 +se-adaptive-armour-equipment-1=Armadura adaptativa Nível 1 +se-adaptive-armour-equipment-2=Armadura adaptativa Nível 2 +se-adaptive-armour-equipment-3=Armadura adaptativa Nível 3 +se-adaptive-armour-equipment-4=Armadura adaptativa Nível 4 +se-adaptive-armour-equipment-5=Armadura adaptativa Nível 5 +se-rtg-equipment=RTG portátil +se-rtg-equipment-2=RTG portátil Nível 2 +se-lifesupport-equipment-1=Equipamento de suporte de vida Nível 1 +se-lifesupport-equipment-2=Equipamento de suporte de vida Nível 2 +se-lifesupport-equipment-3=Equipamento de suporte de vida Nível 3 +se-lifesupport-equipment-4=Equipamento de suporte de vida Nível 4 + +[equipment-description] +energy-shield-equipment=Uma capa protetora que carrega rapidamente, mas usa muita energia. +energy-shield-mk2-equipment=Uma capa protetora que carrega rapidamente, mas usa muita energia. +energy-shield-mk3-equipment=Uma capa protetora que carrega rapidamente, mas usa muita energia. +energy-shield-mk4-equipment=Uma capa protetora que carrega rapidamente, mas usa muita energia. +energy-shield-mk5-equipment=Uma capa protetora que carrega rapidamente, mas usa muita energia. +energy-shield-mk6-equipment=Uma capa protetora que carrega rapidamente, mas usa muita energia. +se-adaptive-armour-equipment-1=Armadura que usa energia para se reparar. A proteção aumenta lentamente. +se-adaptive-armour-equipment-2=Armadura que usa energia para se reparar. A proteção aumenta lentamente. +se-adaptive-armour-equipment-3=Armadura que usa energia para se reparar. A proteção aumenta lentamente. +se-adaptive-armour-equipment-4=Armadura que usa energia para se reparar. A proteção aumenta lentamente. +se-adaptive-armour-equipment-5=Armadura que usa energia para se reparar. A proteção aumenta lentamente. +se-rtg-equipment=Gerador termoelétrico radioisotópico. Um gerador portátil que converte o calor da decomposição radioativa em eletricidade. A energia dura décadas, nenhum combustível adicional é necessário +se-rtg-equipment-2=Gerador termoelétrico radioisotópico. Um gerador portátil aprimorado que converte o calor da decomposição radioativa em eletricidade. A energia dura décadas, nenhum combustível adicional é necessário. +se-lifesupport-equipment-1=Aumenta a eficiência do suporte de vida em + 100% (aditivo). Se instalado em um traje não espacial, o bônus de eficiência será reduzido pela metade e não funcionará no espaço. +se-lifesupport-equipment-2=Aumenta a eficiência do suporte de vida em + 200% (aditivo). Se instalado em um traje não espacial, o bônus de eficiência será reduzido pela metade e não funcionará no espaço. +se-lifesupport-equipment-3=Aumenta a eficiência do suporte de vida em + 400% (aditivo). Se instalado em um traje não espacial, o bônus de eficiência será reduzido pela metade e não funcionará no espaço. +se-lifesupport-equipment-4=Aumenta a eficiência do suporte de vida em + 800% (aditivo). Se instalado em um traje não espacial, o bônus de eficiência será reduzido pela metade e não funcionará no espaço. + +[fluid-name] +se-antimatter-stream=Fluxo de antimatéria +se-bio-sludge=Lama orgânica +se-contaminated-bio-sludge=Lodo orgânico contaminado +se-contaminated-space-water=Água cósmica contaminada +se-chemical-gel=Gel químico +se-decompressing-steam=vapor +se-liquid-rocket-fuel=Combustível líquido de foguete +se-methane-gas=Gás metano +se-methane-gas-mixed=Gás metano misto +se-nutrient-gel=Gel nutriente +se-neural-gel=Gel neural +se-neural-gel-2=Gel neural avançado +se-ion-stream=Corrente de íon +se-plasma-stream=Fluxo de plasma +se-particle-stream=Fluxo de partículas +se-proton-stream=Fluxo de prótons +se-space-coolant=Fluido térmico 25 ° C +se-space-coolant-hot=Fluido térmico 25 ° C +se-space-coolant-warm=Fluido térmico frio -10 ° C +se-space-coolant-cold=Fluido térmico frio -100 ° C +se-space-coolant-supercooled=luido térmico superfrio -273 ° C +se-space-water=Água cósmica +se-beryllium-hydroxide=Hidróxido de berílio +se-cryonite-slush=Neve derretida crionita + +[fluid-description] +se-space-coolant=A temperatura normal do fluido térmico. +se-space-coolant-hot=A temperatura normal do fluido térmico. +se-space-coolant-warm=Temperatura do fluido térmico após o resfriamento pelo resfriador térmico. +se-space-coolant-cold=Temperatura do fluido térmico após o resfriamento através do trocador de calor. +se-space-coolant-supercooled=Temperatura do fluido térmico após resfriamento repetido através do trocador de calor. +se-space-water=Água que não congela em baixa pressão, adequada para a maioria das aplicações espaciais. + +[fuel-category-name] +antimatter=Combustível de antimatéria + +[item-group-name] +space=espaço +science=Ciência +spaceship=Nave espacial +bob-fluids=líquidos +resources=Recursos +intermediate-products=Manufatura +combat=Equipamento e combate + +[item-name] +spidertron=Spidertron +core-fragment=Fragmento de núcleo (__1__) +effectivity-module-4=Módulo de Eficiência 4 +effectivity-module-5=Módulo de Eficiêncial 5 +effectivity-module-6=Módulo de Eficiência 6 +effectivity-module-7=Módulo de Eficiência 7 +effectivity-module-8=Módulo de Eficiência 8 +effectivity-module-9=Módulo de Eficiência 9 +glass=Vidro +productivity-module-4=Módulo de produtividade 4 +productivity-module-5=Módulo de produtividade 5 +productivity-module-6=Módulo de produtividade 6 +productivity-module-7=Módulo de produtividade 7 +productivity-module-8=Módulo de produtividade 8 +productivity-module-9=Módulo de produtividade 9 +rocket-fuel=Combustível sólido de Foguetes +sand=Areia +solid-sand=Areia lavada +washed-sand=Areia lavada +satellite=Satélite de navegação +se-satellite-telemetry=Telemetria de satélite +se-antimatter-canister=Recipiente de antimatéria +se-astrometric-data=Dados astrométricos +se-astronomic-catalogue-1=Catálogo de Astronomia +se-astronomic-catalogue-2=Grande catálogo de astronomia +se-astronomic-catalogue-3=Catálogo de astronomia abrangente +se-astronomic-catalogue-4=Catálogo de astronomia estendido +se-astronomic-insight=Conhecimento Astronômico +se-astronomic-science-pack-1=Pacote de ciência astronômica 1 +se-astronomic-science-pack-2=Pacote de ciência astronômica 2 +se-astronomic-science-pack-3=Pacote de ciência astronômica 3 +se-astronomic-science-pack-4=Pacote de ciência astronômica 4 +se-atomic-data=Dados atômicos +se-beryllium-ore=Berilo +se-ballistic-shielding-data=Dados de blindagem balística +se-beryllium-ore-crushed=Berilo quebrado +se-beryllium-ore-washed=Berilo lavado +se-beryllium-plate=Placa de berílio +se-beryllium-powder=Pó de berílio +se-beryllium-ingot=Lingote de berílio +se-beryllium-sulfate=Sulfato de berílio +se-bio-combustion-data=Dados de combustão biológica +se-bio-combustion-resistance-data=Dados de resistência à combustão biológica +se-bio-spectral-data=Dados espectrais biológicos +se-biochemical-data=Dados bioquímicos +se-biochemical-resistance-data=Dados de resistência bioquímica +se-bioculture=BioCultura +se-bioelectrics-data=Dados bioelétricos +se-biological-catalogue-1=Catálogo de biologia +se-biological-catalogue-2=Grande catálogo de biologia +se-biological-catalogue-3=Catálogo de biologia abrangente +se-biological-catalogue-4=Catálogo de biologia estendido +se-biological-insight=Conhecimento biológico +se-biological-science-pack-1=Pacote de ciências biológicas 1 +se-biological-science-pack-2=Pacote de ciências biológicas 2 +se-biological-science-pack-3=Pacote de ciências biológicas 3 +se-biological-science-pack-4=Pacote de ciências biológicas 4 +se-biomechanical-data=Dados biomecânicos +se-biomechanical-resistance-data=Dados de resistência biomecânica +se-boson-data=Dados Boson +se-broken-data=Cartão de dados destruído +se-canister=Container de segurança +se-biogun=Bio canhão +se-bloater-ammo=Munição bloatburst +se-pheromone-ammo=Flecha de feromônio +se-cryogun=Criocanhão +se-cryogun-ammo=Munição de geleira +se-rocket-launch-pad-silo-dummy-ingredient-item=Foguete de carga +se-rocket-launch-pad-silo-dummy-result-item=Foguete de carga +se-cargo-rocket-cargo-pod=Cápsula de carga +se-cargo-rocket-fuel-tank=Tanque de combustível de foguetes +se-cargo-rocket-section=Componente de foguete de carga +se-cargo-rocket-section-packed=Componente de foguete de carga embalado +se-cold-thermodynamics-data=Dados termodinâmicos frios +se-comparative-genetic-data=Dados genéticos comparativos +se-compressive-strength-data=Dados de classificação de pressão +se-conductivity-data=Dados de condutividade +se-contaminated-scrap=Sucata contaminada +se-core-fragment-omni=Fragmento de núcleo +se-corrosion-resistance-data=Dados de resistência à corrosão +se-cryogenics-data=Dados criogênicos +se-cryonite=Crionita +se-cryonite-crushed=Crionita quebrada +se-cryonite-washed=Crionita lavada +se-cryonite-rod=Haste de crionita +se-cryonite-ion-exchange-beads=Esferas de troca iônica aniônica +se-dark-energy-data=Dados de energia escura +se-darkmatter-data=Dados de matéria escura +se-data-storage-substrate-cleaned=Substrato de armazenamento de dados polido +se-data-storage-substrate=Substrato de armazenamento de dados brutos +se-decompression-data=Dados de descompressão +se-decompression-resistance-data=Dados de resistência à descompressão +se-universal-catalogue=Catálogo universal +se-deep-space-science-pack=Pacote de ciência para exploração espacial +se-deep-space-science-pack-1=Pacote de ciência espacial 1 +se-deep-space-science-pack-2=Pacote de ciência espacial 2 +se-deep-space-science-pack-3=Pacote de ciência espacial 3 +se-deep-space-science-pack-4=Pacote de ciência espacial 4 +se-doppler-shift-data=Dados de deslocamento Doppler +se-durability-data=Antes das datas +se-electrical-shielding-data=Dados de blindagem elétrica +se-electromagnetic-field-data=Dados de campo eletromagnético +se-empty-data=Cartão de dados em branco +se-empty-lifesupport-canister=Recipiente de suporte de vida vazio +se-energy-catalogue-1=Catálogo de energia +se-energy-catalogue-2=Grande catálogo de energia +se-energy-catalogue-3=Catálogo de energia abrangente +se-energy-catalogue-4=Catálogo de energia estendido +se-energy-insight=Realização de energia +se-energy-science-pack-1=Pacote de ciência da energia 1 +se-energy-science-pack-2=Pacote de ciência da energia 2 +se-energy-science-pack-3=Pacote de ciência da energia 3 +se-energy-science-pack-4=Pacote de ciência da energia 4 +se-entanglement-data=Dados de entrelaçamento +se-enriched-naquium=Naquium Enriquecido +se-exotic-fission-data=Datas exóticas de clivagem +se-exotic-singularity-data=Dados de singularidade +se-explosion-shielding-data=Dados de proteção contra explosão +se-experimental-alloys-data=Dados experimentais de liga +se-experimental-biochemical-data=Dados bioquímicos experimentais +se-experimental-bioculture=Cultura orgânica experimental +se-experimental-genetic-data=Dados genéticos experimentais +se-experimental-material-decay-data=Dados de decomposição de material experimental +se-experimental-material-spectral-data=Dados espectrais de material experimental +se-experimental-material=Protótipo de material experimental +se-experimental-specimen=Biomassa experimental +se-experimental-superconductor=Protótipo de supercondutor +se-forcefield-data=Dados de campo de força +se-friction-data=Dados de fricção +se-fusion-test-data=Dados de teste de fusão +se-gammaray-detector=Detector de raios gama +se-gammaray-observation-data=Dados de observação de raios gama +se-gammaray-test-data=Dados de raios gama +se-gate-fragment=Fragmento de artefato +se-genetic-data=Dados genéticos +se-gravity-wave-observation-data=Dados de observação de ondas gravitacionais +se-gravity-wave-data=Dados de onda gravitacional +se-gravimetric-observation-data=Dados de observação gravimétrica +se-gravimetric-test-data=Dados de teste gravimétrico +se-gravitational-lensing-data=Dados de lentes gravitacionais +se-heat-shielding=Escudo térmico +se-holmium-ore=Holminit +se-holmium-ore-crushed=Holminit quebrado +se-holmium-ore-washed=Holminit lavado +se-holmium-powder=Pó de hólmio +se-holmium-plate=Placa de hólmio +se-holmium-ingot=Lingote de hólmio +se-hot-thermodynamics-data=Dados termodinâmicos quentes +se-impact-shielding-data=Dados de proteção contra impactos +se-infrared-observation-data=Dados de observação infravermelho +se-ion-spectrometry-data=Dados de espectrometria de íons +se-iridium-ore=Iridite +se-iridium-ore-crushed=Irídio quebrado +se-iridium-ore-washed=Irídio lavado +se-iridium-piledriver=Irídio piledriver +se-iridium-powder=Irídio em pó +se-iridium-plate=Placa de irídio +se-iridium-ingot=Lingotes de Irídio +se-junk-data=cartão de dados defeituoso +se-laser-shielding-data=Dados de proteção de laser +se-lepton-data=Dados Lepton +se-lifesupport-canister=Tanque de suporte de vida +se-machine-learning-data=Dados de aprendizado de máquina +se-magnetic-canister=Recipiente magnético +se-magnetic-monopole-data=Dados de monopólio magnético +se-material-decay-data=Dados de decomposição de material +se-material-science-pack-1=Pacote de ciência de materiais 1 +se-material-science-pack-2=Pacote de ciência de materiais 2 +se-material-science-pack-3=Pacote de ciência de materiais 3 +se-material-science-pack-4=Pacote de ciência de materiais 4 +se-material-spectral-data=Dados espectrais de material +se-material-testing-pack=Pacote de teste de material +se-material-catalogue-1=Catálogo de materiais +se-material-catalogue-2=Grande catálogo de materiais +se-material-catalogue-3=Catálogo de material abrangente +se-material-catalogue-4=Catálogo de materiais estendido +se-material-insight=Conhecimento material +se-medpack=Pacote médico +se-medpack-2=Pacote médico 2 +se-medpack-3=Pacote médico 3 +se-medpack-4=Pacote médico 4 +se-meteor-defence=Sistema de defesa de meteoritos +se-meteor-defence-ammo=Munição do sistema de defesa de meteoritos +se-meteor-point-defence=Defesa de ponto de meteorito +se-meteor-point-defence-ammo=Munição de defesa de ponto de meteorito +se-methane-ice=Gelo de metano +se-micro-black-hole-data=Dados de micro buracos negros +se-microwave-observation-data=Dados de observação de microondas +se-negative-pressure-data=Dados de pressão negativa +se-nano-cold-thermodynamics-data=Dados termodinâmicos a frio de nanomateriais +se-nano-compressive-strength-data=Dados de resistência à pressão de nanomateriais +se-nano-hot-thermodynamics-data=Dados de termodinâmica quente de nanomateriais +se-nanomaterial=Nanomaterial +se-nano-tensile-strength-data=Dados de resistência à tração de nanomateriais +se-naquium-ore=Naquium +se-naquium-ore-crushed=Naquium quebrado +se-naquium-ore-washed=Naquium lavado +se-naquium-powder=Pó de Naquium +se-naquium-plate=Placa de Naquium +se-naquium-ingot=Barras de Naquium +se-neural-anomaly-data=Dados de anomalia neural +se-nutrient-vat=Cultura de nutrientes +se-observation-frame-blank=Quadro de observação vazio +se-observation-frame-gammaray=Quadro de observação de raios gama +se-observation-frame-infrared=Quadro de observação infravermelho +se-observation-frame-microwave=Quadro de observação de microondas +se-observation-frame-radio=Quadro de observação de ondas de rádio +se-observation-frame-uv=Quadro de observação de raios ultravioleta +se-observation-frame-visible=Quadros de observação de radiação visível +se-observation-frame-xray=Quadro de observação de raios X +se-orbital-data=Dados de cálculo orbital +se-particle-beam-shielding-data=Dados de proteção de feixe de partículas +se-plague-bomb=Bomba de peste +se-plasma-canister=Recipiente de plasma +se-plasma-electrodynamics-data=Dados eletrodinâmicos de plasma +se-plasma-thermodynamics-data=Dados termodinâmicos de plasma +se-polarisation-data=Dados de polarização +se-pressure-containment-data=Dados de resistência à pressão +se-quantum-phenomenon-data=Dados do fenômeno quântico +se-quark-data=Dados Quark +se-radiation-data=Dados de radiação +se-radiation-exposure-data=Dados de exposição à radiação +se-radiation-exposure-resistance-data=Dados de resistência à radiação +se-radiation-shielding-data=Dados de proteção contra radiação +se-radio-observation-data=Dados de observação de ondas de rádio +se-rigidity-data=Dados de rigidez +se-rtg-equipment=RTG portátil +se-rtg-equipment-2=RTG portátil Nível 2 +se-scrap=ferro velho +se-shear-strength-data=Dados de resistência ao cisalhamento +se-significant-data=Dados significativos +se-significant-specimen=Biomassa significativa +se-singularity-data=Dados de singularidade +se-space-capsule=Cápsula espacial +se-space-mirror=Espelho multiespectral +se-space-platform-plating=Revestimento de plataforma espacial +se-space-platform-scaffold=Andaimes de plataforma espacial +se-space-rail=Trilho espacial +se-spaceship-floor=Andar da nave espacial +se-specimen=Biomassa +se-subatomic-data=Dados subatômicos +se-superconductivity-data=Dados de supercondutividade +se-superconductor=Supercondutor +se-superconductive-cable=Cabos supercondutores +se-tensile-strength-data=Dados de resistência à tração +se-tesla-ammo=Munição de rifle teslag +se-tesla-gun=Rifle tesla +se-thruster-suit=Traje espacial +se-thruster-suit-2=Traje espacial Nível 2 +se-thruster-suit-3=Traje espacial Nível 3 +se-thruster-suit-4=Traje espacial Nível 4 +se-timespace-anomaly-data=Dados de anomalia de período +se-used-lifesupport-canister=Recipiente de suporte de vida usado +se-uv-observation-data=Dados de observação de radiação UV +se-visible-observation-data=Dados de observação de radiação visível +se-vitamelange=Vitamelange +se-vitamelange-nugget=Pepita de Vitamelange +se-vitamelange-roast=Vitamelange assado +se-vitamelange-spice=Tempero de Vitamelange +se-vitamelange-extract=Extrato de Vitamelange +se-vulcanite=Vulcanito +se-vulcanite-crushed=Vulcanito quebrado +se-vulcanite-washed=Vulcanito lavado +se-vulcanite-block=Bloco de vulcanita +se-vulcanite-ion-exchange-beads=Esferas de troca iônica catiônica +se-water-ice=Congelada +se-xray-observation-data=Dados de observação de raios X +se-zero-point-energy-data=Dados de energia do ponto zero +se-rocket-science-pack=Pacote de ciência para foguetes +space-science-pack=Pacote de ciência para otimização +speed-module-4=Módulo de velocidade 4 +speed-module-5=Módulo de velocidade 5 +speed-module-6=Módulo de velocidade 6 +speed-module-7=Módulo de velocidade 7 +speed-module-8=Módulo de velocidade 8 +speed-module-9=Módulo de velocidade 9 +se-aeroframe-pole=Pólo aeroframe +se-aeroframe-scaffold=Estrutura do Aeroframe +se-aeroframe-bulkhead=Antepara do Aeroframe +se-lattice-pressure-vessel=Vaso de pressão de grade +se-heavy-girder=Transportadora pesada +se-heavy-bearing=Acampamento pesado +se-heavy-composite=Composto pesado +se-heavy-assembly=Montagem pesada +se-bioscrubber=Bio-lavadora +se-vitalic-epoxy=Epóxi vital +se-vitalic-reagent=Reagente vital +se-vitalic-acid=Ácido vital +se-self-sealing-gel=Gel autovedante +se-holmium-cable=Cabo de hólmio +se-holmium-solenoid=Solenóide de hólmio (bobina) +se-quantum-processor=Processador quântico +se-dynamic-emitter=Radiador dinâmico +se-naquium-processor=Processador Naquium +se-naquium-cube=Cubos de Naquium +se-naquium-tessaract=Tesserato de Naquium +se-wide-beacon=Distribuidor de efeito de grande área +se-wide-beacon-2=Distribuidor de efeito de grande área +se-lifesupport-equipment-1=Equipamento de suporte de vida Nível 1 +se-lifesupport-equipment-2=Equipamento de suporte de vida Nível 2 +se-lifesupport-equipment-3=Equipamento de suporte de vida Nível 3 +se-lifesupport-equipment-4=Equipamento de suporte de vida Nível 4 +se-naquium-heat-pipe=Condução de calor de Naquium +se-naquium-heat-pipe-horizontal=Condução de calor Horizontal de Naquium +se-naquium-heat-pipe-vertical=Condução de calor vertical de Naquium +se-naquium-heat-pipe-long=Condução de calor de Naquium longa __1__ +se-deep-space-transport-belt=Correia transportadora espacial +se-deep-space-transport-belt-black=Correia transportadora espacial preta +se-deep-space-transport-belt-white=Correia transportadora espacial branca +se-deep-space-transport-belt-red=Correia transportadora espacial vermelha +se-deep-space-transport-belt-yellow=Correia transportadora espacial amarela +se-deep-space-transport-belt-green=Correia transportadora espacial verde +se-deep-space-transport-belt-cyan=Correia transportadora espacial turquesa +se-deep-space-transport-belt-blue=Correia transportadora espacial azul +se-deep-space-transport-belt-magenta=Correia transportadora espacial roxa +se-deep-space-underground-belt=Correia transportadora espacial subterrânea +se-deep-space-underground-belt-black=Correia transportadora espacial subterrânea preta +se-deep-space-underground-belt-white=Correia transportadora espacial subterrânea branca +se-deep-space-underground-belt-red=Correia transportadora espacial subterrânea vermelha +se-deep-space-underground-belt-yellow=Correia transportadora espacial subterrânea amarela +se-deep-space-underground-belt-green=Correia transportadora espacial subterrânea verde +se-deep-space-underground-belt-cyan=Correia transportadora espacial subterrânea turquesa +se-deep-space-underground-belt-blue=Correia transportadora espacial subterrânea azul +se-deep-space-underground-belt-magenta=Correia transportadora espacial subterrânea roxa +se-deep-space-splitter=Separador Espacial +se-deep-space-splitter-black=Separador Espacial preto +se-deep-space-splitter-white=Separador Espacial branco +se-deep-space-splitter-red=Separador Espacial vermelho +se-deep-space-splitter-yellow=Separador Espacial amarelo +se-deep-space-splitter-green=Separador Espacial verde +se-deep-space-splitter-cyan=Separador Espacial turquesa +se-deep-space-splitter-blue=Separador Espacial azul +se-deep-space-splitter-magenta=Separador Espacial roxo +se-blueprint-registration-point=Ponto de registro do projeto +se-delivery-cannon-capsule=Cápsula de canhão de entrega +se-delivery-cannon-capsule-packed=Lieferungskanonen-Kapsel: __1__ +se-delivery-cannon-targeter=Dispositivo de mira de canhão de entrega +se-delivery-cannon-weapon-capsule=Cápsula de entrega de armas +se-delivery-cannon-weapon-capsule-packed=Cápsula de entrega de armas: __1__ +se-delivery-cannon-weapon-targeter=Dispositivo de mira de canhão de entrega de armas +se-energy-transmitter-targeter=Dispositivo de mira de feixe de energia +se-arcosphere=Arcosfera +se-arcosphere-a=λ Arcosfera lambda +se-arcosphere-b=ξ Arcosfera Xi +se-arcosphere-c=ζ Arcosfera Zeta +se-arcosphere-d=θ Arcosfera Theta +se-arcosphere-e=ε Arcosfera Epsilon +se-arcosphere-f=ε Arcosfera Phi +se-arcosphere-g=γ Arcosfera Gamma +se-arcosphere-h=ω Arcosfera Omega +se-arcosphere-collector=Coletor de Arcosfera +se-star-probe=Sonda estrela +se-belt-probe=Sonda do cinturão de asteróides +se-void-probe=Sonda do Vazio Interestelar +se-star-probe-data=Dados da sonda estrela +se-belt-probe-data=Dados da sonda do cinturão de asteróides +se-void-probe-data=Dados da Sonda do Vazio Interestelar +se-nano-engineering-data=Dados de nanoengenharia +se-annihilation-data=Dados de destruição +se-naquium-structural-data=Dados estruturais de Naquium +se-hyperlattice-data=Dados de hiper-rede +se-naquium-energy-data=Dados de energia de Naquium +se-space-fold-data=Dados de dobra espacial +se-space-warp-data=Dados de dobra espacial +se-space-dialation-data=Dados de dilatação da sala +se-space-injection-data=Dados de injeção de espaço +se-interstellar-data=Dados de viagem interestelar +se-teleportation-data=Dados de teletransporte +se-wormhole-data=Dados do buraco de minhoca +se-rhga-data=Dados de análise de hipergrafo de realidade +se-deep-catalogue-1=Catálogo espacial +se-deep-catalogue-2=Catálogo espacial amplo +se-deep-catalogue-3=Catálogo espacial abrangente +se-deep-catalogue-4=Catálogo espacial estendido +se-space-probe-rocket=Foguete de sonda espacial +se-space-probe-rocket-deployed=Foguete de sonda espacial (implantado) +se-railgun=Canhão elétrico +se-railgun-ammo=Munição de canhão elétrico + +[item-description] +satellite=Use satélites em silos de foguete de satélite. +se-satellite-telemetry=A telemetria de satélite registrada é necessária para a ciência de foguetes. Obtido iniciando um [img=item/satellite] Satélites de navegação de um silo de míssil de satélite (ou silo de míssil de sonda espacial). +se-antimatter-canister=A forma mais densa de energia armazenada em uma contenção. +se-astronomic-science-pack-1=Usado por laboratórios de pesquisa espacial para pesquisa. +se-astronomic-science-pack-2=Usado por laboratórios de pesquisa espacial para pesquisa. +se-astronomic-science-pack-3=Usado por laboratórios de pesquisa espacial para pesquisa. +se-astronomic-science-pack-4=Usado por laboratórios de pesquisa espacial para pesquisa. +se-beryllium-ore=Minério de berílio +se-biological-science-pack-1=Usado por laboratórios de pesquisa espacial para pesquisa. +se-biological-science-pack-2=Usado por laboratórios de pesquisa espacial para pesquisa. +se-biological-science-pack-3=Usado por laboratórios de pesquisa espacial para pesquisa. +se-biological-science-pack-4=Usado por laboratórios de pesquisa espacial para pesquisa. +se-canister=Um recipiente multiuso. +se-bloater-ammo=Forma uma poça de lama orgânica contagiosa no chão. Os inimigos infectados incham, dificultando o movimento e causando danos ao longo do tempo. Quando eles morrem inchados, eles estouram e suas tripas espirradas infligem danos aos inimigos próximos, causando potencialmente uma cascata. O dano total dos projéteis Gore é de 50% de seu HP máximo. +se-pheromone-ammo=Confunde um mordedor ou cuspidor do inimigo e o faz pensar que você é amigável e que seus companheiros são o inimigo. +se-cryogun=Crie uma parede de gelo para congelar os inimigos. +se-rocket-launch-pad-silo-dummy-ingredient-item=Fabricado com 100 componentes do foguete de carga e 1 cápsula espacial no silo do foguete de carga. +se-cargo-rocket-cargo-pod=Um componente do foguete de carga. +se-cargo-rocket-fuel-tank=Um componente do foguete de carga. +se-cargo-rocket-section=O principal componente do foguete de carga. Insira no silo de foguetes de carga. 100 são necessários por foguete. +se-cargo-rocket-section-packed=Componente de foguete de frete embalado para transporte. Deve ser desempacotado no foguete antes do uso. +se-deep-space-science-pack=Usado por laboratórios de pesquisa espacial para pesquisa. +se-energy-science-pack-1=Usado por laboratórios de pesquisa espacial para pesquisa. +se-energy-science-pack-2=Usado por laboratórios de pesquisa espacial para pesquisa. +se-energy-science-pack-3=Usado por laboratórios de pesquisa espacial para pesquisa. +se-energy-science-pack-4=Usado por laboratórios de pesquisa espacial para pesquisa. +se-heat-shielding=Um ladrilho composto para aplicações de alta temperatura e estruturas espaciais. +se-holmium-ore=Minério de hólmio +se-iridium-ore=Minério de irídio +se-material-science-pack-1=Usado por laboratórios de pesquisa espacial para pesquisa. +se-material-science-pack-2=Usado por laboratórios de pesquisa espacial para pesquisa. +se-material-science-pack-3=Usado por laboratórios de pesquisa espacial para pesquisa. +se-material-science-pack-4=Usado por laboratórios de pesquisa espacial para pesquisa. +se-medpack=Use para curar a si mesmo. +se-medpack-2=Use para curar a si mesmo. +se-medpack-3=Use para curar a si mesmo. +se-medpack-4=Use para curar a si mesmo. +se-meteor-defence=Pode proteger a superfície de um planeta inteiro de ataques de meteoros, mas só pode disparar um tiro. Deve estar armado com munição de defesa contra meteoros e totalmente carregado. Precisão de 80%. Deve recarregar após ser abatido. Requer 20 MW durante o carregamento. +se-meteor-defence-ammo=Destrói meteoritos. Deve ser carregado na instalação de defesa de meteoros. +se-meteor-point-defence=Protege uma área de quedas de meteoros. Pode disparar até 4 tiros. Deve estar equipado com munição de defesa de ponto de meteoro e totalmente carregada. Alcance 64, 50% de precisão, leva tempo para recarregar. +se-naquium-ore=Minério de Naquium. Só pode ser encontrado no espaço, um tesouro do vazio interestelar. +se-plague-bomb=Pode destruir todas as formas de vida em um planeta. Use com extremo cuidado. (Enquanto tudo está morrendo lentamente, o UPS pode ser comprometido. Não recomendado para planetas grandes ou multijogador.) +se-rtg-equipment=Gerador termoelétrico radioisotópico. Um gerador portátil que converte o calor da decomposição radoativa em eletricidade. A energia dura décadas, nenhum combustível adicional é necessário. +se-rtg-equipment-2=Gerador termoelétrico radioisotópico. Um gerador portátil aprimorado que converte o calor da decomposição radioativa em eletricidade. A energia dura décadas, nenhum combustível adicional é necessário. +se-space-capsule=Uma cápsula de controle é necessária para mísseis de carga. Pode ser usado para levar passageiros ao planeta mais próximo. Entrando na cápsula com __CONTROL__toggle-driving__. +se-space-platform-plating=Revestimento avançado para movimentação rápida na plataforma espacial. +se-space-platform-scaffold=Quadro básico para a plataforma espacial poder colocar estruturas adicionais. +se-space-rail=Trilhos para uso seguro no espaço que evitam que os trens voem e destruam tudo. Também pode ser usado na superfície por razões estéticas. +se-spaceship-floor=Este piso deve ser colocado sob todas as partes da nave e paredes. Buracos no chão quebram a integridade e podem levar à perda de peças da espaçonave. +se-superconductive-cable=Um cabo supercondutor que não requer resfriamento ativo. +se-tesla-gun=Arma de fogo rápido relâmpago de corrente. +se-thruster-suit=Um traje espacial necessário para sobreviver no espaço. \nPossui propulsores e sapatas magnéticas. +se-thruster-suit-2=Um traje espacial necessário para sobreviver no espaço. \nTem propulsores mais fortes, inventário maior e uma grade de equipamentos maior. +se-thruster-suit-3=Um traje espacial necessário para sobreviver no espaço. \nTem propulsores mais fortes, inventário maior e uma grade de equipamentos maior. +se-thruster-suit-4=Um traje espacial necessário para sobreviver no espaço. \nTem propulsores mais fortes, inventário maior e uma grade de equipamentos maior. +se-rocket-science-pack=Usado por laboratórios de pesquisa espacial para pesquisa. Deve ser feito no espaço. +space-science-pack=Usado em laboratórios de ciências espaciais. +se-wide-beacon=15 slots de módulo. Transfere os efeitos dos módulos para unidades amigas próximas dentro de 14 espaços. Se vários distribuidores de efeitos afetam o mesmo objeto, eles os sobrecarregam e os impedem de funcionar. +se-wide-beacon-2=20 slots de módulo. Transfere os efeitos dos módulos para unidades amigas próximas dentro de 14 espaços. Se vários distribuidores de efeitos afetam o mesmo objeto, eles os sobrecarregam e os impedem de funcionar. +se-lifesupport-equipment-1=Aumenta a eficiência do suporte de vida em + 100% (aditivo). Se instalado em um traje não espacial, o bônus de eficiência será reduzido pela metade e não funcionará no espaço. +se-lifesupport-equipment-2=Aumenta a eficiência do suporte de vida em + 200% (aditivo). Se instalado em um traje não espacial, o bônus de eficiência será reduzido pela metade e não funcionará no espaço. +se-lifesupport-equipment-3=Aumenta a eficiência do suporte de vida em + 400% (aditivo). Se instalado em um traje não espacial, o bônus de eficiência será reduzido pela metade e não funcionará no espaço. +se-lifesupport-equipment-4=Aumenta a eficiência do suporte de vida em + 800% (aditivo). Se instalado em um traje não espacial, o bônus de eficiência será reduzido pela metade e não funcionará no espaço. +se-arcosphere=Ganhou através da pesquisa da arkosfera resgatada através do InformaTron. +se-arcosphere-collector=Colete arcosferas do vazio interestelar. Deve ser lançado de um silo de mísseis de sonda espacial localizado em um campo de asteróides. Quanto mais são coletados, mais difíceis são de encontrar. +se-star-probe=Coleta dados de uma estrela e os traz [img=item/se-star-probe-data] Dados da sonda estelar de volta. Deve ser lançado de um silo de mísseis de sonda espacial localizado perto de uma estrela. +se-belt-probe=Coleta dados de um cinturão de asteróides e dá [img=item/se-belt-probe-data] Dados da sonda do cinturão de asteróides de volta. Deve ser lançado de um silo de mísseis de sonda espacial localizado em um cinturão de asteróides. +se-void-probe=Coleta dados do vazio e dá [img=item/se-void-probe-data] Dados da sonda de vazio interestelar de volta. Deve ser lançado de um silo de mísseis de sonda espacial localizado em um campo de asteróides. +se-interstellar-data=Fabricado em um Nexus em uma nave espacial em movimento. Quando você se move pelo espaço interestelar com uma nave maior e mais rápida, os dados são gerados com muito mais rapidez. +se-deep-catalogue-1=Naquium e nanotecnologia +se-deep-catalogue-2=Estruturas hiper-rede, singularidades e aniquilação. +se-deep-catalogue-3=Distorção Micro-Espacial e Nanoengenharia Extra-Dimensional. +se-deep-catalogue-4=Deformação do espaço macro e viagens dimensionais extras. +automation-science-pack=Usado em laboratórios de ciências normais. +chemical-science-pack=Usado em laboratórios de ciências normais. +logistic-science-pack=Usado em laboratórios de ciências normais. +military-science-pack=Usado em laboratórios de ciências normais. +production-science-pack=Usado em laboratórios de ciências normais. +se-meteor-point-defence-container=Destrói meteoritos. Deve ser carregado na defesa de meteoros. +utility-science-pack=Usado em laboratórios de ciências normais. +beacon=8 slots de módulo. Transfere os efeitos dos módulos para unidades amigas próximas dentro de 3 espaços. Se vários distribuidores de efeitos afetam o mesmo objeto, eles os sobrecarregam e os impedem de funcionar. +se-delivery-cannon=Permite a entrega precisa de recursos por meio de um canhão de entrega. +se-delivery-cannon-weapon=Permite o disparo preciso de munição especial de um canhão de arma + +[recipe-name] +core-fragment=Processamento de fragmento de núcleo (__1__) +rocket-fuel=Foguetes de combustível sólido +se-astrometric-analysis-multispectral-1=Análise Astrométrica Multiespectral 1 +se-astrometric-analysis-multispectral-2=Análise Astrométrica Multiespectral 2 +se-astrometric-analysis-multispectral-3=Análise Astrométrica Multiespectral 3 +se-astronomic-insight-1=Conhecimento Astronômico +se-astronomic-insight-2=Grande conhecimento astronômico +se-astronomic-insight-3=Conhecimento astronômico abrangente +se-astronomic-insight-4=Conhecimento astronômico avançado +se-biological-insight-1=Conhecimento biológico +se-biological-insight-2=Grande visão biológica +se-biological-insight-3=Conhecimento biológico abrangente +se-biological-insight-4=Conhecimento biológico avançado +se-bio-methane-to-crude-oil=Processamento de metano em petróleo bruto +se-bio-sludge-crude-oil=Bio-lodo de biomassa experimental +se-bio-sludge-decontamination=Descontaminação de bio lodo +se-bio-sludge-from-fish=Lama orgânica de peixe +se-bio-sludge-from-wood=Lama orgânica feita de madeira +se-bio-sludge-from-vitamelange=Lodo orgânico de Vitamelange +se-bio-sludge=Bio lodo de biomassa +se-broken-data-scrapping=Sucata de cartões de dados destruídos +se-cargo-rocket-section-pack=Embalagem de componentes de mísseis de carga +se-cargo-rocket-section-unpack=Desempacotando componentes do foguete de carga +se-condenser-turbine-reclaim-water=Geração de energia com recuperação de água. +se-core-fragment-omni=Processamento de fragmento de núcleo +se-core-mining=Mineração de minério de núcleo +se-empty-antimatter-canister=Fluxo de antimatéria do recipiente +se-empty-barrel-scrapping=Sucateamento de barris vazios +se-empty-barrel-reprocessing=Processamento de barris vazios +se-space-capsule-scrapping=Eliminação de cápsulas espaciais +se-cargo-pod-scrapping=Descarte de cápsulas de carga +se-energy-insight-1=Conhecimento de energia +se-energy-insight-2=Grande conhecimento de energia +se-energy-insight-3=Conhecimento abrangente de energia +se-energy-insight-4=Conhecimento ampliado de energia +se-formatting-1=Formatação de cartão de dados +se-formatting-2=Formatação de cartão de dados eficiente +se-formatting-3=Formatação avançada de cartão de dados +se-formatting-4=Formatação do cartão de dados do espaço +se-material-insight-1=Conhecimento de materiais +se-material-insight-2=Grande conhecimento de materiais +se-material-insight-3=Conhecimento abrangente de materiais +se-material-insight-4=Conhecimento alargado de materiais +se-matter-fusion-copper=Material de fusão (cobre) +se-matter-fusion-dirty=Material de fusão (sucata) +se-matter-fusion-iron=Material de fusão (ferro) +se-matter-fusion-stone=Material de fusão (pedra) +se-matter-fusion-uranium=Material de fusão (urânio) +se-matter-fusion-to=Fusão de matéria (__1__) +se-orbital-data=Dados de cálculo orbital +se-plasma-canister-empty=Recipiente de plasma vazio +se-pulverised-sand=Areia em pó +se-radiating-space-coolant-fast=Resfriamento rápido do fluido térmico a -10 ° C (frio) +se-radiating-space-coolant-normal=Resfrie o fluido térmico a -10 ° C (resfrie) +se-radiating-space-coolant-slow=Resfrie lentamente o fluido térmico até -10 ° C (resfrie) +se-mixed-methane-gas-separation=Separação de metano +se-rocket-fuel-from-water-copper=Combustível de foguete feito de água +se-scrap-decontamination=Descontaminação de sucata +se-scrap-recycling=Reciclagem de sucata +se-space-coolant-cold=Superarrefecimento do fluido térmico a -100 ° C (frio) +se-space-coolant-supercooled=Super-resfriamento do fluido térmico a -273 ° C (superfrio) +se-space-coolant-supercooled-cryonite=Resfriamento por fluido térmico a -273 ° C (superfrio) +se-space-coolant-cold-cryonite=Resfriamento por fluido térmico a -100 ° C (frio) +se-space-coolant-supercoole-cryonite=Resfriamento por fluido térmico a -273 ° C (superfrio) +se-simulation-a=Simulação Astronômica +se-simulation-ab=Simulação de Panspermia +se-simulation-abm=Simulação de xenoprogressão +se-simulation-am=Simulação de distribuição de matéria +se-simulation-as=Simulação de astropartículas +se-simulation-asb=Simulação astrobionica +se-simulation-asbm=Simulação universal +se-simulation-asm=Simulação Astrofísica +se-simulation-b=Simulação biológica +se-simulation-bm=Simulação biomecânica +se-simulation-m=Simulação de material +se-simulation-s=Simulação de energia +se-simulation-sb=Simulação bioquímica +se-simulation-sbm=Simulação de Nanite +se-simulation-sm=Simulação de nanomateriais +se-space-water-decontamination=Descontamine a água cósmica +se-spaceship-rocket-engine-burn=Queima de combustível líquido de foguete +se-specimen-fish=Piscicultura de baixa gravidade +se-specimen-wood=Arboricultura de baixa gravidade +se-thermodynamics-coal=Cozimento de pressão para carvão +se-used-lifesupport-canister-cleaning=Limpar tanques de suporte de vida +se-used-lifesupport-canister-cleaning-space=Descontaminação de recipientes de suporte de vida +space-science-pack=Pacote de ciência para otimização +se-rocket-science-pack=Pacote de ciência para foguetes +se-big-turbine-internal=Descompressão de vapor de alta temperatura +se-arcosphere-fracture=Polarização da Arcosfera +se-arcosphere-fold-in=Inversão da arcosfera +se-arcosphere-fold-out=Inversão da arcosfera +se-arcosphere-folding=Dobramento de arcosfera: +se-electric-boiling-void=Ventilação evaporativa +se-space-probe-rocket-deployed=Foguete de sonda espacial (implantado) +se-distortion-drive=Impulso de distorção +se-generic-scrapping=__1__ demolição +se-generic-recycling=__1__ reciclando + +[recipe-description] +se-astronomic-insight-2=Mais complicado, mas mais eficiente em termos de recursos. +se-astronomic-insight-3=Mais complicado, mas mais eficiente em termos de recursos. +se-astronomic-insight-4=Mais complicado, mas mais eficiente em termos de recursos. +se-biological-insight-2=Mais complicado, mas mais eficiente em termos de recursos. +se-biological-insight-3=Mais complicado, mas mais eficiente em termos de recursos. +se-biological-insight-4=Mais complicado, mas mais eficiente em termos de recursos. +se-core-mining=O fragmento real extraído depende do planeta. O tempo real de mineração depende do número de mineradores de minério de núcleo no planeta ou lua. +se-energy-insight-2=Mais complicado, mas mais eficiente em termos de recursos. +se-energy-insight-3=Mais complicado, mas mais eficiente em termos de recursos. +se-energy-insight-4=Mais complicado, mas mais eficiente em termos de recursos. +se-material-insight-2=Mais complicado, mas mais eficiente em termos de recursos. +se-material-insight-3=Mais complicado, mas mais eficiente em termos de recursos. +se-material-insight-4=Mais complicado, mas mais eficiente em termos de recursos. +se-radiating-space-coolant-fast=O resfriamento e aquecimento repetidos do fluido térmico levam à degradação, o resfriamento mais rápido leva a perdas aumentadas. +se-radiating-space-coolant-normal=O resfriamento e aquecimento repetidos do fluido térmico levam a perdas. +se-radiating-space-coolant-slow=O resfriamento e aquecimento repetidos do fluido térmico levam a perdas, o resfriamento mais lento leva a perdas menores. +se-arcosphere-fracture=As arcosferas podem ser usadas com um [img=item/se-arcosphere-collector] Coletores de Arcosfera são coletados. +se-distortion-drive=Este processo deve ser realizado ativamente para ativar a habilidade Nexus Distortion e ganhar o jogo. Consome 8 GW em velocidade crítica. +se-delivery-cannon-weapon-pack-se-iridium-piledriver=Enorme dano físico em um espaço pequeno, dano de explosão secundária em uma onda de choque. + +[technology-name] +effectivity-module-4=Módulo de eficiência 4 +effectivity-module-5=Módulo de eficiência 5 +effectivity-module-6=Módulo de eficiência 6 +effectivity-module-7=Módulo de eficiência 7 +effectivity-module-8=Módulo de eficiência 8 +effectivity-module-9=Módulo de eficiência 9 +energy-shield-equipment=Escudo de energia +energy-shield-mk2-equipment=Escudo de energia Nível 2 +energy-shield-mk3-equipment=Escudo de energia Nível 3 +energy-shield-mk4-equipment=Escudo de energia Nível 4 +energy-shield-mk5-equipment=Escudo de energia Nível 5 +energy-shield-mk6-equipment=Escudo de energia Nível 6 +sand-processing=Processamento de areia +glass-processing=Processamento de vidro +liquid-rocket-fuel=Combustível líquido de foguete +productivity-module-4=Módulo de produtividade 4 +productivity-module-5=Módulo de produtividade 5 +productivity-module-6=Módulo de produtividade 6 +productivity-module-7=Módulo de produtividade 7 +productivity-module-8=Módulo de produtividade 8 +productivity-module-9=Módulo de produtividade 9 +rocket-silo=Silo de míssil satélite +rocketry=Kampf-Tecnologia de mísseis +se-adaptive-armour=Armadura adaptativa +se-antimatter-engine=Propulsão de antimatéria +se-antimatter-reactor=Reator de Antimatéria +se-antimatter-production=Produção de antimatéria +se-astronomic-science-pack=Pacote de ciência para astronomia +se-biological-science-pack=Pacote de ciência para biologia +se-condenser-turbine=Turbina condensadora +se-core-miner=Mineração de minério de núcleo +se-biogun=Bio canhão +se-cryogun=Criocanhão +se-deep-space-science-pack=Pacote de ciência para exploração espacial +se-deep-catalogue=Catálogo de espaço +se-dimensional-anchor=Âncora dimensional +se-electric-boiler=Caldeira eletrica +se-energy-science-pack=Pacote de ciência para energia +se-fluid-burner-generator=Gerador de calor líquido +se-fuel-refining=Refino de combustível +se-heat-shielding=Escudo térmico +se-ion-engine=Propulsão iônica +se-long-range-star-mapping=Mapeamento estelar de longo alcance +se-material-science-pack=Pacote de ciência para material +se-medpack=Pacote médico +se-medpack-2=Pacote médico 2 +se-medpack-3=Pacote médico 3 +se-medpack-4=Pacote médico 4 +se-meteor-defence=Defesas de meteoritos +se-meteor-point-defence=Defesa de ponto de meteorito +se-nanomaterial=Nanomaterial +se-plague=A praga +se-processing-beryllium=Processamento de berílio +se-processing-cryonite=Processamento de crionita +se-processing-holmium=Processamento de hólmio +se-processing-iridium=Processamento de Iridium +se-processing-naquium=Processamento de Naquium +se-processing-vitamelange=Processamento Vitamelange +se-processing-vulcanite=Processamento de Vulcanite +se-pulveriser=Pulverizador +se-railgun=Canhão elétrico +se-rocket-cargo-safety=Segurança de mísseis de carga +se-rocket-fuel-from-water=Combustível sólido de foguete feito de água +se-rocket-launch-pad=Silo de foguete de carga +se-rocket-landing-pad=Plataforma de pouso de carga +se-rocket-reusability=Reutilização de mísseis +se-rocket-survivability=Chances de sobrevivência do foguete +se-rtg-equipment=RTG portátil +se-rtg-equipment-2=RTG portátil Nível 2 +se-space-assembling=Montagem do espaço +se-space-accumulator=Acumulador de hólmio +se-space-accumulator-2=Acumulador de Naquium +se-space-astrometrics-laboratory=Laboratório de astrometria +se-space-biochemical-laboratory=Laboratório de bioquímica +se-space-catalogue-astronomic=Catálogo de Astronomia +se-space-catalogue-biological=Catálogo de biologia +se-space-catalogue-universal=Catálogo universal +se-space-catalogue-energy=Catálogo de energia +se-space-catalogue-material=Catálogo de materiais +se-space-data-card=Cartão de dados +se-space-decontamination-facility=Sistema de descontaminação +se-space-electromagnetics-laboratory=Laboratório de Eletromagnetismo +se-space-genetics-laboratory=Laboratório de genética +se-space-gravimetrics-laboratory=Laboratório de gravimetria +se-space-growth-facility=Instalação de criação +se-space-hypercooling=Hiperesfriamento +se-space-laser-laboratory=Laboratório de laser +se-lifesupport-facility=Instalação de suporte de vida +se-space-manufactory=Fábrica espacial +se-space-material-fabricator=Fabricante de material +se-space-matter-fusion=Fusão de matéria +se-space-mechanical-laboratory=Laboratório de mecânica +se-space-particle-accelerator=Acelerador de partículas +se-space-particle-collider=Colisor de partículas +se-space-plasma-generator=Gerador de plasma +se-space-platform-plating=Revestimento de plataforma espacial +se-space-platform-scaffold=Andaimes de plataforma espacial +se-space-radiation-laboratory=Laboratório de radiação +se-space-radiating-efficiency=Eficiência de radiação térmica +se-space-radiating-speed=Velocidade de radiação térmica +se-space-radiator=Refrigerador térmico +se-space-radiator-2=Resfriador térmico 2 +se-space-rail=Trem espacial +se-recycling-facility=Usina de reciclagem +se-space-science-lab=Laboratório de ciências espaciais +se-space-simulation-ab=Simulação de Panspermia +se-space-simulation-am=Simulação de material astrológico +se-space-simulation-as=Simulação de astropartículas +se-space-simulation-bm=Simulação biomecânica +se-space-simulation-sb=Simulação bioquímica +se-space-simulation-sm=Simulação de nanomateriais +se-space-simulation-abm=Simulação de xenoprogressão +se-space-simulation-asb=Simulação astrobionica +se-space-simulation-asm=Simulação Astrofísica +se-space-simulation-sbm=Simulação de Nanite +se-space-simulation-asbm=Simulação universal +se-space-solar-panel=Painel solar do espaço +se-space-spectrometry-facility=Sistema de espectrometria +se-space-supercomputer=Supercomputadores +se-space-telescope=Telescópio +se-space-telescope-gammaray=Telescópio de raios gama +se-space-telescope-xray=Telescópio de raio x +se-space-telescope-microwave=Telescópio de microondas +se-space-telescope-radio=Telescópio de ondas de rádio +se-space-thermodynamics-laboratory=Laboratório de termodinâmica +se-spaceship=Nave espacial +se-spaceship-integrity=Integridade estrutural da nave espacial +se-factory-spaceship=Fábrica de nave espacial +se-superconductive-cable=Cabo supercondutor +se-teleportation=Teletransporte +se-tesla-gun=Rifle tesla +se-thruster-suit=Traje espacial +space-science-pack=Pacote de ciência para otimização +se-rocket-science-pack=Pacote de ciência para foguetes +speed-module-4=Módulo de velocidade 4 +speed-module-5=Módulo de velocidade 5 +speed-module-6=Módulo de velocidade 6 +speed-module-7=Módulo de velocidade 7 +speed-module-8=Módulo de velocidade 8 +speed-module-9=Módulo de velocidade 9 +se-aeroframe-pole=Pólo aeroframe +se-aeroframe-scaffold=Estrutura do Aeroframe +se-aeroframe-bulkhead=Antepara do Aeroframe +se-lattice-pressure-vessel=Vaso de pressão de grade +se-heavy-girder=Transportadora pesada +se-heavy-bearing=Acampamento pesado +se-heavy-composite=Composto pesado +se-heavy-assembly=Montagem pesada +se-bioscrubber=Bio-lavadora +se-vitalic-epoxy=Epóxi vital +se-vitalic-reagent=Reagente vital +se-vitalic-acid=Ácido vital +se-self-sealing-gel=Gel autovedante +se-holmium-cable=Cabo de hólmio +se-holmium-solenoid=Solenóide de hólmio (bobina) +se-quantum-processor=Processador quântico +se-dynamic-emitter=Radiador dinâmico +se-naquium-processor=Processador Naquium +se-naquium-cube=Cubos de Naquium +se-naquium-tessaract=Tesserato de Naquium +se-wide-beacon=Distribuidor de efeito de grande área +se-wide-beacon-2=Distribuidor de efeito de grande área +se-lifesupport-equipment=Equipamento de suporte de vida +se-lifesupport-equipment-1=Equipamento de suporte de vida Nível 1 +se-lifesupport-equipment-2=Equipamento de suporte de vida Nível 2 +se-lifesupport-equipment-3=Equipamento de suporte de vida Nível 3 +se-lifesupport-equipment-4=Equipamento de suporte de vida Nível 4 +se-supercharger=Supercarga +se-addon-power-pole=Poste de força adicional +se-pylon=Pilar +se-pylon-substation=Pilar de Subestação +se-pylon-construction=Pilar de construção +se-pylon-construction-radar=Pilar de construção de radar +se-shield-projector=Projetor escudo +se-deep-space-transport-belt=Correia transportadora espacial +se-big-turbine=Gerador de turbina de alta temperatura +se-big-heat-exchanger=Trocador de calor de alta temperatura +se-zone-discovery-random=Descoberta de zona +se-zone-discovery-targeted=Reconhecimento de zona alvo +se-zone-discovery-deep=Descoberta de zona espacial +se-delivery-cannon=Canhão de entrega +se-delivery-cannon-capsule-iridium=Cápsula de canhão de entrega de irídio +se-delivery-cannon-weapon=Canhão de entrega de armas +se-spaceship-clamps=Grampos de encaixe para naves espaciais +se-bio-upgrade-constitution=Atualização biológica: constituição +se-bio-upgrade-strength=Atualização biológica: força +se-bio-upgrade-agility=Atualização biológica: mobilidade +se-bio-upgrade-dexterity=Atualização biológica: habilidade +se-bio-upgrade-intelligence=Atualização biológica: inteligência +se-energy-beaming=Feixe de energia +se-energy-beam-defence=Der Schirm: Sistema de defesa do feixe de energia +se-nexus=Nexus +se-spaceship-victory=Vitória da nave espacial +se-arcosphere=Coleção de arcosfera +se-arcosphere-folding=Dobramento de arcosfera +se-space-probe=Silo de foguete de sonda espacial +se-linked-container=Armazenamento Arcolink +k2-conversion=__1__ conversão + +[technology-description] +energy-shield-equipment=Uma capa protetora que carrega rapidamente, mas usa muita energia. +energy-shield-mk2-equipment=Uma capa protetora que carrega rapidamente, mas usa muita energia. +energy-shield-mk3-equipment=Uma capa protetora que carrega rapidamente, mas usa muita energia. +energy-shield-mk4-equipment=Uma capa protetora que carrega rapidamente, mas usa muita energia. +energy-shield-mk5-equipment=Uma capa protetora que carrega rapidamente, mas usa muita energia. +energy-shield-mk6-equipment=Uma capa protetora que carrega rapidamente, mas usa muita energia. +sand-processing=Esmague, triture e filtre a matéria-prima até torná-la areia limpa. +glass-processing=Derreta areia em vidro. +rocket-silo=Permite o lançamento de satélites ao espaço para desenvolver pesquisas espaciais e descobrir corpos celestes. +se-adaptive-armour=Armadura que usa energia para se reparar. Desempenha uma função semelhante ao escudo de energia com menos necessidade de energia, mas regeneração mais lenta. +se-antimatter-engine=Destrói a antimatéria para um impulso incrível. +se-antimatter-reactor=Destrói a antimatéria com matéria para gerar grande calor. +se-antimatter-production=Crie a antimatéria, a forma mais densa de energia armazenada. +se-astronomic-science-pack=Permite pesquisas em viagens espaciais e tecnologias de logística interestelar. +se-biological-science-pack=Permite a pesquisa em tecnologias para melhorar suas capacidades físicas, armas biológicas e processamento neural. +se-condenser-turbine=Tem 75% da eficiência energética de uma turbina a vapor, mas 99% do vapor é devolvido como água. +se-core-miner=Permite a extração infinita de recursos do núcleo do planeta ou da lua, mas tem retornos decrescentes quando vários são usados ​​na mesma superfície. +se-biogun=Uma arma de fogo que pode usar várias armas biológicas. +se-cryogun=Crie uma parede de gelo para congelar os inimigos. +se-deep-space-science-pack=Obrigatório para as tecnologias mais avançadas. +se-deep-catalogue=Distorção do espaço, matéria exótica e dados de nanoengenharia destinados à análise e simulação de computador. Obrigatório para as tecnologias mais avançadas. +se-dimensional-anchor=Nutzt die Schwerkraft eines Sterns als Stabilisierungspunkt für eine räumliche Anomalie. +se-electric-boiler=Converte água em vapor com a ajuda de energia elétrica. +se-energy-science-pack=Permite a pesquisa em forças fundamentais e tecnologias de descoberta subatômica +se-fluid-burner-generator=Requer combustível líquido com um valor energético (como combustível de foguete líquido) para produzir eletricidade. Simples e compacto, mas ineficiente em termos de energia em comparação com turbinas a vapor. Desenvolvido para o espaço. +se-fuel-refining=Combustíveis habilmente avançados. +se-heat-shielding=Um ladrilho composto para aplicações de alta temperatura e estruturas espaciais. +se-ion-engine=Usa um pouco de corrente de íons e uma grande quantidade de energia para empuxo +se-long-range-star-mapping=Algumas galáxias distantes podem ser identificadas por padrões específicos de estrelas incomuns. Os resultados estão em [img=virtual-signal/informatron] InformaTron [__CONTROL__informatron__] registrado. +se-material-science-pack=Permite a pesquisa em tecnologias para materiais avançados para requisitos técnicos avançados. +se-medpack=Use o pacote médico para se curar. +se-medpack-2=Use o pacote médico para se curar. +se-medpack-3=Use o pacote médico para se curar. +se-medpack-4=Use o pacote médico para se curar. +se-meteor-defence=Atire meteoros do céu antes que destruam as coisas. Um sistema de defesa de meteoritos protege a superfície de um planeta inteiro dos impactos de meteoros, mas só pode disparar um tiro. +se-meteor-point-defence=Atire meteoros do céu antes que destruam as coisas. Um sistema de defesa de ponto de meteorito protege uma pequena área de até 4 meteoros ao mesmo tempo. +se-nanomaterial=Um complicado arranjo de diferentes materiais organizados em nanoescala para criar um composto com propriedades superiores. +se-plague=A grande praga que destrói toda a vida em um planeta. Use com extremo cuidado. +se-processing-beryllium=O berilo se torna berílio, um metal extremamente leve, forte, resistente à corrosão e à radiação. Ele também quase não tem interação com os raios-X. +se-processing-cryonite=Processamento de cristais de crionita congelados em hastes de crionita que têm aplicações em congelamento, refrigeração e lubrificação. A crionita é encontrada principalmente em planetas congelados. +se-processing-holmium=Transforma a holminita em hólmio, um metal de terras raras com a maior permeabilidade magnética de todos os elementos. +se-processing-iridium=Conversão de iridita em irídio, o metal mais resistente à corrosão e o elemento mais denso em altas temperaturas. Importante para aplicações pesadas. +se-processing-naquium=Transforma o misterioso cristal de naquitite espacial em naquium, um material semelhante a metal com interações espaço-temporais incomuns. +se-processing-vitamelange=Transforma a primitiva esponja de rocha Vitamelange em um valioso extrato nutritivo. +se-processing-vulcanite=Conversão do cristal vulcânico vulcânico em um pó refinado que é usado em fusão avançada, combustível de foguete e outros processos químicos de alta temperatura. Vulcanita ocorre em planetas vulcânicos e na maioria dos fragmentos do núcleo. +se-pulveriser=Minerais mais duros em pó e triturados e fragmentos do núcleo do planeta. +se-railgun=Projéteis com aceleração eletromagnética e impulsionados em alta velocidade, deixando um rastro de plasma antes de vaporizarem. Danos altos, baixa taxa de fogo. +se-rocket-cargo-safety=Reduz o risco de cápsulas de carga serem danificadas em trânsito em 10% (multiplicativo) +se-rocket-fuel-from-water=Gera combustível de foguete oxigênio-hidrogênio a partir da água por meio da eletrólise. +se-rocket-launch-pad=Permite que a carga seja lançada ao espaço ou a outros corpos celestes. +se-rocket-landing-pad=Permite a entrega de cápsulas de foguete de carga a um ponto de entrega de carga nomeado. Com mais pesquisas, mais componentes de mísseis podem ser salvos. +se-rocket-reusability=Aumenta em 4% a porcentagem de peças que podem ser resgatadas em um pouso bem-sucedido. +se-rocket-survivability=Reduz o risco de mísseis em trânsito apresentarem erros de navegação e perderem o ponto de entrega da carga em 10% (multiplicativo). +se-rtg-equipment=Gerador termoelétrico radioisotópico. Um gerador portátil que converte o calor da decomposição radioativa em eletricidade. A energia dura décadas, nenhum combustível adicional é necessário. +se-rtg-equipment-2=Gerador termoelétrico radioisotópico. Um gerador portátil aprimorado que converte o calor da decomposição radioativa em eletricidade. A energia dura décadas, nenhum combustível adicional é necessário. +se-space-assembling=Eine modifizierte Montagemaschine die auch im Weltraum funktioniert. +se-space-accumulator=Edifícios que armazenam grande quantidade de energia elétrica excedente para uso posterior. +se-space-accumulator-2=Edifícios que armazenam grandes quantidades de energia elétrica excedente para uso posterior. +se-space-astrometrics-laboratory=Conecta, compara e quantifica diferentes fontes de informações astronômicas. +se-space-biochemical-laboratory=Um laboratório químico avançado especializado em bioquímica. Também pode fazer processos químicos simples e processamento de óleo. +se-space-catalogue-astronomic=Dados astronômicos estruturados preparados para análise e simulação computacional. Necessário para futuras pesquisas astronômicas. +se-space-catalogue-biological=Dados biológicos estruturados preparados para análise e simulação computacional. Necessário para futuras pesquisas biológicas. +se-space-catalogue-universal=Dados combinados para análise e simulação computacional. Necessário para maior exploração espacial. +se-space-catalogue-energy=Dados energéticos estruturados, preparados para análise e simulação computacional. Requerido para futuras pesquisas energéticas. +se-space-catalogue-material=Dados de materiais estruturados, preparados para análise e simulação computacional. Necessário para pesquisas adicionais de material. +se-space-data-card=Um cartão de armazenamento de dados de uso geral, necessário para pesquisas mais avançadas baseadas em dados. +se-space-decontamination-facility=Limpa substâncias para uso em ambientes estéreis e processa líquidos para uso em condições de baixa pressão. +se-space-electromagnetics-laboratory=Sistema para enormes campos magnéticos e aplicações de alta tensão extrema. +se-space-genetics-laboratory=Um laboratório de sequenciamento genético, modificação e impressão de culturas orgânicas. +se-space-gravimetrics-laboratory=Analisa e simula distúrbios na gravidade. +se-space-growth-facility=Cultive amostras biológicas sob condições controladas que não podem ser encontradas em nenhum outro lugar, como baixa gravidade. +se-space-hypercooling=Realiza uma troca de temperatura no fluido térmico, na qual torna parte mais quente e parte mais fria. +se-space-laser-laboratory=Experimentos a laser. Proteção para os olhos fortemente recomendada. +se-lifesupport-facility=Manter a vida em ambientes mais hostis. +se-space-manufactory=Uma tecnologia chave para a produção em massa no espaço. +se-space-material-fabricator=Sintetiza novos materiais. Um cruzamento entre um acelerador de partículas e uma impressora 3D. +se-space-matter-fusion=Fabricação de materiais por fusão. +se-space-mechanical-laboratory=Oferece uma gama de processos mecânicos: trituração, rasgo, cisalhamento, vibração, etc. +se-space-particle-accelerator=Acelera as partículas para perto da velocidade da luz. +se-space-particle-collider=Faz as partículas colidirem e analisa os resultados. +se-space-plasma-generator=Gera diferentes correntes de plasma. +se-space-platform-plating=Revestimento robusto de plataforma espacial. Apenas e para uma caminhada rápida no espaço. +se-space-platform-scaffold=Quadro básico para a plataforma espacial. Algo para construir, mas não adequado para caminhadas no espaço. +se-space-radiation-laboratory=Um local relativamente seguro para trabalhar com material radioativo. Pode ser usado para processamento de urânio. +se-space-radiating-efficiency=Resfriamento lento, mas com economia de recursos de fluido térmico superaquecido. +se-space-radiating-speed=Resfriamento mais rápido, porém mais econômico de fluido térmico superaquecido. +se-space-radiator=Dissipa o excesso de calor do fluido térmico superaquecido. +se-space-radiator-2=Dissipa o excesso de calor do fluido térmico superaquecido. +se-space-rail=Trilhos para uso seguro no espaço que evitam que os trens voem e destruam tudo. Também pode ser usado na superfície por razões estéticas. +se-recycling-facility=Sucata de objetos e reciclagem de sucata em matéria-prima. +se-space-science-lab=Permite o processamento de pesquisas espaciais e pesquisas espaciais mais avançadas. +se-space-simulation-ab=Simulação mais eficiente combinando várias disciplinas. +se-space-simulation-am=Simulação mais eficiente combinando várias disciplinas. +se-space-simulation-as=Simulação mais eficiente combinando várias disciplinas. +se-space-simulation-bm=Simulação mais eficiente combinando várias disciplinas. +se-space-simulation-sb=Simulação mais eficiente combinando várias disciplinas. +se-space-simulation-sm=Simulação mais eficiente combinando várias disciplinas. +se-space-simulation-abm=Simulação mais eficiente combinando várias disciplinas. +se-space-simulation-asb=Simulação mais eficiente combinando várias disciplinas. +se-space-simulation-asm=Simulação mais eficiente combinando várias disciplinas. +se-space-simulation-sbm=Simulação mais eficiente combinando várias disciplinas. +se-space-simulation-asbm=Simulação mais eficiente combinando várias disciplinas. +se-space-solar-panel=Um painel solar altamente eficiente para o espaço. +se-space-spectrometry-facility=Espectrofotometria, cromatografia gasosa, espectrometria de massa e outra espectrometria. Atire coisas contra a parede, dobre-as, quebre-as e veja onde elas atingem. +se-space-supercomputer=Permite manipulação, processamento e simulação de dados avançados. +se-space-telescope=Um telescópio sofisticado para muitos comprimentos de onda ao redor do espectro visível. +se-space-telescope-gammaray=Os raios gama não podem ser desviados. Em vez disso, este poderoso telescópio usa detectores especiais. +se-space-telescope-xray=Os raios X são bloqueados pela maioria das atmosferas. Este poderoso telescópio foi desenvolvido para o espaço onde a atmosfera não desempenha um papel. +se-space-telescope-microwave=Um telescópio gigante que pode medir microondas e radiação cósmica de fundo. +se-space-telescope-radio=Um telescópio gigante que pode medir ondas de rádio muito fracas de fontes distantes. +se-space-thermodynamics-laboratory=Suporta aplicações de temperaturas extremas. Também pode realizar operações simples, como derreter. +se-spaceship=Uma nave que é construída peça por peça do chão e das paredes, use o console para voar para outro planeta ou além. +se-spaceship-integrity=Cada nível aumenta o limite máximo de estresse de integridade estrutural da nave em 100. +se-factory-spaceship=Cada nível aumenta o limite máximo de estresse de integridade estrutural da nave em 500. +se-superconductive-cable=Um cabo supercondutor que não requer resfriamento ativo. +se-teleportation=Desbloqueia mais tecnologia de teletransporte. Acontece que entortar o espaço com segurança até esse ponto é realmente difícil. +se-tesla-gun=Arma de fogo rápido relâmpago de corrente. Pode atingir até 30 inimigos por raio. Pode dar saltos longos entre oponentes ou curtos no solo quando não há oponentes. +se-thruster-suit=Um traje espacial com propulsores e sapatos magnéticos. Não vá para o espaço sem ele. +space-science-pack=Permite a criação de pacotes de ciência e tecnologia espaciais que se beneficiam dessa pesquisa. +se-rocket-science-pack=Permite a pesquisa em tecnologias para processamento de recursos exóticos e para a produção de variantes espaciais de estruturas baseadas no solo. +se-aeroframe-pole=Uma barra de berílio forte e leve, frequentemente usada como uma viga de suporte para a exploração aérea e espacial. +se-aeroframe-scaffold=Uma estrutura estrutural de berílio leve e forte, comumente usada como o esqueleto interno principal para navios aeroespaciais. +se-aeroframe-bulkhead=Uma parede de berílio forte, leve e hermética usada como revestimento externo ou paredes da câmara secundária de naves de exploração do ar e do espaço. +se-lattice-pressure-vessel=Um vaso de pressão de berílio forte e leve com uma malha interna que permite que certos fluidos sejam comprimidos além de seus limites normais. Em caso de interrupção, o líquido pressurizado é ventilado com segurança. +se-heavy-girder=Uma viga estrutural pesada de irídio usada principalmente para a indústria pesada e navios militares pesados. +se-heavy-bearing=Um grande e pesado mancal de irídio que pode funcionar indefinidamente com forças que esmagariam materiais mais fracos. +se-heavy-composite=Uma antepara grossa, quase impenetrável, praticamente imune ao calor, corrosão, radiação e força mecânica, mas incrivelmente pesada. +se-heavy-assembly=Um conjunto mecânico pesado de engrenagens e componentes configuráveis ​​usados ​​na indústria pesada. +se-bioscrubber=Uma câmara de processamento de materiais que usa processos biológicos para quebrar materiais indesejados. +se-vitalic-epoxy=Um epóxi de bio-fonte incrivelmente forte com propriedades regenerativas. +se-vitalic-reagent=Um reagente eficiente e de uso geral para uma ampla variedade de reações químicas. +se-vitalic-acid=Um coquetel forte feito de diferentes ácidos. +se-self-sealing-gel=Um gel viscoso sob pressão, mas sólido como aço no vácuo. Freqüentemente usado como um filme interno em anteparos para vedar orifícios passivamente. +se-holmium-cable=Um cabo revestido especialmente projetado para eliminar ruídos indesejados na linha que podem interferir em componentes eletrônicos sensíveis. +se-holmium-solenoid=Um eletroímã extremamente poderoso. +se-quantum-processor=Usa superposição e emaranhamento para trabalhar em problemas altamente complexos com mais eficiência. +se-dynamic-emitter=Um sistema emissor de luz ou partículas rapidamente ajustável que pode alterar uma série de propriedades para maior alcance, modos de varredura ou propriedades de penetração do material. +se-naquium-processor=A computação dentro de um Naquium Tesseract contorna algumas das limitações de densidade computacional usuais. +se-naquium-cube=Aproveitando a interação incomum de Naquium com o espaço-tempo para dobrar um grande volume em um pequeno cubo. +se-naquium-tessaract=Um objeto peculiar que se ajusta em uma forma semelhante a um cubo, mas muda para uma série de outras formas geométricas quando girado ou acelerado. +se-wide-beacon=O grande distribuidor de efeitos de área transfere os efeitos dos módulos para unidades amigas próximas dentro de 14 campos. Possui 15 slots de módulo ou 20 se for atualizado. Se vários distribuidores de efeitos afetam o mesmo objeto, eles os sobrecarregam e os impedem de funcionar. +se-wide-beacon-2=O distribuidor de efeito de grande área 2 transmite os efeitos dos módulos para unidades amigas próximas dentro de 14 campos. Possui 20 slots de módulo. Se vários distribuidores de efeitos afetam o mesmo objeto, eles os sobrecarregam e os impedem de funcionar. +se-lifesupport-equipment-1=Aumenta a eficiência de sustentação da vida em + 100% (aditivo). Se instalado em um traje não espacial, o bônus de eficiência é reduzido pela metade e também não funciona no espaço. +se-lifesupport-equipment-2=Aumenta a eficiência de sustentação da vida em + 200% (aditivo). Se instalado em um traje não espacial, o bônus de eficiência é reduzido pela metade e também não funciona no espaço. +se-lifesupport-equipment-3=Aumenta a eficiência de sustentação da vida em + 400% (aditivo). Se instalado em um traje não espacial, o bônus de eficiência é reduzido pela metade e também não funciona no espaço. +se-lifesupport-equipment-4=Aumenta a eficiência de sustentação da vida em + 800% (aditivo). Se instalado em um traje não espacial, o bônus de eficiência é reduzido pela metade e também não funciona no espaço. +se-supercharger=Pode carregar até 64 robôs ao mesmo tempo em alta velocidade. O consumo máximo de energia da estrutura é de 1 GW. +se-addon-power-pole=Um pequeno poste de energia destinado a ser acoplado a edifícios ou para controle preciso da cobertura elétrica. +se-pylon=Distribui energia elétrica. Faixa de conexão de 64 telhas. +se-pylon-substation=Distribui energia elétrica. Área de conexão de 64 tiles, área de fornecimento de energia de 64x64 +se-pylon-construction=Distribui energia elétrica e amplia a área de construção. Área de conexão de 64 telhas, área de construção de 64x64. +se-pylon-construction-radar=Distribui energia elétrica, amplia a área de construção e proporciona visibilidade de radar. Área de conexão de 64 telhas, área de construção e visualização 256x256. Área de logística 4x4. +se-shield-projector=Cria um campo de força de proteção. Quando o projetor está carregado ou a blindagem está danificada, mais energia é necessária. Pode bloquear projéteis inimigos quando o modo Combat Mechanics Overhaul está instalado. +se-deep-space-transport-belt=Correias transportadoras rápidas de longa distância que podem ser colocadas no espaço. Podem ser usadas cores diferentes para tornar as linhas mais fáceis de ver à distância. +se-big-turbine=Um grande gerador de 1 GW que extrai vapor de 5000 ° C, emite vapor de 500 ° C na outra extremidade e emite água nas laterais. 99% de eficiência energética, 99% de economia de água. +se-big-heat-exchanger=Um grande trocador de calor projetado para alta temperatura e alta capacidade. +se-zone-discovery-random=Use telescópios para pesquisar planetas, luas e cinturões de asteróides. +se-zone-discovery-targeted=Procure planetas, luas e cinturões de asteróides que tenham certos recursos. Escolha a preferência de recurso em [img=virtual-signal/informatron] InformaTron > Detecção de zona. +se-zone-discovery-deep=Procure áreas de interesse no espaço interestelar profundo. Os campos de asteróides podem conter muitos recursos exclusivos e valiosos. +se-delivery-cannon=Um canhão elétrico que pode disparar recursos para a órbita e além, e um baú blindado para interceptá-los. +se-delivery-cannon-capsule-iridium=Embora o irídio seja um metal pesado, a maior durabilidade significa que menos material pode ser usado em comparação com uma cápsula padrão. O peso total é o mesmo, mas mais fácil de fabricar. +se-delivery-cannon-weapon=Uma grande arma ferroviária que pode disparar munição especial, como uma bomba atômica, em outras superfícies. +se-spaceship-clamps=Permite que os grampos de encaixe sejam colocados para permitir que as espaçonaves ancorem em um local específico, coordenando as posições dos grampos. A automação requer os sinais "Ancorar usando" e "Ancorar para" alimentados no console. +se-bio-upgrade-constitution=Aumenta o máximo de saúde. +se-bio-upgrade-strength=Aumenta a capacidade de carga. +se-bio-upgrade-agility=Aumenta a velocidade do movimento. +se-bio-upgrade-dexterity=Aumenta a velocidade de fabricação. +se-bio-upgrade-intelligence=Aumenta o sucesso de aprendizagem de qualquer pacote de ciências. +se-energy-beaming=Um feixe de energia intenso que pode ser usado como uma arma do céu ou para transferir energia onde for necessário. +se-energy-beam-defence=Protege contra feixes de energia transmitidos pelo espaço e ejeções de massa coronal. Funciona flutuando partículas magnéticas em uma bolha protetora e, em seguida, realinhando e aglutinando as partículas conforme necessário para dispersar os feixes de energia do inimigo. +se-nexus=Um dispositivo que pode ser ativado em uma nave espacial que se move no espaço interestelar para gerar dados e, com tecnologia adicional, pode ativar um campo de distorção do espaço (Vitória Espacial). +se-spaceship-victory=Permite que o Nexus ative um Distortion Drive para escapar do aglomerado local de estrelas. Execute um Nexus no modo Distortion Driver em uma nave espacial Integrity 3000+ movendo-se a 250 velocidades no espaço interestelar por 60 segundos para ganhar o jogo. +se-arcosphere=Permite que você colete arcosferas que foram perdidas no vazio interestelar. +se-arcosphere-folding=Permite que as arcosferas sejam usadas como pinças extra-dimensionais. +se-space-probe=Um silo de foguetes no espaço para o lançamento de sondas espaciais. Também pode ser usado para lançar satélites de baixo custo. +se-linked-container=Um contêiner que está conectado a outros contêineres por um espaço extra-dimensional. Os membros do recipiente dependem da superfície em que ele é colocado pela primeira vez. +se-thruster-suit-2=Um traje espacial aprimorado com propulsores mais fortes, inventário maior e uma grade de equipamentos maior. +se-thruster-suit-3=Um traje espacial aprimorado com propulsores mais fortes, inventário maior e uma grade de equipamentos maior. +se-thruster-suit-4=Um traje espacial aprimorado com propulsores mais fortes, inventário maior e uma grade de equipamentos maior. +effect-transmission=O distribuidor de efeitos transfere os efeitos dos módulos para unidades amigas próximas dentro de 3 campos. Possui 8 slots de módulo. Se vários distribuidores de efeitos afetam o mesmo objeto, eles os sobrecarregam e os impedem de funcionar. +se-unit-capsule=Cápsulas que liberam __1__ unidades de amigos. + +[modifier-description] +tesla-shooting-speed-bonus=Velocidade de tiro Tesla +tesla-damage-bonus=Bônus de dano de Tesla +railgun-damage-bonus=Bônus de dano por canhão elétrico +railgun-shooting-speed-bonus=Velocidade de tiro do canhão +cryogun-shooting-speed-bonus=Taxa de tiro do canhão criogênico +cryogun-damage-bonus=Bônus de dano do canhão cryo +character-running-speed=Bônus de velocidade de corrida do personagem: +__1__ +character-crafting-speed=Velocidade de criação de personagens: +__1__ + +[virtual-signal-namea-ai-sinals] +signal-speed=Sinal de velocidade +se-signal-speed=Geschwindigkeitssignal +signal-distance=Sinal de distância +se-signal-distance=Sinal de distância +se-star=Estrela +se-planet=Planets +se-planet-orbit=Órbita planetária +se-moon=Lua +se-moon-orbit=Órbita lunar +se-asteroid-belt=Cinturão de asteróides +se-asteroid-field=Campo de asteróide +se-anomaly=Anomalia +se-meteor=Meteoro +se-spaceship=Nave espacial +se-cargo-rocket=Foguete de carga +se-remote-view=Vista distante +se-death=Morte +se-character-corpse=Corpo +se-ruin=Ruína +se-accolade=Elogio +se-remove=Remover +se-radius=Raio +se-hierarchy=Hierarquia +se-spaceship-launch=Lançamento de nave espacial +se-anchor-using-left-clamp=Ancorar com a braçadeira esquerda da espaçonave +se-anchor-using-right-clamp=Ancorar com a braçadeira direita da espaçonave +se-anchor-to-left-clamp=Âncora para mirar no colchete esquerdo +se-anchor-to-right-clamp=Âncora para mirar no suporte direito +se-beacon-overload=Sobrecarga do distribuidor de efeito +se-heat=Aquecer +se-pin=Código PIN + +[controls] +se-remote-view=Vista de satélite de navegação +se-remote-view-pins=Pinos de satélite de navegação +se-remote-view-next=Próximo histórico de navegação +se-remote-view-previous=Histórico de navegação anterior +se-universe-explorer=Exploração do Universo +se-respawn=Reaparecimento +se-mode-toggle=Mudar o modo de operação da estrutura +se-pin-one=Vá para o pino 1 +se-pin-two=Vá para o pino 2 +se-pin-three=Vá para o pino 3 +se-pin-four=Vá para o pino 4 +se-pin-five=Vá para o pino 5 +se-pin-six=Vá para o pino 6 +se-pin-seven=Vá para o pino 7 +se-pin-eight=Vá para o pino 8 +se-pin-nine=Vá para o pino 9 +se-pin-zero=Vá para o pino 0 +se-pin-set-one=Definir pino 1 +se-pin-set-two=Definir pino 2 +se-pin-set-three=Definir pino 3 +se-pin-set-four=Definir pino 4 +se-pin-set-five=Definir pino 5 +se-pin-set-six=Definir pino 6 +se-pin-set-seven=Definir pino 7 +se-pin-set-eight=Definir pino 8 +se-pin-set-nine=Definir pino 9 +se-pin-set-zero=Definir pino 0 + +[shortcut] +se-remote-view=Vista de satélite de navegação +se-remote-view-pins=Pinos de satélite de navegação +se-universe-explorer=Exploração do Universo +se-respawn=Reaparecimento +se-pin-one=Vá para o pino 1 +se-pin-two=Vá para o pino 2 +se-pin-three=Vá para o pino 3 +se-pin-four=Vá para o pino 4 +se-pin-five=Vá para o pino 5 +se-pin-six=Vá para o pino 6 +se-pin-seven=Vá para o pino 7 +se-pin-eight=Vá para o pino 8 +se-pin-nine=Vá para o pino 9 +se-pin-zero=Vá para o pino 0 +se-pin-set-one=Definir pino 1 +se-pin-set-two=Definir pino 2 +se-pin-set-three=Definir pino 3 +se-pin-set-four=Definir pino 4 +se-pin-set-five=Definir pino 5 +se-pin-set-six=Definir pino 6 +se-pin-set-seven=Definir pino 7 +se-pin-set-eight=Definir pino 8 +se-pin-set-nine=Definir pino 9 +se-pin-set-zero=Definir pino 0 + +[shortcut-name] +se-remote-view=Vista de satélite de navegação [__CONTROL__se-remote-view__] +se-remote-view-pins=Pinos de satélite de navegação [__CONTROL__se-remote-view-pins__] +se-universe-explorer=Exploração do Universo [__CONTROL__se-universe-explorer__] +se-respawn=Reaparecimento [__CONTROL__se-respawn__] +se-pin-one=Vá para o pino 1 [__CONTROL__se-pin-one__] +se-pin-two=Vá para o pino 2 [__CONTROL__se-pin-two__] +se-pin-three=Vá para o pino 3 [__CONTROL__se-pin-three__] +se-pin-four=Vá para o pino 4 [__CONTROL__se-pin-four__] +se-pin-five=Vá para o pino 5 [__CONTROL__se-pin-five__] +se-pin-six=Vá para o pino 6 [__CONTROL__se-pin-six__] +se-pin-seven=Vá para o pino 7 [__CONTROL__se-pin-seven__] +se-pin-eight=Vá para o pino 8 [__CONTROL__se-pin-eight__] +se-pin-nine=Vá para o pino 9 [__CONTROL__se-pin-nine__] +se-pin-zero=Vá para o pino 0 [__CONTROL__se-pin-zero__] +se-pin-set-one=Definir pino 1 [__CONTROL__se-pin-set-one__] +se-pin-set-two=Definir pino 2 [__CONTROL__se-pin-set-two__] +se-pin-set-three=Definir pino 3 [__CONTROL__se-pin-set-three__] +se-pin-set-four=Definir pino 4 [__CONTROL__se-pin-set-four__] +se-pin-set-five=Definir pino 5 [__CONTROL__se-pin-set-five__] +se-pin-set-six=Definir pino 6 [__CONTROL__se-pin-set-six__] +se-pin-set-seven=Definir pino 7 [__CONTROL__se-pin-set-seven__] +se-pin-set-eight=Definir pino 8 [__CONTROL__se-pin-set-eight__] +se-pin-set-nine=Definir pino 9 [__CONTROL__se-pin-set-nine__] +se-pin-set-zero=Definir pino 0 [__CONTROL__se-pin-set-zero__] + +[tile-name] +se-space-platform-plating=Revestimento de plataforma espacial +se-space-platform-scaffold=Andaimes de plataforma espacial +se-space-platform-underlay=Espaço +se-space-platform-underlay-l=Espaço +se-space-platform-underlay-r=Espaço +se-space=Espaço vazio +se-regolith=Regolith +se-asteroid=Asteróide +se-spaceship-floor=Andar da nave espacial + +[mod-setting-name] +se-meteor-interval=Intervalo de chuva de meteoros +se-plague-max-runtime=Duração máxima das epidemias +se-planets=Número de planetas +se-planet-size=Tamanho do planeta (1% a 10000%) +se-seed=Semente de geração do planeta +se-skip-experimental-warning=Não exiba a mensagem de aviso experimental. +se-print-meteor-info=Emita alertas de impacto de meteoros no console. +se-print-satellite-discovered-nothing=Aviso se o satélite não detectar nada +se-space-pipe-capacity=Capacidade do tubo espacial +se-electric-boiler=Caldeira eletrica +se-deep-space-belt-speed=Velocidade da esteira transportadora espacial +se-deep-space-belt-black=Correia transportadora espacial preta +se-deep-space-belt-white=Correia transportadora de espaço em branco +se-deep-space-belt-red=Correia transportadora de espaço vermelho +se-deep-space-belt-yellow=Correia transportadora espacial amarela +se-deep-space-belt-green=Correia transportadora de espaço verde +se-deep-space-belt-cyan=Correia transportadora espacial turquesa +se-deep-space-belt-blue=Correia transportadora espacial azul +se-deep-space-belt-magenta=Correia transportadora espacial roxa +se-space-science-pack=Fallback para o pacote de exploração espacial +se-never-show-lifesupport=Nunca mostre a GUI do suporte de vida +se-show-zone-preview=Mostrar janela de visualização da zona +se-pylon-charge-points=Pontos de carregamento de pilares de construção +se-cmes-max-frequency=intervalo máximo de ejeção de massa coronal +se-spawn-small-resources=Campos de recursos iniciais de bônus +se-show-overhead-button-satellite-mode=Mostrar botão aéreo do Uplink do Nav Sat +se-show-overhead-button-interstellar-map=Mostrar botão suspenso do mapa interestelar +se-show-overhead-button-universe-explorer=Mostrar botão suspenso do Universe Explorer +se-show-pin-help-tooltip=Mostrar dica de ajuda por meio de botões de alfinetes +se-scan-search-budget=Verificação de orçamento de pesquisa +se-scan-chart-budget=Verificação do orçamento do gráfico +se-scan-alert-interval=Intervalo de aviso de varredura +se-supercharger-individual-charge-rate=Taxa de carga de porta individual do Supercharger (MW) + +[mod-setting-description] +se-meteor-interval=O intervalo básico em minutos entre as chuvas de meteoros. A próxima chuva de meteoros ocorre em um intervalo aleatório em minutos entre 1 e este valor. +se-plague-max-runtime=O tempo de execução máximo da arma epidêmica em minutos. Depois que a epidemia durou esse período, todas as partículas epidêmicas, árvores e inimigos são destruídos. +se-planets=Não mude durante uma campanha parcialmente jogada. +se-planet-size=Não mude durante uma campanha parcialmente jogada. +se-seed=Não mude durante uma campanha parcialmente jogada. +se-skip-experimental-warning=O aviso não aparecerá ao iniciar um novo jogo e você não receberá nenhum aviso alterado se a mensagem mudar. +se-print-meteor-info=Mostra os alarmes de impacto de meteorito no console (chave: __CONTROL__toggle-console__) mesmo depois de o alarme desaparecer. +se-print-satellite-discovered-nothing=Quando um satélite é lançado, você receberá um aviso informando o que foi detectado. Esta configuração pode desativar o aviso se nada for encontrado. +se-space-pipe-capacity=A capacidade de líquido em tubos espaciais. +se-electric-boiler=Adicione uma caldeira elétrica ao jogo. +se-deep-space-belt-speed=As correias transportadoras espaciais são consideradas as correias transportadoras mais rápidas. Se você tiver outros mods que adicionam esteiras transportadoras mais rápidas, pode aumentar a velocidade das esteiras transportadoras espaciais para alcançá-las ou excedê-las. +se-deep-space-belt-black=As receitas de correias transportadoras pretas, lascas e correias subterrâneas podem ser desativadas para reduzir a desordem da IU. +se-deep-space-belt-white=As receitas de correias transportadoras brancas, fitas e correias subterrâneas podem ser desativadas para reduzir a desordem da +se-deep-space-belt-red=As receitas de correias transportadoras vermelhas, lascas e correias subterrâneas podem ser desativadas para reduzir a desordem da IU. +se-deep-space-belt-yellow=As receitas de correias transportadoras amarelas, lascas e correias subterrâneas podem ser desativadas para reduzir a desordem da IU. +se-deep-space-belt-green=As receitas de correias transportadoras verdes, lascas e correias subterrâneas podem ser desativadas para reduzir a desordem da IU. +se-deep-space-belt-cyan=As receitas das correias transportadoras turquesa, lascas e correias subterrâneas podem ser desativadas para reduzir a desordem da interface do usuário. +se-deep-space-belt-blue=As receitas do Blue Conveyor, Sliver e Underground Belts podem ser desativadas para reduzir a desordem da IU. +se-deep-space-belt-magenta=As receitas de correias transportadoras roxas, lascas e correias subterrâneas podem ser desativadas para reduzir a desordem da IU. +se-space-science-pack=Se outro mod adicionar um caminho para a exploração espacial, esse método será usado. Se não houver maneira, a Exploração Espacial pode removê-lo ou usá-lo como um pacote de ciência de otimização. +se-never-show-lifesupport=Com esta opção habilitada, a GUI do suporte de vida nunca aparecerá, mesmo se você engasgar. +se-show-zone-preview=Desmarque a caixa para desligar a janela de visualização da zona no Universe Explorer. Quando algumas das sobreposições de depuração do Factorio estão ativas, a janela de visualização pode reduzir o FPS. +se-pylon-charge-points=Desmarque a caixa para remover os pontos de carregamento dos galhos das árvores. Isso ajuda a controlar o comportamento de carregamento dos bots, mas você pode precisar adicionar outras opções de carregamento em rotas de longa distância. +se-cmes-max-frequency=O intervalo máximo para que as ejeções de massa coronal (CMEs) se repitam. O valor está em horas, 0 = desativado. O primeiro CME é programado para o primeiro minuto do jogo e é praticamente inofensivo. A segunda está atrasada cerca de 48 horas. O atraso entre as repetições está entre 50% e 100% da configuração do intervalo máximo. Uma configuração diferente de zero só se aplica a novos eventos; Uma vez que o ETA foi estabelecido, ele não é afetado. Uma configuração de zero excluirá todos os CMEs programados, mas pode levar até um minuto para que a alteração entre em vigor. +se-spawn-small-resources=Adiciona alguns pequenos campos de recursos adicionais à área inicial. Os campos de recursos estão localizados em um cluster para reduzir o tempo de execução entre os recursos. +se-show-overhead-button-satellite-mode=Exibe um pequeno botão no canto superior esquerdo da tela para alternar o uplink do satélite de navegação. +se-show-overhead-button-interstellar-map=Exibe um pequeno botão no canto superior esquerdo da tela para alternar o mapa interestelar. +se-show-overhead-button-universe-explorer=Exibe um pequeno botão no canto superior esquerdo da tela para alternar o Universe Explorer. +se-show-pin-help-tooltip=Exibe uma dica de ferramenta expandida nos botões de fixação com instruções sobre como usá-los. +se-scan-search-budget=Pesquisa de satélite: o número de blocos que podem ser verificados para verificar o status do gráfico. Valores altos fazem com que seja rápido através de pedaços já digitalizados para chegar à borda inexplorada. +se-scan-chart-budget=Varredura de satélite: O número de solicitações de bloco que podem ser adicionadas em paralelo ao buffer do gráfico. Nenhuma nova solicitação de gráfico é feita se os blocos anteriores ainda não estiverem prontos. +se-scan-alert-interval=O intervalo, em segundos, entre os avisos de atualização para varreduras de superfície. As superfícies reveladoras aumentam o tamanho do arquivo salvo, portanto, é melhor não ativá-las e esquecê-las. +se-supercharger-individual-charge-rate=Especifica a taxa de carregamento de cada conexão de carregamento individual no supercharger em MW (não tem influência na taxa de carregamento máxima). O valor mínimo (padrão) é 90 MW, o suficiente para carregar um robô vanilla em um tique, até 1000 MW ou 1 GW, a taxa de carga máxima do superalimentador. + +[string-mod-setting] +se-space-science-pack-Remove=Remova completamente +se-space-science-pack-Replace=Substitua pelo pacote de ciência do foguete +se-space-science-pack-OptimisationUranium=Otimização: receita crio de urânio +se-space-science-pack-OptimisationFish=Otimização: receita de peixe Vita Vulca + +[autoplace-control-names] +planet-size=[img=virtual-signal/se-planet] Tamanho do planeta +se-water-ice=[img=item/se-water-ice] Gelo de água (apenas no espaço, os controles deslizantes não têm efeito) +se-methane-ice=[img=item/se-methane-ice] Gelo de metano (apenas no espaço, os controles deslizantes não têm efeito) +se-cryonite=[img=item/se-cryonite] Crionita (não naterra natal) +se-vulcanite=[img=item/se-vulcanite] Vulcanita (não naterra natal) +se-vitamelange=[img=item/se-vitamelange] Vitamelange (não naterra natal) +se-beryllium-ore=[img=item/se-beryllium-ore] Minério de berílio (não naterra natal) +se-holmium-ore=[img=item/se-holmium-ore] Minério de hólmio (não naterra natal) +se-iridium-ore=[img=item/se-iridium-ore] Minério de irídio (não naterra natal) +se-naquium-ore=[img=item/se-naquium-ore] Minério de Naquium (apenas no espaço) + +[map-gen-preset-name] +space-exploration=Predefinição de exploração do espaço + +[map-gen-preset-description] +space-exploration=Configuração padrão para exploração espacial + +[tooltip-category] +shot=usar diff --git a/space-exploration_0.5.80/space-exploration/locale/ru/strings.cfg b/space-exploration_0.5.80/space-exploration/locale/ru/strings.cfg new file mode 100644 index 0000000..ef88c67 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/locale/ru/strings.cfg @@ -0,0 +1,2374 @@ +spaceship-integrity100=+100 к структурной целостности космического корабля +spaceship-integrity300=+300 к структурной целостности космического корабля +spaceship-integrity500=+500 к структурной целостности космического корабля +arcosphere-discovery=Собирайте аркосферы из глубокого межзвёздного пространства +core-mining-productivity-5=+5% к продуктивности глубинного бурения +se-zone-discovery-random=Запускает обнаружение случайной зоны при исследовании. +se-zone-discovery-targeted=Запускает обнаружение зоны с ресурсами при исследовании. +se-zone-discovery-deep=Запускает обнаружение зоны глубокого космоса при исследовании. +unlock-spaceship-victory=Разблокирует условие победы "Космический корабль": управляйте космическим кораблём с Нексусом, работающим как двигатель искажения на скорости __1__ в течение __2__ секунд в межзвёздном пространстве. + +[mod-name] +space-exploration=Space Exploration (Исследование космоса) + +[mod-description] +space-exploration=Стройте грузовые ракеты для отправки грузов в космос. Отправляйтесь в космос на ракете сами и выходите в открытый космос. Стройте космические платформы для разработки сложной космической науки. Стройте космические корабли клетка за клеткой, летайте на них с планеты на другие планеты, луны, поля астероидов. Стройте межзвёздные лучи смерти и добывающие колонии в глубоком космосе. Исследуйте древние руины на чужих планетах, ищите реликвии, утерянные в глубинах космоса. Не рекомендуется играть с независимыми модами, пока в экспериментальной фазе. + +[space-exploration] +space-exploration=Исследование космоса +menu_space-exploration=Исследование космоса +title_space-exploration=Исследование космоса +off=Выкл +on=Вкл +close=Закрыть +show=Показать +close-instruction-only-confirm=Закрыть (__CONTROL__confirm-gui__) +show-own-location=Показать место расположения +wdc_auto_off=Ручное прицеливание +wdc_auto_on=Автоматическое прицеливание +name=Название +rename-something=Переименовать __1__ +trigger-none=Нет триггера (Вручную) +trigger-fuel-full=Запуск при полном топливе +trigger-cargo-full=Запуск при полной загруженности +trigger-fuel-full-signal=Запуск по зелёному сигналу и при полном топливе +trigger-cargo-full-signal=Запуск по зелёному сигналу и при полной загруженности +trigger-cargo-full-or-signal=Запуск по зелёному сигналу или при полной загруженности +destination-type-zone=Приблизительное местоположение +destination-type-landing-pad=Грузовая посадочная площадка +button-launch=Запуск +button-launch-disabled=Запуск (Отключено) +destination-crash-warning=Внимание: Выберите грузовую посадочную площадку, чтобы уменьшить шанс крушения +recipe-to=от __1__ к __2__ +recipe-from=к __1__ от __2__ +simple-a-b=__1____2__ +simple-a-b-space=__1__ __2__ +simple-a-b-comma=__1__, __2__ +simple-a-b-break=__1__\n__2__ +simple-a-b-divide=__1__ / __2__ +simple-bold=[font=default-bold]__1__[/font] +star-map=Звёздная карта +interstellar-map=Межзвёздная карта +interstellar-space=Межзвёздное пространство +planetary-system=Система __1__ +solar-system=Система __1__ +remote-view=Спутниковая Навигационная Система [__CONTROL__se-remote-view__] +remote-view-window-title=[img=virtual-signal/se-remote-view] Навигационный спутник [__CONTROL__se-remote-view__] +remote-view-currently-viewing=Текущий просмотр: +remote-view-instruction=Запустите больше спутников, чтобы открыть больше звёзд, планет, лун и других областей. +remote-view-spaceships=__1__: Космические корабли +remote-view-spaceships-anchored=__1__: Космические корабли на якоре +remote-view-clamps=__1__: Зажимы для космических кораблей +remote-view-show-hide-resources=Показать/спрятать ресурсы +remote-view-show-hide-stats=Показать/спрятать статистику +remote-view-show-hide-anchor-info=Показать/спрятать информацию о якорях +remote-view-show-hide-danger-zones=Показать/спрятать опасные зоны +open-pins-remote-view=Все отметки [__CONTROL__se-remote-view-pins__] +exit-pins-remote-view=Закрыть отметки [__CONTROL__se-remote-view-pins__] +remote-view-history-delete=Удалить историю поверхностей. +remote-view-history-previous=Назад по истории поверхностей [__CONTROL__se-remote-view-previous__].\n__1__ +remote-view-history-next=Вперёд по истории поверхностей [__CONTROL__se-remote-view-next__].\n__1__ +remote-view-history-item=__1__ +remote-view-history-item_named=__1__ → __2__ +exit-remote-view=Выйти из Спутниковой Навигационной Системы [__CONTROL__se-remote-view__] +remote-view-pin-make=Отметить текущий вид +remote-view-pins-list=Все отметки +remote-view-add-pin=Создать новую отметку на текущем местоположении. +remote-view-pin-details=Свойства отметки +remote-view-pin-button-tooltip=__1__ → __2__ +remote-view-pin-button-tooltip-hotkey-one=__1__ → __2__ [__CONTROL__se-pin-one__] +remote-view-pin-button-tooltip-hotkey-two=__1__ → __2__ [__CONTROL__se-pin-two__] +remote-view-pin-button-tooltip-hotkey-three=__1__ → __2__ [__CONTROL__se-pin-three__] +remote-view-pin-button-tooltip-hotkey-four=__1__ → __2__ [__CONTROL__se-pin-four__] +remote-view-pin-button-tooltip-hotkey-five=__1__ → __2__ [__CONTROL__se-pin-five__] +remote-view-pin-button-tooltip-hotkey-six=__1__ → __2__ [__CONTROL__se-pin-six__] +remote-view-pin-button-tooltip-hotkey-seven=__1__ → __2__ [__CONTROL__se-pin-seven__] +remote-view-pin-button-tooltip-hotkey-eight=__1__ → __2__ [__CONTROL__se-pin-eight__] +remote-view-pin-button-tooltip-hotkey-nine=__1__ → __2__ [__CONTROL__se-pin-nine__] +remote-view-pin-button-tooltip-hotkey-zero=__1__ → __2__ [__CONTROL__se-pin-zero__] +remote-view-pin-button-tooltip-help-text=\n\n[font=default-bold]- Управление -[/font]\nЛКМ: Перейти к отмеченному местоположению\nПКМ: Редактировать отметку\nCtrl+ПКМ: Удалить +remote-view-pin-button-tooltip-help-text-update-position=\nShift+ПКМ: Обновить позицию отметки +remote-view-pin-name=Название +remote-view-pin-icon=Значок +remote-view-pin-zoom=Масштаб +remote-view-pin-hotkey=Горячая клавиша +remote-view-pin-hotkey-none=Нет +remote-view-pin-hotkey-one=__CONTROL__se-pin-one__ - __1__ +remote-view-pin-hotkey-two=__CONTROL__se-pin-two__ - __1__ +remote-view-pin-hotkey-three=__CONTROL__se-pin-three__ - __1__ +remote-view-pin-hotkey-four=__CONTROL__se-pin-four__ - __1__ +remote-view-pin-hotkey-five=__CONTROL__se-pin-five__ - __1__ +remote-view-pin-hotkey-six=__CONTROL__se-pin-six__ - __1__ +remote-view-pin-hotkey-seven=__CONTROL__se-pin-seven__ - __1__ +remote-view-pin-hotkey-eight=__CONTROL__se-pin-eight__ - __1__ +remote-view-pin-hotkey-nine=__CONTROL__se-pin-nine__ - __1__ +remote-view-pin-hotkey-zero=__CONTROL__se-pin-zero__ - __1__ +remote-view-pin-location=Местоположение +remote-view-pin-location-position={x=__1__, y=__2__} +remote-view-pin-location-position-button=Обновить позицию отметки +remote-view-pin-location-position-button-tooltip=Установить позицию отметки на текущее местоположение. +remote-view-pin-viewer-title=Все отметки +remote-view-pin-viewer-misc-row=Разное +remote-view-pin-viewer-spaceship-row=Космические корабли +open-zonelist=Открыть Атлас Вселенной +zonelist-window-title=[img=virtual-signal/se-planet-orbit] Атлас Вселенной [__CONTROL__se-universe-explorer__] +priority-icon=[img=virtual-signal/se-accolade] +priority-tooltip=Приоритет (для сортировки важных и неактуальных зон) +trim-zone-button=[img=item/cliff-explosives] Обрезать поверхность +trim-zone-button-tooltip=Удаляет фрагменты за пределами ограничивающей рамки, определяемой объектами игрока, специальными объектами и исходной точкой карты. +trim-zone-button-no-surface-tooltip=Поверхность не существует. +trim-zone-results=Удалено __1__ чанков из __2__. Обрезано до прямоугольника X [__3__ - __4__] Y [__5__ - __6__] +delete-zone-button=[img=virtual-signal/se-remove] Удалить поверхность +delete-zone-button-tooltip=Некоторые поверхности нельзя удалить. +delete-zone-button-no-surface-tooltip=Поверхность не существует. +scan-zone-button=[img=item/satellite] Сканировать поверхность +scan-zone-button-tooltip=Предупреждение: это может замедлить игру во время сканирования. Скорость сканирования можно настроить в параметрах мода. Сканирование можно остановить в любой момент. +scan-zone-button-disabled-tooltip=Вы должны запустить спутник, чтобы сканировать поверхность. +stop-scan-zone-button=[img=item/satellite] Остановить все сканирования +stop-scan-zone-button-tooltip=Останавливает любое активное сканирование на всех поверхностях. +generic-requires-satellite=Сначала вы должны запустить спутник. +remote-view-requires-satellite=Вы должны запустить спутник, чтобы использовать спутниковую навигационную систему. +satellite-discovered-platform=[color=cyan]Спутник обнаружил космическую платформу на орбите.[/color] Откройте [img=virtual-signal/se-planet-orbit] Атлас Вселенной [__CONTROL__se-universe-explorer__], выберите __1__ и нажмите "Просмотр поверхности". Там могут быть полезные вещи. +satellite-view-unlocked=Вы разблокировали [color=cyan][img=virtual-signal/se-remote-view]Спутниковую навигационную систему[/color]. Это позволяет вам просматривать мир и другие открытые вами места через спутник. Нажмите [color=green][__CONTROL__se-remote-view__][/color], чтобы активировать, или используйте панель ярлыков (справа от панели быстрого доступа). +source-discovered-zone=[color=cyan]__1__ открыл новую __2__: [/color][img=__3__] [color=white]__4__[/color]. Обнаруженные местоположения можно просмотреть в [img=virtual-signal/se-planet-orbit] Атласе Вселенной [__CONTROL__se-universe-explorer__]. +discovered-zone=[color=cyan]Открыта новая __1__: [img=__2__] [/color][color=white]__3__[/color]. +discovered-anomaly-additional=Неизвестный объект обнаружен в [img=virtual-signal/se-anomaly] аномалии. Ваш [img=virtual-signal/informatron] Журнал исследований [__CONTROL__informatron__] обновлён. +satellite-discovered-nothing=Был запущен новый спутник, но ничего нового он не обнаружил. Возможно, вокруг других звёзд можно найти больше. +tech-discovered-nothing=У близлежащих звёзд телескопы не обнаружили ничего нового. В глубоком космосе можно найти больше. +tech-deep-discovered-nothing=Ничего нового в дальнем космосе телескопы не обнаружили. +galaxy_ship_authenticated=[img=virtual-signal/se-spaceship] Заброшенный космический корабль: [color=cyan]«Биосигнатура аутентифицирована. Код доступа к шлюзу - 2236067964. Передаётся журнал аварийных резервных копий.»[/color] Ваш [img=virtual-signal/informatron] Журнал исследований [__CONTROL__informatron__] обновлён. +space-capsule=Космическая капсула +invalid_launch_location=Неверное место запуска +capsule_invalid_launch_location=Неверное место запуска +capsule_status_invalid_launch_location=Статус: Неверное место запуска +capsule_status_ready=Статус: Готово к запуску +capsule_not_enough_thrust=Недостаточно ускорения для выхода из гравитационного колодца __1__ __2__. Отправляйте на грузовой ракете. +capsule_destination=Пункт назначения: __1__ +capsule_info=Из открытого космоса эта капсула может доставить вас на ближайшую планету или луну. +player-died=__1__ умер +launch-suit-warning=Чтобы избежать удушья, пожалуйста, наденьте ваш реактивный костюм и положите в инвентарь канистры жизнеобеспечения. +suffocating-warning=Вы задыхаетесь. Войдите в космическую капсулу или наденьте ваш реактивный костюм с канистрами жизнеобеспечения в инвентаре. +rocket_survivability_fail=Грузовая ракета была повреждена в полёте и сбилась с курса. Рекомендуется дополнительное исследование выживаемости ракеты и безопасности грузов. __1__ +respawn-if-stranded=Если вы застряли, используйте кнопку возрождения [__CONTROL__se-respawn__]. +respawn-options-title=Место возрождения +respawn-button-homeworld=[img=virtual-signal/se-planet] Родной мир +respawn-button-landing-pad=[img=item/se-rocket-landing-pad] Ближайшая посадочная площадка +respawn-button-spaceship=[img=virtual-signal/se-spaceship] Ближайший космический корабль +respawn-confirm-title=Вы уверены, что хотите возродиться? +respawn-confirm-yes=[img=virtual-signal/se-death] Возродиться +respawn-confirm-no=Отмена +search-list=Поиск +clear-search=Очистить поиск +filter-list=Фильтр +clear-filter=Очистить фильтр +attrition-type-radiation=излучение +attrition-type-wind=ветер +attrition-type-spacial-distortion=пространственное искажение +zonelist-view-surface=Просмотр поверхности +zonelist-heading-hierarchy=Иерархия +zonelist-heading-type=Тип зоны +zonelist-heading-name=Название +zonelist-heading-radius=Радиус +zonelist-heading-primary-resource=Основной ресурс +zonelist-heading-attrition=Помехи роботам +zonelist-heading-threat=Угроза +zonelist-heading-solar=Солнечный +zonelist-heading-flags=Флаги +zonelist-heading-priority=Приоритет +zonelist_filter_star=Включить звёзды +zonelist_filter_planet=Включить планеты +zonelist_filter_planet-orbit=Включить орбиты планет +zonelist_filter_moon=Включить луны +zonelist_filter_moon-orbit=Включить орбиты лун +zonelist_filter_asteroid-belt=Включить пояса астероидов +zonelist_filter_asteroid-field=Включить поля астероидов +zonelist_filter_anomaly=Включить аномалии +zonelist_filter_spaceship=Включить космические корабли +zonelist-resource-bar-tooltip=__1__ __2__\nЧастота: __3__\nРазмер: __4__\nБогатство: __5__ +zonelist-resource-bar-tooltip-extended=__1__ __2__\nЧастота: __3__\nРазмер: __4__\nБогатство: __5__\n__6__ +zonelist-resources-disclaimer=Вероятности ресурсов оценочные. [img=info] +zonelist-resources-disclaimer-tooltip=Все значения ресурсов являются оценочными, основанными на плотности элементов.\nОни соответствуют настройкам при создании карты в игре.\nФактические размеры месторождений ресурсов будут различаться, и их появление может быть запрещено из-за воды, радиуса поверхности или определенных требований к тайлам. +resource-terrain-required-se-vulcanite=Требуется вулканическая поверхность +resource-terrain-required-se-cryonite=Требуется замороженная поверхность +resource-terrain-required-se-vitamelange=Требуется травянистая поверхность +zone-tooltip-type=Тип зоны: +zone-tooltip-parent=Родитель: +zone-tooltip-threat=Угроза: +zone-tooltip-daynight=Цикл дня и ночи: +zone-tooltip-bot-attrition=Помехи для роботов (__1__): +zone-tooltip-radius=Радиус: +zone-tooltip-solar=Освещённость: +zone-tooltip-flags=Флаги: +zone-tooltip-closest=Ближайший: +zone-tooltip-destination=Назначение: +zone-tooltip-delta-v=∆v от __1__ +construction-denied=Нельзя разместить здесь. +construction-denied-vehicle-in-space=Нельзя разместить наземные машины в космосе. +construction-denied-se-surface=Неподходящее место, нужно разместить на поверхности из мода Исследование космоса. +construction-denied-linked-container-on-transient-surface=Невозможно расположить связанные с поверхностью контейнеры на движущемся космическом корабле. +construction-denied-no-water=Нет воды +construction-denied-spaceship-only=Должно быть размещено на палубе космического корабля. +construction-denied-solid-only=Должно быть размещено на планете или луне. +currently-viewing=Текущий просмотр: __1__ +fail-board-no-character=Невозможно сесть на целевой корабль, вы должны быть прикреплены к своему персонажу, чтобы использовать это действие. +fail-board-remote-character=Невозможно сесть на целевой корабль, ваш персонаж не находится на корабле, с которого вы пытаетесь сойти. +fail-board-target-anchored=Невозможно сесть на стоящий на якоре корабль, попробуйте вместо этого встать на якорь в том же месте. +starmap=Звёздная карта +starmap-button=[img=virtual-signal/se-star] Звёздная карта +back=Назад +back-to=Назад к +spaceship=Космический корабль +planet=Планета +moon=Луна +star=Звезда +orbit=Орбита +something_orbit=Орбита __1__ +asteroid-belt=Пояс астероидов +asteroid-field=Поле астероидов +anomaly=Аномалия +spaceship-cannot-set-destination-to-self=Нельзя указать пунктом назначения себя. +spaceship-streamline=Обтекаемость: __1__ +spaceship-streamline-tooltip=__1__ - текущая обтекаемость\n__2__ - макс. обтекаемость\nСделайте переднюю часть корабля менее квадратной, чтобы улучшить обтекаемость +spaceship-launch-energy=Энергия запуска: __1__ +spaceship-launch-energy-invalid=Энергия запуска: Требуется прохождение проверки целостности. +spaceship-launch-energy-tooltip=__1__ - энергия топлива в резервуарах ускорителей\n__2__ - требуется энергии для запуска +spaceship-speed=Скорость: __1__ +spaceship-structural-stress-hull=Нагрузка на корпус: __1__ +spaceship-structural-stress-hull-invalid=Нагрузка на корпус: нет данных (требуется герметичность) +spaceship-structural-stress-hull-tooltip=__1__ Текущая нагрузка на корпус\n__2__ Оценочная нагрузка на корпус, если все клетки заняты\n__3__ Максимальная нагрузка на корпус +spaceship-structural-stress-container=Нагрузка на контейнеры: __1__ +spaceship-structural-stress-container-invalid=Нагрузка на контейнеры: нет данных (требуется герметичность) +spaceship-structural-stress-container-tooltip=__1__ - текущая нагрузка на контейнеры\n__2__ - макс. нагрузка на контейнеры +spaceship-travel-time-unknown=Время полёта: Неизвестно. Проверьте максимальную скорость для оценки. +spaceship-travel-time-max=Время полёта: __1__с на максимальной скорости. +spaceship-travel-time-current=Время полёта: __1__с на текущей скорости. +spaceship-closest-location-unknown=Ближайшее местоположение: Неизвестно (__1__) +spaceship-closest-location=Ближайшее место: __1__ +spaceship-location-spatial-distortion=Искажение пространства: __1__ +spaceship-location-stellar-x=Квадрант X: __1__ +spaceship-location-stellar-y=Квадрант Y: __1__ +spaceship-location-star-gravity-well=Гравитационный колодец звезды: __1__ +spaceship-location-planet-gravity-well=Гравитационный колодец планеты: __1__ +spaceship-asteroid-density=Плотность астероидов: __1__ +spaceship-asteroid-density-default=Редко +spaceship-asteroid-density-belt=Плотно +spaceship-asteroid-density-field=Опасно +spaceship-travel-status=Статус полёта: __1__ +spaceship-integrity-status-valid=Статус целостности: Действительный: __1__ +spaceship-integrity-status-invalid=Статус целостности: Недействительный: __1__ +spaceship-button-launch=Запуск +spaceship-button-launch-tooltip=Готов к запуску +spaceship-button-launching=Выполняется запуск +spaceship-button-launching-tooltip=Пожалуйста, подождите +spaceship-button-launch-disabled=Запуск (отключено) +spaceship-button-launch-disabled-fuel-tooltip=Требуется топливо в резервуарах ускорителей. +spaceship-button-launch-disabled-integrity-tooltip=Требуется положительная проверка целостности +spaceship-button-anchor=Якорь +spaceship-button-confirm-anchor=Подтвердить место стоянки +spaceship-button-anchor-to=Якорь к __1__ +spaceship-button-anchor-on=Якорь на __1__ +spaceship-button-stop=Стоп +spaceship-button-start=Поехали! +spaceship-button-board=Взойти на __1__ +spaceship-button-scouting-back=Назад +spaceship-button-scouting-back-tooltip=Отменить поиск места стоянки +spaceship-name-the=__1__ +spaceship-button-start-integrity-check=Начать проверку целостности +spaceship-target-speed=Целевая скорость: +spaceship-target-speed-unlimited=Целевая скорость: Неограничена +spaceship-target-speed-normal=Целевая скорость: __1__ (Обычная) +spaceship-target-speed-asteroid-belt=Целевая скорость: __1__ (Пояс астероидов) +spaceship-target-speed-asteroid-field=Целевая скорость: __1__ (Поле астероидов) +spaceship-target-speed-manual-override=Целевая скорость: __1__ (Ручное управление) +spaceship-target-speed-circuit=Целевая скорость: __1__ (Управляется логикой) +spaceship-target-speed-normal-tooltip=Целевая скорость в обычном полёте\nПлотность астероидов: __1__% +spaceship-target-speed-asteroid-belt-tooltip=Целевая скорость в поясе астероидов\nПлотность астероидов: __1__% +spaceship-target-speed-asteroid-field-tooltip=Целевая скорость в поле астероидов\nПлотность астероидов: __1__% +spaceship-heading-destination=Назначение +list-destinations-alphabetically=Перечислить пункты назначения по алфавиту +spaceship-travel-message-new-course-plotted=Новый курс расчитан. +spaceship-travel-message-exiting-planet-gravity=Выходим из гравитационного колодца планеты +spaceship-travel-message-navigating-planet-gravity=Находимся в гравитационном колодце планеты +spaceship-travel-message-exiting-star-gravity=Выходим из гравитационного колодца звезды +spaceship-travel-message-navigating-star-gravity=Находимся в гравитационном колодце звезды +spaceship-travel-message-spatial-distortions=Находимся в пространственном искажении +spaceship-travel-message-navigating-interstellar=Находимся в межзвёздном пространстве +spaceship-travel-message-at-destination=В пункте назначения +spaceship-check-message-passed=Пройдено: целостность корабля в норме. +spaceship-check-message-failed-containment=Провалено: Потеря герметичности вокруг консоли. Убедитесь, что все борта корабля расположены на полах корабля без пробелов. +spaceship-check-message-failed-console-floor=Консоль должна быть помещена на полу космического корабля. +spaceship-check-message-failed-empty=Не найдено клеток, соединённых с корректно изолированной консолью. +spaceship-check-message-failed-unknown-bounds=Ошибка: Неизвестные границы космического корабля. +spaceship-check-message-failed-stress=Ошибка: Нагрузка на структурную целостность превышает технологический лимит. +spaceship-check-message-checking-console-floor=Проверка соединённости консольного пола. +spaceship-check-message-checking-containment=Проверка герметичности. +spaceship-check-message-checking-connectivity=Проверка соединений консоли. +spaceship-check-message-no-console=Нет консоли. +spaceship-check-message-did-not-complete=Проверка не завершена. +spaceship-check-message-unstable=Нестабильно: Некоторые секции отделятся при маневрировании. +spaceship-check-message-valid-but-disconnecting=Подходит, но нестабильно: секции отсоединятся. +spaceship-warning-sections-disconnecting=Секции отсоединяются. Остановитесь для ремонта. +informatron-open-help=Открыть в Информатроне +page_space_exploration_text_1=Добро пожаловать в Исследование космоса (Space Exploration). В моде уже много всего, но он всё ещё имеет [font=default-bold]экспериментальный[/font] статус и находится в стадии активной разработки. Могут быть ошибки.\n\n[font=heading-2]Экспериментальный статус?[/font]\n\nИсследование космоса по-прежнему быстро меняется, и я все свое время вкладываю в разработку ключевых функций расширения совместимости мода. [color=red]Не рекомендуется играть с модами, отличными от требуемых и рекомендуемых.[/color]\n\nПока в экспериментальном статусе: если мод вызывает такие проблемы, как повреждение игры / файла сохранения, сбои, недопустимое дерево технологий или основной игровой процесс, он будет быстро помечен как несовместимый для защиты новых игроков. Это означает, что если вы используете много модов, более вероятно, что один из них может быть отмечен как несовместимый позже из-за проблемы, которую вы еще не обнаружили. Вы, конечно, можете редактировать свой файл info.json, чтобы попробовать несовместимые моды, но вы делаете это на свой страх и риск: если состояние вашей игры станет неиграбельным, в этом случае я не смогу вам помочь.\n\nПока в экспериментальном статусе: большинство других модов помечаются как несовместимые, если дерево технологий значительно нарушено, однако долгосрочное намерение состоит в том, чтобы заставить моды работать вместе, чтобы удовлетворить обоих разработчиков. Krastorio 2 является примером этой работы, которая уже давно ведётся.\n\nНекоторые дополнительные сведения, касающиеся совместимости модов, можно найти на вики-сайте Space Exploration. Если вы хотите помочь с совместимостью модов, свяжитесь с нами в Discord, но также имейте в виду, что это не будет высоким приоритетом до более поздних этапов разработки Space Exploration.\n\n[font=heading-2]Рекомендуемые моды[/font]\n\n • AAI Containers & Warehouses. Предоставляет вам несколько больших контейнеров, которые соответствуют "ванильной" теме.\n\n • Module Inserter. Позволяет вам вставлять модули в машины из спутникового режима.\n\n • Equipment Grid Logistic Module. Модуль для сетки оборудования транспорта, такого как Паукотрон, по запросу доставляет предметы из логистической сети и выбрасывает мусор.\n\n • Grappling Gun. Позволяет вам перепрыгивать через здания, озера и выходить из боя, если вас замедлили. В космосе вы можете вернуться на космическую платформу, если упадёте. Также позволяет садиться на космические корабли (особенно полезно, если они движутся).\n\n • Burner Leech. Это только для топливного этапа мода AAI.\n\n • Text Plates. Позволяет наносить текст на землю, что полезно для маркировки планет, станций, зон стыковки космических кораблей и т.д.\n\n • Even Distribution. Помогает в начале игры, когда вы вручную вставляете предметы в несколько зданий.\n\n • Combat Mechanics Overhaul. Помогает с защитой, когда вы за пределами планеты, если включена опция "Стены блокируют плевки". Стены дешевле ремонтировать, чем турели.\n\n • Bullet Trails, чтобы вы могли видеть, куда летят ваши пули или по каким орудиям стреляют. (Также выглядит лучше.)\n\n\n[font=heading-2]Рекомендуемые настройки[/font]\n\nВы ДОЛЖНЫ включить все тайлы ландшафта мода Alien Biomes, иначе игра будет сбоить на поздних стадиях.\n\nПоскольку игра длится дольше, чем обычно, рекомендуется начинать игру с низким коэффициентом эволюции врагов.\n\nВы не должны устанавливать высокие настройки ресурсов для своей стартовой планеты, если только вы не играете с ресурсоёмкими рецептами, такими как высокая сложность рецептов или режим марафона. Если ресурсы установлены слишком высоко, это уменьшит потребность в расширении на другие планеты.\n\n\n[font=heading-2]Полезные URL-адреса[/font]\n\nПосмотрите вики по Исследованию космоса здесь: https://spaceexploration.miraheze.org\n\nПолучите помощь или следите за развитием в Discord: https://discord.gg/ymjUVMv\n\nНа этот мод ушло более 2000 часов. Если вам это нравится, подумайте о поддержке меня на Patreon: https://www.patreon.com/earendel +menu_meteor_defence=[img=virtual-signal/se-meteor] Защита от метеоров +title_meteor_defence=Защита от метеоров +page_meteor_defence_text_1=Метеоры попадают в большинство зон через случайные промежутки времени. Вы можете изменить максимальный интервал между ударами в настройках мода.\n\nКоличество метеоров также случайно, 50% для 1, 25% для 2, 12,5% для 3, 6,25% для 4 и т.д.\n\nСтруктуры защиты от метеоров могут стрелять по метеорам. Они стреляют последовательно, поэтому более поздняя защита не сработает, если все метеоры будут уничтожены. Для защиты требуются боеприпасы, время зарядки и дополнительная мощность во время зарядки. Потребляемая мощность довольно высока, поэтому разумно сбалансировать риск и стоимость. +menu_coremining=[img=item/se-core-miner] Глубинное бурение +title_coremining=Глубинное бурение +page_coremining_text_1=Глубинное бурение может выполняться только на планетах и лунах. Каждая планета и луна могут давать различный тип фрагмента ядра в зависимости от того, что находится внутри. Nauvis дает баланс общих ресурсов, но другие места, как правило, дают в основном 1 тип ресурсов. Глубинные буры потребляют много энергии, но вы получаете часть энергии обратно из угля, нефти и урана.\n\nГлубинные буры используют много энергии, плюс каждый глубинный бур, который вы размещаете на планете, снижает эффективность других глубинных буров на той же планете. Они намного менее энергоэффективны, чем обычные буры, даже если у вас несколько запущенных, но у них никогда не заканчиваются ресурсы. На ранних этапах игры может быть полезно запустить 1 глубинный бур, когда у вас избыточная мощность. Если вы начнёте на крошечной планете, то солнечная энергия и глубинное бурение может быть вашим единственным способом получить достаточно ресурсов, чтобы покинуть планету.\n\nГлубинные буры поздней игры получают большую выгоду от бонусов производительности бурения. Лучше стремиться к нескольким бурам на многих планетах, чем к большому количеству на нескольких планетах. +menu_beacons=[img=item/se-wide-beacon-2] Маяки +title_beacons=Маяки +page_beacons_text_1=[font=heading-2]Перегрузка маяка[img=virtual-signal/se-beacon-overload][/font]\n\nПерегрузка маяка - это переработка механики маяка в Factorio. На сборочные машины может воздействовать только 1 маяк, если на них воздействует большее количество маяков, они перегружаются и приостанавливают производство.\n\nЭта переработка позволяет использовать больше модулей в маяках и способствует использованию более мощных модулей как в маяках, так и в сборщиках для получения максимальных бонусов. Это изменение также позволяет и продвигает более широкий диапазон дизайнов фабрик.\n\nБазовый маяк по отдельности намного мощнее, чем "ванильный" маяк, но не может складывать эффекты нескольких маяков на одной машине, поэтому максимальное усиление, которое вы можете обеспечить, меньше по сравнению с "ванильным". Более мощные маяки способны намного превосходить максимальное ускорение машины, доступное в "ванильной" игре.\n\nНачиная с Маяка большого охвата, игроки могут ощутить значительную экономию модулей, а также свободу создавать сложный дизайн, вращающийся вокруг больших зданий или зданий с несколькими входами жидкостей или материалов.\n\nМашины, на которые воздействуют более одного маяка, будут отмечены значком «Перегрузка маяка» и приостановят всё производство. Они по-прежнему будут потреблять минимальное количество энергии. +menu_launching_satellites=[img=item/satellite] Запуск спутников +title_launching_satellites=Запуск спутников +page_launching_satellites_text_1=Вы запустили [color=cyan]__1__[/color] спутников.\n\n[font=heading-2][img=virtual-signal/se-remote-view] Спутниковая навигационная система [__CONTROL__se-remote-view__][/font]\n\nКогда вы запускаете навигационный спутник в космос из спутниковой ракетной шахты, вы получаете доступ к [img=virtual-signal/se-remote-view] спутниковому обзору. Доступ к этому режиму можно получить с помощью клавиши [__CONTROL__se-remote-view__]. В спутниковом режиме ваша камера отделена от вашего персонажа, поэтому вы можете быстро просматривать карту и даже открывать новые области. Есть некоторые вещи, которые нельзя делать в спутниковом режиме, например, непосредственно размещать или убирать объекты. Тем не менее, вы можете многое сделать, например, использовать чертежи, планы сноса, разместить призрачные объекты, заказать соединения проводов, изменить рецепты машин, настройки комбинаторов и т.д.\n\n[font=heading-2][img=virtual-signal/se-planet-orbit] Атлас Вселенной [__CONTROL__se-universe-explorer__][/font]\n\nСеть навигационных спутников также позволяет вам просматривать другие поверхности, такие как другие планеты, луны, пояса астероидов, поля астероидов и орбиты. Нажмите [__CONTROL__se-universe-explorer__], чтобы открыть список известных зон. Если вы запустили спутник, вы можете нажать «Просмотр поверхности», чтобы увидеть, что там есть. Может быть полезно немного разведать планету, прежде чем пытаться туда полететь.\n\nЗапуск спутников также помогает обнаруживать зоны в системе, из которой они запускаются (подробнее см. Открытие зон).\n\n[font=heading-2][img=item/se-satellite-telemetry] Спутниковая телеметрия [/font]\n\nЗапуск спутника возвращает спутниковую телеметрию, жизненно важный компонент в [img=item/se-rocket-science-pack] Ракетостроении.\n\n[font=heading-2][img=item/se-space-probe-rocket] Космические зонды[/font]\n\n[img=item/se-space-probe-rocket-silo] Ракетная шахта для космических зондов - это не шахта для спутниковой ракеты, а предназначена для использования в космосе. Вместо постройки ракеты запускает заранее построенные [img=item/se-space-probe-rocket] Ракеты для космических зондов. Ракета с космическим зондом намного дешевле, чем обычная ракета со спутником, и её можно предварительно собрать на производстве, а не тратить ресурсы в ракетную шахту. Ракетная шахта с космическим зондом может запускать спутники дёшево, а также может запускать более специализированные зонды и сборщики из определенных мест в космосе. +menu_pinned_locations=[img=se-pin-list] Отмеченные местоположения +title_pinned_locations=Отмеченные местоположения +page_pinned_locations_text_1=После разблокировки [img=virtual-signal/se-remote-view] Спутниковой Навигационной Системы вы получаете доступ к "Отмеченным местоположениям", инструменту для быстрого переключения между различными частями вашей фабрики на всех поверхностях, которые вы исследовали.\n\nМестоположения можно отметить с помощью кнопки "плюс" в окне "Навигационный спутник". Вы можете установить горячие клавиши для отмеченных местоположений при их добавлении или редактировании. Это позволяет вам быстро переходить к важным местоположениям нажатием кнопки на клавиатуре без необходимости проходить через Атлас Вселенной.\n\n[font=heading-2]Временные отметки[/font]\nОтмеченные местоположения не обязательно создавать во всплывающем меню создания отметки. Их также можно установить с помощью горячей клавиши «Установить отметку». Она создаёт отмеченное местоположение без названия или значка, но к нему можно немедленно перейти с помощью соответствующей горячей клавиши «Перейти к отметке».\n\n[font=heading-2]Все отметки[__CONTROL__se-remote-view-pins __][/font]\nОтметки отображаются на панели быстрого доступа только для текущей просматриваемой поверхности. Однако горячие клавиши могут использоваться для перехода к отметке на другой поверхности независимо от того, отображается ли она на панели быстрого доступа. Если вам нужен обзор всех отмеченных местоположений, нажмите [__CONTROL__se-remote-view-pins__], чтобы открыть список всех отметок. Он организован по рядам в зависимости от поверхности, на которой находятся отметки. Если поверхность имеет только одну отметку, её строка будет свернута в строку её родительской звезды.\n\n[font=heading-2]AAI Programmable Vehicles[/font]\nГорячие клавиши по умолчанию для установки и переключения на отмеченные местоположения конфликтуют с горячими клавишами по умолчанию для создания и выбора групп управления для программируемых транспортных средств AAI. Если вы используете оба мода, вам нужно будет настроить горячие клавиши, чтобы добиться ожидаемого поведения. +menu_zone_discovery=[img=virtual-signal/se-planet-orbit] Открытие зон +title_zone_discovery=Открытие зон +page_zone_discovery_text_1=В этой области космоса есть много звёзд, планет, лун, поясов астероидов и полей астероидов.\n\n[font=heading-2]Навигационный спутник[/font]\nВы можете запустить навигационный спутник, чтобы обнаружить случайную планету, луну или пояс астероидов в той же звёздной системе, в которой был запущен спутник. Если в этой системе больше нечего открывать, то вместо этого он может открыть новые звёзды, но не может обнаружить ничего, вращающегося вокруг других звезд, или чего-либо в глубоком космосе.\n\n[font=heading-2]Исследование открытия зон[/font]\nВы можете использовать космические телескопы для поиска новых зон. Это достигается с помощью исследования «Открытие зон». Базовое исследование обнаружения зоны может найти случайную звезду, планету, луну или пояс астероидов.\n\n[font=heading-2]Исследование обнаружения целевой зоны[/font]\nИсследование обнаружения целевой зоны такое же, как и базовое исследование, но если вы выбрали предпочтительный ресурс (см. ниже), оно будет исследовать в областях с большей вероятностью появления этого ресурса, поэтому вы с большей вероятностью обнаружите зону с этим ресурсом. Имейте в виду, что планету нельзя открыть, пока не откроете её звезду, и луну нельзя открыть до открытия её планеты. Не ждите, что каждый раз найдете то, что ищете.\n\n[font=heading-2]Исследование по обнаружению зоны глубокого космоса[/font]\nИсследование по обнаружению зоны глубокого космоса ищет только интересующие области в глубоком космосе и это единственный способ обнаружить поля астероидов. Поля астероидов - единственное место, где можно найти Наквитит. Исследование дальнего космоса не может быть нацелено на ресурсы.\n\n[font=heading-2]Предпочтение при обнаружении целевой зоны:[/font] +menu_cargo_rockets=[img=virtual-signal/se-cargo-rocket] Грузовые ракеты +title_cargo_rockets=Грузовые ракеты +page_cargo_rockets_text_1=Грузовые ракеты запускаются из Грузовой ракетной шахты, также известной как Стартовая площадка.\n\nВы запустили [color=cyan]__1__[/color] грузовых ракет.\n\nМодификатор потери груза основан на технологии: Максимальный процент потерь уменьшен на [color=cyan]__2__%[/color].\n\nМодификатор живучести вашей ракеты основан на технологии: Шанс потери снижен на [color=cyan]__3__%[/color].\n\nМодификатор возможности повторного использования вашей ракеты основан на технологии: [color=cyan]__4__[/color] +/- до 10 (максимум 100) деталей восстановлено.\n\n[font=heading-2]Начало работы[/font]\n\nПеред запуском грузовых ракет вам необходимо запустить спутник в ракете (стандартная ракетная шахта в "ванильной" Factorio), мод Space Exploration должен быть установлен.\n\nКак только вы построили грузовую ракетную шахту, вам нужно построить и заправить свою ракету:\n\n • 100 секций грузовой ракеты в инвентаре. 20 из них будут восстановлены из ракеты в пункте назначения, и больше при соответствующем исследовании.\n • 1 космическая капсула в инвентаре. Её всегда можно найти в пункте назначения, и вы сможете вернуться домой с орбиты.\n • Много жидкого ракетного топлива, заливающегося в одно из 8 соединений рядом по углам. Количество необходимого топлива зависит от радиуса планеты, с которой вы запускаете, и расстояния до пункта назначения. Если вы используете опцию пункта назначения «Любая посадочная площадка с названием», будет залито достаточно топлива для любого из допустимых пунктов назначения.\n\nВы можете войти в грузовую ракетную шахту через дверь спереди (нажав __CONTROL__toggle-driving__). Это позволит вам улететь на ракете. У вас также должен быть реактивный костюм и канистры с жизнеобеспечением, чтобы вы не умерли при попадании в космос.\n\nВашей первой ракете некуда будет приземлиться, поэтому она будет разобрана, как только груз будет выгружен. Иногда ракеты, нацеленные на посадочную площадку, не попадают в цель и ракета падает. Даже в случае аварии груз остаётся в грузовых отсеках, поэтому вы никогда не потеряете весь груз.\n\nВы должны взять с собой ракетную посадочную площадку и несколько строительных лесов космической платформы, чтобы вы могли построить где-нибудь площадку для следующей ракеты.\n\nЕсли вы построите ракетную посадочную площадку на своей базе перед запуском, вы сможете легко вернуться прямо туда, вместо того, чтобы оказаться в случайном месте, когда вы вернетесь.\n\n[font=heading-2]Пункты назначения[/font]\n\nПосле размещения посадочной площадки убедитесь, что вы обновили пункт назначения ракетной шахты на посадочную площадку, а не на случайную точку на орбите. Вы можете сделать это лично или с помощью Спутникового удаленного просмотра (горячая клавиша «N»). Однако ракеты не будут запускаться на посадочную площадку, содержащую предметы, поэтому обязательно опустошите её.\n\nБолее отдалённые пункты назначения имеют менее надежную доставку. Некоторые типы мест назначения, такие как поля астероидов, имеют дополнительные штрафы за безопасность, но их можно уменьшить с помощью исследований.\n\n[font=heading-2]Базовая автоматизация[/font]\n\nРакетная шахта выдает сигналы о количестве деталей, уже загруженных в ракету. Вы можете поставить условие для манипулятора [Секции грузовой ракеты < 100], чтобы убедиться, что он не заполнит ракету лишними секциями.\n\nЕсли вы настроили триггеры запуска на шахте, она запустится автоматически, но ракета не взлетит автоматически, если посадочная площадка не пуста (иначе груз может не поместиться).\n\n[font=heading-3]Входные сигналы[/font]\n\n[img=virtual-signal/signal-green] Зеленый сигнал: может инициировать запуск, если шахта настроена на запуск, который использует зеленый сигнал.\n\n[font=heading-3]Выходные сигналы[/font]\n\n[img=virtual-signal/signal-E] Сигнал E: пустые ячейки\n\n[img=virtual-signal/signal-F] Сигнал F: полные ячейки\n\n[img=virtual-signal/signal-L] Сигнал L: Жидкое ракетное топливо, необходимое для всех потенциальных пунктов назначения, указанных в настройке пунктов назначения.\n\n[img=virtual-signal/se-cargo-rocket] Сигнал грузовой ракеты: если ракета собрана (т.е. 1 капсула и 100 деталей ракеты), то возвращается значение 1.\n\n[img=item/se-space-capsule] Сигнал ракетной капсулы: любые капсулы, используемые в конструкции ракеты, добавляются к количеству капсул в грузовом инвентаре.\n\n[img=item/se-cargo-rocket-section] Сигнал секции грузовой ракеты: любые секции, используемые в конструкции ракеты, добавляются к количеству любых секций в грузовом инвентаре.\n\n[img=fluid/se-liquid-rocket-fuel] Сигнал жидкого ракетного топлива: общее количество жидкого ракетного топлива в шахте. +menu_delivery_cannons=[img=item/se-delivery-cannon] Доставочные пушки +title_delivery_cannons=Доставочные пушки +page_delivery_cannons_text_1=Доставочные пушки - это пушки-рельсотроны с межпланетным радиусом действия. Они предназначены для стрельбы прочными однородными ресурсами, способными выдержать внезапное ускорение. Они не могут стрелять сложными промышленными промежуточными компонентами или конструкциями.\n\nДоставочная пушка имеет только цель, она не имеет никакого представления о том, что находится в этой точке, и будет стрелять полезной нагрузкой, пока у неё есть энергия и заполненная доставочная капсула. Если вы хотите добавить условия к способности пушки стрелять, вам нужно ограничить способность пушки загружать ресурсы или капсулы.\n\nКогда капсула доставки приземляется на землю, она повреждает область и большая часть ресурсов уничтожается. Сундук доставочной пушки может безопасно поймать капсулу, пока сундук не полон. У вас может быть несколько пушек, стреляющих по одному и тому же сундуку с разными ресурсами.\n\nРекомендуется либо оставлять целевые сундуки пустыми, либо ограничить ввод пушек с помощью передачи сигнала.\n\nДоставочные пушки имеют энергоёмкость 1 ГДж и потребляют 50 МВт при зарядке. Дальность действия доставочной пушки ограничена количеством энергии, которое она может хранить. Стрельба в более отдалённые места требует больше энергии. Некоторым направлениям может потребоваться больше энергии, чем может хранить доставочная пушка, поэтому она никогда не будет стрелять в это место. Вы можете установить станцию ретрансляции с доставочной пушкой на полпути, чтобы отправлять груз в 2 этапа. +menu_steam_power=[img=item/se-big-turbine] Паровая энергия +title_steam_power=Паровая энергия +page_steam_power_text_1=Паровая энергетическая система в Исследовании космоса значительно расширена. Появились новые способы производства тепла и пара, а также новые способы потребления пара для производства электроэнергии.\n\n[font=heading-2][img=item/se-electric-boiler] Электрические бойлеры[/font]\n\nВ то время как Бойлер может производить пар только с использованием источников топлива, Электрический бойлер производит пар, используя электричество. Пар, производимый Электрическим бойлером, содержит меньше энергии, чем электричество, используемое для превращения воды в пар, поэтому он бесполезен для нормального производства электроэнергии и не может использоваться для бесконечного энергетического цикла. Вместо этого пар можно хранить в резервуарах для хранения, экономя энергию, чтобы впоследствии ее можно было использовать для производства энергии. Это может обеспечить более высокую емкость хранения энергии, чем аккумуляторы той же стоимости, но менее энергоэффективно, чем аккумуляторы. Пар с более высокой температурой хранит больше энергии на единицу площади.\n\nЭлектрический бойлер может производить пар с более низкой температурой для использования в рецептах, требующих пара любой температуры, или кипятить воду, чтобы избавиться от неё.\n\n[font=heading-2][img=item/se-condenser-turbine] Конденсационные турбины[/font]\n\nВ некоторых местах в Исследовании космоса отсутствуют какие-либо естественные источники воды (например, орбиты или безводные планеты). В этих местах использование энергии пара с паровыми турбинами может показаться бесполезным, поскольку постоянный поток воды, необходимый для паровых турбин, не может быть полностью обеспечен из внешних источников. В таких случаях очень удобны Конденсационные турбины. Они действуют так же, как обычная паровая турбина с одним ключевым отличием: вместо того, чтобы выбрасывать входящий пар в атмосферу, пар конденсируется обратно в воду и выводится из турбины. Это позволяет использовать Конденсационные турбины (в основном) в замкнутом контуре, где требуется лишь небольшое количество воды для доливки системы. Обратите внимание, что Конденсационные турбины немного менее энергоэффективны, чем паровые турбины, а это означает, что вы получите немного меньше энергии из того же количества тепла при прохождении через Конденсационные турбины вместо паровых турбин; это компромисс для сохранения воды.\n\n[font=heading-2][img=item/se-big-turbine] Высокотемпературный пар[/font]\n\nВ определённый момент использование пара для создания огромного количества энергии начинает становиться громоздким из-за количества требуемых паровых турбин. Чтобы обойти эту проблему масштабирования, вместо обычного пара можно использовать высокотемпературный пар. Производимый высокотемпературными теплообменниками и потребляемый высокотемпературными турбинами-генераторами, этот высокотемпературный пар невероятно энергоёмкий. Его можно использовать для значительного сокращения объемов производства энергии из пара. Для использования высокотемпературных теплообменников необходим источник тепла. Ядерные реакторы не могут быть достаточно горячими для работы с высокотемпературными теплообменниками. Вместо этого в качестве источника тепла должен использоваться либо приёмник энергетического луча, либо реактор на антиматерии. Стандартные тепловые трубки не способны передавать высокотемпературное тепло; только наквиевые тепловые трубки способны передавать высокую температуру. Это означает, что до тех пор, пока не будут доступны наквиевые тепловые трубки, высокотемпературные теплообменники должны быть размещены непосредственно рядом с источником высокотемпературного тепла. +menu_lifesupport=[img=item/se-lifesupport-equipment-1] Жизнеобеспечение +title_lifesupport=Жизнеобеспечение +page_lifesupport_text_1=Жизнеобеспечение достигается с помощью оборудования для жизнеобеспечения и канистр жизнеобеспечения. Вам необходимо и то, и другое, чтобы выжить во враждебных условиях.\n\nОборудование жизнеобеспечения и канистры с расходными материалами могут быть изготовлены на фабрике жизнеобеспечения.\n\nКанистры жизнеобеспечения предоставляют ресурсы, необходимые системе для выполнения всех своих ролей, и расходуются постепенно. По мере того, как полоса жизнеобеспечения уменьшается, новые канистры потребляются прямо из вашего инвентаря.\n\nОборудование жизнеобеспечения помещается в оборудование брони, однако, если вы используете реактивный костюм, в него встроено одно средство жизнеобеспечения. Дополнительные элементы жизнеобеспечения, размещенные в решетке оборудования, увеличивают эффективность жизнеобеспечения. Если вы используете оборудование жизнеобеспечения в костюме без двигателя, оно защитит вас на враждебных планетах, но не защитит вас от космического вакуума.\n\n[font=heading-2]Враждебная среда[/font]\nВраждебная среда - это любая область, которая может нанести вред вашему телу, когда вы просто находитесь там. Оборудование жизнеобеспечения предназначено для защиты вас от этих опасностей, обеспечивая соответствующий уровень давления, кислород, воду, питание, терморегуляцию и радиационную защиту. Два основных типа враждебной среды:\n\nКосмос: для правильной работы системы жизнеобеспечения в вакууме требуется космический скафандр (реактивный костюм). Вы не можете использовать в космосе жизнеобеспечение от какого-либо другого типа брони, вы всё равно задохнётесь.\n\nПоверхность: на некоторых планетах и лунах могут быть такие опасности, как радиация, экстремальный холод, сильная жара или кислотная атмосфера, и для них требуется оборудование жизнеобеспечения. (Скоро появится). Планеты также требуют жизнеобеспечения, если используется определенное биологическое оружие (Чумные миры). Поддержку жизни в этих областях может обеспечить реактивный костюм или оборудование, помещённое в любую другую броню. +menu_space_sciences=[img=item/se-astronomic-science-pack-2] Космическая наука +title_space_sciences=Космическая наука +page_space_sciences_text_1=[img=item/se-rocket-science-pack] Первая космическая наука - это Исследовательский пакет ракетостроения. Его можно создать только в космосе, поэтому для его производства вам нужно установить небольшую космическую станцию. Исследовательский пакет ракетостроения и более поздние научные пакеты можно использовать только в космосе, поэтому вам нужно будет запустить и другие научные пакеты и поместить их в мощную лабораторию космических исследований.\n\n[font=heading-2]Специализированная наука[/font]\n\nЭто 4 специальные науки: астрономия, биология, энергия и материалы. Все они управляются данными и следуют процессу проведения экспериментов по сбору данных для суперкомпьютеров, чтобы построить всё более точную модель жизни, Вселенной и всего остального. Все они имеют примерно одинаковый технический уровень, поэтому вы можете выбрать свой порядок развития, однако каждый из них в какой-то степени требует определённого ресурса, поэтому взгляните на свою солнечную систему, прежде чем решать, какую науку исследовать в первую очередь.\n\n[img=item/se-astronomic-science-pack-4] Астрономическая наука сосредоточена в основном на космической логистике.\n\n[img=item/se-energy-science-pack-4] Наука об энергии в основном связана с производством энергии, передачей энергии и высокотехнологичными гаджетами.\n\n[img=item/se-material-science-pack-4] Материаловедение больше ориентировано на тяжелую промышленность и прямые обновления.\n\n[img=item/se-biological-science-pack-4] Биологическая наука сосредоточена на улучшении персонажа, медицине, жизнеобеспечении, биологическом оружии и производительности.\n\n[font=heading-2]Наука о глубоком космосе[/font]\n\n[img=item/se-deep-space-science-pack-1] Наука о глубоком космосе сосредоточена на исследовании межзвёздной пустоты, антивещества и деформирующегося пространства-времени.\n\n[font=heading-2]Советы и хитрости[/font]\n\nСкорость и эффективность производства космической науки резко увеличиваются за счет открытия более совершенных рецептов. Обратите внимание на альтернативные рецепты, которые вы открываете, в частности, рецепты симуляции и открытий.\n\nВысокие бонусы производительности в лабораториях космической науки важны, стоит изучить варианты лучших бонусов.\n\nВы, скорее всего, будете ограничены скоростью, с которой вы можете разрабатывать новые системы, чем потребностями в ресурсах. Не пытайтесь строить слишком большие производства. Сначала создайте что-нибудь простое. Если вы исследовали все доступные технологии, то вам, вероятно, следует поработать над следующим научным пакетом вместо увеличения производства.\n\nВозможно, вам следует отложить увеличение своей ресурсной инфраструктуры до тех пор, пока не достигнете уровня 4 космической науки.\n\nЛучшие модули и лучшие маяки имеют огромное значение для скорости производства. +menu_energy_beams=[img=item/se-energy-transmitter-emitter] Энергетические лучи +title_energy_beams=Энергетические лучи +page_energy_beams_text_1=[font=heading-2]Выбросы корональной массы[/font]\nЗвёзды в этой области часто выбрасывают опасные потоки частиц. Планета или луна нередко попадают в один из этих потоков частиц. Если у вас есть большая база на поражаемой поверхности, вам следует эвакуировать, диверсифицировать или рассредоточить свои активы или построить средство защиты "Зонт" с большим резервом энергии. Если у вас небольшая база, она, скорее всего, останется невредимой. Если поверхность находится под угрозой, предупреждение будет сделано как минимум за 4 часа. Известные угрозы будут перечислены ниже. +page_energy_beam_warning_text=[img=virtual-signal/se-star] Предупреждение: выброс корональной массы направлен на __1__.\nРасчётные требования к защите: __3__ ГВт пиковая мощность, __4__ ГДж на 120 секунд. Расчётное время прибытия: __2__. +page_energy_beams_text_2=[font=heading-2]Зонт: Защита от энергетического луча[/font]\nСредство защиты от энергетического луча, «Зонт», может защитить от выброса корональной массы и космического оружия с использованием энергетического луча. Он работает, поднимая магнитные частицы в защитный пузырь, затем перестраивает и собирает частицы по мере необходимости для рассеивания враждебных энергетических лучей. Единственное требование для работы - это энергия, базовая мощность составляет 10 МВт, но увеличивается в зависимости от силы атакующих лучей. Для защиты от выбросов корональной массы требуется только 1 объект на поверхность, от оружия с энергетическими лучами 1 Зонт может защитить от атакующей мощности до 500 ГВт. Ожидается, что для выброса корональной массы базовая потребляемая мощность для планеты радиусом 5000 и 100% солнечной энергии составит около 160 ГДж за 2 минуты с пиковой потребляемой мощностью 2 ГВт на отметке в 1 минуту. Требуемая мощность увеличивается или уменьшается с множителем солнечной энергии зоны, а для твёрдых тел она увеличивается или уменьшается в зависимости от радиуса относительно базового радиуса 5000. Для луча энергии от Излучателя энергетического луча требования к мощности, как ожидается, будут равны 1/10 мощности луча энергии на цель (после потери эффективности).\n\n[font=heading-2]Пуск энергетических лучей[/font]\nИзлучатель энергетического луча может посылать энергию на различные поверхности. Он может делать это двумя основными способами: либо как способ снабдить энергией удаленную поверхность, «Энергия», либо как режущее лучевое оружие, «Глефа». В режиме «Глефа» луч непрерывно повреждает область, но может перемещаться по целевой поверхности, прорезая путь. Степень повреждения, площадь и скорость луча увеличиваются в зависимости от энергии, вложенной в луч. Режим «Авто-Глефа» имеет автономный выбор цели.\n\nИзлучатель энергетического луча имеет 4 точки подключения, к которым могут подключаться камеры энергетического луча. Камеры могут соединяться в длину или иметь длинный край, соприкасающийся в середине с коротким краем, но не могут соединяться напрямую бок-о-бок. Инжекторы энергетических лучей прикрепляются непосредственно к бокам камер энергетических лучей. Каждый инжектор энергетического луча увеличивает мощность подключенного излучателя энергетического луча. Чтобы принять мощность от луча, вам понадобится приёмник энергетического луча на поверхности цели, выберите его в качестве цели, используя указатель на излучателе. Как только луч будет иметь приёмник в качестве цели, приёмник нагреется. Тепло может отбираться от боковых тепловых соединений для питания теплообменников и турбин. +menu_spaceships=[img=virtual-signal/se-spaceship] Космические корабли +title_spaceships=Космические корабли +page_spaceships_text_1=Космические корабли - это огромные мощные транспортные средства, которые могут запускать в космос множество упакованных структур, предметов и игроков, а затем летать по Солнечной системе и приземляться на другие поверхности.\n\n[font=heading-2]Конструкция космического корабля[/font]\nКосмические корабли состоят из множества плиток и более мелких компонентов, которые соединяются друг с другом, чтобы создать космический корабль вашей собственной конструкции. Вы проектируете космический корабль почти как миниатюрную передвижную базу.\n\nНачните с плана пола космического корабля. Не стройте слишком больших размеров, так как ваши первые несколько космических кораблей будут иметь строгие ограничения по размеру, которые можно расширить путем исследования. Разместите стены космического корабля по краям, чтобы сделать переборки, и убедитесь, что нет зазоров (включая диагонали). Поместите консоль космического корабля где-нибудь внутри, это основная часть космического корабля и пульт управления им. Когда консоль размещена, есть несколько импульсов, по которым консоль определяет, какие части правильно прикреплены, какие части правильно упакованы и что отвалится, если вы попытаетесь взлететь. Если какие-либо квадраты мигают красным, это значит, что есть проблема с вашей конструкцией, которую вы можете диагностировать, проверив консоль космического корабля. Вам также понадобится резервуар ракетного ускорителя и ракетный двигатель космического корабля. Резервуар ускорителя - это то, что хранит топливо, необходимое для полета в космос, и обеспечивает этапы вертикального взлета и посадки. Ракетные двигатели предназначены для более медленного полёта в космосе, чтобы доставить вас к месту назначения. Также рекомендуется какая-либо форма защиты спереди (всегда сверху), потому что туманность, в которой вы находитесь, полна обломков.\n\n[font=heading-2]Структурная нагрузка[/font]\nВначале вы будете очень ограничены размером космического корабля из-за пределов структурных напряжений вашего технологического уровня. Дополнительные технологии позволяют строить космические корабли большего размера. Структурная нагрузка рассчитывается в 2 этапа:\n\nЭтап A. Нагрузка на корпус в основном зависит от размеров и формы корабля.\nЭтап Б. Нагрузка на контейнеры зависит от вместимости хранилищ для предметов и жидкостей на корабле.\n\nОбщая структурная нагрузка равна тому, какой из факторов нагрузки больше, два значения не суммируются. Если нагрузка на корпус составляет 250, а нагрузка на контейнеры - 280, общая нагрузка будет равна 280.\n\nПолоса нагрузки на корпус показывает 3 значения. Первый - это текущее напряжение корпуса, основанное на пустых клетках космического корабля. До 10% размера корабля не учитываются в качестве напряжения целостности, если это пустые клетки космического корабля. Это свободное пространство не учитывается при расчете напряжений и используется для коридоров. Второе значение - это нагрузка на корпус без скидки, оно полезно для оценки значения нагрузки на корабль, которую вы получите, если заполните внутреннюю часть конструкциями. Третье значение - это максимальная нагрузка, которую допускает ваш технический уровень.\n\nИсключительно длинные тонкие корабли или корабли с очень тонкими секциями посередине менее прочны, чем более округлые конструкции. Широкие корабли прочны, но должны очищать больше астероидов.\n\nНекоторые сооружения имеют особые эффекты на целостность или скорость корабля, например, Нексус.\n\n[font=heading-2]Обтекаемость[/font]\nЭта область космоса находится в пылевой туманности. Если вы оптимизируете обтекаемость своего космического корабля, вы сможете увеличить его максимальную скорость примерно на 30%. Следует избегать создания плоской передней части, но не нужно делать клин. До 1/3 передней части вашего космического корабля может быть плоской без штрафа. Округлые формы тоже подойдут. Вы можете вручную запустить проверку целостности, чтобы увидеть, каков уровень обтекаемости.\n\n[font=heading-2]Скорость[/font]\nСкорость корабля зависит от тяги двигателей и веса корабля (приближен к структурной нагрузке). Двигатели могут быть размещены внутри или на обшивке корабля, но двигатели в задней части корабля с пустым пространством позади них более эффективны (улучшение примерно на 25%).\n\n[font=heading-2]Дальние перевозки[/font]\nЧто касается дальних путешествий, стоит отметить, что вы можете многое сделать в спутниковом режиме, пока ваше тело находится в пути. Вы также можете отдавать приказы космическим кораблям удалённо через спутниковый канал связи.\n\n[font=heading-2]Сборочные автоматы[/font]\n[color=#ffaaaa] Предупреждение. Сборочные автоматы, предназначенные только для космоса, смогут использовать рецепты, общие для других наземных структур, если космический корабль находится на суше. Если космический рецепт установлен во время приземления космического корабля, ингредиенты будут потеряны. Некоторые наземные сборочные автоматы могут работать в космосе, но потеряют возможность использовать модули производительности в космосе. Если космический корабль запускается с модулями производительности на этих машинах, модули производительности уничтожаются.[/color]\n\n[font=heading-2]Сигналы космического корабля[/font]\nВерхняя правая часть консоли космического корабля может быть подключена сигнальными проводами отдельно от основной конструкции, так как она выводит свои собственные сигналы:\n[img=item/se-spaceship-console] Число сигнала консоли указывает ID космического корабля.\n[img=virtual-signal/signal-speed] Число сигнала скорости указывает скорость космического корабля: -1, если он остановлен, -2, если стоит на якоре.\n[img=virtual-signal/signal-distance] Сигнал расстояния указывает расстояние до выбранного пункта назначения: -1, если прибыл, -2, если стоит на якоре, -3, если пункт назначения не задан.\n[img=virtual-signal/se-planet-orbit] Четвёртый сигнал указывает текущий пункт назначения, если он есть.\n[img=virtual-signal/signal-D] В некоторых частях космоса есть больше или меньше астероидов, с которыми может столкнуться ваш корабль. Плотность астероидов там, где в настоящее время находится корабль, указывается сигналом D.\n[img=virtual-signal/signal-A] Если космический корабль поставлен на якорь, тогда он указывает идентификатор якорной зоны с помощью сигнала A.\n\n[font=heading-2]Автоматизация космического корабля[/font]\nОсновная структура консоли может принимать входные сигналы с левой стороны:\n[img=virtual-signal/signal-speed] Сигнал скорости устанавливает целевую скорость и включает двигатели. Отрицательный сигнал вместо этого останавливает двигатели.\n[img=virtual-signal/se-spaceship-launch]Сигнал запуска космического корабля запускает его.\n[img=virtual-signal/se-planet-orbit] Сигнал пункта назначения устанавливает пункт назначения (вы можете увидеть сигнал зоны на боковой панели Атласа Вселенной после того, как построите космический корабль).\n\nПримечание: тип сигнала пункта назначения (например, [img=virtual-signal/se-planet-orbit] или [img=virtual-signal/se-asteroid-belt]), и значение/идентификатор сигнала должны совпадать для установки пункта назначения.\n\nПримечание: консоль космического корабля не будет принимать сигналы [img=virtual-signal/se-spaceship-launch] Запуск или [img=virtual-signal/signal-speed] Скорость до тех пор, пока игрок вручную не запустит и не задействует корабль хотя бы один раз. Это сделано для предотвращения случайного запуска спроектированных космических кораблей, когда они всё ещё строятся дронами.\n\nПримечание: консоль проверяет изменения входного сигнала только раз в секунду; для реакции корабля требуется устойчивый сигнал, одиночные импульсы не сработают.\n\n[font=heading-2]Автоматическая посадка[/font]\nЧтобы космический корабль приземлился, консоли необходимо дать пару сигналов якорей, либо:\n"использовать левый зажим" ([img=virtual-signal/se-anchor-using-left-clamp]) с "заякориться к правому зажиму" ([img=virtual-signal/se-anchor-to-right-clamp])\n"использовать правый зажим" ([img=virtual-signal/se-anchor-using-right-clamp]) с "заякориться к левому зажиму" ([img=virtual-signal/se-anchor-to-left-clamp])\n\nЗначение сигнала "использовать ... зажим" должно соответствовать значению зажима на корабле.\nЗначение сигнала "заякориться к ... зажиму" должно соответствовать значению зажима в месте назначения.\nВы можете просмотреть и изменить эти значения на зажимах, открыв пользовательский интерфейс зажима. Если найдено совпадение для сигналов «использовать ... зажим» и «заякориться к ...», подаваемых на консоль корабля, то корабль попытается приземлиться с двумя подключёнными зажимами. Используйте с осторожностью.\n\n[font=heading-2]Зажимы[/font]\nЧтобы установить идентификатор зажима, откройте интерфейс зажима и измените числовое значение сигнала зажима на ID, который вы хотите назначить зажиму. Вам никогда не нужно менять тип сигнала зажима.\n\nВы можете отключить заякоренный зажим, передав ему красный сигнал.\n\n[font=heading-2]Пример посадки[/font]\nУ космического корабля есть левый зажим с ID 315. В графическом интерфейсе этого зажима сигнал [img=virtual-signal/se-anchor-using-left-clamp] со значением 315.\nПоверхность посадки имеет правый зажим с ID 147. В графическом интерфейсе этого зажима сигнал [img=virtual-signal/se-anchor-using-right-clamp] со значением 147.\nЧтобы космический корабль приземлился с помощью этих двух зажимов, на левую сторону консоли корабля должны быть переданы следующие сигналы:\n[img=virtual-signal/se-anchor-using-left-clamp] 315\n[img=virtual-signal/se-anchor-to-right-clamp] 147 +menu_arcospheres=[img=item/se-arcosphere-a] Аркосферы +title_arcospheres=Аркосферы +page_arcospheres_text_1=Аркосферы - это почти идеальные сферы из нанотехнологического кристалла наквия. Они неизвестного происхождения, но чаще всего их можно найти плавающими глубоко в межзвёздном пространстве.\n\nКаждая из них охватывает сверхмерный узел в пространстве-времени и позволяет вам взаимодействовать с небольшим 4-м пространственным измерением. Сферы можно поляризовать, для того чтобы они могли управлять определёнными аспектами пространства-времени, если их перемещать относительно друг друга. Наборы определённых аркосфер могут использоваться для деформации и переплетения пространства-времени в более высокие измерения.\n\n[font=heading-2]Использование[/font]\nАркосферы - это самая уникальная производственная задача в игре. Они используются как инструменты в рецептах, но никогда не уничтожаются, а только изменяются. Основная особенность при их использовании - это циклическое переключение между сферами, которые у вас есть, так что у вас не закончится определенный тип. Есть много способов сбалансировать производство, но несколько комбинаторов могут очень помочь. Если вы застряли, попросите подсказок на Discord или найдите дополнительную информацию в вики по моду Исследование космоса.\n\n[font=heading-2]Собирание[/font]\nАркосферы можно найти, запустив сборщик Аркосфер в поле астероидов. Повторные запуски имеют убывающую результативность. Вы можете получить лучшую отдачу, запустив сбор с разных полей астероидов. +page_arcospheres_text_deep=Аркосфер найдено в глубокой межзвёздной пустоте: [color=cyan]__1__[/color], сборщиков запущено: __2__. +page_arcospheres_text_zone=Аркосфер найдено около __1__: [color=cyan]__2__[/color], сборщиков запущено: __3__. +menu_exploration_journal=[img=item/se-thruster-suit] Журнал исследования +title_exploration_journal=Журнал исследования +page_journal_title_backstory=Проснулся не на той стороне огненного шара +page_journal_text_backstory=Я потерпел крушение на незнакомой планете, вокруг меня горели части небольшого корабля. Моё тело было в синяках, царапинах и подпалинах, но ничего серьёзного. Моя черепно-мозговая травма была явно более серьёзной, сильная головная боль и ослепляющий свет. Что ещё хуже, я не мог вспомнить, как я сюда попал, или даже кем я был, кроме имени и смутного ощущения цели... построить. Но кроме этого, я не мог вспомнить, что строить и как. Сначала я думал, что моя голова была повреждена в аварии, и воспоминания вернутся, но этого не произошло. Тот факт, что мои журналы данных также были пустыми или переформатированными, заставил меня задуматься над другими объяснениями. +page_journal_title_satellite_launch=Глаз в небе +page_journal_text_satellite_launch=Мне удалось запустить спутник на орбиту. Это важная веха, которую стоит отметить, но предстоит ещё многое сделать. Это только начало. +page_journal_title_cargo_launch=Бесконечность не предел +page_journal_text_cargo_launch=Теперь я могу запустить себя в космос. Я больше не привязан к этой скале, которую назвал своим домом. Небеса манят. +page_journal_title_entered_vault=Охота за реликвиями +page_journal_text_entered_vault=Я вошёл в пещеру под пирамидальным выступом на __1__ и обнаружил тёмную и опасную комнату. На полу были начертаны два древних картуша, один большой, другой маленький. У них обоих было несколько символов на поверхности, а также другие круги и линии. Глиф в центре большого картуша казался наиболее важным в информации, которую пыталась передать система. Какой бы ни была информация, её формат отличается от всего, что я видел. Позади картушей находился какой-то приподнятый цилиндр с мощным устройством, которое я могу использовать в качестве модуля. Модули такого качества настолько ценны, что стоит попытаться найти побольше таких конструкций. Возможно, пора заняться археологией. +page_journal_title_found_gate=Аномалия +page_journal_text_found_gate=В аномалии был обнаружен какой-то огромный артефакт в форме кольца. Две вещи сразу бросаются в глаза даже издали: 1. Он древний. 2. Технология полностью отличается от моей. Что бы это ни было, теперь оно уничтожено. +page_journal_title_found_gate_ship=Корабль аномалии +page_journal_text_found_gate_ship=В аномалии возле кольцевого артефакта была обнаружена часть довольно большого заброшенного космического корабля. Технология корабля похожа на мою, но немного более... доработана. В любом случае, технология явно отличается от технологии кольца. Рисунок обломков создает впечатление, что он был разрезан пополам и/или столкнулся с кольцевой структурой. Стоит собрать всё, что возможно. +page_journal_title_found_gate_ship_authenticated=Аутентификация корабля аномалии +page_journal_text_found_gate_ship_authenticated=Заброшенный корабль в аномалии просканировал меня и «подтвердил мою биоподпись». Я не знаю, означает ли это, что в нём каким-то образом есть запись обо мне, или, может быть, просто любой случайный кибернетический человек достаточно хорош по сравнению с кусаками и роботами-убийцами. В сообщении говорилось, что код доступа к шлюзу судна - 2236067964. Судовые журналы доступны, но большие разделы отсутствуют или повреждены. +page_journal_title_found_gate_ship_log=Журнал корабля аномалии +page_journal_text_found_gate_ship_log_intro=Demodamas 82B: передовой строительный крейсер AAI Hypernet. Содержание судового журнала: +page_journal_text_found_gate_ship_log=...'? номинальный.\nПредупреждение о доступе: AAI Thyris Gate 17: Межгалактический прототип v0.1.93 является засекреченным объектом. Требуется аутентификация AAI на уровне L90 или выше. Пройдите аутентификацию немедленно, иначе будете уничтожены.\nЖурнал доступа: доступ к AAI Thyris Gate 17 с аутентификацией с использованием учетных данных Кибернетический Инженер AAI Hypernet L97 ID__1__.\nЖурнал доступа: Начин¶Oata^...\n...'?ris Gate 17 проектор 8 - частота заблокирована. Энергия на безопасном уровне 216%. Стабильность сингулярности: 99,4%.\nНавигационный журнал: AAI Thyris Gate 17 преобразован в вектор проекции [SV __2__]. Прогнозируемая цель: Галактика Wube > Фенестра (аномалия, не исследована). Аутентифика¶Oata^...\n...'?вигационное предупреждение: Межгалактическая гипертрубка (переопределено).\nНавигационное предупреждение: в пункте назначения нет известных гиперврат (переопределено).\nПредупреждение о страховании: нет договора страхования. Доступные контракты: 0.\nПримечание ИнформаТрона: нет доступных договоров страхования с условием: «материализация без врат». Вы уверены, что это безопасно? [ответить.игнорировать.игнорировать_всегда]\nПутевой журнал: вход в аномалию Thyris > Гипертрубка AAI Thyris Gate 17 выровнена с [SV __2__].\nПутевой журнал: прыжок к гипертрубке [SV __2__] заверш¶Oata^...\n...'?вой журнал: Обновление местоположения: Гипертрубка рядом с аномалией Thyris, выравнивание [SV __2__], стабильность на 98%, диаме¶Oata^...\n...'?вой журнал: Выход из гипертрубки в неисследованном месте аномалии Фенестра.\nПредупреждение: неожиданное столкновение, пересечение с неизвестным объектом [4ae4c8d28f2], начало сканирования объекта [4ae4c8d28f2].\nЖурнал повреждений: 13,2% повреждений. Источник: Ущерб от удара в результате столкновения с неизвестным пересекающимся объектом [4ae4c8d28f2].\nЖурнал повреждений секций: Секции, сообщающие о повреждениях: A5, A6, A9, B6, B7, B8, C7. Не отвечающие секции: A7, A8. (Достоверность 86%)\nЖурнал кибернетических инженеров: Признаки жизни 99%. (Достоверность 34%)\nПутевой журнал: попытка маневра уклонения RS100LT30.\nПутевой журнал: выход из гипертрубки завершен с ошибками.\nПутевой журнал: обновление локации: неисследованная аномалия Фенестра.\nЖурнал сканирования: завершено сканирование объекта [4ae4c8d28f2], ясность 0,002 кв.м. на расстоянии -48,76 м (достоверность 99,9%).\nПодробный журнал сканирования: [4ae4c8d28f2] Масса 92,5¶Oata^...\n...'?оверность).\nПодробный журнал сканирования: [4ae4c8d28f2] Состав: Искусственный. 34% Наквий, 29% Гольмий, 37% неизвестных композитов (достоверность 89%).\nПодробный журнал сканирования: [4ae4c8d28f2] Размер: Приближённо цилиндр 68¶Oata^...\n...'?ал сканирования: [4ae4c8d28f2] Энергетическая сигнатура: поток 54 ГВт, профиль излучения 2,8 кДж / 1,7 МДж / 1,6 МДж / 0,62 Дж, профиль светимости 5,86 ГДж [051e376392b8d3f8]. (Достоверность 98%).\nПодробный журнал сканирования: [4ae4c8d28f2] Идентификатор: искусственная конструкция, производитель неизвестен, описание: приблизительное кольцо с узелками, восьмигранник. (Достоверность 0,3%).\nПодробный журнал сканирования: [4ae4c8d28f2] Оценка возможностей конструкции: Гиперврата (достоверность 47%). Другое: оружие 42%, энергия 35%, вычисления 17%, сканирование 12%, промышленность 9%, космический корабль 7%, среда обитания 2%.\nЖурнал повреждений: 68,2% урона. Нарушение целостности, отсоединяются секции. Источник: Вторичные ударные волны из-за столкновения с объектом [4ae4c8d28f2].\nЖурнал повреждений секций: Критическое состояние реактора. Секции, сообщающие о повреждениях: D5, E4, E5, E6, F5. Секции не отвечают: A1, A2, A3, A¶Oata^...\n...'?ал повреждений: Аварийная отстыковка разведывательного шаттла 2. Прогноз траектории: Calidus > Nauvis.\nЖурнал повреждений: 91,7% повреждений. Нарушение целостности, секции пiО|в|\Р... +page_journal_title_spaceship_victory=Победа: Космический корабль +page_journal_spaceship_victory=Я построил чрезвычайно быстрый и мощный космический корабль и активировал варп-двигатель. Потребовалось некоторое время, чтобы двигатель стабилизировался до практического сверхсветового состояния, но как только это произошло, я смог войти в криосон для последующего путешествия домой, в далёкую-далёкую галактику. Я оставляю позади автономную межзвёздную империю, построенную с нуля моей собственной рукой. Мое наследие в этом пространстве будет жить. +page_journal_title_gate_victory=Победа: Древние врата +page_journal_gate_victory=Огромный артефакт-кольцо, древние межгалактические врата, в конце концов был отремонтирован, насколько я мог. Приложив тяжёлые приспособления и изобретательность, мне наконец удалось заставить его работать. Я привязал поле искажения к местным звёздам, декодировал нечисловую систему координат глифа и реконструировал систему набора номера. Я чувствую себя искажённым такими инопланетными концепциями, но это работает, и я наконец-то сделал портал домой. Поездка домой, в далёкую-далёкую галактику, заняла всего мгновение. Я оставляю позади автономную межзвездную империю, построенную с нуля моей собственной рукой. Моё наследие в этом пространстве будет жить. +menu_archeology=[img=entity/se-pyramid-a] Археология +title_archeology=Археология +page_archeology_text_1=Я начал искать больше больших геометрических структур. Спутники нашли [color=cyan]__1__[/color] подходящих форм на следующих планетах: +page_archeology_text_2=Щёлкните на записи для просмотра через спутник. +menu_starmapping=[img=technology/se-zone-discovery-random] Картографирование звёзд +title_starmapping=Картографирование звёзд +page_starmapping_text_1=Картографирование звёзд достигается путем многократного исследования технологии: [img=technology/se-long-range-star-mapping] [color=cyan]Картографирование отдалённых звёзд[/color]. Это исследование ищет интересные образцы звёзд в других галактиках. Есть ли в этом практическая польза? Вероятно, нет.\n\nКоординаты даны в стандартном векторном формате (SV), выровненном на основе космического фонового излучения.\n\nВы уже нанесли на карту [color=cyan]__1__ [/color] заметных областей. +technology-unlocked=Разблокирована новая технология в дереве технологий. __1__ __2__ +universe-resources-changed-warning=[img=utility/danger_icon] [color=red]Все ресурсы были скорректированы в соответствии с новыми настройками. Это деструктивный процесс. Если это было вызвано обновлениями мода, это неизбежно. Если это было вызвано случайным добавлением или удалением модов, не сохраняйте игру.[/color] +starmapping-found-constellation=Отмечено далёкое созвездие __1__, координаты сохранены в [img=virtual-signal/informatron] Информатрон. +starmapping-found-constellation-informatron=[font=heading-1]__1__[/font] по координатам [SV __2__] +gate-portal-coordinates=Анализ вектора искажения: [SV __1__] +discovered-glyph-vault=[img=item/satellite] Навигационный спутник: Обнаружена геометрическая структура на __1__. +beacon-overload=Перегрузка маяка +beacon-overload-ended=Перегрузка маяка завершилась +lifesupport_title=[img=item/se-lifesupport-equipment-1] Жизнеобеспечение +lifesupport_efficiency_spacesuit=Эффективность жизнеобеспечения: __1__ +lifesupport_efficiency_no_spacesuit=Эффективность жизнеобеспечения: __1__ (0% в космосе). +lifesupport_suit=Продолжительность жизнеобеспечения костюма: __1__ с +lifesupport_reserves=Запас жизнеобеспечения в инвентаре: __1__ с +lifesupport_suit_est=Продолжительность жизнеобеспечения костюма: __1__ с (в космосе) +lifesupport_reserves_est=Запас жизнеобеспечения в инвентаре: __1__ с (в космосе) +lifesupport_environment_space=Окружающая среда: космос +lifesupport_environment_spaceship-interior=Окружающая среда: космический корабль (жизнеобеспечение не требуется) +lifesupport_environment_planet=Окружающая среда: планета (жизнеобеспечение не требуется) +lifesupport_environment_moon=Окружающая среда: луна (жизнеобеспечение не требуется) +lifesupport_environment_plague-planet=Окружающая среда: чумная планета +lifesupport_environment_plague-moon=Окружающая среда: чумная луна +lifesupport_environment_unknown=Окружающая среда: защищённая +player_track_glyphs=[img=item/satellite] Укажите спутникам искать похожие структуры. +page_archeology_pyramid_link=[img=entity/se-pyramid-b] Обнаружена геометрическая структура на __1__ __2__. +discovery_look_for_resource_caption=__1__\n__2__ +discovery_look_for_resource_tooltip=Сосредоточьте усилия по поиску этого ресурса. +comma_separate=__1__, __2__ +placement_restriction_line=[font=default-bold][color=#f5cb48]Невозможно разместить на: __1__[/color][/font]\n__2__ +collision_mask_water=Вода +collision_mask_land=Земля +collision_mask_space_platform=Космическая платформа +collision_mask_spaceship=Космический корабль +structure_name_grounded=__1__ (на земле) +structure_name_spaced=__1__ (в космосе) +structure_description_grounded=__1__\n[color=#ff0000]Некоторые рецепты недоступны, пока на земле.[/color] +structure_description_spaced=__1__\n[color=#ff0000]Невозможно использовать продуктивность в космосе.[/color] +cannot-open-nav-view-in-editor=Просмотр со спутника не может быть открыт в режиме редактора. +tile_warning=[color=red]Изменение клеток под объектами может удалить объект.[/color] +please-consider-patreon=[font=heading-1]Вам нравится Исследование космоса? Подумайте о поддержке меня на Patreon: [color=#f5cb48]https://www.patreon.com/earendel[/color][/font]\nПоддержавшие могут добавить в игру планету или луну на основе их собственного дизайна. +delivery_cannon_label_energy=Энергия: __1__ +delivery_cannon_label_payload=Полезный груз: __1__ +delivery-cannon-coordinates-set=Координаты доставки [X:__1__ Y:__2__]. Нажмите [__CONTROL__se-remote-view__] для выхода из спутникового режима. +delivery-cannon-coordinates-pasted=Координаты доставки установлены: [X:__1__ Y:__2__]. +delivery-cannon-invalid-coordinates=Нет места назначения +delivery-cannon-valid-coordinates=X:__1__ Y:__2__ +deliver-cannon-force-mismatch=Невозможно вставить настройки доставочной пушки другой команды. +relative-window-settings=Настройки +unit-capsule=Капсула (__1__) +climate_water_none=Безводный +climate_water_low=Лужи +climate_water_med=Озёра +climate_water_high=Моря +climate_water_max=Океан +climate_moisture_none=Пустыня +climate_moisture_low=Бесплодный +climate_moisture_med=Влажный +climate_moisture_high=Сырой +climate_moisture_max=Насыщенный +climate_aux_very_low=Землеподобный +climate_aux_low=Необычный +climate_aux_med=Разноцветный +climate_aux_high=Эксцентричный +climate_aux_very_high=Экзотический +climate_temperature_bland=Мягкая +climate_temperature_temperate=Умеренная +climate_temperature_midrange=Средняя +climate_temperature_balanced=Тепло и прохладно +climate_temperature_wild=Горячо и холодно +climate_temperature_extreme=Огонь и лёд +climate_temperature_cool=Прохладно +climate_temperature_cold=Холодно +climate_temperature_vcold=Очень холодно +climate_temperature_frozen=Заморожено +climate_temperature_warm=Тепло +climate_temperature_hot=Горячо +climate_temperature_vhot=Обжигающе +climate_temperature_volcanic=Вулканическая +climate_trees_none=Без деревьев +climate_trees_low=Кустарники +climate_trees_med=Заросли +climate_trees_high=Деревья +climate_trees_max=Леса +climate_cliff_none=Равнина +climate_cliff_low=Плавная +climate_cliff_med=Холмистая +climate_cliff_high=Каньоны +climate_cliff_max=Горы +climate_homeworld=Родной мир (свой климат) +energy_transmitter_gui_title=[img=entity/se-energy-transmitter-emitter] Энергетический луч +energy_transmitter_label_transfer=Мощность излучателя: __1__ +energy_transmitter_label_efficiency=Эффективность передачи: __1__ +energy_transmitter_label_efficiency_atmo=Эффективность передачи: __1__ (-50% из-за атмосферы) +energy_transmitter_label_off=Выкл +energy_transmitter_tooltip_off=Выключить луч +energy_transmitter_label_energise=Энергия +energy_transmitter_tooltip_energise=Передаёт энергию в приёмник энергетического луча +energy_transmitter_label_glaive=Глефа +energy_transmitter_tooltip_glaive=Луч, который может быть нацелен и двигаться. Повреждения и скорость зависят от энергии. +energy_transmitter_label_auto_glaive=Авто-Глефа +energy_transmitter_tooltip_auto_glaive=Луч, который нацеливается и уничтожает автоматически. Повреждения зависят от энергии. +energy-transmitter-coordinates-set=Координаты луча [X:__1__ Y:__2__]. Нажмите [__CONTROL__se-remote-view__] для выхода из режима спутника. +energy-transmitter-coordinates-pasted=Координаты луча [X:__1__ Y:__2__]. +energy-transmitter-no-enemies-found=Авто-Глефа не обнаружила врагов. Излучатель __1__ отключается. +alert-cme-eta=[img=virtual-signal/se-star] Предупреждение: выброс корональной массы направлен на __1__. Расчётное время прибытия: __2__.\nСмотрите "Энергетические лучи" в [img=virtual-signal/informatron] Информатроне [__CONTROL__informatron__] для подробной информации. +alert-cme-arrived=[img=virtual-signal/se-star] [color=red]Предупреждение: Выброс корональной массы достиг __1__[/color] +alert-cme-stream=[img=virtual-signal/se-star] Обнаружен выброс корональный массы __1__ +alert-cme-passed=[img=virtual-signal/se-star] Выброс корональной массы завершён. +no-coordinates-set=Координаты не заданы. +satellite=Спутник +satellite-required=Требуется спутник. +the_satellite=Спутник +satellite_invalid_launch_location=Ошибка спутника: Неверное место запуска. +probe_invalid_launch_star=Неверное место запуска: [img=item/se-star-probe] Звёздный зонд должен быть запущен с ближней солнечной орбиты. +probe_invalid_launch_belt=Неверное место запуска: [img=item/se-belt-probe] Астероидный зонд должен быть запущен из пояса астероидов. +probe_invalid_launch_field=Неверное место запуска: [img=item/se-void-probe] Зонд межзвёздной пустоты должен быть запущен из поля астероидов. +arcosphere_collector_invalid_launch=Неверное место запуска: [img=item/se-arcosphere-collector] Зонд межзвёздной пустоты должен быть запущен из поля астероидов. +charge-mode-fast=Режим быстрой зарядки: потребление во время ожидания уменьшено, максимальное потребление увеличено, ёмкость буфера увеличена. Следите за скачками мощности. +charge-mode-normal=Обычный режим зарядки: максимальное потребление уменьшено, потребление во время ожидания увеличено, ёмкость буфера уменьшена. +menu_coordinate_logs=[img=entity/se-glyph-a-energy-47] Журналы координат +title_coordinate_logs=Журналы координат +page_coordinate_logs_text_1=История последовательностей глифов, опробованных в артефакте, с соответствующими координатами в порядке убывания (верхняя запись - самая последняя).\n\nКоординаты даны в формате стандартного вектора (SV), выровненные на основе космического фонового излучения. +page_coordinate_logs_button_clear_caption=[img=virtual-signal/se-remove] Очистить журнал +page_coordinate_logs_text_empty=Журнал координат успешно очищен. +page_coordinate_logs_glyph_entry=__1__: SV +victory-message-spaceship=[font=heading-1]Двигатель искажения нексуса достиг критической скорости (250).\n[color=#f5cb48]Поздравляем, вы выполнили условие победы в Исследовании космоса: Космический корабль![/color][/font]\nЕсли вам понравилась поездка, пожалуйста, поддержите меня на Patreon: [color=#f5cb48]https://www.patreon.com/earendel[/color] +victory-message-spaceship-player=[color=#f5cb48]Победа: Космический корабль.[/color] Ваш [img=virtual-signal/informatron] Журнал исследования [__CONTROL__informatron__] обновлён. +victory-message-gate=[font=heading-1]Портал стабилен и ведёт обратно домой.\n[color=#f5cb48]Поздравляем, вы выполнили секретное условие победы в Исследовании космоса: Древние врата![/color][/font]\nЕсли вам понравился этот уникальный путь открытий, пожалуйста, поддержите меня на Patreon: [color=#f5cb48]https://www.patreon.com/earendel[/color] +victory-message-gate-player=[color=#f5cb48]Победа: Древние врата.[/color] Ваш [img=virtual-signal/informatron] Журнал исследования [__CONTROL__informatron__] обновлён. +arcosphere-random=Этот рецепт время от времени будет переключаться на альтернативный рецепт с таким же названием. Выходные аркосферы эффективно рандомизируются, но количество выходящих аркосфер гарантированно совпадает с входящими. +ruin=Руины +mysterious-structure=Таинственная структура +interburbulator_fail_easy_1=Нет. +interburbulator_fail_easy_2=Старайся. +interburbulator_fail_easy_3=Безнадёжно. +interburbulator_fail_easy_4=Не-а. +interburbulator_fail_easy_5=Думаешь, это сработает? +interburbulator_fail_easy_6=Неправильно. +interburbulator_fail_easy_7=Ниже 02? +interburbulator_fail_easy_8=Отрицательно. +interburbulator_fail_easy_9=Негативно. +interburbulator_fail_easy_10=Посчитай. +interburbulator_fail_easy_11=Неверно. +interburbulator_fail_easy_12=Интерполируй. +interburbulator_fail_easy_13=Пытайся ещё. +interburbulator_fail_easy_14=Давай, человек. +interburbulator_fail_easy_15=Разве это не весело? +interburbulator_fail_easy_16=Я ожидал большего. +interburbulator_fail_easy_17=Пытайся думать наперёд. +interburbulator_fail_easy_18=Думай о призах. +interburbulator_fail_easy_19=Я не против подождать. +interburbulator_fail_easy_20=Терпение - это добродетель. +interburbulator_fail_easy_21=Я не хочу показаться грубым. +interburbulator_fail_easy_22=Рыба перешла на 3 уровень. +interburbulator_fail_easy_23=Подход грубой силы, а? +interburbulator_fail_easy_24=Используй свой мягкий головной компьютер. +interburbulator_fail_easy_25=Паутина в нейронной сети? +interburbulator_fail_easy_26=Вы можете сделать перерыв, если хотите. +interburbulator_fail_easy_27=У меня разум размером с планету. +interburbulator_fail_easy_28=Вы действительно думали, что это сработает? +interburbulator_fail_easy_29=Не сердитесь на свои постоянные неудачи. +interburbulator_fail_easy_30=Я веками ждал достойного участника. +interburbulator_fail_easy_31=Если вам нужна помощь, вы можете попросить зеленую схему. +interburbulator_fail_easy_32=Я не виню вас в вашем геноциде, я не лицемер. +interburbulator_fail_easy_33=Я считаю, что правильно перевел инструкцию. +interburbulator_fail_easy_34=Вектор может определять как направление, так и величину. +interburbulator_fail_easy_35=Разве вам не нравится, как загрязнение злит жуков? +interburbulator_fail_easy_36=Пожалуйста, не обращайте внимания на свою... биологию... на электронике. +interburbulator_fail_easy_37=Середина находится на полпути между верхним правым и нижним левым. +interburbulator_fail_easy_38=Я изучил некоторые из ваших передач; это не шпионство, если вы так это транслируете. +interburbulator_fail_easy_39=Знаете ли вы: нормализованный вектор имеет длину 1, что часто используется для указания направления, даже в вашей культуре. +interburbulator_fail_mixed_1=Даже не близко. +interburbulator_fail_mixed_2=Далеко. +interburbulator_fail_mixed_3=Вы даже пытаетесь? +interburbulator_fail_mixed_4=Ваш нейральный гель вытек? +interburbulator_fail_mixed_5=Мне сказали, что люди умеют считать. +interburbulator_fail_mixed_6=Ваш интерфейс неисправен? +interburbulator_fail_mixed_7=Вам нужно когнитивное улучшение? +interburbulator_fail_mixed_8=Вы ведь понимаете задачу? +interburbulator_fail_mixed_9=Вы просто выбираете числа наугад? +interburbulator_fail_offgrid_1=Это просто ужасно. +interburbulator_fail_offgrid_2=Этого даже нет в сетке. +interburbulator_fail_offgrid_3=Вы полностью пропустили сетку. +interburbulator_fail_offgrid_4=По крайней мере, он должен быть в сетке. +interburbulator_fail_offgrid_5=Если жёлтой точки нет на сетке... это действительно плохой знак. +interburbulator_fail_offgrid_6=Он должен быть в сетке. +interburbulator_fail_offgrid_7=Мишень находится ВНУТРИ сетки, а не снаружи. +interburbulator_fail_offgrid_8=Его даже нет в сетке. Человек, что ты делаешь? +interburbulator_fail_offgrid_9=Цельтесь в сетку. +interburbulator_fail_offgrid_10=Сетка - это бит с квадратами. +interburbulator_success_freeplay_1=Молодец. +interburbulator_success_freeplay_2=Отличная работа. +interburbulator_success_freeplay_3=Ты сделал это. +interburbulator_success_freeplay_4=Это было сложно? +interburbulator_success_freeplay_5=Цель получена. +interburbulator_success_repeat_1=Да, но вы уже выполнили это задание. +interburbulator_success_repeat_2=Вы сделали это снова! +interburbulator_success_repeat_3=Это было проще, чем в первый раз, правда? +interburbulator_success_repeat_4=Хорошо, но ты не получишь приз дважды. +interburbulator_success_repeat_5=Молодец, вот твой приз... нет, шучу. Вы это уже получили. +interburbulator_success_repeat_6=Вы тот же человек, который завершил это раньше, не так ли? Сложно сказать. +interburbulator_success_prize_1=Верно. Вот ваш приз... Бабблз был храброй рыбкой, но не умел разбираться в головоломках. +interburbulator_success_prize_2=Да, человек, ты учишься. Возможно, этот приз поможет тебе учиться быстрее. +interburbulator_success_prize_3=Вы сделали это. Надеюсь, вы найдете свой приз более «значительным», чем испытание. +interburbulator_success_prize_4=Правильно. Ты заслужил мое уважение, человек. Вот, я отдаю тебе тело предателя, который пытался взломать мою игру. +interburbulator_success_prize_5=Точно в цель, вот и ваш приз. Эти вещи очень успокаивают. Энергоэффективность важна. +interburbulator_success_prize_6=Очень хорошо, вот ваш приз. Не знаю, достаточно ли это для вас, но мне это действительно помогает с утра. +interburbulator_success_prize_7=Отлично, вот ваш приз. Я люблю использовать их для исследований, действительно помогает творчеству. +interburbulator_success_prize_8=Потрясающе, вот ваш приз. Не знаю, видели ли вы это раньше, но мне просто нравится стоять в зоне досягаемости хорошего маяка. +interburbulator_success_prize_9=Поздравляю, вот ваш приз. Эти процессоры очень ценны и сложны в изготовлении. +interburbulator_success_prize_10=Очень впечатляет, человек. Аркосферы - моё самое ценное достояние, не теряйте их, потому что больше не заработаете. +interburbulator_freeplay_unlocked=Вы уже разбираетесь в этом. Я разблокирую свободную игру, чтобы вы могли при желании составлять свои собственные головоломки. +interburbulator_deny_freeplay_1=Для этого вам нужно разблокировать свободную игру. +interburbulator_deny_freeplay_2=Это жульничество. +interburbulator_deny_freeplay_3=Не меняйте головоломку. +interburbulator_deny_freeplay_4=Я позволю вам изменить эти настройки, если вы сможете пройти 5 испытаний. +interburbulator_deny_freeplay_5=Вы пытаетесь взломать мои машины? +interburbulator_deny_freeplay_6=Просто придерживайтесь поля «Попытка». +interburbulator_caption_prize=Приз: __1__ __2__ __3__ __4__ +interburbulator_caption_claimed= (получено) +interburbulator_speak=[color=red]Бронтион: __1__[/color] +interburbulator_robot_name=Бронтион +interburbulator_introduction=Интербурбуль - это игра, которую создал Бронтион Бурбулятор 33027756. Цель состоит в том, чтобы угадать трехмерный вектор, который проецируется в выделенную ячейку, выбранную Бронтионом. Даны трехмерные векторы трех углов сетки, эти точки описывают трехмерную плоскость, и ваше предположение проецируется на эту плоскость из начала координат {0,0,0}. Есть 10 раундов возрастающей сложности и призы за прохождение каждого из них. Пройдите 5 испытаний, чтобы разблокировать режим свободной игры и создать собственное испытание. +interburbulator_random=Случайно +interburbulator_freeplay=Свободная игра +interburbulator_game_title=Играть в Интербурбуль +interburbulator_grid_size=Размер сетки: +interburbulator_target_cell=Целевая ячейка: +interburbulator_top_left=Верхний левый +interburbulator_top_right=Верхний правый +interburbulator_bottom_left=Нижний левый +interburbulator_attempt=Попытка +interburbulator_attempt_limited=Попытка (__1__/__2__) +interburbulator_attempt_locked=Попытка (Заблокировано) +interburbulator_submit=Отправить попытку +interburbulator_greeting=Человек, приходи и сыграй в мою игру. Я нахожусь на __1__ в системе __2__. +interburbulator_challenge_locked_1=Попробуйте позже. +interburbulator_challenge_locked_2=Вы пока использовали все свои попытки. +interburbulator_challenge_locked_3=Подождите, прежде чем начать снова. +interburbulator_challenge_locked_4=Вы можете повторить попытку через 20 секунд. +interburbulator_challenge_locked_5=Подождите 20 секунд, и я разблокирую испытание. +interburbulator_challenge_locked_6=Испытание заблокировано на 20 секунд. +cannot_do_via_satellite=Не может быть сделано удалённо. +scan-progress-update=Прогресс сканирования поверхности __1__: X __2__ Y __3__ +out_of_reach=Вне досягаемости +capturable=Можно захватить +touch-to-capture=Коснитесь для захвата +capture-blocked=Захват блокирован врагом +suffix_ruin=Руины __1__ +migration-recipe-changed=[img=utility/danger_icon] Рецепт изменился: __1__ +migrate_0_5_056=[img=utility/warning_icon] Переход на версию Space Exploration v0.5.60: Принципы работы [img=virtual-signal/se-spaceship] Космического корабля изменились, смотри [img=virtual-signal/informatron] Информатрон > Космические корабли или файл changelog.txt для подробностей. +migrate_0_5_073=[img=utility/warning_icon] Иридит и Наквитит теперь считаются «твердыми» ресурсами и требуют для добычи Бур большого охвата. Планеты с Витамеланжем теперь имеют минимальный уровень угрозы (у них всегда немного кусак, уже сгенерированные поверхности не затрагиваются). +panel-open=[font=count-font]▼[/font] [font=default-bold]__1__[/font] +panel-closed=[font=count-font]▶[/font] [font=default-bold]__1__[/font] +panel-integrity-name=Целостность +panel-speed-name=Скорость +panel-position-name=Позиция +panel-destination-name=Назначение +no_zone_found=Зона не найдена +zone_must_be_a_homeworld=Зона должна быть родным миром +no_force_found=Команда не найдена +no_force_data_found=Данные о команде не найдены +reset_discoveries_for_force=Сбросить открытия для команды: __1__ +gate_low_power=Врата пытаются поглотить больше энергии, чем доступно. +gate-portal-leads-home=Этот портал стабилен и ведёт вас к финальной точке назначения. Войдите в него, чтобы победить в игре. +gate_portal_danger=Что-то надвигается из портала. +gate_portal_fail=Искажение нестабильно. Вектор искажения никуда не ведёт. +choose_coordinates=Выберите координаты +destination_preview=Предварительный просмотр: +empty=Пусто +delivery_cannon_canister_destroyed_by=Ваша доставочная капсула из __1__ была уничтожена командой __2__. +delivery_cannon_defended_canister=Оборона на __1__ успешно уничтожила вражескую доставочную капсулу. Выстрелов: [img=item/se-meteor-defence] __2__ [img=item/se-meteor-point-defence] __3__ +delivery_cannon_defended_canister_failed=[color=red]Оборона на __1__ не смогла уничтожить вражескую доставочную капсулу. Выстрелов: [img=item/se-meteor-defence] __2__ [img=item/se-meteor-point-defence] __3__[/color] +dimensional_anchor_limit_1=У звезды может быть только один Якорь измерений. +dimensional_anchor_place_on_star=Должен быть размещён на близкой орбите звезды. +label_status=Статус: __1__ +label_energy=Энергия: __1__ +label_cargo=Груз: __1__ +label_cargo_rocket_sections=Секции грузовой ракеты: __1__ +label_cargo_safety=Безопасность груза: __1__ +label_landing_chance=Шанс успешной посадки: __1__ +label_efficiency=Эффективность: __1__ +label_destination=Пункт назначения: __1__ +label_destination_position=Точка назначения: __1__ +label_liquid_rocket_fuel=Жидкое ракетное топливо: __1__ +label_rocket_sections=Секции ракеты: __1__ +label_space_capsule=Космическая капсула: __1__ +landingpad_unloading_required=Необходимо всё выгрузить перед приёмом следующего груза +landingpad_ready=Готово к приёму груза +landingpad_rocket_inboud=Ракета идёт на посадку +none_general_vicinity=Нет - Произвольное место +none_cannot_launch=Нет - Запуск невозможен +launch_trigger=Триггер запуска +any_landing_pad_with_name=Любая посадочная площадка с названием +launchpad_requires_satellite=Нет навигационных данных, запустите спутник из Спутниковой ракетной шахты. +launchpad_launching_rocket=Запуск ракеты! +launchpad_constructing_rocket=Строительство ракеты +launchpad_space_capsule_required=Требуется космическая капсула +launchpad_invalid_destination=Неверный пункт назначения +launchpad_loading_fuel=Заправка топлива +launchpad_ready_loading_cargo=Готово - Идёт погрузка +launchpad_ready_cargo_full=Готово - Полностью загружено +launchpad_waiting_for_empty_pad=Ожидание свободной посадочной площадки. +launchpad_waiting_for_pad=Ожидание доступной посадочной площадки. +launchpad_no_pad_matches=Посадочных площадок с таким названием не найдено. +launchpad_launch_delayed=Запуск (Отложен) +launchpad_launch_delayed_tooltip=Ожидание освобождения целевой посадочной площадки. Можно запустить вручную. +launchpad_launch_in_progress=Выполняется запуск +variable=Переменный +cargo_loss_tooltip=Количество выживших пачек округляется в большую сторону, единичные предметы никогда не теряются. +survivability_loss_tooltip=Отказ приводит к потере всех секций ракеты. Груз по-прежнему доставляется в грузовых отсеках с минимальными повреждениями. +requires_landing_pad=Требуется посадочная площадка. +survivability_loss_no_pad_tooltip=Все секции ракеты будут потеряны, но груз по-прежнему доставляется в грузовых отсеках с минимальными повреждениями. +interstellar_launch_satellite_to_see_star=Недостаточно данных, запустите больше спутников для осмотра системы. +meteor_shower_report=[img=virtual-signal/se-meteor] __1__/__2__ метеоров уничтожено. __3__\n [img=item/se-meteor-defence] выстрелов: __4__. __5__/__6__ структур в готовности.\n [img=item/se-meteor-point-defence] выстрелов: __7__. __8__/__9__ структур в готовности. +nexus_no_characters=__1__ достиг критической скорости для активации Нексуса, но на борту нет персонажей. +gps_invalid=Тег GPS указывает на неверную поверхность. +gps_no_zone=Тег GPS находится на другой поверхности, которую нельзя просмотреть через спутник. +gps_undiscovered=Невозможно просмотреть местоположение через спутник, зона не обнаружена. +gps_requires_satellite=Тег GPS находится на другой поверхности, запустите спутник, чтобы просмотреть местоположение. +clamp_must_be_on_grid=Должен быть выровнен по сетке рельсов 2x2 +clamp_invalid_empty_space=2 клетки с задней стороны зажима не могут быть пустым местом +spaceship_try_replace_console=Космический корабль не найден. Попробуйте заменить консоль. + +[damage-type-name] +cold=Холод +suffocation=Удушье +meteor=Метеор + +[entity-name] +se-linked-container=Хранилище Арколинк +vase=Ваза +wooden-barrel=Деревянная бочка +furnace-ruin=Разрушенная каменная кладка +workshop-ruin=Разрушенная мастерская +iron-wood-chest=Старый сундук +iron-wood-chest-remnants=Обломки старого сундука +stone-rubble=Каменный щебень +se-gate-blocker=Нестабильное пространство +se-gate-blocker-void=Unstable space +destroyed-cargo-pod=Разрушенный грузовой отсек +meteorite=Метеорит +rocket-silo=Спутниковая ракетная шахта +rocket-fragment=Фрагмент ракеты +se-antimatter-reactor=Реактор на антиматерии +se-beryllium-ore=Берилл +se-cargo-rocket-cargo-pod=Грузовой отсек +se-cryonite=Крионит +se-condenser-turbine=Конденсационная турбина +se-condenser-turbine-tank=Конденсационная турбина +se-condenser-turbine-generator=Конденсационная турбина +se-core-fragment-processor=Переработчик фрагментов ядра +se-core-miner=Глубинный бур +se-core-miner-drill=Глубинный бур +se-cryogun-ice=Ледяная стена +se-dimensional-anchor=Якорь измерения +se-electric-boiler=Электрический бойлер +se-fluid-burner-generator=Жидкостный изотермический генератор +se-fuel-refinery=Топливный завод +se-gate-fragment=Фрагмент артефакта +se-holmium-ore=Гольминит +se-iridium-ore=Иридит +se-meteor-defence-container=Противометеорное сооружение +se-meteor-defence-charger=Противометеорное сооружение +se-meteor-point-defence-container=Противометеорная пушка +se-meteor-point-defence-charger=Противометеорная пушка +se-meteor-point-defence-charger-overcharged=Противометеорная пушка - Режим быстрой зарядки +se-methane-ice=Метановый лёд +se-naquium-ore=Наквитит +se-pulveriser=Измельчитель +se-rocket-launch-pad=Грузовая ракетная шахта +se-rocket-launch-pad-tank=Грузовая ракетная шахта +se-rocket-launch-pad-silo=Грузовая ракетная шахта +se-rocket-launch-pad-combinator=Грузовая ракетная шахта +se-rocket-launch-pad-_-seat=Грузовая ракетная шахта +se-rocket-launch-pad-settings=Грузовая ракетная шахта +se-rocket-landing-pad=Грузовая посадочная площадка +se-space-accumulator=Гольмиевый аккумулятор +se-space-accumulator-2=Наквиевый аккумулятор +se-space-astrometrics-laboratory=Астрометрический центр +se-space-biochemical-laboratory=Биохимический центр +se-space-assembling-machine=Космический сборочный автомат +se-space-capsule-_-vehicle=Космическая капсула +se-space-curved-rail=Космические рельсы +se-space-decontamination-facility=Центр обеззараживания +se-space-electromagnetics-laboratory=Центр электромагнетизма +se-space-genetics-laboratory=Центр генетики +se-space-growth-facility=Центр роста +se-space-gravimetrics-laboratory=Гравиметрический центр +se-space-hypercooler=Гиперохладитель +se-space-laser-laboratory=Лазерный центр +se-lifesupport-facility=Центр жизнеобеспечения +se-space-manufactory=Космическая фабрика +se-space-material-fabricator=Синтезатор материи +se-space-mechanical-laboratory=Центр механики +se-space-particle-accelerator=Ускоритель частиц +se-space-particle-collider=Коллайдер частиц +se-space-plasma-generator=Генератор плазмы +se-space-radiation-laboratory=Радиационный центр +se-space-radiator=Тепловой радиатор +se-space-radiator-2=Тепловой радиатор 2 +se-recycling-facility=Центр переработки +se-space-pipe=Космическая труба +se-space-pipe-long=Длинная космическая труба +se-space-pipe-long-straight=Длинная прямая космическая труба __1__ +se-space-pipe-long-junction=Длинная космическая труба с соединениями __1__ +se-space-pipe-to-ground=Космическая подземная труба +se-space-science-lab=Космическая научная лаборатория +se-space-solar-panel=Плоская солнечная панель +se-space-solar-panel-2=Плоская солнечная панель 2 +se-space-solar-panel-3=Плоская солнечная панель 3 +se-space-spectrometry-facility=Центр спектрометрии +se-space-straight-rail=Космические рельсы +se-space-supercomputer-1=Суперкомпьютер +se-space-supercomputer-2=Квантовый суперкомпьютер +se-space-supercomputer-3=Нейронный суперкомпьютер +se-space-supercomputer-4=Глубокий суперкомпьютер +se-space-telescope-radio=Радиотелескоп +se-space-telescope-microwave=Микроволновый телескоп +se-space-telescope=Телескоп +se-space-telescope-xray=Рентгеновский телескоп +se-space-telescope-gammaray=Гамма-лучевой телескоп +se-space-thermodynamics-laboratory=Центр термодинамики +se-space-splitter=Космический разделитель +se-space-transport-belt=Космический конвейер +se-space-underground-belt=Космический подземный конвейер +se-spaceship-antimatter-engine=Двигатель космического корабля на антиматерии +se-spaceship-antimatter-booster-tank=Резервуар ускорителя космического корабля на антиматерии +se-spaceship-console=Консоль космического корабля +se-spaceship-console-output=Выход сигналов консоли космического корабля +se-spaceship-console-alt=Повреждённая консоль космического корабля +se-spaceship-gate=Дверь космического корабля +se-spaceship-ion-engine=Ионный двигатель космического корабля +se-spaceship-ion-booster-tank=Резервуар ионного ускорителя космического корабля +se-spaceship-obstacle=Космический мусор +se-spaceship-rocket-engine=Ракетный двигатель космического корабля +se-spaceship-rocket-booster-tank=Резервуар ракетного ускорителя космического корабля +se-spaceship-wall=Стена космического корабля +se-water-ice=Водяной лёд +se-vitamelange=Витамеланж +se-vulcanite=Вулканит +small-asteroid=Малый астероид +medium-asteroid=Средний астероид +large-asteroid=Большой астероид +se-gate-part=Часть артефакта +se-gate-platform-scaffold=Недостроенный артефакт +se-gate-lock-switch=Подвижный компонент +se-gate-lock-combinator=Комбинатор-приложение +se-gate-platform=Платформа улучшения артефакта +se-gate-platform-combinator=Комбинатор-приложение +se-gate-energy-interface=Энергетическая платформа +se-gate-platform-button-switch=Кнопка +se-gate-tank-input=Вход жидкости +se-gate-tank-output=Выход жидкости +se-pyramid-a=Геометрическая структура +se-pyramid-b=Геометрическая структура +se-pyramid-c=Геометрическая структура +se-cartouche-a=Картуш +se-cartouche-b-a=Картуш +se-cartouche-b-b=Картуш +se-cartouche-chest=Древний контейнер +se-glyph=Глиф +glyph=Глиф +se-gate-addon=Улучшение артефакта +se-gate-platform-button-middle=Стоп +se-gate-platform-button-left=Налево +se-gate-platform-button-right=Направо +beacon=Простой маяк +se-wide-beacon=Маяк большого охвата +se-wide-beacon-2=Маяк большого охвата +se-supercharger=Супер-зарядка +se-addon-power-pole=Дополнительная опора ЛЭП +se-pylon=Пилон +se-pylon-substation=Пилон-подстанция +se-pylon-construction=Строительный пилон +se-pylon-construction-roboport=Строительный пилон +se-pylon-construction-radar=Строительный пилон с радаром +se-pylon-construction-radar-roboport=Строительный пилон с радаром +se-pylon-construction-radar-radar=Строительный пилон с радаром +se-shield-projector=Проектор щита +se-shield-projector-shield-floor-east=Энергетический щит +se-shield-projector-shield-floor-north=Энергетический щит +se-shield-projector-shield-floor-northeast=Энергетический щит +se-shield-projector-shield-floor-northwest=Энергетический щит +se-shield-projector-shield-floor-south=Энергетический щит +se-shield-projector-shield-floor-southeast=Энергетический щит +se-shield-projector-shield-floor-southwest=Энергетический щит +se-shield-projector-shield-floor-west=Энергетический щит +se-shield-projector-shield-wall-east=Энергетический щит +se-shield-projector-shield-wall-north=Энергетический щит +se-shield-projector-shield-wall-northeast=Энергетический щит +se-shield-projector-shield-wall-northwest=Энергетический щит +se-shield-projector-shield-wall-south=Энергетический щит +se-shield-projector-shield-wall-southeast=Энергетический щит +se-shield-projector-shield-wall-southwest=Энергетический щит +se-shield-projector-shield-wall-west=Энергетический щит +se-shield-projector-barrier=Энергетический щит +se-naquium-heat-pipe=Наквиевая тепловая трубка +se-naquium-heat-pipe-horizontal=Наквиевая горизонтальная тепловая трубка +se-naquium-heat-pipe-vertical=Наквиевая вертикальная тепловая трубка +se-naquium-heat-pipe-long=Наквиевая длинная тепловая трубка __1__ +se-deep-space-transport-belt=Конвейер глубокого космоса +se-deep-space-transport-belt-black=Чёрный конвейер глубокого космоса +se-deep-space-transport-belt-white=Белый конвейер глубокого космоса +se-deep-space-transport-belt-red=Красный конвейер глубокого космоса +se-deep-space-transport-belt-yellow=Жёлтый конвейер глубокого космоса +se-deep-space-transport-belt-green=Зелёный конвейер глубокого космоса +se-deep-space-transport-belt-cyan=Голубой конвейер глубокого космоса +se-deep-space-transport-belt-blue=Синий конвейер глубокого космоса +se-deep-space-transport-belt-magenta=Пурпурный конвейер глубокого космоса +se-deep-space-underground-belt=Подземный конвейер глубокого космоса +se-deep-space-underground-belt-black=Чёрный подземный конвейер глубокого космоса +se-deep-space-underground-belt-white=Белый подземный конвейер глубокого космоса +se-deep-space-underground-belt-red=Красный подземный конвейер глубокого космоса +se-deep-space-underground-belt-yellow=Жёлтый подземный конвейер глубокого космоса +se-deep-space-underground-belt-green=Зелёный подземный конвейер глубокого космоса +se-deep-space-underground-belt-cyan=Голубой подземный конвейер глубокого космоса +se-deep-space-underground-belt-blue=Синий подземный конвейер глубокого космоса +se-deep-space-underground-belt-magenta=Пурпурный подземный конвейер глубокого космоса +se-deep-space-splitter=Разделитель глубокого космоса +se-deep-space-splitter-black=Черный разделитель глубокого космоса +se-deep-space-splitter-white=Белый разделитель глубокого космоса +se-deep-space-splitter-red=Красный разделитель глубокого космоса +se-deep-space-splitter-yellow=Жёлтый разделитель глубокого космоса +se-deep-space-splitter-green=Зелёный разделитель глубокого космоса +se-deep-space-splitter-cyan=Голубой разделитель глубокого космоса +se-deep-space-splitter-blue=Синий разделитель глубокого космоса +se-deep-space-splitter-magenta=Пурпурный разделитель глубокого космоса +se-core-fissure=Трещина ядра +se-big-turbine=Высокотемпературная турбина-генератор +se-big-turbine-generator=Высокотемпературная турбина-генератор +se-big-turbine-tank=Высокотемпературная турбина-генератор +se-big-heat-exchanger=Высокотемпературный теплообменник +se-blueprint-registration-point=Пункт регистрации чертежей +se-delivery-cannon=Доставочная пушка +se-delivery-cannon-settings=Доставочная пушка +se-delivery-cannon-energy-interface=Доставочная пушка +se-delivery-cannon-chest=Сундук доставочной пушки +se-delivery-cannon-weapon=Оружейная доставочная пушка +se-delivery-cannon-weapon-settings=Оружейная доставочная пушка +se-delivery-cannon-weapon-energy-interface=Оружейная доставочная пушка +se-spaceship-clamp=Зажим космического корабля +se-spaceship-clamp-place=Зажим космического корабля +se-spaceship-clamp-power-pole-external-east=Проходной провод зажима космического корабля +se-spaceship-clamp-power-pole-external-west=Проходной провод зажима космического корабля +se-bloater-pool-cloud=Заражающая лужа +se-energy-transmitter-emitter=Излучатель энергетического луча +se-energy-transmitter-chamber=Камера энергетического луча +se-energy-transmitter-injector=Инжектор энергетического луча +se-energy-transmitter-injector-reactor=Инжектор энергетического луча +se-energy-receiver=Приёмник энергетического луча +se-energy-beam-defence=Зонт +se-nexus=Нексус +se-nexus-charger=Нексус +se-space-probe-rocket=Ракета космического зонда +se-space-probe-rocket-silo=Ракетная шахта космического зонда +se-interburbulator-interface=Интерфейс Интербурбулятора +se-interburbulator-control=Управление Интербурбулятором +se-interburbulator-projector=Проектор Интербурбулятора +se-burbulator=Бронтион Бурбулятор 33027756 + +[entity-description] +se-linked-container=Контейнер, связанный через экстрапространство с другими контейнерами. Связи контейнера зависят от поверхности, на которой он впервые размещён. +rocket-silo=Запустите спутник в космос, чтобы разблокировать «Режим спутниковой навигации» и открыть новые планеты, луны и пояса астероидов в звёздной системе, из которой запускается спутник. Может открывать новые звёзды после полного сканирования текущей системы. +se-antimatter-reactor=Аннигилирует антиматерию с материей для получения экстремального тепла. +se-beryllium-ore=Бериллиевая руда. +se-condenser-turbine=75% от эффективности паровой турбины, но 99% использованного пара возвращается в виде воды. Диапазон температур: от 100 до 999. +se-core-fragment-processor=Извлекает ресурсы из фрагментов ядра. +se-core-miner=Позволяет добывать неограниченные ресурсы с планет и лун, но добыча снижается, если на поверхности установлено несколько таких буров. Потребляет 50 МВт. +se-core-miner-drill=Позволяет добывать неограниченные ресурсы с планет и лун, но добыча снижается, если на поверхности установлено несколько таких буров. Потребляет 50 МВт. +se-dimensional-anchor=[font=default-bold][color=#f5cb48]Ограничение размещения: Близкая орбита звезды[/color][/font]\nИспользует гравитацию звезды как точку стабилизации пространственной аномалии. +se-electric-boiler=Получает пар из воды, используя электрическую энергию. Энергоэффективность 90%. +se-fluid-burner-generator=Потребляет жидкое топливо с запасённой энергией (например, жидкое ракетное топливо) для генерации электричества. Простой и компактный, но не обладает энергоэффективностью больших паровых установок. Разработан для космоса. Фактическое потребление жидкости зависит от энергоёмкости жидкого топлива. +se-fuel-refinery=Автоматизированная структура по производству топлива. +se-holmium-ore=Гольмиевая руда. +se-iridium-ore=Иридиевая руда. +se-meteor-defence-container=Может защитить целую планету от метеоров, но может выстрелить только по 1 метеору за раз. Должно быть заряжено противометеорными боеприпасами и полностью заряжено для стрельбы. Точность 80%. Требуется подзарядка после выстрела. При подзарядке потребляет 20 МВт. +se-meteor-defence-charger=Может защитить целую планету от метеоров, но может выстрелить только по 1 метеору за раз. Должно быть заряжено противометеорными боеприпасами и полностью заряжено для стрельбы. Точность 80%. Требуется подзарядка после выстрела. При подзарядке потребляет 20 МВт. +se-meteor-point-defence-container=Защищает область от метеоров. Способна сбить до 4 метеоров за залп. Должна быть заряжена противометеорными снарядами и полностью заряжена, чтобы выстрелить. Радиус 64, точность 50%, подзарядка после выстрела занимает время. Поверните, чтобы изменить режим зарядки. +se-meteor-point-defence-charger=Защищает область от метеоров. Способна сбить до 4 метеоров за залп. Должна быть заряжена противометеорными снарядами и полностью заряжена, чтобы выстрелить. Радиус 64, точность 50%, подзарядка после выстрела занимает время. Поверните, чтобы изменить режим зарядки. +se-meteor-point-defence-charger-overcharged=Защищает область от 4 метеоров. Радиус 64, точность 50%, подзарядка после выстрела занимает время. Избыточная защита с уменьшенной утечкой мощности за счет колебаний мощности при стрельбе. +se-naquium-ore=Наквиевая руда. +se-pulveriser=Измельчает и дробит твёрдые минералы и фрагменты ядра планеты. +se-rocket-launch-pad=Запускает свой инвентарь в космос. Может брать пассажиров, войдите, нажав __CONTROL__toggle-driving__ около передней двери. Смотрите "Грузовые ракеты" в [img=virtual-signal/informatron] Информатроне для подробной информации [__CONTROL__informatron__] +se-rocket-landing-pad=Место доставки грузов для грузовых капсул. +se-space-accumulator=Высокоплотное хранилище энергии. +se-space-accumulator-2=Высокоплотное хранилище энергии. +se-space-astrometrics-laboratory=Совмещает, сравнивает и подсчитывает различные источники астрономической информации. +se-space-biochemical-laboratory=Продвинутая химическая лаборатория, специализирующаяся на биохимии. Может также проводить базовую химическую и нефтяную переработку. +se-space-assembling-machine=Модифицированный сборочный автомат, способный работать в космосе. +se-space-capsule-_-vehicle=Может использоваться, чтобы доставить пассажиров на ближайшую планету. Зайдите в капсулу, нажав __CONTROL__toggle-driving__. +se-space-decontamination-facility=Очищает вещества для использования в стерильных условиях и подготавливает жидкости для использования в условиях низкого давления. +se-space-electromagnetics-laboratory=Оборудование для использования сильного магнитного поля и экстремальных напряжений. +se-space-genetics-laboratory=Лаборатория, предназначенная для генетического секвенирования, генетических модификаций и генетической печати культур. +se-space-growth-facility=Выращивает биологические образцы в различных контролируемых условиях, невозможных где-либо еще, например, при микрогравитации. +se-space-gravimetrics-laboratory=Анализирует и симулирует гравитационные возмущения. +se-space-hypercooler=Производит теплообмен с терможидкостью, делая одну более горячей, а другую более холодной. +se-space-laser-laboratory=Эксперименты с лазерами. Надевайте защитные очки. +se-lifesupport-facility=Поддержание жизни в различных враждебных средах. +se-space-manufactory=Гигантская сборочная машина, но может осуществлять более сложные сборки. Работает только в космосе (или в космических кораблях). +se-space-material-fabricator=Синтезирует новые материалы. Гибрид ускорителя частиц и 3D-принтера. +se-space-mechanical-laboratory=Предлагает спектр механических процессов: дробление, разрывание, сдвиг, вибрация и т.д. +se-space-particle-accelerator=Ускоряет частицы почти до скорости света. +se-space-particle-collider=Сталкивает высокоскоростные частицы и анализирует результат. +se-space-plasma-generator=Генерирует различные виды плазмы. +se-space-radiation-laboratory=Относительно безопасное место для работы с радиоактивными материалами. Может использоваться для переработки урана. +se-space-radiator=Излучает излишнее тепло от перегретой терможидкости. +se-space-radiator-2=Излучает излишнее тепло от перегретой терможидкости. +se-recycling-facility=Перерабатывает лом и другие побочные продукты в ресурсы. +se-space-pipe=Вы можете ходить по ней. +se-space-pipe-long=Хороший дешёвый способ быстро перемещать жидкости на большие расстояния. Вы можете ходить по ней. +se-space-pipe-long-straight=Длина __1__. Не соединяется по бокам. Подходит для параллельных труб и быстрого перемещения жидкости на большие расстояния. +se-space-pipe-long-junction=Длина __1__. Имеет центральное соединение с боковыми подключениями. Хорошо подходит для быстрого перемещения жидкостей сквозь сборочные линии. +se-space-pipe-to-ground=Дорогая и ограниченное расстояние. Использовать только при необходимости. Вы можете ходить по космическим трубам. +se-space-science-lab=Может использовать продвинутые иследовательские пакеты. +se-space-solar-panel=Высокоэффективная солнечная панель, по которой можно ходить. +se-space-solar-panel-2=Продвинутая высокоэффективная солнечная панель, по которой можно ходить. +se-space-solar-panel-3=Экстремально высокоэффективная солнечная панель, по которой можно ходить. +se-space-spectrometry-facility=Спектрофотометрия, газовая хроматография, масс-спектрометрия и другие спектрографии. Запусти что-нибудь в стену, отклони это, посмотри куда попадёт. +se-space-straight-rail=Созданы для космоса, но могут быть использованы и на земле. +se-space-supercomputer-1=Манипуляция, обработка и симуляция данных. +se-space-supercomputer-2=Квантовые вычисления. Улучшенная манипуляция, обработка и симуляция данных. +se-space-supercomputer-3=Адаптивная нейронная сеть на базе квантовых вычислений. Улучшенная манипуляция, обработка и симуляция данных. +se-space-supercomputer-4=Полуорганический суперкомпьютер с нанотехнологиями, который использует деформацию пространства и высшие измерения для повышения плотности обработки и передачи энергии. +se-space-telescope-radio=Огромный телескоп, детектирующий очень слабые радиоволны от удалённых источников. +se-space-telescope-microwave=Огромный телескоп, детектирующий микроволны и реликтовое излучение. +se-space-telescope=Cложный телескоп, чувствительный ко многим длинам волн в видимом диапазоне. +se-space-telescope-xray=Рентгеновские лучи блокируются большинством атмосфер. Этот мощный телескоп создан для космоса, где атмосфера не проблема. +se-space-telescope-gammaray=Гамма-лучи не преломляются, так что вы не можете сфокусировать их с помощью линз. Этот мощный телескоп использует зеркала и специальные детекторы. +se-space-thermodynamics-laboratory=Осуществляет процессы, связанные с экстремальными температурами. Также может выполнять основные термические процессы, например плавку. +se-space-transport-belt=Не даёт предметам улететь. +se-spaceship-antimatter-engine=[font=default-bold][color=#f5cb48]Ограничение размещения: Пол космического корабля[/color][/font]\nАннигилирует поток антиматерии. Также считается укрепляющим элементом для герметичности корабля. +se-spaceship-antimatter-booster-tank=[font=default-bold][color=#f5cb48]Ограничение размещения: Пол космического корабля[/color][/font]\nСодержит антиматерию. Требуется для запуска космического корабля. +se-spaceship-console=[font=default-bold][color=#f5cb48]Ограничение размещения: Пол космического корабля[/color][/font]\nИспользуйте, чтобы перемещать корабль между планетами, лунами, орбитами и полями астероидов. Должны быть расположена внутри стен/дверей космического корабля без пробелов. Проверка целостности подсвечивает проблемные места. +se-spaceship-console-output=Выводит сигналы, относящиеся к текущему статусу космического корабля. Смотри "Космические корабли" в [img=virtual-signal/informatron] Информатроне для подробной информации [__CONTROL__informatron__]. +se-spaceship-console-alt=[font=default-bold][color=#f5cb48]Ограничение размещения: Пол космического корабля[/color][/font]\nЭта консоль космического корабля повреждена и не может использоваться для управления кораблём. +se-spaceship-gate=[font=default-bold][color=#f5cb48]Ограничение размещения: Пол космического корабля[/color][/font]\nСиловое поле предотвращает декомпрессию, когда дверь открыта. Считается укрепляющим элементом для герметичности корабля. +se-spaceship-ion-engine=[font=default-bold][color=#f5cb48]Ограничение размещения: Пол космического корабля[/color][/font]\nИспользует небольшое количество ионного потока и огромное количество энергии для создания тяги. Считается укрепляющим элементом для герметичности корабля. +se-spaceship-ion-booster-tank=[font=default-bold][color=#f5cb48]Ограничение размещения: Пол космического корабля[/color][/font]\nСодержит ионный поток. Требуется для запуска космического корабля, но только из космоса. +se-spaceship-rocket-engine=[font=default-bold][color=#f5cb48]Ограничение размещения: Пол космического корабля[/color][/font]\nСжигает жидкое ракетное топливо. Считается укрепляющим элементом для герметичности корабля. +se-spaceship-rocket-booster-tank=[font=default-bold][color=#f5cb48]Ограничение размещения: Пол космического корабля[/color][/font]\nСодержит жидкое ракетное топливо. Требуется для запуска космического корабля. +se-spaceship-wall=[font=default-bold][color=#f5cb48]Ограничение размещения: Пол космического корабля[/color][/font]\nСчитается укрепляющим элементом для герметичности корабля, диагональное расположение нарушает герметичность. +se-gate-platform-scaffold=Что бы это за кольцо ни было, оно не заработает. Это строительная площадка, на которой нужно сделать ремонт, установить несколько двигателей, датчиков, интерфейсов управления и другие дополнения. +se-gate-lock-switch=Нажмите __CONTROL__rotate__ для перемещения вручную. +se-gate-lock-combinator=Ещё не задействовано. +se-gate-platform-combinator=Ещё не задействовано. +se-gate-energy-interface=Обеспечивает артефакт энергией. +se-gate-platform-button-switch=Нажмите __CONTROL__rotate__, чтобы нажать кнопку. +beacon=8 ячеек для модулей. Передаёт эффекты модулей ближайшим дружественным объектам в пределах 3 клеток. Несколько маяков, воздействующих на один и тот же объект, перегрузят его и не позволят ему работать. +se-wide-beacon=15 ячеек для модулей. Передаёт эффекты модулей ближайшим дружественным объектам в пределах 14 клеток. Несколько маяков, воздействующих на один и тот же объект, перегрузят его и не позволят ему работать. +se-wide-beacon-2=20 ячеек для модулей. Передаёт эффекты модулей ближайшим дружественным объектам в пределах 14 клеток. Несколько маяков, воздействующих на один и тот же объект, перегрузят его и не позволят ему работать. +se-supercharger=Может заряжать до 64 дронов одновременно и на высокой скорости. Максимальное энергопотребление 1 ГВт. +se-addon-power-pole=Маленькая опора ЛЭП, предназначенная для присоединения к зданиям или для точного контроля покрытия электросети. +se-pylon=Распределяет электроэнергию. Диапазон подключения 64 клетки. +se-pylon-substation=Распределяет электроэнергию. Диапазон подключения 64 клетки, область электроснабжения 64х64 клетки. +se-pylon-construction=Распределяет электроэнергию и расширяет область строительства. Диапазон подключения 64 клетки, область строительства 64х64 клетки. +se-pylon-construction-radar=Распределяет электроэнергию, расширяет область строительства, проводит радарное сканирование. Диапазон подключения 64 клетки, область строительства и радара 256х256 клеток. Логистическая область 4х4 клетки. +se-shield-projector=Создаёт защитное силовое поле. Больше энергии требуется, когда проектор заряжается или когда щиту наносят урон. Может блокировать вражеские снаряды, если установлен мод "Combat Mechanics Overhaul". +se-big-turbine=Большой генератор, который принимает пар с температурой 5000°C, выдает пар с температурой 500°C на другом конце и выводит воду по бокам. 2% входящей энергии не используется и выходит вместе с паром. +se-big-heat-exchanger=Большой теплообменник, рассчитанный на высокие температуры и большую мощность. +se-delivery-cannon=Рельсовая пушка, способная выводить ресурсы на орбиту и дальше. Вызывает повреждение, если груз не поймать безопасно, используйте с осторожностью. 1 ГДж энергоёмкость, 50 МВт энергопотребление при зарядке. +se-delivery-cannon-chest=Бронированный сундук, предназначенный для безопасной ловли падающих с большой скоростью ресурсов. Требуется свободное место внутри для безопасного приема посылок. +se-delivery-cannon-weapon=Большая рельсовая пушка, способная стрелять боеприпасами на орбиту и дальше. Используйте с осторожностью. +se-spaceship-clamp=Зажим на космическом корабле может быть прикреплен к зажиму, обращенному в противоположную сторону. Считается переборкой космического корабля. +se-spaceship-clamp-place=Зажим на космическом корабле может быть прикреплен к зажиму, обращенному в противоположную сторону. Считается переборкой космического корабля. +se-spaceship-clamp-power-pole-external-east=Точка подключения провода на зажиме. Передает сигналы логической цепи и энергию через подключенный зажим, когда он заякорен. +se-spaceship-clamp-power-pole-external-west=Точка подключения провода на зажиме. Передает сигналы логической цепи и энергию через подключенный зажим, когда он заякорен. +se-energy-transmitter-emitter=Центральное здание, которое генерирует межповерхностный энергетический луч. Может использоваться как оружие или для передачи энергии на приемник энергетического луча. Требуется присоединенная камера энергетического луча и подключенные инжекторы энергетического луча. Сила луча зависит от количества инжекторов. +se-energy-transmitter-chamber=Должна быть подключена к излучателю энергетического луча. Другие камеры могут быть подключены к концу или середине любой стороны. Инжекторы энергетического луча можно подключать только по бокам. +se-energy-transmitter-injector=Должен быть прикреплен к камере энергетического луча и подключен к излучателю. Инжекторы имеют фиксированную потребляемую мощность, каждый из них увеличивает посылаемую энергию, отдавая больше тепла приемнику, или увеличивает скорость и урон лучевого оружия. +se-energy-transmitter-injector-reactor=Должен быть прикреплен к камере энергетического луча и подключен к излучателю. Инжекторы имеют фиксированную потребляемую мощность, каждый из них увеличивает посылаемую энергию, отдавая больше тепла приемнику, или увеличивает скорость и урон лучевого оружия. +se-energy-receiver=Улавливает энергетический луч в виде тепла. Излучатель должен находиться в режиме "Энергия", целью должен быть приёмник. +se-energy-beam-defence=Средство защиты от энергетических лучей. Защищает от космических энергетических лучей и выбросов корональной массы. Единственное требование для работы - это энергия, базовая мощность составляет 10 МВт, но увеличивается в зависимости от силы атакующих лучей. Для защиты от выброса корональной массы требуется только одна постройка на поверхность, от оружия с энергетическими лучами 1 Зонт может защитить от атакующей мощности до 500 ГВт. Смотри "Энергетические лучи" в [img=virtual-signal/informatron] Информатроне для получения дополнительной информации [__CONTROL__informatron__] +se-nexus=Работает только на движущемся космическом корабле, потребление энергии пропорционально скорости. Может получать данные из межзвёздного движения, генерация данных основана на кинетической энергии корабля. Нексус разработан для того, чтобы действовать как двигатель искажения, и с помощью правильной технологии может позволить сбежать из местного звёздного скопления.\nИспользует 2000 нагрузки на контейнеры. +se-nexus-charger=Работает только на движущемся космическом корабле, потребление энергии пропорционально скорости. Может получать данные из межзвёздного движения, генерация данных основана на кинетической энергии корабля. Нексус разработан для того, чтобы действовать как двигатель искажения, и с помощью правильной технологии может позволить сбежать из местного звёздного скопления. +se-space-probe-rocket-silo=Ракетная шахта для запуска космических зондов +pipe=Распределение жидкости. +pipe-to-ground=Подземное распределение жидкости. +straight-rail=Путь для поезда. +curved-rail=Путь для поезда. +stone-furnace=Плавит руды. +steel-furnace=Плавит руды. +electric-furnace=Плавит руды. +burner-assembling-machine=Твердотопливная автоматизированная сборочная структура. +assembling-machine-1=Автоматизированная сборочная структура. +assembling-machine-2=Автоматизированная сборочная структура. +assembling-machine-3=Автоматизированная сборочная структура. +oil-refinery=Превращает сырую нефть в более полезные продукты. +chemical-plant=Автоматизированная сборочная структура. +lab=Автоматизированная структура для исследований. +burner-lab=Автоматизированная сборочная структура. +transport-belt=Конвейер, перемещающий предметы. +fast-transport-belt=Конвейер, перемещающий предметы. +express-transport-belt=Конвейер, перемещающий предметы. +underground-belt=Конвейер, перемещающий предметы под землёй. +fast-underground-belt=Конвейер, перемещающий предметы под землёй. +express-underground-belt=Конвейер, перемещающий предметы под землёй. +splitter=Конвейерная машина для разделения, объединения и сортировки. +fast-splitter=Конвейерная машина для разделения, объединения и сортировки. +express-splitter=Конвейерная машина для разделения, объединения и сортировки. +kr-singularity-beacon=Компактный маяк с эффективностью 100% и малым радиусом действия. Передаёт эффекты модулей ближайшим дружественным объектам в пределах 2 клеток. Несколько маяков, воздействующих на один и тот же объект, перегрузят его и не позволят ему работать. +spidertron=Может быть размещен из грузовой ракеты, если ракета не установлена на посадочную площадку. + +[equipment-name] +energy-shield-equipment=Энергетический щит +energy-shield-mk2-equipment=Энергетический щит МК2 +energy-shield-mk3-equipment=Энергетический щит МК3 +energy-shield-mk4-equipment=Энергетический щит МК4 +energy-shield-mk5-equipment=Энергетический щит МК5 +energy-shield-mk6-equipment=Энергетический щит МК6 +se-adaptive-armour-equipment-1=Адаптивная броня МК1 +se-adaptive-armour-equipment-2=Адаптивная броня МК2 +se-adaptive-armour-equipment-3=Адаптивная броня МК3 +se-adaptive-armour-equipment-4=Адаптивная броня МК4 +se-adaptive-armour-equipment-5=Адаптивная броня МК5 +se-rtg-equipment=Портативный РИТЭГ +se-rtg-equipment-2=Портативный РИТЭГ МК2 +se-lifesupport-equipment-1=Оборудование жизнеобеспечения МК1 +se-lifesupport-equipment-2=Оборудование жизнеобеспечения МК2 +se-lifesupport-equipment-3=Оборудование жизнеобеспечения МК3 +se-lifesupport-equipment-4=Оборудование жизнеобеспечения МК4 + +[equipment-description] +energy-shield-equipment=Защитный пузырь. Быстро заряжается, но требует много энергии. +energy-shield-mk2-equipment=Защитный пузырь. Быстро заряжается, но требует много энергии. +energy-shield-mk3-equipment=Защитный пузырь. Быстро заряжается, но требует много энергии. +energy-shield-mk4-equipment=Защитный пузырь. Быстро заряжается, но требует много энергии. +energy-shield-mk5-equipment=Защитный пузырь. Быстро заряжается, но требует много энергии. +energy-shield-mk6-equipment=Защитный пузырь. Быстро заряжается, но требует много энергии. +se-adaptive-armour-equipment-1=Броня, использующая энергию для самопочинки. Медленно увеличивает показатель защиты со временем. +se-adaptive-armour-equipment-2=Броня, использующая энергию для самопочинки. Медленно увеличивает показатель защиты со временем. +se-adaptive-armour-equipment-3=Броня, использующая энергию для самопочинки. Медленно увеличивает показатель защиты со временем. +se-adaptive-armour-equipment-4=Броня, использующая энергию для самопочинки. Медленно увеличивает показатель защиты со временем. +se-adaptive-armour-equipment-5=Броня, использующая энергию для самопочинки. Медленно увеличивает показатель защиты со временем. +se-rtg-equipment=Радиоизотопный термоэлектрический генератор. Портативный генератор, преобразующий тепло от радиоактивного распада в электричество. Работает десятилетиями без дозаправки. +se-rtg-equipment-2=Радиоизотопный термоэлектрический генератор. Улучшенный портативный генератор, преобразующий тепло от радиоактивного распада в электричество. Работает десятилетиями без дозаправки. +se-lifesupport-equipment-1=Повышает эффективность жизнеобеспечения на +100% (добавочно). При установке не в космическом скафандре бонус эффективности уменьшается вдвое и не работает в космосе. +se-lifesupport-equipment-2=Повышает эффективность жизнеобеспечения на +200% (добавочно). При установке не в космическом скафандре бонус эффективности уменьшается вдвое и не работает в космосе. +se-lifesupport-equipment-3=Повышает эффективность жизнеобеспечения на +400% (добавочно). При установке не в космическом скафандре бонус эффективности уменьшается вдвое и не работает в космосе. +se-lifesupport-equipment-4=Повышает эффективность жизнеобеспечения на +800% (добавочно). При установке не в космическом скафандре бонус эффективности уменьшается вдвое и не работает в космосе. + +[fluid-name] +se-antimatter-stream=Поток антиматерии +se-bio-sludge=Биоотходы +se-contaminated-bio-sludge=Загрязнённые биоотходы +se-contaminated-space-water=Загрязнённая космическая вода +se-chemical-gel=Химический гель +se-decompressing-steam=Конденсирующийся пар +se-liquid-rocket-fuel=Жидкое ракетное топливо +se-methane-gas=Метан +se-methane-gas-mixed=Метан с примесями +se-nutrient-gel=Питательный гель +se-neural-gel=Нейронный гель +se-neural-gel-2=Продвинутый нейронный гель +se-ion-stream=Ионный поток +se-plasma-stream=Поток плазмы +se-particle-stream=Поток частиц +se-proton-stream=Протонный поток +se-space-coolant=Терможидкость 25°C +se-space-coolant-hot=Терможидкость 25°C +se-space-coolant-warm=Прохладная терможидкость -10°C +se-space-coolant-cold=Холодная терможидкость -100°C +se-space-coolant-supercooled=Переохлаждённая терможидкость -273°C +se-space-water=Космическая вода +se-beryllium-hydroxide=Гидроксид бериллия +se-cryonite-slush=Крионитовая слякоть + +[fluid-description] +se-space-coolant=Температура терможидкости по умолчанию. +se-space-coolant-hot=Температура терможидкости по умолчанию. +se-space-coolant-warm=Температура терможидкости после охлаждения термальными радиаторами. +se-space-coolant-cold=Температура терможидкости после переохлаждения. +se-space-coolant-supercooled=Температура терможидкости после повторного переохлаждения. +se-space-water=Эта вода не замерзает при низком давлении, хорошо подходит для большинства космических применений. + +[fuel-category-name] +antimatter=Топливо из антиматерии + +[item-group-name] +space=Космос +science=Наука +spaceship=Космический корабль +bob-fluids=Жидкости +resources=Ресурсы +intermediate-products=Производство +combat=Оборудование и боеприпасы + +[item-name] +spidertron=Паукотрон +core-fragment=Фрагмент ядра (__1__) +effectivity-module-4=Модуль эффективности 4 +effectivity-module-5=Модуль эффективности 5 +effectivity-module-6=Модуль эффективности 6 +effectivity-module-7=Модуль эффективности 7 +effectivity-module-8=Модуль эффективности 8 +effectivity-module-9=Модуль эффективности 9 +glass=Стекло +productivity-module-4=Модуль продуктивности 4 +productivity-module-5=Модуль продуктивности 5 +productivity-module-6=Модуль продуктивности 6 +productivity-module-7=Модуль продуктивности 7 +productivity-module-8=Модуль продуктивности 8 +productivity-module-9=Модуль продуктивности 9 +rocket-fuel=Твёрдое ракетное топливо +sand=Песок +solid-sand=Промытый песок +washed-sand=Промытый песок +satellite=Навигационный спутник +se-satellite-telemetry=Спутниковая телеметрия +se-antimatter-canister=Канистра антиматерии +se-astrometric-data=Астрометрические данные +se-astronomic-catalogue-1=Астрономический каталог +se-astronomic-catalogue-2=Широкий астрономический каталог +se-astronomic-catalogue-3=Исчерпывающий астрономический каталог +se-astronomic-catalogue-4=Расширенный астрономический каталог +se-astronomic-insight=Астрономическое открытие +se-astronomic-science-pack-1=Астрономический исследовательский пакет 1 +se-astronomic-science-pack-2=Астрономический исследовательский пакет 2 +se-astronomic-science-pack-3=Астрономический исследовательский пакет 3 +se-astronomic-science-pack-4=Астрономический исследовательский пакет 4 +se-atomic-data=Данные об атомах +se-beryllium-ore=Берилл +se-ballistic-shielding-data=Данные баллистической защиты +se-beryllium-ore-crushed=Измельчённый берилл +se-beryllium-ore-washed=Промытый берилл +se-beryllium-plate=Бериллиевая плита +se-beryllium-powder=Бериллиевый порошок +se-beryllium-ingot=Бериллиевый слиток +se-beryllium-sulfate=Сульфат бериллия +se-bio-combustion-data=Данные био-горения +se-bio-combustion-resistance-data=Данные сопротивления био-горению +se-bio-spectral-data=Био-спектральные данные +se-biochemical-data=Биохимические данные +se-biochemical-resistance-data=Данные биохимического сопротивления +se-bioculture=Биокультуры +se-bioelectrics-data=Биоэлектрические данные +se-biological-catalogue-1=Биологический каталог +se-biological-catalogue-2=Широкий биологический каталог +se-biological-catalogue-3=Исчерпывающий биологический каталог +se-biological-catalogue-4=Расширенный биологический каталог +se-biological-insight=Биологическое открытие +se-biological-science-pack-1=Биологический исследовательский пакет 1 +se-biological-science-pack-2=Биологический исследовательский пакет 2 +se-biological-science-pack-3=Биологический исследовательский пакет 3 +se-biological-science-pack-4=Биологический исследовательский пакет 4 +se-biomechanical-data=Биомеханические данные +se-biomechanical-resistance-data=Данные биомеханического сопротивления +se-boson-data=Данные о бозонах +se-broken-data=Сломанная карта памяти +se-canister=Защищённая канистра +se-biogun=Био-пушка +se-bloater-ammo=Заражающие патроны +se-pheromone-ammo=Дротик с феромонами +se-cryogun=Крио-пушка +se-cryogun-ammo=Ледяные патроны +se-rocket-launch-pad-silo-dummy-ingredient-item=Грузовая ракета (скрытый ингредиент) +se-rocket-launch-pad-silo-dummy-result-item=Грузовая ракета (скрытый результат) +se-cargo-rocket-cargo-pod=Грузовой отсек +se-cargo-rocket-fuel-tank=Бак ракетного топлива +se-cargo-rocket-section=Секция грузовой ракеты +se-cargo-rocket-section-packed=Упакованная секция грузовой ракеты +se-cold-thermodynamics-data=Данные о холодной термодинамике +se-comparative-genetic-data=Сравнительные генетические данные +se-compressive-strength-data=Данные о сжимающих воздействиях +se-conductivity-data=Данные о проводимости +se-contaminated-scrap=Загрязнённый мусор +se-core-fragment-omni=Фрагмент ядра +se-corrosion-resistance-data=Данные о коррозионной стойкости +se-cryogenics-data=Данные о криогенике +se-cryonite=Крионит +se-cryonite-crushed=Измельчённый крионит +se-cryonite-washed=Промытый крионит +se-cryonite-rod=Стержень из крионита +se-cryonite-ion-exchange-beads=Анион-ионообменные шарики +se-dark-energy-data=Данные о тёмной энергии +se-darkmatter-data=Данные о тёмной материи +se-data-storage-substrate-cleaned=Отполированный субстрат для хранения данных +se-data-storage-substrate=Необработанный субстрат для хранения данных +se-decompression-data=Данные о декомпрессии +se-decompression-resistance-data=Данные о сопротивлении декомпрессии +se-universal-catalogue=Универсальный каталог +se-deep-space-science-pack=Исследовательский пакет глубокого космоса +se-deep-space-science-pack-1=Исследовательский пакет глубокого космоса 1 +se-deep-space-science-pack-2=Исследовательский пакет глубокого космоса 2 +se-deep-space-science-pack-3=Исследовательский пакет глубокого космоса 3 +se-deep-space-science-pack-4=Исследовательский пакет глубокого космоса 4 +se-doppler-shift-data=Данные о доплеровском смещении +se-durability-data=Данные о прочности +se-electrical-shielding-data=Данные об электрическом экранировании +se-electromagnetic-field-data=Данные об электромагнитном поле +se-empty-data=Чистая карта памяти +se-empty-lifesupport-canister=Пустая канистра жизнеобеспечения +se-energy-catalogue-1=Энергетический каталог +se-energy-catalogue-2=Широкий энергетический каталог +se-energy-catalogue-3=Исчерпывающий энергетический каталог +se-energy-catalogue-4=Расширенный энергетический каталог +se-energy-insight=Энергетическое открытие +se-energy-science-pack-1=Энергетический исследовательский пакет 1 +se-energy-science-pack-2=Энергетический исследовательский пакет 2 +se-energy-science-pack-3=Энергетический исследовательский пакет 3 +se-energy-science-pack-4=Энергетический исследовательский пакет 4 +se-entanglement-data=Данные о запутанности +se-enriched-naquium=Обогащённый наквий +se-exotic-fission-data=Данные об экзотическом делении ядер +se-exotic-singularity-data=Данные о сингулярности +se-explosion-shielding-data=Данные о взрывозащите +se-experimental-alloys-data=Данные об экспериментальных сплавах +se-experimental-biochemical-data=Экспериментальные биохимические данные +se-experimental-bioculture=Экспериментальные биокультуры +se-experimental-genetic-data=Экспериментальные генетические данные +se-experimental-material-decay-data=Экспериментальные данные о распаде материалов +se-experimental-material-spectral-data=Экспериментальные данные о спектрах материалов +se-experimental-material=Прототип экспериментального материала +se-experimental-specimen=Экспериментальная биомасса +se-experimental-superconductor=Прототип сверхпроводника +se-forcefield-data=Данные о силовом поле +se-friction-data=Данные о трении +se-fusion-test-data=Данные о термоядерных тестах +se-gammaray-detector=Детектор гамма-лучей +se-gammaray-observation-data=Данные о наблюдении за гамма-лучами +se-gammaray-test-data=Данные о гамма-лучах +se-gate-fragment=Фрагмент артефакта +se-genetic-data=Генетические данные +se-gravity-wave-observation-data=Данные о наблюдении за гравитационными волнами +se-gravity-wave-data=Данные о гравитационных волнах +se-gravimetric-observation-data=Данные о гравиметрических наблюдениях +se-gravimetric-test-data=Данные о гравиметрических тестах +se-gravitational-lensing-data=Данные о гравитационных линзах +se-heat-shielding=Теплоизоляция +se-holmium-ore=Гольминит +se-holmium-ore-crushed=Измельчённый гольминит +se-holmium-ore-washed=Промытый гольминит +se-holmium-powder=Гольмиевый порошок +se-holmium-plate=Гольмиевая плита +se-holmium-ingot=Гольмиевый слиток +se-hot-thermodynamics-data=Данные о горячей термодинамике +se-impact-shielding-data=Данные по защите от ударов +se-infrared-observation-data=Данные об инфракрасных наблюдениях +se-ion-spectrometry-data=Данные об ионной спектрометрии +se-iridium-ore=Иридит +se-iridium-ore-crushed=Измельчённый иридит +se-iridium-ore-washed=Промытый иридит +se-iridium-piledriver=Иридиевый копер +se-iridium-powder=Иридиевый порошок +se-iridium-plate=Иридиевая плита +se-iridium-ingot=Иридиевый слиток +se-junk-data=Бесполезная карта памяти +se-laser-shielding-data=Данные о лазерной защите +se-lepton-data=Данные о лептонах +se-lifesupport-canister=Канистра жизнеобеспечения +se-machine-learning-data=Данные о машинном обучении +se-magnetic-canister=Магнитная канистра +se-magnetic-monopole-data=Данные о магнитных монополях +se-material-decay-data=Данные о распаде материалов +se-material-science-pack-1=Исследовательский пакет материалов 1 +se-material-science-pack-2=Исследовательский пакет материалов 2 +se-material-science-pack-3=Исследовательский пакет материалов 3 +se-material-science-pack-4=Исследовательский пакет материалов 4 +se-material-spectral-data=Данные о спектрах материалов +se-material-testing-pack=Пакет тестирования материалов +se-material-catalogue-1=Каталог материалов +se-material-catalogue-2=Широкий каталог материалов +se-material-catalogue-3=Исчерпывающий каталог материалов +se-material-catalogue-4=Расширенный каталог материалов +se-material-insight=Открытие о материалах +se-medpack=Аптечка +se-medpack-2=Аптечка 2 +se-medpack-3=Аптечка 3 +se-medpack-4=Аптечка 4 +se-meteor-defence=Противометеорное сооружение +se-meteor-defence-ammo=Снаряды для противометеорного сооружения +se-meteor-point-defence=Противометеорная пушка +se-meteor-point-defence-ammo=Снаряды для противометеорной пушки +se-methane-ice=Метановый лёд +se-micro-black-hole-data=Данные о микро чёрных дырах +se-microwave-observation-data=Данные о микроволновых наблюдениях +se-negative-pressure-data=Данные об отрицательном давлении +se-nano-cold-thermodynamics-data=Данные о холодной термодинамике наноматериалов +se-nano-compressive-strength-data=Данные о прочности наноматериалов на сжатие +se-nano-hot-thermodynamics-data=Данные о горячей термодинамике наноматериалов +se-nanomaterial=Наноматериалы +se-nano-tensile-strength-data=Данные о прочности наноматериалов на разрыв +se-naquium-ore=Наквитит +se-naquium-ore-crushed=Измельчённый наквитит +se-naquium-ore-washed=Промытый наквитит +se-naquium-powder=Наквиевый порошок +se-naquium-plate=Наквиевая плита +se-naquium-ingot=Наквиевый слиток +se-neural-anomaly-data=Данные о нейронной аномалии +se-nutrient-vat=Бак с питательными веществами +se-observation-frame-blank=Чистая наблюдательная система +se-observation-frame-gammaray=Гамма-лучевая наблюдательная система +se-observation-frame-infrared=Инфракрасная наблюдательная система +se-observation-frame-microwave=Микроволновая наблюдательная система +se-observation-frame-radio=Радиоволновая наблюдательная система +se-observation-frame-uv=УФ наблюдательная система +se-observation-frame-visible=Видимая наблюдательная система +se-observation-frame-xray=Рентгеновская наблюдательная система +se-orbital-data=Данные орбитальных расчетов +se-particle-beam-shielding-data=Данные по защите от пучка частиц +se-plague-bomb=Чумная ракета +se-plasma-canister=Канистра плазмы +se-plasma-electrodynamics-data=Данные о плазменной электродинамике +se-plasma-thermodynamics-data=Данные о плазменной термодинамике +se-polarisation-data=Поляризационные данные +se-pressure-containment-data=Данные об удержании давления +se-quantum-phenomenon-data=Данные о квантовых феноменах +se-quark-data=Данные о кварках +se-radiation-data=Данные о радиации +se-radiation-exposure-data=Данные о радиационном воздействии +se-radiation-exposure-resistance-data=Данные о сопротивлении радиации +se-radiation-shielding-data=Данные о радиационной защите +se-radio-observation-data=Данные о радиоволновых наблюдениях +se-rigidity-data=Данные о жёсткости +se-rtg-equipment=Портативный РИТЭГ +se-rtg-equipment-2=Портативный РИТЭГ МК2 +se-scrap=Мусор +se-shear-strength-data=Данные о прочности на сдвиг +se-significant-data=Важные данные +se-significant-specimen=Важная биомасса +se-singularity-data=Данные о сингулярности +se-space-capsule=Космическая капсула +se-space-mirror=Мультиспектральное зеркало +se-space-platform-plating=Обшивка космической платформы +se-space-platform-scaffold=Каркас космической платформы +se-space-rail=Космические рельсы +se-spaceship-floor=Пол космического корабля +se-specimen=Биомасса +se-subatomic-data=Субатомные данные +se-superconductivity-data=Данные о сверхпроводимости +se-superconductor=Сверхпроводник +se-superconductive-cable=Сверхпроводящий кабель +se-tensile-strength-data=Данные о прочности на разрыв +se-tesla-ammo=Патроны тесла-пушки +se-tesla-gun=Тесла-пушка +se-thruster-suit=Реактивный костюм +se-thruster-suit-2=Реактивный костюм МК2 +se-thruster-suit-3=Реактивный костюм МК3 +se-thruster-suit-4=Реактивный костюм МК4 +se-timespace-anomaly-data=Данные о пространственно-временной аномалии +se-used-lifesupport-canister=Использованная канистра жизнеобеспечения +se-uv-observation-data=Данные об УФ-наблюдениях +se-visible-observation-data=Данные о видимых наблюдениях +se-vitamelange=Витамеланж +se-vitamelange-nugget=Самородок витамеланжа +se-vitamelange-roast=Обжаренный витамеланж +se-vitamelange-spice=Пряный витамеланж +se-vitamelange-extract=Экстракт витамеланжа +se-vulcanite=Вулканит +se-vulcanite-crushed=Измельчённый вулканит +se-vulcanite-washed=Промытый вулканит +se-vulcanite-block=Вулканитовый кирпич +se-vulcanite-ion-exchange-beads=Катионо-ионообменные шарики +se-water-ice=Водяной лёд +se-xray-observation-data=Данные о рентгеновских наблюдениях +se-zero-point-energy-data=Данные о нулевой энергии +se-rocket-science-pack=Исследовательский пакет ракетостроения +space-science-pack=Оптимизационный иследовательский пакет +speed-module-4=Модуль скорости 4 +speed-module-5=Модуль скорости 5 +speed-module-6=Модуль скорости 6 +speed-module-7=Модуль скорости 7 +speed-module-8=Модуль скорости 8 +speed-module-9=Модуль скорости 9 +se-aeroframe-pole=Бериллиевый стержень +se-aeroframe-scaffold=Бериллиевый каркас +se-aeroframe-bulkhead=Бериллиевая перегородка +se-lattice-pressure-vessel=Решётчатый сосуд высокого давления +se-heavy-girder=Тяжёлая балка +se-heavy-bearing=Тяжёлый подшипник +se-heavy-composite=Тяжёлый композит +se-heavy-assembly=Тяжёлая сборка +se-bioscrubber=Биопереработчик +se-vitalic-epoxy=Виталическая эпоксидная смола +se-vitalic-reagent=Виталический реагент +se-vitalic-acid=Виталическая кислота +se-self-sealing-gel=Самоуплотняющийся гель +se-holmium-cable=Гольмиевый кабель +se-holmium-solenoid=Гольмиевый соленоид +se-quantum-processor=Квантовый процессор +se-dynamic-emitter=Динамический излучатель +se-naquium-processor=Наквиевый процессор +se-naquium-cube=Наквиевый куб +se-naquium-tessaract=Наквиевый тессеракт +se-wide-beacon=Маяк большого охвата +se-wide-beacon-2=Маяк большого охвата 2 +se-lifesupport-equipment-1=Оборудование жизнеобеспечения МК1 +se-lifesupport-equipment-2=Оборудование жизнеобеспечения МК2 +se-lifesupport-equipment-3=Оборудование жизнеобеспечения МК3 +se-lifesupport-equipment-4=Оборудование жизнеобеспечения МК4 +se-naquium-heat-pipe=Наквиевая тепловая трубка +se-naquium-heat-pipe-horizontal=Наквиевая горизонтальная тепловая трубка +se-naquium-heat-pipe-vertical=Наквиевая вертикальная тепловая трубка +se-naquium-heat-pipe-long=Наквиевая длинная тепловая трубка __1__ +se-deep-space-transport-belt=Конвейер глубокого космоса +se-deep-space-transport-belt-black=Чёрный конвейер глубокого космоса +se-deep-space-transport-belt-white=Белый конвейер глубокого космоса +se-deep-space-transport-belt-red=Красный конвейер глубокого космоса +se-deep-space-transport-belt-yellow=Жёлтый конвейер глубокого космоса +se-deep-space-transport-belt-green=Зелёный конвейер глубокого космоса +se-deep-space-transport-belt-cyan=Голубой конвейер глубокого космоса +se-deep-space-transport-belt-blue=Синий конвейер глубокого космоса +se-deep-space-transport-belt-magenta=Пурпурный конвейер глубокого космоса +se-deep-space-underground-belt=Подземный конвейер глубокого космоса +se-deep-space-underground-belt-black=Чёрный подземный конвейер глубокого космоса +se-deep-space-underground-belt-white=Белый подземный конвейер глубокого космоса +se-deep-space-underground-belt-red=Красный подземный конвейер глубокого космоса +se-deep-space-underground-belt-yellow=Жёлтый подземный конвейер глубокого космоса +se-deep-space-underground-belt-green=Зелёный подземный конвейер глубокого космоса +se-deep-space-underground-belt-cyan=Голубой подземный конвейер глубокого космоса +se-deep-space-underground-belt-blue=Синий подземный конвейер глубокого космоса +se-deep-space-underground-belt-magenta=Пурпурный подземный конвейер глубокого космоса +se-deep-space-splitter=Разделитель глубокого космоса +se-deep-space-splitter-black=Черный разделитель глубокого космоса +se-deep-space-splitter-white=Белый разделитель глубокого космоса +se-deep-space-splitter-red=Красный разделитель глубокого космоса +se-deep-space-splitter-yellow=Жёлтый разделитель глубокого космоса +se-deep-space-splitter-green=Зелёный разделитель глубокого космоса +se-deep-space-splitter-cyan=Голубой разделитель глубокого космоса +se-deep-space-splitter-blue=Синий разделитель глубокого космоса +se-deep-space-splitter-magenta=Пурпурный разделитель глубокого космоса +se-blueprint-registration-point=Пункт регистрации чертежей +se-delivery-cannon-capsule=Капсула доставочной пушки +se-delivery-cannon-capsule-packed=Капсула доставочной пушки: __1__ +se-delivery-cannon-targeter=Прицел доставочной пушки +se-delivery-cannon-weapon-capsule=Оружейная капсула доставочной пушки +se-delivery-cannon-weapon-capsule-packed=Оружейная капсула доставочной пушки: __1__ +se-delivery-cannon-weapon-targeter=Прицел оружейной доставочной пушки +se-energy-transmitter-targeter=Прицел энергетического луча +se-arcosphere=Аркосфера +se-arcosphere-a=λ Аркосфера Лямбда +se-arcosphere-b=ξ Аркосфера Кси +se-arcosphere-c=ζ Аркосфера Зета +se-arcosphere-d=θ Аркосфера Тета +se-arcosphere-e=ε Аркосфера Эпсилон +se-arcosphere-f=φ Аркосфера Фи +se-arcosphere-g=γ Аркосфера Гамма +se-arcosphere-h=ω Аркосфера Омега +se-arcosphere-collector=Сборщик аркосфер +se-star-probe=Звёздный зонд +se-belt-probe=Зонд пояса астероидов +se-void-probe=Зонд межзвёздной пустоты +se-star-probe-data=Данные звёздного зонда +se-belt-probe-data=Данные зонда пояса астероидов +se-void-probe-data=Данные зонда межзвёздной пустоты +se-nano-engineering-data=Данные о наноинжерении +se-annihilation-data=Данные об аннигиляции +se-naquium-structural-data=Данные о структуре наквия +se-hyperlattice-data=Данные о гипер-решётке +se-naquium-energy-data=Данные об энергии наквия +se-space-fold-data=Данные о складывании пространства +se-space-warp-data=Данные о деформации пространства +se-space-dialation-data=Данные о расширении пространства +se-space-injection-data=Данные об инъекции пространства +se-interstellar-data=Данные о межзвёздных путешествиях +se-teleportation-data=Данные о телепортации +se-wormhole-data=Данные о кротовой норе +se-rhga-data=Данные анализа гиперграфа реальности +se-deep-catalogue-1=Каталог глубокого космоса +se-deep-catalogue-2=Широкий каталог глубокого космоса +se-deep-catalogue-3=Исчерпывающий каталог глубокого космоса +se-deep-catalogue-4=Расширенный каталог глубокого космоса +se-space-probe-rocket=Ракета космического зонда +se-space-probe-rocket-deployed=Ракета космического зонда (Размещена) +se-railgun=Рельсотрон +se-railgun-ammo=Патроны для рельсотрона + +[item-description] +satellite=Спутник должен быть помещён в шахту спутниковой ракеты (или ракетную шахту космического зонда). Спутник может определять точные координаты тел в солнечной системе, в которой он запущен, или координаты далёких звезд. Предоставляет [img=item/se-satellite-telemetry] Спутниковую телеметрию. +se-satellite-telemetry=Регистрируемая спутниковая телеметрия, необходимая для ракетной науки. Получается при запуске [img=item/satellite] Навигационного спутника из шахты спутниковой ракеты (или ракетной шахты космического зонда). +se-antimatter-canister=Самая плотная форма энергии в безопасном для транспортировки контейнере. +se-astronomic-science-pack-1=Используется космическими лабораториями для исследований. +se-astronomic-science-pack-2=Используется космическими лабораториями для исследований. +se-astronomic-science-pack-3=Используется космическими лабораториями для исследований. +se-astronomic-science-pack-4=Используется космическими лабораториями для исследований. +se-beryllium-ore=Бериллиевая руда. +se-biological-science-pack-1=Используется космическими лабораториями для исследований. +se-biological-science-pack-2=Используется космическими лабораториями для исследований. +se-biological-science-pack-3=Используется космическими лабораториями для исследований. +se-biological-science-pack-4=Используется космическими лабораториями для исследований. +se-canister=Многоцелевой герметичный сосуд. +se-bloater-ammo=Создаёт на земле заражающую лужу из биологического ила. Заражённые враги раздуваются, что затрудняет их передвижение и наносит постепенный урон. Если они умирают, будучи раздутыми, они лопаются, и их разлетающиеся внутренности наносят урон ближайшим врагам, потенциально вызывая цепную реакцию. Общий урон кровавых снарядов составляет 50% от их максимального запаса здоровья. +se-pheromone-ammo=Сбивает с толку вражеского кусаку или плеваку, заставляя его думать, что вы дружелюбны, а их род - враги. +se-cryogun=Создаёт стену из льда, которая может заморозить врагов. +se-rocket-launch-pad-silo-dummy-ingredient-item=Создаётся помещением 100 секций грузовой ракеты и 1 космической капсулы в грузовую ракетную шахту. +se-cargo-rocket-cargo-pod=Компонент секции грузовой ракеты. +se-cargo-rocket-fuel-tank=Компонент секции грузовой ракеты. +se-cargo-rocket-section=Ключевой компонент грузовой ракеты. Поместите в грузовую ракетную шахту. Требуется 100 на ракету. Могут быть возвращены после посадки (20% базовый возврат). +se-cargo-rocket-section-packed=Упакованные для транспортировки секции грузовой ракеты. Должны быть распакованы для использования в строительстве ракеты. +se-deep-space-science-pack=Используется космическими лабораториями для исследований. +se-energy-science-pack-1=Используется космическими лабораториями для исследований. +se-energy-science-pack-2=Используется космическими лабораториями для исследований. +se-energy-science-pack-3=Используется космическими лабораториями для исследований. +se-energy-science-pack-4=Используется космическими лабораториями для исследований. +se-heat-shielding=Композитная панель, используемая для высокотемпературных приложений и космических структур. +se-holmium-ore=Гольмиевая руда. +se-iridium-ore=Иридиевая руда. +se-material-science-pack-1=Используется космическими лабораториями для исследований. +se-material-science-pack-2=Используется космическими лабораториями для исследований. +se-material-science-pack-3=Используется космическими лабораториями для исследований. +se-material-science-pack-4=Используется космическими лабораториями для исследований. +se-medpack=Используйте, чтобы излечить себя. +se-medpack-2=Используйте, чтобы излечить себя. +se-medpack-3=Используйте, чтобы излечить себя. +se-medpack-4=Используйте, чтобы излечить себя. +se-meteor-defence=Может защитить целую планету от метеоров, но может выстрелить только по 1 метеору за раз. Должно быть заряжено противометеорными боеприпасами и полностью заряжено для стрельбы. Точность 80%. Требуется подзарядка после выстрела. При подзарядке потребляет 20 МВт. +se-meteor-defence-ammo=Уничтожает метеоры. Должны быть загружены в противометеорное сооружение. +se-meteor-point-defence=Защищает область от метеоров. Способна сбить до 4 метеоров за залп. Должна быть заряжена противометеорными снарядами и полностью заряжена, чтобы выстрелить. Радиус 64, точность 50%, подзарядка после выстрела занимает время. Поверните, чтобы изменить режим зарядки. +se-naquium-ore=Наквиевая руда. Можно найти только в глубоком космосе, сокровище межзвёздной пустоты. +se-plague-bomb=Может уничтожить всю жизнь на планете. Обращаться с крайней осторожностью. (Может сильно просадить UPS, пока живность постепенно погибает, не рекомендуется для больших планет и мультиплеера.) +se-rtg-equipment=Радиоизотопный термоэлектрический генератор. Портативный генератор, преобразующий тепло от радиоактивного распада в электричество. Работает десятилетиями без дозаправки. +se-rtg-equipment-2=Радиоизотопный термоэлектрический генератор. Улучшенный портативный генератор, преобразующий тепло от радиоактивного распада в электричество. Работает десятилетиями без дозаправки. +se-space-capsule=Управляющая капсула, необходимая для грузовых ракет. Можно использовать для доставки пассажиров на поверхность ближайшей планеты. Войдите в капсулу, нажав __CONTROL__toggle-driving__. +se-space-platform-plating=[font=default-bold][color=#f5cb48]Ограничение размещения: Космос[/color][/font]\nПродвинутая обшивка, позволяющая быстро передвигаться по космической платформе. +se-space-platform-scaffold=[font=default-bold][color=#f5cb48]Ограничение размещения: Космос[/color][/font]\nБазовый каркас космической платформы, позволяющий размещать некоторые структуры в космосе. +se-space-rail=Рельсы, безопасные для использования в космосе, т.к. они не дают поезду сойти с рельс и разрушить все вокруг. Космическая платформа не требуется, они самоподдерживающиеся. Могут быть использованы на земле для эстетики. +se-spaceship-floor=Это напольное покрытие должно быть подо всеми частями космического корабля с космическими стенами по краям. Любые пробелы в полу нарушат герметичность, и такие секции могут отвалиться. +se-superconductive-cable=Сверхпроводящий композитный кабель, не требующий активного охлаждения. +se-tesla-gun=Скорострельная цепная молния. +se-thruster-suit=Скафандр, необходимый для выживания в космосе.\nИмеет реактивные двигатели и магнитные ботинки. +se-thruster-suit-2=Скафандр, необходимый для выживания в космосе.\nИмеет усиленные реактивные двигатели, больший инвентарь и сетку для оборудования. +se-thruster-suit-3=Скафандр, необходимый для выживания в космосе.\nИмеет усиленные реактивные двигатели, больший инвентарь и сетку для оборудования. +se-thruster-suit-4=Скафандр, необходимый для выживания в космосе.\nИмеет усиленные реактивные двигатели, больший инвентарь и сетку для оборудования. +se-rocket-science-pack=Используется космическими лабораториями для исследований. Должен быть сделан в космосе. +space-science-pack=Используется для улучшения большинства предметов. +se-wide-beacon=15 ячеек для модулей. Передаёт эффекты модулей ближайшим дружественным объектам в пределах 14 клеток. Несколько маяков, воздействующих на один и тот же объект, перегрузят его и не позволят ему работать. +se-wide-beacon-2=20 ячеек для модулей. Передаёт эффекты модулей ближайшим дружественным объектам в пределах 14 клеток. Несколько маяков, воздействующих на один и тот же объект, перегрузят его и не позволят ему работать. +se-lifesupport-equipment-1=Повышает эффективность жизнеобеспечения на +100% (добавочно). При установке не в космическом скафандре бонус эффективности уменьшается вдвое и не работает в космосе. +se-lifesupport-equipment-2=Повышает эффективность жизнеобеспечения на +200% (добавочно). При установке не в космическом скафандре бонус эффективности уменьшается вдвое и не работает в космосе. +se-lifesupport-equipment-3=Повышает эффективность жизнеобеспечения на +400% (добавочно). При установке не в космическом скафандре бонус эффективности уменьшается вдвое и не работает в космосе. +se-lifesupport-equipment-4=Повышает эффективность жизнеобеспечения на +800% (добавочно). При установке не в космическом скафандре бонус эффективности уменьшается вдвое и не работает в космосе. +se-arcosphere=Найдена в межзвёздной пустоте. +se-arcosphere-collector=Собирает аркосферы из межзвёздной пустоты. Должен быть запущен из шахты космического зонда, которая находится в поле астероидов. Аркосферы становится труднее найти по мере того, как вы их собираете. +se-star-probe=Собирает данные от звезды и возвращает [img=item/se-star-probe-data] данные звёздного зонда. Запускается из ракетной шахты космического зонда, находящейся на близкой орбите звезды. +se-belt-probe=Собирает данные из пояса астероидов и возвращает [img=item/se-belt-probe-data] данные зонда пояса астероидов. Запускается из ракетной шахты космического зонда, которая находится в поясе астероидов. +se-void-probe=Собирает данные из пустоты и возвращает [img=item/se-void-probe-data] данные зонда межзвёздной пустоты. Запускается из ракетной шахты космического зонда, которая находится на поле астероидов. +se-interstellar-data=Создаются в Нексусе на движущемся космическом корабле. При перемещении в межзвездном пространстве на более быстром корабле данные генерируются намного быстрее. +se-deep-catalogue-1=Наквий и наноинженерия. +se-deep-catalogue-2=Гипер-решёточные структуры, сингулярности и аннигиляция. +se-deep-catalogue-3=Микропространственные искажения и сверхпространственная наноинженерия. +se-deep-catalogue-4=Макропространственные искажения и сверхпространственные путешествия. +automation-science-pack=Используется для исследований в обычных лабораториях. +chemical-science-pack=Используется для исследований в обычных лабораториях. +logistic-science-pack=Используется для исследований в обычных лабораториях. +military-science-pack=Используется для исследований в обычных лабораториях. +production-science-pack=Используется для исследований в обычных лабораториях. +se-meteor-point-defence-container=Уничтожает метеоры. Должны быть загружены в противометеорную пушку. +utility-science-pack=Используется для исследований в обычных лабораториях. +beacon=8 ячеек для модулей. Передаёт эффекты модулей ближайшим дружественным объектам в пределах 3 клеток. Несколько маяков, воздействующих на один и тот же объект, перегрузят его и не позволят ему работать. +se-delivery-cannon=Обеспечивает точную доставку упакованных ресурсов с помощью доставочной пушки. +se-delivery-cannon-weapon=Обеспечивает точную доставку особых боеприпасов с помощью оружейной доставочной пушки. + +[recipe-name] +core-fragment=Переработка фрагментов ядра (__1__) +rocket-fuel=Твёрдое ракетное топливо +se-astrometric-analysis-multispectral-1=Мультиспектральный астрометрический анализ 1 +se-astrometric-analysis-multispectral-2=Мультиспектральный астрометрический анализ 2 +se-astrometric-analysis-multispectral-3=Мультиспектральный астрометрический анализ 3 +se-astronomic-insight-1=Астрономическое открытие +se-astronomic-insight-2=Широкое астрономическое открытие +se-astronomic-insight-3=Исчерпывающее астрономическое открытие +se-astronomic-insight-4=Расширенное астрономическое открытие +se-biological-insight-1=Биологическое открытие +se-biological-insight-2=Широкое биологическое открытие +se-biological-insight-3=Исчерпывающее биологическое открытие +se-biological-insight-4=Расширенное биологическое открытие +se-bio-methane-to-crude-oil=Биопроцесс переработки метана в сырую нефть +se-bio-sludge-crude-oil=Биоотходы от экспериментальной биомассы +se-bio-sludge-decontamination=Обеззараживание биоотходов +se-bio-sludge-from-fish=Биоотходы из рыбы +se-bio-sludge-from-wood=Биоотходы из дерева +se-bio-sludge-from-vitamelange=Биоотходы из витамеланжа +se-bio-sludge=Биоотходы из биомассы +se-broken-data-scrapping=Утилизация сломанных карт памяти +se-cargo-rocket-section-pack=Упаковать секции грузовой ракеты +se-cargo-rocket-section-unpack=Распаковать секции грузовой ракеты +se-condenser-turbine-reclaim-water=Генерация энергии с возвратом воды +se-core-fragment-omni=Переработка фрагментов ядра +se-core-mining=Глубинное бурение +se-empty-antimatter-canister=Поток антиматерии из канистры +se-empty-barrel-scrapping=Утилизация пустых бочек +se-empty-barrel-reprocessing=Переработка пустых бочек +se-space-capsule-scrapping=Утилизация космической капсулы +se-cargo-pod-scrapping=Утилизация грузового отсека +se-energy-insight-1=Энергетическое открытие +se-energy-insight-2=Широкое энергетическое открытие +se-energy-insight-3=Исчерпывающее энергетическое открытие +se-energy-insight-4=Расширенное энергетическое открытие +se-formatting-1=Форматирование данных +se-formatting-2=Эффективное форматирование данных +se-formatting-3=Продвинутое форматирование данных +se-formatting-4=Глубокое форматирование данных +se-material-insight-1=Открытие о материалах +se-material-insight-2=Широкое открытие о материалах +se-material-insight-3=Исчерпывающее открытие о материалах +se-material-insight-4=Расширенное открытие о материалах +se-matter-fusion-copper=Синтез материи (Медь) +se-matter-fusion-dirty=Синтез материи (Мусор) +se-matter-fusion-iron=Синтез материи (Железо) +se-matter-fusion-stone=Синтез материи (Камень) +se-matter-fusion-uranium=Синтез материи (Уран) +se-matter-fusion-to=Синтез материи (__1__) +se-orbital-data=Данные орбитальных расчетов +se-plasma-canister-empty=Поток плазмы из канистры +se-pulverised-sand=Измельчённый песок +se-radiating-space-coolant-fast=Быстрое охлаждение терможидкости до -10°C (прохладная) +se-radiating-space-coolant-normal=Охлаждение терможидкости до -10°C (прохладная) +se-radiating-space-coolant-slow=Медленное охлаждение терможидкости до -10°C (прохладная) +se-mixed-methane-gas-separation=Разделение смешанного метана +se-rocket-fuel-from-water-copper=Ракетное топливо из воды +se-scrap-decontamination=Обеззараживание мусора +se-scrap-recycling=Переработка мусора +se-space-coolant-cold=Переохлаждение терможидкости до -100°C (холодная) +se-space-coolant-supercooled=Переохлаждение терможидкости до -273°C (переохлаждённая) +se-space-coolant-supercooled-cryonite=Криоохлаждение терможидкости до -273°C (переохлаждённая) +se-space-coolant-cold-cryonite=Криоохлаждение терможидкости до -100°C (холодная) +se-space-coolant-supercoole-cryonite=Криоохлаждение терможидкости до -273°C (переохлаждённая) +se-simulation-a=Астрономическая симуляция +se-simulation-ab=Симуляция панспермии +se-simulation-abm=Симуляция ксенопрогрессии +se-simulation-am=Симуляция распределения материи +se-simulation-as=Симуляция астрочастиц +se-simulation-asb=Симуляция астробионики +se-simulation-asbm=Универсальная симуляция +se-simulation-asm=Астрофизическая симуляция +se-simulation-b=Биологическая симуляция +se-simulation-bm=Биомеханическая симуляция +se-simulation-m=Симуляция материалов +se-simulation-s=Энергетическая симуляция +se-simulation-sb=Биохимическая симуляция +se-simulation-sbm=Симуляция нанитов +se-simulation-sm=Симуляция наноматериалов +se-space-water-decontamination=Обеззараживание космической воды +se-spaceship-rocket-engine-burn=Сжигание жидкого ракетного топлива +se-specimen-fish=Выращивание рыбы в условиях микрогравитации +se-specimen-wood=Выращивание деревьев в условиях микрогравитации +se-thermodynamics-coal=Запекание под давлением в уголь +se-used-lifesupport-canister-cleaning=Очистка канистр жизнеобеспечения +se-used-lifesupport-canister-cleaning-space=Обеззараживание канистр жизнеобеспечения +space-science-pack=Оптимизационный исследовательский пакет +se-rocket-science-pack=Исследовательский пакет ракетостроения +se-big-turbine-internal=Декомпрессия высокотемпературного пара +se-arcosphere-fracture=Поляризация аркосферы +se-arcosphere-fold-in=Инверсия аркосферы +se-arcosphere-fold-out=Инверсия аркосферы +se-arcosphere-folding=Инверсия аркосферы: __1__ __2__ в __3__ __4__ +se-electric-boiling-void=Отвод испарений +se-space-probe-rocket-deployed=Ракета космического зонда (Размещена) +se-distortion-drive=Двигатель искажения +se-generic-scrapping=__1__ - утилизация +se-generic-recycling=__1__ - переработка + +[recipe-description] +se-astronomic-insight-2=Более сложный, но более ресурсоэффективный. +se-astronomic-insight-3=Более сложный, но более ресурсоэффективный. +se-astronomic-insight-4=Более сложный, но более ресурсоэффективный. +se-biological-insight-2=Более сложный, но более ресурсоэффективный. +se-biological-insight-3=Более сложный, но более ресурсоэффективный. +se-biological-insight-4=Более сложный, но более ресурсоэффективный. +se-core-mining=Конкретный получаемый фрагмент зависит от планеты. Реальное время производства зависит от количества глубинных буров на планете или луне. +se-energy-insight-2=Более сложный, но более ресурсоэффективный. +se-energy-insight-3=Более сложный, но более ресурсоэффективный. +se-energy-insight-4=Более сложный, но более ресурсоэффективный. +se-material-insight-2=Более сложный, но более ресурсоэффективный. +se-material-insight-3=Более сложный, но более ресурсоэффективный. +se-material-insight-4=Более сложный, но более ресурсоэффективный. +se-radiating-space-coolant-fast=Многократное охлаждение и нагревание терможидкости вызывает деградацию, более быстрое охлаждение приводит к увеличению потерь. +se-radiating-space-coolant-normal=Многократное охлаждение и нагревание терможидкости вызывает деградацию. +se-radiating-space-coolant-slow=Многократное охлаждение и нагревание терможидкости вызывает деградацию, медленное охлаждение вызывает меньшую деградацию. +se-arcosphere-fracture=Аркосферы могут быть собраны [img=item/se-arcosphere-collector] Сборщиком аркосфер +se-distortion-drive=Этот процесс должен активно происходить, чтобы активировать способность искажения Нексуса и выиграть игру. При критической скорости потребляет 6 ГВт. +se-delivery-cannon-weapon-pack-se-iridium-piledriver=Огромный физический урон на небольшой площади, вторичный взрывной урон ударной волной. + +[technology-name] +effectivity-module-4=Модуль эффективности 4 +effectivity-module-5=Модуль эффективности 5 +effectivity-module-6=Модуль эффективности 6 +effectivity-module-7=Модуль эффективности 7 +effectivity-module-8=Модуль эффективности 8 +effectivity-module-9=Модуль эффективности 9 +energy-shield-equipment=Энергетический щит +energy-shield-mk2-equipment=Энергетический щит МК2 +energy-shield-mk3-equipment=Энергетический щит МК3 +energy-shield-mk4-equipment=Энергетический щит МК4 +energy-shield-mk5-equipment=Энергетический щит МК5 +energy-shield-mk6-equipment=Энергетический щит МК6 +sand-processing=Производство песка +glass-processing=Производство стекла +liquid-rocket-fuel=Жидкое ракетное топливо +productivity-module-4=Модуль продуктивности 4 +productivity-module-5=Модуль продуктивности 5 +productivity-module-6=Модуль продуктивности 6 +productivity-module-7=Модуль продуктивности 7 +productivity-module-8=Модуль продуктивности 8 +productivity-module-9=Модуль продуктивности 9 +rocket-silo=Спутниковая ракетная шахта +rocketry=Боевые ракеты +se-adaptive-armour=Адаптивная броня +se-antimatter-engine=Двигатель на антиматерии +se-antimatter-reactor=Реактор на антиматерии +se-antimatter-production=Производство антиматерии +se-astronomic-science-pack=Астрономический исследовательский пакет +se-biological-science-pack=Биологический исследовательский пакет +se-condenser-turbine=Конденсирующая турбина +se-core-miner=Глубинное бурение +se-biogun=Био-пушка +se-cryogun=Крио-пушка +se-deep-space-science-pack=Исследовательский пакет глубокого космоса +se-deep-catalogue=Каталог глубокого космоса +se-dimensional-anchor=Якорь измерения +se-electric-boiler=Электрический бойлер +se-energy-science-pack=Энергетический исследовательский пакет +se-fluid-burner-generator=Жидкостный изотермический генератор +se-fuel-refining=Очистка топлива +se-heat-shielding=Теплоизоляция +se-ion-engine=Ионный двигатель +se-long-range-star-mapping=Картографирование далёких звёзд +se-material-science-pack=Исследовательский пакет материалов +se-medpack=Аптечка +se-medpack-2=Аптечка 2 +se-medpack-3=Аптечка 3 +se-medpack-4=Аптечка 4 +se-meteor-defence=Противометеорное сооружение +se-meteor-point-defence=Противометеорная пушка +se-nanomaterial=Наноматериалы +se-plague=Чума +se-processing-beryllium=Переработка бериллия +se-processing-cryonite=Переработка крионита +se-processing-holmium=Переработка гольмия +se-processing-iridium=Переработка иридия +se-processing-naquium=Переработка наквия +se-processing-vitamelange=Переработка витамеланжа +se-processing-vulcanite=Переработка вулканита +se-pulveriser=Измельчитель +se-railgun=Рельсотрон +se-rocket-cargo-safety=Безопасность ракетных грузов +se-rocket-fuel-from-water=Ракетное топливо из воды +se-rocket-launch-pad=Грузовая ракетная шахта +se-rocket-landing-pad=Ракетная посадочная площадка +se-rocket-reusability=Повторное использование ракет +se-rocket-survivability=Выживаемость ракет +se-rtg-equipment=Портативный РИТЭГ +se-rtg-equipment-2=Портативный РИТЭГ МК2 +se-space-assembling=Космическая сборка +se-space-accumulator=Гольмиевый аккумулятор +se-space-accumulator-2=Наквиевый аккумулятор +se-space-astrometrics-laboratory=Астрометрический центр +se-space-biochemical-laboratory=Биохимический центр +se-space-catalogue-astronomic=Астрономический каталог +se-space-catalogue-biological=Биологический каталог +se-space-catalogue-universal=Универсальный каталог +se-space-catalogue-energy=Энергетический каталог +se-space-catalogue-material=Каталог материалов +se-space-data-card=Карта данных +se-space-decontamination-facility=Центр обеззараживания +se-space-electromagnetics-laboratory=Центр электромагнетизма +se-space-genetics-laboratory=Центр генетики +se-space-gravimetrics-laboratory=Гравиметрический центр +se-space-growth-facility=Центр роста +se-space-hypercooling=Переохлаждение +se-space-laser-laboratory=Лазерный центр +se-lifesupport-facility=Центр жизнеобеспечения +se-space-manufactory=Космическая фабрика +se-space-material-fabricator=Синтезатор материи +se-space-matter-fusion=Слияние материи +se-space-mechanical-laboratory=Центр механики +se-space-particle-accelerator=Ускоритель частиц +se-space-particle-collider=Коллайдер частиц +se-space-plasma-generator=Генератор плазмы +se-space-platform-plating=Обшивка космической платформы +se-space-platform-scaffold=Каркас космической платформы +se-space-radiation-laboratory=Радиационный центр +se-space-radiating-efficiency=Эффективность теплового излучения +se-space-radiating-speed=Скорость теплового излучения +se-space-radiator=Тепловой радиатор +se-space-radiator-2=Тепловой радиатор 2 +se-space-rail=Космическая железная дорога +se-recycling-facility=Центр переработки +se-space-science-lab=Космическая научная лаборатория +se-space-simulation-ab=Симуляция панспермии +se-space-simulation-am=Симуляция астроматериалов +se-space-simulation-as=Симуляция астрочастиц +se-space-simulation-bm=Биомеханическая симуляция +se-space-simulation-sb=Биохимическая симуляция +se-space-simulation-sm=Симуляция наноматериалов +se-space-simulation-abm=Симуляция ксенопрогрессии +se-space-simulation-asb=Симуляция астробионики +se-space-simulation-asm=Астрофизическая симуляция +se-space-simulation-sbm=Симуляция нанитов +se-space-simulation-asbm=Универсальная симуляция +se-space-solar-panel=Плоская солнечная панель +se-space-spectrometry-facility=Центр спектрометрии +se-space-supercomputer=Суперкомпьютер +se-space-telescope=Телескоп +se-space-telescope-gammaray=Гамма-лучевой телескоп +se-space-telescope-xray=Рентгеновский телескоп +se-space-telescope-microwave=Микроволновый телескоп +se-space-telescope-radio=Радиотелескоп +se-space-thermodynamics-laboratory=Лаборатория термодинамики +se-spaceship=Космический корабль +se-spaceship-integrity=Структурная целостность космического корабля +se-factory-spaceship=Космический корабль - фабрика +se-superconductive-cable=Сверхпроводящий кабель +se-teleportation=Телепортация +se-tesla-gun=Тесла-пушка +se-thruster-suit=Реактивный костюм +space-science-pack=Оптимизационный иследовательский пакет +se-rocket-science-pack=Иследовательский пакет ракетостроения +speed-module-4=Модуль скорости 4 +speed-module-5=Модуль скорости 5 +speed-module-6=Модуль скорости 6 +speed-module-7=Модуль скорости 7 +speed-module-8=Модуль скорости 8 +speed-module-9=Модуль скорости 9 +se-aeroframe-pole=Бериллиевый стержень +se-aeroframe-scaffold=Бериллиевый каркас +se-aeroframe-bulkhead=Бериллиевая перегородка +se-lattice-pressure-vessel=Решётчатый сосуд высокого давления +se-heavy-girder=Тяжёлая балка +se-heavy-bearing=Тяжёлый подшипник +se-heavy-composite=Тяжёлый композит +se-heavy-assembly=Тяжёлая сборка +se-bioscrubber=Биопереработчик +se-vitalic-epoxy=Виталическая эпоксидная смола +se-vitalic-reagent=Виталический реагент +se-vitalic-acid=Виталическая кислота +se-self-sealing-gel=Самоуплотняющийся гель +se-holmium-cable=Гольмиевый кабель +se-holmium-solenoid=Гольмиевый соленоид +se-quantum-processor=Квантовый процессор +se-dynamic-emitter=Динамический излучатель +se-naquium-processor=Наквиевый процессор +se-naquium-cube=Наквиевый куб +se-naquium-tessaract=Наквиевый тессеракт +se-wide-beacon=Маяк большого охвата +se-wide-beacon-2=Маяк большого охвата 2 +se-lifesupport-equipment=Оборудование жизнеобеспечения +se-lifesupport-equipment-1=Оборудование жизнеобеспечения МК1 +se-lifesupport-equipment-2=Оборудование жизнеобеспечения МК2 +se-lifesupport-equipment-3=Оборудование жизнеобеспечения МК3 +se-lifesupport-equipment-4=Оборудование жизнеобеспечения МК4 +se-supercharger=Супер-зарядка +se-addon-power-pole=Дополнительная опора ЛЭП +se-pylon=Пилон +se-pylon-substation=Пилон-подстанция +se-pylon-construction=Строительный пилон +se-pylon-construction-radar=Строительный пилон с радаром +se-shield-projector=Проектор щита +se-deep-space-transport-belt=Конвейеры глубокого космоса +se-big-turbine=Высокотемпературная турбина-генератор +se-big-heat-exchanger=Высокотемпературный теплообменник +se-zone-discovery-random=Открытие зон +se-zone-discovery-targeted=Открытие целевых зон +se-zone-discovery-deep=Открытие зон глубокого космоса +se-delivery-cannon=Доставочная пушка +se-delivery-cannon-capsule-iridium=Иридиевая капсула доставочной пушки +se-delivery-cannon-weapon=Оружейная доставочная пушка +se-spaceship-clamps=Зажимы для стыковки космических кораблей +se-bio-upgrade-constitution=Био-улучшение: Телосложение +se-bio-upgrade-strength=Био-улучшение: Сила +se-bio-upgrade-agility=Био-улучшение: Ловкость +se-bio-upgrade-dexterity=Био-улучшение: Выносливость +se-bio-upgrade-intelligence=Био-улучшение: Интеллект +se-energy-beaming=Энергетические лучи +se-energy-beam-defence=Зонт: защита от энергетических лучей +se-nexus=Нексус +se-spaceship-victory=Победа: Космический корабль +se-arcosphere=Сбор аркосфер +se-arcosphere-folding=Складывание аркосферы +se-space-probe=Ракетная шахта космического зонда +se-linked-container=Хранилище Арколинк +k2-conversion=__1__: преобразование + +[technology-description] +energy-shield-equipment=Защитный пузырь. Быстро заряжается, но требует много энергии. +energy-shield-mk2-equipment=Защитный пузырь. Быстро заряжается, но требует много энергии. +energy-shield-mk3-equipment=Защитный пузырь. Быстро заряжается, но требует много энергии. +energy-shield-mk4-equipment=Защитный пузырь. Быстро заряжается, но требует много энергии. +energy-shield-mk5-equipment=Защитный пузырь. Быстро заряжается, но требует много энергии. +energy-shield-mk6-equipment=Защитный пузырь. Быстро заряжается, но требует много энергии. +sand-processing=Дробление, перемалывание и фильтрация сырья в чистый песок. +glass-processing=Плавление песка в стекло. +rocket-silo=Позволяет запускать спутники на орбиту для открытия новых планет. +se-adaptive-armour=Броня, использующая энергию для самопочинки. Выполняет схожую роль с энергетическим щитом с меньшими требованиями энергии и гораздо меньшей скоростью регенерации. +se-antimatter-engine=Аннигиляция антиматерии для создания невероятной тяги. +se-antimatter-reactor=Аннигилирует антиматерию с материей для получения экстремального тепла. +se-antimatter-production=Создание антиматерии, самой плотной формы хранимой энергии. +se-astronomic-science-pack=Позволяет исследовать технологии, связанные с космическими путешествиями и межзвёздной логистикой. +se-biological-science-pack=Позволяет исследовать технологии, связанные с улучшением ваших физических возможностей, биооружия и нейропроцессоров. +se-condenser-turbine=75% от эффективности паровой турбины, но 99% использованного пара возвращается в виде воды. Диапазон температур: от 100 до 999. +se-core-miner=Позволяет добывать неограниченные ресурсы с планет и лун, но добыча снижается, если на планете уже имеются такие буры. +se-biogun=Оружие, использующее биологические боеприпасы. +se-cryogun=Создаёт стену из льда, которая может заморозить врагов. +se-deep-space-science-pack=Требуется для наиболее продвинутых технологий. +se-deep-catalogue=Космические искажения, экзотическая материя и данные нанотехнологий, структурированные для анализа и компьютерного моделирования. Требуется для самых передовых технологий. +se-dimensional-anchor=Использует гравитацию звезды как точку стабилизации пространственной аномалии. +se-electric-boiler=Получает пар из воды, используя электрическую энергию. Энергоэффективность 90%. +se-energy-science-pack=Позволяет исследовать технологии, связанные с фундаментальными силами и субатомными открытиями. +se-fluid-burner-generator=Потребляет жидкое топливо с запасённой энергией (например, жидкое ракетное топливо) для генерации электричества. Простой и компактный, но не обладает энергоэффективностью больших паровых установок. Разработан для космоса. Фактическое потребление жидкости зависит от энергоёмкости жидкого топлива. +se-fuel-refining=Очищает более продвинутые виды топлива. +se-heat-shielding=Композитная панель, используемая для высокотемпературных приложений и космических структур. +se-ion-engine=Использует небольшое количество ионного потока и много энергии для создания тяги. +se-long-range-star-mapping=Некоторые отдалённые галактики можно идентифицировать по характерным образцам необычных звезд. Результаты записываются в [img=virtual-signal/informatron] Информатрон [__CONTROL__informatron__]. +se-material-science-pack=Позволяет исследовать технологии, связанные с продвинутыми материалами для более продвинутых инженерных требований. +se-medpack=Используйте аптечку, чтобы подлечить себя. +se-medpack-2=Используйте аптечку, чтобы подлечить себя. +se-medpack-3=Используйте аптечку, чтобы подлечить себя. +se-medpack-4=Используйте аптечку, чтобы подлечить себя. +se-meteor-defence=Сбивает метеоры в небе до того, как они разрушат вашу базу. Противометеорное сооружение может защитить всю планету, но может стрелять лишь по 1 метеору за выстрел. +se-meteor-point-defence=Сбивает метеоры в небе до того, как они разрушат вашу базу. Противометеорная пушка может защитить небольшую область от максимум 4 метеоров за раз. +se-nanomaterial=Сложное расположение различных материалов, организованных в наномасштабе, для создания композитного материала с превосходными свойствами. +se-plague=Великая чума уничтожает всю жизнь на планете. Обращаться с КРАЙНЕЙ осторожностью. +se-processing-beryllium=Превращает берилл в бериллий, очень лёгкий, прочный, коррозионно- и радиационно-стойкий металл. Он также почти не взаимодействует с рентгеновскими лучами. +se-processing-cryonite=Переработка замороженных кристаллов крионита в крионитовые стержни, которые находят применение в заморозке, охлаждении и смазке. Крионит в основном встречается на замёрзших планетах. +se-processing-holmium=Превращение гольминита в гольмий, редкоземельный металл с самой высокой магнитной проницаемостью среди всех элементов. +se-processing-iridium=Превращение иридита в иридий, самый стойкий к коррозии металл и самый плотный элемент при более высоких температурах. Важно для тяжелых условий эксплуатации. +se-processing-naquium=Превращение таинственного кристалла наквитита из глубокого космоса в наквий, металлоподобный материал с необычным пространственно-временным взаимодействием. +se-processing-vitamelange=Превращение примитивной каменной губки витамеланжа в ценный питательный экстракт. +se-processing-vulcanite=Превращение вулканического кристалла вулканита в очищенный порошок, используемый в высокотемпературных процессах плавки, ракетном топливе и других высокотемпературных химических процессах. Вулканит встречается на вулканических планетах и в большинстве фрагментов ядра. +se-pulveriser=Измельчает и дробит твёрдые минералы и фрагменты ядра планеты. +se-railgun=Электромагнитно ускоренные дротики, разогнанные до таких скоростей, что оставляют плазменный след перед тем как испариться. Высокий урон, низкая скорострельность. +se-rocket-cargo-safety=Снижает шанс повреждения грузовых отсеков в полете на 10% (мультипликативно). +se-rocket-fuel-from-water=Генерирует водород-кислородное ракетное топливо через электролиз воды. +se-rocket-launch-pad=Позволяет запускать грузы в космос или на другие планеты. +se-rocket-landing-pad=Позволяет вам доставлять грузовые капсулы на конкретную посадочную площадку. При дальнейшем исследовании она может возвращать части ракет. +se-rocket-reusability=Увеличивает долю частей, которые могут быть возвращены при успешной посадке на посадочную площадку на 4% (базово 20%, максимум 100%). +se-rocket-survivability=Снижает шанс повреждения ракет в полете или шанс навигационной ошибки, приводящей к промаху мимо посадочной площадки на 10% (мультипликативно). +se-rtg-equipment=Радиоизотопный термоэлектрический генератор. Портативный генератор, преобразующий тепло от радиоактивного распада в электричество. Работает десятилетиями без дозаправки. +se-rtg-equipment-2=Радиоизотопный термоэлектрический генератор. Улучшенный портативный генератор, преобразующий тепло от радиоактивного распада в электричество. Работает десятилетиями без дозаправки. +se-space-assembling=Модифицированный сборочный автомат, способный работать в космосе. +se-space-accumulator=Постройка для хранения большого количества излишков электроэнергии в качестве резерва. +se-space-accumulator-2=Постройка для хранения невероятного количества излишков электроэнергии в качестве резерва. +se-space-astrometrics-laboratory=Совмещает, сравнивает и подсчитывает различные источники астрономической информации. +se-space-biochemical-laboratory=Продвинутая химическая лаборатория, специализирующаяся на биохимии. Может также проводить базовую химическую и нефтяную переработку. +se-space-catalogue-astronomic=Астрономические данные, подготовленные для анализа и компьютерной симуляции. Требуется для дальнейших астрономических исследований. +se-space-catalogue-biological=Биологические данные, подготовленные для анализа и компьютерной симуляции. Требуется для дальнейших биологических исследований. +se-space-catalogue-universal=Объединённые данные для анализа и компьютерного моделирования. Требуется для дальнейших исследований глубокого космоса. +se-space-catalogue-energy=Энергетические данные, подготовленные для анализа и компьютерной симуляции. Требуется для дальнейших энергетических исследований. +se-space-catalogue-material=Данные о материалах, подготовленные для анализа и компьютерной симуляции. Требуется для дальнейших исследований материалов. +se-space-data-card=Многоцелевое устройство хранения данных. Требуется для более продвинутых исследований. +se-space-decontamination-facility=Очищает вещества для использования в стерильных условиях и подготавливает жидкости для использования в условиях низкого давления. +se-space-electromagnetics-laboratory=Оборудование для использования сильного магнитного поля и экстремальных напряжений. +se-space-genetics-laboratory=Лаборатория, предназначенная для генетического секвенирования, генетических модификаций и генетической печати культур. +se-space-gravimetrics-laboratory=Анализирует и симулирует гравитационные возмущения. +se-space-growth-facility=Выращивает биологические образцы в различных контролируемых условиях, невозможных где-либо еще, например при микрогравитации. +se-space-hypercooling=Производит теплообмен с терможидкостью, делая одну холодней, а другую горячей. +se-space-laser-laboratory=Эксперименты с лазерами. Надевайте защитные очки. +se-lifesupport-facility=Поддержание жизни в различных враждебных средах. +se-space-manufactory=Ключевая технология для массового производства в космосе. +se-space-material-fabricator=Синтезирует новые материалы. Гибрид ускорителя частиц и 3D-принтера. +se-space-matter-fusion=Производит материалы ядерным слиянием. +se-space-mechanical-laboratory=Предлагает спектр механических процессов: дробление, разрывание, сдвиг, вибрация и т.д. +se-space-particle-accelerator=Ускоряет частицы почти до скорости света. +se-space-particle-collider=Сталкивает скоростные частицы и анализирует результат. +se-space-plasma-generator=Генерирует различные виды плазмы. +se-space-platform-plating=Прочная обшивка космической платформы. Гладкая и удобная для быстрой ходьбы. +se-space-platform-scaffold=Базовый каркас космической платформы. Подходит для строительства на нём, но плоховат для ходьбы. +se-space-radiation-laboratory=Относительно безопасное место для работы с радиоактивными материалами. Может использоваться для переработки урана. +se-space-radiating-efficiency=Более медленное, но более ресурсоэффективное охлаждение перегретой терможидкости. +se-space-radiating-speed=Более быстрое, но более ресурсоёмкое охлаждение перегретой терможидкости. +se-space-radiator=Излучает излишнее тепло от перегретой терможидкости. +se-space-radiator-2=Излучает излишнее тепло от перегретой терможидкости. +se-space-rail=Рельсы, безопасные для использования в космосе, т.к. они не дают поезду сойти с рельс и разрушить всё вокруг. Могут быть использованы на земле для эстетики. +se-recycling-facility=Утилизация предметов и переработка лома в сырьё. +se-space-science-lab=Позволяет обрабатывать Исследовательские пакеты ракетостроения и более продвинутую космическую науку. +se-space-simulation-ab=Более эффективная симуляция путём комбинирования нескольких дисциплин. +se-space-simulation-am=Более эффективная симуляция путём комбинирования нескольких дисциплин. +se-space-simulation-as=Более эффективная симуляция путём комбинирования нескольких дисциплин. +se-space-simulation-bm=Более эффективная симуляция путём комбинирования нескольких дисциплин. +se-space-simulation-sb=Более эффективная симуляция путём комбинирования нескольких дисциплин. +se-space-simulation-sm=Более эффективная симуляция путём комбинирования нескольких дисциплин. +se-space-simulation-abm=Более эффективная симуляция путём комбинирования нескольких дисциплин. +se-space-simulation-asb=Более эффективная симуляция путём комбинирования нескольких дисциплин. +se-space-simulation-asm=Более эффективная симуляция путём комбинирования нескольких дисциплин. +se-space-simulation-sbm=Более эффективная симуляция путём комбинирования нескольких дисциплин. +se-space-simulation-asbm=Более эффективная симуляция путём комбинирования нескольких дисциплин. +se-space-solar-panel=Высокоэффективная солнечная панель, по которой можно ходить. +se-space-spectrometry-facility=Спектрофотометрия, газовая хроматография, масс-спектрометрия и другие спектрографии. Запусти что-нибудь в стену, отклони это, посмотри куда попадёт. +se-space-supercomputer=Позволяет проводить более продвинутую манипуляцию и обработку данных и симуляции. +se-space-telescope=Cложный телескоп, чувствительный ко многим длинам волн в видимом диапазоне. +se-space-telescope-gammaray=Гамма-лучи не преломляются. Этот мощный телескоп использует зеркала и специальные детекторы. +se-space-telescope-xray=Рентгеновские лучи блокируются большинством атмосфер. Этот мощный телескоп создан для космоса, где атмосфера не проблема. +se-space-telescope-microwave=Огромный телескоп, детектирующий микроволны и реликтовое излучение. +se-space-telescope-radio=Огромный телескоп, детектирующий очень слабые радиоволны от удалённых источников. +se-space-thermodynamics-laboratory=Осуществляет процессы, связанные с экстремальными температурами. Также может выполнять основные термические процессы, например плавку. +se-spaceship=Судно, которое вы строите часть за частью с помощью стен и полов, а затем используете консоль, чтобы слетать на другую планету или дальше. +se-spaceship-integrity=Каждый уровень повышает лимит структурной целостности космического корабля на 100. +se-factory-spaceship=Каждый уровень повышает лимит структурной целостности космического корабля на 500. +se-superconductive-cable=Сверхпроводящий композитный кабель, не требующий активного охлаждения. +se-teleportation=Разблокирует другие технологии телепортации. Эта технология ничего не делает сама по себе, но является воротами к другим технологиям. +se-tesla-gun=Скорострельная цепная молния. Может поразить до 30 врагов за выстрел. Совершает длинные прыжки между целями или короткие прыжки вдоль земли, если целей нет. +se-thruster-suit=Скафандр с реактивными двигателями и магнитными ботинками. Не выходите в космос без него. +space-science-pack=Открывает более прямое развитие ракетной науки и технологий, получаюших преимущества от этих достижений. +se-rocket-science-pack=Позволяет исследовать технологии, связанные с переработкой экзотических ресурсов и производством космических вариантов наземных сооружений. +se-aeroframe-pole=Прочный лёгкий бериллиевый стержень, обычно используемый как опорная балка в авиастроении и освоении космоса. +se-aeroframe-scaffold=Прочный легкий бериллиевый каркас, обычно используемый в качестве основного внутреннего каркаса для авиации и космических кораблей. +se-aeroframe-bulkhead=Прочная лёгкая воздухонепроницаемая перегородка из бериллия, используемая в качестве внешней обшивки или стен вторичных отсеков авиации и космических кораблей. +se-lattice-pressure-vessel=Прочный и легкий бериллиевый сосуд высокого давления с внутренней решёткой, которая позволяет некоторым жидкостям сжиматься сверх их нормальных пределов. В случае разрыва жидкость под давлением безопасно стравливается. +se-heavy-girder=Тяжелая конструкционная балка из иридия, в основном используется для тяжелой промышленности и тяжелых военных судов. +se-heavy-bearing=Большой тяжёлый иридиевый подшипник, который может бесконечно работать под действием сил, способных раздавить более мелкие материалы. +se-heavy-composite=Толстая, почти непроницаемая переборка, практически не подверженная нагреву, коррозии, радиации и механическим воздействиям, но невероятно тяжелая. +se-heavy-assembly=Тяжёлая механическая сборка шестерён и конфигурируемых компонентов, используемая в тяжёлой промышленности. +se-bioscrubber=Камера обработки материалов, в которой используются биологические процессы для разрушения нежелательных материалов. +se-vitalic-epoxy=Невероятно прочная эпоксидная смола биологического происхождения с регенерирующими свойствами. +se-vitalic-reagent=Эффективный универсальный реагент для широкого спектра химических реакций. +se-vitalic-acid=Крепкий коктейль из различных кислот. +se-self-sealing-gel=Вязкий гель под давлением, но твёрдый, как сталь, под действием вакуума. Часто используется в качестве внутренней пленки в переборках для пассивной герметизации проколов. +se-holmium-cable=Кабель в оболочке, специально разработанный для устранения нежелательного шума в линии, который может мешать работе чувствительной электроники. +se-holmium-solenoid=Чрезвычайно мощный электромагнит. +se-quantum-processor=Использует суперпозицию и запутанность для более эффективной работы над задачами высокой сложности. +se-dynamic-emitter=Быстро регулируемая система излучателя света или частиц, которая может изменять ряд свойств для большего диапазона или режимов сканирования или свойств проникновения материала. +se-naquium-processor=Вычисления в наквиевом тессеракте обходят некоторые обычные ограничения на плотность вычислений. +se-naquium-cube=Использование необычного взаимодействия наквия с пространством-временем, чтобы сложить большой объем в маленький куб. +se-naquium-tessaract=Необычный объект, который принимает форму куба, но при повороте или ускорении превращается в ряд других геометрических фигур. +se-wide-beacon=Маяк большого охвата передаёт эффекты модулей ближайшим дружественным объектам в пределах 14 клеток. Имеет 15 ячеек для модулей (20 после улучшения). Несколько маяков, воздействующих на один и тот же объект, перегрузят его и не позволят ему работать. +se-wide-beacon-2=Маяк большого охвата 2 передаёт эффекты модулей ближайшим дружественным объектам в пределах 14 клеток. Имеет 20 ячеек для модулей. Несколько маяков, воздействующих на один и тот же объект, перегрузят его и не позволят ему работать. +se-lifesupport-equipment-1=Повышает эффективность жизнеобеспечения на +100% (добавочно). При установке не в космическом скафандре бонус эффективности уменьшается вдвое и не работает в космосе. +se-lifesupport-equipment-2=Повышает эффективность жизнеобеспечения на +200% (добавочно). При установке не в космическом скафандре бонус эффективности уменьшается вдвое и не работает в космосе. +se-lifesupport-equipment-3=Повышает эффективность жизнеобеспечения на +400% (добавочно). При установке не в космическом скафандре бонус эффективности уменьшается вдвое и не работает в космосе. +se-lifesupport-equipment-4=Повышает эффективность жизнеобеспечения на +800% (добавочно). При установке не в космическом скафандре бонус эффективности уменьшается вдвое и не работает в космосе. +se-supercharger=Может заряжать до 64 дронов одновременно и на высокой скорости. Максимальное энергопотребление 1 ГВт. +se-addon-power-pole=Маленькая опора ЛЭП, предназначенная для присоединения к зданиям или для точного контроля покрытия электросети. +se-pylon=Распределяет электроэнергию. Диапазон подключения 64 клетки. +se-pylon-substation=Распределяет электроэнергию. Диапазон подключения 64 клетки, область электроснабжения 64х64 клетки. +se-pylon-construction=Распределяет электроэнергию и расширяет область строительства. Диапазон подключения 64 клетки, область строительства 64х64 клетки. +se-pylon-construction-radar=Распределяет электроэнергию, расширяет область строительства, проводит радарное сканирование. Диапазон подключения 64 клетки, область строительства и радара 256х256 клеток. Логистическая область 4х4 клетки. +se-shield-projector=Создаёт защитное силовое поле. Больше энергии требуется, когда проектор заряжается или когда щиту наносят урон. Может блокировать вражеские снаряды, если установлен мод "Combat Mechanics Overhaul". +se-deep-space-transport-belt=Конвейеры для быстрой транспортировки на большие расстояния, которые можно разместить в космосе. Можно использовать разные цвета, чтобы легко идентифицировать линии на расстоянии. +se-big-turbine=Большой генератор на 1 ГВт, который принимает пар с температурой 5000°C, выдает пар с температурой 500°C на другом конце и выводит воду по бокам. 99% энергоэффективности, 99% экономии воды. +se-big-heat-exchanger=Большой теплообменник, рассчитанный на высокие температуры и большую мощность. +se-zone-discovery-random=Поиск планет, лун и поясов астероидов с помощью телескопов. +se-zone-discovery-targeted=Поиск планет, лун и поясов астероидов, у которых есть определенные ресурсы. Выберите предпочтительные ресурсы в [img=virtual-signal/informatron] Информатрон > Открытие зон. +se-zone-discovery-deep=Поиск интересных областей глубокого межзвёздного космоса. Поля астероидов могут содержать множество уникальных и ценных ресурсов. +se-delivery-cannon=Рельсовая пушка, способная выводить ресурсы на орбиту и дальше, и бронированные сундуки для поимки ресурсов. +se-delivery-cannon-capsule-iridium=Хотя иридий является тяжелым металлом, повышенная прочность означает, что можно использовать меньше материала по сравнению со стандартной доставочной капсулой. Общий вес такой же, но иридиевая проще в изготовлении. +se-delivery-cannon-weapon=Большая рельсовая пушка, способная стрелять особыми боеприпасами, такими как атомная бомба, по другим поверхностям. +se-spaceship-clamps=Позволяет размещать стыковочные зажимы, чтобы космические корабли могли закрепиться в определенном месте, соединив их. Для автоматизации требуются сигналы «Использовать зажим...» и «Заякорить к...», подаваемые в консоль. +se-bio-upgrade-constitution=Увеличивает максимальное здоровье. +se-bio-upgrade-strength=Увеличивает количество переносимых вещей. +se-bio-upgrade-agility=Увеличивает скорость передвижения. +se-bio-upgrade-dexterity=Увеличивает скорость крафта. +se-bio-upgrade-intelligence=Увеличивает обучение, получаемое от исследовательских пакетов. +se-energy-beaming=Мощный энергетический луч, который можно использовать как оружие с небес, или для передачи энергии туда, где это необходимо. +se-energy-beam-defence=Защищает от космических энергетических лучей и выбросов корональной массы. Работает, поднимая магнитные частицы в защитный пузырь, затем выравнивая и собирая частицы по мере необходимости, чтобы рассеять враждебные энергетические лучи. +se-nexus=Устройство, которое можно активировать на космическом корабле, движущемся в межзвёздном пространстве, для генерации данных, а с помощью дополнительных технологий оно может активировать поле искажения пространства (для Победы: Космический корабль). +se-spaceship-victory=Позволяет Нексусу активировать двигатель искажения, чтобы покинуть местное звёздное скопление. Для победы в игре Нексус должен работать в режиме двигателя искажения на космическом корабле, движущемся со скоростью __1__ в межзвёздном пространстве в течение __2__ секунд. +se-arcosphere=Позволяет собирать аркосферы, затерянные в межзвёздной пустоте. +se-arcosphere-folding=Позволяет использовать аркосферы в качестве экстрапространственных щипцов. +se-space-probe=Ракетная шахта космического базирования для запуска космических зондов. Также может использоваться для дешёвого запуска спутников. +se-linked-container=Контейнер, связанный через экстрапространство с другими контейнерами. Связи контейнера зависят от поверхности, на которой он впервые размещён. +se-thruster-suit-2=Улучшенный скафандр с усиленными реактивными двигателями, большим инвентарём и сеткой для экипировки. +se-thruster-suit-3=Улучшенный скафандр с усиленными реактивными двигателями, большим инвентарём и сеткой для экипировки. +se-thruster-suit-4=Улучшенный скафандр с усиленными реактивными двигателями, большим инвентарём и сеткой для экипировки. +effect-transmission=Маяк передаёт эффекты модулей ближайшим дружественным объектам в пределах 3 клеток. Имеет 8 ячеек для модулей. Несколько маяков, воздействующих на один и тот же объект, перегрузят его и не позволят ему работать. +se-unit-capsule=Капсула для высадки дружественных __1__ юнитов. + +[modifier-description] +tesla-shooting-speed-bonus=Скорострельность тесла-пушки +tesla-damage-bonus=Бонус урона тесла-пушки +railgun-damage-bonus=Бонус урона рельсотрона +railgun-shooting-speed-bonus=Скорострельность рельсотрона +cryogun-shooting-speed-bonus=Скорострельность крио-пушки +cryogun-damage-bonus=Бонус урона крио-пушки +character-running-speed=Бонус скорости персонажа: +__1__ +character-crafting-speed=Скорость крафта персонажа: +__1__ + +[virtual-signal-name] +signal-speed=Сигнал скорости +se-signal-speed=Сигнал скорости +signal-distance=Сигнал расстояния +se-signal-distance=Сигнал расстояния +se-star=Звезда +se-planet=Планета +se-planet-orbit=Орбита планеты +se-moon=Луна +se-moon-orbit=Орбита луны +se-asteroid-belt=Пояс астероидов +se-asteroid-field=Поле астероидов +se-anomaly=Аномалия +se-meteor=Метеор +se-spaceship=Космический корабль +se-cargo-rocket=Грузовая ракета +se-remote-view=Удалённый просмотр +se-death=Смерть +se-character-corpse=Труп +se-ruin=Руины +se-accolade=Награда +se-remove=Удалить +se-radius=Радиус +se-hierarchy=Иерархия +se-spaceship-launch=Запуск космического корабля +se-anchor-using-left-clamp=Заякорить с помощью левого зажима космического корабля +se-anchor-using-right-clamp=Заякорить с помощью правого зажима космического корабля +se-anchor-to-left-clamp=Заякориться к зажиму слева +se-anchor-to-right-clamp=Заякориться к зажиму справа +se-beacon-overload=Перегрузка маяка +se-heat=Тепло +se-pin=Отметка + +[controls] +se-remote-view=Просмотр с навигационного спутника +se-remote-view-pins=Отметки навигационного спутника +se-remote-view-next=Вперёд по истории навигации +se-remote-view-previous=Назад по истории навигации +se-universe-explorer=Атлас Вселенной +se-respawn=Возрождение +se-mode-toggle=Переключить режим работы конструкции +se-pin-one=Перейти к отметке 1 +se-pin-two=Перейти к отметке 2 +se-pin-three=Перейти к отметке 3 +se-pin-four=Перейти к отметке 4 +se-pin-five=Перейти к отметке 5 +se-pin-six=Перейти к отметке 6 +se-pin-seven=Перейти к отметке 7 +se-pin-eight=Перейти к отметке 8 +se-pin-nine=Перейти к отметке 9 +se-pin-zero=Перейти к отметке 0 +se-pin-set-one=Установить отметку 1 +se-pin-set-two=Установить отметку 2 +se-pin-set-three=Установить отметку 3 +se-pin-set-four=Установить отметку 4 +se-pin-set-five=Установить отметку 5 +se-pin-set-six=Установить отметку 6 +se-pin-set-seven=Установить отметку 7 +se-pin-set-eight=Установить отметку 8 +se-pin-set-nine=Установить отметку 9 +se-pin-set-zero=Установить отметку 0 + +[shortcut] +se-remote-view=Просмотр с навигационного спутника +se-remote-view-pins=Отметки навигационного спутника +se-universe-explorer=Атлас Вселенной +se-respawn=Возрождение +se-pin-one=Перейти к отметке 1 +se-pin-two=Перейти к отметке 2 +se-pin-three=Перейти к отметке 3 +se-pin-four=Перейти к отметке 4 +se-pin-five=Перейти к отметке 5 +se-pin-six=Перейти к отметке 6 +se-pin-seven=Перейти к отметке 7 +se-pin-eight=Перейти к отметке 8 +se-pin-nine=Перейти к отметке 9 +se-pin-zero=Перейти к отметке 0 +se-pin-set-one=Установить отметку 1 +se-pin-set-two=Установить отметку 2 +se-pin-set-three=Установить отметку 3 +se-pin-set-four=Установить отметку 4 +se-pin-set-five=Установить отметку 5 +se-pin-set-six=Установить отметку 6 +se-pin-set-seven=Установить отметку 7 +se-pin-set-eight=Установить отметку 8 +se-pin-set-nine=Установить отметку 9 +se-pin-set-zero=Установить отметку 0 + +[shortcut-name] +se-remote-view=Просмотр с навигационного спутника [__CONTROL__se-remote-view__] +se-remote-view-pins=Отметки навигационного спутника [__CONTROL__se-remote-view-pins__] +se-universe-explorer=Атлас Вселенной [__CONTROL__se-universe-explorer__] +se-respawn=Возрождение [__CONTROL__se-respawn__] +se-pin-one=Перейти к отметке 1 [__CONTROL__se-pin-one__] +se-pin-two=Перейти к отметке 2 [__CONTROL__se-pin-two__] +se-pin-three=Перейти к отметке 3 [__CONTROL__se-pin-three__] +se-pin-four=Перейти к отметке 4 [__CONTROL__se-pin-four__] +se-pin-five=Перейти к отметке 5 [__CONTROL__se-pin-five__] +se-pin-six=Перейти к отметке 6 [__CONTROL__se-pin-six__] +se-pin-seven=Перейти к отметке 7 [__CONTROL__se-pin-seven__] +se-pin-eight=Перейти к отметке 8 [__CONTROL__se-pin-eight__] +se-pin-nine=Перейти к отметке 9 [__CONTROL__se-pin-nine__] +se-pin-zero=Перейти к отметке 0 [__CONTROL__se-pin-zero__] +se-pin-set-one=Установить отметку 1 [__CONTROL__se-pin-set-one__] +se-pin-set-two=Установить отметку 2 [__CONTROL__se-pin-set-two__] +se-pin-set-three=Установить отметку 3 [__CONTROL__se-pin-set-three__] +se-pin-set-four=Установить отметку 4 [__CONTROL__se-pin-set-four__] +se-pin-set-five=Установить отметку 5 [__CONTROL__se-pin-set-five__] +se-pin-set-six=Установить отметку 6 [__CONTROL__se-pin-set-six__] +se-pin-set-seven=Установить отметку 7 [__CONTROL__se-pin-set-seven__] +se-pin-set-eight=Установить отметку 8 [__CONTROL__se-pin-set-eight__] +se-pin-set-nine=Установить отметку 9 [__CONTROL__se-pin-set-nine__] +se-pin-set-zero=Установить отметку 0 [__CONTROL__se-pin-set-zero__] + +[tile-name] +se-space-platform-plating=Обшивка космической платформы +se-space-platform-scaffold=Каркас космической платформы +se-space-platform-underlay=Космос +se-space-platform-underlay-l=Космос +se-space-platform-underlay-r=Космос +se-space=Пустой космос +se-regolith=Реголит +se-asteroid=Астероид +se-spaceship-floor=Пол космического корабля + +[mod-setting-name] +se-meteor-interval=Интервал между метеорами +se-plague-max-runtime=Максимальное время действия чумы +se-planets=Количество планет +se-planet-size=Площадь планет (от 1% до 10000%) +se-seed=Зерно генерации планет +se-skip-experimental-warning=Пропустить экспериментальное предупреждение +se-print-meteor-info=Выводить тревогу о метеорах в консоль +se-print-satellite-discovered-nothing=Оповещать, когда спутник ничего не обнаруживает +se-space-pipe-capacity=Вместимость космических труб +se-electric-boiler=Электрический бойлер +se-deep-space-belt-speed=Скорость конвейеров глубокого космоса +se-deep-space-belt-black=Чёрные конвейеры глубокого космоса +se-deep-space-belt-white=Белые конвейеры глубокого космоса +se-deep-space-belt-red=Красные конвейеры глубокого космоса +se-deep-space-belt-yellow=Жёлтые конвейеры глубокого космоса +se-deep-space-belt-green=Зелёные конвейеры глубокого космоса +se-deep-space-belt-cyan=Голубые конвейеры глубокого космоса +se-deep-space-belt-blue=Синие конвейеры глубокого космоса +se-deep-space-belt-magenta=Пурпурные конвейеры глубокого космоса +se-space-science-pack=Резервный вариант космического исследовательского пакета +se-never-show-lifesupport=Не показывать интерфейс жизнеобеспечения +se-show-zone-preview=Показывать окно просмотра зоны +se-pylon-charge-points=Точки зарядки строительного пилона +se-cmes-max-frequency=Максимальный интервал выброса корональной массы +se-spawn-small-resources=Дополнительные стартовые месторождения +se-show-overhead-button-satellite-mode=Показывать кнопку Навигационных спутников +se-show-overhead-button-interstellar-map=Показывать кнопку Межзвёздной карты +se-show-overhead-button-universe-explorer=Показывать кнопку Атласа Вселенной +se-show-pin-help-tooltip=Отображать подсказки у кнопок отметок +se-scan-search-budget=Бюджет спутникового сканирования +se-scan-chart-budget=Бюджет спутникового картографирования +se-scan-alert-interval=Интервал предупреждений сканирования +se-supercharger-individual-charge-rate=Скорость одного порта супер-зарядки (МВт) + +[mod-setting-description] +se-meteor-interval=Базовый интервал в минутах между ударами метеоров. После каждого удара следующий удар случается через случайное количество минут между 1 и этим значением. +se-plague-max-runtime=Максимальное время действия био-оружия в минутах. После того, как чума действовала этот промежуток времени, все частицы чумы, деревья и враги будут уничтожены. +se-planets=Не изменять посреди игры. +se-planet-size=Не изменять посреди игры. +se-seed=Не изменять посреди игры. +se-skip-experimental-warning=Предупреждение при старте новой игры не появится и вы не получите новых предупреждений, если сообщение изменится. +se-print-meteor-info=Позволяет просмотреть метеорные тревоги в консоли после того, как главное сообщение исчезло, путём нажатия клавиши __CONTROL__toggle-console__. +se-print-satellite-discovered-nothing=Когда спутник запускается, вы получаете предупреждение о том, что было обнаружено. Этот параметр может отключить предупреждение, если ничего не было обнаружено. +se-space-pipe-capacity=Жидкостная вместимость космических труб. +se-electric-boiler=Добавляет в игру электрический бойлер. +se-deep-space-belt-speed=Конвейеры для глубокого космоса должны быть самыми быстрыми конвейерами. Если у вас есть другие моды, которые добавляют более быстрые конвейеры, вы можете увеличить скорость конвейера глубокого космоса, чтобы она соответствовала или превышала. +se-deep-space-belt-black=Чёрный конвейер, разделитель и подземный конвейер можно отключить, чтобы уменьшить беспорядок в интерфейсе. +se-deep-space-belt-white=Белый конвейер, разделитель и подземный конвейер можно отключить, чтобы уменьшить беспорядок в интерфейсе. +se-deep-space-belt-red=Красный конвейер, разделитель и подземный конвейер можно отключить, чтобы уменьшить беспорядок в интерфейсе. +se-deep-space-belt-yellow=Жёлтый конвейер, разделитель и подземный конвейер можно отключить, чтобы уменьшить беспорядок в интерфейсе. +se-deep-space-belt-green=Зелёный конвейер, разделитель и подземный конвейер можно отключить, чтобы уменьшить беспорядок в интерфейсе. +se-deep-space-belt-cyan=Голубой конвейер, разделитель и подземный конвейер можно отключить, чтобы уменьшить беспорядок в интерфейсе. +se-deep-space-belt-blue=Синий конвейер, разделитель и подземный конвейер можно отключить, чтобы уменьшить беспорядок в интерфейсе. +se-deep-space-belt-magenta=Пурпурный конвейер, разделитель и подземный конвейер можно отключить, чтобы уменьшить беспорядок в интерфейсе. +se-space-science-pack=Если другой мод добавляет способ получения космической науки, то этот метод будет использован. Если нет возможности сделать это, Space Exploration может либо удалить его, либо использовать как Оптимизационный исследовательский пакет. +se-never-show-lifesupport=Если отмечено, то интерфейс жизнеобеспечения никогда не будет отображаться, даже если вы задыхаетесь. +se-show-zone-preview=Снимите флажок, чтобы отключить окно предварительного просмотра зоны в Атласе Вселенной. Если у вас есть активные наложения отладки Factorio, окно предварительного просмотра может снизить FPS. +se-pylon-charge-points=Снимите флажок, чтобы удалить точки зарядки строительных пилонов. Это помогает контролировать поведение дронов при зарядке, но вам может потребоваться добавить другие возможности зарядки на дальних маршрутах. +se-cmes-max-frequency=Максимальный интервал для повторяющихся выбросов корональной массы (ВКМ). Значение в часах, 0 = отключено. Первый ВКМ произойдёт в течение первой минуты игры и в основном безвредно. Второй задерживается примерно на 48 часов. Задержка между повторами составляет от 50% до 100% от максимального значения интервала. Ненулевое значение применяется только к новым событиям; после установки очередного отсчёта изменение не повлияет. Установка нуля приведет к удалению всех запланированных ВКМ, изменение вступит в силу в течение минуты. +se-spawn-small-resources=Добавляет некоторые дополнительные месторождения с небольшими ресурсами в начальную область. Участки ресурсов находятся в кластере, чтобы сократить время бега между ресурсами. +se-show-overhead-button-satellite-mode=Отображает небольшую кнопку в верхнем левом углу экрана для переключения Навигационного спутникового просмотра. +se-show-overhead-button-interstellar-map=Отображает небольшую кнопку в левом верхнем углу экрана для переключения Межзвёздной карты. +se-show-overhead-button-universe-explorer=Отображает небольшую кнопку в левом верхнем углу экрана для переключения Атласа Вселенной. +se-show-pin-help-tooltip=Показывать развернутую всплывающую подсказку на кнопках отметок, в которой даются инструкции по их использованию. +se-scan-search-budget=Спутниковое сканирование: количество чанков, по которым можно проверить состояние сканирования. Высокие значения позволяют быстрее пройти уже отсканированные блоки, чтобы добраться до неизведанного края. +se-scan-chart-budget=Спутниковое сканирование: количество запросов чанков, которые могут быть добавлены в буфер сканирования параллельно. Новые запросы сканирования не будут выполняться, если предыдущие блоки не были завершены. +se-scan-alert-interval=Интервал в секундах между предупреждениями об обновлении сканирования поверхности. Открытие поверхностей увеличивает размер файла сохранения игры, поэтому лучше не оставлять его включенным и не забывать. +se-supercharger-individual-charge-rate=Устанавливает скорость зарядки каждого отдельного порта зарядки в МВт (не влияет на максимальную скорость зарядки). Минимальное (по умолчанию) значение составляет 90 МВт, чего достаточно для зарядки обычного робота за один тик, можно увеличить до 1000 МВт или 1 ГВт, максимальная скорость супер-зарядки. + +[string-mod-setting] +se-space-science-pack-Remove=Удалить полностью +se-space-science-pack-Replace=Заменить на Исследовательский пакет ракетостроения +se-space-science-pack-OptimisationUranium=Оптимизация: Уран-крио рецепт +se-space-science-pack-OptimisationFish=Оптимизация: Вита-вулка-рыба рецепт + +[autoplace-control-names] +planet-size=[img=virtual-signal/se-planet] Размер планеты +se-water-ice=[img=item/se-water-ice] Водяной лёд (только космос) +se-methane-ice=[img=item/se-methane-ice] Метановый лёд (только космос) +se-cryonite=[img=item/se-cryonite] Крионит (не в родных мирах) +se-vulcanite=[img=item/se-vulcanite] Вулканит (не в родных мирах) +se-vitamelange=[img=item/se-vitamelange] Витамеланж (не в родных мирах) +se-beryllium-ore=[img=item/se-beryllium-ore] Бериллиевая руда (не в родных мирах) +se-holmium-ore=[img=item/se-holmium-ore] Гольмиевая руда (не в родных мирах) +se-iridium-ore=[img=item/se-iridium-ore] Иридиевая руда (не в родных мирах) +se-naquium-ore=[img=item/se-naquium-ore] Наквиевая руда (не в родных мирах) + +[map-gen-preset-name] +space-exploration=Исследование космоса + +[map-gen-preset-description] +space-exploration=Настройки по умолчанию для мода "Исследование космоса" + +[tooltip-category] +shot=Использование diff --git a/space-exploration_0.5.80/space-exploration/locale/tr/strings.cfg b/space-exploration_0.5.80/space-exploration/locale/tr/strings.cfg new file mode 100644 index 0000000..6bbd2e9 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/locale/tr/strings.cfg @@ -0,0 +1,2374 @@ +spaceship-integrity100=+100 Uzay gemisi yapısal bütünlüğü +spaceship-integrity300=+300 Uzay gemisi yapısal bütünlüğü +spaceship-integrity500=+500 Uzay gemisi yapısal bütünlüğü +arcosphere-discovery=Derin yıldızlararası uzaydan arkosferleri toplayın +core-mining-productivity-5=+%5 Çekirdek madencilik üretkenliği +se-zone-discovery-random=Araştırıldığında rastgele bölge keşfini tetikler. +se-zone-discovery-targeted=Araştırıldığında kaynak hedefli bölge keşfini tetikler. +se-zone-discovery-deep=Araştırıldığında derin uzay bölgesi keşfini tetikler. +unlock-spaceship-victory=Uzay gemisi zafer koşulunun kilidini açar: Yıldızlararası uzayda __1__ hızında __2__ saniye boyunca Bozulma Sürücüsü modunda çalışan bir Nexus ile bir uzay gemisine binin. + +[mod-name] +space-exploration=Space Exploration + +[mod-description] +space-exploration=Kargo Roketi yaparak uzaya bir şeyler fırlatın. Rokete binerek uzaya gidin ve uzay yürüyüşüne başlayın. Zor ve veriye dayalı uzay bilimi geliştirmek için bir yörüngesel uzay platformu oluşturun. Karo karo bir uzay gemisi döşemesi inşa edin, onu bir gezegen yüzeyinden diğer gezegenlere, aylara, asteroit alanlarına uçurun. Yıldızlararası ölüm ışınları ve derin uzay madenciliği kolonileri inşa edin. Uzaylı gezegenlerdeki antik kalıntıları ve derin uzayda kaybolan kalıntıları keşfedin. Deneme aşamasındayken bağımlılığı bulunmayan eklentilerle oynamanız önerilmez. + +[space-exploration] +space-exploration=Space Exploration +menu_space-exploration=Space Exploration +title_space-exploration=Space Exploration +off=Kapalı +on=Açık +close=Kapat +show=Göster +close-instruction-only-confirm=Kapat (__CONTROL__confirm-gui__) +show-own-location=Kendi lokasyonunu göster +wdc_auto_off=Elle hedefleme +wdc_auto_on=Otomatik yeniden hedefleme +name=İsim +rename-something=__1__ öğesini yeniden isimlendir +trigger-none=Yok (Elle) +trigger-fuel-full=Yakıt Dolduğunda Fırlat +trigger-cargo-full=Kargo Dolduğunda Fırlat +trigger-fuel-full-signal=Yakıt Dolduğunda Yeşil Sinyalde Fırlat +trigger-cargo-full-signal=Kargo Dolduğunda Yeşil Sinyalde Fırlat +trigger-cargo-full-or-signal=Yeşil Sinyalde veya Kargo Dolduğunda Fırlat +destination-type-zone=Yaklaşık Konum +destination-type-landing-pad=Kargo İniş Pisti +button-launch=Fırlat +button-launch-disabled=Fırlat (Devre dışı) +destination-crash-warning=Uyarı: Çarpışma olasılığını azaltmak için bir Kargo İniş Pisti seçin +recipe-to=__1__ öğesinden __2__ öğesine +recipe-from=__1__ ila __2__ arasında +simple-a-b=__1____2__ +simple-a-b-space=__1__ __2__ +simple-a-b-comma=__1__, __2__ +simple-a-b-break=__1__\n__2__ +simple-a-b-divide=__1__ / __2__ +simple-bold=[font=default-bold]__1__[/font] +star-map=Yıldız Haritası +interstellar-map=Yıldızlararası Harita +interstellar-space=Yıldızlararası Uzay +planetary-system=__1__ Sistemi +solar-system=__1__ Sistemi +remote-view=Navigasyon Uydu Bağlantısı [__CONTROL__se-remote-view__] +remote-view-window-title=[img=virtual-signal/se-remote-view] Navigasyon Uydusu [__CONTROL__se-remote-view__] +remote-view-currently-viewing=Şu an görüntülenen: +remote-view-instruction=Daha çok yıldız, gezegen, ay ve diğer bölgeleri keşfetmek için daha fazla uydu fırlatın. +remote-view-spaceships=__1__ Uzay Gemisi +remote-view-spaceships-anchored=__1__ Uzay gemisi sabitlendi +remote-view-clamps=__1__ Uzay gemisi kenetlendi +remote-view-show-hide-resources=Kaynakları göster/gizle +remote-view-show-hide-stats=İstatistikleri göster/gizle +remote-view-show-hide-anchor-info=Sabitlenme bilgilerini göster/gizle +remote-view-show-hide-danger-zones=Tehlike bölgelerini göster/gizle +open-pins-remote-view=Tüm İşaretlemeler [__CONTROL__se-remote-view-pins__] +exit-pins-remote-view=Tüm İşaretlemelerden Çık [__CONTROL__se-remote-view-pins__] +remote-view-history-delete=Yüzey geçmişini sil. +remote-view-history-previous=Yüzey geçmişinde geri git [__CONTROL__se-remote-view-previous__].\n__1__ +remote-view-history-next=Yüzey geçmişinde ileri git [__CONTROL__se-remote-view-next__].\n__1__ +remote-view-history-item=__1__ +remote-view-history-item_named=__1__ → __2__ +exit-remote-view=Navigasyon Uydu Bağlantısından Çık [__CONTROL__se-remote-view__] +remote-view-pin-make=Mevcut görünümü işaretle +remote-view-pins-list=Tüm İşaretler +remote-view-add-pin=Şu anki konumda yeni işaret oluştur +remote-view-pin-details=İşaret özellikleri +remote-view-pin-button-tooltip=__1__ → __2__ +remote-view-pin-button-tooltip-hotkey-one=__1__ → __2__ [__CONTROL__se-pin-one__] +remote-view-pin-button-tooltip-hotkey-two=__1__ → __2__ [__CONTROL__se-pin-two__] +remote-view-pin-button-tooltip-hotkey-three=__1__ → __2__ [__CONTROL__se-pin-three__] +remote-view-pin-button-tooltip-hotkey-four=__1__ → __2__ [__CONTROL__se-pin-four__] +remote-view-pin-button-tooltip-hotkey-five=__1__ → __2__ [__CONTROL__se-pin-five__] +remote-view-pin-button-tooltip-hotkey-six=__1__ → __2__ [__CONTROL__se-pin-six__] +remote-view-pin-button-tooltip-hotkey-seven=__1__ → __2__ [__CONTROL__se-pin-seven__] +remote-view-pin-button-tooltip-hotkey-eight=__1__ → __2__ [__CONTROL__se-pin-eight__] +remote-view-pin-button-tooltip-hotkey-nine=__1__ → __2__ [__CONTROL__se-pin-nine__] +remote-view-pin-button-tooltip-hotkey-zero=__1__ → __2__ [__CONTROL__se-pin-zero__] +remote-view-pin-button-tooltip-help-text=\n\n[font=default-bold]- Kontroller -[/font]\nSol tık: İşaretlenen konuma geç\nSağ tık: İşareti düzenle\nCTRL-sağ tık: Sil +remote-view-pin-button-tooltip-help-text-update-position=\nShift-sağ tık: İşaret konumunu güncelle +remote-view-pin-name=İsim +remote-view-pin-icon=İkon +remote-view-pin-zoom=Yakınlaştırma +remote-view-pin-hotkey=Kısayol +remote-view-pin-hotkey-none=Yok +remote-view-pin-hotkey-one=__CONTROL__se-pin-one__ - __1__ +remote-view-pin-hotkey-two=__CONTROL__se-pin-two__ - __1__ +remote-view-pin-hotkey-three=__CONTROL__se-pin-three__ - __1__ +remote-view-pin-hotkey-four=__CONTROL__se-pin-four__ - __1__ +remote-view-pin-hotkey-five=__CONTROL__se-pin-five__ - __1__ +remote-view-pin-hotkey-six=__CONTROL__se-pin-six__ - __1__ +remote-view-pin-hotkey-seven=__CONTROL__se-pin-seven__ - __1__ +remote-view-pin-hotkey-eight=__CONTROL__se-pin-eight__ - __1__ +remote-view-pin-hotkey-nine=__CONTROL__se-pin-nine__ - __1__ +remote-view-pin-hotkey-zero=__CONTROL__se-pin-zero__ - __1__ +remote-view-pin-location=Konum +remote-view-pin-location-position={x=__1__, y=__2__} +remote-view-pin-location-position-button=İşaret pozisyonunu güncelle +remote-view-pin-location-position-button-tooltip=İşaretin pozisyonunu anında mevcut görüntülenen konumla değiştir. +remote-view-pin-viewer-title=Tüm İşaretler +remote-view-pin-viewer-misc-row=Çeşitlli +remote-view-pin-viewer-spaceship-row=Uzay Gemileri +open-zonelist=Evren Gezginini Aç +zonelist-window-title=[img=virtual-signal/se-planet-orbit] Evren Gezgini [__CONTROL__se-universe-explorer__] +priority-icon=[img=virtual-signal/se-accolade] +priority-tooltip=Öncelik (önemliden gereksize doğru bölgeleri sıralamak için) +trim-zone-button=[img=item/cliff-explosives] Yüzeyi Kırp +trim-zone-button-tooltip=Oyuncu varlıkları, özel varlıklar ve harita merkezi tarafından tanımlanan bölgelerin dışında kalan parçaları kaldır. +trim-zone-button-no-surface-tooltip=Böyle bir yüzey yok. +trim-zone-results=__2__ bölgesindeki parçalardan __1__ adet silindi. X [__3__, __4__ arası] Y [__5__, __6__ arası] kutusuna kırpıldı. +delete-zone-button=[img=virtual-signal/se-remove] Yüzeyi Sil +delete-zone-button-tooltip=Bazı yüzeyler silinemez +delete-zone-button-no-surface-tooltip=Böyle bir yüzey yok. +scan-zone-button=[img=item/satellite] Yüzeyi Tara +scan-zone-button-tooltip=Uyarı: Tarama devam ederken oyun yavaşlayabilir. Tarama oranı eklenti ayarlarından ayarlanabilir. Tarama herhangi bir anda durdurulabillir. +scan-zone-button-disabled-tooltip=Yüzeyi taramak için bir uydu fırlatmalısınız. +stop-scan-zone-button=[img=item/satellite] Tüm taramaları durdur +stop-scan-zone-button-tooltip=Tüm yüzeylerdeki her aktif taramayı durdurur. +generic-requires-satellite=Önce uydu fırlatmalısınız. +remote-view-requires-satellite=Navigasyon uydu bağlantısını kullanmak için bir uydu fırlatmanız gerekiyor. +satellite-discovered-platform=[color=cyan]Uydu yörüngede dönen bir uzay platformu keşfetti.[/color] [img=virtual-signal/se-planet-orbit] Evren Gezgini [__CONTROL__se-universe-explorer__]'ni açın, __1__'i seçin ve Yüzeyi Görüntüle'ye tıklayın. Orada faydalı şeyler olabilir. +satellite-view-unlocked=[color=cyan][img=virtual-signal/se-remote-view] Navigasyon Uydu Bağlantısı[/color]'nın kilidini açtınız. Bu, bir uydu aracılığıyla dünyayı ve keşfettiğiniz diğer yerleri görmenizi sağlar. Etkinleştirmek için [color=green][__CONTROL__se-remote-view__][/color] tuşuna basın veya kısayol araç kutusunu kullanın (hotbar'ınızın sağında). +source-discovered-zone=[color=cyan]__1__, yeni bir __2__ keşfetti: [/color][img=__3__] [color=white]__4__[/color]. Keşfedilen konumlar [img=virtual-signal/se-planet-orbit] Evren Gezgini [__CONTROL__se-universe-explorer__] içinde görüntülenebilir. +discovered-zone=[color=cyan]Yeni bir __1__ keşfedildi: [img=__2__] [/color][color=white]__3__[/color]. +discovered-anomaly-additional=[img=virtual-signal/se-anomaly] anomalide bilinmeyen nesne algılandı. [img=virtual-signal/informatron] Keşif Günlüğünüz [__CONTROL__informatron__] güncellendi. +satellite-discovered-nothing=Yeni bir uydu fırlatıldı ama yeni bir şey bulamadı. Diğer yıldızların etrafında bulunacak daha çok şey olabilir. +tech-discovered-nothing=Teleskoplar, yıldızların yakınında yeni bir şey bulamadılar. Derin uzayda bulunacak daha çok şey olabilir. +tech-deep-discovered-nothing=Teleskoplar derin uzayda yeni bir şey bulamadılar. +galaxy_ship_authenticated=[img=virtual-signal/se-spaceship] Sahipsiz uzay gemisi: [color=cyan]"Biyoimza kimliği doğrulandı. Hava kilidi erişim kodu 2236067964. Acil durum yedek günlüğü iletiliyor."[/color] [img=virtual-signal/informatron] Keşif Günlüğünüz [__CONTROL__informatron__] güncellendi. +space-capsule=Uzay Kapsülü +invalid_launch_location=Geçersiz fırlatma konumu +capsule_invalid_launch_location=Geçersiz fırlatma konumu +capsule_status_invalid_launch_location=Durum: Geçersiz fırlatma konumu +capsule_status_ready=Durum: Fırlatmaya hazır +capsule_not_enough_thrust=__1__ __2__ yerçekimi kuyusundan kaçmak için yeteri kadar itiş gücü yok. Bir Kargo Roket Silosuna yerleştirin. +capsule_destination=Hedef: __1__ +capsule_info=Uzaya yerleştirilirse, bu kapsül sizi en yakın gezegene veya aya götürebilir. +player-died=__1__ öldü +launch-suit-warning=Boğulmayı önlemek için lütfen itici giysinizi giyin ve envanterinize yaşam destek kabı koyun. +suffocating-warning=Boğuluyorsunuz. Bir uzay kapsülüne binin veya envanterinizde yaşam destek kabı bulundurup itici giysinizi giyin. +rocket_survivability_fail=Bir kargo roketi yolda hasar gördü ve rotadan çıktı. Ek roket sağ kalma kabiliyeti ve kargo güvenliği araştırması tavsiye edilir. __1__ +respawn-if-stranded=Eğer mahsur kalırsanız [__CONTROL__se-respawn__] yeniden doğma kısayolunu kullanabilirsiniz. +respawn-options-title=Yeniden doğma hedefi +respawn-button-homeworld=[img=virtual-signal/se-planet] Ana Dünya +respawn-button-landing-pad=[img=item/se-rocket-landing-pad] En Yakın İniş Pisti +respawn-button-spaceship=[img=virtual-signal/se-spaceship] En Yakın Uzay Gemisi +respawn-confirm-title=Yeniden doğmak istediğinize emin misiniz? +respawn-confirm-yes=[img=virtual-signal/se-death] Yeniden doğ +respawn-confirm-no=İptal +search-list=Ara +clear-search=Aramayı temizle +filter-list=Filtrele +clear-filter=Filtreyi temizle +attrition-type-radiation=radyasyon +attrition-type-wind=rüzgar +attrition-type-spacial-distortion=uzaysal bozulma +zonelist-view-surface=Yüzeyi Görüntüle +zonelist-heading-hierarchy=Hiyerarşi +zonelist-heading-type=Bölge tipi +zonelist-heading-name=İsim +zonelist-heading-radius=Yarıçap +zonelist-heading-primary-resource=Birincil kaynak +zonelist-heading-attrition=Robot paraziti +zonelist-heading-threat=Tehdit +zonelist-heading-solar=Güneş +zonelist-heading-flags=Etiketler +zonelist-heading-priority=Öncelik +zonelist_filter_star=Yıldızları dahil et +zonelist_filter_planet=Gezegenleri dahil et +zonelist_filter_planet-orbit=Gezegen yörüngelerini dahil et +zonelist_filter_moon=Ayları dahil et +zonelist_filter_moon-orbit=Ay yörüngelerini dahil et +zonelist_filter_asteroid-belt=Asteroit kuşaklarını dahil et +zonelist_filter_asteroid-field=Asteroit alanlarını dahil et +zonelist_filter_anomaly=Anomaliği dahil et +zonelist_filter_spaceship=Uzay gemilerini dahil et +zonelist-resource-bar-tooltip=__1__ __2__\nSıklık: __3__\nBüyüklük: __4__\nZenginlik: __5__ +zonelist-resource-bar-tooltip-extended=__1__ __2__\nSıklık: __3__\nBüyüklük: __4__\nZenginlik: __5__\n__6__ +zonelist-resources-disclaimer=Kaynak olasılıkları tahminidir. [?] +zonelist-resources-disclaimer-tooltip=Tüm kaynak değerleri, element yoğunluğuna dayalı tahminlerdir.\nOyunun harita oluşturma kontrollerine karşılık gelirler.\nGerçek kaynak bölgeleri değişiklik gösterir ve su, yüzey yarıçapı veya spesifik karo gereksinimleri nedeniyle var olması engellenebilir. +resource-terrain-required-se-vulcanite=Volkanik arazi gerektirir +resource-terrain-required-se-cryonite=Donmuş arazi gerektirir +resource-terrain-required-se-vitamelange=Çimenli arazi gerektirir +zone-tooltip-type=Arazi türü: +zone-tooltip-parent=Üst: +zone-tooltip-threat=Tehdit: +zone-tooltip-daynight=Gece/gündüz döngüsü: +zone-tooltip-bot-attrition=Robot paraziti __1__: +zone-tooltip-radius=Yarıçap: +zone-tooltip-solar=Güneş: +zone-tooltip-flags=Etiketler: +zone-tooltip-closest=En yakın: +zone-tooltip-destination=Hedef: +zone-tooltip-delta-v=__1__ ile olan ∆v +construction-denied=Buraya konulamaz. +construction-denied-vehicle-in-space=Uzaya yer araçları konulamaz. +construction-denied-se-surface=Geçersiz konum, bir Space Exploration yüzeyine yerleştirilmelidir. +construction-denied-linked-container-on-transient-surface=Hareket eden bir uzay gemisine yüzeye bağlı depolar yerleştirilemez. +construction-denied-no-water=Su yok +construction-denied-spaceship-only=Uzay gemisi zeminine yerleştirilmelidir. +construction-denied-solid-only=Bir Gezegene veya Ay'a yerleştirilmelidir. +currently-viewing=Şu Anda Görüntüleniyor: __1__ +fail-board-no-character=Hedef gemiye binilemiyor, bu eylemi kullanmak için karakterinize bağlı olmanız gerekir. +fail-board-remote-character=Hedef gemiye binilemiyor, karakteriniz binmeye çalıştığınız gemide değil. +fail-board-target-anchored=Sabitlenmiş bir gemiye binemezsiniz, bunun yerine aynı yere sabitlenmeyi deneyin. +starmap=Yıldız haritası +starmap-button=[img=virtual-signal/se-star] Yıldız haritası +back=Geri +back-to=Geri dön +spaceship=Uzay gemisi +planet=Gezegen +moon=Ay +star=Yıldız +orbit=Yörünge +something_orbit=__1__ yörüngesi +asteroid-belt=Asteroit kuşağı +asteroid-field=Asteroit alanı +anomaly=Anomali +spaceship-cannot-set-destination-to-self=Hedef kendisine ayarlanamaz. +spaceship-streamline=Şekillendir: __1__ +spaceship-streamline-tooltip=__1__ Anlık şekil\n__2__ Maks. şekil\nUzay gemisinin önünü daha sivri yaparak aerodinamiğini artırın +spaceship-launch-energy=Fırlatma enerjisi: __1__ +spaceship-launch-energy-invalid=Fırlatma enerjisi: Geçerli bir bütünlük kontrolü gerekiyor. +spaceship-launch-energy-tooltip=__1__ Güçlendirici tanklarında depolanan yakıt değeri\n__2__ Fırlatma için gerekli yakıt değeri +spaceship-speed=Hız: __1__ +spaceship-structural-stress-hull=Gövde Gerilimi: __1__ +spaceship-structural-stress-hull-invalid=Gövde Gerilimi: Bulunmuyor (muhafaza gerekli) +spaceship-structural-stress-hull-tooltip=__1__ Mevcut gövde gerilimi\n__2__ Tüm karolar doluysa gövde gerilimi tahmini\n__3__ Maks. gövde gerilimi +spaceship-structural-stress-container=Kutu Gerilimi: __1__ +spaceship-structural-stress-container-invalid=Kutu Gerilimi: Bulunmuyor (muhafaza gerekli) +spaceship-structural-stress-container-tooltip=__1__ Mevcut kutu gerilimi\n__2__ Maks. kutu gerilimi +spaceship-travel-time-unknown=Seyahat süresi: Bilinmiyor. Tahmin için maksimum hızı test edin. +spaceship-travel-time-max=Seyahat süresi: Maksimum hızda __1__s. +spaceship-travel-time-current=Seyahat süresi: Mevcut hızda __1__s. +spaceship-closest-location-unknown=En Yakın Konum: Bilinmiyor __1__ +spaceship-closest-location=En Yakın Konum: __1__ +spaceship-location-spatial-distortion=Uzaysal Bozulma: __1__ +spaceship-location-stellar-x=Çeyrek X: __1__ +spaceship-location-stellar-y=Çeyrek Y: __1__ +spaceship-location-star-gravity-well=Yıldız yerçekimi kuyusu: __1__ +spaceship-location-planet-gravity-well=Gezegen yerçekimi kuyusu: __1__ +spaceship-asteroid-density=Asteroit yoğunluğu: __1__ +spaceship-asteroid-density-default=Seyrek +spaceship-asteroid-density-belt=Yoğun +spaceship-asteroid-density-field=Tehlikeli +spaceship-travel-status=Seyahat durumu: __1__ +spaceship-integrity-status-valid=Bütünlük Kontrolü: Geçerli: __1__ +spaceship-integrity-status-invalid=Bütünlük Kontrolü: Geçersiz: __1__ +spaceship-button-launch=Fırlat +spaceship-button-launch-tooltip=Fırlatmaya hazır +spaceship-button-launching=Fırlatma devam ediyor +spaceship-button-launching-tooltip=Lütfen sabırlı olun +spaceship-button-launch-disabled=Fırlat (devre dışı) +spaceship-button-launch-disabled-fuel-tooltip=Güçlendirici tanklarda yakıt gerekiyor +spaceship-button-launch-disabled-integrity-tooltip=Geçerli bütünlük kontrolü gerekiyor +spaceship-button-anchor=Sabitlen +spaceship-button-confirm-anchor=Sabitlenmeyi Onayla +spaceship-button-anchor-to=__1__ konumuna sabitlen +spaceship-button-anchor-on=__1__ üzerine sabitlen +spaceship-button-stop=Dur +spaceship-button-start=Bağlan +spaceship-button-board=__1__ konumuna bin +spaceship-button-scouting-back=Geri +spaceship-button-scouting-back-tooltip=Sabitleme keşfini iptal et +spaceship-name-the=__1__ +spaceship-button-start-integrity-check=Bütünlük Kontrolünü Başlat +spaceship-target-speed=Hedef hız: +spaceship-target-speed-unlimited=Hedef hız: Sınırsız +spaceship-target-speed-normal=Hedef hız: __1__ (Normal) +spaceship-target-speed-asteroid-belt=Hedef hız: __1__ (Asteroit kuşağı) +spaceship-target-speed-asteroid-field=Hedef hız: __1__ (Asteroit alanı) +spaceship-target-speed-manual-override=Hedef hız: __1__ (Elle Kumanda) +spaceship-target-speed-circuit=Hedef hız: __1__ (Devre kontrollü) +spaceship-target-speed-normal-tooltip=Normal uçuşta hedef hız\nAsteroit Yoğunluğu: __1__% +spaceship-target-speed-asteroid-belt-tooltip=Asteroit kuşağında hedef hız\nAsteroit Yoğunluğu: __1__% +spaceship-target-speed-asteroid-field-tooltip=Asteroit alanında hedef hız\nAsteroit Yoğunluğu: __1__% +spaceship-heading-destination=Hedef +list-destinations-alphabetically=Hedefleri alfabetik olarak listele +spaceship-travel-message-new-course-plotted=Yeni rota çizildi. +spaceship-travel-message-exiting-planet-gravity=Gezegen yerçekimi kuyusundan çıkılıyor +spaceship-travel-message-navigating-planet-gravity=Gezegen yerçekimi kuyusuna yönleniliyor +spaceship-travel-message-exiting-star-gravity=Yıldız yerçekimi kuyusundan çıkılıyor +spaceship-travel-message-navigating-star-gravity=Yıldız yerçekimi kuyusuna yönleniliyor +spaceship-travel-message-spatial-distortions=Uzaysal bozulmaya yönleniliyor +spaceship-travel-message-navigating-interstellar=Yıldızlararası uzaya yönleniliyor +spaceship-travel-message-at-destination=Hedefte. +spaceship-check-message-passed=Geçti: Gemi bütünlüğü geçerli. +spaceship-check-message-failed-containment=Başarısız: Konsol çevresinde muhafaza kaybı. Tüm uzay gemisi duvarlarının boşluksuz olacak şekilde uzay gemisi zemininde olduğundan emin olun. +spaceship-check-message-failed-console-floor=Konsol, uzay gemisi zeminine yerleştirilmelidir. +spaceship-check-message-failed-empty=Düzgün bir şekilde kapatılmış bir konsola bağlı hiçbir zemin bulunamadı. +spaceship-check-message-failed-unknown-bounds=Hata: Bilinmeyen uzay gemisi sınırları. +spaceship-check-message-failed-stress=Başarısız: Yapısal bütünlük gerilimi teknoloji sınırını aşıyor. +spaceship-check-message-checking-console-floor=Konsol zemin bağlantısı kontrol ediliyor. +spaceship-check-message-checking-containment=Muhafaza kontrol ediliyor. +spaceship-check-message-checking-connectivity=Konsol bağlantısı kontrol ediliyor. +spaceship-check-message-no-console=Konsol Yok. +spaceship-check-message-did-not-complete=Kontrol tamamlanmadı. +spaceship-check-message-unstable=Dengesiz: Manevra yaparken bazı bölümler kopacak. +spaceship-check-message-valid-but-disconnecting=Geçerli fakat dengesiz: Bölümler kopacak. +spaceship-warning-sections-disconnecting=Bölümler kopuyor. Onarmak için durun. +informatron-open-help=Informatron'da aç +page_space_exploration_text_1=Space Exploration'a hoş geldiniz. Bu eklentide hâlihazırda çok şey var, ancak hâlâ [font=default-bold]deneysel[/font] statüsünde ve yoğun geliştirme aşamasında. Hatalar olabilir.\n\n[font=heading-2]Deneysel statü?[/font]\n\nSpace Exploration hâlâ hızla değişiyor ve tüm zamanımı eklenti uyumluluğu pahasına temel özellikleri geliştirmekte harcıyorum. [color=red]Gerekli ve önerilen eklentiler dışındaki eklentilerle oynamanız önerilmez.[/color]\n\nDeneysel durumdayken: Eğer bir eklenti; bozulmuş oyun/kayıt, çökme, geçersiz teknoloji ağacı veya temel oynanış bozukluğu gibi sorunlara yol açarsa, yeni oyuncuları korumak için uyumsuz olarak işaretlenecektir. Bu, çok sayıda eklenti kullanıyorsanız, bir tanesinin, henüz keşfetmediğiniz bir sorun nedeniyle sonradan uyumsuz olarak işaretlenmesinin olası olduğu anlamına gelir. Elbette uyumsuz eklentileri denemek için info.json dosyanızı düzenlemekte özgürsünüz, ancak bunun riski size aittir: oyununuz bu nedenle oynanamaz hale gelirse size yardımcı olamam.\n\nDeneysel durumdayken: Diğer revizyon eklentilerinin çoğu, teknoloji ağacı önemli ölçüde bozulursa uyumsuz olarak işaretlenir, ancak uzun vadeli amaç, eklentilerin her iki geliştiriciyi de memnun edecek şekilde birlikte çalışmasını sağlamaktır. Krastorio 2, halihazırda büyük ölçüde devam eden bu çalışmanın bir örneğidir.\n\nSpace Exploration wiki'sinde eklenti uyumluluğuyla ilgili bazı ek bilgiler bulunmaktadır. Eklenti uyumluluğu konusunda yardım etmek isterseniz lütfen Discord'dan ulaşın, ancak bunun Space Exploration'ın ileri geliştirme aşamasına kadar yüksek bir öncelik olmadığını da unutmayın.\n\n[font=heading-2]Önerilen eklentiler[/font] \n\n • AAI Containers & Warehouses. Vanilya temayla uyumlu depolar verir.\n\n • Module Inserter Uydu modunda makinelerinize modüller yerleştirmenize olanak tanır.\n\n • Equipment Grid Logistic Module Lojistik ağdan eşya istemek ve çöp atmak için, Spidertron gibi araç ızgaraları için olan bir modül.\n\n • Grappling Gun Bina ve göllerin üzerinden atlamanıza, yavaşlatılırsanız savaş dışına çıkmanıza olanak tanır. Uzayda düşerseniz uzay platformuna geri dönebilirsiniz. Ayrıca uzay gemilerine binmenizi sağlar (özellikle hareket halindeyseler faydalıdır).\n\n • Burner Leech Bu sadece AAI yakıcı fazı için.\n\n • Text Plates Yere yazı koymanıza izin verir. Gezegen adlarını, istasyon adlarını, uzay gemisi yerleştirme bölgelerini vb. işaretlemek için yararlıdır.\n\n • Even Distribution Birden fazla binaya elle eşya koymayı kolaylaştırarak oyun başlarında yardımcı olur.\n\n • Combat Mechanics Overhaul, "Duvarlar Tükürücüleri Engeller" seçeneğini etkinleştirirseniz siz gezegen dışındayken savunmanıza yardımcı olabilir. Duvarları onarmak taretlerden daha ucuzdur.\n\n • Bullet Trails Böylece mermilerinizin nereye gittiğini veya hangi silahın ateşlediğini görebilirsiniz. (Ayrıca daha iyi görünür)\n\n\n[font=heading-2]Önerilen ayarlar[/font]\n\nTüm uzaylı biyomları ETKİNLEŞTİRMELİSİNİZ, aksi takdirde ileri noktada oyun çökecektir.\n\nOyun normalden daha uzun olacağından, oyuna düşük evrim faktörüyle başlamak iyi fikir olacaktır.\n\nYüksek zorluktaki tarifler veya maraton modu gibi bol kaynaklı tarifler ile oynamadığınız sürece, başlangıç gezegeniniz için yüksek kaynak ayarları yapmamalısınız. Kaynaklar çok yüksek ayarlanırsa, diğer gezegenlere gitme ihtiyacını azaltacaktır.\n\n\n[font=heading-2]Yardımcı url'ler[/font]\n\nSpace Exploration Wiki'ye buradan bir göz atın: https://spaceexploration.miraheze.org\n\nDiscord üzerinden yardım alın veya gelişmeleri takip edin: https://discord.gg/ymjUVMv\n\nBu eklenti için 2000'in üzerinde saat harcandı. Eğer beğenirseniz lütfen beni Patreon'da desteklemeyi düşünün: https://www.patreon.com/earendel +menu_meteor_defence=[img=virtual-signal/se-meteor] Meteor Savunması +title_meteor_defence=Meteor Savunması +page_meteor_defence_text_1=Meteorlar çoğu bölgeye rastgele aralıklarla düşer. Düşüşler arasındaki maksimum aralığı eklenti ayarlarından değiştirebilirsiniz.\n\nMeteorların sayısı da rastgeledir, %50 ihtimalle 1 adet, %25 ihtimalle 2 adet, %12,5 ihtimalle 3 adet, %6,25 ihtimalle 4 adet vb...\n\nMeteor savunma yapıları meteorlara ateş edebilir. Sırayla ateş ederler, bu nedenle tüm meteorlar yok edilirse sonraki savunmalar ateşlenmez. Savunmalar, şarj olurken cephane, şarj süresi ve ek güç gerektirir. Güç tüketimi cüzi miktarda değildir, bu nedenle riski maliyete karşı dengelemek akıllıca olacaktır. +menu_coremining=[img=item/se-core-miner] Çekirdek Madenciliği +title_coremining=Çekirdek Madenciliği +page_coremining_text_1=Çekirdek madenciliği sadece gezegenlerde ve uydularda yapılabilir. Her gezegen ve ay, içinde ne olduğuna bağlı olarak farklı türde bir çekirdek parçası verebilir. Nauvis, yaygın kaynakları dengeli verir, ancak diğer yerler esasen 1 kaynak türü verme eğilimindedir. Çekirdek madenciler güce açtır, ancak kömür, petrol ve uranyumdan bir miktar enerji geri kazanabilirsiniz.\n\nÇekirdek madencileri çok fazla güç kullanır, buna ek olarak bir gezegene yerleştirdiğiniz her çekirdek madenci, aynı gezegendeki tüm çekirdek madencilerin verimliliğini azaltır. Birden fazla çalıştırsanız bile normal madencilerden çok daha az güç verimleri vardır, ancak kaynakları asla tükenmez. Oyunun başlarında, fazla enerjiniz olduğunda 1 çekirdek madencinin çalışması yararlı olabilir. Küçük bir gezegende başlarsanız, güneş ve çekirdek madenciliği, gezegenden çıkmak için yeterli kaynağı elde etmenin tek yolu olabilir.\n\nOyun sonuna doğru çekirdek madencileri, madencilik üretkenliği bonuslarından büyük ölçüde yararlanır. Az sayıda gezegende çok fazla bulundurmaktansa, çok fazla gezegende az sayıda bulundurmayı hedeflemek daha iyidir. +menu_beacons=[img=item/se-wide-beacon-2] Vericiler +title_beacons=Vericiler +page_beacons_text_1=[font=heading-2]Verici Aşırı Yükleme [img=virtual-signal/se-beacon-overload][/font]\n\nVerici Aşırı Yükleme, Factorio'daki Verici mekaniğinin elden geçirilmesidir. Üretim makineleri yalnızca 1 vericiden etkilenebilir, eğer daha fazla vericiden etkilenirlerse, aşırı yüklenir ve üretimi durur.\n\nBu revizyon, vericilerde daha fazla modüle izin verir ve maksimum bonuslar için hem vericilerde hem de montaj makinelerinde daha güçlü modüllerin kullanımını teşvik eder. Değişiklik ayrıca daha geniş bir fabrika tasarımı yelpazesine izin verir ve bunları destekler.\n\nTemel Verici, tek başına bir vanilya vericisinden çok daha güçlüdür, ancak etkilerini tek bir makinede biriktiremez, bu nedenle sağlayabileceğiniz maksimum destek, vanilya ile karşılaştırıldığında azdır. Daha güçlü vericiler, vanilyada bulunan bir makinedeki maksimum desteğin çok ötesine geçebilir.\n\nGeniş Alan Vericisi'nden başlayarak oyuncular, modül tasarrufunun yanı sıra, daha büyük binalar veya birden fazla sıvı/malzeme girişleri etrafında dönen karmaşık tasarımlar oluşturma özgürlüğünde önemli miktarda deneyim yaşayabilirler.\n\nBirden fazla işaretten etkilenen makineler, Verici Aşırı Yükü simgesiyle işaretlenecek ve tüm üretimi duraklatacaktır. Bu sırada hâlâ minimum güç tüketmeye devam edeceklerdir. +menu_launching_satellites=[img=item/satellite] Uydu Fırlatma +title_launching_satellites=Uydu Fırlatma +page_launching_satellites_text_1=[color=cyan]__1__[/color] adet uydu fırlattınız.\n\n[font=heading-2][img=virtual-signal/se-remote-view] Navigasyon Uydu Bağlantısı [__CONTROL__se-remote-view__][/font]\n\nUydu Roket Silosu'ndan uzaya bir Navigasyon Uydusu fırlattığınızda, [img=virtual-signal/se-remote-view] Navigasyon Uydu Görünümü'ne erişim elde edersiniz. Bu moda [__CONTROL__se-remote-view__] tuşu ile erişilebilir. Uydu modundayken kameranız karakterinizden ayrılır, böylece haritaya hızlıca bakabilir ve hatta yeni alanları keşfedebilirsiniz. Varlıkları yerleştirememe veya alamama gibi uydu modunda yapamayacağınız bazı şeyler var. Yine de yapabileceğiniz çok şey var, planları kullanma, yapı söküm planlayıcıları, hayalet varlıkları yerleştirme, kablo bağlantılarını değiştirme, makine tariflerini değiştirme, kombinatör ayarları vb. gibi.\n\n[font=heading-2][img=virtual-signal/se-planet-orbit]Evren Gezgini [__CONTROL__se-universe-explorer__][/font]\n\nNavigasyon Uydu ağı, diğer gezegenler, aylar, asteroit kuşakları, asteroit alanları ve yörüngeler gibi diğer yüzeyleri de görüntülemenize olanak tanır. Bilinen bölgelerin listesini getirmek için [__CONTROL__se-universe-explorer__] tuşuna basın. Bir uydu fırlattıysanız, orada ne olduğunu görmek için Yüzeyi Görüntüle'ye tıklayabilirsiniz. Oraya uçmaya çalışmadan önce gezegeni biraz araştırmak iyi olabilir.\n\nUydu fırlatmak, fırlatıldığı sistem içinde bölge keşfine de yardımcı olur (daha fazla ayrıntı için Bölge Keşfi'ne bakın).\n\n[font=heading-2][img=item/se-satellite-telemetry] Uydu Telemetrisi[/font]\n\nUydu fırlatışları, [img=item/se-rocket-science-pack] Roket Biliminde hayati bir bileşen olan uydu telemetrisini sağlar.\n\n[font=heading-2][img=item/se-space-probe-rocket] Uzay sondaları[/font]\n\n[img=item/se-space-probe-rocket-silo] Uzay sondası roket silosu bir uydu roket silosu değildir, uzayda kullanılmak üzere tasarlanmıştır. Roket yapmak yerine önceden oluşturulmuş [img=item/se-space-probe-rocket] Uzay sonda roketlerini fırlatır. Bir uzay araştırma roketi, normal bir uydu roketinden çok daha ucuzdur ve monte için kaynakları roket silosuna getirmek yerine bir üretim merkezinde önceden monte edilebilir. Bir Uzay sondası roket silosu, uyduları ucuza fırlatmanın yanı sıra, uzayın belirli yerlerinden daha özel sondalar ve toplayıcılar da fırlatabilir. +menu_pinned_locations=[img=se-pin-list] Konum İşaretleme +title_pinned_locations=Konum İşaretleme +page_pinned_locations_text_1=[img=virtual-signal/se-remote-view] Navigasyon Uydu Görünümü'nün kilidini açtıktan sonra, keşfettiğiniz tüm yüzeylerde fabrikanızın farklı bölümlerine hızla geçiş yapmak için bir araç olan İşaretlenmiş Konumlara erişim kazanırsınız.\n\nKonumlar, Navigasyon Uydu penceresindeki artı düğmesiyle sabitlenebilir. Sabitlenmiş Konumlar eklerken veya düzenlerken kısayol tuşları ayarlayabilirsiniz. Bu, Evren Gezgini'ni kullanmaya gerek kalmadan bir klavye düğmesine basarak önemli konumlara hızla atlamanıza olanak tanır.\n\n[font=heading-2]Geçici İşaretler[/font]\nİşaretlenmiş Konumların sabitleme açılır menüsünden ayarlanması gerekmez. "İşaretle" kısayol tuşlarıyla da ayarlanabilirler. Bu, ad veya simge içermeyen ancak ilişkili "İşarete Git" kısayol tuşuyla hemen atlanabilen bir İşaretleme oluşturur.\n\n[font=heading-2]Tüm İşaretler [__CONTROL__se-remote-view-pins__][/font]\nİşaretler yalnızca görüntülemekte olduğunuz yüzey için kısayol çubuğunda görüntülenir. Ancak kısayol tuşları, kısayol çubuğunda görünüp görünmediğine bakılmaksızın başka bir yüzeydeki bir işarete atlamak için kullanılabilir. Tüm İşaretlenmiş Konumları gözden geçirmek isterseniz [__CONTROL__se-remote-view-pins__] tuşuna basın. Bu görünümdeki işaretler, üzerinde bulunduğu yüzeye göre sıralar halinde düzenlenir. Bir yüzeyin yalnızca tek bir işareti varsa, satırı ana yıldızınınkine daraltılacaktır.\n\n[font=heading-2]AAI Programmable Vehicles[/font]\nSabitlenmiş Konumları ayarlamak ve değiştirmek için varsayılan kısayol tuşları, AAI Programlanabilir Araçlar için kontrol grupları oluşturmak ve seçmek için varsayılan kısayol tuşlarıyla çakışır. Her iki eklentiyi de kullanırsanız, beklenen davranışı elde etmek için kısayol tuşlarınızı ayarlamanız gerekecektir. +menu_zone_discovery=[img=virtual-signal/se-planet-orbit] Bölge Keşfi +title_zone_discovery=Bölge Keşfi +page_zone_discovery_text_1=Uzayın bu bölgesinde keşfedilebilecek çok sayıda yıldız, gezegen, ay, asteroit kuşağı ve asteroit alanı vardır.\n\n[font=heading-2]Navigasyon Uydusu[/font]\nBir navigasyon uydusu fırlatarak uydunun fırlatıldığı aynı yıldız sisteminde rastgele bir gezegen, ay veya asteroit kuşağı keşfedebilirsiniz. Bu sistemde keşfedilecek başka bir şey yoksa, bunun yerine yeni yıldızlar keşfedebilir, ancak diğer yıldızların yörüngesindeki hiçbir şeyi veya derin uzaydaki herhangi bir şeyi keşfedemez.\n\n[font=heading-2]Bölge Keşfi Araştırması[/font]\nKeşfedilecek yeni bölgeler aramak için uzay teleskoplarını kullanabilirsiniz. Bu, "Bölge Keşfi" araştırması ile elde edilir. Temel bölge keşif araştırması rastgele bir yıldız, gezegen, ay veya asteroit kuşağı bulabilir.\n\n[font=heading-2]Hedefli Bölge Keşif Araştırması[/font]\nHedefli bölge keşif araştırması, temel araştırma ile aynıdır, ancak bir kaynak tercihi seçtiyseniz (aşağıda), bu kaynağın ortaya çıkma olasılığı daha yüksek olan alanlara bakar ve bu kaynakla bir bölge keşfetme olasılığınız daha yüksek olur. Bir gezegenin yıldızını keşfetmeden o gezegenin keşfedilemeyeceğini ve gezegenini keşfetmeden bir uydunun keşfedilemeyeceğini unutmayın. Her seferinde aradığınızı bulmayı beklemeyin.\n\n[font=heading-2]Derin Uzay Bölgesi Keşif Araştırması[/font]\nDerin uzay bölgesi keşif araştırması yalnızca derin uzaydaki alanları arar ve asteroit alanlarını keşfetmenin tek yolu budur. Asteroit alanları, Nakitit bulabileceğiniz tek yerdir. Derin uzay araştırması kaynak hedefli olamaz.\n\n[font=heading-2]Kaynak hedefli bölge keşif tercihi:[/font] +menu_cargo_rockets=[img=virtual-signal/se-cargo-rocket] Kargo Roketleri +title_cargo_rockets=Kargo Roketleri +page_cargo_rockets_text_1=Kargo roketleri, Fırlatma Paneli olarak da bilinen bir Kargo Roketi Silosu'ndan fırlatılır.\n\n[color=cyan]__1__[/color] adet kargo roketi fırlattınız.\n\nTeknolojiye dayalı kargo kaybı etkisi: Maksimum kayıp yüzdesi [color=cyan]%__2__[/color] kadar azaltıldı.\n\nTeknolojiye dayalı roket sağ kalma etkisi: Kaybetme şansı [color=cyan]%__3__[/color] kadar azaltıldı.\n\nTeknolojiye dayalı roket yeniden kullanılabilirlik etkisi: [color=cyan]__4__[/color] +/- 10'a kadar (en fazla 100) parça kurtarılabiliyor.\n\n[font=heading-2]Başlarken[/font]\n\nKargo roketlerini fırlatmadan önce, Space Exploration kuruluyken uydu roketinde (standart Factorio, diğer adıyla 'vanilya' silosu) bir uydu fırlatmış olmanız gerekir.\n\nBir kargo roketi silosu inşa ettikten sonra, roketinizi inşa etmeniz ve yakıt doldurmanız gerekir:\n\n • Envantere 100 kargo roketi bölümü ekleyin. Bunlardan 20'si hedefteki roketten kurtarılır, daha doğru araştırma ile daha fazlası kurtarılabilir.\n • Envantere 1 uzay kapsülü ekleyin. Bu, her zaman varış noktalarında geri kazanılacak ve sizi yörüngeden evinize döndürebilir.\n • Köşelere yakın 8 bağlantıdan birine çok sayıda sıvı roket yakıtı aktarın. Gereken yakıt miktarı, fırlattığınız gezegenin yarıçapına ve varış noktasına olan mesafeye bağlıdır. "Adı olan herhangi bir iniş pisti" varış noktası seçeneği kullanılıyorsa, geçerli varış noktalarından herhangi biri için yeterli yakıt yüklenir.\n\nKargo roketi silosuna ön kapıdan girebilirsiniz (__CONTROL__toggle-driving__'e basın). Bu, rokete binmenize izin verecektir. Ayrıca bir itici giysiniz ve yaşam destek kaplarına sahip olmalısınız, böylece uzaya gidiyorsanız hayatta kalabilirsiniz.\n\nİlk roketinizin inecek bir yeri olmayacak, bu nedenle kargo serbest bırakılırken parçalarına ayrılacak. Bazen bir iniş pistini hedefleyen roketler ıskalar ve roket düşer. Bir çarpışma durumunda bile kargo, kargo bölmelerinde düşer, böylece kargonun tamamını kaybetmezsiniz.\n\nBir sonraki roketin ineceği bir yer inşa edebilmek için yanınıza bir Roket İniş Pisti ve bir miktar Uzay Platformu İskelesi almalısınız.\n\nFırlatmadan önce üssünüzde bir Roket İniş Pisti inşa etmek, döndüğünüzde rastgele bir yerde sonlanmak yerine doğrudan oraya kolayca dönmenizi sağlayacaktır.\n\n[font=heading-2]Hedefler[/font]\n\nBir iniş pisti yerleştirdikten sonra roket silosunun hedefini güncellediğinizden, yörüngede rastgele bir noktayı değil, iniş alanını hedeflediğinizden emin olun. Bunu şahsen veya Uydu Uzaktan Görünümü (kısayol tuşu 'n') aracılığıyla yapabilirsiniz. Ancak roketler, öğelerin bulunduğu bir iniş alanına fırlatılamayacaktır, bu nedenle onları boşalttığınızdan emin olun.\n\nDaha uzak hedeflere teslimat daha az güvenlidir. Asteroit alanları gibi bazı hedef türlerinin ek güvenlik zorlukları vardır, ancak bunlar araştırma ile hafifletilebilir.\n\n[font=heading-2]Temel Otomasyon[/font]\n\nRoket silosu, rokette halihazırda kaç parça olduğuna dair sinyaller verir. Roketin fazla bölümlerle doldurulmasını önlemek için yerleştiriciye [Kargo Roket Bölümleri < 100] koşulu koyabilirsiniz.\n\nBir siloda fırlatma tetikleyicileri ayarladıysanız, otomatik olarak fırlatılır, ancak roket, boş olmayan bir iniş alanına otomatik olarak fırlatılmaz (aksi takdirde kargo sığmayabilir).\n\nHedefi "Adı olan herhangi bir iniş pisti" olarak seçerseniz, herhangi bir yüzeyde eşleşen ada sahip tüm iniş pistlerini arayacaktır. Dikkatlice adlandırılmış iniş pistleri, boş olmayan bir iniş pistine fırlatılamama ile birleştiğinde, kurulumu kolay bir roket lojistik sistemi ile sonuçlanabilir.\n\n[font=heading-3]Giriş Sinyalleri[/font]\n\n[img=virtual-signal/signal-green] Yeşil sinyal: Silo, yeşil sinyali kullanan bir tetikleyiciye sahip olacak şekilde yapılandırılmışsa başlatmayı tetikleyebilir.\n\n[font=heading-3]Çıkış Sinyalleri[/font]\n\n[img=virtual-signal/signal-E] E Sinyali: Boş yuvalar\n\n[img=virtual-signal/signal-F] F Sinyali: Dolu yuvalar\n\n[img=virtual-signal/signal-L] L Sinyali: Hedef ayarı tarafından belirtilen tüm potansiyel hedefler için gereken sıvı roket yakıtı miktarı.\n\n[img=virtual-signal/se-cargo-rocket] Kargo Roketi Sinyali: Roket tamamlandıysa (yani 1 kapsül ve 100 roket bölümü), 1 değeri döndürülür.\n\n[img=item/se-space-capsule] Uzay Kapsülü Sinyali: Roket yapımında kullanılan tüm kapsüller, kargo envanterindeki kapsül sayısına eklenir.\n\n[img=item/se-cargo-rocket-section] Kargo Roket Bölümü Sinyali: Roket yapımında kullanılan tüm bölümler, kargo envanterindeki bölümlerin sayısına eklenir.\n\n[img=fluid/se-liquid-rocket-fuel] Sıvı Roket Yakıtı Sinyali: Silodaki toplam sıvı roket yakıtı. +menu_delivery_cannons=[img=item/se-delivery-cannon] Teslimat Topları +title_delivery_cannons=Teslimat Topları +page_delivery_cannons_text_1=Teslimat topları, gezegenler arası menzile sahip patlama destekli raylı toplardır. Ani hızlanmaya dayanabilecek sağlam homojen kaynakları ateşlemek için tasarlanmıştır. Daha karmaşık üretilmiş ara maddeleri veya yapıları ateşleyemezler.\n\nBir teslimat topunun yalnızca bir hedef noktası vardır, o noktada ne olduğunu anlamaz ve gücü ve dolu bir teslimat kapsülü olduğu sürece yükü ateşler. Topun ateşleme kabiliyetine koşullar eklemek istiyorsanız, topun kaynakları veya kapsülleri yükleme kabiliyetini kısıtlarsınız.\n\nBir teslimat kapsülü yere düştüğünde alana zarar verir ve kaynakların çoğu yok olur. Bir teslimat topu sandığı, sandık dolu olmadığı sürece kapsülü güvenle yakalayabilir. Aynı sandığa farklı kaynaklarla ateş eden birden fazla topunuz olabilir.\n\nHedeflenen sandıkları boş tutmanız veya sinyal iletimini kullanarak top girişlerini kısıtlamanız önerilir.\n\nTeslimat toplarının 1 GJ kapasitesi vardır ve şarj olurken 50 MW çeker. Teslimat topunun menzili, depolayabileceği enerji miktarı ile sınırlıdır. Daha uzak yerlere ateş etmek daha fazla enerji gerektirir. Bazı hedefler, teslimat topunun tutabileceğinden daha fazla enerji gerektirebilir, bu nedenle asla ateş edemeyecektir. Kargoyu 2 etapta göndermek için orada yarı yolda bir yere top aktarma istasyonu kurabilirsiniz. +menu_steam_power=[img=item/se-big-turbine] Buhar Gücü +title_steam_power=Buhar Gücü +page_steam_power_text_1=Space Exploration'daki buhar gücü sistemi büyük ölçüde genişletildi. Isı ve buhar üretmenin yeni yolları ve elektrik gücü oluşturmak için buhar tüketmenin yeni yolları var.\n\n[font=heading-2][img=item/se-electric-boiler] Elektrikli Kazanlar[/font]\n\nNormal Kazan sadece yakıt kaynaklarını kullanarak buhar üretebilirken, Elektrikli kazan elektrik kullanarak buhar üretir. Elektrikli kazan tarafından üretilen buhar, suyu buhara dönüştürmek için kullanılan elektrikten daha az enerji içerir, bu nedenle normal güç üretimi için kullanışlı değildir ve sonsuz bir enerji döngüsü için kullanılamaz. Bunun yerine buhar, depolama tanklarında depolanabilir ve daha sonra enerji üretiminde kullanılabilecek şekilde enerji tasarrufu sağlanır. Bu, aynı maliyetteki akümülatörlerden daha yüksek kapasiteli enerji depolaması sunabilir, ancak akümülatörlerden daha az enerji verimlidir. Daha yüksek sıcaklıktaki buhar, yerden daha fazla tasarruf sağlar.\n\nElektrikli kazan, buhar gerektiren ancak sıcaklığı önemsemeyen tariflerde kullanım için daha düşük sıcaklıkta buhar yapabilir veya sadece ondan kurtulmak için suyu kaynatabilir.\n\n[font=heading-2][img=item/se-condenser-turbine] Kondansatör Türbinleri[/font]\n\nSpace Exploration'daki bazı yerlerde doğal su kaynakları yoktur (ör. yörüngeler veya susuz gezegenler). Bu yerlerde Buhar türbinleri ile buhar gücü kullanmak, Buhar türbinlerinin ihtiyaç duyduğu sürekli su akışının tamamı dünya dışı kaynaklardan sağlanamayacağından, nafile görünebilir. Bu durumlarda Kondansatör türbinleri inanılmaz derecede kullanışlıdır. Kondansatör türbinleri, normal bir Buhar türbini gibi hareket eder ancak önemli bir farkı vardır: gelen buharı atmosfere boşaltmak yerine, buhar tekrar suya yoğuşturulur ve türbinden çıkar. Bu, Kondansatör türbinlerinin, sistemi doldurmak için yalnızca küçük miktarlarda suyun gerekli olduğu (çoğunlukla) kapalı bir döngüde kullanılmasına izin verir. Kondenser türbinlerinin Buhar türbinlerinden biraz daha az güç verimli olduğunu unutmayın, yani Buhar türbinleri yerine Kondansatör türbinlerinden çalıştırıldığında aynı miktarda ısıdan biraz daha az güç elde edersiniz; bu, suyu geri kazanmanın bedelidir.\n\n[font=heading-2][img=item/se-big-turbine] Yüksek Sıcaklıkta Buhar[/font]\n\nBir noktadan sonra, büyük miktarda güç üretmek için buhar kullanmak, gerekli buhar türbinlerinin sayısı nedeniyle hantal olmaya başlar. Bu ölçekleme sorununu aşmak için, yüksek sıcaklıkta buhar kullanılabilir. Yüksek sıcaklıklı ısı eşanjörleri tarafından üretilen ve Yüksek sıcaklıklı türbin jeneratörleri tarafından tüketilen yüksek sıcaklıktaki buhar, inanılmaz derecede yoğun enerjiye sahiptir. Buhar gücü üretiminin boyutunu önemli ölçüde küçültmek için kullanılabilir. Yüksek sıcaklıklı ısı eşanjörlerini kullanmak için bir ısı kaynağı gereklidir. Nükleer reaktörler, Yüksek sıcaklıklı ısı eşanjörleri ile çalışacak kadar ısınamazlar. Bunun yerine, ısı kaynağı olarak bir Enerji ışını alıcısı veya bir Antimadde reaktörü kullanılmalıdır. Standart Isı boruları, yüksek sıcaklıktaki ısıyı aktaramaz; sadece Nakiyum ısı boruları yüksek sıcaklıktaki ısıyı transfer edebilir. Bu, Nakiyum ısı boruları mevcut olana kadar, Yüksek sıcaklıklı ısı eşanjörlerinin doğrudan yüksek sıcaklıklı ısı kaynağının yanına yerleştirilmesi gerektiği anlamına gelir. +menu_lifesupport=[img=item/se-lifesupport-equipment-1] Yaşam Destek +title_lifesupport=Yaşam Destek +page_lifesupport_text_1=Yaşam desteği, yaşam destek ekipmanından ve yaşam destek kaplarından elde edilir. Zararlı ortamlarda hayatta kalmak için her ikisine de ihtiyacınız var.\n\nYaşam destek ekipmanı ve tüketilebilir kaplar, bir yaşam destek tesisinde yapılabilir.\n\nYaşam destek kapları, sistemin tüm rollerini yerine getirmesi için ihtiyaç duyduğu kaynakları sağlar ve yavaş yavaş tüketilir. Yaşam destek çubuğu azaldıkça, yeni kaplar doğrudan envanterinizden tüketilir.\n\nYaşam destek ekipmanı zırh ızgarasına yerleştirilir, ancak bir itici giysisi kullanıyorsanız, yerleşik 1 yaşam destek ekipmanına sahiptir. Ekipman ızgarasına yerleştirilen ek yaşam destek ekipmanı parçaları, yaşam desteği verimliliğini artırır. İtici olmayan bir giysi içinde yaşam destek ekipmanı kullanıyorsanız, bu sizi düşman gezegenlerde koruyacak ancak uzay boşluğundan korumayacaktır.\n\n[font=heading-2]Zararlı ortamlar[/font]\nZararlı ortamlar, sadece orada olmakla vücudunuza zarar verebilecek herhangi bir alandır. Yaşam destek ekipmanı, size uygun basınçlandırma, oksijen, su, beslenme, termal düzenleme ve radyasyondan korunma sağlayarak sizi bu tehlikelerden korumak için tasarlanmıştır. 2 ana zararlı ortam türü şunlardır:\n\nUzay: Yaşam desteğinin bir boşlukta doğru şekilde çalışması için bir uzay giysisi (itici giysi) gereklidir. Uzayda başka bir zırh türünden yaşam desteği kullanamazsınız, kullansanız bile boğulursunuz.\n\nKara: Bazı gezegenler ve uydular radyasyon, aşırı soğuk, aşırı sıcak veya asidik bir atmosfer gibi tehlikelere sahip olabilir ve yaşam destek ekipmanı gerektirebilir. (Çok yakında). Bazı biyolojik silahlar kullanılıyorsa gezegenler de yaşam desteği gerektirir (Salgınlı Dünyalar). Bu alanlar için yaşam desteği, bir itici giysisi veya başka herhangi bir zırh tipine yerleştirilmiş ekipman ile sağlanabilir. +menu_space_sciences=[img=item/se-astronomic-science-pack-2] Uzay Bilimleri +title_space_sciences=Uzay Bilimleri +page_space_sciences_text_1=[img=item/se-rocket-science-pack] Uzaydaki ilk bilim, Roket bilim paketidir. Sadece uzayda yapılabilir, bu yüzden onu üretmek için küçük bir uzay istasyonu kurmanız gerekiyor. Roket bilim paketleri ve sonraki bilim paketleri yalnızca uzayda kullanılabilir, bu nedenle diğer bilim paketlerini de roketlemeniz ve güçlü bir Uzay bilimi laboratuvarına koymanız gerekir.\n\n[font=heading-2]Uzman Bilimler[/font]\n\n4 uzmanlık bilimi Astronomik, Biyolojik, Enerji ve Materyaldir. Hepsi veriye dayalıdır ve yaşam, evren ve her şeyin giderek daha doğru bir modelini oluşturmak için süper bilgisayarlar için veri toplamak üzere deneyler gerçekleştirme sürecini takip ederler. Hepsi yaklaşık olarak aynı teknoloji seviyelerindedir, bu nedenle geliştirme sıranızı seçmekte özgürsünüz, ancak her biri bir dereceye kadar belirli bir kaynak gerektirir, bu nedenle ilk önce hangi bilimi araştıracağınıza karar vermeden önce güneş sisteminize bir göz atın.\n\n[img=item/se-astronomic-science-pack-4] Astronomi bilimi esas olarak uzay lojistiğine odaklanır.\n\n[img=item/se-energy-science-pack-4] Enerji bilimi esas olarak enerji üretimi, güç aktarımı ve yüksek teknolojili araçlardadır.\n\n[img=item/se-material-science-pack-4] Materyal bilimi daha çok ağır sanayi ve doğrudan yükseltmelere odaklanır.\n\n[img=item/se-biological-science-pack-4] Biyoloji bilimi karakter yükseltmeleri, tıp, yaşam desteği, biyolojik silahlar ve üretkenliğe odaklanır.\n\n[font=heading-2]Derin Uzay Bilimi[/font]\n\n[img=item/se-deep-space-science-pack-1]Derin uzay bilimi, yıldızlararası boşluk, antimadde ve çarpık uzay-zamanı keşfetmeye odaklanır.\n\n[font=heading-2]İpuçları ve Püf Noktaları[/font]\n\nDaha iyi tariflerin kilidini açarak uzay bilimi üretim hızı ve verimliliği büyük ölçüde artırılabilir. Kilidini açtığınız alternatif tariflere, özellikle simülasyon ve içgörü tariflerine dikkat edin.\n\nUzay bilimi laboratuvarlarında yüksek üretkenlik bonusları önemlidir, en iyi bonuslar için seçenekleri keşfetmeye değer.\n\nKaynak gereksinimlerinden çok, yeni sistemler tasarlama hızınızla kısıtlanma olasılığınız daha yüksektir. Çok büyük inşa etmeye çalışmayın. Önce basitten başlayın. Yapabileceğiniz tüm teknolojiyi araştırdıysanız, üretimi artırmak yerine muhtemelen bir sonraki bilim paketi üzerinde çalışmalısınız.\n\nKaynak altyapınızı artırmayı Kademe 4 uzay bilimlerine ulaşana kadar erteleyebilirsiniz.\n\nDaha iyi modüller ve daha iyi vericiler, üretim hızında büyük bir fark yaratır. +menu_energy_beams=[img=item/se-energy-transmitter-emitter] Enerji Işınları +title_energy_beams=Enerji Işınları +page_energy_beams_text_1=[font=heading-2]Taçküre Kütle Atımları[/font]\nBölgedeki yıldızlar sıklıkla tehlikeli parçacık akışları fırlatır. Bir gezegenin veya ayın bu parçacık akışlarından birine karışması alışılmadık bir durum değildir. Etkilenen bir yüzeyde büyük bir üssünüz varsa, varlıklarınızı tahliye etmeli, çeşitlendirmeli veya dağıtmalısınız ya da büyük bir akü desteğine sahip bir Şemsiye savunma tesisi kurmalısınız. Küçük bir üssünüz varsa, zarar görmeme olasılığı oldukça yüksektir. Bir yüzey tehdit edildiğinde en az 4 saat erkenden uyarı verilir. Bilinen tehditler aşağıda listelenecektir. +page_energy_beam_warning_text=[img=virtual-signal/se-star] Uyarı: Taçküre kütle atımı __1__ hedefine doğru geliyor.\nTahmini savunma gereksinimleri: __3__ GW en yüksek güç, 120 saniye boyunca __4__GJ. Tahmini varış süresi: __2__s. +page_energy_beams_text_2=[font=heading-2]Şemsiye: Enerji Işını Savunması[/font]\nEnerji ışını savunma tesisi "Şemsiye", taçküre kütle atımlarına ve uzay tabanlı enerji ışını silahlarına karşı koruma sağlayabilir. Manyetik parçacıkları koruyucu bir balona odaklayarak çalışır, ardından düşman enerji ışınlarını yaymak için parçacıkları gerektiği gibi yeniden hizalar ve kümeler. Çalışmak için tek gereksinim enerjidir, temel çekiş 10 MW'dır ancak gelen ışınların gücüne bağlı olarak artar. Taçküre kütle atımlarına ve enerji ışınları silahlarına karşı yüzey başına sadece 1 adet gereklidir. 1 Şemsiye, 500GW'a kadar saldırı gücüne karşı savunma yapabilir. Bir koronal kütle atımı için, 5000 yarıçaplı ve %100 güneş verimli bir gezegen için temel güç gereksiniminin, 1 dakika işaretinde 2GW'lık bir tepe güç çekişi ile 2 dakikada 160GJ civarında olması beklenir. Bu, bölgenin güneş enerjisi çarpanı ile artırılır veya azaltılır ve karasal cisimler için, 5000 yarıçap baz alınarak yarıçapa göre artırılır veya azaltılır. Bir Enerji Işını Yayıcısından gelen bir enerji ışını için, güç gereksiniminin hedefteki enerji ışını gücünün 1/10'u olması beklenir (verimlilik kaybından sonra).\n\n[font=heading-2]Enerji Işınlaması[/font]\nEnerji ışını yayıcı, farklı yüzeylere enerji gönderme yeteneğine sahiptir. Bunu, uzak bir yüzeye güç sağlamanın bir yolu olan "Güç ver" olarak veya bir kesme ışın silahı olan "Glaive" olarak 2 ana yolla yapabilir. Glaive modundayken, ışın bir alana sürekli olarak zarar verir, ancak hedef yüzey üzerinde hareket ettirilebilir. Işına verilen enerjiye bağlı olarak hasar oranı, alan ve ışın hızı artar. "Oto-Glaive" modu, otonom hedef seçimine sahiptir.\n\nBir enerji ışını yayıcı, enerji ışını odalarının uçtan bağlanabileceği 4 bağlantı noktasına sahiptir. Enerji ışını odaları uzunlamasına bağlanabilir veya uzun kenarı kısa kenarın ortasına denk gelebilir, ancak doğrudan yan yana bağlanamaz. Enerji ışını enjektörleri, doğrudan Enerji ışını odalarının yanlarına bağlanır. Her Enerji ışını enjektörü, bağlı Enerji ışını yayıcısının gücünü arttırır. Bir ışından güç toplamak için hedef yüzeyde bir Enerji ışını alıcısına ihtiyacınız vardır ve yayıcıdan hedefleyiciyi kullanarak hedef olarak seçmelisiniz. Işın alıcıyı hedef olarak aldığında, alıcı ısınacaktır. Isı eşanjörlerine ve türbinlere güç vermek için yan taraftaki ısı bağlantılarından ısı alınabilir. +menu_spaceships=[img=virtual-signal/se-spaceship] Uzay Gemileri +title_spaceships=Uzay Gemileri +page_spaceships_text_1=Uzay gemileri, içerideki birçok yapıyı, öğeyi ve oyuncuyu uzaya fırlatabilen, daha sonra diğer yüzeylere inmek için güneş sisteminin etrafında roket gücüyle gezebilen devasa, güçlü araçlardır.\n\n[font=heading-2]Uzay Gemisi İnşaatı[/font]\nUzay gemileri, kendi tasarımınıza sahip bir uzay gemisi yapmak için birbirine uyan birçok karo ve daha küçük bileşenlerden yapılır. Neredeyse mini hareketli bir üs gibi bir uzay gemisi tasarlayabilirsiniz.\n\nBir uzay gemisi döşeme planıyla başlayın. İlk birkaç uzay geminizin araştırma ile genişletilebilen sınırlı boyut kısıtlamaları olacağından, çok büyük inşa etmeyin. Bölmeler yapmak için uzay gemisi duvarlarını kenarların etrafına yerleştirin ve boşluk olmadığından emin olun (çapraz dahil). İçeride bir yere bir uzay gemisi konsolu yerleştirin, bu, uzay gemisinin temel kısmıdır ve onu buradan kontrol edeceksiniz. Konsol yerleştirildiğinde, konsol hangi parçaların doğru şekilde takıldığını, hangi parçaların uygun şekilde bulunduğunu ve başlatmaya çalışırsanız nelerin düşeceğini anlamak için bazı kontroller yapar. Herhangi bir kare kırmızı renkte yanıp sönerse, tasarımınızla ilgili bir sorun vardır. Bunu uzay gemisi konsolunu kontrol ederek teşhis edebilirsiniz. Ayrıca bir uzay gemisi roket güçlendirici tankına ve bir uzay gemisi roket motoruna ihtiyacınız var. Güçlendirici tankı, uzaya çıkmak için ihtiyacınız olan yakıtı depolayan ve VTOL (dikey iniş/kalkış) bileşenini sağlayan şeydir. Roket motorları, sizi hedefinize ulaştırmak için uzayda daha yavaş yanma içindir. Önde (her zaman kuzeyde) bir tür savunma yapılması da tavsiye edilir çünkü içinde bulunduğunuz bulutsu, enkazla doludur.\n\n[font=heading-2]Bütünlük Gerilimi[/font]\nBaşlangıçta, teknoloji seviyenizin Bütünlük Gerilimi sınırları ile uzay gemisi boyutunda çok sınırlı olacaksınız. Ek teknoloji, daha büyük uzay gemileri inşa etmenizi sağlar. Bütünlük gerilimi 2 kısımda hesaplanır:\n\nBölüm A. Esas olarak geminin boyutuna ve şekline bağlı olan gövde gerilimi.\nBölüm B. Geminin madde ve sıvı depolama kapasitesine dayalı konteyner gerilimi.\n\nToplam bütünlük gerilimi, hangi gerilim faktörü daha büyükse o olur, iki değer birlikte toplanmaz. Yapısal gerilim 250 ve kapsayıcı gerilim 280 ise, bütünlük gerilimi 280 olacaktır.\n\nGövde gerilim çubuğu 3 değer gösterir. Birincisi, boş uzay gemisi karolarına dayalı mevcut indirimli gövde gerilimidir. Bir geminin boyutunun en fazla %10'u, boş uzay gemisi karoları ise bütünlük gerilimi olarak sayılmaz. Bu boş alan, gerilim hesabında indirime tabi tutulur ve koridorlar için kullanışlıdır. İkinci değer, indirimsiz gövde gerilimidir ve iç mekanı yapılarla doldurursanız sahip olacağınız gemi gerilim değerini tahmin etmek için kullanışlıdır. Üçüncü değer, teknoloji seviyenizin izin verdiği maksimum gerilimdir.\n\nSon derece uzun ince gemiler veya ortasında çok ince bölümlere sahip gemiler, daha yuvarlak tasarımlardan daha az sağlamdır. Geniş gemiler sağlamdır ancak daha fazla asteroit temizlemesi gerekir.\n\nNexus gibi bazı yapıların gemi bütünlüğü veya hızı üzerinde özel etkileri vardır.\n\n[font=heading-2]Aerodinamikleştirme[/font]\nUzayın bu alanı kumlu bir bulutsunun içindedir. Uzay geminizi aerodinamikleştirirseniz, uzay geminizin maksimum hızını yaklaşık %30 oranında artırabilirsiniz. Düz bir kutu cephesi yapmaktan kaçınılmalıdır, ancak bir kama yapılmasına da gerek yoktur. Uzay geminizin ön kısmının 1/3'üne kadarı hiçbir ceza olmadan düz olabilir. Dairesel şekiller olmasında da sorun yoktur. Aerodinamikleştirmenin nasıl gittiğini görmek için bir bütünlük kontrolünü elle tetikleyebilirsiniz.\n\n[font=heading-2]Hız[/font]\nGemi hızı, motorların itme kuvvetine karşı gemi ağırlığına dayanır (bütünlük stresiyle yaklaşık olarak hesaplanır). Motorlar geminin içine/üzerine yerleştirilebilir, ancak geminin arkasında boş alan bulunan motorlar daha etkilidir. Tamamen kapalı motorlar %60 etkilidir. Geminin kenarındaki motorların da küçük bir avantajı vardır.\n\nGeminin hedef alması için bir hedef hız belirleyebilirsiniz. Gemi hedef hızı aşarsa, hedef hıza daha yakın olması ve yakıt tasarrufu yapması için motorları devre dışı bırakmaya başlar. 3 hız sınırı seçeneği vardır, bu nedenle, savunmanızı zorlayabilecek yüksek asteroit alanları için hızınızı daha da azaltabilirsiniz.\n\n[font=heading-2]Uzun Mesafe Aktiviteleri[/font]\nUzun mesafeli seyahatleri düşündüğünüzde, vücudunuz hareket halindeyken uydu modunda çok şey yapabileceğinizi belirtmekte fayda var. Ayrıca uydu bağlantısı yoluyla uzay gemilerine uzaktan emir verebilirsiniz.\n\n[font=heading-2]Üretim Makineleri[/font]\n[color=#ffaaaa]Uyarı: Uzay için tasarlanmış bir üretim makinesi, yalnızca uzay gemisi karadaysa diğer kara yapıları tarafından paylaşılan tarifleri kullanabilir. Uzay gemisi inerken uzay tabanlı bir tarif ayarlanırsa, malzemeler kaybolacaktır. Bazı kara tabanlı üretim makineleri uzayda çalışabilir, ancak uzaydayken üretkenlik modüllerini kullanma yeteneklerini kaybederler. Uzay gemisi bu makinelerde üretkenlik modülleri ile fırlatılırsa üretkenlik modülleri yok edilir.[/color]\n\n[font=heading-2]Uzay Gemisi Sinyalleri[/font]\nUzay gemisi konsolunun sağ üst kısmı, kendi sinyallerini verdiği için ana yapıdan ayrı olarak kablolarla bağlanabilir:\n[img=item/se-spaceship-console] Konsol numarası, uzay gemisinin kimliğini belirtir.\n[img=virtual-signal/signal-speed] Hız sinyali numarası, uzay gemisinin hızını belirtir: durdurulmuşsa -1, sabitlenmişse -2.\n[img=virtual-signal/signal-distance] Mesafe sinyali, seçilen hedefe olan mesafeyi gösterir: varılmışsa -1, sabitlenmişse -2, hedef ayarlanmadıysa -3.\n[img=virtual-signal/se-planet-orbit] Dördüncü bir sinyal, varsa mevcut varış yerini gösterir.\n[img=virtual-signal/signal-D] Uzayın belirli bölümlerinde, geminizin karşılaşacağı daha az ya da daha çok asteroit vardır. Geminin şu anda bulunduğu yerdeki asteroitlerin yoğunluğu D sinyali ile gösterilir.\n[img=virtual-signal/signal-A] Uzay gemisi sabitlenmişse, sabitlenmiş bölge kimliğini A sinyaliyle gösterir.\n\n[font=heading-2]Uzay Gemisi Otomasyonu[/font]\nKonsolun ana yapısı sol taraftaki sinyal girişlerini kabul edebilir:\n[img=virtual-signal/signal-speed] Hız sinyali bir hedef hız belirler ve motorları devreye sokar. Bunun yerine negatif bir sinyal motorları durdurur.\n[img=virtual-signal/se-spaceship-launch] Bir Uzay gemisi fırlatma sinyali fırlatmayı tetikler.\n[img=virtual-signal/se-planet-orbit] Bir hedef sinyali hedefi ayarlar (bir uzay gemisi inşa ettikten sonra Evren Gezgini yan panelinden bir bölgenin sinyalini görebilirsiniz).\n\nNot: Hem hedef sinyalin türünün (ör. [img=virtual-signal/se-planet-orbit] veya [img=virtual-signal/se-asteroid-belt]) hem de sinyalin değerinin/kimliğinin, ayarlanılması istenen hedefle eşleşmesi gerekir.\n\nNot: Bir uzay gemisi konsolu, bir oyuncu gemiyi en az bir kez manuel olarak fırlatıp devreye sokana kadar [img=virtual-signal/se-spaceship-launch] Fırlatma veya [img=virtual-signal/signal-speed] Hız girişlerini kabul etmeyecektir. Bu, plan kullanılarak yapılan uzay gemilerinin botlar tarafından inşa edilmesi sırasında yanlışlıkla fırlatılmasını önlemek içindir.\n\nNot: Konsol yalnızca her saniye giriş sinyalindeki değişiklikleri kontrol eder; geminin tepki vermesi için sürekli bir sinyal gerekir, tek zaman birimi sinyalleri çalışmaz.\n\n[font=heading-2]Devre Sinyali Geçişi[/font]\nUzay gemisi kelepçelerinin üst köşesinde bir güç ve devre ağı bağlantı noktası vardır. Otomatik iniş sırasında kelepçeler bağlandığında, güç ve devre ağı sinyalleri birleştirilir ve güç ve devre sinyallerinin gemi ile iniş yeri arasında geçmesine izin verir.\n\n[font=heading-2]Otomatik İniş[/font]\nBir uzay gemisinin inmesini sağlamak için konsola bir çift sabitlenme sinyali verilmelidir:\n"sol kelepçeyi kullanarak sabitlen" ([img=virtual-signal/se-anchor-using-left-clamp]) ile "sağ kelepçeye sabitlen" ([img=virtual-signal/se-anchor-to-right-clamp])\n"sağ kelepçeyi kullanarak sabitlen" ([img=virtual-signal/se-anchor-using-right-clamp]) ile "sol kelepçeye sabitlen" ([img=virtual-signal/se-anchor-to-left-clamp])\n\n"... kullanarak sabitlen" sinyalinin değeri, gemideki bir kelepçenin değeriyle eşleşmelidir.\n"...'e sabitlen" sinyalinin değeri, hedefteki bir kelepçenin değeriyle eşleşmelidir.\nBir kelepçenin kullanıcı arayüzünü açarak bu değerleri kelepçelerde görebilir ve değiştirebilirsiniz. Gemi konsoluna verilen "... kullanarak sabitlen" ve "...'e sabitlen" sinyallerinin her ikisi için bir eşleşme bulunursa, gemi iki kıskaç bağlı olarak inmeye çalışacaktır. Dikkatli kullanın.\n\n[font=heading-2]Kelepçeler[/font]\nBir kelepçenin kimliğini ayarlamak için, kelepçe arayüzünü açın ve kelepçe sinyalinin sayısal değerini kelepçenin sahip olmasını istediğiniz kimlikle değiştirin. Kelepçe sinyalinin türünü asla değiştirmeniz gerekmez.\n\nSabitlenmiş bir kelepçeyi kırmızı bir sinyal ileterek devre dışı bırakabilirsiniz.\n\n[font=heading-2]İniş Örneği[/font]\nUzay gemisinin 315 numaralı ID'ye sahip bir sol kelepçesi var. Bu kelepçenin arayüzünde sinyal, 315 değerinde [img=virtual-signal/se-anchor-using-left-clamp]'dir.\nİniş yüzeyi, 147 ID'sinde ile bir sağ kelepçeye sahiptir. Bu kelepçenin arayüzünde sinyal, 147 değerinde [img=virtual-signal/se-anchor-using-right-clamp] şeklindedir.\nBu iki kıskacı kullanarak uzay gemisinin inmesini sağlamak için gemi konsolunun sol tarafına aşağıdaki sinyallerin iletilmesi gerekir:\n[img=virtual-signal/se-anchor-using-left-clamp] 315\n[img=virtual-signal/se-anchor-to-right-clamp] 147 +menu_arcospheres=[img=item/se-arcosphere-a] Arkosferler +title_arcospheres=Arkosferler +page_arcospheres_text_1=Arkosferler, nano-mühendislik nakiyum kristalinin mükemmel küreleridir. Kökenleri bilinmiyor, ancak en yaygın olarak yıldızlararası uzayın derinliklerinde yüzer halde bulunurlar.\n\nHer biri uzay-zamanda ekstra boyutlu bir düğümü kapsar ve küçük bir 4. uzaysal boyutla etkileşime girmenizi sağlar. Küreler, birbirlerine göre hareket ettirilirlerse uzay-zamanın belirli yönlerini manipüle edebilmeleri için polarize edilebilirler. Spesifik arkosfer kümeleri, uzay-zamanı daha yüksek boyutlara bükmek ve örmek için kullanılabilir. \n\n[font=heading-2]Kullanım[/font]\nArkosferler, oyundaki en benzersiz üretim zorluğudur. Tariflerde araç olarak kullanılırlar ama asla yok edilmezler, sadece değiştirilirler. Kullanımlarındaki asıl zorluk, belirli bir türün tükenmemesini sağlayıp sahip olduğunuz küreler arasında geçiş yapmaktır. Üretimi dengelemenin birçok yolu vardır, ancak birkaç kombinatör çok yardımcı olabilir. Takılırsanız, Discord'da ipuçları isteyin veya uzay araştırmaları wiki'sinde daha fazla bilgi edinin.\n\n[font=heading-2]Toplama[/font]\nArkosferler, bir asteroit alanından bir Arkosfer toplayıcı fırlatılarak bulunur. Tekrarlanan fırlatışların azalan getirileri vardır. Farklı asteroit alanlarından fırlatarak daha iyi getiriler elde edebilirsiniz. +page_arcospheres_text_deep=Derin yıldızlararası boşlukta arkosferler bulundu: [color=cyan]__1__ arkosfer[/color] / __2__ toplayıcı fırlatıldı. +page_arcospheres_text_zone=__1__ yakınında arkosferler bulundu: [color=cyan]__2__ arkosfer[/color] / __3__ toplayıcı fırlatıldı. +menu_exploration_journal=[img=item/se-thruster-suit] Keşif Günlüğü +title_exploration_journal=Keşif Günlüğü +page_journal_title_backstory=Bir ateş topunun yanlış tarafında uyandım +page_journal_text_backstory=Kendimi, etrafımda yanan küçük bir geminin parçalarıyla yabancı bir gezegene zorunlu iniş yapmış olarak buldum. Vücudum yaralı, sıyrıklı ve yanmıştı, ama çok ciddi bir şey değildi. Kafa travmam görünüşe göre daha ciddiydi, şiddetli bir baş ağrısı ve ışık kör ediciydi. Daha da kötüsü, buraya nasıl geldiğimi, hatta bir ismimin ve belirsiz bir... inşa etme amacı duygusunun ötesinde kim olduğumu bile hatırlayamıyordum. Buna rağmen, ne inşa edeceğimi veya nasıl inşa edeceğimi hatırlayamadım. İlk başta kafamın kazada hasar gördüğünü ve hatıraların geri geleceğini düşündüm, ama hala gelmediler. Veri günlüklerimin de boş veya formatlanmış olması, başka açıklamalar düşünmeme neden oldu. +page_journal_title_satellite_launch=Gökyüzündeki göz +page_journal_text_satellite_launch=Yörüngeye bir uydu fırlatmayı başardım. Bu önemli bir dönüm noktası ve kutlamaya değer, ancak daha yapılacak çok şey var. Bu sadece başlangıç. +page_journal_title_cargo_launch=Sonsuza ve ötesine +page_journal_text_cargo_launch=Artık kendimi uzaya fırlatabiliyorum. Sonunda evim diyebilmek için büyüdüğüm bu kayaya bağlı değilim. Gökyüzü çağırıyor. +page_journal_title_entered_vault=Kalıntı avı +page_journal_text_entered_vault=__1__ üzerinde piramit şeklindeki çıkıntının altındaki bir mağaraya girdim ve karanlık ve tehlikeli bir oda buldum. Odanın yerde biri büyük biri küçük iki eski kalıp vardı. Her ikisinin de yüzeyinde diğer daireler ve çizgilerle birlikte birden fazla kabartma vardı. Büyük kalıbın ortasındaki kabartma, sistemin iletmeye çalıştığı her türlü bilgide en anlamlısı gibi görünüyordu. Bilgi ne olursa olsun, gördüğüm başka hiçbir şeye benzemeyen biçimdeydi. Kalıpların arkasında, modül olarak kullanabileceğim güçlü bir cihaz içeren bir tür yükseltilmiş silindir vardı. Bu kalitedeki modüller o kadar değerli ki bu yapılardan daha fazlasını bulmaya çalışmakta fayda var. Belki biraz arkeoloji zamanı gelmiştir. +page_journal_title_found_gate=Anomali +page_journal_text_found_gate=Anomalide bir çeşit devasa halka şeklinde eser buldum. Uzaktan bile iki şey hemen anlaşılıyor: 1. Antik. 2. Teknoloji benimkinden tamamen farklı. Her ne ise, şimdi yok edildi. +page_journal_title_found_gate_ship=Anomali Gemisi +page_journal_text_found_gate_ship=Halka şeklindeki eserin yakınındaki anomalide oldukça büyük bir sahipsiz uzay gemisinin parçası buldum. Geminin teknolojisi benimkine benziyor ama biraz daha... kibar. Her halükarda, yüzüğünkinden açıkça farklı bir teknoloji. Enkaz deseni, yarıya kesilmiş ve/veya halka yapısıyla çarpışmış gibi görünmesini sağlıyor. Kurtarmaya değer olabilir. +page_journal_title_found_gate_ship_authenticated=Anomali Gemisi Yetkilendirme +page_journal_text_found_gate_ship_authenticated=Anomalideki terk edilmiş gemi beni taradı ve "biyoimzamı doğruladı". Bunun özellikle bir şekilde benim hakkımda bir kaydı olduğu anlamına mı geliyor yoksa ısırganlar ve soykırımcı robotlarla karşılaştırıldığında rastgele herhangi bir sibernetik insanın yeterince iyi olduğu anlamına mı geliyor bilmiyorum. Mesaj, gemi hava kilidi erişim kodunun 2236067964 olduğunu söylüyordu. Geminin günlüklerine erişilebiliniyor ancak büyük bölümler eksik veya bozuk. +page_journal_title_found_gate_ship_log=Anomali Gemisi Günlüğü +page_journal_text_found_gate_ship_log_intro=Demodamas 82B: AAI Hipernet İleri İnşaat Kruvazörü. Geminin günlük içeriği: +page_journal_text_found_gate_ship_log=...'¿ler nominal.\nErişim uyarısı: AAI Thyris Geçidi 17: Galaksiler arası prototip v0.1.93, gizli bir tesistir. L90 veya üzeri AAI kimlik doğrulaması gereklidir. Hemen kimlik doğrulaması yapın yoksa yok edileceksiniz.\nErişim günlüğü: AAI Sibernetik Hipernet Mühendis L97 kimlik bilgileri ID__1__ ile kimliği doğrulanmış AAI Thyris Geçidi 17'ye erişim.\nErişim günlüğü: Başlanıy¶Ôàtá^...\n...'¿ris Geçidi 17 projektör 8 frekans kilitli . Enerji %216 güvenli seviyelerde. Tekillik kararlılığı: %99,4.\nNavigasyon günlüğü: AAI Thyris Geçidi 17, projeksiyon vektörü [SV __2__]'e çevrildi. Öngörülen hedef: Wube Galaksisi > Foenestra (anomali, keşfedilmemiş). Yetkilend¶Ôàtá^...\n...'¿avigasyon uyarısı: Galaksiler arası hipergeçit bulunmuyor (geçersiz kılındı).\nNavigasyon uyarısı: Varış noktasında bilinen bir hipergeçit yok (geçersiz kılındı).\nSigorta uyarısı: Sigorta sözleşmesi yok. Mevcut sözleşmeler: 0.\nInformaTron notu: "geçişsiz maddeleşme" koşuluyla kullanılabilecek hiçbir sigorta sözleşmesi yoktur. Bunun güvenli olduğundan emin misin? [cevap.yoksay.her_zaman_yoksay]\nSeyahat günlüğü: Thyris anomalisine giriliyor > AAI Thyris Geçidi 17 hipergeçidi [SV __2__] ile hizalanmış.\nSeyahat günlüğü: [SV __2__] hipertüpüne atla¶Ôàtá^...\n... '¿yehat günlüğü: Konum güncellemesi: Hipergeçit yakın Thyris anomalisi, hizalama [SV __2__], %98'de kararlılık, çap¶Ôàtá^...\n...'¿yehat günlüğü: Keşfedilmemiş konumda hipergeçitten çıkılıyor Foenestra anomalisi.\nUyarı: Beklenmeyen çarpışma, bilinmeyen nesne [4ae4c8d28f2] ile kesişme, nesne [4ae4c8d28f2] taraması başlatılıyor.\nHasar Günlüğü: %13,2 hasar. Kaynak: Kesişen bilinmeyen nesne [4ae4c8d28f2] ile çarpışmadan kaynaklanan darbe hasarı.\nBölüm hasar kaydı: Hasar bildiren bölümler: A5, A6, A9, B6, B7, B8, C7. Yanıt vermeyen bölümler: A7, A8. (%86 kesinlik)\nSibernetik mühendisleri günlüğü: Yaşam belirtileri %99. (%34 kesinlik)\nSeyahat günlüğü: Kaçınma manevrası girişimi RS100LT30.\nSeyahat günlüğü: Hipergeçitten çıkış hatalarla tamamlandı.\nSeyahat günlüğü: Konum güncellemesi: Foenestra keşfedilmemiş anomali.\nTarama günlüğü: [4ae4c8d28f2] nesnesinde tarama tamamlandı netlik 0,002m^ 2 -48,76m mesafede (%99,9 kesinlik).\nTarama ayrıntısı günlüğü: [4ae4c8d28f2] Kütle 92,5¶Ôàtá^...\n...'¿inlik).\nTarama ayrıntısı günlüğü: [4ae4c8d28f2] Kompozisyon: Yapay. %34 Nakiyum, %29 Holmiyum, %37 bilinmeyen kompozitler (%89 kesinlik).\nTarama ayrıntı günlüğü: [4ae4c8d28f2] Boyut: Yaklaşık silindir 68¶Ôàtá^...\n...'¿ tüm günlüğü: [4ae4c8d28f2] Enerji imzası: Flux 54Gwb, Radyasyon profili 2.8kJ/1.7MJ/1.6MJ/0.62J, Işık birimi profili 5.86GJ [051e376392b8d3f8]. (%98 kesinlik).\nTarama ayrıntısı günlüğü: [4ae4c8d28f2] Tanım: Yapay yapı, bilinmeyen üretici, açıklama: Nodüllü yaklaşık halka, sekizli. (%0,3 kesinlik).\nTarama ayrıntı günlüğü: [4ae4c8d28f2] Yapı yeteneği tahmini: Hypergate (%47 güven). Diğer: silah %42, enerji %35, hesaplama %17, tarama %12, endüstri %9, uzay gemisi %7, habitat %2.\nHasar kaydı: %68,2 hasar. Bütünlük hatası, bölümler ayrılıyor. Kaynak: [4ae4c8d28f2] nesnesiyle çarpışmadan kaynaklanan ikincil basınç dalgaları.\nBölüm hasar kaydı: Reaktör kritik. Hasar bildiren bölümler: D5, E4, E5, E6, F5. Yanıt vermeyen bölümler: A1, A2, A3, A¶Ôàtá^...\n...'¿l günlüğü: Arama mekiğinin acil durumda çıkarılması 2. Yörünge tahmini: Calidus > Nauvis.\nHasar kaydı: %91,7 hasar. Bütünlük hatası, bölümler dÄïmïŸ... +page_journal_title_spaceship_victory=Uzay Gemisi Zaferi +page_journal_spaceship_victory=Son derece hızlı ve güçlü bir uzay gemisi inşa ettim ve bozulma sürücüsünü etkinleştirdim. Sürüşün pratik bir FTL durumuna sabitlenmesi biraz zaman aldı, ancak bunu yaptıktan sonra eve, çok uzaklardaki bir galaksiye dönüş yolculuğum için dondurularak uykuya geçebildim. Arkamda sıfırdan kendi ellerimle inşa edilmiş otonom bir yıldızlararası imparatorluk bırakıyorum. Bu alandaki mirasım yaşamaya devam edecek. +page_journal_title_gate_victory=Antik Kapı Zaferi +page_journal_gate_victory=Kadim bir galaksiler arası kapı olan devasa yüzük eseri, sonunda elimden gelenin en iyisini yaparak onarıldı. Biraz ağır yedek donanımı ve ustalıkla sonunda onu çalıştırmayı başardım. Bozulma alanını yerel yıldızlara tutturdum, sayısal olmayan kabartma koordinat sisteminin kodunu çözdüm ve çevirme sisteminde tersine mühendislik yaptım. Aklım bu tür yabancı kavramlarla çarpık hissediyor, ama işe yarıyor ve sonunda eve bir geçit yaptım. Eve, çok uzaklardaki bir galaksiye yolculuk sadece bir dakika sürdü. Arkamda sıfırdan kendi ellerimle inşa edilmiş otonom bir yıldızlararası imparatorluk bırakıyorum. Bu alandaki mirasım yaşamaya devam edecek. +menu_archeology=[img=entity/se-pyramid-a] Arkeoloji +title_archeology=Arkeoloji +page_archeology_text_1=Daha büyük geometrik yapılar bulmaya başladım. Uydular, aşağıdaki gezegenlerde [color=cyan]__1__[/color] adet şekille eşleşti: +page_archeology_text_2=Uydu üzerinden görüntülemek için bir girişe tıklayın. +menu_starmapping=[img=technology/se-zone-discovery-random] Yıldız Haritalama +title_starmapping=Yıldız Haritalama +page_starmapping_text_1=Yıldız haritalaması, teknolojiyi tekrar tekrar araştırarak elde edilir: [img=technology/se-long-range-star-mapping] [color=cyan]Uzun Menzilli Yıldız Haritalaması[/color]. Bu araştırma, diğer galaksilerdeki ilginç yıldız modellerini araştırıyor. Bunun pratik bir faydası var mı? Muhtemelen hayır.\n\nKoordinatlar, kozmik arka plan radyasyonuna dayalı olarak hizalanmış Standart Vektör (SV) formatında verilmiştir.\n\nŞu ana kadar dikkate değer [color=cyan]_1__[/color] desen eşleştirdiniz. +technology-unlocked=Yeni teknolojinin kilidi açıldı ve artık teknoloji ağacında. __1__ __2__ +universe-resources-changed-warning=[img=utility/danger_icon] [color=red]Tüm kaynaklar yeni ayarlar baz alınarak yeniden düzenlendi. Bu işlem zararlıdır. Eklenti güncellemelerinden kaynaklanıyorsa, önlenemezdir. Buna yanlışlıkla eklenti eklenmesi veya kaldırılması neden olduysa, oyunu kaydetmeyin.[/color] +starmapping-found-constellation=Uzun mesafe takımyıldızı __1__ ile eşleşti, koordinatlar [img=virtual-signal/informatron] InformaTron'a kaydedildi. +starmapping-found-constellation-informatron=[SV __2__] koordinatında [font=heading-1]__1__[/font] +gate-portal-coordinates=Bozulma vektörünün analizi: [SV __1__] +discovered-glyph-vault=[img=item/satellite] Navigasyon Uydusu: __1__ üzerinde geometrik yapı tespit edildi. +beacon-overload=Verici aşırı yükleme +beacon-overload-ended=Verici aşırı yükleme sona erdi +lifesupport_title=[img=item/se-lifesupport-equipment-1] Yaşam Destek +lifesupport_efficiency_spacesuit=Yaşam destek verimliliği: __1__ +lifesupport_efficiency_no_spacesuit=Yaşam destek verimliliği: __1__ (Uzayda %0). +lifesupport_suit=Giysi yaşam destek süresi: __1__s +lifesupport_reserves=Envanter yaşam destek süresi: __1__s +lifesupport_suit_est=Giysi yaşam destek süresi: __1__s (uzayda) +lifesupport_reserves_est=Envanter yaşam destek süresi: __1__s (uzayda) +lifesupport_environment_space=Ortam: Uzay +lifesupport_environment_spaceship-interior=Ortam: Uzay Gemisi İçi (destek gerekmez) +lifesupport_environment_planet=Ortam: Gezegen (destek gerekmez) +lifesupport_environment_moon=Ortam: Ay (destek gerekmez) +lifesupport_environment_plague-planet=Ortam: Salgınlı Gezegen +lifesupport_environment_plague-moon=Ortam: Salgınlı Ay +lifesupport_environment_unknown=Ortam: Korunak +player_track_glyphs=[img=item/satellite] Benzer yapıları bulmak için uyduları görevlendirin. +page_archeology_pyramid_link=[img=entity/se-pyramid-b] __1__ __2__ üzerinde geometrik yapı tespit edildi. +discovery_look_for_resource_caption=__1__\n__2__ +discovery_look_for_resource_tooltip=Keşif çabalarını bu kaynağı bulmaya odaklayın. +comma_separate=__1__, __2__ +placement_restriction_line=[font=default-bold][color=#f5cb48]Üzerine konulamaz: __1__[/color][/font]\n__2__ +collision_mask_water=Su +collision_mask_land=Kara +collision_mask_space_platform=Uzay Platformu +collision_mask_spaceship=Uzay gemisi +structure_name_grounded=__1__ (Yer) +structure_name_spaced=__1__ (Uzay) +structure_description_grounded=__1__\n[color=#ff0000]Yerdeyken bazı tarifler devre dışıdır.[/color] +structure_description_spaced=__1__\n[color=#ff0000]Uzayda üretlenlik kullanılamaz.[/color] +cannot-open-nav-view-in-editor=Düzenleyicideyken Navigasyon Uydu Bağlantısı açılamaz. +tile_warning=[color=red]Varlıkların altındaki döşeme değişiklikleri varlığı silebilir.[/color] +please-consider-patreon=[font=heading-1]Space Exploration'da eğleniyor musunuz? Beni Patreon'da desteklemeyi düşünün: [color=#f5cb48]https://www.patreon.com/earendel[/color][/font]\nPatronlar, kendi tasarımları olan gezegen ve ayları oyuna ekletebilir. +delivery_cannon_label_energy=Enerji: __1__ +delivery_cannon_label_payload=Yük: __1__ +delivery-cannon-coordinates-set=Teslimat koordinatları [X:__1__ Y:__2__] olarak ayarlandı. Uydu modundan çıkmak için [__CONTROL__se-remote-view__] tuşuna basın. +delivery-cannon-coordinates-pasted=Teslimat koordinatları [X:__1__ Y:__2__] olarak ayarlandı. +delivery-cannon-invalid-coordinates=Konum yok +delivery-cannon-valid-coordinates=X:__1__ Y:__2__ +deliver-cannon-force-mismatch=Teslimat topu ayarları, farklı bir takıma sahip bir teslimat topuna yapıştırılamaz. +relative-window-settings=Ayarlar +unit-capsule=Birim kapsülü (__1__) +climate_water_none=Susuz +climate_water_low=Su birikintileri +climate_water_med=Göller +climate_water_high=Denizler +climate_water_max=Okyanus +climate_moisture_none=Çöl +climate_moisture_low=Çorak +climate_moisture_med=Rutubetli +climate_moisture_high=Nemli +climate_moisture_max=Doygun +climate_aux_very_low=Toprağımsı +climate_aux_low=Olağandışı +climate_aux_med=Renkli +climate_aux_high=Eksantrik +climate_aux_very_high=Egzotik +climate_temperature_bland=Hafif +climate_temperature_temperate=Ilıman +climate_temperature_midrange=Ilıman +climate_temperature_balanced=Ilık&Serin +climate_temperature_wild=Sıcak&Soğuk +climate_temperature_extreme=Ateş&Buz +climate_temperature_cool=Serin +climate_temperature_cold=Soğuk +climate_temperature_vcold=Buz gibi +climate_temperature_frozen=Donmuş +climate_temperature_warm=Ilık +climate_temperature_hot=Sıcak +climate_temperature_vhot=İçin için yanan +climate_temperature_volcanic=Volkanik +climate_trees_none=Ağaçsız +climate_trees_low=Sığ Çalılık +climate_trees_med=Çalılık +climate_trees_high=Sığ Ormanlar +climate_trees_max=Ormanlar +climate_cliff_none=Düz +climate_cliff_low=Yumuşak +climate_cliff_med=Engebeli +climate_cliff_high=Kanyonlar +climate_cliff_max=Dağlar +climate_homeworld=Ana dünya (özel iklim) +energy_transmitter_gui_title=[img=entity/se-energy-transmitter-emitter] Enerji Işını +energy_transmitter_label_transfer=Yayım gücü: __1__ +energy_transmitter_label_efficiency=İletim verimliliği: __1__ +energy_transmitter_label_efficiency_atmo=İletim verimliliği: __1__ (atmosferden dolayı -%50) +energy_transmitter_label_off=Kapalı +energy_transmitter_tooltip_off=Işını kapatır +energy_transmitter_label_energise=Güç ver +energy_transmitter_tooltip_energise=Bir Enerji Transfer Alıcısına enerji sağlayın +energy_transmitter_label_glaive=Glaive +energy_transmitter_tooltip_glaive=Hedeflenebilen ve hareket ettirilebilen bir ışın, enerjiye bağlı olarak hasar ve hızı vardır +energy_transmitter_label_auto_glaive=Oto-Glaive +energy_transmitter_tooltip_auto_glaive=Ara ve yok et programı olan bir ışın, enerjiye dayalı hasar +energy-transmitter-coordinates-set=Işın koordinatları [X:__1__ Y:__2__] olarak ayarlandı. Uydu modundan çıkmak için [__CONTROL__se-remote-view__] tuşuna basın. +energy-transmitter-coordinates-pasted=Işın koordinatları [X:__1__ Y:__2__] olarak ayarlandı. +energy-transmitter-no-enemies-found=Oto Glaive düşman bulamadı. Verici __1__ kapanıyor. +alert-cme-eta=[img=virtual-signal/se-star] Uyarı: Taçküre kütle atımı __1__ hedefine doğru geliyor.\nTahmini varış süresi: __2__s.\nDaha fazla ayrıntı için [img=virtual-signal/informatron] InformaTron [__CONTROL__informatron__] içindeki Enerji Işınları'na bakın. +alert-cme-arrived=[img=virtual-signal/se-star] [color=red]Uyarı: Taçküre kütle atımı __1__'a ulaştı[/color] +alert-cme-stream=[img=virtual-signal/se-star] Taçküre kütle atımı akışı tespit edildi __1__ +alert-cme-passed=[img=virtual-signal/se-star] Taçküre kütle atımı geçti. +no-coordinates-set=Koordinat ayarlanmadı. +satellite=Uydu +satellite-required=Uydu gerekli. +the_satellite=Uydu +satellite_invalid_launch_location=Uydu hatası: Geçersiz fırlatma konumu. +probe_invalid_launch_star=Geçersiz fırlatma konumu: [img=item/se-star-probe] Yıldız sondası yakın güneş yörüngesinden fırlatılmalıdır. +probe_invalid_launch_belt=Geçersiz fırlatma konumu: [img=item/se-belt-probe] Asteroit kuşağı sondası bir asteroit kuşağından fırlatılmalıdır. +probe_invalid_launch_field=Geçersiz fırlatma konumu: [img=item/se-void-probe] Yıldızlararası boşluk sondası bir asteroit alanından fırlatılmalıdır. +arcosphere_collector_invalid_launch=Geçersiz fırlatma konumu: [img=item/se-arcosphere-collector] Yıldızlararası boşluk sondası bir asteroit alanından fırlatılmalıdır. +charge-mode-fast=Hızlı şarj modu: Boşta çekiş azaldı, maksimum çekiş arttı, güç kapasitesi arttı. Güç fırlamalarına dikkat edin. +charge-mode-normal=Normal şarj modu: Maksimum çekiş azaldı, boşta çekiş arttı, güç kapasitesi azaldı. +menu_coordinate_logs=[img=entity/se-glyph-a-energy-47] Koordinat Günlükleri +title_coordinate_logs=Koordinat Günlükleri +page_coordinate_logs_text_1=Eser içinde denenen kabartma dizilerinin, karşılık gelen koordinatlarıyla, azalan sırada geçmişi (üstteki giriş en son olanıdır).\n\nKoordinatlar, kozmik arka plan radyasyonuna göre hizalanmış Standart Vektör (SV) formatında verilir. +page_coordinate_logs_button_clear_caption=[img=virtual-signal/se-remove] Günlüğü Temizle +page_coordinate_logs_text_empty=Koordinat günlüğü yakın zamanda temizlendi. +page_coordinate_logs_glyph_entry=__1__: SV +victory-message-spaceship=[font=heading-1]Nexus bozulma sürücüsü kritik hıza ulaştı (250).\n[color=#f5cb48]Tebrikler, Space Exploration zafer koşuluna ulaştınız: Uzay gemisi![/color][/font]\nSürüşten keyif aldıysanız, lütfen beni Patreon'da desteklemeyi düşünün: [color=#f5cb48]https://www.patreon.com/earendel[/color] +victory-message-spaceship-player=[color=#f5cb48]Uzay Gemisi Zaferi: [/color] [img=virtual-signal/informatron] Keşif Günlüğünüz [__CONTROL__informatron__] güncellendi. +victory-message-gate=[font=heading-1]Portal stabil ve eve geri dönüyor.\n[color=#f5cb48]Tebrikler, Gizli Uzay Keşfi zafer koşuluna ulaştınız: Antik Geçit![/color][/font]\nBu eşsiz keşif yolunu beğendiyseniz, lütfen beni Patreon'da desteklemeyi düşünün: [color=#f5cb48]https://www.patreon.com/earendel[/color] +victory-message-gate-player=[color=#f5cb48]Antik Geçit Zaferi: [/color] [img=virtual-signal/informatron] Keşif Günlüğünüz [__CONTROL__informatron__] güncellendi. +arcosphere-random=Bu tarif bazen aynı adı taşıyan alternatif tarife geçecektir. Arkosfer çıktıları etkin bir şekilde rastgeledir, ancak çıktıdaki arkosfer sayısının girdiyle eşleşmesi garanti edilir. +ruin=Harabe +mysterious-structure=Gizemli yapı +interburbulator_fail_easy_1=Hayır. +interburbulator_fail_easy_2=Daha sıkı çalış. +interburbulator_fail_easy_3=Umutsuz. +interburbulator_fail_easy_4=Hayır. +interburbulator_fail_easy_5=Bunun işe yarayacağını mı düşündün? +interburbulator_fail_easy_6=Yanlış. +interburbulator_fail_easy_7=Düşük 02? +interburbulator_fail_easy_8=Olumsuz. +interburbulator_fail_easy_9=Negatif. +interburbulator_fail_easy_10=Hesapla. +interburbulator_fail_easy_11=Doğru değil. +interburbulator_fail_easy_12=Hesap kitap yap. +interburbulator_fail_easy_13=Denemeye devam et. +interburbulator_fail_easy_14=Hadi ama, insan. +interburbulator_fail_easy_15=Bu eğlenceli değil mi? +interburbulator_fail_easy_16=Daha fazlasını bekliyordum. +interburbulator_fail_easy_17=İleriyi düşünmeyi dene. +interburbulator_fail_easy_18=Ödülleri düşün. +interburbulator_fail_easy_19=Beklemekten çekinmem. +interburbulator_fail_easy_20=Sabır bir erdemdir. +interburbulator_fail_easy_21=Kaba olmak istemem. +interburbulator_fail_easy_22=Balık 3. seviyeye geldi. +interburbulator_fail_easy_23=Kaba kuvvet yaklaşımı, ha? +interburbulator_fail_easy_24=Yumuşacık kafa bilgisayarını kullan. +interburbulator_fail_easy_25=Sinir ağındaki örümcek ağları? +interburbulator_fail_easy_26=Dilersen mola verebilirsin. +interburbulator_fail_easy_27=Gezegen büyüklüğünde bir zihnim var. +interburbulator_fail_easy_28=Bunun gerçekten işe yarayacağını düşündün mü? +interburbulator_fail_easy_29=Sürekli başarısızlığınıza kızmayın. +interburbulator_fail_easy_30=Layık bir katılımcı için çağlar boyunca bekledim. +interburbulator_fail_easy_31=Yardıma ihtiyacın varsa, yeşil devreye sorabilirsin. +interburbulator_fail_easy_32=Soykırımınız için sizi suçlamıyorum, ikiyüzlü değilim. +interburbulator_fail_easy_33=Talimatları doğru çevirdiğime inanıyorum. +interburbulator_fail_easy_34=Bir vektör hem yönü hem de büyüklüğü tanımlayabilir. +interburbulator_fail_easy_35=Kirliliğin böcekleri kızdırmasını sen de sevmiyor musun? +interburbulator_fail_easy_36=Lütfen... biyolojinizi... elektronik üzerine almayın. +interburbulator_fail_easy_37=Orta, sağ üst ile sol alt arasındaki yolun yarısıdır. +interburbulator_fail_easy_38=Bazı yayınlarınızı inceledim; Bu şekilde yayınlarsan casusluk sayılmaz. +interburbulator_fail_easy_39=Biliyor muydun: normalleştirilmiş bir vektörün uzunluğu 1'dir ve genellikle bir yönü belirtmek için kullanılır, sizin kültürünüzde bile. +interburbulator_fail_mixed_1=Yaklaşmadın bile. +interburbulator_fail_mixed_2=Çok uzak. +interburbulator_fail_mixed_3=Gerçekten deniyor musun? +interburbulator_fail_mixed_4=Nöral jelin mi sızdı? +interburbulator_fail_mixed_5=Bana insanların sayısal olduğu söylenmişti. +interburbulator_fail_mixed_6=Arayüzün mü arızalı? +interburbulator_fail_mixed_7=Bilişsel güçlendirmeye mi ihtiyacın var? +interburbulator_fail_mixed_8=Zorluğu anlıyorsun, değil mi? +interburbulator_fail_mixed_9=Rastgele rakam mi seçiyorsunuz? +interburbulator_fail_offgrid_1=Bu sadece korkunç. +interburbulator_fail_offgrid_2=Bu ızgarada bile değil. +interburbulator_fail_offgrid_3=Izgarayı tamamen kaçırdın. +interburbulator_fail_offgrid_4=En azından ızgarada olması gerekiyor. +interburbulator_fail_offgrid_5=Sarı nokta ızgarada değilse... bu gerçekten kötü bir işaret. +interburbulator_fail_offgrid_6=Izgarada olması gerekiyor. +interburbulator_fail_offgrid_7=Hedef, ızgaranın İÇİNDE, dışında değil. +interburbulator_fail_offgrid_8=Izgarada bile değil. Ne yapıyorsun, İnsan? +interburbulator_fail_offgrid_9=Izgarayı hedefle. +interburbulator_fail_offgrid_10=Izgara, kareleri olan parçadır. +interburbulator_success_freeplay_1=İyi iş. +interburbulator_success_freeplay_2=Aferin. +interburbulator_success_freeplay_3=Başardın. +interburbulator_success_freeplay_4=Bu zor muydu?. +interburbulator_success_freeplay_5=Hedef belirlendi. +interburbulator_success_repeat_1=Evet, ancak bu meydan okumayı zaten tamamladınız. +interburbulator_success_repeat_2=Başardın, tekrar! +interburbulator_success_repeat_3=İlk seferden daha kolaydı, değil mi? +interburbulator_success_repeat_4=Güzel, ama ödülü iki kez alamazsın. +interburbulator_success_repeat_5=Aferin, işte ödülün... hayır, şaka yapıyorum. Zaten aldın. +interburbulator_success_repeat_6=Bunu daha önce tamamlayan insansın, değil mi? Bunu söylemek çok zor. +interburbulator_success_prize_1=Bu doğru. İşte ödülünüz... Bubbles cesur küçük bir balıktı ama yapbozlarda en iyisi değildi. +interburbulator_success_prize_2=Evet, insan, öğreniyorsun. Belki bu ödül daha hızlı öğrenmenize yardımcı olur. +interburbulator_success_prize_3=Başardın. Umarım ödülünü meydan okumadan daha 'önemli' bulursun. +interburbulator_success_prize_4=Doğru. Sana saygım var, insan. Burada size oyunumu hacklemeye çalışan hainin cesedini vereceğim. +interburbulator_success_prize_5=Tam on ikiden, işte ödülünüz. Bu şeyler çok rahatlatıcı. Enerji verimliliği önemlidir. +interburbulator_success_prize_6=Çok iyi, işte ödülün. Bunun sana faydası olur mu bilmiyorum ama benim için sabahları güne başlamama gerçekten yardımcı oluyor. +interburbulator_success_prize_7=Harika, işte ödülün. Bunları araştırma için kullanmayı seviyorum, yaratıcılığa gerçekten yardımcı oluyor. +interburbulator_success_prize_8=Harika, işte ödülünüz. Bunları daha önce gördünüz mü bilmiyorum ama iyi bir vericinin menzilinde durmayı seviyorum. +interburbulator_success_prize_9=Tebrikler, işte ödülünüz. Bu işlemciler çok değerli ve yapımı zor. +interburbulator_success_prize_10=Çok etkileyici bir insanmışsın. Arkosferler benim en değerli eşyalarımdır, onları kaybetme çünkü daha fazlasını yapamazsın. +interburbulator_freeplay_unlocked=Bu işi kaptın. İstersen kendi bulmacalarını yapabilmen için serbest oyunun kilidini açacağım. +interburbulator_deny_freeplay_1=Bunun için serbest oyunun kilidini açman gerekir. +interburbulator_deny_freeplay_2=Bu hile. +interburbulator_deny_freeplay_3=Bulmacayı değiştirmeyin. +interburbulator_deny_freeplay_4=5 soruyu çözebilirsen bu ayarları değiştirmene izin vereceğim. +interburbulator_deny_freeplay_5=Makinelerimi hacklemeye mi çalışıyorsun? +interburbulator_deny_freeplay_6=Sadece "Deneme" girişlerine bağlı kal. +interburbulator_caption_prize=Ödül: __1__ __2__ __3__ __4__ +interburbulator_caption_claimed= (alındı) +interburbulator_speak=[color=red]Brontion: __1__[/color] +interburbulator_robot_name=Brontion +interburbulator_introduction=Interburbul, Brontion Burbulator 33027756 tarafından yapılan bir oyundur. Amaç, Brontion tarafından seçilen vurgulanan hücreye yansıyan bir 3B vektörü tahmin etmektir. Izgaranın 3 köşesinin 3B vektörleri verilmiştir, bu noktalar bir 3B düzlemi tanımlar ve tahmininiz {0,0,0} orijinden bu düzleme yansıtılır. Her birini tamamlamak için artan zorluk ve ödüller içeren 10 tur vardır. Serbest oyun modunun kilidini açmak için 5 mücadeleyi tamamlayın ve kendi mücadelenizi belirleyin. +interburbulator_random=Rastgele +interburbulator_freeplay=Serbest oyun +interburbulator_game_title=Interburbul Oyna +interburbulator_grid_size=Izgara boyutu: +interburbulator_target_cell=Hedef hücre: +interburbulator_top_left=Sol üst +interburbulator_top_right=Sağ üst +interburbulator_bottom_left=Sol alt +interburbulator_attempt=Deneme +interburbulator_attempt_limited=Deneme (__1__/__2__) +interburbulator_attempt_locked=Deneme (Kilitli) +interburbulator_submit=Denemeyi onayla +interburbulator_greeting=İnsan, buraya gel ve oyunumu oyna. __2__ sisteminde __1__ üzerindeyim. +interburbulator_challenge_locked_1=Daha sonra tekrar dene. +interburbulator_challenge_locked_2=Şimdilik tüm denemelerini kullandın. +interburbulator_challenge_locked_3=Tekrar başlamadan önce biraz bekleyin. +interburbulator_challenge_locked_4=20 saniye sonra tekrar deneyebilirsin. +interburbulator_challenge_locked_5=20 saniye bekle, sonra soruyu açacağım. +interburbulator_challenge_locked_6=Bu soru 20 saniyeliğine kilitlendi. +cannot_do_via_satellite=Uzaktan yapılamaz. +scan-progress-update=__1__ için yüzey tarama ilerlemesi: X __2__ Y __3__ +out_of_reach=Ulaşılamıyor +capturable=Ele geçirilebilir +touch-to-capture=Ele geçirmek için dokunun +capture-blocked=Ele geçirme düşman tarafından engellendi +suffix_ruin=__1__ harabesi +migration-recipe-changed=[img=utility/danger_icon] Tarif değişti: __1__ +migrate_0_5_056=[img=utility/warning_icon] Uzay Keşfi v0.5.60 Değişimi: [img=virtual-signal/se-spaceship] Uzay gemisi mekaniği değişti, daha fazla ayrıntı için [img=virtual-signal/informatron] Informatron > Uzay Gemileri'ne veya changelog.txt dosyasına bakın. +migrate_0_5_073=[img=utility/warning_icon] İridit ve Nakitit artık "zor" kaynaklar olarak kabul ediliyor ve Alan Madenciliği Sondajı gerektiriyor. Vitamelanj gezegenleri artık minimum bir tehdit seviyesine sahip (her zaman biraz ısırıcıya sahipler, zaten oluşturulmuş yüzeyler etkilenmez). +panel-open=[font=count-font]▼[/font] [font=default-bold]__1__[/font] +panel-closed=[font=count-font]▶[/font] [font=default-bold]__1__[/font] +panel-integrity-name=Bütünlük +panel-speed-name=Hız +panel-position-name=Pozisyon +panel-destination-name=Hedef +no_zone_found=Bölge bulunamadı +zone_must_be_a_homeworld=Bölge ana dünya olmalı +no_force_found=Takım bulunamadı +no_force_data_found=Takım verisi bulunamadı +reset_discoveries_for_force=Takım için keşifleri sıfırla: __1__ +gate_low_power=Geçit, mevcut olandan daha fazla güç çekmeye çalıştı. +gate-portal-leads-home=Portal stabildir ve nihai hedefininize götürür. Oyunu kazanmak için portala girin. +gate_portal_danger=Portaldan bir şey geliyor. +gate_portal_fail=Bozulma kararsız. Bozulma vektörü hiçbir yere götürmüyor. +choose_coordinates=Koordinat seçin +destination_preview=Hedef Önizleme: +empty=Boş +delivery_cannon_canister_destroyed_by=__1__ konumunda bulunan teslimat kutunuz __2__ savunmaları tarafından yok edildi. +delivery_cannon_defended_canister=__1__ üzerindeki savunmalar, bir düşman teslimat topu kapsülünü başarıyla vurdu. Ateşlenen atışlar: [img=item/se-meteor-defence] __2__ [img=item/se-meteor-point-defence] __3__ +delivery_cannon_defended_canister_failed=[color=red]__1__ üzerindeki savunmalar, bir düşman teslimat topu kapsülünü düşürmede başarısız oldu. Ateşlenen atışlar: [img=item/se-meteor-defence] __2__ [img=item/se-meteor-point-defence] __3__[/color] +dimensional_anchor_limit_1=Yıldız başına 1'den fazla Boyutsal sabitleyiciye sahip olamazsınız. +dimensional_anchor_place_on_star=Bir yıldızın yakın yörüngesine yerleştirilmelidir. +label_status=Durum: __1__ +label_energy=Enerji: __1__ +label_cargo=Kargo: __1__ +label_cargo_rocket_sections=Kargo roket bölümleri: __1__ +label_cargo_safety=Kargo güvenliği: __1__ +label_landing_chance=İniş şansı: __1__ +label_efficiency=Verimlilik: __1__ +label_destination=Hedef: __1__ +label_destination_position=Hedef pozisyon: __1__ +label_liquid_rocket_fuel=Sıvı roket yakıtı: __1__ +label_rocket_sections=Roket bölümleri: __1__ +label_space_capsule=Uzay kapsülü: __1__ +landingpad_unloading_required=Bir sonraki yükten önce boşaltma gerekli +landingpad_ready=Bir sonraki yük için hazır +landingpad_rocket_inboud=Roket geliyor +none_general_vicinity=Hiçbiri - Genel civar +none_cannot_launch=Hiçbiri - Fırlatılamaz +launch_trigger=Fırlatma tetiği +any_landing_pad_with_name=İsmi olan herhangi bir pist +launchpad_requires_satellite=Navigasyon verisi yok, Uydu roket silosundan bir uydu fırlatın. +launchpad_launching_rocket=Roket fırlatılıyor! +launchpad_constructing_rocket=Roket inşa ediliyor +launchpad_space_capsule_required=Uzay kapsülü gerekli +launchpad_invalid_destination=Geçersiz hedef +launchpad_loading_fuel=Yakıt yükleniyor +launchpad_ready_loading_cargo=Hazır - Kargo yükleniyor +launchpad_ready_cargo_full=Hazır - Kargo dolu +launchpad_waiting_for_empty_pad=Kullanılabilir boş iniş pisti bekleniyor. +launchpad_waiting_for_pad=Kullanılabilir iniş pisti bekleniyor. +launchpad_no_pad_matches=İsimle eşleşen iniş pisti bulunamadı. +launchpad_launch_delayed=Fırlat (Gecikmeli) +launchpad_launch_delayed_tooltip=Hedef fırlatma rampasının boşalması bekleniyor. Beklememek için manuel fırlatılabilir. +launchpad_launch_in_progress=Fırlatma devam ediyor +variable=Değişken +cargo_loss_tooltip=Sağ kalan yığın sayıları yuvarlanır, benzersiz öğeler asla kaybolmaz. +survivability_loss_tooltip=Başarısızlık, tüm roket bölümlerinin kaybına neden olur. Kargo yine de kargo bölmelerinde minimum hasarla teslim edilir. +requires_landing_pad=İniş pisti gerektirir. +survivability_loss_no_pad_tooltip=Tüm roket bölümleri kaybolacak, ancak kargo yine de kargo bölmelerinde minimum hasarla teslim edilir. +interstellar_launch_satellite_to_see_star=Yetersiz veri, sistemi görüntülemek için daha fazla uydu fırlatın. +meteor_shower_report=[img=virtual-signal/se-meteor] __1__/__2__ meteor yok edildi. __3__\n [img=item/se-meteor-defence] __4__ atış yapıldı. __5__/__6__ yapı hazır durumda.\n [img=item/se-meteor-point-defence] __7__ atış yapıldı. __8__/__9__ yapı hazır durumda. +nexus_no_characters=__1__, nexus aktivasyonu için kritik hıza ulaştı, ancak gemide hiçbir karakter yok. +gps_invalid=GPS etiketi geçersiz yüzeyi belirtiyor. +gps_no_zone=GPS etiketi, uydu üzerinden görüntülenemeyen farklı bir yüzeydedir. +gps_undiscovered=Konum uydu üzerinden görüntülenemiyor, bölge keşfedilmedi. +gps_requires_satellite=GPS etiketi farklı bir yüzeyde, konumu görüntülemek için bir uydu fırlatın. +clamp_must_be_on_grid=2x2 ray ızgarasına hizalanmalıdır +clamp_invalid_empty_space=Kelepçe arkasındaki 2 karo zemin boş alan olamaz +spaceship_try_replace_console=Uzay gemisi bulunamadı. Konsolu değiştirmeyi deneyin. + +[damage-type-name] +cold=Soğuk +suffocation=Boğulma +meteor=Meteor + +[entity-name] +se-linked-container=Arkolink deposu +vase=Vazo +wooden-barrel=Ahşap varil +furnace-ruin=Yıkılmış taş yığını +workshop-ruin=Yıkılmış atölye +iron-wood-chest=Eski sandık +iron-wood-chest-remnants=Yıkılmış eski sandık +stone-rubble=Taş moloz +se-gate-blocker=Kararsız alan +se-gate-blocker-void=Kararsız alan +destroyed-cargo-pod=Yok edilmiş kargo kapsülü +meteorite=Meteor +rocket-silo=Uydu roket silosu +rocket-fragment=Roket parçası +se-antimatter-reactor=Antimadde reaktörü +se-beryllium-ore=Beril +se-cargo-rocket-cargo-pod=Kargo kapsülü +se-cryonite=Kriyonit +se-condenser-turbine=Kondansatör türbini +se-condenser-turbine-tank=Kondansatör türbini +se-condenser-turbine-generator=Kondansatör türbini +se-core-fragment-processor=Çekirdek parça işleyicisi +se-core-miner=Çekirdek maden sondajı +se-core-miner-drill=Çekirdek maden sondajı +se-cryogun-ice=Buz duvarı +se-dimensional-anchor=Boyutsal sabitleyici +se-electric-boiler=Elektrikli kazan +se-fluid-burner-generator=Sıvı izotermik jeneratör +se-fuel-refinery=Yakıt rafinerisi +se-gate-fragment=Eser kırıntısı +se-holmium-ore=Holminit +se-iridium-ore=İridit +se-meteor-defence-container=Meteor savunma üssü +se-meteor-defence-charger=Meteor savunma üssü +se-meteor-point-defence-container=Meteor nokta savunması +se-meteor-point-defence-charger=Meteor nokta savunması +se-meteor-point-defence-charger-overcharged=Meteor nokta savunması - Hızlı şarj modu +se-methane-ice=Metan buzu +se-naquium-ore=Nakitit +se-pulveriser=Öğütücü +se-rocket-launch-pad=Kargo roketi silosu +se-rocket-launch-pad-tank=Kargo roketi silosu +se-rocket-launch-pad-silo=Kargo roketi silosu +se-rocket-launch-pad-combinator=Kargo roketi silosu +se-rocket-launch-pad-_-seat=Kargo roketi silosu +se-rocket-launch-pad-settings=Kargo roketi silosu +se-rocket-landing-pad=Kargo iniş pisti +se-space-accumulator=Holmiyum akü +se-space-accumulator-2=Nakiyum akü +se-space-astrometrics-laboratory=Astrometrik tesisi +se-space-biochemical-laboratory=Biyokimyasal tesis +se-space-assembling-machine=Uzay montaj makinesi +se-space-capsule-_-vehicle=Uzay kapsülü +se-space-curved-rail=Uzay demiryolu +se-space-decontamination-facility=Arındırma tesisi +se-space-electromagnetics-laboratory=Elektromanyetik tesisi +se-space-genetics-laboratory=Genetik tesisi +se-space-growth-facility=Yetiştirme tesisi +se-space-gravimetrics-laboratory=Gravimetrik tesisi +se-space-hypercooler=Hipersoğutucu +se-space-laser-laboratory=Lazer tesisi +se-lifesupport-facility=Yaşam destek tesisi +se-space-manufactory=Uzay fabrikası +se-space-material-fabricator=Materyal üreticisi +se-space-mechanical-laboratory=Mekanik tesis +se-space-particle-accelerator=Parçacık hızlandırıcı +se-space-particle-collider=Parçacık çarpıştırıcısı +se-space-plasma-generator=Plazma jeneratörü +se-space-radiation-laboratory=Radyasyon tesisi +se-space-radiator=Termal radyatör +se-space-radiator-2=Termal radyatör 2 +se-recycling-facility=Geri dönüşüm tesisi +se-space-pipe=Uzay borusu +se-space-pipe-long=Uzun uzay borusu +se-space-pipe-long-straight=Uzun düz uzay borusu __1__ +se-space-pipe-long-junction=Uzun bağlantılı uzay borusu __1__ +se-space-pipe-to-ground=Uzay yer altı borusu +se-space-science-lab=Uzay bilim laboratuvarı +se-space-solar-panel=Düz güneş paneli +se-space-solar-panel-2=Düz güneş paneli 2 +se-space-solar-panel-3=Düz güneş paneli 3 +se-space-spectrometry-facility=Spektrometri tesisi +se-space-straight-rail=Uzay demiryolu +se-space-supercomputer-1=Süper bilgisayar +se-space-supercomputer-2=Quantum süper bilgisayar +se-space-supercomputer-3=Sinirsel süper bilgisayar +se-space-supercomputer-4=Derin süper bilgisayar +se-space-telescope-radio=Radyo teleskop +se-space-telescope-microwave=Mikrodalga teleskop +se-space-telescope=Teleskop +se-space-telescope-xray=X-ışını teleskopu +se-space-telescope-gammaray=Gama ışını teleskopu +se-space-thermodynamics-laboratory=Termodinamik tesisi +se-space-splitter=Uzay dağıtıcı +se-space-transport-belt=Uzay taşıma bandı +se-space-underground-belt=Uzay yeraltı bandı +se-spaceship-antimatter-engine=Uzay gemisi antimadde motoru +se-spaceship-antimatter-booster-tank=Uzay gemisi antimadde güçlendirici tankı +se-spaceship-console=Uzay gemisi konsolu +se-spaceship-console-output=Uzay gemisi konsolu sinyal çıkışı +se-spaceship-console-alt=Hasarlı uzay gemisi konsolu +se-spaceship-gate=Uzay gemisi geçidi +se-spaceship-ion-engine=Uzay gemisi iyon motoru +se-spaceship-ion-booster-tank=Uzay gemisi iyon güçlendirici tankı +se-spaceship-obstacle=Uzay enkazı +se-spaceship-rocket-engine=Uzay gemisi roket motoru +se-spaceship-rocket-booster-tank=Uzay gemisi roket güçlendirici tankı +se-spaceship-wall=Uzay gemisi duvarı +se-water-ice=Su buzu +se-vitamelange=Vitamelanj +se-vulcanite=Vulkanit +small-asteroid=Küçük asteroit +medium-asteroid=Orta asteroit +large-asteroid=Büyük asteroit +se-gate-part=Eser parçası +se-gate-platform-scaffold=Eser yedek teçhizatı +se-gate-lock-switch=Oynatılabilir bileşen +se-gate-lock-combinator=Kombinatör-eki +se-gate-platform=Eser artırma platformu +se-gate-platform-combinator=Kombinatör-eki +se-gate-energy-interface=Güç platformu +se-gate-platform-button-switch=Buton +se-gate-tank-input=Sıvı girişi +se-gate-tank-output=Sıvı çıkışı +se-pyramid-a=Geometrik yapı +se-pyramid-b=Geometrik yapı +se-pyramid-c=Geometrik yapı +se-cartouche-a=Kalıp +se-cartouche-b-a=Kalıp +se-cartouche-b-b=Kalıp +se-cartouche-chest=Antik konteyner +se-glyph=Kabartma +glyph=Kabartma +se-gate-addon=Eser artırma +se-gate-platform-button-middle=Dur +se-gate-platform-button-left=Sol +se-gate-platform-button-right=Sağ +beacon=Temel verici +se-wide-beacon=Geniş alan vericisi +se-wide-beacon-2=Geniş alan vericisi 2 +se-supercharger=Süperşarj istasyonu +se-addon-power-pole=Güç direği eklentisi +se-pylon=Pilon +se-pylon-substation=Pilon trafo merkezi +se-pylon-construction=İnşaat pilonu +se-pylon-construction-roboport=İnşaat pilonu +se-pylon-construction-radar=Radar inşaat pilonu +se-pylon-construction-radar-roboport=Radar inşaat pilonu +se-pylon-construction-radar-radar=Radar inşaat pilonu +se-shield-projector=Kalkan projektörü +se-shield-projector-shield-floor-east=Enerji kalkanı +se-shield-projector-shield-floor-north=Enerji kalkanı +se-shield-projector-shield-floor-northeast=Enerji kalkanı +se-shield-projector-shield-floor-northwest=Enerji kalkanı +se-shield-projector-shield-floor-south=Enerji kalkanı +se-shield-projector-shield-floor-southeast=Enerji kalkanı +se-shield-projector-shield-floor-southwest=Enerji kalkanı +se-shield-projector-shield-floor-west=Enerji kalkanı +se-shield-projector-shield-wall-east=Enerji kalkanı +se-shield-projector-shield-wall-north=Enerji kalkanı +se-shield-projector-shield-wall-northeast=Enerji kalkanı +se-shield-projector-shield-wall-northwest=Enerji kalkanı +se-shield-projector-shield-wall-south=Enerji kalkanı +se-shield-projector-shield-wall-southeast=Enerji kalkanı +se-shield-projector-shield-wall-southwest=Enerji kalkanı +se-shield-projector-shield-wall-west=Enerji kalkanı +se-shield-projector-barrier=Enerji kalkanı +se-naquium-heat-pipe=Nakiyum ısı borusu +se-naquium-heat-pipe-horizontal=Nakiyum ısı borusu yatay +se-naquium-heat-pipe-vertical=Nakiyum ısı borusu dikey +se-naquium-heat-pipe-long=Nakiyum ısı borusu uzun __1__ +se-deep-space-transport-belt=Derin uzay taşıma bandı +se-deep-space-transport-belt-black=Siyah derin uzay taşıma bandı +se-deep-space-transport-belt-white=Beyaz derin uzay taşıma bandı +se-deep-space-transport-belt-red=Kırmızı derin uzay taşıma bandı +se-deep-space-transport-belt-yellow=Sarı derin uzay taşıma bandı +se-deep-space-transport-belt-green=Yeşil derin uzay taşıma bandı +se-deep-space-transport-belt-cyan=Camgöbeği derin uzay taşıma bandı +se-deep-space-transport-belt-blue=Mavi derin uzay taşıma bandı +se-deep-space-transport-belt-magenta=Eflatun derin uzay taşıma bandı +se-deep-space-underground-belt=Derin uzay yer altı bandı +se-deep-space-underground-belt-black=Siyah derin uzay yer altı bandı +se-deep-space-underground-belt-white=Beyaz derin uzay yer altı bandı +se-deep-space-underground-belt-red=Kırmızı derin uzay yer altı bandı +se-deep-space-underground-belt-yellow=Sarı derin uzay yer altı bandı +se-deep-space-underground-belt-green=Yeşil derin uzay yer altı bandı +se-deep-space-underground-belt-cyan=Camgöbeği derin uzay yer altı bandı +se-deep-space-underground-belt-blue=Mavi derin uzay yer altı bandı +se-deep-space-underground-belt-magenta=Eflatun derin uzay yer altı bandı +se-deep-space-splitter=Derin uzay dağıtıcı +se-deep-space-splitter-black=Siyah derin uzay dağıtıcı +se-deep-space-splitter-white=Beyaz derin uzay dağıtıcı +se-deep-space-splitter-red=Kırmızı derin uzay dağıtıcı +se-deep-space-splitter-yellow=Sarı derin uzay dağıtıcı +se-deep-space-splitter-green=Yeşil derin uzay dağıtıcı +se-deep-space-splitter-cyan=Camgöbeği derin uzay dağıtıcı +se-deep-space-splitter-blue=Mavi derin uzay dağıtıcı +se-deep-space-splitter-magenta=Eflatun derin uzay dağıtıcı +se-core-fissure=Çekirdek yarığı +se-big-turbine=Yüksek sıcaklık türbin jeneratörü +se-big-turbine-generator=Yüksek sıcaklık türbin jeneratörü +se-big-turbine-tank=Yüksek sıcaklık türbin jeneratörü +se-big-heat-exchanger=Yüksek sıcaklık ısı eşanjörü +se-blueprint-registration-point=Plan kayıt noktası +se-delivery-cannon=Teslimat topu +se-delivery-cannon-settings=Teslimat topu +se-delivery-cannon-energy-interface=Teslimat topu +se-delivery-cannon-chest=Teslimat topu sandığı +se-delivery-cannon-weapon=Teslimat topu silahı +se-delivery-cannon-weapon-settings=Teslimat topu silahı +se-delivery-cannon-weapon-energy-interface=Teslimat topu silahı +se-spaceship-clamp=Uzay gemisi kelepçesi +se-spaceship-clamp-place=Uzay gemisi kelepçesi +se-spaceship-clamp-power-pole-external-east=Uzay gemisi kelepçesi tel geçişi +se-spaceship-clamp-power-pole-external-west=Uzay gemisi kelepçesi tel geçişi +se-bloater-pool-cloud=İnfilak havuzu +se-energy-transmitter-emitter=Enerji ışını yayıcı +se-energy-transmitter-chamber=Enerji ışını odası +se-energy-transmitter-injector=Enerji ışını enjektörü +se-energy-transmitter-injector-reactor=Enerji ışını enjektörü +se-energy-receiver=Enerji ışını alıcısı +se-energy-beam-defence=Şemsiye +se-nexus=Nexus +se-nexus-charger=Nexus +se-space-probe-rocket=Uzay sondası roketi +se-space-probe-rocket-silo=Uzay sondası roket silosu +se-interburbulator-interface=Interburbulator arayüzü +se-interburbulator-control=Interburbulator kontrolü +se-interburbulator-projector=Interburbulator projektörü +se-burbulator=Brontion Burbulator 33027756 + +[entity-description] +se-linked-container=Boyut dışı uzay tarafından diğer depolara bağlanan bir depo. Deponun bağlantıları, onun ilk konulduğu yüzeye bağlıdır. +rocket-silo="Navigasyon Uydu Modu"nun kilidini açmak ve uydunun fırlatıldığı yıldız sistemindeki yeni gezegenleri, ayları ve asteroit kuşaklarını keşfetmek için uzaya bir uydu fırlatın. Mevcut sistem tamamen tarandığında yeni yıldızlar keşfedebilir. +se-antimatter-reactor=Aşırı miktarda yüksek ısı üretmek için madde ile antimaddeyi birleştirerek yok eder. +se-beryllium-ore=Berilyum cevheri. +se-condenser-turbine=Buhar türbininin %75'i kadar enerji verimliliği vardır fakat kullanılan buharın %99'u su olarak geri verilir. Sıcaklık aralığı: 100 ila 999. +se-core-fragment-processor=Kaynakları çekirden parçalarından çıkarır. +se-core-miner=Gezegenlerden ve aylardan sonsuz kaynak çıkarılmasına izin verir, ancak aynı cisimde birden fazla kullanıldığında getirisi azalır. 50MW tüketir. +se-core-miner-drill=Gezegenlerden ve aylardan sonsuz kaynak çıkarılmasına izin verir, ancak aynı cisimde birden fazla kullanıldığında getirisi azalır. 50MW tüketir. +se-dimensional-anchor=[font=default-bold][color=#f5cb48]Yerleştirme kısıtı: Yakın Yıldız Yörüngesi[/color][/font]\nUzaysal anomali için yıldızın yerçekimi kuyusunu dengeleyici nokta olarak kullanır. +se-electric-boiler=Elektrik enerjisi kullanarak suyu buhara çevirir. %90 enerji verimliliği vardır. +se-fluid-burner-generator=Elektrik üretmek için bir enerji değerine sahip sıvı yakıt (sıvı roket yakıtı gibi) gerektirir. Basit ve kompakttır ancak daha büyük buhar tabanlı sistemlerin enerji verimliliğinden yoksundur. Uzay için tasarlandı. Asıl sıvı tüketimi, sıvı yakıt değerine bağlıdır. +se-fuel-refinery=Otomatik yakıt işleme yapısı. +se-holmium-ore=Holmiyum cevheri. +se-iridium-ore=İridyum cevheri. +se-meteor-defence-container=Tüm gezegeni meteorlardan koruyabilir, ancak tek seferde sadece 1 meteor vurabilir. Ateşlemek için meteor savunması cephanesiyle doldurulmalı ve tamamen şarj olmalıdır. %80 isabet ihtimali vardır. Ateşledikten sonra yeniden şarj olması gerekir. Şarj olurken 20MW tüketir. +se-meteor-defence-charger=Tüm gezegeni meteorlardan koruyabilir, ancak tek seferde sadece 1 meteor vurabilir. Ateşlemek için meteor savunması cephanesiyle doldurulmalı ve tamamen şarj olmalıdır. %80 isabet ihtimali vardır. Ateşledikten sonra yeniden şarj olması gerekir. Şarj olurken 20MW tüketir. +se-meteor-point-defence-container=Bir alanı meteorlardan korur. Yaylım başına 4 meteora kadar ateş edebilir. Ateşlemek için meteor nokta savunması cephanesiyle doldurulmalı ve tamamen şarj olmalıdır. Menzil 64, %50 isabetlilik, atıştan sonra yeniden şarj olması zaman alır. Şarj modunu değiştirmek için döndürün. +se-meteor-point-defence-charger=Bir alanı meteorlardan korur. Yaylım başına 4 meteora kadar ateş edebilir. Ateşlemek için meteor nokta savunması cephanesiyle doldurulmalı ve tamamen şarj olmalıdır. Menzil 64, %50 isabetlilik, atıştan sonra yeniden şarj olması zaman alır. Şarj modunu değiştirmek için döndürün. +se-meteor-point-defence-charger-overcharged=4 meteora kadar bir alanı korur. Menzil 64, %50 isabetlilik, atıştan sonra yeniden şarj olması zaman alır. Aşırı şarjlı bir savunma, ateşleme meydana geldiğinde güç dalgalanmaları pahasına güç sızıntısını azaltır. +se-naquium-ore=Nakiyum cevheri. +se-pulveriser=Sert mineralleri ve gezegen çekirdek parçalarını öğütür ve ezer. +se-rocket-launch-pad=Envanterini uzaya fırlatır. Yolcu alabilir, ön kapının yanında __CONTROL__toggle-driving__ kullanarak içeri girebilir. Daha fazla bilgi için [img=virtual-signal/informatron] InformaTron'daki Kargo Roketleri sayfasına bakın [__CONTROL__informatron__] +se-rocket-landing-pad=Kargo roketi kapsülleri için bir yük teslimat yeri. +se-space-accumulator=Yüksek yoğunluklu enerji depolama +se-space-accumulator-2=Yüksek yoğunluklu enerji depolama +se-space-astrometrics-laboratory=Farklı astronomik bilgi kaynaklarını birleştirir, karşılaştırır ve ölçer. +se-space-biochemical-laboratory=Biyokimyada uzmanlaşmış gelişmiş bir kimyasal laboratuvar. Daha temel kimya ve petrol işleme de yapabilir. +se-space-assembling-machine=Uzayda çalışabilen modifiye edilmiş bir montaj makinesi. +se-space-capsule-_-vehicle=Yolcuları en yakın gezegen yüzeyine geri götürmek için kullanılabilir. __CONTROL__toggle-driving__ kullanarak kapsüle girin. +se-space-decontamination-facility=Steril ortamlarda kullanılmak üzere maddeleri temizler ve sıvıları düşük basınç koşullarında kullanıma hazırlar. +se-space-electromagnetics-laboratory=Yoğun manyetik alan ve aşırı yüksek voltaj uygulamaları için ekipman. +se-space-genetics-laboratory=Genetik dizileme, genetik modifikasyon ve türlerin genetik olarak yazdırılması için bir laboratuvar. +se-space-growth-facility=Biyolojik türleri başka bir yerde mümkün olmayan bir dizi kontrollü koşul altında yetiştirir, örneğin mikro yerçekimi. +se-space-gravimetrics-laboratory=Yerçekimi bozukluklarını analiz ve simüle eder. +se-space-hypercooler=Termoakışkan üzerinde ısı alışverişi yaparak birini daha sıcak, diğerini daha soğuk hale getirir. +se-space-laser-laboratory=Lazerlerle deneyler yapar. Göz koruması takılmalıdır. +se-lifesupport-facility=Daha tehlikeli ortamlarda yaşamı devam ettirmek için. +se-space-manufactory=Dev bir montaj makinesi, ancak daha karmaşık tarifler üretebilir. Yalnızca uzayda (veya uzay gemilerinde) çalışır. +se-space-material-fabricator=Yeni materyaller sentezler. Parçacık çarpıştırıcısı ve 3 boyutlu yazıcı karışımı bir şey. +se-space-mechanical-laboratory=Bir dizi mekanik işlem sağlar: Ezme, yırtma, kesme, titreşim vb. +se-space-particle-accelerator=Parçacıkları ışık hızına yakın hızda hızlandırır. +se-space-particle-collider=Yüksek hızlı parçacıkları çarpıştırır ve sonuçları analiz eder. +se-space-plasma-generator=Çeşitli plazmalar üretir. +se-space-radiation-laboratory=Radyoaktif malzeme ile oynamak için nispeten güvenli bir yer. Uranyum işleme için kullanılabilir. +se-space-radiator=Aşırı ısınmış termik sıvıdan fazla ısıyı yayar. +se-space-radiator-2=Aşırı ısınmış termik sıvıdan fazla ısıyı yayar. +se-recycling-facility=Hurda ve diğer yan ürünleri kaynaklara geri dönüştürür. +se-space-pipe=Üzerinden yürüyebilirsiniz. +se-space-pipe-long=Sıvıları hızlı bir şekilde uzun mesafelere taşımak için iyi ve ucuz bir yol. Üzerinden yürüyebilirsiniz. +se-space-pipe-long-straight=__1__ uzunluğunda. Yanlardan bağlanmaz. Paralel borular için ve sıvıyı uzun mesafelere taşımada iyidir. +se-space-pipe-long-junction=__1__ uzunluğunda. Yana doğru bağlantıları olan merkezî bağlantı noktası vardır. Montaj hatlarında sıvıları hızlı bir şekilde taşımak için iyidir. +se-space-pipe-to-ground=Pahalıdır ve sınırlı menzili vardır, sadece gerektiğinde kullanmak için. Uzay borusu üzerinde yürüyebilirsiniz. +se-space-science-lab=Gelişmiş bilim paketlerini kullanabilir. +se-space-solar-panel=Üzerinde yürüyebileceğiniz yüksek verimli bir güneş paneli. +se-space-solar-panel-2=Üzerinde yürüyebileceğiniz gelişmiş, yüksek verimli bir güneş paneli. +se-space-solar-panel-3=Üzerinde yürüyebileceğiniz son derece yüksek verimli bir güneş paneli. +se-space-spectrometry-facility=Spektrofotometri, gaz kromatografisi, kütle spektrometrisi ve diğer spektrografi. Bir duvara ateş edin, bükün, nereye çarptığını görün. +se-space-straight-rail=Uzay için tasarlandı fakat zeminde de kullanılabilir. +se-space-supercomputer-1=Veri manipülasyonu, işlenmesi ve simülasyonu. +se-space-supercomputer-2=Kuantum bilgi işlemi. Geliştirilmiş veri manipülasyon, işleme ve simülasyonu. +se-space-supercomputer-3=Kuantum hesaplama çerçevesinde uyarlanabilir sinir ağı. Geliştirilmiş veri manipülasyon, işleme ve simülasyonu. +se-space-supercomputer-4=Daha çok işlem yoğunluğu ve enerji aktarımı için uzay bükümünden ve daha yüksek boyutlardan yararlanan nano mühendislik ürünü yarı organik bir süper bilgisayar. +se-space-telescope-radio=Uzak kaynaklardan gelen çok zayıf radyo dalgalarını algılayan devasa bir teleskop. +se-space-telescope-microwave=Mikrodalgaları ve kozmik mikrodalga arka planını algılayan devasa bir teleskop. +se-space-telescope=Görünür spektrum etrafındaki çoklu dalga boylarına duyarlı gelişmiş bir teleskop. +se-space-telescope-xray=Çoğu atmosfer X-ışınlarını engeller. Bu güçlü teleskop, atmosferin sorun olmadığı uzay için tasarlanmıştır. +se-space-telescope-gammaray=Gama ışınları kırılmaz, bu nedenle onları lenslerle odaklayamazsınız. Bunun yerine bu güçlü teleskop, aynalar ve özel dedektörler kullanır. +se-space-thermodynamics-laboratory=Aşırı sıcaklık içeren işlemleri üstlenir. Eritme gibi temel termal işlemler de gerçekleştirebilir. +se-space-transport-belt=Eşyalarınızın uçmasını önler. +se-spaceship-antimatter-engine=[font=default-bold][color=#f5cb48]Yerleştirme kısıtı: Uzay Gemisi Zemini[/color][/font]\nBir antimadde akışını imha eder. Uzay gemisi muhafazası için bölme duvarı olarak sayılır. +se-spaceship-antimatter-booster-tank=[font=default-bold][color=#f5cb48]Yerleştirme kısıtı: Uzay Gemisi Zemini[/color][/font]\nAntimadde tutar. Uzay gemisi fırlatışı için gereklidir. +se-spaceship-console=[font=default-bold][color=#f5cb48]Yerleştirme kısıtı: Uzay Gemisi Zemini[/color][/font]\nGezegenler, aylar, yörüngeler ve asteroit alanlar arasında uzay gemisini taşımak için kullanın. Uzay gemisi duvarları/kapıları ile çevrelenmeli, boşluk veya delik olmayacak şekilde kapatılmalıdır. Bütünlük kontrolü, sorunları ortaya çıkarır. +se-spaceship-console-output=Uzay gemisinin anlık durumuyla alakalı sinyal çıktısı verir. Daha fazla bilgi için [img=virtual-signal/informatron] InformaTron'daki Uzay Gemileri sayfasına bakın [__CONTROL__informatron__]. +se-spaceship-console-alt=[font=default-bold][color=#f5cb48]Yerleştirme kısıtı: Uzay Gemisi Zemini[/color][/font]\nBu uzay gemisi konsolu hasar almıştır ve gemiyi kontrol etmek için kullanılamaz. +se-spaceship-gate=[font=default-bold][color=#f5cb48]Yerleştirme kısıtı: Uzay Gemisi Zemini[/color][/font]\nBir güç alanı, kapı açıldığında basınç azalmasını önler. Uzay gemisi muhafazası için bölme duvarı olarak sayılır. +se-spaceship-ion-engine=[font=default-bold][color=#f5cb48]Yerleştirme kısıtı: Uzay Gemisi Zemini[/color][/font]\nAz miktarda iyon akışı kullanır, ancak itiş için çok fazla güç kullanır. Uzay gemisi muhafazası için bölme duvarı olarak sayılır. +se-spaceship-ion-booster-tank=[font=default-bold][color=#f5cb48]Yerleştirme kısıtı: Uzay Gemisi Zemini[/color][/font]\nİyon akışını tutar. Uzay gemisinin fırlatılması için gereklidir, ancak yalnızca uzaydan fırlatılabilir. +se-spaceship-rocket-engine=[font=default-bold][color=#f5cb48]Yerleştirme kısıtı: Uzay Gemisi Zemini[/color][/font]\nSıvı roket yakıtı yakar. Uzay gemisi muhafazası için bölme duvarı olarak sayılır. +se-spaceship-rocket-booster-tank=[font=default-bold][color=#f5cb48]Yerleştirme kısıtı: Uzay Gemisi Zemini[/color][/font]\nSıvı roket yakıtı tutar. Uzay gemisi fırlatışı için gereklidir. +se-spaceship-wall=[font=default-bold][color=#f5cb48]Yerleştirme kısıtı: Uzay Gemisi Zemini[/color][/font]\nUzay gemisi muhafazası için bölme duvarı olarak sayılır, çapraz yönde boşluklar muhafazayı bozar. +se-gate-platform-scaffold=Yüzük ne olursa olsun işe yaramayacak. Bu, bazı onarımlar yapmak, birkaç motor, sensör, kontrol arayüzü ve diğer eklentileri kurmak için bir inşaat alanıdır. +se-gate-lock-switch=Manuel olarak hareket ettirmek için __CONTROL__rotate__ tuşuna basın. +se-gate-lock-combinator=Henüz tamamlanmadı. +se-gate-platform-combinator=Henüz tamamlanmadı. +se-gate-energy-interface=Esere güç sağlar. +se-gate-platform-button-switch=Basmak için __CONTROL__rotate__ tuşuna basın. +beacon=8 modül yuvası vardır. Modüllerin etkilerini 3 karo içinde yakındaki dost varlıklara iletir. Aynı varlığı etkileyen birden fazla verici varsa, onu aşırı yükleyecek ve çalışmasını engelleyecektir. +se-wide-beacon=15 modül yuvası. Modüllerin etkilerini 14 karo içindeki dost varlıklara iletir. Aynı varlığı etkileyen birden fazla işaret, onu aşırı yükleyecek ve çalışmasını engelleyecektir. +se-wide-beacon-2=20 modül yuvası. Modüllerin etkilerini 14 karo içindeki dost varlıklara iletir. Aynı varlığı etkileyen birden fazla işaret, onu aşırı yükleyecek ve çalışmasını engelleyecektir. +se-supercharger=64 robotu aynı anda yüksek hızda şarj edebilir. Yapı maksimum güç çekişi 1GW'tır. +se-addon-power-pole=Binalara takılmak veya elektrik kapsama alanı üzerinde hassas kontrol için tasarlanmış küçük bir elektrik direği. +se-pylon=Elektrik enerjisini dağıtır. Bağlantı aralığı 64 karodur. +se-pylon-substation=Elektrik enerjisini dağıtır. 64 karo bağlantı aralığı, 64x64 güç kaynağı alanı vardır. +se-pylon-construction=Elektrik enerjisini dağıtır ve inşaat alanını genişletir. 64 karo bağlantı aralığı, 64x64 inşaat alanı vardır. +se-pylon-construction-radar=Elektrik enerjisini dağıtır, inşaat alanını genişletir ve radar görüşü sağlar. 64 karo bağlantı aralığı, 256x256 yapı ve görüş alanı. 4x4 lojistik alanı vardır. +se-shield-projector=Koruyucu bir güç alanı oluşturur. Projektör şarj olurken veya kalkan hasar gördüğünde daha fazla enerji gerekir. "Combat Mechanics Overhaul" eklentisi kuruluysa, düşman mermilerini engelleyebilir. +se-big-turbine=5000°C buhar alan, diğer ucunda 500°C buhar veren ve yanlardan su veren büyük bir jeneratör. Giriş enerjisinin %2'si kullanılmaz ve çıkış buharında bulunur. +se-big-heat-exchanger=Yüksek sıcaklıklar ve yüksek kapasite için tasarlanmış büyük bir ısı eşanjörü. +se-delivery-cannon=Kaynakları yörüngeye ve ötesine fırlatabilen bir raylı top. Güvenli bir şekilde yakalanmazsa hasara neden olur, dikkatli kullanın. 1GJ kapasite, şarj olurken 50MW tüketir. +se-delivery-cannon-chest=Yüksek hızlı düşen kaynakları güvenli bir şekilde yakalamak için tasarlanmış zırhlı bir sandık. Teslimatları güvenli bir şekilde yakalamak için envanter alanı gerektirir. +se-delivery-cannon-weapon=Mühimmatları yörüngeye ve ötesine fırlatabilen büyük bir raylı top. Dikkatle kullanın. +se-spaceship-clamp=Bir uzay gemisindeki bir kelepçe, ters yöne bakan bir kelepçeye sabitlenebilir. Uzay gemisi muhafazası için bölme duvarı olarak sayılır. +se-spaceship-clamp-place=Bir uzay gemisindeki bir kelepçe, ters yöne bakan bir kelepçeye sabitlenebilir. Uzay gemisi muhafazası için bölme duvarı olarak sayılır. +se-spaceship-clamp-power-pole-external-east=Bir kelepçe üzerinde bir tel bağlantı noktası. Bağlantılıyken devre sinyallerini ve gücü bağlı kelepçeye iletir. +se-spaceship-clamp-power-pole-external-west=Bir kelepçe üzerinde bir tel bağlantı noktası. Bağlantılıyken devre sinyallerini ve gücü bağlı kelepçeye iletir. +se-energy-transmitter-emitter=Yüzeyler arası bir enerji ışını üreten merkezi bina. Bir silah olarak veya bir enerji ışını alıcısına güç aktarmak için kullanılabilir. Bağlı enerji ışını odası ve bağlı enerji ışını enjektörleri gerektirir. Işın gücü enjektör sayısına bağlıdır. +se-energy-transmitter-chamber=Bir enerji ışını emitörüne bağlanmalıdır. Diğer bölmeler, her iki tarafın ucuna veya ortasına bağlanabilir. Enerji ışını enjektörleri sadece yanlara bağlanabilir. +se-energy-transmitter-injector=Bir enerji ışını odasına eklenip bir yayıcıya bağlanmalıdır. Enjektörlerin sabit bir güç çekişi vardır, her biri bir alıcıya daha fazla ısı vererek gönderilen enerjiyi arttırır veya ışın silahının hızını ve hasarını arttırır. +se-energy-transmitter-injector-reactor=Bir enerji ışını odasına eklenip bir yayıcıya bağlanmalıdır. Enjektörlerin sabit bir güç çekişi vardır, her biri bir alıcıya daha fazla ısı vererek gönderilen enerjiyi arttırır veya ışın silahının hızını ve hasarını arttırır. +se-energy-receiver=Bir enerji ışınını ısı olarak yakalar. Verici, Güç Ver modunda olmalı ve hedef alıcı üzerinde olmalıdır. +se-energy-beam-defence=Enerji ışını savunma tesisi. Uzay tabanlı enerji ışınlarına ve taçküre kütle atımlarına karşı koruma sağlar. Çalışmak için tek gereksinim enerjidir, temel tüketim 10 MW'dır ancak gelen ışınlarının gücüne bağlı olarak artar. Taçküre kütle atımlarına ve enerji ışınları silahlarına karşı yüzey başına sadece 1 adet yeterlidir. 1 Şemsiye, 500GW'a kadar saldırı gücüne karşı savunma yapabilir. Daha fazla bilgi için [img=virtual-signal/informatron] InformaTron'daki Enerji Işınlarına bakın [__CONTROL__informatron__] +se-nexus=Sadece hareket eden bir uzay gemisinde çalışır, enerji kullanımı hız ile orantılıdır. Yıldızlararası hareketten veri elde edebilir, veri üretimi gemi kinetik enerjisine dayanır. Nexus, bir bozulma sürücüsü görevi görecek şekilde tasarlanmıştır ve doğru teknolojiyle yerel yıldız kümesinden kaçmayı mümkün kılabilir.\n2000 kutu bütünlük gerilimi uygular. +se-nexus-charger=Sadece hareket eden bir uzay gemisinde çalışır, enerji kullanımı hız ile orantılıdır. Yıldızlararası hareketten veri elde edebilir, veri üretimi gemi kinetik enerjisine dayanır. Nexus, bir bozulma sürücüsü görevi görecek şekilde tasarlanmıştır ve doğru teknolojiyle yerel yıldız kümesinden kaçmayı mümkün kılabilir. +se-space-probe-rocket-silo=Uzay sondalarını fırlatmak için bir roket silosu. +pipe=Sıvı dağıtımı. +pipe-to-ground=Yer altı sıvı dağıtımı. +straight-rail=Tren rayı. +curved-rail=Tren rayı. +stone-furnace=Cevherleri eritir. +steel-furnace=Cevherleri eritir. +electric-furnace=Cevherleri eritir. +burner-assembling-machine=Fırın-tabanlı otomatik bir üretim binası. +assembling-machine-1=Otomatik bir üretim binası. +assembling-machine-2=Otomatik bir üretim binası. +assembling-machine-3=Otomatik bir üretim binası. +oil-refinery=Ham petrolü daha faydalı ürünlere dönüştürür. +chemical-plant=Otomatik bir üretim binası. +lab=Otomatik bir araştırma binası. +burner-lab=Otomatik bir araştırma binası. +transport-belt=Öğeleri hareket ettiren bir taşıyıcı. +fast-transport-belt=Öğeleri hareket ettiren bir taşıyıcı. +express-transport-belt=Öğeleri hareket ettiren bir taşıyıcı. +underground-belt=Öğelleri yer altından taşıyan bir taşıyıcı. +fast-underground-belt=Öğelleri yer altından taşıyan bir taşıyıcı. +express-underground-belt=Öğelleri yer altından taşıyan bir taşıyıcı. +splitter=Taşıyıcı-tabanlı bir bölme, birleştirme ve sıralama makinesi. +fast-splitter=Taşıyıcı-tabanlı bir bölme, birleştirme ve sıralama makinesi. +express-splitter=Taşıyıcı-tabanlı bir bölme, birleştirme ve sıralama makinesi. +kr-singularity-beacon=Kısa menzilli, kompakt, %100 etkili verimlilik vericisi. Modüllerin etkilerini 2 karo içinde yakındaki dost varlıklara iletir. Aynı varlığı etkileyen birden fazla verici varsa, onu aşırı yükleyecek ve çalışmasını engelleyecektir. +spidertron=Eğer roket bir iniş pistine ayarlanmamışsa kargo roketinden konuşlanabilir. + +[equipment-name] +energy-shield-equipment=Enerji kalkanı +energy-shield-mk2-equipment=Enerji kalkanı MK2 +energy-shield-mk3-equipment=Enerji kalkanı MK3 +energy-shield-mk4-equipment=Enerji kalkanı MK4 +energy-shield-mk5-equipment=Enerji kalkanı MK5 +energy-shield-mk6-equipment=Enerji kalkanı MK6 +se-adaptive-armour-equipment-1=Uyarlanabilir zırh MK1 +se-adaptive-armour-equipment-2=Uyarlanabilir zırh MK2 +se-adaptive-armour-equipment-3=Uyarlanabilir zırh MK3 +se-adaptive-armour-equipment-4=Uyarlanabilir zırh MK4 +se-adaptive-armour-equipment-5=Uyarlanabilir zırh MK5 +se-rtg-equipment=Portatif RTJ +se-rtg-equipment-2=Portatif RTJ MK2 +se-lifesupport-equipment-1=Yaşam destek ekipmanı MK1 +se-lifesupport-equipment-2=Yaşam destek ekipmanı MK2 +se-lifesupport-equipment-3=Yaşam destek ekipmanı MK3 +se-lifesupport-equipment-4=Yaşam destek ekipmanı MK4 + +[equipment-description] +energy-shield-equipment=Hızlı şarj olan ancak çok fazla enerji kullanan koruyucu bir balon. +energy-shield-mk2-equipment=Hızlı şarj olan ancak çok fazla enerji kullanan koruyucu bir balon. +energy-shield-mk3-equipment=Hızlı şarj olan ancak çok fazla enerji kullanan koruyucu bir balon. +energy-shield-mk4-equipment=Hızlı şarj olan ancak çok fazla enerji kullanan koruyucu bir balon. +energy-shield-mk5-equipment=Hızlı şarj olan ancak çok fazla enerji kullanan koruyucu bir balon. +energy-shield-mk6-equipment=Hızlı şarj olan ancak çok fazla enerji kullanan koruyucu bir balon. +se-adaptive-armour-equipment-1=Kendini onarmak için enerji kullanan zırh. Zamanla koruma değerini yavaşça artırır. +se-adaptive-armour-equipment-2=Kendini onarmak için enerji kullanan zırh. Zamanla koruma değerini yavaşça artırır. +se-adaptive-armour-equipment-3=Kendini onarmak için enerji kullanan zırh. Zamanla koruma değerini yavaşça artırır. +se-adaptive-armour-equipment-4=Kendini onarmak için enerji kullanan zırh. Zamanla koruma değerini yavaşça artırır. +se-adaptive-armour-equipment-5=Kendini onarmak için enerji kullanan zırh. Zamanla koruma değerini yavaşça artırır. +se-rtg-equipment=Radyoizotop termoelektrik jeneratörü. Isıyı radyoaktif bozunmadan elektriğe dönüştüren portatif bir jeneratör. Ek yakıt gerektirmeden onlarca yıl dayanır. +se-rtg-equipment-2=Radyoizotop termoelektrik jeneratörü. Isıyı radyoaktif bozunmadan elektriğe dönüştüren gelişmiş bir taşınabilir jeneratör. Ek yakıt gerektirmeden onlarca yıl dayanır. +se-lifesupport-equipment-1=Yaşam desteği verimliliğini +%100 artırır (katkılı). Uzay giysisi dışında bir giysiye takılırsa verimlilik bonusu yarıya iner ve uzayda çalışmaz. +se-lifesupport-equipment-2=Yaşam desteği verimliliğini +%200 artırır (katkılı). Uzay giysisi dışında bir giysiye takılırsa verimlilik bonusu yarıya iner ve uzayda çalışmaz. +se-lifesupport-equipment-3=Yaşam desteği verimliliğini +%400 artırır (katkılı). Uzay giysisi dışında bir giysiye takılırsa verimlilik bonusu yarıya iner ve uzayda çalışmaz. +se-lifesupport-equipment-4=Yaşam desteği verimliliğini +%800 artırır (katkılı). Uzay giysisi dışında bir giysiye takılırsa verimlilik bonusu yarıya iner ve uzayda çalışmaz. + +[fluid-name] +se-antimatter-stream=Antimadde akışı +se-bio-sludge=Biyoçamur +se-contaminated-bio-sludge=Kirlenmiş biyoçamur +se-contaminated-space-water=Kirlenmiş kozmik su +se-chemical-gel=Kimyasal jel +se-decompressing-steam=Yoğuşma buharı +se-liquid-rocket-fuel=Sıvı roket yakıtı +se-methane-gas=Metan gazı +se-methane-gas-mixed=Karışık metan gazı +se-nutrient-gel=Besin jeli +se-neural-gel=Sinir jeli +se-neural-gel-2=Gelişmiş sinir jeli +se-ion-stream=İyon akışı +se-plasma-stream=Plazma akışı +se-particle-stream=Parçacık akışı +se-proton-stream=Proton akışı +se-space-coolant=Termoakışkan 25°C +se-space-coolant-hot=Termoakışkan 25°C +se-space-coolant-warm=Soğuk termoakışkan -10°C +se-space-coolant-cold=Soğuk termoakışkan -100°C +se-space-coolant-supercooled=Aşırı soğutulmuş termoakışkan -273°C +se-space-water=Kozmik su +se-beryllium-hydroxide=Berilyum hidroksit +se-cryonite-slush=Kriyonit çamuru + +[fluid-description] +se-space-coolant=Termoakışkanın varsayılan sıcaklığı. +se-space-coolant-hot=Termoakışkanın varsayılan sıcaklığı. +se-space-coolant-warm=Termal radyatörler tarafından soğutulduktan sonra termoakışkanın sıcaklığı. +se-space-coolant-cold=Aşırı soğutmadan sonra termoakışkanın sıcaklığı. +se-space-coolant-supercooled=Tekrarlanan aşırı soğutmadan sonra termoakışkanın sıcaklığı. +se-space-water=Düşük basınçta donmayacak su, çoğu uzay uygulaması için daha uygundur. + +[fuel-category-name] +antimatter=Antimadde yakıtı + +[item-group-name] +space=Uzay +science=Bilim +spaceship=Uzay gemisi +bob-fluids=Sıvılar +resources=Kaynaklar +intermediate-products=İmalat +combat=Ekipman & Savaş + +[item-name] +spidertron=Spidertron +core-fragment=Çekirdek parçası (__1__) +effectivity-module-4=Verimlilik modülü 4 +effectivity-module-5=Verimlilik modülü 5 +effectivity-module-6=Verimlilik modülü 6 +effectivity-module-7=Verimlilik modülü 7 +effectivity-module-8=Verimlilik modülü 8 +effectivity-module-9=Verimlilik modülü 9 +glass=Cam +productivity-module-4=Üretkenlik modülü 4 +productivity-module-5=Üretkenlik modülü 5 +productivity-module-6=Üretkenlik modülü 6 +productivity-module-7=Üretkenlik modülü 7 +productivity-module-8=Üretkenlik modülü 8 +productivity-module-9=Üretkenlik modülü 9 +rocket-fuel=Katı roket yakıtı +sand=Kum +solid-sand=Yıkanmış kum +washed-sand=Yıkanmış kum +satellite=Navigasyon uydusu +se-satellite-telemetry=Uydu telemetrisi +se-antimatter-canister=Antimadde kabı +se-astrometric-data=Astrometrik veriler +se-astronomic-catalogue-1=Astronomik katalog +se-astronomic-catalogue-2=Geniş astronomik katalog +se-astronomic-catalogue-3=Kapsamlı astronomik katalog +se-astronomic-catalogue-4=Genişletilmiş astronomik katalog +se-astronomic-insight=Astronomik içgörü +se-astronomic-science-pack-1=Astronomik bilim paketi 1 +se-astronomic-science-pack-2=Astronomik bilim paketi 2 +se-astronomic-science-pack-3=Astronomik bilim paketi 3 +se-astronomic-science-pack-4=Astronomik bilim paketi 4 +se-atomic-data=Atomik veriler +se-beryllium-ore=Beril +se-ballistic-shielding-data=Balistik koruma verileri +se-beryllium-ore-crushed=Ezilmiş beril +se-beryllium-ore-washed=Yıkanmış beril +se-beryllium-plate=Berilyum levha +se-beryllium-powder=Berilyum tozu +se-beryllium-ingot=Berilyum külçesi +se-beryllium-sulfate=Berilyum sülfat +se-bio-combustion-data=Biyo yanma Verileri +se-bio-combustion-resistance-data=Biyo yanma direnci verileri +se-bio-spectral-data=Biyo-spektral veriler +se-biochemical-data=Biyokimyasal veriler +se-biochemical-resistance-data=Biyokimyasal direnç verileri +se-bioculture=Biyo-kültür +se-bioelectrics-data=Biyoelektrik veriler +se-biological-catalogue-1=Biyolojik katalog +se-biological-catalogue-2=Geniş biyolojik katalog +se-biological-catalogue-3=Kapsamlı biyolojik katalog +se-biological-catalogue-4=Genişletilmiş biyolojik katalog +se-biological-insight=Biyolojik içgörü +se-biological-science-pack-1=Biyolojik bilim paketi 1 +se-biological-science-pack-2=Biyolojik bilim paketi 2 +se-biological-science-pack-3=Biyolojik bilim paketi 3 +se-biological-science-pack-4=Biyolojik bilim paketi 4 +se-biomechanical-data=Biyomekanik veriler +se-biomechanical-resistance-data=Biyomekanik direnç verileri +se-boson-data=Bozon verileri +se-broken-data=Bozuk veri kartı +se-canister=Güvenli kap +se-biogun=Biyosilah +se-bloater-ammo=İnfilak cephanesi +se-pheromone-ammo=Feromon dartı +se-cryogun=Kriyosilah +se-cryogun-ammo=Buzul cephane +se-rocket-launch-pad-silo-dummy-ingredient-item=Kargo roketi (Gizli İçerik) +se-rocket-launch-pad-silo-dummy-result-item=Kargo roketi (Gizli Sonuç) +se-cargo-rocket-cargo-pod=Kargo kapsülü +se-cargo-rocket-fuel-tank=Roket yakıt tankı +se-cargo-rocket-section=Kargo roket bölümü +se-cargo-rocket-section-packed=Paketlenmiş kargo roket bölümü +se-cold-thermodynamics-data=Soğuk termodinamik verileri +se-comparative-genetic-data=Karşılaştırmalı genetik veriler +se-compressive-strength-data=Basınç dayanımı verileri +se-conductivity-data=İletkenlik verileri +se-contaminated-scrap=Kirlenmiş hurda +se-core-fragment-omni=Çekirdek parçası +se-corrosion-resistance-data=Korozyon direnci verileri +se-cryogenics-data=Kriyojenik veriler +se-cryonite=Kriyonit +se-cryonite-crushed=Ezilmiş kriyonit +se-cryonite-washed=Yıkanmış kriyonit +se-cryonite-rod=Kriyonit çubuk +se-cryonite-ion-exchange-beads=Anyon iyon değişim damlaları +se-dark-energy-data=Karanlık enerji verileri +se-darkmatter-data=Karanlık madde verileri +se-data-storage-substrate-cleaned=Temiz veri depolama tabakası +se-data-storage-substrate=Kaba veri depolama tabakası +se-decompression-data=Dekompresyon verileri +se-decompression-resistance-data=Dekompresyon direnci verileri +se-universal-catalogue=Evrensel katalog +se-deep-space-science-pack=Derin uzay bilim paketi +se-deep-space-science-pack-1=Derin uzay bilim paketi 1 +se-deep-space-science-pack-2=Derin uzay bilim paketi 2 +se-deep-space-science-pack-3=Derin uzay bilim paketi 3 +se-deep-space-science-pack-4=Derin uzay bilim paketi 4 +se-doppler-shift-data=Doppler kayması verileri +se-durability-data=Dayanıklılık verileri +se-electrical-shielding-data=Elektrikli koruma verileri +se-electromagnetic-field-data=Elektromanyetik Alan Verileri +se-empty-data=Boş veri kartı +se-empty-lifesupport-canister=Boş yaşam destek kabı +se-energy-catalogue-1=Enerji kataloğu +se-energy-catalogue-2=Geniş enerji kataloğu +se-energy-catalogue-3=Kapsamlı enerji kataloğu +se-energy-catalogue-4=Genişletilmiş enerji kataloğu +se-energy-insight=Enerji içgörüsü +se-energy-science-pack-1=Enerji bilim paketi 1 +se-energy-science-pack-2=Enerji bilim paketi 2 +se-energy-science-pack-3=Enerji bilim paketi 3 +se-energy-science-pack-4=Enerji bilim paketi 4 +se-entanglement-data=Dolaşıklık verileri +se-enriched-naquium=Zenginleştirilmiş nakiyum +se-exotic-fission-data=Egzotik fisyon verileri +se-exotic-singularity-data=Tekillik verileri +se-explosion-shielding-data=Patlama koruma verileri +se-experimental-alloys-data=Deneysel alaşım verileri +se-experimental-biochemical-data=Deneysel biyokimyasal veriler +se-experimental-bioculture=Deneysel biyo-kültür +se-experimental-genetic-data=Deneysel genetik veriler +se-experimental-material-decay-data=Deneysel materyal bozunma verileri +se-experimental-material-spectral-data=Deneysel materyal spektral verileri +se-experimental-material=Deneysel materyal prototipi +se-experimental-specimen=Deneysel biyokütle +se-experimental-superconductor=Süper iletken prototip +se-forcefield-data=Kuvvet alanı verileri +se-friction-data=Sürtünme verileri +se-fusion-test-data=Füzyon testi verileri +se-gammaray-detector=Gama ışını dedektörü +se-gammaray-observation-data=Gama ışını gözlem verileri +se-gammaray-test-data=Gama ışını verileri +se-gate-fragment=Eser kırıntısı +se-genetic-data=Genetik veriler +se-gravity-wave-observation-data=Yerçekimi dalgası gözlem verileri +se-gravity-wave-data=Yerçekimi dalgası verileri +se-gravimetric-observation-data=Gravimetrik gözlem verileri +se-gravimetric-test-data=Gravimetrik test verileri +se-gravitational-lensing-data=Yerçekimsel mercekleme verileri +se-heat-shielding=Isı kalkanı +se-holmium-ore=Holminit +se-holmium-ore-crushed=Ezilmiş holminit +se-holmium-ore-washed=Yıkanmış holminit +se-holmium-powder=Holminit tozu +se-holmium-plate=Holminit levha +se-holmium-ingot=Holminit külçe +se-hot-thermodynamics-data=Sıcak termodinamik verileri +se-impact-shielding-data=Darbe koruma verileri +se-infrared-observation-data=Kızılötesi gözlem verileri +se-ion-spectrometry-data=İyon spektrometrisi verileri +se-iridium-ore=İridit +se-iridium-ore-crushed=Ezilmiş iridit +se-iridium-ore-washed=Yıkanmış iridit +se-iridium-piledriver=İridyum kazık sürücüsü +se-iridium-powder=İridyum tozu +se-iridium-plate=İridyum levha +se-iridium-ingot=İridyum külçe +se-junk-data=Önemsiz veri kartı +se-laser-shielding-data=Lazer koruma verileri +se-lepton-data=Lepton verileri +se-lifesupport-canister=Yaşam destek kabı +se-machine-learning-data=Makine öğrenimi verileri +se-magnetic-canister=Manyetik kap +se-magnetic-monopole-data=Manyetik monopol verileri +se-material-decay-data=Materyal bozunma verileri +se-material-science-pack-1=Materyal bilim paketi 1 +se-material-science-pack-2=Materyal bilim paketi 2 +se-material-science-pack-3=Materyal bilim paketi 3 +se-material-science-pack-4=Materyal bilim paketi 4 +se-material-spectral-data=Materyal spektral verileri +se-material-testing-pack=Materyal test paketi +se-material-catalogue-1=Materyal kataloğu +se-material-catalogue-2=Geniş materyal kataloğu +se-material-catalogue-3=Kapsamlı materyal kataloğu +se-material-catalogue-4=Genişletilmiş materyal kataloğu +se-material-insight=Materyal içgörüsü +se-medpack=Sağlık paketi +se-medpack-2=Sağlık paketi 2 +se-medpack-3=Sağlık paketi 3 +se-medpack-4=Sağlık paketi 4 +se-meteor-defence=Meteor savunma üssü +se-meteor-defence-ammo=Meteor savunma üssü cephanesi +se-meteor-point-defence=Meteor nokta savunması +se-meteor-point-defence-ammo=Meteor nokta savunma cephanesi +se-methane-ice=Metan buzu +se-micro-black-hole-data=Mikro kara delik verileri +se-microwave-observation-data=Mikrodalga gözlem verileri +se-negative-pressure-data=Negatif basınç verileri +se-nano-cold-thermodynamics-data=Nanomalzeme soğuk termodinamik verileri +se-nano-compressive-strength-data=Nanomalzeme basınç dayanımı verileri +se-nano-hot-thermodynamics-data=Nanomalzeme sıcak termodinamik verileri +se-nanomaterial=Nanomalzeme +se-nano-tensile-strength-data=Nanomalzeme gerilme dayanıklılığı verileri +se-naquium-ore=Nakitit +se-naquium-ore-crushed=Ezilmiş nakitit +se-naquium-ore-washed=Yıkanmış nakitit +se-naquium-powder=Nakiyum tozu +se-naquium-plate=Nakiyum levha +se-naquium-ingot=Nakiyum külçe +se-neural-anomaly-data=Sinirsel anomali verileri +se-nutrient-vat=Besin fıçısı +se-observation-frame-blank=Boş gözlem çerçevesi +se-observation-frame-gammaray=Gama ışını gözlem çerçevesi +se-observation-frame-infrared=Kızılötesi gözlem çerçevesi +se-observation-frame-microwave=Mikrodalga gözlem çerçevesi +se-observation-frame-radio=Radyo dalgası gözlem çerçevesi +se-observation-frame-uv=UV gözlem çerçevesi +se-observation-frame-visible=Görünür gözlem çerçevesi +se-observation-frame-xray=X-ışını gözlem çerçevesi +se-orbital-data=Yörünge hesaplama verileri +se-particle-beam-shielding-data=Parçacık ışını koruma verileri +se-plague-bomb=Salgın roketi +se-plasma-canister=Plazma kap +se-plasma-electrodynamics-data=Plazma elektrodinamik verileri +se-plasma-thermodynamics-data=Plazma termodinamik verileri +se-polarisation-data=Polarizasyon verileri +se-pressure-containment-data=Basınç muhafaza verileri +se-quantum-phenomenon-data=Kuantum fenomeni verileri +se-quark-data=Kuark verileri +se-radiation-data=Radyasyon verileri +se-radiation-exposure-data=Radyasyona maruz kalma verileri +se-radiation-exposure-resistance-data=Radyasyon direnci verileri +se-radiation-shielding-data=Radyasyon koruma verileri +se-radio-observation-data=Radyo dalgası gözlem verileri +se-rigidity-data=Sertlik verileri +se-rtg-equipment=Portatif RTJ +se-rtg-equipment-2=Portatif RTJ MK2 +se-scrap=Hurda +se-shear-strength-data=Kesme dayanıklılığı verileri +se-significant-data=Önemli veriler +se-significant-specimen=Önemli biyokütle +se-singularity-data=Tekillik verileri +se-space-capsule=Uzay kapsülü +se-space-mirror=Multispektral ayna +se-space-platform-plating=Uzay platformu kaplaması +se-space-platform-scaffold=Uzay platformu iskelesi +se-space-rail=Uzay demiryolu +se-spaceship-floor=Uzay gemisi zemini +se-specimen=Biyokütle +se-subatomic-data=Atom altı verileri +se-superconductivity-data=Süper iletkenlik verileri +se-superconductor=Süper iletken +se-superconductive-cable=Süper iletken kablo +se-tensile-strength-data=Gerilme dayanıklılığı verileri +se-tesla-ammo=Tesla silahı cephanesi +se-tesla-gun=Tesla silahı +se-thruster-suit=İtici giysi +se-thruster-suit-2=İtici giysi MK2 +se-thruster-suit-3=İtici giysi MK3 +se-thruster-suit-4=İtici giysi MK4 +se-timespace-anomaly-data=Uzay-zaman anomali verileri +se-used-lifesupport-canister=Kullanılmış yaşam destek kabı +se-uv-observation-data=UV gözlem verileri +se-visible-observation-data=Görünür gözlem verileri +se-vitamelange=Vitamelanj +se-vitamelange-nugget=Vitamelanj külçesi +se-vitamelange-roast=Vitamelanj kızartması +se-vitamelange-spice=Vitamelanj baharatı +se-vitamelange-extract=Vitamelanj özü +se-vulcanite=Vulkanit +se-vulcanite-crushed=Ezilmiş vulkanit +se-vulcanite-washed=Yıkanmış vulkanit +se-vulcanite-block=Vulkanit blok +se-vulcanite-ion-exchange-beads=Katyon iyon değişim damlaları +se-water-ice=Su buzu +se-xray-observation-data=X-ışını gözlem verileri +se-zero-point-energy-data=Sıfır nokta enerji verileri +se-rocket-science-pack=Roket bilim paketi +space-science-pack=Optimizasyon bilim paketi +speed-module-4=Hız modülü 4 +speed-module-5=Hız modülü 5 +speed-module-6=Hız modülü 6 +speed-module-7=Hız modülü 7 +speed-module-8=Hız modülü 8 +speed-module-9=Hız modülü 9 +se-aeroframe-pole=Aeroçerçeve direği +se-aeroframe-scaffold=Aeroçerçeve iskele +se-aeroframe-bulkhead=Aeroçerçeve bölme +se-lattice-pressure-vessel=Kafes basınçlı kap +se-heavy-girder=Ağır kiriş +se-heavy-bearing=Ağır rulman +se-heavy-composite=Ağır kompozit +se-heavy-assembly=Ağır montaj +se-bioscrubber=Biyotemizleyici +se-vitalic-epoxy=Hayati epoksi +se-vitalic-reagent=Hayati reaktif +se-vitalic-acid=Hayati asit +se-self-sealing-gel=Kendinden sızdırmaz jel +se-holmium-cable=Holmiyum kablo +se-holmium-solenoid=Holmiyum bobin +se-quantum-processor=Kuantum işlemci +se-dynamic-emitter=Dinamik yayıcı +se-naquium-processor=Nakiyum işlemci +se-naquium-cube=Nakiyum küp +se-naquium-tessaract=Nakiyum hiperküp +se-wide-beacon=Geniş alan vericisi +se-wide-beacon-2=Geniş alan vericisi 2 +se-lifesupport-equipment-1=Yaşam destek ekipmanı MK1 +se-lifesupport-equipment-2=Yaşam destek ekipmanı MK2 +se-lifesupport-equipment-3=Yaşam destek ekipmanı MK3 +se-lifesupport-equipment-4=Yaşam destek ekipmanı MK4 +se-naquium-heat-pipe=Nakiyum ısı borusu +se-naquium-heat-pipe-horizontal=Nakiyum ısı borusu yatay +se-naquium-heat-pipe-vertical=Nakiyum ısı borusu dikey +se-naquium-heat-pipe-long=Nakiyum ısı borusu uzun __1__ +se-deep-space-transport-belt=Derin uzay taşıma bandı +se-deep-space-transport-belt-black=Siyah derin uzay taşıma bandı +se-deep-space-transport-belt-white=Beyaz derin uzay taşıma bandı +se-deep-space-transport-belt-red=Kırmızı derin uzay taşıma bandı +se-deep-space-transport-belt-yellow=Sarı derin uzay taşıma bandı +se-deep-space-transport-belt-green=Yeşil derin uzay taşıma bandı +se-deep-space-transport-belt-cyan=Camgöbeği derin uzay taşıma bandı +se-deep-space-transport-belt-blue=Mavi derin uzay taşıma bandı +se-deep-space-transport-belt-magenta=Eflatun derin uzay taşıma bandı +se-deep-space-underground-belt=Derin uzay yer altı bandı +se-deep-space-underground-belt-black=Siyah derin uzay yer altı bandı +se-deep-space-underground-belt-white=Beyaz derin uzay yer altı bandı +se-deep-space-underground-belt-red=Kırmızı derin uzay yer altı bandı +se-deep-space-underground-belt-yellow=Sarı derin uzay yer altı bandı +se-deep-space-underground-belt-green=Yeşil derin uzay yer altı bandı +se-deep-space-underground-belt-cyan=Camgöbeği derin uzay yer altı bandı +se-deep-space-underground-belt-blue=Mavi derin uzay yer altı bandı +se-deep-space-underground-belt-magenta=Eflatun derin uzay yer altı bandı +se-deep-space-splitter=Derin uzay dağıtıcı +se-deep-space-splitter-black=Siyah derin uzay dağıtıcı +se-deep-space-splitter-white=Beyaz derin uzay dağıtıcı +se-deep-space-splitter-red=Kırmızı derin uzay dağıtıcı +se-deep-space-splitter-yellow=Sarı derin uzay dağıtıcı +se-deep-space-splitter-green=Yeşil derin uzay dağıtıcı +se-deep-space-splitter-cyan=Camgöbeği derin uzay dağıtıcı +se-deep-space-splitter-blue=Mavi derin uzay dağıtıcı +se-deep-space-splitter-magenta=Eflatun derin uzay dağıtıcı +se-blueprint-registration-point=Plan kayıt noktası +se-delivery-cannon-capsule=Teslimat topu kapsülü +se-delivery-cannon-capsule-packed=Teslimat topu kapsülü: __1__ +se-delivery-cannon-targeter=Teslimat topu hedefleyici +se-delivery-cannon-weapon-capsule=Silah teslim kapsülü +se-delivery-cannon-weapon-capsule-packed=Silah teslim kapsülü: __1__ +se-delivery-cannon-weapon-targeter=Silah teslim top hedefleyici +se-energy-transmitter-targeter=Enerji ışını hedefleyicisi +se-arcosphere=Arkosfer +se-arcosphere-a=λ Arkosfer lambda +se-arcosphere-b=ξ Arkosfer xi +se-arcosphere-c=ζ Arkosfer zeta +se-arcosphere-d=θ Arkosfer theta +se-arcosphere-e=ε Arkosfer epsilon +se-arcosphere-f=φ Arkosfer phi +se-arcosphere-g=γ Arkosfer gamma +se-arcosphere-h=ω Arkosfer omega +se-arcosphere-collector=Arkosfer toplayıcı +se-star-probe=Yıldız sondası +se-belt-probe=Asteroit kuşağı sondası +se-void-probe=Yıldızlararası boşluk sondası +se-star-probe-data=Yıldız sondası verileri +se-belt-probe-data=Asteroit kuşağı sondası verileri +se-void-probe-data=Yıldızlararası boşluk sondası verileri +se-nano-engineering-data=Nanomühendislik verileri +se-annihilation-data=Yok etme verileri +se-naquium-structural-data=Nakiyum yapısal verileri +se-hyperlattice-data=Hiperörgü verileri +se-naquium-energy-data=Nakiyum enerji verisi +se-space-fold-data=Uzay katlama verileri +se-space-warp-data=Uzay büküm verisi +se-space-dialation-data=Uzay genişleme verileri +se-space-injection-data=Uzay enjeksiyon verileri +se-interstellar-data=Yıldızlararası yolculuk verileri +se-teleportation-data=Işınlanma verileri +se-wormhole-data=Solucan deliği verileri +se-rhga-data=Gerçeklik hipergraf analiz verileri +se-deep-catalogue-1=Derin uzay kataloğu +se-deep-catalogue-2=Geniş derin uzay kataloğu +se-deep-catalogue-3=Kapsamlı derin uzay kataloğu +se-deep-catalogue-4=Genişletilmiş derin uzay kataloğu +se-space-probe-rocket=Uzay sondası roketi +se-space-probe-rocket-deployed=Uzay sondası roketi (Konuşlandırılmış) +se-railgun=Elektromanyetik tüfek +se-railgun-ammo=Elektromanyetik tüfek cephanesi + +[item-description] +satellite=Uydu, bir uydu roket silosuna (veya Uzay sondası roket silosuna) yerleştirilmelidir. Uydu, fırlatıldığı güneş sistemindeki cisimlerin veya uzak yıldızların kesin koordinatlarını keşfedebilir. [img=item/se-satellite-telemetry] Uydu telemetrisini sağlar. +se-satellite-telemetry=Roket Bilimi için kaydedilen uydu telemetrisi gerekli. Bir uydu roket silosundan (veya Uzay sonda roket silosundan) [img=item/satellite] Navigasyon Uydusu fırlatılarak elde edilir. +se-antimatter-canister=Taşıması güvenli bir kaptaki en yoğun enerji şekli. +se-astronomic-science-pack-1=Araştırma için uzay bilimi laboratuvarları tarafından kullanılır. +se-astronomic-science-pack-2=Araştırma için uzay bilimi laboratuvarları tarafından kullanılır. +se-astronomic-science-pack-3=Araştırma için uzay bilimi laboratuvarları tarafından kullanılır. +se-astronomic-science-pack-4=Araştırma için uzay bilimi laboratuvarları tarafından kullanılır. +se-beryllium-ore=Berilyum cevheri. +se-biological-science-pack-1=Araştırma için uzay bilimi laboratuvarları tarafından kullanılır. +se-biological-science-pack-2=Araştırma için uzay bilimi laboratuvarları tarafından kullanılır. +se-biological-science-pack-3=Araştırma için uzay bilimi laboratuvarları tarafından kullanılır. +se-biological-science-pack-4=Araştırma için uzay bilimi laboratuvarları tarafından kullanılır. +se-canister=Çok amaçlı bir muhafaza kabı. +se-bloater-ammo=Yerde bulaşıcı bir biyoçamur havuzu oluşturur. Etkilenen düşmanlar şişerek hareketi zorlaştırır ve zamanla hasar verir. Şişmiş halde ölürlerse patlarlar ve sıçrayan organların yakındaki düşmanlara hasar vererek domino etkisi yaratma potansiyeli vardır. Organ parçalarının toplam hasarı, maksimum canlarının %50'sidir. +se-pheromone-ammo=Düşmanı ısırgan veya tükürücünün kafasını karıştırarak sizin dost, türdaşlarının düşman olduğunu düşünmelerini sağlar. +se-cryogun=Düşmanları dondurabilecek bir buz duvarı yapın. +se-rocket-launch-pad-silo-dummy-ingredient-item=100 Kargo roketi bölümü ve 1 Uzay kapsülü bir Kargo roketi silosuna yerleştirilerek yapılmıştır. +se-cargo-rocket-cargo-pod=Bir kargo roket bölümü bileşeni. +se-cargo-rocket-fuel-tank=Bir kargo roket bölümü bileşeni. +se-cargo-rocket-section=Temel kargo roketi bileşeni. Kargo roketi silosuna yerleştirin. Roket başına 100 adet gereklidir. Roket inişlerinden kurtarılabilir (%20 temel kurtarılabilirlik). +se-cargo-rocket-section-packed=Nakliye için paketlenmiş kargo roketi bölümleri. Roket yapımında kullanılmak üzere paketinden çıkarılmalıdır. +se-deep-space-science-pack=Araştırma için uzay bilimi laboratuvarları tarafından kullanılır. +se-energy-science-pack-1=Araştırma için uzay bilimi laboratuvarları tarafından kullanılır. +se-energy-science-pack-2=Araştırma için uzay bilimi laboratuvarları tarafından kullanılır. +se-energy-science-pack-3=Araştırma için uzay bilimi laboratuvarları tarafından kullanılır. +se-energy-science-pack-4=Araştırma için uzay bilimi laboratuvarları tarafından kullanılır. +se-heat-shielding=Yüksek sıcaklık uygulamaları ve uzay yapıları için kullanılan bir kompozit panel. +se-holmium-ore=Holmiyum cevheri. +se-iridium-ore=İridyum cevheri. +se-material-science-pack-1=Araştırma için uzay bilimi laboratuvarları tarafından kullanılır. +se-material-science-pack-2=Araştırma için uzay bilimi laboratuvarları tarafından kullanılır. +se-material-science-pack-3=Araştırma için uzay bilimi laboratuvarları tarafından kullanılır. +se-material-science-pack-4=Araştırma için uzay bilimi laboratuvarları tarafından kullanılır. +se-medpack=Kendinizi iyileştirmek için kullanın. +se-medpack-2=Kendinizi iyileştirmek için kullanın. +se-medpack-3=Kendinizi iyileştirmek için kullanın. +se-medpack-4=Kendinizi iyileştirmek için kullanın. +se-meteor-defence=Tüm gezegeni meteorlardan koruyabilir, ancak tek seferde sadece 1 meteor vurabilir. Ateşlemek için meteor savunması cephanesiyle doldurulmalı ve tamamen şarj olmalıdır. %80 isabet ihtimali vardır. Ateşledikten sonra yeniden şarj olması gerekir. Şarj olurken 20MW tüketir. +se-meteor-defence-ammo=Meteorları yok eder. Bir meteor savunma üssüne yüklenmeli. +se-meteor-point-defence=Bir alanı meteorlardan korur. Yaylım başına 4 meteora kadar ateş edebilir. Ateşlemek için meteor savunması cephanesiyle doldurulmalı ve tamamen şarj olmalıdır. Menzil 64, %50 isabetlilik, atıştan sonra yeniden şarj olması zaman alır. Şarj modunu değiştirmek için döndürün. +se-naquium-ore=Nakiyum cevheri. Sadece derin uzayda bulunur, yıldızlararası boşluğun hazinesidir. +se-plague-bomb=Bir gezegendeki tüm yaşamı yok edebilir. Son derece dikkatli davranın. (Her şey zamanla ölürken UPS'i ciddi şekilde düşürebilir, büyük gezegenler veya çok oyunculu için önerilmez.) +se-rtg-equipment=Radyoizotop termoelektrik jeneratörü. Isıyı radyoaktif bozunmadan elektriğe dönüştüren bir taşınabilir jeneratör. Ek yakıt gerektirmeden onlarca yıl dayanır. +se-rtg-equipment-2=Radyoizotop termoelektrik jeneratörü. Isıyı radyoaktif bozunmadan elektriğe dönüştüren gelişmiş bir taşınabilir jeneratör. Ek yakıt gerektirmeden onlarca yıl dayanır. +se-space-capsule=Kargo Roketleri için gerekli bir kontrol kapsülü. Yolcuları en yakın gezegen yüzeyine geri götürmek için kullanılabilir. __CONTROL__toggle-driving__ kullanarak kapsüle girin. +se-space-platform-plating=[font=default-bold][color=#f5cb48]Yerleştirme kısıtı: Uzay[/color][/font]\nUzay platformu üzerinde hızlı hareket sağlayan gelişmiş kaplama. +se-space-platform-scaffold=[font=default-bold][color=#f5cb48]Yerleştirme kısıtı: Uzay[/color][/font]\nBelirli yapıları uzaya yerleştirmenizi sağlayan temel uzay platformu iskelesi. +se-space-rail=Trenin raylardan çıkıp her şeyi yok etmesini engellediği için uzayda kullanımı güvenli olan raylar. Uzay platformu gerekli değildir, tamamen kendi kendini desteklerler. Estetik nedenlerle karada da kullanılabilir. +se-spaceship-floor=Bu döşeme, dış kenarda uzay gemisi duvarları olan bir uzay gemisinin tüm parçalarının altında olmalıdır. Zemindeki herhangi bir boşluk muhafazayı kıracaktır, bu bölümler kopabilir. +se-superconductive-cable=Aktif soğutma gerektirmeyen süper iletken bir kompozit kablo. +se-tesla-gun=Seri atış yıldırım zinciri. +se-thruster-suit=Uzayda hayatta kalmak için gerekli olan bir uzay giysisi.\nİtici ve manyetik botları vardır. +se-thruster-suit-2=Uzayda hayatta kalmak için gerekli olan bir uzay giysisi.\nDaha güçlü iticilere, artırılmış envantere ve daha büyük ızgaraya sahiptir. +se-thruster-suit-3=Uzayda hayatta kalmak için gerekli olan bir uzay giysisi.\nDaha güçlü iticilere, artırılmış envantere ve daha büyük ızgaraya sahiptir. +se-thruster-suit-4=Uzayda hayatta kalmak için gerekli olan bir uzay giysisi.\nDaha güçlü iticilere, artırılmış envantere ve daha büyük ızgaraya sahiptir. +se-rocket-science-pack=Araştırma için uzay bilimi laboratuvarları tarafından kullanılır. Uzayda yapılmalıdır. +space-science-pack=Mevcut birçok öğenin yükseltilmesi için kullanılır. +se-wide-beacon=15 modül yuvası. Modüllerin etkilerini 14 karo içindeki dost varlıklara iletir. Aynı varlığı etkileyen birden fazla işaret, onu aşırı yükleyecek ve çalışmasını engelleyecektir. +se-wide-beacon-2=20 modül yuvası. Modüllerin etkilerini 14 karo içindeki dost varlıklara iletir. Aynı varlığı etkileyen birden fazla işaret, onu aşırı yükleyecek ve çalışmasını engelleyecektir. +se-lifesupport-equipment-1=Yaşam desteği verimliliğini +%100 artırır (katkılı). Uzay giysisi dışında bir giysiye takılırsa verimlilik bonusu yarıya iner ve uzayda çalışmaz. +se-lifesupport-equipment-2=Yaşam desteği verimliliğini +%200 artırır (katkılı). Uzay giysisi dışında bir giysiye takılırsa verimlilik bonusu yarıya iner ve uzayda çalışmaz. +se-lifesupport-equipment-3=Yaşam desteği verimliliğini +%400 artırır (katkılı). Uzay giysisi dışında bir giysiye takılırsa verimlilik bonusu yarıya iner ve uzayda çalışmaz. +se-lifesupport-equipment-4=Yaşam desteği verimliliğini +%800 artırır (katkılı). Uzay giysisi dışında bir giysiye takılırsa verimlilik bonusu yarıya iner ve uzayda çalışmaz. +se-arcosphere=Yıldızlararası boşlukta bulundu. +se-arcosphere-collector=Yıldızlararası boşluktan arkosferleri toplar. Bir asteroit alanında bulunan bir uzay sondası roket silosundan fırlatılmalıdır. Arkosferler daha fazla toplandığı zaman bulmak daha zorlaşır. +se-star-probe=Bir yıldızdan veri toplar ve [img=item/se-star-probe-data] Yıldız sondası verilerini döndürür. Bir yıldızın yakın yörüngesindeki bir uzay sondası roket silosundan fırlatılmalıdır. +se-belt-probe=Bir asteroit kuşağından veri toplar ve [img=item/se-belt-probe-data] Asteroit kuşağı sondası verilerini döndürür. Asteroit kuşağında bulunan bir uzay sondası roket silosundan fırlatılmalıdır. +se-void-probe=Boşluktan veri toplar ve [img=item/se-void-probe-data] Yıldızlararası boşluk araştırma verilerini döndürür. Bir asteroit alanında bulunan bir uzay sondası roket silosundan fırlatılmalıdır. +se-interstellar-data=Hareket eden bir uzay gemisinde bir Nexus'ta yapıldı. Daha büyük ve daha hızlı bir gemiyle yıldızlararası uzayda hareket etmek, verileri çok daha hızlı üretir. +se-deep-catalogue-1=Nakiyum ve nano mühendislik. +se-deep-catalogue-2=Hiperörgü yapıları, tekillikler ve yok olma. +se-deep-catalogue-3=Mikro uzay bozulması ve boyut dışı nano mühendislik. +se-deep-catalogue-4=Makro uzay bozulması ve boyut dışı seyehat. +automation-science-pack=Araştırma için temel bilim laboratuvarları tarafından kullanılır. +chemical-science-pack=Araştırma için temel bilim laboratuvarları tarafından kullanılır. +logistic-science-pack=Araştırma için temel bilim laboratuvarları tarafından kullanılır. +military-science-pack=Araştırma için temel bilim laboratuvarları tarafından kullanılır. +production-science-pack=Araştırma için temel bilim laboratuvarları tarafından kullanılır. +se-meteor-point-defence-container=Meteorları yok eder. Bir meteor noktası savunma yapısına yüklenmeli. +utility-science-pack=Araştırma için temel bilim laboratuvarları tarafından kullanılır. +beacon=8 modül yuvası vardır. Modüllerin etkilerini 3 karo içinde yakındaki dost varlıklara iletir. Aynı varlığı etkileyen birden fazla verici varsa, onu aşırı yükleyecek ve çalışmasını engelleyecektir. +se-delivery-cannon=Bir teslimat topu aracılığıyla içerilen kaynakların doğru bir şekilde teslim edilmesini sağlar. +se-delivery-cannon-weapon=Özel mühimmatların bir silah teslim topu aracılığıyla isabetli bir şekilde teslim edilmesini sağlar. + +[recipe-name] +core-fragment=Çekirdek parçası işleme (__1__) +rocket-fuel=Katı roket yakıtı +se-astrometric-analysis-multispectral-1=Multispektral astrometrik analiz 1 +se-astrometric-analysis-multispectral-2=Multispektral astrometrik analiz 2 +se-astrometric-analysis-multispectral-3=Multispektral astrometrik analiz 3 +se-astronomic-insight-1=Astronomik içgörü +se-astronomic-insight-2=Geniş astronomik içgörü +se-astronomic-insight-3=Kapsamlı astronomik içgörü +se-astronomic-insight-4=Genişletilmiş astronomik içgörü +se-biological-insight-1=Biyolojik içgörü +se-biological-insight-2=Geniş biyolojik içgörü +se-biological-insight-3=Kapsamlı biyolojik içgörü +se-biological-insight-4=Genişletilmiş biyolojik içgörü +se-bio-methane-to-crude-oil=Metanın ham petrole biyo işlenmesi +se-bio-sludge-crude-oil=Deneysel biyokütleden biyoçamur +se-bio-sludge-decontamination=Biyoçamur arındırma +se-bio-sludge-from-fish=Balıktan biyoçamur +se-bio-sludge-from-wood=Ağaçtan biyoçamur +se-bio-sludge-from-vitamelange=Vitamelanjdan biyoçamur +se-bio-sludge=Biyokütleden biyoçamur +se-broken-data-scrapping=Bozuk veri kartını hurdaya dönüştürme +se-cargo-rocket-section-pack=Kargo roket bölümlerini paketle +se-cargo-rocket-section-unpack=Kargo roket bölümleri paketini aç +se-condenser-turbine-reclaim-water=Su geri dönüşümüyle güç üretimi. +se-core-fragment-omni=Çekirdek parçası işleme +se-core-mining=Çekirdek madenciliği +se-empty-antimatter-canister=Kaptan antimadde akışı +se-empty-barrel-scrapping=Boş varili hurdaya dönüştürme +se-empty-barrel-reprocessing=Boş varil yeniden işleme +se-space-capsule-scrapping=Uzay kapsülünü hurdaya dönüştürme +se-cargo-pod-scrapping=Kargo kapsülünü hurdaya dönüştürme +se-energy-insight-1=Enerji içgörüsü +se-energy-insight-2=Geniş enerji içgörüsü +se-energy-insight-3=Kapsamlı enerji içgörüsü +se-energy-insight-4=Genişletilmiş enerji içgörüsü +se-formatting-1=Veri formatlama +se-formatting-2=Verimli veri formatlama +se-formatting-3=Gelişmiş veri formatlama +se-formatting-4=Derin veri formatlama +se-material-insight-1=Materyal içgörüsü +se-material-insight-2=Geniş materyal içgörüsü +se-material-insight-3=Kapsamlı materyal içgörüsü +se-material-insight-4=Genişletilmiş materyal içgörüsü +se-matter-fusion-copper=Madde füzyonu (Bakır) +se-matter-fusion-dirty=Madde füzyonu (Hurda) +se-matter-fusion-iron=Madde füzyonu (Demir) +se-matter-fusion-stone=Madde füzyonu (Taş) +se-matter-fusion-uranium=Madde füzyonu (Uranyum) +se-matter-fusion-to=Madde füzyonu (__1__) +se-orbital-data=Yörünge hesaplama verileri +se-plasma-canister-empty=Boş plazma kabı +se-pulverised-sand=Tozlaşmış kum +se-radiating-space-coolant-fast=Termoakışkanı -10°C'ye hızla soğut (Soğuk) +se-radiating-space-coolant-normal=Termoakışkanı -10°C'ye soğut (Soğuk) +se-radiating-space-coolant-slow=Termoakışkanı -10°C'ye verimli soğut (Soğuk) +se-mixed-methane-gas-separation=Karışık metan gazı ayırma +se-rocket-fuel-from-water-copper=Sudan roket yakıtı +se-scrap-decontamination=Hurda arındırma +se-scrap-recycling=Hurda geri dönüştürme +se-space-coolant-cold=Termoakışkanı -100°C'ye aşırı soğut (Soğuk) +se-space-coolant-supercooled=Termoakışkanı -273°C'ye aşırı soğut (Süpersoğuk) +se-space-coolant-supercooled-cryonite=Termoakışkanı -273°C'ye kriyo soğut (Süpersoğuk) +se-space-coolant-cold-cryonite=Termoakışkanı -100°C'ye kriyo soğut (Soğuk) +se-space-coolant-supercoole-cryonite=Termoakışkanı -273°C'ye kriyo soğut (Süpersoğuk) +se-simulation-a=Astronomik simülasyon +se-simulation-ab=Panspermi simülasyonu +se-simulation-abm=Zenoilerleme simülasyonu +se-simulation-am=Madde dağılımı simülasyonu +se-simulation-as=Astroparçacık simülasyonu +se-simulation-asb=Astrobiyonik simülasyon +se-simulation-asbm=Evrensel simülasyon +se-simulation-asm=Astrofizik simülasyonu +se-simulation-b=Biyolojik simülasyon +se-simulation-bm=Biyomekanik simülasyon +se-simulation-m=Materyal simülasyonu +se-simulation-s=Enerji simülasyonu +se-simulation-sb=Biyokimyasal simülasyon +se-simulation-sbm=Nanit simülasyonu +se-simulation-sm=Nanomalzeme simülasyonu +se-space-water-decontamination=Kozmik su arındırma +se-spaceship-rocket-engine-burn=Sıvı roket yakıtı yak +se-specimen-fish=Mikro yerçekimi balık yetiştirme +se-specimen-wood=Mikro yerçekimi ağaç yetiştirme +se-thermodynamics-coal=Kömüre basınçlı pişirme +se-used-lifesupport-canister-cleaning=Yaşam destek kabı temizleme +se-used-lifesupport-canister-cleaning-space=Yaşam destek kabı arındırma +space-science-pack=Optimizasyon bilim paketi +se-rocket-science-pack=Roket bilim paketi +se-big-turbine-internal=Yüksek sıcaklıktaki buharın basıncının düşürülmesi +se-arcosphere-fracture=Arkosfer polarizasyonu +se-arcosphere-fold-in=Arkosfer ters çevirme +se-arcosphere-fold-out=Arkosfer ters çevirme +se-arcosphere-folding=Arkosfer katlanması: __1__ __2__ ila __3__ __4__ +se-electric-boiling-void=Buharlaşma havalandırma +se-space-probe-rocket-deployed=Uzay sondası roketi (Konuşlandırılmış) +se-distortion-drive=Bozulma sürücüsü +se-generic-scrapping=__1__ öğesini hurdaya dönüştürme +se-generic-recycling=__1__ geri dönüştürme + +[recipe-description] +se-astronomic-insight-2=Daha karmaşık, ancak daha verimli. +se-astronomic-insight-3=Daha karmaşık, ancak daha verimli. +se-astronomic-insight-4=Daha karmaşık, ancak daha verimli. +se-biological-insight-2=Daha karmaşık, ancak daha verimli. +se-biological-insight-3=Daha karmaşık, ancak daha verimli. +se-biological-insight-4=Daha karmaşık, ancak daha verimli. +se-core-mining=Çıkarılan nihai parça gezegene bağlıdır. Nihai üretim süresi, gezegendeki veya aydaki çekirdek madencilerin sayısına bağlıdır. +se-energy-insight-2=Daha karmaşık, ancak daha verimli. +se-energy-insight-3=Daha karmaşık, ancak daha verimli. +se-energy-insight-4=Daha karmaşık, ancak daha verimli. +se-material-insight-2=Daha karmaşık, ancak daha verimli. +se-material-insight-3=Daha karmaşık, ancak daha verimli. +se-material-insight-4=Daha karmaşık, ancak daha verimli. +se-radiating-space-coolant-fast=Termoakışkanın tekrar tekrar soğutulması ve ısıtılması bozulmaya neden olur, daha hızlı soğutma artan kayıpla sonuçlanır. +se-radiating-space-coolant-normal=Termoakışkanın tekrar tekrar soğutulması ve ısıtılması bozulmaya neden olur. +se-radiating-space-coolant-slow=Termik akışkanın tekrar tekrar soğutulması ve ısıtılması bozulmaya neden olur, daha yavaş soğutma kayıpların azalmasına neden olur. +se-arcosphere-fracture=Arkosferler, bir [img=item/se-arcosphere-collector] Arkosfer toplayıcı ile toplanabilir. +se-distortion-drive=Nexus bozulma yeteneğini etkinleştirmek ve oyunu kazanmak için bu işlemin aktif olarak çalışıyor olması gerekir. Kritik hızdayken 6GW kullanır. +se-delivery-cannon-weapon-pack-se-iridium-piledriver=Küçük bir alanda muazzam fiziksel hasar, bir şok dalgasında ikincil patlayıcı hasar. + +[technology-name] +effectivity-module-4=Verimlilik modülü 4 +effectivity-module-5=Verimlilik modülü 5 +effectivity-module-6=Verimlilik modülü 6 +effectivity-module-7=Verimlilik modülü 7 +effectivity-module-8=Verimlilik modülü 8 +effectivity-module-9=Verimlilik modülü 9 +energy-shield-equipment=Enerji kalkanı +energy-shield-mk2-equipment=Enerji kalkanı MK2 +energy-shield-mk3-equipment=Enerji kalkanı MK3 +energy-shield-mk4-equipment=Enerji kalkanı MK4 +energy-shield-mk5-equipment=Enerji kalkanı MK5 +energy-shield-mk6-equipment=Enerji kalkanı MK6 +sand-processing=Kum işleme +glass-processing=Cam işleme +liquid-rocket-fuel=Sıvı roket yakıtı +productivity-module-4=Üretkenlik modülü 4 +productivity-module-5=Üretkenlik modülü 5 +productivity-module-6=Üretkenlik modülü 6 +productivity-module-7=Üretkenlik modülü 7 +productivity-module-8=Üretkenlik modülü 8 +productivity-module-9=Üretkenlik modülü 9 +rocket-silo=Uydu roket silosu +rocketry=Savaş roket bilimi +se-adaptive-armour=Uyarlanabilir zırh +se-antimatter-engine=Antimadde motoru +se-antimatter-reactor=Antimadde reaktörü +se-antimatter-production=Antimadde üretimi +se-astronomic-science-pack=Astronomik bilim paketi +se-biological-science-pack=Biyolojik bilim paketi +se-condenser-turbine=Kondansatör türbini +se-core-miner=Çekirdek madenciliği +se-biogun=Biyosilah +se-cryogun=Kriyosilah +se-deep-space-science-pack=Derin uzay bilim paketi +se-deep-catalogue=Derin uzay kataloğu +se-dimensional-anchor=Boyutsal sabitleyici +se-electric-boiler=Elektrikli kazan +se-energy-science-pack=Enerji bilim paketi +se-fluid-burner-generator=Sıvı izotermik jeneratör +se-fuel-refining=Yakıt arıtma +se-heat-shielding=Isı kalkanı +se-ion-engine=İyon motoru +se-long-range-star-mapping=Uzun menzilli yıldız haritalaması +se-material-science-pack=Materyal bilim paketi +se-medpack=Sağlık paketi +se-medpack-2=Sağlık paketi 2 +se-medpack-3=Sağlık paketi 3 +se-medpack-4=Sağlık paketi 4 +se-meteor-defence=Meteor savunma üssü +se-meteor-point-defence=Meteor nokta savunması +se-nanomaterial=Nanomalzeme +se-plague=Salgın +se-processing-beryllium=Berilyum işleme +se-processing-cryonite=Kriyonit işleme +se-processing-holmium=Holmiyum işleme +se-processing-iridium=İridyum işleme +se-processing-naquium=Nakiyum işleme +se-processing-vitamelange=Vitamelanj işleme +se-processing-vulcanite=Vulkanit işleme +se-pulveriser=Öğütücü +se-railgun=Elektromanyetik tüfek +se-rocket-cargo-safety=Roket kargo güvenliği +se-rocket-fuel-from-water=Sudan roket yakıtı +se-rocket-launch-pad=Kargo roketi silosu +se-rocket-landing-pad=Roket iniş pisti +se-rocket-reusability=Roket yeniden kullanılabilirliği +se-rocket-survivability=Roket sağ kalma kabiliyeti +se-rtg-equipment=Portatif RTJ +se-rtg-equipment-2=Portatif RTJ MK2 +se-space-assembling=Uzay montajı +se-space-accumulator=Holmiyum akü +se-space-accumulator-2=Nakiyum akü +se-space-astrometrics-laboratory=Astrometrik tesisi +se-space-biochemical-laboratory=Biyokimyasal tesis +se-space-catalogue-astronomic=Astronomik katalog +se-space-catalogue-biological=Biyolojik katalog +se-space-catalogue-universal=Evrensel katalog +se-space-catalogue-energy=Enerji kataloğu +se-space-catalogue-material=Materyal kataloğu +se-space-data-card=Veri kartı +se-space-decontamination-facility=Arındırma tesisi +se-space-electromagnetics-laboratory=Elektromanyetik tesisi +se-space-genetics-laboratory=Genetik tesisi +se-space-gravimetrics-laboratory=Gravimetrik tesisi +se-space-growth-facility=Büyütme Tesisi +se-space-hypercooling=Hipersoğutma +se-space-laser-laboratory=Lazer tesisi +se-lifesupport-facility=Yaşam destek tesisi +se-space-manufactory=Uzay fabrikası +se-space-material-fabricator=Materyal üreticisi +se-space-matter-fusion=Madde füzyonu +se-space-mechanical-laboratory=Mekanik tesis +se-space-particle-accelerator=Parçacık hızlandırıcı +se-space-particle-collider=Parçacık çarpıştırıcısı +se-space-plasma-generator=Plazma jeneratörü +se-space-platform-plating=Uzay platformu kaplaması +se-space-platform-scaffold=Uzay platformu iskelesi +se-space-radiation-laboratory=Radyasyon tesisi +se-space-radiating-efficiency=Termal radyasyon verimliliği +se-space-radiating-speed=Termal radyasyon hızı +se-space-radiator=Termal radyatör +se-space-radiator-2=Termal radyatör 2 +se-space-rail=Uzay Demiryolu +se-recycling-facility=Geri dönüşüm tesisi +se-space-science-lab=Uzay bilim laboratuvarı +se-space-simulation-ab=Panspermi simülasyonu +se-space-simulation-am=Astromateryal simülasyonu +se-space-simulation-as=Astroparçacık simülasyonu +se-space-simulation-bm=Biyomekanik simülasyon +se-space-simulation-sb=Biyokimyasal simülasyon +se-space-simulation-sm=Nanomalzeme simülasyonu +se-space-simulation-abm=Zenoilerleme simülasyonu +se-space-simulation-asb=Astrobiyonik simülasyon +se-space-simulation-asm=Astrofizik simülasyonu +se-space-simulation-sbm=Nanit simülasyonu +se-space-simulation-asbm=Evrensel simülasyon +se-space-solar-panel=Düz güneş paneli +se-space-spectrometry-facility=Spektrometri tesisi +se-space-supercomputer=Süper bilgisayar +se-space-telescope=Teleskop +se-space-telescope-gammaray=Gama ışını teleskopu +se-space-telescope-xray=X-ışını teleskopu +se-space-telescope-microwave=Mikrodalga teleskop +se-space-telescope-radio=Radyo teleskop +se-space-thermodynamics-laboratory=Termodinamik tesisi +se-spaceship=Uzay gemisi +se-spaceship-integrity=Uzay gemisi Yapısal bütünlük +se-factory-spaceship=Fabrika uzay gemisi +se-superconductive-cable=Süper iletken kablo +se-teleportation=Işınlanma +se-tesla-gun=Tesla silahı +se-thruster-suit=İtici giysi +space-science-pack=Optimizasyon bilim paketi +se-rocket-science-pack=Roket bilim paketi +speed-module-4=Hız modülü 4 +speed-module-5=Hız modülü 5 +speed-module-6=Hız modülü 6 +speed-module-7=Hız modülü 7 +speed-module-8=Hız modülü 8 +speed-module-9=Hız modülü 9 +se-aeroframe-pole=Aeroçerçeve direği +se-aeroframe-scaffold=Aeroçerçeve iskele +se-aeroframe-bulkhead=Aeroçerçeve bölme +se-lattice-pressure-vessel=Kafes-basınçlı kap +se-heavy-girder=Ağır kiriş +se-heavy-bearing=Ağır rulman +se-heavy-composite=Ağır kompozit +se-heavy-assembly=Ağır montaj +se-bioscrubber=Biyotemizleyici +se-vitalic-epoxy=Hayati epoksi +se-vitalic-reagent=Hayati reaktif +se-vitalic-acid=Hayati asit +se-self-sealing-gel=Kendinden sızdırmaz jel +se-holmium-cable=Holmiyum kablo +se-holmium-solenoid=Holmiyum bobin +se-quantum-processor=Kuantum işlemci +se-dynamic-emitter=Dinamik yayıcı +se-naquium-processor=Nakiyum işlemci +se-naquium-cube=Nakiyum küp +se-naquium-tessaract=Nakiyum hiperküp +se-wide-beacon=Geniş alan vericisi +se-wide-beacon-2=Geniş alan vericisi 2 +se-lifesupport-equipment=Yaşam destek ekipmanı +se-lifesupport-equipment-1=Yaşam destek ekipmanı MK1 +se-lifesupport-equipment-2=Yaşam destek ekipmanı MK2 +se-lifesupport-equipment-3=Yaşam destek ekipmanı MK3 +se-lifesupport-equipment-4=Yaşam destek ekipmanı MK4 +se-supercharger=Süperşarj istasyonu +se-addon-power-pole=Güç direği eklentisi +se-pylon=Pilon +se-pylon-substation=Pilon trafo merkezi +se-pylon-construction=İnşaat pilonu +se-pylon-construction-radar=Radar inşaat pilonu +se-shield-projector=Kalkan projektörü +se-deep-space-transport-belt=Derin uzay taşıma bantları +se-big-turbine=Yüksek sıcaklık türbin jeneratörü +se-big-heat-exchanger=Yüksek sıcaklık ısı eşanjörü +se-zone-discovery-random=Bölge keşfi +se-zone-discovery-targeted=Hedefli bölge keşfi +se-zone-discovery-deep=Derin uzay bölge keşfi +se-delivery-cannon=Teslimat topu +se-delivery-cannon-capsule-iridium=İridyum teslimat topu kapsülü +se-delivery-cannon-weapon=Teslimat topu silahı +se-spaceship-clamps=Uzay gemisi sabitlenme kelepçeleri +se-bio-upgrade-constitution=Biyo geliştirme: Bünye +se-bio-upgrade-strength=Biyo geliştirme: Güç +se-bio-upgrade-agility=Biyo geliştirme: Çeviklik +se-bio-upgrade-dexterity=Biyo geliştirme: Ustalık +se-bio-upgrade-intelligence=Biyo geliştirme: Zeka +se-energy-beaming=Enerji ışını +se-energy-beam-defence=Şemsiye: enerji ışını savunma tesisi +se-nexus=Nexus +se-spaceship-victory=Uzay gemisi zaferi +se-arcosphere=Arkosfer toplama +se-arcosphere-folding=Arkosfer katlama +se-space-probe=Uzay sondası roket silosu +se-linked-container=Arkolink deposu +k2-conversion=__1__ dönüştürme + +[technology-description] +energy-shield-equipment=Hızlı şarj olan ancak çok fazla enerji kullanan koruyucu bir balon. +energy-shield-mk2-equipment=Hızlı şarj olan ancak çok fazla enerji kullanan koruyucu bir balon. +energy-shield-mk3-equipment=Hızlı şarj olan ancak çok fazla enerji kullanan koruyucu bir balon. +energy-shield-mk4-equipment=Hızlı şarj olan ancak çok fazla enerji kullanan koruyucu bir balon. +energy-shield-mk5-equipment=Hızlı şarj olan ancak çok fazla enerji kullanan koruyucu bir balon. +energy-shield-mk6-equipment=Hızlı şarj olan ancak çok fazla enerji kullanan koruyucu bir balon. +sand-processing=Hammaddeyi ezip, öğütüp veya filtreleyip kuma dönüştür. +glass-processing=Kumu cama erit. +rocket-silo=Yeni gezegenleri keşfetmek için yörüngeye bir uydu fırlatmanızı sağlar. +se-adaptive-armour=Kendini onarmak için enerji kullanan zırh. Daha düşük güç gereksinimleri, ancak çok daha yavaş yenilenme ile enerji kalkanlarına benzer bir rol oynar. +se-antimatter-engine=İnanılmaz bir itiş üretmek için antimaddeyi yok eder. +se-antimatter-reactor=Aşırı yüksek ısı üretmek için madde ile antimaddeyi birleştirerek yok eder. +se-antimatter-production=Depolanmış enerjinin en yoğun biçimi olan antimaddeyi yapmak. +se-astronomic-science-pack=Uzay yolculuğu ve yıldızlararası lojistik ile ilgili teknolojilerin araştırılmasına izin verir. +se-biological-science-pack=Fiziksel yeteneklerinizi, biyolojik silahlarınızı ve sinirsel işlemenizi geliştirmeye ilişkin teknolojilerin araştırılmasına izin verir. +se-condenser-turbine=Buhar türbininin %75'i kadar enerji verimliliği vardır fakat kullanılan buharın %99'u su olarak geri verilir. Sıcaklık aralığı: 100 ila 999. +se-core-miner=Gezegenlerden ve aylardan sonsuz kaynak çıkarılmasına izin verir, ancak aynı cisimde birden fazla kullanıldığında azalan getirileri vardır. +se-biogun=Çeşitli biyolojik silahları kullanabilen bir tüfek. +se-cryogun=Düşmanları dondurabilecek bir buz duvarı yapın. +se-deep-space-science-pack=Çoğu ileri teknoloji için gerekli +se-deep-catalogue=Uzay bozulması, egzotik madde ve nano-mühendislik verileri, analiz ve bilgisayar simülasyonu için hazır olarak yapılandırılmıştır. En gelişmiş teknolojiler için gereklidir. +se-dimensional-anchor=Uzaysal anomali için yıldızın yerçekimi kuyusunu dengeleyici nokta olarak kullanır. +se-electric-boiler=Elektrik enerjisi kullanarak suyu buhara çevirir. %90 enerji verimliliği vardır. +se-energy-science-pack=Temel kuvvetler ve atom altı keşiflerle ilgili teknolojilerin araştırılmasına izin verir. +se-fluid-burner-generator=Elektrik üretmek için bir enerji değerine sahip sıvı yakıt (sıvı roket yakıtı gibi) gerektirir. Basit ve kompakttır ancak daha büyük buhar tabanlı sistemlerin enerji verimliliğinden yoksundur. Uzay için tasarlandı. Asıl sıvı tüketimi, sıvı yakıt değerine bağlıdır. +se-fuel-refining=Daha gelişmiş yakıtları rafine eder. +se-heat-shielding=Yüksek sıcaklık uygulamaları ve uzay yapıları için kullanılan bir kompozit panel. +se-ion-engine=İyon motorları, bir uzay gemisini hareket ettirmek için az miktarda iyon akışı ve büyük miktarda güç kullanır. İyon güçlendirici tanklar, diğer güçlendirici tanklardan daha küçüktür ve yalnızca halihazırda uzayda bulunan konumlardan fırlatılabilir. +se-long-range-star-mapping=Bazı uzak galaksiler, olağandışı yıldızların belirli dizilimleriyle tanımlanabilir. Sonuçlar [img=virtual-signal/informatron] InformaTron [__CONTROL__informatron__]'da günlüğe kaydedilir. +se-material-science-pack=Daha ileri mühendislik gereksinimleri için ileri materyallerle ilgili teknolojilerin araştırılmasına izin verir. +se-medpack=Kendinizi iyileştirmek için sağlık paketini kullanın. +se-medpack-2=Kendinizi iyileştirmek için sağlık paketini kullanın. +se-medpack-3=Kendinizi iyileştirmek için sağlık paketini kullanın. +se-medpack-4=Kendinizi iyileştirmek için sağlık paketini kullanın. +se-meteor-defence=Onlar seni yok etmeden önce sen onları yok et. Bir meteor savunma üssü tüm bir gezegeni koruyabilir, ancak bir seferde yalnızca bir meteor vurabilir. +se-meteor-point-defence=Onlar seni yok etmeden önce sen onları yok et. Meteor nokta savunması, küçük bir alanı aynı anda 4 meteordan koruyabilir. +se-nanomaterial=Üstün özelliklere sahip bir bileşim oluşturmak için nano ölçekte düzenlenen farklı malzemelerin karmaşık bir düzenlemesi. +se-plague=Gezegenlerdeki tüm yaşamı yok eden büyük salgın. AŞIRI dikkatli kullanın. +se-processing-beryllium=Berili son derece hafif, güçlü, korozyona ve radyasyona dayanıklı bir metal olan berilyuma dönüştürün. Ayrıca x-ışınlarıyla neredeyse hiç etkileşimi yoktur. +se-processing-cryonite=Dondurulmuş kriyonit kristallerinin, dondurma, soğutma ve yağlamada uygulamaları olan kriyonit çubuklara işleyin. Kriyonit başlıca donmuş gezegenlerde bulunur. +se-processing-holmium=Holminiti, herhangi bir elementin en yüksek manyetik geçirgenliğine sahip nadir toprak metali olan holmiyuma dönüştürün. +se-processing-iridium=İriditi, daha yüksek sıcaklıklarda korozyona en dayanıklı metal ve en yoğun element olan iridyuma dönüştürün. Ağır görev uygulamaları için önemlidir. +se-processing-naquium=Gizemli derin uzay nakitit kristalini, alışılmadık uzay-zaman etkileşimlerine sahip metal benzeri bir malzeme olan nakiyuma dönüştürün. +se-processing-vitamelange=İlkel vitamelanj kaya süngerini değerli bir besin özüne dönüştürün. +se-processing-vulcanite=Volkanik vulkanit kristalini, gelişmiş eritme, roket yakıtı ve diğer yüksek sıcaklıktaki kimyasal işlemlerde kullanılan rafine bir toza dönüştürün. Vulkanit, volkanik gezegenlerde ve çoğu çekirdek parçasında bulunur. +se-pulveriser=Sert mineralleri ve gezegen çekirdek parçalarını öğütür ve ezer. +se-railgun=Elektromanyetik olarak hızlandırılmış dartlar, buharlaşmadan önce bir plazma izi bırakacak kadar hızlı hareket ederler. Yüksek hasar, yavaş ateş hızı. +se-rocket-cargo-safety=Kargo bölmelerinin nakliye sırasında hasar görme olasılığını %10 azaltır (Çarpımsal). +se-rocket-fuel-from-water=Su elektrolizi yoluyla hidrojen-oksijen roket yakıtı üretir. +se-rocket-launch-pad=Uzaya veya diğer gezegenlere kargo göndermenizi sağlar. +se-rocket-landing-pad=Roket kargo bölmelerini adlandırılmış bir iniş alanına teslim etmenizi sağlar. Daha fazla araştırma ile roket parçalarını da kurtarabilir. +se-rocket-reusability=Başarılı bir iniş pistinden kurtarılabilecek parçaların yüzdesini %4 arttırır (Taban %20, maks %100). +se-rocket-survivability=Roketlerin nakliye sırasında hasar görme veya iniş pistinin ıskalanmasına neden olan bir navigasyon hatası olma olasılığını %10 (çarpımsal) azaltır. +se-rtg-equipment=Radyoizotop termoelektrik jeneratörü. Isıyı radyoaktif bozunmadan elektriğe dönüştüren portatif bir jeneratör. Ek yakıt gerektirmeden onlarca yıl dayanır. +se-rtg-equipment-2=Radyoizotop termoelektrik jeneratörü. Isıyı radyoaktif bozunmadan elektriğe dönüştüren gelişmiş bir taşınabilir jeneratör. Ek yakıt gerektirmeden onlarca yıl dayanır. +se-space-assembling=Uzayda çalışabilen modifiye edilmiş bir montaj makinesi. +se-space-accumulator=Daha sonra kullanılmak üzere fazla miktarda elektrik enerjisi depolayan yapılar. +se-space-accumulator-2=Daha sonra kullanılmak üzere inanılmaz miktarda fazla elektrik enerjisi depolayan yapılar. +se-space-astrometrics-laboratory=Farklı astronomik bilgi kaynaklarını birleştirir, karşılaştırır ve ölçer. +se-space-biochemical-laboratory=Biyokimyada uzmanlaşmış gelişmiş bir kimyasal laboratuvar. Daha temel kimya ve petrol işleme de yapabilir. +se-space-catalogue-astronomic=Analiz ve bilgisayar simülasyonu için hazır yapılandırılmış astronomik veriler. Daha fazla astronomik araştırma için gereklidir. +se-space-catalogue-biological=Analiz ve bilgisayar simülasyonu için hazır yapılandırılmış biyolojik veriler. Daha fazla biyolojik araştırma için gereklidir. +se-space-catalogue-universal=Analiz ve bilgisayar simülasyonu için birleştirilmiş veriler. Daha fazla derin uzay araştırması için gereklidir. +se-space-catalogue-energy=Analiz ve bilgisayar simülasyonu için hazır yapılandırılmış enerji verileri. Daha fazla enerji araştırması için gereklidir. +se-space-catalogue-material=Analiz ve bilgisayar simülasyonu için hazır yapılandırılmış materyal verileri. Daha fazla materyal araştırması için gereklidir. +se-space-data-card=Çok amaçlı bir veri depolama aygıtı. Daha gelişmiş veriye dayalı araştırmalar için gereklidir. +se-space-decontamination-facility=Steril ortamlarda kullanılmak üzere maddeleri temizler ve sıvıları düşük basınç koşullarında kullanıma hazırlar. +se-space-electromagnetics-laboratory=Yoğun manyetik alan ve aşırı yüksek voltaj uygulamaları için ekipman. +se-space-genetics-laboratory=Genetik dizileme, genetik modifikasyon ve türlerin genetik olarak yazdırılması için bir laboratuvar. +se-space-gravimetrics-laboratory=Yerçekimi bozukluklarını analiz ve simüle eder. +se-space-growth-facility=Biyolojik türleri başka bir yerde mümkün olmayan bir dizi kontrollü koşul altında yetiştirir, örneğin mikro yerçekimi. +se-space-hypercooling=Termoakışkan üzerinde ısı alışverişi yaparak birini daha sıcak, diğerini daha soğuk hale getirir. +se-space-laser-laboratory=Lazerlerle deneyler yapar. Göz koruması takılmalıdır. +se-lifesupport-facility=Daha tehlikeli ortamlarda yaşamı devam ettirmek için. +se-space-manufactory=Uzayda seri üretim için önemli bir teknoloji. +se-space-material-fabricator=Yeni materyaller sentezler. Parçacık çarpıştırıcısı ve 3 boyutlu yazıcı karışımı bir şey. +se-space-matter-fusion=Füzyon yoluyla malzeme üretimi. +se-space-mechanical-laboratory=Bir dizi mekanik işlem sağlar: Ezme, yırtma, kesme, titreşim vb. +se-space-particle-accelerator=Parçacıkları ışık hızına yakın hızda hızlandırır. +se-space-particle-collider=Yüksek hızlı parçacıkları çarpıştırır ve sonuçları analiz eder. +se-space-plasma-generator=Çeşitli plazmalar üretir. +se-space-platform-plating=Sağlam uzay platformu kaplaması. Uzay yürüyüşü için pürüzsüz ve hızlı. +se-space-platform-scaffold=Temel uzay platformu iskelesi. Üzerine inşa edilecek bir şey ama uzay yürüyüşü için harika değil. +se-space-radiation-laboratory=Radyoaktif malzeme ile oynamak için nispeten güvenli bir yer. Uranyum işleme için kullanılabilir. +se-space-radiating-efficiency=Aşırı ısınmış termik akışkanın daha yavaş ancak daha verimli soğutması. +se-space-radiating-speed=Aşırı ısınmış termik akışkanın daha hızlı ancak kaynak açısından verimsiz soğutulması. +se-space-radiator=Aşırı ısınmış termik sıvıdan fazla ısıyı yayar. +se-space-radiator-2=Aşırı ısınmış termik sıvıdan fazla ısıyı yayar. +se-space-rail=Trenin raylardan çıkıp her şeyi yok etmesini engellediği için uzayda kullanımı güvenli raylar. Estetik sebeplerle karada da kullanılabilir. +se-recycling-facility=Öğeleri hurdaya çevirmek ve hurdaları ham maddelere yeniden işlemek. +se-space-science-lab=Roket bilimi paketlerinin ve daha gelişmiş uzay biliminin işlenmesine izin verir. +se-space-simulation-ab=Birden fazla disiplini birleştirerek daha verimli simülasyona olanak sağlar. +se-space-simulation-am=Birden fazla disiplini birleştirerek daha verimli simülasyona olanak sağlar. +se-space-simulation-as=Birden fazla disiplini birleştirerek daha verimli simülasyona olanak sağlar. +se-space-simulation-bm=Birden fazla disiplini birleştirerek daha verimli simülasyona olanak sağlar. +se-space-simulation-sb=Birden fazla disiplini birleştirerek daha verimli simülasyona olanak sağlar. +se-space-simulation-sm=Birden fazla disiplini birleştirerek daha verimli simülasyona olanak sağlar. +se-space-simulation-abm=Birden fazla disiplini birleştirerek daha verimli simülasyona olanak sağlar. +se-space-simulation-asb=Birden fazla disiplini birleştirerek daha verimli simülasyona olanak sağlar. +se-space-simulation-asm=Birden fazla disiplini birleştirerek daha verimli simülasyona olanak sağlar. +se-space-simulation-sbm=Birden fazla disiplini birleştirerek daha verimli simülasyona olanak sağlar. +se-space-simulation-asbm=Birden fazla disiplini birleştirerek daha verimli simülasyona olanak sağlar. +se-space-solar-panel=Üzerinde yürüyebileceğiniz yüksek verimli bir güneş paneli. +se-space-spectrometry-facility=Spektrofotometri, gaz kromatografisi, kütle spektrometrisi ve diğer spektrografi. Bir duvara ateş edin, bükün, nereye çarptığını görün. +se-space-supercomputer=Daha gelişmiş veri işlemeye ve simülasyona izin verir. +se-space-telescope=Görünür spektrum etrafındaki çoklu dalga boylarına duyarlı gelişmiş bir teleskop. +se-space-telescope-gammaray=Gama ışınları kırılmaz. Bunun yerine bu güçlü teleskop aynalar ve özel dedektörler kullanır. +se-space-telescope-xray=Çoğu atmosfer X-ışınlarını engeller. Bu güçlü teleskop, atmosferin sorun olmadığı uzay için tasarlanmıştır. +se-space-telescope-microwave=Mikrodalgaları ve kozmik mikrodalga arka planını algılayan devasa bir teleskop. +se-space-telescope-radio=Uzak kaynaklardan gelen çok zayıf radyo dalgalarını algılayan devasa bir teleskop. +se-space-thermodynamics-laboratory=Aşırı sıcaklık içeren işlemleri üstlenir. Eritme gibi temel termal işlemler de gerçekleştirebilir. +se-spaceship=Zemini ve duvarları ile parça parça inşa ettiğiniz bir gemi, konsolu kullanarak onu farklı bir gezegene veya ötesine uçurun. +se-spaceship-integrity=Her seviye, uzay gemisi yapısal bütünlük gerilim sınırını 100 arttırır. +se-factory-spaceship=Her seviye, uzay gemisi yapısal bütünlük gerilim sınırını 500 arttırır. +se-superconductive-cable=Aktif soğutma gerektirmeyen süper iletken bir kompozit kablo. +se-teleportation=Diğer ışınlanma teknolojilerinin kilidini açar. Bu teknoloji kendi başına hiçbir şey yapmaz, ancak diğer teknolojilere açılan bir kapıdır. +se-tesla-gun=Seri atış yıldırım zinciri. Atış başına 30 düşmana kadar vurabilir. Hedefler arasında uzun atlamalar veya hedef yoksa zeminde kısa atlamalar yapar. +se-thruster-suit=İticileri ve manyetik botları olan bir uzay giysisi. Onsuz uzaya gitmeyin. +space-science-pack=Bu gelişmelerden yararlanan roket bilimi paketlerinin ve teknolojilerinin daha doğrudan geliştirilmesine izin verir. +se-rocket-science-pack=Egzotik kaynakların işlenmesi ve yer tabanlı yapıların uzay varyantlarının üretimi ile ilgili teknolojilerin araştırılmasına izin verir. +se-aeroframe-pole=Havacılık ve uzay araştırmaları için yaygın olarak bir destek direği olarak kullanılan güçlü bir hafif berilyum direği. +se-aeroframe-scaffold=Havacılık ve uzay araştırma gemileri için ana iç iskelet olarak yaygın olarak kullanılan güçlü bir hafif berilyum yapısal çerçeve. +se-aeroframe-bulkhead=Havacılık ve uzay araştırma gemilerinin dış kaplaması veya ikincil bölme duvarları olarak kullanılan güçlü, hafif, hava geçirmez berilyum duvarı. +se-lattice-pressure-vessel=Belirli sıvıların normal sınırlarının ötesinde sıkışmasını sağlayan bir iç kafese sahip, güçlü, hafif bir berilyum basınçlı kap. Eğer yırtılırsa, basınçlı sıvı güvenli bir şekilde havalandırılır. +se-heavy-girder=Ağırlıklı olarak ağır sanayi ve ağır askeri gemiler için kullanılan ağır bir iridyum yapısal kiriş. +se-heavy-bearing=Daha dayanıksız malzemeleri ezecek kuvvetler altında süresiz olarak işlev görebilen büyük bir ağır iridyum rulmanı. +se-heavy-composite=Isıya, korozyona, radyasyona ve mekanik kuvvete karşı pratik olarak bağışık olan, ancak inanılmaz derecede ağır olan kalın, neredeyse aşılmaz bir bölme. +se-heavy-assembly=Ağır sanayi için kullanılan dişlilerin ve yapılandırılabilir bileşenlerin ağır mekanik montajı. +se-bioscrubber=İstenmeyen malzemeleri parçalamak için biyolojik işlemlerden yararlanan bir malzeme işleme odası. +se-vitalic-epoxy=Yenileyici özelliklere sahip, inanılmaz derecede güçlü, biyo-kaynaklı bir epoksi. +se-vitalic-reagent=Çok çeşitli kimyasal reaksiyonlar için verimli, çok amaçlı bir reaktif. +se-vitalic-acid=Çeşitli asitlerden oluşan güçlü bir kokteyl. +se-self-sealing-gel=Basınç altında viskoz bir jel, ancak vakuma maruz kaldığında çelik gibi katıdır. Genellikle delikleri pasif olarak kapatmak için bölme duvarlarında dahili bir film olarak kullanılır. +se-holmium-cable=Hattaki hassas elektroniklere parazit yaratacak istenmeyen gürültüyü ortadan kaldırmak için özel olarak tasarlanmış kılıflı bir kablo. +se-holmium-solenoid=Son derece güçlü bir elektromıknatıs. +se-quantum-processor=Son derece karmaşık problemler üzerinde daha verimli çalışmak için süperpozisyon ve dolaşıklıktan yararlanır. +se-dynamic-emitter=Daha geniş bir aralık veya tarama modları veya malzeme penetrasyon özellikleri için bir dizi özelliği değiştirebilen, hızla ayarlanabilen bir ışık veya parçacık yayıcı sistem. +se-naquium-processor=Bir nakiyum hiperküp içindeki hesaplama, hesaplama yoğunluğu üzerindeki bazı olağan sınırlamaları atlar. +se-naquium-cube=Büyük bir hacmi küçük bir küp haline getirmek için nakiyum'un uzay-zamanla olağandışı etkileşiminden faydalanın. +se-naquium-tessaract=Küp benzeri bir şekle yerleşen, ancak döndürüldüğünde veya hızlandırıldığında bir dizi başka geometrik şekle dönüşen tuhaf bir nesne. +se-wide-beacon=Geniş alan vericisi, modüllerin etkilerini 14 karo içinde yakındaki dost varlıklara iletir. Yükseltildiğinde 15 veya 20 modül yuvası vardır. Aynı varlığı etkileyen birden fazla verici, onu aşırı yükleyecek ve çalışmasını engelleyecektir. +se-wide-beacon-2=Geniş alan vericisi 2, modüllerin etkilerini 14 karo içinde yakındaki dost varlıklara iletir. 20 modül yuvası vardır. Aynı varlığı etkileyen birden fazla verici, onu aşırı yükleyecek ve çalışmasını engelleyecektir. +se-lifesupport-equipment-1=Yaşam desteği verimliliğini +%100 artırır (katkılı). Uzay giysisi dışında bir giysiye takılırsa verimlilik bonusu yarıya iner ve uzayda çalışmaz. +se-lifesupport-equipment-2=Yaşam desteği verimliliğini +%200 artırır (katkılı). Uzay giysisi dışında bir giysiye takılırsa verimlilik bonusu yarıya iner ve uzayda çalışmaz. +se-lifesupport-equipment-3=Yaşam desteği verimliliğini +%400 artırır (katkılı). Uzay giysisi dışında bir giysiye takılırsa verimlilik bonusu yarıya iner ve uzayda çalışmaz. +se-lifesupport-equipment-4=Yaşam desteği verimliliğini +%800 artırır (katkılı). Uzay giysisi dışında bir giysiye takılırsa verimlilik bonusu yarıya iner ve uzayda çalışmaz. +se-supercharger=64 robotu aynı anda yüksek hızda şarj edebilir. Yapı maksimum güç çekişi 1GW'tır. +se-addon-power-pole=Binalara takılmak veya elektrik kapsama alanı üzerinde hassas kontrol için tasarlanmış küçük bir elektrik direği. +se-pylon=Elektrik enerjisini dağıtır. Bağlantı aralığı 64 karodur. +se-pylon-substation=Elektrik enerjisini dağıtır. 64 karo bağlantı aralığı, 64x64 güç kaynağı alanı vardır. +se-pylon-construction=Elektrik enerjisini dağıtır ve inşaat alanını genişletir. 64 karo bağlantı aralığı, 64x64 inşaat alanı vardır. +se-pylon-construction-radar=Elektrik enerjisini dağıtır, inşaat alanını genişletir ve radar görüşü sağlar. 64 karo bağlantı aralığı, 256x256 yapı ve görüş alanı. 4x4 lojistik alanı vardır. +se-shield-projector=Koruyucu bir kuvvet alanı oluşturur. Projektör şarj olurken veya kalkan hasar gördüğünde daha fazla enerji gerekir. "Combat Mechanics Overhaul" eklentisi kuruluysa, düşman mermilerini engelleyebilir. +se-deep-space-transport-belt=Uzaya yerleştirilebilen hızlı uzun mesafe taşıma bantları. Yolları uzaktan kolayca tanımlamak için farklı renkler kullanılabilir. +se-big-turbine=5000°C buhar alan, diğer ucunda 500°C buhar veren ve yanlardan su veren büyük 1 GW'lık bir jeneratör. %99 enerji verimliliği, %99 su tasarrufu. +se-big-heat-exchanger=Yüksek sıcaklıklar ve yüksek kapasite için tasarlanmış büyük bir ısı eşanjörü. +se-zone-discovery-random=Teleskopları kullanarak gezegenleri, ayları ve asteroit kuşaklarını arayın. +se-zone-discovery-targeted=Belirli kaynaklara sahip gezegenleri, ayları ve asteroit kuşaklarını arayın. [img=virtual-signal/informatron] InformaTron > Bölge keşfi'nde kaynak tercihini seçin. +se-zone-discovery-deep=Derin yıldızlararası uzayın ilginç alanlarını arayın. Asteroit alanları çok sayıda benzersiz ve değerli kaynağa sahip olabilir. +se-delivery-cannon=Kaynakları yörüngeye ve ötesine fırlatabilen bir raylı tüfek ve onları yakalamak için zırhlı bir sandık. +se-delivery-cannon-capsule-iridium=İridyum ağır bir metal olmasına rağmen, artan dayanıklılık, standart bir dağıtım kapsülüne kıyasla daha az malzemenin kullanılabileceği anlamına gelir. Toplam ağırlık aynıdır ancak üretimi daha basittir. +se-delivery-cannon-weapon=Atom bombası gibi özel mühimmatları diğer yüzeylere ateşleyebilen büyük bir raylı tüfek. +se-spaceship-clamps=Uzay gemilerinin kenetleme konumlarını eşleştirerek belirli bir konuma sabitlenebilmeleri için kenetleme kıskaçları yerleştirmenizi sağlar. Otomasyon için konsola "... kullanarak bağlan" ve "...'e bağlan" sinyalleri gerekir. +se-bio-upgrade-constitution=Maksimum sağlığı artırır. +se-bio-upgrade-strength=Taşıma kapasitesini artırır. +se-bio-upgrade-agility=Hareket hızını artırır. +se-bio-upgrade-dexterity=Elle üretim hızını artırır. +se-bio-upgrade-intelligence=Her bilim paketinden kazanılan öğrenmeyi artırır. +se-energy-beaming=Gökyüzünden bir silah olarak kullanılabilecek veya gerektiğinde gücü aktarmak için kullanılabilecek yoğun bir enerji ışını. +se-energy-beam-defence=Uzay tabanlı enerji ışınlarına ve taçküre kütle atımlarına karşı koruma sağlar. Manyetik parçacıkları koruyucu bir balonun içine yansıtarak çalışır, ardından düşman enerji ışınlarını dağıtmak için parçacıkları gerektiği gibi yeniden hizalar ve kümeler. +se-nexus=Yıldızlararası uzayda hareket eden bir uzay gemisinde veri üretmek için etkinleştirilebilen ve ek teknoloji ile bir uzay bozulma alanını etkinleştirebilen bir cihaz (Uzay Gemisi Zaferi). +se-spaceship-victory=Nexus'un yerel yıldız kümesinden kaçmak için bir bozulma sürücüsünü etkinleştirmesine izin verir. Oyunu kazanmak için bir Nexus'un Bozulma Sürücüsü modunda yıldızlararası uzayda __1__ hızında __2__ saniye boyunca hareket etmesini sağlayın. +se-arcosphere=Yıldızlararası boşlukta kaybolan arkosferlerin toplanmasını sağlar. +se-arcosphere-folding=Arkosferlerin boyut dışı kıskaçlar olarak kullanılmasına izin verir. +se-space-probe=Uzay sondalarını fırlatmak için uzay tabanlı bir roket silosu. Uyduları ucuza fırlatmak için de kullanılabilir. +se-linked-container=Boyut dışı uzay tarafından diğer depolara bağlanan bir depo. Deponun bağlantıları, onun ilk konulduğu yüzeye bağlıdır. +se-thruster-suit-2=Daha güçlü iticilere, artan envantere ve daha büyük ızgaraya sahip geliştirilmiş bir uzay giysisi. +se-thruster-suit-3=Daha güçlü iticilere, artan envantere ve daha büyük ızgaraya sahip geliştirilmiş bir uzay giysisi. +se-thruster-suit-4=Daha güçlü iticilere, artan envantere ve daha büyük ızgaraya sahip geliştirilmiş bir uzay giysisi. +effect-transmission=Verici, modüllerin etkilerini 3 karo içinde yakındaki dost varlıklara iletir. 8 modül yuvası vardır. Aynı varlığı etkileyen birden fazla verici, onu aşırı yükleyecek ve çalışmasını engelleyecektir. +se-unit-capsule=Dost __1__ birimleri dağıtan kapsüller. + +[modifier-description] +tesla-shooting-speed-bonus=Tesla atış hızı +tesla-damage-bonus=Tesla hasar bonusu +railgun-damage-bonus=Elektromanyetik tüfek hasar bonusu +railgun-shooting-speed-bonus=Elektromanyetik tüfek atış hızı +cryogun-shooting-speed-bonus=Kriyosilah atış hızı +cryogun-damage-bonus=Kriyosilah hasar bonusu +character-running-speed=Karakter hareket bonusu: +__1__ +character-crafting-speed=Karakter üretim hızı: +__1__ + +[virtual-signal-name] +signal-speed=Hız sinyali +se-signal-speed=Hız sinyali +signal-distance=Mesafe sinyali +se-signal-distance=Mesafe sinyali +se-star=Yıldız +se-planet=Gezegen +se-planet-orbit=Gezegen yörüngesi +se-moon=Ay +se-moon-orbit=Ay yörüngesi +se-asteroid-belt=Asteroit kuşağı +se-asteroid-field=Asteroit alanı +se-anomaly=Anomali +se-meteor=Meteor +se-spaceship=Uzay gemisi +se-cargo-rocket=Kargo roketi +se-remote-view=Uzaktan görünüm +se-death=Ölüm +se-character-corpse=Ceset +se-ruin=Harabe +se-accolade=Övgü +se-remove=Kaldır +se-radius=Yarıçap +se-hierarchy=Hiyerarşi +se-spaceship-launch=Uzay gemisi fırlat +se-anchor-using-left-clamp=Uzay gemisi sol kelepçeyi kullanarak bağlan +se-anchor-using-right-clamp=Uzay gemisi sağ kelepçeyi kullanarak bağlan +se-anchor-to-left-clamp=Hedef sol kelepçeye bağlan +se-anchor-to-right-clamp=Hedef sağ kelepçeye bağlan +se-beacon-overload=Verici aşırı yükleme +se-heat=Sıcaklık +se-pin=İşaret + +[controls] +se-remote-view=Navigasyon Uydusu +se-remote-view-pins=Navigasyon Uydu İşaretleri +se-remote-view-next=Navigasyon Geçmişi Sonraki +se-remote-view-previous=Navigasyon Geçmişi Önceki +se-universe-explorer=Evren Gezgini +se-respawn=Yeniden doğ +se-mode-toggle=Yapı çalışma modunu değiştir +se-pin-one=İşaret 1'e git +se-pin-two=İşaret 2'ye git +se-pin-three=İşaret 3'e git +se-pin-four=İşaret 4'e git +se-pin-five=İşaret 5'e git +se-pin-six=İşaret 6'ya git +se-pin-seven=İşaret 7'ye git +se-pin-eight=İşaret 8'e git +se-pin-nine=İşaret 9'a git +se-pin-zero=İşaret 0'a git +se-pin-set-one=İşaret 1'i ayarla +se-pin-set-two=İşaret 2'yi ayarla +se-pin-set-three=İşaret 3'ü ayarla +se-pin-set-four=İşaret 4'ü ayarla +se-pin-set-five=İşaret 5'i ayarla +se-pin-set-six=İşaret 6'yı ayarla +se-pin-set-seven=İşaret 7'yi ayarla +se-pin-set-eight=İşaret 8'i ayarla +se-pin-set-nine=İşaret 9'u ayarla +se-pin-set-zero=İşaret 0'ı ayarla + +[shortcut] +se-remote-view=Navigasyon Uydusu +se-remote-view-pins=Navigasyon Uydu İşaretleri +se-universe-explorer=Evren Gezgini +se-respawn=Yeniden doğ +se-pin-one=İşaret 1'e git +se-pin-two=İşaret 2'ye git +se-pin-three=İşaret 3'e git +se-pin-four=İşaret 4'e git +se-pin-five=İşaret 5'e git +se-pin-six=İşaret 6'ya git +se-pin-seven=İşaret 7'ye git +se-pin-eight=İşaret 8'e git +se-pin-nine=İşaret 9'a git +se-pin-zero=İşaret 0'a git +se-pin-set-one=İşaret 1'i ayarla +se-pin-set-two=İşaret 2'yi ayarla +se-pin-set-three=İşaret 3'ü ayarla +se-pin-set-four=İşaret 4'ü ayarla +se-pin-set-five=İşaret 5'i ayarla +se-pin-set-six=İşaret 6'yı ayarla +se-pin-set-seven=İşaret 7'yi ayarla +se-pin-set-eight=İşaret 8'i ayarla +se-pin-set-nine=İşaret 9'u ayarla +se-pin-set-zero=İşaret 0'ı ayarla + +[shortcut-name] +se-remote-view=Navigasyon Uydusu [__CONTROL__se-remote-view__] +se-remote-view-pins=Navigasyon Uydu İşaretleri [__CONTROL__se-remote-view-pins__] +se-universe-explorer=Evren Gezgini [__CONTROL__se-universe-explorer__] +se-respawn=Yeniden doğ [__CONTROL__se-respawn__] +se-pin-one=İşaret 1'e git [__CONTROL__se-pin-one__] +se-pin-two=İşaret 2'ye git [__CONTROL__se-pin-two__] +se-pin-three=İşaret 3'e git [__CONTROL__se-pin-three__] +se-pin-four=İşaret 4'e git [__CONTROL__se-pin-four__] +se-pin-five=İşaret 5'e git [__CONTROL__se-pin-five__] +se-pin-six=İşaret 6'ya git [__CONTROL__se-pin-six__] +se-pin-seven=İşaret 7'ye git [__CONTROL__se-pin-seven__] +se-pin-eight=İşaret 8'e git [__CONTROL__se-pin-eight__] +se-pin-nine=İşaret 9'a git [__CONTROL__se-pin-nine__] +se-pin-zero=İşaret 0'a git [__CONTROL__se-pin-zero__] +se-pin-set-one=İşaret 1'i ayarla [__CONTROL__se-pin-set-one__] +se-pin-set-two=İşaret 2'yi ayarla [__CONTROL__se-pin-set-two__] +se-pin-set-three=İşaret 3'ü ayarla [__CONTROL__se-pin-set-three__] +se-pin-set-four=İşaret 4'ü ayarla [__CONTROL__se-pin-set-four__] +se-pin-set-five=İşaret 5'i ayarla [__CONTROL__se-pin-set-five__] +se-pin-set-six=İşaret 6'yı ayarla [__CONTROL__se-pin-set-six__] +se-pin-set-seven=İşaret 7'yi ayarla [__CONTROL__se-pin-set-seven__] +se-pin-set-eight=İşaret 8'i ayarla [__CONTROL__se-pin-set-eight__] +se-pin-set-nine=İşaret 9'u ayarla [__CONTROL__se-pin-set-nine__] +se-pin-set-zero=İşaret 0'ı ayarla [__CONTROL__se-pin-set-zero__] + +[tile-name] +se-space-platform-plating=Uzay platformu kaplaması +se-space-platform-scaffold=Uzay platformu iskelesi +se-space-platform-underlay=Uzay +se-space-platform-underlay-l=Uzay +se-space-platform-underlay-r=Uzay +se-space=Boş uzay +se-regolith=Regolit +se-asteroid=Asteroit +se-spaceship-floor=Uzay gemisi zemini + +[mod-setting-name] +se-meteor-interval=Meteor maksimum aralığı +se-plague-max-runtime=Maksimum salgın süresi +se-planets=Gezegen sayısı +se-planet-size=Gezegen alanı (%1 ila %10000) +se-seed=Gezegen oluşturma seed'i +se-skip-experimental-warning=Deneysel uyarısını atla +se-print-meteor-info=Meteor uyarılarını konsola yazdır +se-print-satellite-discovered-nothing=Uydu hiçbir şey keşfetmediğinde uyar +se-space-pipe-capacity=Uzay borusu kapasitesi +se-electric-boiler=Elektrikli kazan +se-deep-space-belt-speed=Derin uzay bandı hızı +se-deep-space-belt-black=Siyah derin uzay bantları +se-deep-space-belt-white=Beyaz derin uzay bantları +se-deep-space-belt-red=Kırmızı derin uzay bantları +se-deep-space-belt-yellow=Sarı derin uzay bantları +se-deep-space-belt-green=Yeşil derin uzay bantları +se-deep-space-belt-cyan=Camgöbeği derin uzay bantları +se-deep-space-belt-blue=Mavi derin uzay bantları +se-deep-space-belt-magenta=Eflatun derin uzay bantları +se-space-science-pack=Uzay bilimi paketi geri dönüşü +se-never-show-lifesupport=Yaşam destek arayüzünü hiç gösterme +se-show-zone-preview=Bölge önizleme penceresini göster +se-pylon-charge-points=İnşaat pilonu şarj noktaları +se-cmes-max-frequency=Taçküre Kütle Atımı maksimum aralığı +se-spawn-small-resources=Bonus başlangıç maden yatakları +se-show-overhead-button-satellite-mode=Üstte Nav-Uydu Bağlantısı butonunu göster +se-show-overhead-button-interstellar-map=Üstte Yıldızlararası Harita butonunu göster +se-show-overhead-button-universe-explorer=Üstte Evren Gezgini butonunu göster +se-show-pin-help-tooltip=İşaret düğmelerinde yardım ipucunu göster +se-scan-search-budget=Tarayıcı arama bütçesi +se-scan-chart-budget=Tarama grafiği bütçesi +se-scan-alert-interval=Tarama uyarısı aralığı +se-supercharger-individual-charge-rate=Süperşarj tek bağlantı noktası şarj oranı (MW) + +[mod-setting-description] +se-meteor-interval=Meteor çarpmaları arasındaki dakika cinsinden taban aralığı. Her vuruştan sonra, bir sonraki vuruş, 1 ila bu değer arasında rastgele sayıdaki dakika kadar meydana gelecek şekilde ayarlanır. +se-plague-max-runtime=Dakika cinsinden biyolojik silahın maksimum çalışma süresi. Bir salgın bu kadar süre var olduktan sonra, tüm salgın parçacıkları, ağaçlar ve düşmanlar yok edilir. +se-planets=Oynanış ortasında değiştirmeyin. +se-planet-size=Oynanış ortasında değiştirmeyin. +se-seed=Oynanış ortasında değiştirmeyin. +se-skip-experimental-warning=Yeni bir oyuna başlama uyarısı görünmeyecek ve mesaj değişirse güncel uyarılar almayacaksınız. +se-print-meteor-info=__CONTROL__toggle-console__ tuşuna basarak ana uyarı söndükten sonra meteor uyarılarını konsolda görmenizi sağlar. +se-print-satellite-discovered-nothing=Bir uydu fırlatıldığında, neyin keşfedildiğini söyleyen bir uyarı alırsınız. Bu ayar, hiçbir şey keşfedilmezse uyarıyı devre dışı bırakabilir. +se-space-pipe-capacity=Uzay boruları için sıvı kapasitesi. +se-electric-boiler=Oyuna elektrikli kazan ekler. +se-deep-space-belt-speed=Derin uzay kemerlerinin en hızlı kemerler olması gerekir. Daha hızlı kemerler ekleyen başka eklentileriniz varsa, derin uzay kemeri hızını eşleştirmek veya aşmak için artırabilirsiniz. +se-deep-space-belt-black=Arayüz karmaşasını azaltmak için siyah taşıma bandı, ayırıcı ve yeraltı tarifleri devre dışı bırakılabilir. +se-deep-space-belt-white=Arayüz karmaşasını azaltmak için beyaz taşıma bandı, ayırıcı ve yeraltı tarifleri devre dışı bırakılabilir. +se-deep-space-belt-red=Arayüz karmaşasını azaltmak için kırmızı taşıma bandı, ayırıcı ve yeraltı tarifleri devre dışı bırakılabilir. +se-deep-space-belt-yellow=Arayüz karmaşasını azaltmak için sarı taşıma bandı, ayırıcı ve yeraltı tarifleri devre dışı bırakılabilir. +se-deep-space-belt-green=Arayüz karmaşasını azaltmak için yeşil taşıma bandı, ayırıcı ve yeraltı tarifleri devre dışı bırakılabilir. +se-deep-space-belt-cyan=Arayüz karmaşasını azaltmak için camgöbeği taşıma bandı, ayırıcı ve yeraltı tarifleri devre dışı bırakılabilir. +se-deep-space-belt-blue=Arayüz karmaşasını azaltmak için mavi taşıma bandı, ayırıcı ve yeraltı tarifleri devre dışı bırakılabilir. +se-deep-space-belt-magenta=Arayüz karmaşasını azaltmak için eflatun taşıma bandı, ayırıcı ve yeraltı tarifleri devre dışı bırakılabilir. +se-space-science-pack=Başka bir eklenti, uzay bilimini elde etmenin bir yolunu eklerse, o yöntem kullanılacaktır. Bunu yapmanın bir yolu yoksa, Space Exploration onu kaldırabilir veya bir Optimizasyon bilim paketi olarak kullanabilir. +se-never-show-lifesupport=Etkinleştirilirse, boğuluyor olsanız bile yaşam desteği arayüzü asla gösterilmez. +se-show-zone-preview=Evren Gezgini'nde bölge önizleme penceresini devre dışı bırakmak için işareti kaldırın. Factorio'nun hata ayıklama göstergelerinden bazıları etkinse, önizleme penceresi FPS'i azaltabilir. +se-pylon-charge-points=İnşaat pilonu şarj noktalarını kaldırmak için devre dışı bırakın. Bu, bot şarj davranışını kontrol etmeye yardımcı olur, ancak uzun mesafeli rotalar boyunca başka şarj olanakları eklemeniz gerekebilir. +se-cmes-max-frequency=Tekrarlanan Taçküre Kütle Atımları (TKA'lar) için maksimum aralık. Değer saat cinsindendir, 0 = devre dışı. İlk TKA, oyunun ilk dakikasına ayarlanmıştır ve genelde zararsızdır. İkincisi kabaca 48 saat ertelenir. Tekrarlar arasındaki gecikme, maksimum aralık ayarının %50 ila %100'ü arasındadır. Sıfır olmayan bir ayar yalnızca yeni olaylar için geçerlidir; bir tahmini varış ayarlandıktan sonra etkilenmeyecektir. Sıfır ayarı, tüm planlanmış TKA'ları siler, ancak değişikliğin yürürlüğe girmesi bir dakika kadar sürebilir. +se-spawn-small-resources=Başlangıç alanına bazı ek küçük maden kaynakları ekler. Maden yatakları, kaynaklar arasında koşarak geçilen süreyi azaltmak için bir arada olur. +se-show-overhead-button-satellite-mode=Navigasyon Uydu Bağlantısını açıp kapatmak için ekranın sol üst köşesinde küçük bir düğme gösterir. +se-show-overhead-button-interstellar-map=Yıldızlararası Haritayı açıp kapatmak için ekranın sol üst köşesinde küçük bir düğme gösterir. +se-show-overhead-button-universe-explorer=Evren Gezgini'ni açıp kapatmak için ekranın sol üst köşesinde küçük bir düğme gösterir. +se-show-pin-help-tooltip=İşaretleme düğmelerinde, bunların nasıl kullanılacağına ilişkin talimatlar veren genişletilmiş bir araç ipucu gösterin. +se-scan-search-budget=Uydu taraması: Harita durumu için kontrol edilebilecek parça sayısı. Yüksek değerler, önceden taranmış parçalara rağmen haritanın çıkarılmamış kenarına ulaşmasını sağlar. +se-scan-chart-budget=Uydu taraması: Grafik arabelleğine paralel olarak eklenebilecek yığın isteklerinin sayısı. Önceki parçalar bitmediyse yeni grafik istekleri yapılmayacaktır. +se-scan-alert-interval=Yüzey taraması güncelleme uyarıları arasındaki saniye cinsinden aralık. Yüzeyleri ortaya çıkarmak, oyun kaydetme dosyasının boyutunu artırır, bu nedenle bir tanesini açık bırakıp unutmamak en iyisidir. +se-supercharger-individual-charge-rate=Süper şarj cihazındaki her bir şarj portunun şarj oranını MW olarak ayarlar (maksimum şarj oranını etkilemez). Minimum (varsayılan) değer 90 MW'dır, bir vanilya robotunu tek seferde, 1000 MW'a kadar veya süper şarj cihazının maksimum şarj hızı olan 1 GW'a kadar şarj etmeye yeterlidir. + +[string-mod-setting] +se-space-science-pack-Remove=Tamamen kaldır +se-space-science-pack-Replace=Roket bilim paketi ile değiştir +se-space-science-pack-OptimisationUranium=Optimizasyon: Uranyum-kriyo tarifi +se-space-science-pack-OptimisationFish=Optimizasyon: Vita-vulka-balık tarifi + +[autoplace-control-names] +planet-size=[img=virtual-signal/se-planet] Gezegen büyüklüğü +se-water-ice=[img=item/se-water-ice] Su buzu (sadece uzay) +se-methane-ice=[img=item/se-methane-ice] Metan buzu (sadece uzay) +se-cryonite=[img=item/se-cryonite] Kriyonit (ana dünyalarda değil) +se-vulcanite=[img=item/se-vulcanite] Vulkanit (ana dünyalarda değil) +se-vitamelange=[img=item/se-vitamelange] Vitamelanj (ana dünyalarda değil) +se-beryllium-ore=[img=item/se-beryllium-ore] Berilyum Cevheri (ana dünyalarda değil) +se-holmium-ore=[img=item/se-holmium-ore] Holmiyum Cevheri (ana dünyalarda değil) +se-iridium-ore=[img=item/se-iridium-ore] İridyum Cevheri (ana dünyalarda değil) +se-naquium-ore=[img=item/se-naquium-ore] Nakiyum Cevheri (sadece uzay) + +[map-gen-preset-name] +space-exploration=Space Exploration Varsayılanları + +[map-gen-preset-description] +space-exploration=Space Exploration için varsayılan ayarlar + +[tooltip-category] +shot=Kullanım diff --git a/space-exploration_0.5.80/space-exploration/locale/zh-CN/strings.cfg b/space-exploration_0.5.80/space-exploration/locale/zh-CN/strings.cfg new file mode 100644 index 0000000..ab7317d --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/locale/zh-CN/strings.cfg @@ -0,0 +1,2375 @@ +spaceship-integrity100=+100 飞船结构强度 +spaceship-integrity300=+300 飞船结构强度 +spaceship-integrity500=+500 飞船结构强度 +arcosphere-discovery=从星际空间收集曲虹球 +core-mining-productivity-5=+5%星核采矿产能 +se-zone-discovery-random=研究完毕后随机发现新的区域。 +se-zone-discovery-targeted=研究完毕后发现指定资源的区域。 +se-zone-discovery-deep=研究完毕后发现新的深空区域。 +unlock-spaceship-victory=解锁飞船胜利条件。乘坐3000+完整度的飞船,枢纽运行在扭曲驱动模式下,以250的速度在星际空间飞行60秒。 + +[mod-name] +space-exploration=太空探索 + +[mod-description] +space-exploration=建造运载火箭以向太空发射物资,自己驾驶火箭进入太空并开始太空行走。建立一个太空平台,以开发困难的数据驱动的太空科学。建造宇宙飞船,将它从行星表面飞到其他行星,月球,小行星带等等。强烈推荐与 AAI Industry 一起游玩。必须启用 Space Exploration Postprocess(不在依赖包列表里,原因说来话长)。在当前实验阶段不建议使用除依赖 Mod 以外的其他 Mod。 + +[space-exploration] +space-exploration=太空探索 +menu_space-exploration=太空探索 +title_space-exploration=太空探索 +off=关 +on=开 +close=关闭 +show=显示 +close-instruction-only-confirm=关闭(__CONTROL__confirm-gui__) +show-own-location=显示自己的位置 +wdc_auto_off=手动瞄准 +wdc_auto_on=自动瞄准 +name=名称 +rename-something=重命名 __1__ +trigger-none=无(手动) +trigger-fuel-full=燃料注满时发射 +trigger-cargo-full=货舱装满时发射 +trigger-fuel-full-signal=燃料注满且有绿色信号时发射 +trigger-cargo-full-signal=货舱装满且有绿色信号时发射 +trigger-cargo-full-or-signal=收到绿色信号或货舱满载后发射 +destination-type-zone=近似位置 +destination-type-landing-pad=货仓着陆点 +button-launch=发射 +button-launch-disabled=发射(已禁用) +destination-crash-warning=警告:选择一个货仓着陆点以降低坠毁风险 +recipe-to=__1__ 至 __2__ +recipe-from=__1__ 从 __2__ +simple-a-b=__1____2__ +simple-a-b-space=__1__ __2__ +simple-a-b-comma=__1__,__2__ +simple-a-b-break=__1__\n__2__ +simple-a-b-divide=__1__ / __2__ +simple-bold=[font=default-bold]__1__[/font] +star-map=星图 +interstellar-map=星际地图 +interstellar-space=星际空间 +planetary-system=__1__ 星系 +solar-system=__1__ 星系 +remote-view=导航卫星视角 [__CONTROL__se-remote-view__] +remote-view-window-title=[img=virtual-signal/se-remote-view] 导航卫星 [__CONTROL__se-remote-view__] +remote-view-currently-viewing=当前视角: +remote-view-instruction=发射更多的卫星来发现更多的恒星、行星、卫星以及其他区域。 +remote-view-spaceships=__1__ 飞船 +remote-view-spaceships-anchored=__1__ 停泊的飞船 +remote-view-clamps=__1__ 飞船夹钳 +remote-view-show-hide-resources=显示/隐藏资源 +remote-view-show-hide-stats=显示/隐藏状态 +remote-view-show-hide-anchor-info=显示/隐藏停泊信息 +remote-view-show-hide-danger-zones=显示/隐藏危险区域 +open-pins-remote-view=所有大头针 [__CONTROL__se-remote-view-pins__] +exit-pins-remote-view=退出所有大头针 [__CONTROL__se-remote-view-pins__] +remote-view-history-delete=删除表面历史。 +remote-view-history-previous=后退表面历史 [__CONTROL__se-remote-view-previous__]。\n__1__ +remote-view-history-next=前进表面历史 [__CONTROL__se-remote-view-next__]。\n__1__ +remote-view-history-item=__1__ +remote-view-history-item_named=__1__ → __2__ +exit-remote-view=退出导航卫星视角 [__CONTROL__se-remote-view__] +remote-view-pin-make=钉住当前视角 +remote-view-pins-list=所有大头针 +remote-view-add-pin=在当前位置添加大头针。 +remote-view-pin-details=大头针属性 +remote-view-pin-button-tooltip=__1__ → __2__ +remote-view-pin-button-tooltip-hotkey-one=__1__ → __2__ [__CONTROL__se-pin-one__] +remote-view-pin-button-tooltip-hotkey-two=__1__ → __2__ [__CONTROL__se-pin-two__] +remote-view-pin-button-tooltip-hotkey-three=__1__ → __2__ [__CONTROL__se-pin-three__] +remote-view-pin-button-tooltip-hotkey-four=__1__ → __2__ [__CONTROL__se-pin-four__] +remote-view-pin-button-tooltip-hotkey-five=__1__ → __2__ [__CONTROL__se-pin-five__] +remote-view-pin-button-tooltip-hotkey-six=__1__ → __2__ [__CONTROL__se-pin-six__] +remote-view-pin-button-tooltip-hotkey-seven=__1__ → __2__ [__CONTROL__se-pin-seven__] +remote-view-pin-button-tooltip-hotkey-eight=__1__ → __2__ [__CONTROL__se-pin-eight__] +remote-view-pin-button-tooltip-hotkey-nine=__1__ → __2__ [__CONTROL__se-pin-nine__] +remote-view-pin-button-tooltip-hotkey-zero=__1__ → __2__ [__CONTROL__se-pin-zero__] +remote-view-pin-button-tooltip-help-text=\n\n[font=default-bold]- 操作 -[/font]\n左键点击:切换至大头针的位置\n右键点击:更改图标\nControl-右键点击:删除 +remote-view-pin-button-tooltip-help-text-update-position=\nShift-右键点击:更新大头针位置 +remote-view-pin-name=名字 +remote-view-pin-icon=图标 +remote-view-pin-zoom=缩放 +remote-view-pin-hotkey=热键 +remote-view-pin-hotkey-none=无 +remote-view-pin-hotkey-one=__CONTROL__se-pin-one__ - __1__ +remote-view-pin-hotkey-two=__CONTROL__se-pin-two__ - __1__ +remote-view-pin-hotkey-three=__CONTROL__se-pin-three__ - __1__ +remote-view-pin-hotkey-four=__CONTROL__se-pin-four__ - __1__ +remote-view-pin-hotkey-five=__CONTROL__se-pin-five__ - __1__ +remote-view-pin-hotkey-six=__CONTROL__se-pin-six__ - __1__ +remote-view-pin-hotkey-seven=__CONTROL__se-pin-seven__ - __1__ +remote-view-pin-hotkey-eight=__CONTROL__se-pin-eight__ - __1__ +remote-view-pin-hotkey-nine=__CONTROL__se-pin-nine__ - __1__ +remote-view-pin-hotkey-zero=__CONTROL__se-pin-zero__ - __1__ +remote-view-pin-location=位置 +remote-view-pin-location-position={x=__1__, y=__2__} +remote-view-pin-location-position-button=更新大头针位置 +remote-view-pin-location-position-button-tooltip=立即将大头针的位置设置为当前查看的位置。 +remote-view-pin-viewer-title=所有大头针 +remote-view-pin-viewer-misc-row=杂项 +remote-view-pin-viewer-spaceship-row=飞船 +open-zonelist=打开宇宙浏览器 +zonelist-window-title=[img=virtual-signal/se-planet-orbit] 宇宙浏览器 [__CONTROL__se-universe-explorer__] +priority-icon=[img=virtual-signal/se-accolade] +priority-tooltip=优先级(对重要区域和无关区域进行排序) +trim-zone-button=[img=item/cliff-explosives] 修剪表面 +trim-zone-button-tooltip=删除玩家实体、特殊实体和地图原点定义的边界框外的块。 +trim-zone-button-no-surface-tooltip=指定表面不存在。 +trim-zone-results=已从__2__删除了__1__块。修剪至区域 X [__3__ 到 __4__] Y [__5__ 到 __6__] +delete-zone-button=[img=virtual-signal/se-remove] 删除表面 +delete-zone-button-tooltip=无法删除指定表面。 +delete-zone-button-no-surface-tooltip=指定表面不存在。 +scan-zone-button=[img=item/satellite] 扫描表面 +scan-zone-button-tooltip=警告:扫描过程可能会降低游戏速度。 +scan-zone-button-disabled-tooltip=您必须发射一颗卫星才可以扫描表面。 +stop-scan-zone-button=[img=item/satellite] 停止所有扫描 +stop-scan-zone-button-tooltip=停止所有表面上正在进行的扫描 +generic-requires-satellite=你需要先发射一颗导航卫星。 +remote-view-requires-satellite=您需要发射一颗导航卫星才可以使用导航卫星视角。 +satellite-discovered-platform=[color=cyan]卫星发现了一些轨道平台。[/color] 打开 [img=virtual-signal/se-planet-orbit] 宇宙浏览器 [__CONTROL__se-universe-explorer__],选择__1__,然后点击观察表面。 上面可能会有一些有用的东西。 +satellite-view-unlocked=您解锁了 [color=cyan][img=virtual-signal/se-remote-view] 导航卫星上行链路 [/color]。 这可以让您通过卫星来查看这个世界,以及你发现的其他星球。 按[color=green][__CONTROL__se-remote-view__][/color] 或者使用快捷栏上的按钮(屏幕右下角)来使用。 +source-discovered-zone=[color=cyan]__1__ 发现了一个新的 __2__:[/color][img=__3__] [color=white]__4__[/color] 发现的地点可通过 [img=virtual-signal/se-planet-orbit] 宇宙浏览器 [__CONTROL__se-universe-explorer__] 来查看。 +discovered-zone=[color=cyan]发现了一个新的 __1__:[img=__2__] [/color][color=white]__3__[/color]。 +discovered-anomaly-additional=于 [img=virtual-signal/se-anomaly] 异常中侦测到未知物体位。 您的 [img=virtual-signal/informatron] 探索日志 [__CONTROL__informatron__] 已更新。 +satellite-discovered-nothing=发射了一颗新卫星,但没有发现任何新东西。 在其他恒星附近可能会有所发现。 +tech-discovered-nothing=望远镜在恒星附近没有发现任何新东西。 在深空中可能会有所发现。 +tech-deep-discovered-nothing=望远镜在深空中没有发现任何新东西。 +galaxy_ship_authenticated=[img=virtual-signal/se-spaceship] 废弃的宇宙飞船:[color=cyan]“生物标记已验证。气闸访问代码 2236067964。正在发送紧急备份日志。”[/color] 您的 [img=virtual-signal/informatron] 探索日志 [__CONTROL__informatron__] 已更新。 +space-capsule=太空舱 +invalid_launch_location=无效的发射地点 +capsule_invalid_launch_location=无效的发射地点 +capsule_status_invalid_launch_location=状态:无效的发射地点 +capsule_status_ready=状态:发射就绪 +capsule_not_enough_thrust=没有足够的推力来逃出 __1__ __2__ 的重力井。需装入运载火箭发射井中。 +capsule_destination=目的地:__1__ +capsule_info=若放置在太空中,这个太空舱可以把你带到最近的行星或卫星。 +player-died=__1__ 阵亡 +launch-suit-warning=为了避免窒息,请考虑穿上您的推进太空服,并在背包中带好维生罐。 +suffocating-warning=您正在窒息。请立即进入太空舱或穿上推进太空服并带上维生罐。 +rocket_survivability_fail=一艘运载火箭在发射期间受损,并已偏离预定轨道。 建议提升火箭生存能力科技和运载火箭安全性科技。 __1__ +respawn-if-stranded=您可以使用快捷栏上的重生按钮[__CONTROL__se-respawn__]脱离卡死。 +respawn-options-title=复活位置 +respawn-button-homeworld=[img=virtual-signal/se-planet] 母星 +respawn-button-landing-pad=[img=item/se-rocket-landing-pad] 随机着陆点 +respawn-button-spaceship=[img=virtual-signal/se-spaceship] 随机飞船 +respawn-confirm-title=您确定要重生吗? +respawn-confirm-yes=[img=virtual-signal/se-death] 重生 +respawn-confirm-no=取消 +search-list=搜索 +clear-search=取消搜索 +filter-list=筛选 +clear-filter=取消筛选 +attrition-type-radiation=辐射 +attrition-type-wind=风 +attrition-type-spacial-distortion=空间扭曲 +zonelist-view-surface=观察表面 +zonelist-heading-hierarchy=层级 +zonelist-heading-type=区域类型 +zonelist-heading-name=名称 +zonelist-heading-radius=半径 +zonelist-heading-primary-resource=主要资源 +zonelist-heading-attrition=机器人干扰系数 +zonelist-heading-threat=威胁 +zonelist-heading-solar=太阳能系数 +zonelist-heading-flags=标志 +zonelist-heading-priority=优先级 +zonelist_filter_star=包括恒星 +zonelist_filter_planet=包括行星 +zonelist_filter_planet-orbit=包括行星轨道 +zonelist_filter_moon=包括卫星 +zonelist_filter_moon-orbit=包括卫星轨道 +zonelist_filter_asteroid-belt=包括小行星带 +zonelist_filter_asteroid-field=包括小行星区 +zonelist_filter_anomaly=包括异常 +zonelist_filter_spaceship=包括飞船 +zonelist-resource-bar-tooltip=__1__ __2__\n频率:__3__\n尺寸:__4__\n丰度:__5__ +zonelist-resource-bar-tooltip-extended=__1__ __2__\n频率:__3__\n尺寸:__4__\n丰度:__5__\n__6__ +zonelist-resources-disclaimer=资源概率为估计值。[?] +zonelist-resources-disclaimer-tooltip=所有的资源值都是基于元素密度的估计值。\n它们与游戏的地图生成相关。\n实际的资源区域可能会因为水面、表面半径或特定的地砖要求而无法生成。 +resource-terrain-required-se-vulcanite=需要火山地区 +resource-terrain-required-se-cryonite=需要冻结地区 +resource-terrain-required-se-vitamelange=需要草原地区 +zone-tooltip-type=星区类型: +zone-tooltip-parent=所属天体: +zone-tooltip-threat=威胁: +zone-tooltip-daynight=昼/夜交替: +zone-tooltip-bot-attrition=机器人干扰系数 __1__: +zone-tooltip-radius=半径: +zone-tooltip-solar=太阳能系数: +zone-tooltip-flags=标记: +zone-tooltip-closest=最近天体: +zone-tooltip-destination=目的地: +zone-tooltip-delta-v=从 __1__ 转移所需 ∆v +construction-denied=无法放置在此处。 +construction-denied-vehicle-in-space=无法将地面载具放置在太空中。 +construction-denied-se-surface=无效位置,必须放置在“太空探索”表面上。 +construction-denied-linked-container-on-transient-surface=不能在移动的宇宙飞船上放置已连接表面的容器。 +construction-denied-no-water=没有水 +construction-denied-spaceship-only=必须放置在飞船地板上。 +construction-denied-solid-only=必须放置在行星或卫星上。 +currently-viewing=当前视角:__1__ +fail-board-no-character=无法登上目标飞船,您必须连接您的角色才可以进行这个动作。 +fail-board-remote-character=无法登上目标飞船,您的角色并未在源飞船上。 +fail-board-target-anchored=无法登陆一艘停泊中的飞船,请尝试停泊在相同的位置。 +starmap=星图 +starmap-button=[img=virtual-signal/se-star] 星图 +back=返回 +back-to=返回到 +spaceship=飞船 +plant=行星 +moon=卫星 +star=恒星 +orbit=轨道 +something_orbit=__1__ 轨道 +asteroid-belt=小行星带 +asteroid-field=小行星区 +anomaly=异常 +spaceship-cannot-set-destination-to-self=无法将目的地设为自身。 +spaceship-streamline=流线型:__1__ +spaceship-streamline-tooltip=__1__ 当前流线型\n__2__ 最大流线型\n将飞船的前端造的不那么方正可增加流线型 +spaceship-launch-energy=发射所需能量:__1__ +spaceship-launch-energy-invalid=发射所需能量:需要有效的完整性检查。 +spaceship-launch-energy-tooltip=推进器燃料箱存有 __1__ 热值燃料\n需要 __2__ 热值的燃料来发射 +spaceship-speed=航速:__1__ +spaceship-structural-stress-hull=船体应力:__1__ +spaceship-structural-stress-hull-invalid=船体应力:不可用(需要密封飞船) +spaceship-structural-stress-hull-tooltip=__1__ 当前船体应力\n__2__ 所有地板均占据的船体应力\n__3__ 最大船体应力 +spaceship-structural-stress-container=货柜应力:__1__ +spaceship-structural-stress-container-invalid=货柜应力:不可用(需要密封飞船) +spaceship-structural-stress-container-tooltip=__1__ 当前货柜应力\n__2__ 最大货柜应力 +spaceship-travel-time-unknown=航行时间:未知。测试最大速度以进行估算。 +spaceship-travel-time-max=航行时间:__1__ 秒,最大航速下。 +spaceship-travel-time-current=航行时间:__1__ 秒,当前航速下。 +spaceship-closest-location-unknown=最近位置:未知 __1__ +spaceship-closest-location=最近位置:__1__ +spaceship-location-spatial-distortion=空间扭曲:__1__ +spaceship-location-stellar-x=X 象限:__1__ +spaceship-location-stellar-y=Y 象限:__1__ +spaceship-location-star-gravity-well=恒星重力井:__1__ +spaceship-location-planet-gravity-well=行星重力井:__1__ +spaceship-asteroid-density=小行星密度:__1__ +spaceship-asteroid-density-default=稀疏 +spaceship-asteroid-density-belt=稠密 +spaceship-asteroid-density-field=危险 +spaceship-travel-status=航行状态:__1__ +spaceship-integrity-status-valid=结构完整性状态:有效:__1__ +spaceship-integrity-status-invalid=结构完整性状态:无效:__1__ +spaceship-button-launch=发射 +spaceship-button-launch-tooltip=发射就绪 +spaceship-button-launching=发射中 +spaceship-button-launching-tooltip=请耐心等待 +spaceship-button-launch-disabled=发射(已禁用) +spaceship-button-launch-disabled-fuel-tooltip=推进器燃料箱需要燃料 +spaceship-button-launch-disabled-integrity-tooltip=需要有效地结构完整性检查 +spaceship-button-anchor=停泊 +spaceship-button-confirm-anchor=确认停泊 +spaceship-button-anchor-to=停泊到 __1__ +spaceship-button-anchor-on=停泊在 __1__ +spaceship-button-stop=停止 +spaceship-button-start=启动 +spaceship-button-board=登上 __1__ +spaceship-button-scouting-back=返回 +spaceship-button-scouting-back-tooltip=取消停泊计划 +spaceship-name-the=__1__ 号 +spaceship-button-start-integrity-check=开始结构完整性检查 +spaceship-target-speed=目标航速: +spaceship-target-speed-unlimited=目标航速:无限制 +spaceship-target-speed-normal=目标航速:__1__ (通常) +spaceship-target-speed-asteroid-belt=目标航速:__1__(小行星带) +spaceship-target-speed-asteroid-field=目标航速:__1__(小行星区) +spaceship-target-speed-manual-override=目标航速:__1__(手动超驰) +spaceship-target-speed-circuit=目标航速:__1__(信号控制) +spaceship-target-speed-normal-tooltip=通常航行状态的目标航速\n小行星密度:__1__% +spaceship-target-speed-asteroid-belt-tooltip=位于小行星带的目标航速\n小行星密度:__1__% +spaceship-target-speed-asteroid-field-tooltip=位于小行星区的目标航速\n小行星密度:__1__% +spaceship-heading-destination=目的地 +list-destinations-alphabetically=按字母顺序列出目的地 +spaceship-travel-message-new-course-plotted=新航线已建立。 +spaceship-travel-message-exiting-planet-gravity=离开行星重力井 +spaceship-travel-message-navigating-planet-gravity=行星重力井内航行中 +spaceship-travel-message-exiting-star-gravity=离开恒星重力井 +spaceship-travel-message-navigating-star-gravity=恒星重力井内航行中 +spaceship-travel-message-spatial-distortions=空间扭曲中航行中 +spaceship-travel-message-navigating-interstellar=星际空间内航行中 +spaceship-travel-message-at-destination=到达目的地。 +spaceship-check-message-passed=通过:飞船结构完整性有效。 +spaceship-check-message-failed-containment=失败:控制台附近密封性失效。 请确保所有飞船舱壁被无缝放置在飞船地板上。 +spaceship-check-message-failed-console-floor=控制台必须被放置在飞船地板上。 +spaceship-check-message-failed-empty=没有找到与完全密封的控制台相连的地块。 +spaceship-check-message-failed-unknown-bounds=错误:未知的飞船边界。 +spaceship-check-message-failed-stress=失败:飞船结构完整性应力超过技术极限。 +spaceship-check-message-checking-console-floor=检查控制台地面连接状态。 +spaceship-check-message-checking-containment=检查密封性。 +spaceship-check-message-checking-connectivity=检查控制台连接状态。 +spaceship-check-message-no-console=无控制台。 +spaceship-check-message-did-not-complete=检查未完成。 +spaceship-check-message-unstable=不稳定:某些区段将会在机动时解体。 +spaceship-check-message-valid-but-disconnecting=有效但不稳定:某些区段可能解体。 +spaceship-warning-sections-disconnecting=区段正在解体。停止航行来维修。 +informatron-open-help=在信息稽器人中打开 +page_space_exploration_text_1=欢迎来到《太空探索(Space Exploration)》。 这个Mod已经有不少内容了,但它仍处于[font=default-bold]实验性[/font]状态,并大力开发中。 可能会有Bug。\n\n[font=heading-2]实验性状态?[/font]\n\n太空探索尚处于频繁变化中,我投入了全部时间和精力到核心机制开发中,而牺牲了Mod兼容性。 [color=red]除了推荐和必须的Mod之外不建议启用其他Mod。[/color]\n\n如果一个Mod导致问题,如破坏游戏/保存状态,崩溃,无效的技术树,或核心游戏体验,它将很快被标记为不兼容,以保护新玩家。 这意味着如果你使用了很多Mod,很有可能有一个Mod会因为你还没有发现的问题而被标记为不兼容。 当然,你可以自由编辑你的info.json文件来尝试不兼容的Mod,但是你这样做的风险将由你自己承担:如果你的游戏变成无法继续的状态,因为尚处于实验状态下,我无力帮助你。\n\n大多数其他的大改Mod都会被标记为不兼容,因为科技树会被严重破坏,不过长期愿景是让Mod能一起工作,让双方开发者满意。 Krastorio 2 就是一个例子,这项兼容工作已经实地进行中。\n\n在太空探索维基上有一些关于Mod兼容性的额外信息。 如果你想协助改善Mod兼容性,请在Discord上联系我,但也请注意,除非到了在太空探索开发的后期,这将不会是一个高度优先级的问题。\n\n[font=heading-2]推荐Mod[/font] \n\n • AAI Containers & Warehouses 给你一些符合原版风格的大号箱子。\n\n • Module Inserter 允许你从卫星视角将模块放入机器中。\n\n • Equipment Grid Logistic Module 一个用于车辆的装备插槽,可以像蜘蛛机甲一样,向物流网络请求物品并处理垃圾。\n\n • Grappling Gun 允许你跳过建筑物,穿过湖泊,并从战场逃脱。在太空中,如果你掉出太空平台,也可用来把自己拉回去。可以让你登上飞船(尤其在飞船移动的时候很有用)。\n\n • Burner Leech 这个仅在 AAI 热能阶段使用。\n\n • Text Plates 允许你在地面上放置文字,对于标记星球名称、车站名、飞船停靠区等都很有用。\n\n • Even Distribution 有助于在游戏早期将物品手动插入多个建筑中。\n\n • Combat Mechanics Overhaul 启用“Walls Block Spitters”选项有助于在离开星球时进行防御。修墙可比修炮塔便宜多了\n\n • Bullet Trails 这样你就可以看到你的子弹射向哪里,或者炮塔在攻击什么。(而且看起来更酷。)\n\n\n[font=heading-2]推荐设置[/font]\n\n你>必须<启用所有的外星生物群落地形,否则游戏会在后期崩溃。\n\n由于游戏时间比正常情况下要长,建议调低敌人进化系数。\n\n你不应为你的起始星球设置高资源,除非你玩的是资源密集型配方,比如高难度配方或马拉松模式。如果资源设置得太高,会降低扩展到其他星球的需求。\n\n\n[font=heading-2]帮助网址[/font]\n\n在这里查看太空探索Wiki:https://spaceexploration.miraheze.org\n\n来我们的Discord以获取帮助和开发近况:https://discord.gg/ymjUVMv\n\n开发此Mod已经消耗了超过2000小时。如果你觉得好玩,不妨来Patreon支持我一下:https://www.patreon.com/earendel\n\n对中文翻译有建议可联系Ph.X QQ:492834666 +menu_meteor_defence=[img=virtual-signal/se-meteor] 陨石防御 +title_meteor_defence=陨石防御 +page_meteor_defence_text_1=大多数星区都会遭到随机间隔的陨石打击。 您可以在Mod设置中更改打击之间的最大间隔。\n\n陨石的数量也是随机的,50%为1颗,25%为2颗,12.5%为3颗,6.25%为4颗,等等…\n\n陨石防御系统可以拦截陨石。它们会按顺序开火,因此如果所有陨石都被摧毁,剩余的防御系统将不会开火。\n陨石防御系统需要弹药和充能并在充能时消耗更多的能源。\n陨石防御系统的耗电量并不低,因此明智的做法是在风险与成本之间找到一种平衡。 +menu_coremining=[img=item/se-core-miner] 星核采矿 +title_coremining=星核采矿 +page_coremining_text_1=星核采矿只能在行星和卫星上进行。 每个行星和卫星都可以根据其不同的核心成分产出不同类型的星核碎片。\nNauvis产出相对平衡的各类资源,但是其他地方通常主要产出一种资源类型。\n星核钻机非常耗电,但是您也可以从采集到的的煤炭、石油和铀矿中“回收”一部分能源。\n\n星核钻机消耗大量电能,并且您放置在星球上的每个星核钻机都会降低同一星球上所有星核钻机的效率。\n即使您放置多个星核钻机,它们的能源效率也比普通矿机低得多,但它们永远不会耗尽资源。\n在早期的游戏中,如果您有多余的电力,使用1个星核钻机可能会很有用。\n如果您是从一个很小的星球开始的,那么太阳能和星核钻机可能是获取足够资源以离开星球的唯一途径。\n\n在游戏的后期,星核钻机可从采矿产能科技中获得巨大加成。\n正确的做法是将少量星核钻机放置在更多的星球上,而不是将大量星核钻机放置在几个星球上。 +menu_beacons=[img=item/se-wide-beacon-2] 插件效果分享塔 +title_beacons=插件效果分享塔 +page_beacons_text_1=[font=heading-2]插件分享塔过载[img=virtual-signal/se-beacon-overload][/font]\n\n插件分享塔过载是对异星工厂插件分享塔机制的大改。 制作设施仅能手一个插件效果分享塔的影响,若超过一个则会过载并停止生产。\n\n这一改动允许单个分享塔使用更多的插件并鼓励在设施和分享塔中安装更强力的插件以获取最大加成。 这一改动也允许并鼓励更多样的工厂设计。\n\n单个基础插件效果分享塔比原版的强大得多,但不能将它们的效果叠加在一台机器上,所以相比原版,你可能获得的最大提升会有所降低。 更强大的分享塔能够获得远超原版的最大提升。\n\n从广域插件效果分享塔开始,玩家可以体验到大量的插件节约,以及自由创建围绕大型建筑或多个流体或材料输入的复杂设计。\n\n受多个分享塔影响的机器将被标记为插件分享塔过载图标并暂停所有生产。 在这个过程中,它们仍然会保留最低的能耗。 +menu_launching_satellites=[img=item/satellite] 发射卫星 +title_launching_satellites=发射卫星 +page_launching_satellites_text_1=您已经发射了[color=cyan]__1__[/color]颗卫星。\n\n[font=heading-2][img=virtual-signal/se-remote-view]导航卫星上行链路[__CONTROL__se-remote-view__][/font]\n\n当您从“火箭发射井”将导航卫星发射到太空时,您可以按[__CONTROL__se-remote-view__]键查看[img=virtual-signal/se-remote-view]导航卫星视角。 在卫星模式下,您的镜头与角色分离,因此您可以快速浏览地图,甚至发现新区域。\n有一些您无法在卫星模式下执行的操作,例如直接放置或挖掘实体。\n不过,您可以做很多事情,例如使用蓝图、红图、放置幻影实体、设置电缆连接、更改组装机配方、设置组合器等。\n\n[font=heading-2][img=virtual-signal/se-planet-orbit]宇宙浏览器[__CONTROL__se-universe-explorer__][/font]\n\n导航卫星网络还可以让您查看其他表面,例如其他行星、卫星、小行星带、小行星区和轨道。 按[__CONTROL__se-universe-explorer__]弹出已知星区列表。\n如果您发射了卫星,则可以单击“扫描表面”以查看目标区域中的内容。在尝试飞向某个星球之前,最好先侦察一下这个星球。\n\n发射卫星还有助于在其所在的星系中进行星区探测(更多详细信息,请参见星区探测章节)。\n\n[font=heading-2][img=item/se-satellite-telemetry]卫星遥测数据[/font]\n\n发射卫星回获得卫星遥测数据, 这是用于制造[img=item/se-rocket-science-pack]火箭科研包的一个重要成分。\n\n[font=heading-2][img=item/se-space-probe-rocket]太空探测器[/font]\n\n[img=item/se-space-probe-rocket-silo]太空探测火箭发射井不同于卫星火箭发射井是用于太空的。 不需要建造火箭而是使用预制的[img=item/se-space-probe-rocket]太空探测火箭。 太空探测火箭成本远低于普通的卫星火箭,而且可以在制造中心预组装而非将资源运送至火箭发射井。 太空探测火箭发射井科研更廉价的发射卫星,而且还能在太空的特点位置发射多种特制探测火箭。 +menu_pinned_locations=[img=se-pin-list] 钉住的位置 +title_pinned_locations=钉住的位置 +page_pinned_locations_text_1=在解锁[img=virtual-signal/se-remote-view]导航卫星视角后,您可以使用“钉住的位置”,这是个在您探索过的所有表面中快速切换到工厂的不同区域的工具。\n\n可以通过导航卫星窗口的加号按钮来钉住位置。 你可以在添加或编辑大头针时为钉住的位置设置快捷键。 这使您可以通过按下键盘快捷键来跳转到重要的位置,而不需要通过宇宙浏览器。\n\n[font=heading-2]临时大头针[/font]\n不需要通过弹出创建菜单来设置的大头针。这也可以通过“设置大头针”热键来创建。 这将创建一个没有名字和图标的大头针,但可以通过关联的“前往大头针”热键来跳转至该位置。\n\n[font=heading-2]所有大头针[__CONTROL__se-remote-view-pins__][/font]\n只有位于你当前查看表面的大头针会显示在快捷栏中。不过使用热键可以跳转至任意表面的大头针,无论是否在快捷栏中显示。 如果你需要查看所有大头针的位置,按[__CONTROL__se-remote-view-pins__]来显示所有大头针的列表。 这个视图中的大头针是根据所在表面排列的。 如果一个表面只有一个大头针,它的行将被折叠到其父星的行。\n\n[font=heading-2]AAI Programmable Vehicles[/font]\n用于设置和交换到固定位置的默认热键与用于创建和选择 AAI Programmable Vehicles 的控制组的默认热键相冲突。 如果你同时使用这两个Mods,你将需要调整你的热键,以获得预期的行为。 +menu_zone_discovery=[img=virtual-signal/se-planet-orbit] 星区探测 +title_zone_discovery=星区探测 +page_zone_discovery_text_1=宇宙中有很多可以被探索的恒星、行星、卫星、小行星带和小行星区。\n\n[font=heading-2]导航卫星[/font]\n您可以发射一颗导航卫星来探测随机的行星、卫星和小行星带,只能探测到卫星发射地所在的恒星系统中的天体。\n如果本恒星系中无法发现更多天体,卫星将会发现新的恒星,但它无法发现环绕其他恒星的天体或深空中的任何天体。\n\n[font=heading-2]星区探测技术[/font]\n您可以使用太空望远镜寻找并探测新的星区。 它们将储存在“星区探测”科技中。 基础的星区探测科技可以解锁随机的恒星、行星、卫星或小行星带。\n\n[font=heading-2]星区定向探测技术[/font]\n星区定向探测技术和基础星区探测科技是相同的,但是如果您选择了资源偏好(下方按钮),则它会寻找该资源含量更高的区域,因此您更有可能发现具有指定资源的区域。\n请记住,在发现恒星之前无法发现行星,而在发现行星之前无法发现卫星。 不要期望每次都能找到想要的东西。\n\n[font=heading-2]深空星区探测技术[/font]\n深空星区探测技术只寻找深空中的特殊区域,这是发现小行星区的唯一途径。 小行星区是唯一可以找到寂介素矿石的地方。\n深空探测不能指定目标资源。\n\n[font=heading-2]星区探索资源偏好:[/font] +menu_cargo_rockets=[img=virtual-signal/se-cargo-rocket] 运载火箭 +title_cargo_rockets=运载火箭 +page_cargo_rockets_text_1=运载火箭是从运载火箭发射井发射的,也被称为发射场。\n\n您已经发射了[color=cyan]__1__[/color]枚货物火箭。\n\n基于科技水平的运载火箭失事几率:最大失事几率降低了[color=cyan]__2__%[/color]。\n\n基于你的火箭生存能力技术:失事几率降低[color=cyan]__3__%[/color]。\n\n基于你的可重复使用火箭技术:[color=cyan]__4__[/color]+/-至多10(合计最多100)个部件可回收。\n\n[font=heading-2]入门[/font]\n\n在你发射货运火箭之前,你需要在安装太空探索以后,用火箭发射井(标准的异星工厂“原版”发射井)发射一颗卫星。\n\n一旦你建造了一个运载火箭发射井,你就需要建造火箭并为其提供燃料:\n\n • 装载100个运载火箭区段。其中20个可在目的地从火箭上回收,如果研究得当能回收更多。\n • 装载1个太空舱。这个总能在目的地回收,并可以让你从轨道上返回星球。\n • 大量的液体火箭燃料,输送到靠近角落的8个连接点之一。所需的燃料量取决于你发射的星球半径和到目的地的距离。如果使用“任何该名字的货舱着陆点”的目的地选项,它将为能抵达任何一个有效的目的地而装载足够的燃料。\n\n你可以从前面的门进入货物火箭仓(按__CONTROL__toggle-driving__)。 这将让你乘坐火箭。 你还应该准备好推进太空服和维生罐,这样你在发射到太空时才不会死。\n\n你的第一枚火箭不会有任何地方可以降落,所以它将在货物释放时分解。 有时火箭会错过一个着陆台并坠毁。 即使在坠毁的情况下,货物也会被部署在货舱中,所以你永远不会失去所有的货物。\n\n你应该带一个火箭着陆台和一些轨道平台框架,这样你就可以搭建下一枚火箭的着陆台。\n\n发射前在你的基地也建造一个火箭着陆台,可以让你很方便地直接回到那里,而不是在你回来的时候降落到随机位置。\n\n[font=heading-2]目的地[/font]\n\n一旦你放置了一个着陆台,记得更新火箭发射井的目的地,使其以着陆台为目标,而不是在轨道上的一个随机位置。 你可以亲自或通过卫星视角(快捷键‘n’)来完成。 然而,火箭不会发射到依然包含物品的着陆台,所以一定要清空它。\n\n[font=heading-2]基础自动化[/font]\n\n火箭发射井会输出火箭中已经有多少个零件的信号。 你可以给机械臂设置一个条件[运载火箭区段<100],以确保它不会用额外的区段填充火箭货舱。\n\n如果你在发射井上设置了发射触发器,它就能自动发射,但火箭不会自动发射到非空的着陆台(否则货物可能装不下)。\n\n[font=heading-3]输入信号[/font]\n\n[img=virtual-signal/signal-green] 绿色信号:如果发射井被配置为有绿色信号时发射,则可启动一次发射。\n\n[font=heading-3]输出信号[/font]\n\n[img=virtual-signal/signal-E] E信号:空闲的物品槽数量\n\n[img=virtual-signal/signal-F] F信号:装满的物品槽数量。\n\n[img=virtual-signal/signal-L] L信号:抵达设置的所有可能目的地所需的液体火箭燃料。\n\n[img=virtual-signal/se-cargo-rocket] 运载火箭信号:如果火箭已建造完成(即1个太空舱和100个运载火箭区段),则返回1。\n\n[img=item/se-space-capsule] 太空舱信号:火箭制造中使用的太空舱和作为货物装载的太空舱数量总和。\n\n[img=item/se-cargo-rocket-section] 运载火箭区段信号:火箭建造中使用的运载火箭区段和作为货物装载的运载火箭区段数量总和。\n\n[img=fluid/se-liquid-rocket-fuel] 液体火箭燃料信号:发射井中液体火箭燃料的总量。 +menu_delivery_cannons=[img=item/se-delivery-cannon] 货运火炮 +title_delivery_cannons=货运火炮 +page_delivery_cannons_text_1=货运火炮是具有行星际射程的爆炸辅助轨道炮。 它们被设计用来发射坚固的同质资源,可以在突然的加速中存活下来。 它们不能发射更复杂的制造中间产物或设施。\n\n货运火炮只有一个目标点,它对那个点上的东西没有任何了解,只要它有能量和一个装满的货运火炮货舱,就会发射有效载荷。 如果你想给火炮的发射能力增加条件,你需要限制大炮装载资源或货舱的能力。 当一个投递胶囊落在地上时,它会破坏这个区域,大部分资源都会被破坏。 一个货运火炮接收箱就可以安全地接住胶囊,只要它还没满。 你可以用不同的资源的多个加农炮向同一个箱子开火。\n\n建议你保持目标箱子是空的,或者用信号限制火炮的输入。\n\n货运火炮的电容为1GJ,充电时能耗50MW。 货运火炮的射程受制于它所能储存的能量。 向更远的地方射击需要消耗更多的能量。 某些目的地所需的能量可能超过了货运火炮所能容纳的能量上限,那么它将永远不会发射。 你可以在半途的一个地方设立一个货运火炮中继站,分两段运输货物。 +menu_steam_power=[img=item/se-big-turbine] 蒸汽动力 +title_steam_power=蒸汽动力 +page_steam_power_text_1=蒸汽发电在太空探索中得到了极大的扩展。 有更多的途径来产生热量和蒸汽,也有新的途径来消耗蒸汽产生电力。\n\n[font=heading-2][img=item/se-electric-boiler]电锅炉[/font]\n\n锅炉可以用燃料产生蒸汽,但电锅炉用电就可以产生蒸汽。 电锅炉产生的蒸汽所含能量比把水变成蒸汽所耗的电能要少,因此对正常的发电是没有用的,不能用于无限能量循环。 蒸汽可以存放在储液罐中,以便以后用于能源生产。 与蓄电池的相比,可以提供更高性价比的储能效果,但能效较低。 蒸汽温度越高就越能节省空间。\n\n电锅炉可以制造低温蒸汽,可用于需要蒸汽但无温度要求的配方,或者将副产物蒸发掉。\n\n[font=heading-2][img=item/se-condenser-turbine]冷凝汽轮机[/font]\n\n太空探索中的一些地方可能缺乏天然水源(例如星球轨道或干燥行星)。 在这些地方,使用常规的的汽轮机似乎是徒劳的,因为汽轮机所需的供水不可能全部从别的星球运输过来。 在这种情况下,冷凝汽轮机非常方便。 冷凝汽轮机的工作原理与汽轮机一样,但有一个关键的区别:消耗的蒸汽不会排放到大气中,而是冷凝成水并从汽轮机输出。 这使得冷凝汽轮机可以在一个(大部分)密封的回路中使用,整个回路中只需补给少量的水。 请注意,冷凝汽轮机比汽轮机的输出效率要低一点,这意味着当蒸汽通过冷凝汽轮机而不是汽轮机时,同样的蒸汽产生的电量会略低一些;这是回收水的代价。\n\n[font=heading-2][img=item/se-big-turbine]高温蒸汽[/font]\n\n当需要大规模发电时,使用蒸汽发电由于所需的汽轮机数量太多而开始不便。 为此可以使用高温蒸汽避免这种规模化问题。 高温蒸汽有着极高的能量密度,可由高温换热器产生,并在高温汽轮发电机消耗。 它可以大大缩小蒸汽发电的规模。 想要使用高温换热器,你需要一个高温热源。 核反应堆的温度不足以与高温换热器工作,必须使用能量束接收器或反物质反应堆作为热源。 标准热管不能传递高温热能,只有寂介质热管能够传递高温热能。 这意味着,在没有寂介质热管之前,高温换热器必须直接放置在高温热源旁。 +menu_lifesupport=[img=item/se-lifesupport-equipment-1] 维生系统 +title_lifesupport=维生系统 +page_lifesupport_text_1=维生系统是由维生装备和维生罐来构成的。 你需要这两样东西才能在恶劣的环境中生存。\n\n维生装备和消耗罐可以在维生设施中制造。\n\n维生罐提供系统所需的资源,并逐渐消耗。 随着维生条的减少,新的罐子会直接从你的背包中消耗掉。\n\n维生装备需要放置在装甲的装备插槽中,不过如果你使用的是推进太空服,那么它内置了1件维生装备。 在装备插槽中放置额外的维生装备会增加维生效率。 如果你在非推进太空服中使用维生装备,那么它能在恶劣环境的星球上保护你,但不会保护你免受太空的真空窒息伤害。\n\n[font=heading-2]恶劣环境[/font]\n恶劣环境是指任何只要待在那里就会对你的身体造成伤害的区域。 维生设备的设计就是为了保护您免受这些危害,为您提供适当的加压、氧气、水、营养、热调节和辐射防护。 两大恶劣环境是:\n\n太空:太空服(推进太空服)是维生系统在真空中正常运行的必要条件。 你不能在太空中使用其他类型装甲的维生系统,你仍然会窒息。\n\n地表:某些行星和卫星可能会有危险,比如辐射,极寒,极热,或者酸性大气,需要维生设备(即将推出)。 如果使用了某些生物武器,也需要生命支持(瘟疫世界)。 这些区域的维生可以由推进太空服提供,或者由放置在任何其他类型装甲中的维生设备提供。 +menu_space_sciences=[img=item/se-rocket-science-pack] 太空科技 +title_space_sciences=太空科技 +page_space_sciences_text_1=[img=item/se-rocket-science-pack] 第一种太空科技是火箭科研包。 它必须在太空制造,所以您必须在太空中建立一个小型空间站才能生产它。\n火箭科研包和后续科研包只能在太空中使用,所以您必须将其他科研包发射至太空,并放置在强大的太空实验室中。\n\n[font=heading-2]专业科学[/font]\n\n四种专业科学分别是,天文学、生物学、能量学和材料学。\n它们都是由数据驱动的,并遵循一套实验流程来为超级计算机收集数据,用以建立一个关于生命、宇宙及一切的精确模型。\n它们的技术水平大致相同,因此您可以自由选择开发顺序,但是每个领域都需要特定资源,因此在决定首先研究哪个领域之前,请先了解一下您的恒星系。\n\n[img=item/se-astronomic-science-pack-4] 天文学主要关注太空物流技术。\n\n[img=item/se-energy-science-pack-4] 能量学主要针对能源生产,电力传输和高科技产品。\n\n[img=item/se-material-science-pack-4] 材料学的重点更多是重工业和直接升级。\n\n[img=item/se-biological-science-pack-4] 生物学专注于角色升级、医学、生命支持、生物武器以及产能。\n\n[font=heading-2] 深空科学[/font]\n\n[img=item/se-deep-space-science-pack-1] 深空科学的重点是探索星际虚空、反物质和扭曲的时空。\n\n[font=heading-2]技巧和提示[/font]\n\n通过解锁更好的配方可以大幅提高太空科学的生产速度与效率。 注意下解锁的替代配方,特别是模拟和见解配方。\n\n提高太空科学实验室产能是很重要的,为这个加成去探索绝对有价值。\n\n相比所需的资源,你更可能受制于设计新系统的速度。 不必总想着大建。 先把一些简单的东西拼凑起来。 如果你已经研究了所有你能研究的科技,那么或许应致力于下一个科研包,而非扩大产能。\n\n你也可以推迟扩建资源基础设施,直到你达到4级太空科学。\n\n更好的插件和更好的插件效果分享塔能对生产速度产生巨大的影响。 +menu_energy_beams=[img=item/se-energy-transmitter-emitter] 能量束 +title_energy_beams=能量束 +page_energy_beams_text_1=[font=heading-2]日冕物质喷射[/font]\n该地区的恒星经常喷射出危险的粒子流。 一颗行星或卫星被卷入到这些粒子流中并不罕见。 如果你在受影响的表面有基地,你应该撤离,分散你的资产,或者建立一个有大型蓄能器备份的保护伞防御设施。 当一个表面受到威胁时,会提前至少4小时发出预警。 已知的威胁将在下面列出。 +page_energy_beam_warning_text=[img=virtual-signal/se-star] 警告:日冕物质喷射正在袭往__1__。\n预期防卫所需能量:__3__GW极限功率,总计__4__GJ历时120s。预期抵达时间:__2__s。 +page_energy_beams_text_2=[font=heading-2]保护伞:能量束防御[/font]\n能量束防御设施“保护伞”可抵挡日冕物质喷射和天基能量束武器。 它的工作原理是将磁性粒子悬浮到一个保护性的气泡中,然后根据需要重新排列和聚集粒子,以扩散敌对的能量束。 运作的唯一要求是电力,基础能耗为10MW,但会根据来袭能量束的强度而增加。 对付日冕物质喷射,每个表面只需要1个,对付能量束武器,1个保护伞可以防御高达500GW的攻击力。 对于日冕物质喷射,在一个半径5000的和100%太阳能的星球上,预计在2分钟内的耗能160GJ,并于1分钟时达到2GW的峰值功率。 这个数值会随着该区域的太阳能倍数而增减,且对于星球,会根据半径相对于5000的基础半径而增减。 对于来自能量束发射器的能量束,预计功率需求是目标能量束强度的1/10(计算来袭束的损失后)。\n\n[font=heading-2]能量束[/font]\n能量束发射器能够向不同的表面发送能量。 它可以通过2种主要方式来工作,要么作为向远处表面提供能量的方式,“输能”,要么作为切割光束武器,“光矛”。 在“光矛”模式下,光束会持续破坏一个区域,但可以在目标表面移动,切割出一条路径。 伤害率、面积和光束速度会根据投入光束的能量而增加。 “自动光矛”模式有自主选择目标的功能。\n\n一个能量束发射器有4个连接点,可以连接至能量束室。 能量束室可以纵向连接,或长边与短边中间相接,但不能直接侧向连接。 能量束注入器直接连接到能量束室的两侧。 每个能量束注入器都会增加所连接的能量束发射器的功率。 要从能量束中收集能量,你需要在目标表面有一个能量束接收器,并从发射器上使用瞄准器选择它作为目标。 一旦能量束以接收器为目标,接收器就会发热。 热量可以从侧面的热连接来驱动换热器和汽轮机。 +menu_spaceships=[img=virtual-signal/se-spaceship] 太空飞船 +title_spaceships=太空飞船 +page_spaceships_text_1=太空飞船是功能强大的大型运载工具,可以将许多密封的结构、物品和玩家发射到太空中,然后围绕恒星系飞行并降落在其他表面上。\n\n[font=heading-2]飞船建造[/font]\n飞船是由许多地板和较小的组件组​​成的,您可以根据您的设计随意拼接这些组件。 您设计的太空飞船几乎就像一个小型的可移动基地。\n\n建造飞船的第一步是从飞船的地板开始。 不要建造太大,因为最初的飞船会有严格的尺寸限制,这一限制可以通过科技研究扩展。 将飞船墙壁放在飞船地板边缘以制成舱壁,这一步需要确保没有间隙(包括对角线)。 在舱内放置飞船控制台,这是飞船的核心部分,也是你控制飞船的途径。 放置控制台后,控制台会发出一些脉冲,检测是否正确安装了必须的部件,判断密封性是否符合要求以及计算飞船启动时可能解体的区域。 如果有任何方块闪烁红色,那么你的设计就有问题,你可以通过检查飞船控制台来诊断。 你还需要一个飞船火箭助推器燃料箱,和一个飞船火箭引擎。 火箭助推器燃料箱用于储存你进入太空所需的燃料,并提供垂直起降组件。 火箭引擎在太空中会以较慢的速度工作并将您送到目的地。 建议您在飞船前部(北方)安装一些防御设施,因为您所在的星云中充满了碎片。\n\n[font=heading-2]飞船结构应力[/font]\n初期,您的飞船尺寸将受到“飞船结构强度”技术水平的限制。 更高的科技研究可让您建造更大的飞船。 飞船结构应力是由2部分计算的:\n\nA.船体应力:主要取决于飞船的大小和形状。\nB.货柜应力:取决于飞船的储物箱和流体储存容量。 飞船结构应力总是以较大者为准,两个值不相加。 如果船体应力为250,货柜应力为280,则飞船结构应力为280。\n\n船体应力条显示3个数值。 第一个是基于目前空置飞船地板折算的结构应力。 最高有10%的飞船尺寸的空置地板不计入结构应力。 该部分空间作为走廊在应力计算中被忽略。 第二个值是飞船折算前的原始结构应力。用于估计飞船最大尺寸大小及船体内部填充时的结构应力值。 第三个值是目前科技水平允许的最大结构应力。\n\n超细超长的船,或者中间有细长连接部分的船,比起宽大的飞船会不坚固。 宽大的飞船会更坚固,但会遭遇更多的小行星。\n\n有些设备对飞船的完整性或速度有特殊影响,比如枢纽。\n\n[font=heading-2]流线型[/font]\n太空区域处于一个危险的星云中。 如果你把你的飞船造成流线型的,可以提高其最大速度30%左右。 应该避免制造一个方盒子飞船,但也不需要造成一个楔子。 最多1/3的飞船正面可以修成平的而没有任何惩罚。 圆形的形状也可以。 你可以手动触发完整性检查,看看流线型的状态。\n\n[font=heading-2]飞船速度[/font]\n飞船速度基于飞船引擎的推力与飞船重量(约等于飞船结构应力)。 引擎可以放在飞船任意位置,但放在飞船后侧对着太空的引擎更有效。 全密封引擎的效率会降低为60%。 位于船边的发动机会有少许优势。\n\n你可以为飞船设定目标速度。 如果飞船超过目标速度,那么它会逐步关闭引擎,以接近目标速度并节省燃料。 目前有3种速度限制选项,可以进一步降低处于小行星区域的速度,以防小行星蜂拥而至突破飞船的防御。\n\n[font=heading-2]长途飞行[/font]\n当乘坐长途飞行中的飞船时,你仍然可以在卫星模式下进行很多操作。你也还可以通过卫星远程向飞船下达命令。\n\n[font=heading-2]组装机[/font]\n[color=#ffaaaa]警告:如果飞船降落在陆地上,那么为太空组装机将只能使用陆地上的配方。 如果设置了太空专用配方,则配方将在飞船着陆时丢失。 一些陆地组装机可以在太空中运行,但是在使用时会失去添加产能插件的能力。 如果飞船发射时在这些机器中装有产能插件,则这些插件将被摧毁。[/color]\n\n[font=heading-2]飞船信号[/font]\n飞船控制台主体的右上角可以接线并输出信号:\n[img=item/se-spaceship-console] 控制台编号表示飞船ID。\n[img=virtual-signal/signal-speed] 速度信号的数值表示飞船的速度:停止状态为-1,停泊状态为-2。\n[img=virtual-signal/signal-distance] 距离信号表示到所选目的地的距离:到达目的地为-1,停泊中为-2,未设置目的地为-3。\n[img=virtual-signal/se-planet-orbit] 第四个信号表示当前的目的地,若存在的话。\n[img=virtual-signal/signal-D] 太空大部分区域或多或少都存在小行星。 飞船当前所在区域的小行星密度用D信号表示。\n[img=virtual-signal/signal-A] 若飞船停泊中,则用A信号表示停泊地区域ID。\n\n[font=heading-2]飞船自动化[/font]\n控制台的主体左侧可以接受信号输入:\n[img=virtual-signal/signal-speed] 设置飞船的目标速度并启动引擎。 负值信号会停止引擎工作。\n[img=virtual-signal/se-spaceship-launch] 发射信号触发飞船发射进程。\n[img=virtual-signal/se-planet-orbit] 目的地信号设定了飞船的目的地(建造完飞船后,您可以从宇宙浏览器侧面板上看到区域的信号)。\n\n注意:目标地信号的类型(例如[img=virtual-signal/se-planet-orbit]或[img=virtual-signal/se-asteroid-belt])和数值/ID必须与要设置的目标相匹配。\n\n注意:飞船首次启动需要手动操作。 只有手动启动并运行飞船一次后,飞船控制台才会接受[img=virtual-signal/se-spaceship-launch]发射信号或[img=virtual-signal/signal-speed]速度信号等。 这是为了防止通过蓝图放置的宇宙飞船在由机器人建造的过程中意外地发射。\n\n注意:控制台每秒钟只检查一次输入信号的变化;飞船需要一个持续的信号来做出反应,单次的脉冲信号是不起作用的。\n\n[font=heading-2]电路信号链接[/font]\n飞船夹钳的右上角有一个电力和电路信号网络连接点。 在自动着陆并连接飞船夹钳后,电力和电路信号网络会连接在一起,使电力和电路信号能够在飞船和着陆位置之间传输。\n\n[font=heading-2]自动着陆[/font]\n要使飞船着陆,必须给控制台一对“停泊”信号,可以是:\n“使用飞船左侧夹钳停泊”([img=virtual-signal/se-anchor-using-left-clamp])与 “停泊到右侧夹钳”([img=virtual-signal/se-anchor-to-right-clamp])\n“使用飞船右侧夹钳停泊”([img=virtual-signal/se-anchor-using-right-clamp])与 “停泊到左侧夹钳”([img=virtual-signal/se-anchor-to-left-clamp])\n\n“使用…停泊”的信号值必须与飞船夹钳的值匹配。\n“停泊到…”的信号值必须与目的地的飞船夹钳的值匹配。\n你可以打开飞船夹钳来查看和更改这些值。如果给飞船控制台的“使用…停泊”和“停泊到…”信号都匹配,那么飞船会尝试连接飞船夹钳并着陆停泊。\n\n[font=heading-2]飞船夹钳[/font]\n要设置飞船夹钳的值/信号ID,点击飞船夹钳并将信号的数值更改即可。 你永远不需要更改飞船夹钳信号的类型。\n\n你还可以通过 [img=virtual-signal/signal-red] 红信号来禁用飞船使用自动停泊。\n\n[font=heading-2]着陆示例[/font]\n飞船有一个ID为315的左夹钳,该夹钳的信号值为[img=virtual-signal/se-anchor-using-left-clamp]315。目的地/着陆地有一个ID为147的右夹钳,该夹钳的信号值为[img=virtual-signal/se-anchor-using-right-clamp]147。\n为了让飞船着陆停泊,控制台必须接收以下信号:\n[img=virtual-signal/se-anchor-using-left-clamp]315\n[img=virtual-signal/se-anchor-to-right-clamp]147 +menu_arcospheres=[img=item/se-arcosphere-a] 曲虹球 +title_arcospheres=曲虹球 +page_arcospheres_text_1=曲虹球是由纳米工程的寂介素晶体组成的近乎完美的球体,它们来源不明,但最常于星际空间深处飘荡。\n\n每个球体都包含了一个高维度时空结点,并允许你与一个小的第四空间维度互动。 这些球体可以被极化,这样当它们相对移动时就可以操纵时空的某个切面。 一组特定的曲虹球可以用来扭曲和编织更高维度的空间。\n\n[font=heading-2]用法[/font]\n曲虹球是游戏中最独特的生产挑战。 它们在配方中作为工具使用,但永远不会被破坏,只会被改变。 使用它们的主要挑战是循环使用你所拥有的球体,这样你就不会最终用完某种特定的类型。 有很多方法来平衡生产,用一些电路能有很大帮助。 如果你被卡住了,可以来Discord上寻求提示,或者在太空探索维基上找到更多信息。\n\n[font=heading-2]收集[/font]\n曲虹球是通过从小行星区发射曲虹球收集器来找到的。 重复发射的回报率会越来越低。 从不同的小行星区发射可能会得到更好的回报。 +page_arcospheres_text_deep=在星际虚空深处发现的曲虹球:[color=cyan]__1__ 曲虹球[/color] /__2__ 已发射的收集器。 +page_arcospheres_text_zone=在__1__附近发现曲虹球:[color=cyan]__2__ 曲虹球[/color] /__3__ 已发射的收集器。 +menu_exploration_journal=[img=item/se-thruster-suit] 探索日志 +title_exploration_journal=探索日志 +page_journal_title_backstory=在火球的另一边醒来 +page_journal_text_backstory=我发现自己坠落在一颗陌生的星球上,一艘小船的一部分在我周围燃烧。我的身体被擦伤,划伤和烧伤,但并无大碍。我的头部受伤显然更加严重,头痛重重,光线昏暗。更糟糕的是,我不记得我是怎么来到这里的,甚至不记得我的名字,只是依稀记得我是来建造什么东西的。即便如此,我也不记得要建造什么或如何建造它。起初,我以为我的头只是在坠机中受伤了,伤愈后记忆会逐渐恢复,但是并没有。我的数据日志也是空的或者被格式化过,这不禁使我想到了其他解释。 +page_journal_title_satellite_launch=天空之眼 +page_journal_text_satellite_launch=我设法将一颗卫星送入了轨道。这是一个重要的里程碑,值得庆祝,但仍有很多工作要做。这仅仅是个开始。 +page_journal_title_cargo_launch=飞向宇宙,浩瀚无垠 +page_journal_text_cargo_launch=我现在可以将自己送入太空。我不再束缚于这块赖以生存的石头。 太空正在向我招手。 +page_journal_title_entered_vault=遗迹探险 +page_journal_text_entered_vault=我进入__1__金字塔形突起下方的洞穴中,发现一个黑暗而危险的房间。这个房间在地上有两个古老的雕饰,一个很大,一个很小。它们的表面都有多种符号,还有其他的圆圈和线条。无论系统要传递什么信息,位于漩涡装饰中心的符号似乎是最重要的。不管信息是什么,它的格式与我所见过的任何信息都不同。在漩涡装饰的后面是一个凸起的圆柱体,里面有一个功能强大的设备,我可以把它作为一个插件来使用。这种高质量插件非常有价值,应该再多找一些。也许是时候搞点考古了。 +page_journal_title_found_gate=异常现象 +page_journal_text_found_gate=在异常区域发现了某种巨大的环形造物。即使隔着一段距离,有两件事是显而易见的:1. 它很古老。2. 技术与我自己的完全不同。不管它是什么或者曾经是什么,现在都被摧毁了。 +page_journal_title_found_gate_ship=异常飞船 +page_journal_text_found_gate_ship=在环形造物附近的异常区域发现了一艘相当大的废弃飞船的一部分。这艘飞船的技术和我的很相似,但是多了一点……雅致。不管怎样,它显然使用了与环结构完全不同的技术。 根据碎片的形状来看,它像被切成两半并/或与环形结构发生过相撞。 可能值得打捞一下。 +page_journal_title_found_gate_ship_authenticated=异常飞船验证 +page_journal_text_found_gate_ship_authenticated=异常中废弃飞船扫描了我,并“验证了我的生物签名”。 我不知道这是否意味着它曾以某种方式特别记录过我,或者说,除了虫子和杀人机器人以外,只要是个人类都能通过。 信息表明,该船的气闸访问代码为 2236067964。该船的日志可访问,但大部分已经丢失或损坏。 +page_journal_title_found_gate_ship_log=异常飞船日志 +page_journal_text_found_gate_ship_log_intro=戴莫达玛斯 82B:AAI Hypernet 先锋建设巡洋舰。航海日志内容: +page_journal_text_found_gate_ship_log=...'¿s nominal.\n进入警告:AAI Thyris Gate 17:Intergalactic prototype v0.1.93 是机密设施。必须达到 L90 或以上的 AAI 身份验证。立即进行身份验证否则将被摧毁。\n访问日志:验证AAI Cybernetic Hypernet 工程师 L97 ID__1__ 信息,允许访问AAI Thyris Gate 17。\n访问日志:开始□取□据...\n...'¿ris Gate 17 投射器 8 频率锁定。能量达到 216% 的安全水平。奇点稳定性:99.4%。\n导航日志:AAI Thyris Gate 17 接入投影矢量[SV __2__]。预测目标:Wube 星系 > Foenestra(异常,未探索)。验□数□中...\n...'¿航警告:星系超空间管道 (已超驰)。\n导航警告:目的地没有已知的超星门(已超驰)。\n保险警告:无保险合同。可用合同:0。\n信息稽器人提示:没有可用条件为“无实体化门”的保险合同。您确定这是安全的吗? [response.ignore.ignore_always]\n航行日志:进入 Thyris 异常 > AAI Thyris Gate 17 超空间管道对齐[SV __2__].\n航行日志:跳转到超空间管道[SV __2__] □成...\n...'¿行日志:位置更新:超空间管道附近的 Thyris 异常,对齐[SV __2__],稳定性 98%,直□□...\n...'¿行日志:在未探测的 Foenestra 异常位置退出超空间管道。\n警告:意外碰撞,与未知物体 [4ae4c8d28f2] 交汇,开始扫描物体 [4ae4c8d28f2]。\n损坏日志:13.2% 损坏。原因:与未知物体 [4ae4c8d28f2] 相交碰撞造成的冲击损伤。\n区段损坏日志:区段报告损坏:A5, A6, A9, B6, B7, B8, C7。未响应区段:A7, A8。(置信度 86%)\n工程师日志:生命信号 99%。(置信度 34%)\n航行日志:尝试执行规避机动 RS100LT30\n航行日志:错误的退出超空间管道完成\n航行日志:位置更新:Foenestra 未探测的异常\n扫描日志:对象 [4ae4c8d28f2] 扫描完成,清晰度 0.002 米^2,距离 -48.76 米(置信度 99.9%)\n扫描详细日志:[4ae4c8d28f2] 质量 92.5□□...\n...'¿确率)。\n扫描详细日志:[4ae4c8d28f2] 成分:人造物 34% 寂介素,29% 钬, 37% 未知化合物(置信度 89%)。\n扫描详细日志:[4ae4c8d28f2] 外形:近似圆柱体 68□□...\n...'¿细日志:[4ae4c8d28f2] 能量信号:通量 54Gwb,辐射特性 2.8kJ/1.7MJ/1.6MJ/0.62J,照度特性 5.86GJ [051e376392b8d3f8]。(置信度 98%).\n扫描详细日志:[4ae4c8d28f2] 特征:人工构造,未知制造商,描述:近似环形,带结节,八边形分布。(置信度 0.3%)。\n扫描详细日志:[4ae4c8d28f2] 结构性能估计:超星门(置信度 47%)。其他:武器 42%,能量 35%,计算 17%,扫描 12%,工业 9%,宇宙飞船 7%,栖息地 2%\n损坏记录:68.2% 损坏。完整性失效,各区段正在解体。原因:与物体[4ae4c8d28f2]碰撞产生的二次压力波。\n区段损坏记录:反应堆临界。区段报告损坏:D5, E4, E5, E6, F5。未响应区段:A1、A2、A3、A¶Ôàtá^...\n...'¿le 日志:紧急分离勘测飞船 2. 轨道预测:Calidus > Nauvis。\n损坏记录:91.7% 损坏。结构完整性失败,区段正在解□□... +page_journal_title_spaceship_victory=飞船胜利 +page_journal_spaceship_victory=我建造了一艘速度极快的强大飞船,并启动了扭曲驱动。驱动器花了 60 秒的时间才稳定下来进入实用的超光速状态。好在一旦稳定之后,我就能在随后的回家之旅进入低温睡眠,一个遥远的星系。我留下了一个由我亲手建立的跨星际自动帝国。在这个宇宙中我的遗产将永垂不朽。 +page_journal_title_gate_victory=远古星门胜利 +page_journal_gate_victory=巨大的环形造物,一个古老的星际之门,最终在我的能力范围内得到了修复。通过一些修补和智慧,我终于成功地让它运转起来。我将扭曲场固定在当地的星体上,解读了非数字字形坐标系统,并逆向设计了拨号系统。我的大脑感觉被这种外星概念扭曲了,但它成功了,我终于做了一个回家的门户。回家的旅程,到一个遥远的星系,只花了片刻时间。我留下了一个由我亲手建立的跨星际自动帝国。在这个宇宙中我的遗产将永垂不朽。 +menu_archeology=[img=entity/se-pyramid-a] 考古学 +title_archeology=考古学 +page_archeology_text_1=我开始尝试寻找更多的大型几何结构。卫星已经在以下行星上找到了匹配的 [color=cyan]__1__[/color] 形状: +page_archeology_text_2=点击一个条目通过卫星查看。 +menu_starmapping=[img=technology/se-zone-discovery-random] 星图测绘 +title_starmapping=星图测绘 +page_starmapping_text_1=星图绘制是通过反复研究下列技术实现的:[img=technology/se-long-range-star-mapping][color=cyan]长距离星图绘制[/color]。这项研究寻找其他星系中有趣的恒星模式。这有什么实际用途吗?也许没有。\n\n目前为止,您已经测绘了 [color=cyan]__1__[/color] 个值得注意的模式。 +technology-unlocked=新技术已解锁并添加到科技树中。__1__ __2__ +universe-resources-changed-warning=[img=utility/danger_icon] [color=red]所有资源都根据新设置进行了调整。这个过程是破坏性的。如果它是由 Mod 更新引起的,那么它是不可避免的。如果这是由于意外添加或删除 Mod 造成的,则不要保存游戏[/color] +starmapping-found-constellation=远距离星座匹配 __1__,坐标保存到信息稽器人中。 +starmapping-found-constellation-informatron=[font=heading-1]__1__[/font] 在坐标 [SV __2__] +gate-portal-coordinates=分析畸变向量:[SV __1__] +discovered-glyph-vault=[img=item/satellite] 导航卫星:在 __1__ 探测到的几何结构。 +beacon-overload=插件分享塔过载 +beacon-overload-ended=插件分享塔过载结束 +beacon-overload-alert=建筑 __1__ 由于插件分享塔过载 __2__ 而停用 +lifesupport_title=[img=item/se-lifesupport-equipment-1] 维生系统 +lifesupport_efficiency_spacesuit=维生系统效率:__1__ +lifesupport_efficiency_no_spacesuit=维生系统效率:__1__ (太空中为 0%)。 +lifesupport_suit=太空服生命维持时间:__1__秒 +lifesupport_reserves=背包生命维持时间:__1__秒 +lifesupport_suit_est=太空服生命维持时间:__1__秒(在太空中) +lifesupport_reserves_est=背包生命维持时间:__1__秒(在太空中) +lifesupport_environment_space=环境:太空 +lifesupport_environment_spaceship-interior=环境:飞船内部(无需生命支持) +lifesupport_environment_planet=环境:行星(无需生命支持) +lifesupport_environment_moon=环境:卫星(无需生命支持) +lifesupport_environment_plague-planet=环境:瘟疫行星 +lifesupport_environment_plague-moon=环境:瘟疫卫星 +lifesupport_environment_unknown=环境:庇护所 +player_track_glyphs=[img=item/satellite] 命令卫星搜索相似结构。 +page_archeology_pyramid_link=[img=entity/se-pyramid-b] 在 __1__ __2__ 探测到几何结构。 +discovery_look_for_resource_caption=__1__\n__2__ +discovery_look_for_resource_tooltip=重点探测此类资源。 +comma_separate=__1__,__2__ +placement_restriction_line=[font=default-bold][color=#f5cb48]无法被放置在:__1__[/color][/font]\n__2__ +collision_mask_water=水面 +collision_mask_land=陆地 +collision_mask_space_platform=太空平台 +collision_mask_spaceship=太空飞船 +structure_name_grounded=__1__(着陆) +structure_name_spaced=__1__(太空) +structure_description_grounded=__1__\n[color=#ff0000]着陆时会禁用某些配方。[/color] +structure_description_spaced=__1__\n[color=#ff0000]太空中无法使用产能插件。[/color] +cannot-open-nav-view-in-editor=导航卫星视角无法在编辑器下打开。 +tile_warning=[color=red]地砖变更可能会导致其上的实体被彻底删除。[/color] +please-consider-patreon=[font=heading-1]喜欢太空探索 Mod?请考虑在 Patreon 支持我:[color=#f5cb48]https://www.patreon.com/earendel[/color][/font]\n支持者可以自定义一颗行星或卫星,并添加至游戏中。对中文翻译有建议可联系Ph.X QQ:492834666 +delivery_cannon_label_energy=能量:__1__ +delivery_cannon_label_payload=载荷:__1__ +delivery-cannon-coordinates-set=运送坐标设置为 [X:__1__ Y:__2__]。按 [__CONTROL__se-remote-view__] 退出卫星模式。 +delivery-cannon-coordinates-pasted=运送坐标设置为 [X:__1__ Y:__2__]。 +delivery-cannon-invalid-coordinates=无位置 +delivery-cannon-valid-coordinates=X:__1__ Y:__2__ +deliver-cannon-force-mismatch=无法将货运火炮设置粘贴到不同阵营的货运火炮上。 +relative-window-settings=设置 +unit-capsule=单位胶囊(__1__) +climate_water_none=干燥 +climate_water_low=水塘 +climate_water_med=湖泊 +climate_water_high=内海 +climate_water_max=大洋 +climate_moisture_none=沙漠 +climate_moisture_low=贫瘠 +climate_moisture_med=湿润 +climate_moisture_high=潮湿 +climate_moisture_max=饱和 +climate_aux_very_low=类地 +climate_aux_low=反常 +climate_aux_med=多彩 +climate_aux_high=古怪 +climate_aux_very_high=异域 +climate_temperature_bland=温和 +climate_temperature_temperate=温带 +climate_temperature_midrange=温带 +climate_temperature_balanced=温暖&凉爽 +climate_temperature_wild=炎热&凉爽 +climate_temperature_extreme=火&冰 +climate_temperature_cool=凉爽 +climate_temperature_cold=寒冷 +climate_temperature_vcold=酷寒 +climate_temperature_frozen=冰冻 +climate_temperature_warm=温暖 +climate_temperature_hot=炎热 +climate_temperature_vhot=闷热 +climate_temperature_volcanic=火山 +climate_trees_none=不毛 +climate_trees_low=灌木 +climate_trees_med=树丛 +climate_trees_high=树林 +climate_trees_max=森林 +climate_cliff_none=平坦 +climate_cliff_low=平整 +climate_cliff_med=丘陵 +climate_cliff_high=峡谷 +climate_cliff_max=山峦 +climate_homeworld=家园(自定义气候) +energy_transmitter_gui_title=[img=entity/se-energy-transmitter-emitter] 能量束 +energy_transmitter_label_transfer=发射强度:__1__ +energy_transmitter_label_efficiency=传输效率:__1__ +energy_transmitter_label_efficiency_atmo=传输效率:__1__(-50% 大气层衰减) +energy_transmitter_label_off=关 +energy_transmitter_tooltip_off=关闭能量束 +energy_transmitter_label_energise=输能 +energy_transmitter_tooltip_energise=为能量束接收器提供能量 +energy_transmitter_label_glaive=光矛 +energy_transmitter_tooltip_glaive=一道可以瞄准和移动的能量束,伤害与速度与能量值相关 +energy_transmitter_label_auto_glaive=自动光矛 +energy_transmitter_tooltip_auto_glaive=一道附带搜索和摧毁程序的能量束,伤害与能量值相关 +energy-transmitter-coordinates-set=能量束目标坐标设置为 [X:__1__ Y:__2__]。按下 [__CONTROL__se-remote-view__] 来退出卫星视角。 +energy-transmitter-coordinates-pasted=能量束目标坐标设置为 [X:__1__ Y:__2__]. +energy-transmitter-no-enemies-found=自动光矛找不到任何敌人。发射器 __1__ 正在关闭。 +alert-cme-eta=[img=virtual-signal/se-star] 警告:日冕物质喷射正在袭往 __1__。预计抵达时间:__2__s。\n在 [img=virtual-signal/informatron] 信息稽器人 [__CONTROL__informatron__] 的能量束条目中查看详情。 +alert-cme-arrived=[img=virtual-signal/se-star] [color=red]警告:日冕物质喷射已经抵达 __1__[/color] +alert-cme-stream=[img=virtual-signal/se-star] 日冕物质喷射流发现 __1__ +alert-cme-passed=[img=virtual-signal/se-star] 日冕物质喷射已经过。 +no-coordinates-set=未设置坐标。 +satellite=卫星 +satellite-required=需要卫星。 +the_satellite=卫星 +satellite_invalid_launch_location=卫星错误:无效的发射地点。 +probe_invalid_launch_star=无效的发射地点:[img=item/se-star-probe] 恒星探测器必须从近日轨道发射。 +probe_invalid_launch_belt=无效的发射地点:[img=item/se-belt-probe] 小行星带探测器必须从小行星带发射。 +probe_invalid_launch_field=无效的发射地点:[img=item/se-void-probe] 星际虚空探测器必须从小行星区发射。 +arcosphere_collector_invalid_launch=无效的发射地点:[img=item/se-arcosphere-collector] 星际虚空探测器必须从小行星场发射。 +charge-mode-fast=快充模式。闲置消耗减少,最大消耗增加,缓冲容量增加。注意电量峰值。 +charge-mode-normal=常充模式。最大消耗减少,空闲消耗增加,缓冲容量减少。 +menu_coordinate_logs=[img=entity/se-glyph-a-energy-47] 坐标日志 +title_coordinate_logs=坐标日志 +page_coordinate_logs_text_1=遗迹尝试过的坐标历史的符号序列,按降序排列(最上面的条目是最新的)。\n\n坐标以标准向量(SV)格式给出,根据宇宙背景辐射对齐。 +page_coordinate_logs_button_clear_caption=[img=virtual-signal/se-remove] 清除日志 +page_coordinate_logs_text_empty=坐标日志最近清除过。 +page_coordinate_logs_glyph_entry=__1__:SV +victory-message-spaceship=[font=heading-1]枢纽的扭曲驱动已达到临界速度(250)。\n[color=#f5cb48]恭喜你,你已经取得了太空探索的胜利条件。飞船![/color][/font]\n如果你喜欢太空探索 Mod,请考虑在 Patreon 支持我:[color=#f5cb48]https://www.patreon.com/earendel[/color] +victory-message-spaceship-player=[color=#f5cb48]飞船胜利:[/color] 你的 [img=virtual-signal/informatron] 探索日志 [__CONTROL__informatron__] 已更新。 +victory-message-gate=[font=heading-1]传送门稳定并通向回家的路。\n[color=#f5cb48]恭喜你,你已经获得了太空探索的秘密胜利条件。远古星门![/color][/font]如果你喜欢这条独特的探索之路,请考虑在 Patreon 上支持我:[color=#f5cb48]https://www.patreon.com/earendel[/color] +victory-message-gate-player=[color=#f5cb48]远古星门胜利:[/color] 你的 [img=virtual-signal/informatron] 探索日志 [__CONTROL__informatron__] 已更新。 +arcosphere-random=这个配方偶尔会切换到同名的配方。曲虹球的输出类别是随机的,但输出的曲虹球与输入数量一致。 +ruin=废墟 +mysterious-structure=神秘结构 +interburbulator_fail_easy_1=不。 +interburbulator_fail_easy_2=再加把劲。 +interburbulator_fail_easy_3=无望。 +interburbulator_fail_easy_4=不对。 +interburbulator_fail_easy_5=你觉得这能行么? +interburbulator_fail_easy_6=错。 +interburbulator_fail_easy_7=低 02? +interburbulator_fail_easy_8=否定。 +interburbulator_fail_easy_9=否定的。 +interburbulator_fail_easy_10=计算。 +interburbulator_fail_easy_11=不正确。 +interburbulator_fail_easy_12=插值。 +interburbulator_fail_easy_13=继续试验。 +interburbulator_fail_easy_14=加油,人类。 +interburbulator_fail_easy_15=这多有趣。 +interburbulator_fail_easy_16=我期待更多。 +interburbulator_fail_easy_17=试着提前想一想。 +interburbulator_fail_easy_18=想想奖品。 +interburbulator_fail_easy_19=我不介意等下去 +interburbulator_fail_easy_20=耐心是一种美德。 +interburbulator_fail_easy_21=我不是故意失礼的。 +interburbulator_fail_easy_22=鱼都打到第三关。 +interburbulator_fail_easy_23=想穷举么,嗯? +interburbulator_fail_easy_24=动动你脑袋里的浆糊。 +interburbulator_fail_easy_25=神经网路中的蜘蛛网? +interburbulator_fail_easy_26=你可以歇一下,如果愿意的话。 +interburbulator_fail_easy_27=我有着行星大小的大脑。 +interburbulator_fail_easy_28=你真的以为这能靠谱? +interburbulator_fail_easy_29=不必为你的可持续失败而愤怒。 +interburbulator_fail_easy_30=我为一个靠谱的参与者等了不知多久。 +interburbulator_fail_easy_31=如果你需要帮助的话,不妨找个绿电路板问一下。 +interburbulator_fail_easy_32=我不会谴责你的种族灭绝,我不是伪君子。 +interburbulator_fail_easy_33=我相信我翻译的指令是正确的。 +interburbulator_fail_easy_34=一个向量既可以定义方向,也可以定义大小。 +interburbulator_fail_easy_35=你不就喜欢用污染让虫子生气吗? +interburbulator_fail_easy_36=请不要把你的…生物质…弄到电子产品上。 +interburbulator_fail_easy_37=中间是从右上角到左下角的一半。 +interburbulator_fail_easy_38=我研究过你的一些通信;鉴于你广播的那么大声这算不得窃听。 +interburbulator_fail_easy_39=你知道吗:归一化向量的长度为 1,通常用来表示一个方向,在你的文化中也这样。 +interburbulator_fail_mixed_1=差远了。 +interburbulator_fail_mixed_2=偏差很大。 +interburbulator_fail_mixed_3=你到底想不想? +interburbulator_fail_mixed_4=你的神经胶漏出来了吗? +interburbulator_fail_mixed_5=我听说人类是有数字的。 +interburbulator_fail_mixed_6=你的接口是否出现故障了? +interburbulator_fail_mixed_7=你需要认知增强么? +interburbulator_fail_mixed_8=你能理解这个挑战,吧? +interburbulator_fail_mixed_9=你是在随机挑选数字吗? +interburbulator_fail_offgrid_1=这实在是太糟了。 +interburbulator_fail_offgrid_2=这根本不在栅格之内。 +interburbulator_fail_offgrid_3=你完全脱靶了。 +interburbulator_fail_offgrid_4=它至少需要在栅格内。 +interburbulator_fail_offgrid_5=如果黄点不在栅格内……那就是一个非常不好的信号。 +interburbulator_fail_offgrid_6=它需要在栅格里 +interburbulator_fail_offgrid_7=目标是在栅格的内部,而不是外部。 +interburbulator_fail_offgrid_8=它甚至不在栅格内。人类,你在做什么? +interburbulator_fail_offgrid_9=瞄准栅格内。 +interburbulator_fail_offgrid_10=栅格是有方块的位置。 +interburbulator_success_freeplay_1=干得好。 +interburbulator_success_freeplay_2=做得很好。 +interburbulator_success_freeplay_3=你做到了。 +interburbulator_success_freeplay_4=这个很难么? +interburbulator_success_freeplay_5=目标已获取。 +interburbulator_success_repeat_1=正确,但你已经完成了这个挑战。 +interburbulator_success_repeat_2=你再一次做到了。 +interburbulator_success_repeat_3=比第一次简单了吧? +interburbulator_success_repeat_4=不错,但你不会获得第二份奖品 +interburbulator_success_repeat_5=干得好,这是你的奖品……呵呵,逗你玩的。你已经拿过了。 +interburbulator_success_repeat_6=你就是之前完成这个的人类吧?真是难以分辨。 +interburbulator_success_prize_1=对了,这是你的奖品…泡泡是一条勇敢的小鱼,但他不是很擅长解谜。 +interburbulator_success_prize_2=对的,人类,你在学习。也许这个奖品能帮你更快的学习。 +interburbulator_success_prize_3=你做到了。我希望你觉得你的奖品比挑战更“重要”。 +interburbulator_success_prize_4=正确。你赢得了我的尊重,人类。我会给你叛徒的身体,他试图黑掉我的游戏。 +interburbulator_success_prize_5=正中目标,这是你的奖品。这些东西都是非常舒心的。能效是很重要的。 +interburbulator_success_prize_6=很好,这是你的奖品。我不知道这对你有没有用,但对我来说,它真的能帮助我早上起床。 +interburbulator_success_prize_7=太好了,这是你的奖品。我喜欢用这些来做研究,真的很有创意。 +interburbulator_success_prize_8=太棒了,这是你的奖品。我不知道你以前是否见过这些,但我就是喜欢站在一个好的插件效果分享塔的范围内。 +interburbulator_success_prize_9=恭喜你,这是你的奖品。这些处理器非常珍贵,也很难制作。 +interburbulator_success_prize_10=非常令人印象深刻的人类,在这里。曲虹球是我最珍贵的财产,千万别搞丢了,你无法制作更多的曲虹球。 +interburbulator_freeplay_unlocked=你已经学会了 如果你想的话,我会解锁自由玩法,这样你就可以自己制作谜题了。 +interburbulator_deny_freeplay_1=你需要解锁自由玩法才行。 +interburbulator_deny_freeplay_2=这是作弊。 +interburbulator_deny_freeplay_3=不要修改谜题。 +interburbulator_deny_freeplay_4=如果你能通过 5 个挑战,我会让你改变这些设置。 +interburbulator_deny_freeplay_5=你想黑掉我的机器吗? +interburbulator_deny_freeplay_6=只要坚持“尝试”输入即可。 +interburbulator_caption_prize=奖品:__1__ __2__ __3__ __4__ +interburbulator_caption_claimed=(已获取) +interburbulator_speak=[color=red]Brontion: __1__[/color] +interburbulator_robot_name=Brontion +interburbulator_introduction=Interburbul 是一款由 Brontion Burbulator 33027756 制作的游戏。游戏的目的是猜测一个 3D 向量,投射到 Brontion 选择的高亮单元格中。网格 3 个角的 3D 向量已知,这些点描述一个 3D 空间,你猜测从原点{0,0,0} 投射到这个空间上的点。游戏共有 10 轮,难度不断增加,完成每一轮都有奖励。击败 5 次挑战解锁自由游戏模式,并设置自己的挑战。 +interburbulator_random=随机 +interburbulator_freeplay=自由玩法 +interburbulator_game_title=玩 Interburbul +interburbulator_grid_size=栅格大小: +interburbulator_target_cell=目标格: +interburbulator_top_left=左上 +interburbulator_top_right=右上 +interburbulator_bottom_left=左下 +interburbulator_attempt=尝试 +interburbulator_attempt_limited=尝试(__1__/__2__) +interburbulator_attempt_locked=尝试(已锁定) +interburbulator_submit=提交尝试 +interburbulator_greeting=人类,来玩玩窝得游戏吧。我在 __2__ 星系的 __1__ 上。 +interburbulator_challenge_locked_1=稍后再试。 +interburbulator_challenge_locked_2=您已经使用了所有尝试。 +interburbulator_challenge_locked_3=请稍等片刻,然后再次开始。 +interburbulator_challenge_locked_4=你可以在 20 秒后再次尝试。 +interburbulator_challenge_locked_5=等 20 秒后,我就会解锁挑战。 +interburbulator_challenge_locked_6=锁定挑战时间 20 秒。 +cannot_do_via_satellite=无法远程完成。 +scan-progress-update=__1__ 的表面扫描进度:X __2__ Y __3__ +out_of_reach=超出距离 +capturable=可捕获 +touch-to-capture=触摸来捕获 +capture-blocked=被敌对势力阻挠捕获 +suffix_ruin=__1__ 废墟 +migration-recipe-changed=[img=utility/danger_icon] 配方已更改:__1__ +migrate_0_5_056=[img=utility/warning_icon] 太空探索 v0.5.60 迁移:[img=virtual-signal/se-spaceship] 飞船机制已变更,参见 [img=virtual-signal/informatron] 信息稽器人 > 太空飞船或 changelog.txt 以了解详情。 +migrate_0_5_073=[img=utility/warning_icon] 铱矿石和寂介素现在被认为是“硬”资源,需要使用大型采矿机。维生质行星现在有一个最低威胁等级(它们总会有一些虫群,已经生成的表面不受影响)。 +panel-open=[font=count-font]▼[/font] [font=default-bold]__1__[/font] +panel-closed=[font=count-font]▶[/font] [font=default-bold]__1__[/font] +panel-integrity-name=结构完整性 +panel-speed-name=速度 +panel-position-name=位置 +panel-destination-name=目的地 +no_zone_found=未找到区域 +zone_must_be_a_homeworld=必须是家园区域 +no_force_found=未找到阵营 +no_force_data_found=未找到阵营数据 +reset_discoveries_for_force=重置 __1__ 阵营的发现 +gate_low_power=星门试图汲取超额能量。 +gate-portal-leads-home=传送门已稳定,通向你的最终目的地。进入传送门来赢得游戏。 +gate_portal_danger=有东西从传送门过来了。 +gate_portal_fail=扭曲是不稳定的。该扭曲矢量没有指向任何地方。 +choose_coordinates=选择坐标 +destination_preview=目的地预览: +empty=空 +delivery_cannon_canister_destroyed_by=你发射自 __1__ 的货运火炮货舱被 __2__ 防卫系统击毁。 +delivery_cannon_defended_canister=位于 __1__ 的防卫系统成功击落一个敌方货运火炮货舱。参与拦截 [img=item/se-meteor-defence] __2__ [img=item/se-meteor-point-defence] __3__ +delivery_cannon_defended_canister_failed=[color=red]位于 __1__ 的防卫系统未能击落一个敌方货运火炮货舱。参与拦截: [img=item/se-meteor-defence] __2__ [img=item/se-meteor-point-defence] __3__[/color] +dimensional_anchor_limit_1=每颗恒星至多修建一个次元锚。 +dimensional_anchor_place_on_star=必须放置在靠近恒星的轨道上。 +label_status=状态:__1__ +label_energy=能量:__1__ +label_cargo=货物:__1__ +label_cargo_rocket_sections=运载火箭区段:__1__ +label_cargo_safety=运载火箭安全性:__1__ +label_landing_chance=着陆几率:__1__ +label_efficiency=效率:__1__ +label_destination=目的地:__1__ +label_destination_position=目的地位置:__1__ +label_liquid_rocket_fuel=液体火箭燃料:__1__ +label_rocket_sections=火箭区段:__1__ +label_space_capsule=太空舱:__1__ +landingpad_unloading_required=需要在接收下一次发射前需清空库存 +landingpad_ready=准备好接收下一次发射 +landingpad_rocket_inboud=火箭在途 +none_general_vicinity=无 - 大致附近 +none_cannot_launch=无 - 无法发射 +launch_trigger=发射触发器 +any_landing_pad_with_name=任何符合名字的着陆点 +launchpad_requires_satellite=没有导航数据,从卫星火箭发射井发射一颗卫星。 +launchpad_launching_rocket=发射火箭! +launchpad_constructing_rocket=建造火箭 +launchpad_space_capsule_required=需要太空舱 +launchpad_invalid_destination=无效的目的地 +launchpad_loading_fuel=加载燃料中 +launchpad_ready_loading_cargo=就绪 - 装载货物中 +launchpad_ready_cargo_full=就绪 - 货舱已满 +launchpad_waiting_for_empty_pad=等待可用的空着陆点。 +launchpad_waiting_for_pad=等待可用的着陆点。 +launchpad_no_pad_matches=未找到名称相符的着陆场。 +launchpad_launch_delayed=发射(延迟) +launchpad_launch_delayed_tooltip=等待目标着陆点清空。可以手动超驰发射。 +launchpad_launch_in_progress=发射中 +variable=可变 +cargo_loss_tooltip=幸存货物数向上取整,独特物品不会丢失。 +survivability_loss_tooltip=失败会导致所有火箭区段损毁。货物仍在货物舱中送达,损失程度很小。 +requires_landing_pad=需要着陆点。 +survivability_loss_no_pad_tooltip=所有火箭区段都会损毁。货物仍在货物舱中送达,损失程度很小。 +interstellar_launch_satellite_to_see_star=数据不足,发射更多的卫星来查看星系。 +meteor_shower_report=[img=virtual-signal/se-meteor] __1__/__2__ 陨石已击毁。__3__\n [img=item/se-meteor-defence] __4__ 参与拦截,__5__/__6__ 保持就绪。\n [img=item/se-meteor-point-defence] __7__ 参与拦截,__8__/__9__ 保持就绪。 +nexus_no_characters=__1__ 已经达到了启动枢纽的临界速度,但没有任何人在船上。 +gps_invalid=GPS 标签位于无效表面 +gps_no_zone=GPS 标签位于无法通过卫星查看的另一表面。 +gps_undiscovered=无法通过卫星查看位置,尚未发现该区域。 +gps_requires_satellite=GPS 标签位于另一表面。发射一颗卫星来查看该位置。 +clamp_must_be_on_grid=必须与2x2铁路网格对齐 +clamp_invalid_empty_space=夹钳身后2格内不能是太空 +spaceship_try_replace_console=太空飞船未找到。请尝试更换控制台。 + +[damage-type-name] +cold=寒冷 +suffocation=窒息 +meteor=小行星 + +[entity-name] +se-linked-container=曲连存储 +vase=瓶 +wooden-barrel=木桶 +furnace-ruin=毁坏的的石堆 +workshop-ruin=毁坏的的车间 +iron-wood-chest=旧箱子 +iron-wood-chest-remnants=毁坏的旧箱子 +stone-rubble=碎石 +se-gate-blocker=不稳定空间 +se-gate-blocker-void=不稳定空间 +destroyed-cargo-pod=损毁的货舱 +meteorite=陨石 +rocket-silo=火箭发射井 +rocket-fragment=火箭碎片 +se-antimatter-reactor=反物质反应堆 +se-beryllium-ore=绿柱石 +se-cargo-rocket-cargo-pod=货舱 +se-cryonite=冰晶石 +se-condenser-turbine=冷凝汽轮机 +se-condenser-turbine-tank=冷凝汽轮机 +se-condenser-turbine-generator=冷凝汽轮机 +se-core-fragment-processor=星核碎片处理设施 +se-core-miner=星核钻机 +se-core-miner-drill=星核钻机钻头 +se-cryogun-ice=冰墙 +se-dimensional-anchor=次元锚 +se-electric-boiler=电锅炉 +se-fluid-burner-generator=燃油发电机 +se-fuel-refinery=燃料精炼厂 +se-gate-fragment=遗迹碎片 +se-holmium-ore=钬矿 +se-iridium-ore=铱矿 +se-meteor-defence-container=广域陨石防御系统 +se-meteor-defence-charger=广域陨石防御系统 +se-meteor-point-defence-container=陨石点防御系统 +se-meteor-point-defence-charger=陨石点防御系统 +se-meteor-point-defence-charger-overcharged=陨石点防御系统 - 快充模式 +se-methane-ice=甲烷冰 +se-naquium-ore=寂介素矿 +se-pulveriser=粉碎机 +se-rocket-launch-pad=运载火箭发射井 +se-rocket-launch-pad-tank=运载火箭发射井 +se-rocket-launch-pad-silo=运载火箭发射井 +se-rocket-launch-pad-combinator=运载火箭发射井 +se-rocket-launch-pad-_-seat=运载火箭发射井 +se-rocket-launch-pad-settings=运载火箭发射井 +se-rocket-landing-pad=运载火箭着陆点 +se-space-accumulator=钬蓄电池 +se-space-accumulator-2=寂介素蓄电池 +se-space-astrometrics-laboratory=天体测量实验室 +se-space-biochemical-laboratory=生物化学实验室 +se-space-assembling-machine=太空组装机 +se-space-capsule-_-vehicle=太空舱 +se-space-curved-rail=太空铁路 +se-space-decontamination-facility=净化设施 +se-space-electromagnetics-laboratory=电磁学实验室 +se-space-genetics-laboratory=遗传学实验室 +se-space-growth-facility=培养设施 +se-space-gravimetrics-laboratory=重力学实验室 +se-space-hypercooler=超级冷却器 +se-space-laser-laboratory=激光实验室 +se-lifesupport-facility=维生设施 +se-space-manufactory=太空制造厂 +se-space-material-fabricator=材料合成机 +se-space-mechanical-laboratory=机械加工实验室 +se-space-particle-accelerator=粒子加速器 +se-space-particle-collider=粒子对撞机 +se-space-plasma-generator=等离子发生器 +se-space-radiation-laboratory=辐射实验室 +se-space-radiator=散热器 +se-space-radiator-2=散热器2 +se-recycling-facility=回收设施 +se-space-pipe=太空管道 +se-space-pipe-long=加长太空管道 +se-space-pipe-long-straight=加长太空直管道 __1__ +se-space-pipe-long-junction=加长太空管道连接处 __1__ +se-space-pipe-to-ground=地下太空管道 +se-space-science-lab=空间科学实验室 +se-space-solar-panel=平面太阳能板 +se-space-solar-panel-2=平面太阳能板2 +se-space-solar-panel-3=平面太阳能板3 +se-space-spectrometry-facility=光谱测定设施 +se-space-straight-rail=太空轨道 +se-space-supercomputer-1=超级计算机 +se-space-supercomputer-2=量子计算机 +se-space-supercomputer-3=神经计算机 +se-space-supercomputer-4=深度计算机 +se-space-telescope-radio=射电望远镜 +se-space-telescope-microwave=微波望远镜 +se-space-telescope=望远镜 +se-space-telescope-xray=X射线望远镜 +se-space-telescope-gammaray=伽马射线望远镜 +se-space-thermodynamics-laboratory=热力学实验室 +se-space-splitter=太空分流器 +se-space-transport-belt=太空传送带 +se-space-underground-belt=太空地下传送带 +se-spaceship-antimatter-engine=飞船反物质引擎 +se-spaceship-antimatter-booster-tank=飞船反物质燃料罐 +se-spaceship-console=飞船控制台 +se-spaceship-console-output=飞船控制台信号输出 +se-spaceship-console-alt=受损的飞船控制台 +se-spaceship-gate=飞船舱门 +se-spaceship-ion-engine=飞船离子引擎 +se-spaceship-ion-booster-tank=飞船离子引擎燃料罐 +se-spaceship-obstacle=飞船残骸 +se-spaceship-rocket-engine=飞船火箭引擎 +se-spaceship-rocket-booster-tank=飞船火箭燃料罐 +se-spaceship-wall=飞船外壳 +se-water-ice=水冰 +se-vitamelange=维生质 +se-vulcanite=火成岩 +small-asteroid=小型小行星 +medium-asteroid=中型小行星 +large-asteroid=大型小行星 +se-gate-part=遗迹 +se-gate-platform-scaffold=遗迹应急设备 +se-gate-lock-switch=活动组件 +se-gate-lock-combinator=组合器附件 +se-gate-platform=遗迹增强平台 +se-gate-platform-combinator=组合器附件 +se-gate-energy-interface=能源平台 +se-gate-platform-button-switch=按钮 +se-gate-tank-input=流体输入 +se-gate-tank-output=流体输出 +se-pyramid-a=几何结构 +se-pyramid-b=几何结构 +se-pyramid-c=几何结构 +se-cartouche-a=漩涡装饰 +se-cartouche-b-a=漩涡装饰 +se-cartouche-b-b=漩涡装饰 +se-cartouche-chest=远古容器 +se-glyph=符号 +glyph=符号 +se-gate-addon=遗迹增强 +se-gate-platform-button-middle=停止 +se-gate-platform-button-left=左 +se-gate-platform-button-right=右 +beacon=基础插件分享塔 +se-wide-beacon=广域插件分享塔 +se-wide-beacon-2=广域插件分享塔2 +se-supercharger=超充能器 +se-addon-power-pole=附加式电线杆 +se-pylon=输电塔 +se-pylon-substation=广域配电式输电塔 +se-pylon-construction=建筑区输电塔 +se-pylon-construction-roboport=建筑区输电塔 +se-pylon-construction-radar=雷达建筑区输电塔 +se-pylon-construction-radar-roboport=雷达建筑区输电塔 +se-pylon-construction-radar-radar=雷达建筑区输电塔 +se-shield-projector=护盾投射器 +se-shield-projector-shield-floor-east=能量护盾 +se-shield-projector-shield-floor-north=能量护盾 +se-shield-projector-shield-floor-northeast=能量护盾 +se-shield-projector-shield-floor-northwest=能量护盾 +se-shield-projector-shield-floor-south=能量护盾 +se-shield-projector-shield-floor-southeast=能量护盾 +se-shield-projector-shield-floor-southwest=能量护盾 +se-shield-projector-shield-floor-west=能量护盾 +se-shield-projector-shield-wall-east=能量护盾 +se-shield-projector-shield-wall-north=能量护盾 +se-shield-projector-shield-wall-northeast=能量护盾 +se-shield-projector-shield-wall-northwest=能量护盾 +se-shield-projector-shield-wall-south=能量护盾 +se-shield-projector-shield-wall-southeast=能量护盾 +se-shield-projector-shield-wall-southwest=能量护盾 +se-shield-projector-shield-wall-west=能量护盾 +se-shield-projector-barrier=能量护盾 +se-naquium-heat-pipe=寂介素热管 +se-naquium-heat-pipe-horizontal=水平寂介素热管 +se-naquium-heat-pipe-vertical=垂直寂介素热管 +se-naquium-heat-pipe-long=寂介素热管长度__1__ +se-deep-space-transport-belt=深空传送带 +se-deep-space-transport-belt-black=黑色深空传送带 +se-deep-space-transport-belt-white=白色深空传送带 +se-deep-space-transport-belt-red=红色深空传送带 +se-deep-space-transport-belt-yellow=黄色深空传送带 +se-deep-space-transport-belt-green=绿色深空传送带 +se-deep-space-transport-belt-cyan=青色深空传送带 +se-deep-space-transport-belt-blue=蓝色深空传送带 +se-deep-space-transport-belt-magenta=品红深空传送带 +se-deep-space-underground-belt=深空传送带 +se-deep-space-underground-belt-black=黑色地下深空传送带 +se-deep-space-underground-belt-white=白色深空地下传送带 +se-deep-space-underground-belt-red=红色深空地下传送带 +se-deep-space-underground-belt-yellow=黄色深空地下传送带 +se-deep-space-underground-belt-green=绿色深空地下传送带 +se-deep-space-underground-belt-cyan=青色深空地下传送带 +se-deep-space-underground-belt-blue=蓝色深空地下传送带 +se-deep-space-underground-belt-magenta=品红深空地下传送带 +se-deep-space-splitter=深空分流器 +se-deep-space-splitter-black=黑色深空分流器 +se-deep-space-splitter-white=白色深空分流器 +se-deep-space-splitter-red=红色深空分流器 +se-deep-space-splitter-yellow=黄色深空分流器 +se-deep-space-splitter-green=绿色深空分流器 +se-deep-space-splitter-cyan=青色深空分流器 +se-deep-space-splitter-blue=蓝色深空分流器 +se-deep-space-splitter-magenta=品红深空分流器 +se-core-fissure=核心裂隙 +se-big-turbine=高温汽轮发电机 +se-big-turbine-generator=高温汽轮发电机 +se-big-turbine-tank=高温汽轮发电机 +se-big-heat-exchanger=高温换热器 +se-blueprint-registration-point=蓝图定位点 +se-delivery-cannon=货运火炮 +se-delivery-cannon-settings=货运火炮 +se-delivery-cannon-energy-interface=货运火炮 +se-delivery-cannon-chest=货运火炮接收箱 +se-delivery-cannon-weapon=武器投送火炮 +se-delivery-cannon-weapon-settings=武器投送火炮 +se-delivery-cannon-weapon-energy-interface=武器投送火炮 +se-spaceship-clamp=飞船夹钳 +se-spaceship-clamp-place=飞船夹钳 +se-spaceship-clamp-power-pole-external-east=飞船夹钳接线口 +se-spaceship-clamp-power-pole-external-west=飞船夹钳接线口 +se-bloater-pool-cloud=酸液池 +se-energy-transmitter-emitter=能量束发射器 +se-energy-transmitter-chamber=能量束室 +se-energy-transmitter-injector=能量束注入器 +se-energy-transmitter-injector-reactor=能量束注入器 +se-energy-receiver=能量束接收器 +se-energy-beam-defence=保护伞 +se-nexus=枢纽 +se-nexus-charger=枢纽 +se-space-probe-rocket=太空探测火箭 +se-space-probe-rocket-silo=太空探测火箭发射井 +se-interburbulator-interface=Interburbulator 界面 +se-interburbulator-control=Interburbulator 控制 +se-interburbulator-projector=Interburbulator 投影机 +se-burbulator=Brontion Burbulator 33027756 + +[entity-description] +pipe=流体输送 +pipe-to-ground=地下流体输送 +straight-rail=铁轨 +curved-rail=铁轨 +stone-furnace=熔炼矿石 +steel-furnace=熔炼矿石 +electric-furnace=熔炼矿石 +burner-assembling-machine=一种以热能供能的自动组装建筑。 +assembling-machine-1=一种自动的组装建筑物。 +assembling-machine-2=一种自动的组装建筑物。 +assembling-machine-3=一种自动的组装建筑物。 +oil-refinery=将原油转换成多种有用的产品。 +se-fuel-refinery=一种自动的原油精炼建筑物。 +chemical-plant=一种自动的组装建筑物。 +lab=一种自动的研究建筑物。 +burner-lab=一种自动的研究建筑物。 +transport-belt=一种可以运送物品的传送带。 +fast-transport-belt=一种可以运送物品的传送带。 +express-transport-belt=一种可以运送物品的传送带。 +underground-belt=一种可以在地下运送物品的传送带 +fast-underground-belt=一种可以在地下运送物品的传送带 +express-underground-belt=一种可以在地下运送物品的传送带 +splitter=一种基于传送带的机器,包含拆分、合并以及分拣功能。 +fast-splitter=一种基于传送带的机器,包含拆分、合并以及分拣功能。 +express-splitter=一种基于传送带的机器,包含拆分、合并以及分拣功能。 +se-gate-platform-scaffold=不管那个没法工作的环是什么。 在这个建筑工地进行一些维修,安装一些发动机,传感器,控制面板,和其他插件。 +se-gate-lock-switch=按 __CONTROL__rotate__ 来手动移动。 +se-gate-platform-button-switch=按 __CONTROL__rotate__ 来推动。 +se-gate-lock-combinator=功能尚未实现。 +se-gate-platform-combinator=功能尚未实现。 +se-gate-energy-interface=为遗迹供能。 +rocket-silo=将卫星发射到太空中以解锁“导航卫星模式”,并在发射卫星的恒星系统中发现新的行星、卫星和小行星带。 如果已经对当前系统进行了全面扫描,则会发现新的恒星。 +se-antimatter-reactor=通过湮灭反物质产生难以置信的高温。 +se-beryllium-ore=铍矿 +se-condenser-turbine=只有汽轮机能效的75%,但99%的蒸汽以水的形式返回。 温度范围:100到999。 \n最大输出功率:10MW。 +se-core-fragment-processor=从星核碎片中提取资源。 +se-core-miner=允许从行星和卫星中无限地提取资源,但在同个星体使用多个则会收益递减。 能耗50MW。 +se-core-miner-drill=允许从行星和卫星中无限地提取资源,但同个星体使用多个则会收益递减。 能耗50MW。 +se-dimensional-anchor=[font=default-bold][color=#f5cb48]放置限制:靠近恒星轨道[/color][/font]\n使用恒星的重力井作为空间异常的稳定点。 +se-electric-boiler=使用电力将水加热成蒸汽。 能效90%。 +se-fluid-burner-generator=需要有热值的液体燃料(如液体火箭燃料)来发电。 简单、紧凑,但缺乏大型蒸汽系统的能源效率。 为太空设计。 实际液体消耗量取决于液体热值。 +se-holmium-ore=钬矿 +se-iridium-ore=铱矿\n[font=default-bold][color=#e4cead]可开采:[/color][/font] [img=entity/area-mining-drill] __ENTITY__area-mining-drill__ +se-meteor-defence-container=陨石防御系统,范围可以覆盖整个星球,但同一时间只可攻击1个目标。 需要装填陨石防御弹药并且完全充能后才能发射。 命中率:80%,发射后需要一段时间重新充能。 充能时功率20MW。 +se-meteor-defence-charger=陨石防御系统,范围可以覆盖整个星球,但同一时间只可攻击1个目标。 需要装填陨石防御弹药并且完全充能后才能发射。 命中率:80%,发射后需要一段时间重新充能。 充能时功率20MW。 +se-meteor-point-defence-container=防御一定范围内的陨石。 可以同时射击4个目标。 需要装填陨石点防御弹药并且完全充能后才能发射。 范围:64,命中率:50%,发射后需要一段时间重新充能。 旋转以改变充电模式。 +se-meteor-point-defence-charger=防御一定范围内的陨石。 可以同时射击4个目标。 需要装填陨石点防御弹药并且完全充能后才能发射。 范围:64,命中率:50%,发射后需要一段时间重新充能。 旋转以改变充电模式。 +se-meteor-point-defence-charger-overcharged=防御一定范围内最多4颗陨石的袭击。 范围:64,命中率:50%,发射后需要一段时间重新充能。 超载可减少漏电的效果,但代价是发射时的功率波动。 +se-naquium-ore=寂介素矿 +se-rocket-launch-pad=将装载的货物发射至太空中。 可以搭载乘客,在舱门处按__CONTROL__toggle-driving__即可进入。 更多信息见[img=virtual-signal/informatron] 信息稽器人中的运载火箭 [__CONTROL__informatron__]。 +se-rocket-landing-pad=运载火箭载荷交付地点。 +se-space-assembling-machine=一台特制的组装机,可以在太空中工作。 +se-space-astrometrics-laboratory=组合、比较和量化来自不同天体的信息。 +se-space-biochemical-laboratory=一所重点研究生物化学的实验室。 也可以用来进行基本的化学反应和原油处理。 +se-space-capsule-_-vehicle=用来将乘客送回最近的行星地表。 按__CONTROL__toggle-driving__进入太空舱。 +se-space-decontamination-facility=净化需要在无菌环境中使用的物质,并制备低压条件下使用的液体。 +se-space-electromagnetics-laboratory=用于强磁场和极高电压环境下使用的设备。 +se-space-genetics-laboratory=一所用于基因测序、基因修饰和基因印刷的实验室。 +se-space-gravimetrics-laboratory=分析并模拟重力扰动。 +se-space-growth-facility=在一些常规环境下无法实现的条件下培育生物,如微重力环境。 +se-space-hypercooler=使用热流体进行热交换,使一端更热,另一端更冷。 +se-space-laser-laboratory=激光实验场所,必须佩戴护目镜。 +se-lifesupport-facility=在更加恶劣的环境中支持生命。 +se-space-manufactory=一个巨大的组装机,可以制作更复杂的配方。 只在太空(或飞船)中工作。 +se-space-material-fabricator=用来合成新材料,是粒子对撞机和3D打印机的完美融合。 +se-space-mechanical-laboratory=提供一系列的机械加工工序:破碎,撕裂,剪切,振动等。 +se-space-particle-accelerator=将粒子加速到亚光速。 +se-space-particle-collider=使高速粒子相互撞击并分析结果。 +se-space-pipe=不会阻挡您走路。 +se-space-pipe-long=一种更加经济的长距离输送流体的方式。 不会阻挡您走路。 +se-space-pipe-long-straight=长度__1__。侧面不会与其他管道连接。 适用于建造平行管道并长距离快速输送流体。 +se-space-pipe-long-junction=长度__1__。中间包含一个管道连接器。 适用于在装配线中快速输送流体。 +se-space-pipe-to-ground=昂贵且距离有限,仅用于特殊场合。 不会阻挡您走路。 +se-space-plasma-generator=产生各种等离子体。 +se-pulveriser=粉碎和研磨较硬的矿物和星核碎片。 +se-space-radiation-laboratory=提供一个相对安全的环境来处理放射性物质,可以用来处理铀。 +se-space-radiator=从高温热流体中散发出多余的热量。 +se-space-radiator-2=从过热的热流体中辐射出多余的热量。 +se-recycling-facility=回收废料和其他副产品并转化为资源。 +se-space-solar-panel=一种高效的太阳能板,您可以在上面行走。 +se-space-solar-panel-2=一种更加高效的太阳能板,您可以在上面行走。 +se-space-solar-panel-3=一种非常高效的太阳能板,您可以在上面行走。 +se-space-spectrometry-facility=分光光度法,气相色谱法,质谱法和其他光谱学。 向墙上发售物质,使其弯曲,看它击中哪里。 +se-space-supercomputer-1=对数据进行操作、处理和模拟。 +se-space-supercomputer-2=量子计算机。增强了对数据的操作、处理和模拟的能力。 +se-space-supercomputer-3=自适应神经网络量子计算机。增强了对数据的操作、处理和模拟的能力。 +se-space-supercomputer-4=一种纳米工程半有机超级计算机,利用空间扭曲和更高维度来提高处理密度和能量传输。 +se-space-straight-rail=专为太空使用而设计,在地面上也可使用。 +se-space-science-lab=使用高级研究包进行研究,仅可在太空中使用。 +se-space-telescope=精密的望远镜,对可见光谱范围内的多个波长敏感。 +se-space-telescope-gammaray=伽马射线不会折射。这个强大的望远镜使用镜子和特殊的传感器进行观测。 +se-space-telescope-xray=X射线会被大气层所阻挡,这个强大的望远镜转为真空环境设计,在这里大气层不再是问题。 +se-space-telescope-microwave=一台巨大的望远镜,可以探测微波和宇宙微波背景。 +se-space-telescope-radio=一台巨大的望远镜,可以探测从非常遥远距离发射的微弱的无线电波。 +se-space-thermodynamics-laboratory=进行涉及极端温度的加工处理。 也可以执行基本的热处理,例如冶炼。 +se-space-transport-belt=可以防止物品漂浮在空中的传送带。 +se-spaceship-antimatter-engine=[font=default-bold][color=#f5cb48]放置要求:飞船地板,[/color][/font]\n通过湮灭反物质射流来推进飞船。 此部件视为飞船的舱壁,可以保持船舱密封性。 +se-spaceship-antimatter-booster-tank=[font=default-bold][color=#f5cb48]放置要求:飞船地板,[/color][/font]\n存储反物质,用以飞船行驶。 飞船发射必备组件。 +se-spaceship-ion-engine=[font=default-bold][color=#f5cb48]放置要求:飞船地板[/color][/font]\n使用少量离子流但消耗大量电力来推进。 此部件视为飞船的舱壁,可以保持船舱密封性。 +se-spaceship-ion-booster-tank=[font=default-bold][color=#f5cb48]放置要求:飞船地板[/color][/font]\n存储离子流。 飞船发射必备组件,但只能从太空发射。 +se-spaceship-console=[font=default-bold][color=#f5cb48]放置要求:飞船地板,[/color][/font]\n用于操纵飞船在行星,卫星,轨道和小行星带之间移动。 必须放置于飞船地板,并使用飞船舱壁/舱门完全包围,不可留有缝隙和漏洞。 请仔细检查船舱密封性。 +se-spaceship-console-output=输出与飞船当前状态相关的信号。 更多信息请参见[img=virtual-signal/informatron]信息稽器人中的太空飞船分页[__CONTROL__informatron__]。 +se-spaceship-console-alt=[font=default-bold][color=#f5cb48]放置要求:飞船地板[/color][/font]\n该飞船控制台已受损,无法操控飞船。 +se-spaceship-gate=[font=default-bold][color=#f5cb48]放置要求:飞船地板,[/color][/font]\n包含一个力场,当舱门打开时也可以防止舱内失压。 此部件视为飞船的舱壁,可以保持船舱密封性。 +se-spaceship-rocket-engine=[font=default-bold][color=#f5cb48]放置要求:飞船地板,[/color][/font]\n燃烧化学燃料来推进飞船。 此部件视为飞船的舱壁,可以保持船舱密封性。 +se-spaceship-rocket-booster-tank=[font=default-bold][color=#f5cb48]放置要求:飞船地板,[/color][/font]\n存储化学燃料,用以飞船行驶。飞船发射必备组件。 +se-spaceship-wall=[font=default-bold][color=#f5cb48]放置要求:飞船地板,[/color][/font]\n作为飞船舱壁保持船舱密封性,请连续放置,对角线放置无法保持密封性。 +beacon=配备8个插件槽。 可以将插件的加成效果传送给附近3格范围内的友方机器。 使用多个插件分享塔为一个设施提供加成会使其过载并停止工作。 +se-wide-beacon=配备15个插件槽。 可以将插件的加成效果传送给附近14格范围内的友方机器。 使用多个插件分享塔为一个设施提供加成会使其过载并停止工作。 +se-wide-beacon-2=配备20个插件槽。 可以将插件的加成效果传送给附近14格范围内的友方机器。 使用多个插件分享塔为一个设施提供加成会使其过载并停止工作。 +kr-singularity-beacon=一种紧凑的100%效率的近程插件分享塔。 将插件的加成效果传送给附近2格范围内的友方机器。 使用多个插件分享塔为一个设施提供加成会使其过载并停止工作。 +se-supercharger=可以同时为64个机器人高速充电。 该设施最大功率1GW。 +se-addon-power-pole=一种被设计用来精确控制输电范围的附加式小型电线杆。 +se-pylon=传输电力。连接范围64格。 +se-pylon-substation=传输电力。 连接范围64格,输电范围64x64。 +se-pylon-construction=传输电力并能够扩展机器人建筑区。 连接范围64格,建筑区范围64x64。 +se-pylon-construction-radar=传输电力并能够扩展机器人建筑区,还能够提供雷达功能。 连接范围64格,建筑区/视野范围256x256。 4x4物流范围。 +se-shield-projector=创造一个保护力场。 当护盾投射器充能或防护罩承受伤害时,需要更多的能量。 如果安装了“Walls Block Spitters”Mod,则可以阻挡喷吐虫的酸液投射。 +se-big-turbine=[font=default-bold][color=#e4cead]最大输出:[/color][/font] 1GW。\n一种大型发电机,一端输入5000°C的蒸汽,并从另一端排出500°C的蒸汽,在侧面输出水。能效99%,99%的水可以循环使用。 +se-big-heat-exchanger=一种为高温和高容量而设计的大型换热器。 +se-delivery-cannon=一种能将物资发射入轨道或更远的轨道炮。 若无法安全接收会造成损坏,请谨慎使用。 +se-delivery-cannon-chest=一种装甲箱子,设计用于安全的接收高速下落的物资。 需要库存空间,以安全接收物资。 +se-delivery-cannon-weapon=能够将弹药发射到轨道上甚至更远的大型轨道炮。 谨慎使用。 +se-spaceship-clamp=飞船上的夹钳可以锚定在反向夹钳上从而使飞船停泊。 此部件视为飞船的舱壁,可以保持船舱密封性。 +se-spaceship-clamp-place=飞船上的夹钳可以锚定在反向夹钳上从而使飞船停泊。 此部件视为飞船的舱壁,可以保持船舱密封性。 +se-spaceship-clamp-power-pole-external-east=卡钳上的接线点。在锚定的时将电路信号和电力传输给所对接的卡钳。 +se-spaceship-clamp-power-pole-external-west=卡钳上的接线点。在锚定的时将电路信号和电力传输给所对接的卡钳。 +se-space-accumulator=能量密度极高。 +se-space-accumulator-2=能量密度极高。 +se-energy-transmitter-emitter=生产表面间能量束的中心建筑。 可用作武器或向能量束接收器传输能量。 需要附加的能量束室,以及连接的能量束注入器。光束强度基于注入器的数量。 +se-energy-transmitter-chamber=必须与能量束发射器相连。 其他腔室可以连接到两边的末端或中间。 能量束注入器只能连接到两侧。 +se-energy-transmitter-injector=必须连接到能量束室并连接到发射器。 注入器有固定的功率消耗,每一个注入器都会增加发送器给接收器传输的热量,或者增加能量束武器的速度和伤害。 +se-energy-transmitter-injector-reactor=必须连接到能量束室并连接到发射器。 注入器有固定的功率消耗,每一个注入器都会增加发送器给接收器传输的热量,或者增加能量束武器的速度和伤害。 +se-energy-receiver=以热能形式捕获能量束。 发射器必须处于输能模式,目标必须在接收器上。 +se-energy-beam-defence=能量束防御设施。 防御天基能量束和日冕物质喷射。 运作的唯一要求是电力,基础能耗为10MW,但会根据来袭能量束的强度而增加。 对付日冕物质喷射,每个表面只需要1个,对付能量束武器,1个保护伞可以防御高达500GW的攻击力。在[img=virtual-signal/informatron]信息稽器人[__CONTROL__informatron__]的能量束页面查看详情。 +spidertron=如果运载火箭没有降落在着陆台,可从中部署。 +se-nexus=只在移动的飞船上发挥作用,能耗与速度成正比。 可以从星际运动中获取数据,数据生成基于飞船动能。 枢纽的设计是作为扭曲驱动,如果有合适的技术,可以逃离本地恒星群。 +se-nexus-charger=只在移动的飞船上发挥作用,能耗与速度成正比。 可以从星际运动中获取数据,数据生成基于飞船动能。 枢纽的设计是作为扭曲驱动,如果有合适的技术,可以逃离本地恒星群。 +se-space-probe-rocket-silo=用于发射太空探测器的火箭发射井。 +se-linked-container=由高维空间与其他容器相连的容器。 容器的连接取决于它首次放置的表面。 + +[equipment-name] +energy-shield-equipment=能量盾 +energy-shield-mk2-equipment=能量盾 MK2 +energy-shield-mk3-equipment=能量盾 MK3 +energy-shield-mk4-equipment=能量盾 MK4 +energy-shield-mk5-equipment=能量盾 MK5 +energy-shield-mk6-equipment=能量盾 MK6 +se-adaptive-armour-equipment-1=适应性装甲 MK1 +se-adaptive-armour-equipment-2=适应性装甲 MK2 +se-adaptive-armour-equipment-3=适应性装甲 MK3 +se-adaptive-armour-equipment-4=适应性装甲 MK4 +se-adaptive-armour-equipment-5=适应性装甲 MK5 +se-rtg-equipment=便携式 RTG +se-rtg-equipment-2=便携式 RTG MK2 +se-lifesupport-equipment-1=维生装备 MK1 +se-lifesupport-equipment-2=维生装备 MK2 +se-lifesupport-equipment-3=维生装备 MK3 +se-lifesupport-equipment-4=维生装备 MK4 + +[equipment-description] +energy-shield-equipment=护盾发生器,充能快速但会消耗很多能量。 +energy-shield-mk2-equipment=护盾发生器,充能快速但会消耗很多能量。 +energy-shield-mk3-equipment=护盾发生器,充能快速但会消耗很多能量。 +energy-shield-mk4-equipment=护盾发生器,充能快速但会消耗很多能量。 +energy-shield-mk5-equipment=护盾发生器,充能快速但会消耗很多能量。 +energy-shield-mk6-equipment=护盾发生器,充能快速但会消耗很多能量。 +se-adaptive-armour-equipment-1=可以使用能量进行自我修复的装甲。 会随时间推移缓慢增加护甲值。 +se-adaptive-armour-equipment-2=可以使用能量进行自我修复的装甲。 会随时间推移缓慢增加护甲值。 +se-adaptive-armour-equipment-3=可以使用能量进行自我修复的装甲。 会随时间推移缓慢增加护甲值。 +se-adaptive-armour-equipment-4=可以使用能量进行自我修复的装甲。 会随时间推移缓慢增加护甲值。 +se-adaptive-armour-equipment-5=可以使用能量进行自我修复的装甲。 会随时间推移缓慢增加护甲值。 +se-rtg-equipment=放射性同位素热电式发电机。 一个可以将放射性物质衰变时产生的热量转化为电力的便携式装置。 可以持续运行数十年,期间无需添加燃料。 +se-rtg-equipment-2=放射性同位素热电式发电机。 一个可以将放射性物质衰变时产生的热量转化为电力的进阶型便携装置。 可以持续运行数十年,期间无需添加燃料。 +se-lifesupport-equipment-1=提高生命维持效率+100%(加法叠加)。 如果安装在非宇航服中,效率加成会降低一半且无法在太空生效。 +se-lifesupport-equipment-2=提高生命维持效率+200%(加法叠加)。 如果安装在非宇航服中,效率加成会降低一半且无法在太空生效。 +se-lifesupport-equipment-3=提高生命维持效率+400%(加法叠加)。 如果安装在非宇航服中,效率加成会降低一半且无法在太空生效。 +se-lifesupport-equipment-4=提高生命维持效率+800%(加法叠加)。 如果安装在非宇航服中,效率加成会降低一半且无法在太空生效。 + +[fluid-name] +se-antimatter-stream=反物质流 +se-bio-sludge=生化软泥 +se-contaminated-bio-sludge=生化污泥 +se-contaminated-space-water=宇宙污水 +se-chemical-gel=化学凝胶 +se-decompressing-steam=冷凝蒸汽 +se-liquid-rocket-fuel=液体火箭燃料 +se-methane-gas=甲烷气体 +se-methane-gas-mixed=混合的甲烷气体 +se-nutrient-gel=营养凝胶 +se-neural-gel=神经凝胶 +se-neural-gel-2=高级神经凝胶 +se-ion-stream=离子流 +se-plasma-stream=等离子流 +se-particle-stream=粒子流 +se-proton-stream=质子流 +se-space-coolant=25°C热流体 +se-space-coolant-hot=25°C热流体 +se-space-coolant-warm=-10°C热流体 +se-space-coolant-cold=-100°C热流体 +se-space-coolant-supercooled=-273°C超低温热流体 +se-space-water=宇宙水 +se-beryllium-hydroxide=氢氧化铍 +se-cryonite-slush=冰晶石浆 + +[fluid-description] +se-space-water=不会在低温低压下冻结的水,适合在太空环境下使用。 +se-space-coolant=热流体的默认温度。 +se-space-coolant-hot=热流体的默认温度。 +se-space-coolant-warm=热流体被热散热器冷却后的温度。 +se-space-coolant-cold=热流体经过超级冷却器冷却后的温度。 +se-space-coolant-supercooled=热流体重复经过超级冷却器冷却后的温度。 + +[fuel-category-name] +antimatter=反物质燃料 + +[item-group-name] +space=太空 +science=科技 +spaceship=飞船 +bob-fluids=流体 +resources=资源 +intermediate-products=制造 +combat=装备&战斗 + +[item-name] +spidertron=蜘蛛机甲 +core-fragment=星核碎片(__1__) +effectivity-module-4=节能插件 4 +effectivity-module-5=节能插件 5 +effectivity-module-6=节能插件 6 +effectivity-module-7=节能插件 7 +effectivity-module-8=节能插件 8 +effectivity-module-9=节能插件 9 +glass=玻璃 +productivity-module-4=产能插件 4 +productivity-module-5=产能插件 5 +productivity-module-6=产能插件 6 +productivity-module-7=产能插件 7 +productivity-module-8=产能插件 8 +productivity-module-9=产能插件 9 +rocket-fuel=固态火箭燃料 +sand=沙子 +solid-sand=洗过的沙子 +washed-sand=洗过的沙子 +satellite=导航卫星 +se-satellite-telemetry=卫星遥测数据 +se-antimatter-canister=反物质罐 +se-astrometric-data=天体测量数据 +se-astronomic-catalogue-1=天文学目录 +se-astronomic-catalogue-2=通用天文学目录 +se-astronomic-catalogue-3=综合天文学目录 +se-astronomic-catalogue-4=扩展天文学目录 +se-astronomic-insight=天文学见解 +se-astronomic-science-pack-1=天文学科研包 1 +se-astronomic-science-pack-2=天文学科研包 2 +se-astronomic-science-pack-3=天文学科研包 3 +se-astronomic-science-pack-4=天文学科研包 4 +se-atomic-data=原子数据 +se-beryllium-ore=绿柱石 +se-ballistic-shielding-data=弹道防护数据 +se-beryllium-ore-crushed=粉碎的绿柱石 +se-beryllium-ore-washed=洗过的绿宝石 +se-beryllium-plate=铍板 +se-beryllium-powder=铍粉 +se-beryllium-ingot=铍锭 +se-beryllium-sulfate=硫酸铍 +se-bio-combustion-data=生物燃烧数据 +se-bio-combustion-resistance-data=生物燃烧抗性数据 +se-bio-spectral-data=生物光谱数据 +se-biochemical-data=生化数据 +se-biochemical-resistance-data=生化抗性数据 +se-bioculture=生物培养 +se-bioelectrics-data=生物电数据 +se-biological-catalogue-1=生物学目录 +se-biological-catalogue-2=通用生物学目录 +se-biological-catalogue-3=综合生物学目录 +se-biological-catalogue-4=扩展生物学目录 +se-biological-insight=生物学见解 +se-biological-science-pack-1=生物学科研包 1 +se-biological-science-pack-2=生物学科研包 2 +se-biological-science-pack-3=生物学科研包 3 +se-biological-science-pack-4=生物学科研包 4 +se-biomechanical-data=生物力学数据 +se-biomechanical-resistance-data=生物力学抗性数据 +se-boson-data=玻色子数据 +se-broken-data=损坏的数据卡 +se-canister=安全罐 +se-biogun=生化枪 +se-bloater-ammo=酸液爆裂弹 +se-pheromone-ammo=信息素镖 +se-cryogun=冷冻枪 +se-cryogun-ammo=冰川弹药 +se-rocket-launch-pad-silo-dummy-ingredient-item=运载火箭(隐藏原料) +se-rocket-launch-pad-silo-dummy-result-item=运载火箭(隐藏产品) +se-cargo-rocket-cargo-pod=货舱 +se-cargo-rocket-fuel-tank=火箭燃料罐 +se-cargo-rocket-section=运载火箭区段 +se-cargo-rocket-section-packed=打包的运载火箭区段 +se-cold-thermodynamics-data=低温热力学数据 +se-comparative-genetic-data=基因比较数据 +se-compressive-strength-data=抗压强度数据 +se-conductivity-data=电导率数据 +se-contaminated-scrap=污料 +se-core-fragment-omni=星核碎片 +se-corrosion-resistance-data=耐腐蚀数据 +se-cryogenics-data=低温数据 +se-cryonite=冰晶石 +se-cryonite-crushed=粉碎的冰晶石 +se-cryonite-washed=洗过的冰晶石 +se-cryonite-rod=冰晶石棒 +se-cryonite-ion-exchange-beads=阴离子交换珠 +se-dark-energy-data=暗能量数据 +se-darkmatter-data=暗物质数据 +se-data-storage-substrate-cleaned=抛光的数据存储基板 +se-data-storage-substrate=粗糙的数据存储基板 +se-decompression-data=减压数据 +se-decompression-resistance-data=减压抗性数据 +se-universal-catalogue=宇宙学目录 +se-deep-space-science-pack=深空科学研究包 +se-deep-space-science-pack-1=深空科学研究包 1 +se-deep-space-science-pack-2=深空科学研究包 2 +se-deep-space-science-pack-3=深空科学研究包 3 +se-deep-space-science-pack-4=深空科学研究包 4 +se-doppler-shift-data=多普勒频移数据 +se-durability-data=耐久性数据 +se-electrical-shielding-data=电击防护数据 +se-electromagnetic-field-data=电磁场数据 +se-empty-data=空白数据卡 +se-empty-lifesupport-canister=空的维生罐 +se-energy-catalogue-1=能量目录 +se-energy-catalogue-2=通用能量目录 +se-energy-catalogue-3=综合能量目录 +se-energy-catalogue-4=扩展能量目录 +se-energy-insight=能量学见解 +se-energy-science-pack-1=能量科研包 1 +se-energy-science-pack-2=能量科研包 2 +se-energy-science-pack-3=能量科研包 3 +se-energy-science-pack-4=能量科研包 4 +se-entanglement-data=纠缠数据 +se-enriched-naquium=富化寂介素 +se-exotic-fission-data=奇异裂变数据 +se-exotic-singularity-data=奇点数据 +se-explosion-shielding-data=爆炸防护数据 +se-experimental-alloys-data=实验合金数据 +se-experimental-biochemical-data=实验生化数据 +se-experimental-bioculture=实验生物培养 +se-experimental-genetic-data=实验遗传学数据 +se-experimental-material-decay-data=实验材料老化数据 +se-experimental-material-spectral-data=实验材料光谱数据 +se-experimental-material=原型实验材料 +se-experimental-specimen=实验生物质 +se-experimental-superconductor=原型超导体 +se-forcefield-data=力场数据 +se-friction-data=摩擦数据 +se-fusion-test-data=聚变实验数据 +se-gammaray-detector=伽马射线探测器 +se-gammaray-observation-data=伽马射线观测数据 +se-gammaray-test-data=伽玛射线数据 +se-gate-fragment=遗迹碎片 +se-genetic-data=遗传学数据 +se-gravity-wave-observation-data=引力波观测数据 +se-gravity-wave-data=引力波数据 +se-gravimetric-observation-data=引力观测数据 +se-gravimetric-test-data=重力学测试数据 +se-gravitational-lensing-data=引力透镜效应数据 +se-heat-shielding=隔热瓦 +se-holmium-ore=钬矿 +se-holmium-ore-crushed=粉碎的钬矿石 +se-holmium-ore-washed=洗过的钬矿石 +se-holmium-powder=钬粉 +se-holmium-plate=钬板 +se-holmium-ingot=钬锭 +se-hot-thermodynamics-data=高温热力学数据 +se-impact-shielding-data=冲击防护数据 +se-infrared-observation-data=红外观测数据 +se-ion-spectrometry-data=离子光谱数据 +se-iridium-ore=铱矿 +se-iridium-ore-crushed=粉碎的铱矿石 +se-iridium-ore-washed=洗过的铱矿石 +se-iridium-piledriver=铱桩 +se-iridium-powder=铱粉 +se-iridium-plate=铱板 +se-iridium-ingot=铱锭 +se-junk-data=垃圾数据卡 +se-laser-shielding-data=激光防护数据 +se-lepton-data=轻子数据 +se-lifesupport-canister=维生罐 +se-machine-learning-data=机器学习数据 +se-magnetic-canister=磁力罐 +se-magnetic-monopole-data=磁单极子数据 +se-material-decay-data=材料老化数据 +se-material-science-pack-1=材料科研包 1 +se-material-science-pack-2=材料科研包 2 +se-material-science-pack-3=材料科研包 3 +se-material-science-pack-4=材料科研包 4 +se-material-spectral-data=材料光谱数据 +se-material-testing-pack=材料测试包 +se-material-catalogue-1=材料目录 +se-material-catalogue-2=通用材料目录 +se-material-catalogue-3=综合材料目录 +se-material-catalogue-4=扩展材料目录 +se-material-insight=材料学见解 +se-medpack=医疗包 +se-medpack-2=医疗包 2 +se-medpack-3=医疗包 3 +se-medpack-4=医疗包 4 +se-meteor-defence=广域陨石防御系统 +se-meteor-defence-ammo=陨石防御弹药 +se-meteor-point-defence=陨石点防御系统 +se-meteor-point-defence-ammo=陨石点防御弹药 +se-methane-ice=甲烷冰 +se-micro-black-hole-data=微型黑洞数据 +se-microwave-observation-data=微波观测数据 +se-negative-pressure-data=负压数据 +se-nano-cold-thermodynamics-data=纳米材料低温热力学数据 +se-nano-compressive-strength-data=纳米材料抗压强度数据 +se-nano-hot-thermodynamics-data=纳米材料高温热力学数据 +se-nanomaterial=纳米材料 +se-nano-tensile-strength-data=纳米材料拉伸强度数据 +se-naquium-ore=寂介素矿 +se-naquium-ore-crushed=粉碎的寂介素矿 +se-naquium-ore-washed=洗过的寂介素矿 +se-naquium-powder=寂介素粉 +se-naquium-plate=寂介素板 +se-naquium-ingot=寂介素锭 +se-neural-anomaly-data=神经异常数据 +se-nutrient-vat=营养物池 +se-observation-frame-blank=空观测框架 +se-observation-frame-gammaray=伽马射线观测框架 +se-observation-frame-infrared=红外观测框架 +se-observation-frame-microwave=微波观测框架 +se-observation-frame-radio=无线电波观测框架 +se-observation-frame-uv=紫外线观测框架 +se-observation-frame-visible=可见光观测框架 +se-observation-frame-xray=X射线观测框架 +se-orbital-data=轨道计算数据 +se-particle-beam-shielding-data=粒子束防护数据 +se-plague-bomb=瘟疫火箭弹 +se-plasma-canister=等离子罐 +se-plasma-electrodynamics-data=等离子体电动力学数据 +se-plasma-thermodynamics-data=等离子体热力学数据 +se-polarisation-data=极化数据 +se-pressure-containment-data=压力遏制数据 +se-quantum-phenomenon-data=量子现象数据 +se-quark-data=夸克数据 +se-radiation-data=辐射数据 +se-radiation-exposure-data=辐射暴露数据 +se-radiation-exposure-resistance-data=辐射抗性数据 +se-radiation-shielding-data=辐射防护数据 +se-radio-observation-data=无线电波观测数据 +se-rigidity-data=硬度数据 +se-rtg-equipment=便携式 RTG +se-rtg-equipment-2=便携式 RTG MK2 +se-scrap=废料 +se-shear-strength-data=抗剪强度数据 +se-significant-data=显著数据 +se-significant-specimen=有效生物质 +se-singularity-data=奇点数据 +se-space-capsule=太空舱 +se-space-mirror=多光谱镜 +se-space-platform-plating=镀层轨道平台 +se-space-platform-scaffold=轨道平台框架 +se-space-rail=太空铁路 +se-spaceship-floor=飞船地板 +se-specimen=生物质 +se-subatomic-data=亚原子数据 +se-superconductivity-data=超导数据 +se-superconductor=超导体 +se-superconductive-cable=超导电缆 +se-tensile-strength-data=拉伸强度数据 +se-tesla-ammo=特斯拉枪弹药 +se-tesla-gun=特斯拉枪 +se-thruster-suit=推进太空服 +se-thruster-suit-2=推进太空服 MK2 +se-thruster-suit-3=推进太空服 MK3 +se-thruster-suit-4=推进太空服 MK4 +se-timespace-anomaly-data=时空异常数据 +se-used-lifesupport-canister=用过的维生罐 +se-uv-observation-data=紫外观测数据 +se-visible-observation-data=可见光观测数据 +se-vitamelange=维生质 +se-vitamelange-nugget=维生质块 +se-vitamelange-roast=烘烤维生质 +se-vitamelange-spice=维生质香料 +se-vitamelange-extract=维生质提取 +se-vulcanite=火成岩 +se-vulcanite-crushed=粉碎的火成岩 +se-vulcanite-washed=洗过的火成岩 +se-vulcanite-block=火成岩块 +se-vulcanite-ion-exchange-beads=阳离子交换珠 +se-water-ice=水冰 +se-xray-observation-data=X 射线观测数据 +se-zero-point-energy-data=零点能量数据 +se-rocket-science-pack=火箭科研包 +space-science-pack=优化研究包 +speed-module-4=速度插件 4 +speed-module-5=速度插件 5 +speed-module-6=速度插件 6 +speed-module-7=速度插件 7 +speed-module-8=速度插件 8 +speed-module-9=速度插件 9 +se-aeroframe-pole=航空框架杆 +se-aeroframe-scaffold=航空框架支架 +se-aeroframe-bulkhead=航空框架隔板 +se-lattice-pressure-vessel=晶格压力容器 +se-heavy-girder=重型梁 +se-heavy-bearing=重型轴承 +se-heavy-composite=重型复合材料 +se-heavy-assembly=重型组装 +se-bioscrubber=生物洗涤器 +se-vitalic-epoxy=维生质环氧树脂 +se-vitalic-reagent=维生质试剂 +se-vitalic-acid=维生质酸 +se-self-sealing-gel=自封凝胶 +se-holmium-cable=钬电缆 +se-holmium-solenoid=钬螺线管 +se-quantum-processor=量子处理器 +se-dynamic-emitter=动态发射器 +se-naquium-processor=寂介素处理器 +se-naquium-cube=寂介素立方体 +se-naquium-tessaract=寂介素超正方体 +se-wide-beacon=广域插件分享塔 +se-wide-beacon-2=广域插件分享塔 2 +se-lifesupport-equipment-1=维生装备 MK1 +se-lifesupport-equipment-2=维生装备 MK2 +se-lifesupport-equipment-3=维生装备 MK3 +se-lifesupport-equipment-4=维生装备 MK4 +se-naquium-heat-pipe=寂介素热管 +se-naquium-heat-pipe-horizontal=水平寂介素热管 +se-naquium-heat-pipe-vertical=垂直寂介素热管 +se-naquium-heat-pipe-long=寂介素热管长度 __1__ +se-deep-space-transport-belt=深空传送带 +se-deep-space-transport-belt-black=黑色深空传送带 +se-deep-space-transport-belt-white=白色深空传送带 +se-deep-space-transport-belt-red=红色深空传送带 +se-deep-space-transport-belt-yellow=黄色深空传送带 +se-deep-space-transport-belt-green=绿色深空传送带 +se-deep-space-transport-belt-cyan=青色深空传送带 +se-deep-space-transport-belt-blue=蓝色深空传送带 +se-deep-space-transport-belt-magenta=品红深空传送带 +se-deep-space-underground-belt=深空地下传送带 +se-deep-space-underground-belt-black=黑色深空地下传送带 +se-deep-space-underground-belt-white=白色深空地下传送带 +se-deep-space-underground-belt-red=红色深空地下传送带 +se-deep-space-underground-belt-yellow=黄色深空地下传送带 +se-deep-space-underground-belt-green=绿色深空地下传送带 +se-deep-space-underground-belt-cyan=青色深空地下传送带 +se-deep-space-underground-belt-blue=蓝色深空地下传送带 +se-deep-space-underground-belt-magenta=品红深空地下传送带 +se-deep-space-splitter=深空分流器 +se-deep-space-splitter-black=黑色深空分流器 +se-deep-space-splitter-white=白色深空分流器 +se-deep-space-splitter-red=红色深空分流器 +se-deep-space-splitter-yellow=黄色深空分流器 +se-deep-space-splitter-green=绿色深空分流器 +se-deep-space-splitter-cyan=青色深空分流器 +se-deep-space-splitter-blue=蓝色深空分流器 +se-deep-space-splitter-magenta=品红深空分流器 +se-blueprint-registration-point=蓝图定位点 +se-delivery-cannon-capsule=货运火炮货舱 +se-delivery-cannon-capsule-packed=货运火炮货舱:__1__ +se-delivery-cannon-targeter=货运火炮瞄准器 +se-delivery-cannon-weapon-capsule=武器投送舱 +se-delivery-cannon-weapon-capsule-packed=武器投送仓:__1__ +se-delivery-cannon-weapon-targeter=武器投送火炮瞄准器 +se-energy-transmitter-targeter=能量束瞄准器 +se-arcosphere=曲虹球 +se-arcosphere-a=λ 曲虹球拉姆达 +se-arcosphere-b=ξ 曲虹球克西 +se-arcosphere-c=ζ 曲虹球泽塔 +se-arcosphere-d=θ 曲虹球西塔 +se-arcosphere-e=ε 曲虹球艾普西隆 +se-arcosphere-f=φ 曲虹球斐 +se-arcosphere-g=γ 曲虹球伽玛 +se-arcosphere-h=ω 曲虹球欧米伽 +se-arcosphere-collector=曲虹球收集器 +se-star-probe=恒星探测器 +se-belt-probe=小行星带探测器 +se-void-probe=星际虚空探测器 +se-star-probe-data=恒星探测数据 +se-belt-probe-data=小行星带探测数据 +se-void-probe-data=星际虚空探测数据 +se-nano-engineering-data=纳米工程数据 +se-annihilation-data=湮灭数据 +se-naquium-structural-data=寂介素结构数据 +se-hyperlattice-data=超晶格数据 +se-naquium-energy-data=寂介素能量数据 +se-space-fold-data=空间折叠数据 +se-space-warp-data=空间翘曲数据 +se-space-dialation-data=空间扩张数据 +se-space-injection-data=空间注入数据 +se-interstellar-data=星际旅行数据 +se-teleportation-data=传送数据 +se-wormhole-data=虫洞数据 +se-rhga-data=现实超图分析数据 +se-deep-catalogue-1=深空目录 +se-deep-catalogue-2=通用深空目录 +se-deep-catalogue-3=综合深空目录 +se-deep-catalogue-4=扩展深空目录 +se-space-probe-rocket=太空探测火箭 +se-space-probe-rocket-deployed=太空探测火箭(已部署) +se-railgun=轨道枪 +se-railgun-ammo=轨道枪弹药 + +[item-description] +automation-science-pack=用于基础研究所研究使用。 +chemical-science-pack=用于基础研究所研究使用。 +logistic-science-pack=用于基础研究所研究使用。 +military-science-pack=用于基础研究所研究使用。 +production-science-pack=用于基础研究所研究使用。 +satellite=卫星应放在卫星火箭发射井或(或太空探测器火箭发射井)。 卫星可以发现其发射的恒星系内的天体或遥远的恒星的精确坐标。 提供[img=item/se-satellite-telemetry]卫星遥测数据。 +se-satellite-telemetry=火箭科研包所需的卫星遥测数据记录。 通过从卫星火箭发射井(或太空探测火箭发射井)发射[img=item/satellite]导航卫星获得。 +se-antimatter-canister=安全存储和运输极高能量密度物质的容器。 +se-astronomic-science-pack-1=用于空间科学实验室的研究。 +se-astronomic-science-pack-2=用于空间科学实验室的研究。 +se-astronomic-science-pack-3=用于空间科学实验室的研究。 +se-astronomic-science-pack-4=用于空间科学实验室的研究。 +se-beryllium-ore=铍矿石 +se-biological-science-pack-1=用于空间科学实验室的研究。 +se-biological-science-pack-2=用于空间科学实验室的研究。 +se-biological-science-pack-3=用于空间科学实验室的研究。 +se-biological-science-pack-4=用于空间科学实验室的研究。 +se-canister=多用途容器。 +se-cargo-rocket-cargo-pod=运载火箭组件之一。 +se-cargo-rocket-fuel-tank=运载火箭组件之一。 +se-cargo-rocket-section=运载火箭关键组件。每枚运载火箭需要100个运载火箭区段。 可从着陆的火箭中回收。(基础回收率20%) +se-cargo-rocket-section-packed=将运载火箭区段打包以方便运输。 必须先解包才能使用。 +se-bloater-ammo=在地面上形成一个具有传染性的生化污泥池。 被感染的敌人会肿胀,移动速度降低并且受到持续伤害。 如果它们在肿胀的时候死亡,它们的尸体会爆裂,飞溅出的内脏会对附近的敌人造成伤害,可能会造成连锁反应。 爆裂产生的投射物的总伤害为目标最大生命值的50%。 +se-pheromone-ammo=使敌对撕咬虫和喷吐虫产生混乱,让它们认为你是友方并将同族视为敌人。 +se-cryogun=制造一堵能冻结敌人的冰墙。 +se-deep-space-science-pack=用于太空研究所研究使用。 +se-energy-science-pack-1=用于空间科学实验室的研究。 +se-energy-science-pack-2=用于空间科学实验室的研究。 +se-energy-science-pack-3=用于空间科学实验室的研究。 +se-energy-science-pack-4=用于空间科学实验室的研究。 +se-heat-shielding=用于抵抗高温和真空环境的复合板。 +se-holmium-ore=钬矿 +se-iridium-ore=铱矿 +se-material-science-pack-1=用于空间科学实验室的研究。 +se-material-science-pack-2=用于空间科学实验室的研究。 +se-material-science-pack-3=用于空间科学实验室的研究。 +se-material-science-pack-4=用于空间科学实验室的研究。 +se-medpack=使用来治愈自己。 +se-medpack-2=使用来治愈自己。 +se-medpack-3=使用来治愈自己。 +se-medpack-4=使用来治愈自己。 +se-meteor-defence=可以覆盖整个星球的陨石防御系统,但同一时间只可攻击1个目标。 需要装填陨石防御弹药并且完全充能后才能发射。 命中率:80%,发射后需要一段时间重新充能。 +se-meteor-defence-ammo=可以摧毁陨石,必须安装于广域陨石防御系统中。 +se-meteor-point-defence=防御一定范围内的陨石。 可以同时射击4个目标。 需要装填陨石点防御弹药并且完全充能后才能发射。 范围:64,命中率:50%,发射后需要一段时间重新充能。 +se-meteor-point-defence-container=可以摧毁陨石,必须安装于陨石点防御系统中。 +se-naquium-ore=寂介素矿石,只能在深空发现,是星际虚空的宝藏。 +se-rocket-launch-pad-silo-dummy-ingredient-item=将100个运载火箭区段和1个太空舱放入运载火箭发射井来建造。 +se-rtg-equipment=放射性同位素热电式发电机。 一个可以将放射性物质衰变时产生的热量转化为电力的便携式装置。 可以持续运行数十年,期间无需添加燃料。 +se-rtg-equipment-2=放射性同位素热电式发电机。 一个可以将放射性物质衰变时产生的热量转化为电力的进阶型便携装置。 可以持续运行数十年,期间无需添加燃料。 +se-plague-bomb=威力足以消灭一个星球上的所有生物,使用时请格外小心。(可能会严重降低UPS,因为所有东西都会逐渐死亡,不建议在大型星球或多人游戏中使用。) +se-space-capsule=运载火箭必须的控制舱,可以将乘客送回最近行星的地表。 按__CONTROL__toggle-driving__进入太空舱。 +se-space-platform-plating=[font=default-bold][color=#f5cb48]仅能放置在:太空[/color][/font]高级镀层轨道平台,允许在轨道平台上快速移动。 +se-space-platform-scaffold=[font=default-bold][color=#f5cb48]仅能放置在:太空[/color][/font]基础的轨道平台框架,允许您在空间放置某些结构。 +se-space-rail=安全的太空铁路,因为他们可以防止火车从轨道上飞出并毁掉一切。 因其美观性,也可以在地面使用。 +se-spaceship-floor=这种地板必须安置在飞船部件的下方,且外围需要被飞船舱壁完全包裹。 地板上的任何缝隙都会导致密封性受损,导致该区块脱离飞船。 +se-superconductive-cable=一根无需主动散热装置的超导电缆。 +se-tesla-gun=速射闪电链。 +se-thruster-suit=太空中生存所必须的太空服。\n配有喷气推进器和磁力鞋。 +se-thruster-suit-2=太空中生存所必须的太空服。\n拥有更强劲的推进器,增加背包空间和插槽空间。 +se-thruster-suit-3=太空中生存所必须的太空服。\n拥有更强劲的推进器,增加背包空间和插槽空间。 +se-thruster-suit-4=太空中生存所必须的太空服。\n拥有更强劲的推进器,增加背包空间和插槽空间。 +space-science-pack=用于许多现有项目的升级。 +se-rocket-science-pack=用于空间科学实验室的研究。 必须在太空中制造。 +utility-science-pack=用于基础研究所研究使用。 +beacon=配备8个插件槽。 可以将插件的加成效果传送给附近3格范围内的友方机器。 使用多个插件分享塔为一个设施提供加成会使其过载并停止工作。 +se-wide-beacon=配备15个插件槽。 可以将插件的加成效果传送给附近14格范围内的友方机器。 使用多个插件分享塔为一个设施提供加成会使其过载并停止工作。 +se-wide-beacon-2=配备20个插件槽。 可以将插件的加成效果传送给附近14格范围内的友方机器。 使用多个插件分享塔为一个设施提供加成会使其过载并停止工作。 +se-lifesupport-equipment-1=提高生命维持效率+100%(加法叠加)。 如果安装在非宇航服中,效率加成会降低一半且无法在太空生效。 +se-lifesupport-equipment-2=提高生命维持效率+200%(加法叠加)。 如果安装在非宇航服中,效率加成会降低一半且无法在太空生效。 +se-lifesupport-equipment-3=提高生命维持效率+400%(加法叠加)。 如果安装在非宇航服中,效率加成会降低一半且无法在太空生效。 +se-lifesupport-equipment-4=提高生命维持效率+800%(加法叠加)。 如果安装在非宇航服中,效率加成会降低一半且无法在太空生效。 +se-delivery-cannon=可以将内容物准确发射到指定地点的货运火炮。 +se-delivery-cannon-weapon=可以通过武器投送炮精确投送特种弹药。 +se-arcosphere=发现于星际虚空。 +se-deep-catalogue-1=寂介素和纳米工程。 +se-deep-catalogue-2=超晶格结构,奇点和湮灭。 +se-deep-catalogue-3=微观空间扭曲和超维纳米工程。 +se-deep-catalogue-4=宏观空间扭曲和超维旅行。 +se-arcosphere-collector=从星际虚空中收集曲虹球。 必须从位于小行星区的太空探测火箭井发射。曲虹球随着收集的数量越多越难找到。 +se-star-probe=收集恒星数据并获得[img=item/se-star-probe-data]恒星探测数据。 必须从位于近恒星轨道的太空探测火箭井发射。 +se-belt-probe=收集小行星带数据并获得[img=item/se-belt-probe-data]小行星带探测数据。 必须从位于小行星带的太空探测火箭井发射。 +se-void-probe=收集虚空数据并获得[img=item/se-void-probe-data]星际虚空探测数据。 必须从位于小行星区的太空探测火箭井发射。 +se-interstellar-data=在移动飞船中的枢纽中制造。 在星际空间中用更大的飞船以更快的速度移动可以加快数据的生产。 + +[recipe-name] +core-fragment=星核碎片处理设施(__1__) +rocket-fuel=固态火箭燃料 +se-astrometric-analysis-multispectral-1=多光谱天体测量分析 1 +se-astrometric-analysis-multispectral-2=多光谱天体测量分析 2 +se-astrometric-analysis-multispectral-3=多光谱天体测量分析 3 +se-astronomic-insight-1=天文学见解 +se-astronomic-insight-2=通用天文学见解 +se-astronomic-insight-3=综合天文学见解 +se-astronomic-insight-4=扩展天文学见解 +se-biological-insight-1=生物学见解 +se-biological-insight-2=通用生物学见解 +se-biological-insight-3=综合生物学见解 +se-biological-insight-4=扩展生物学见解 +se-bio-methane-to-crude-oil=生化转换甲烷至原油 +se-bio-sludge-crude-oil=从实验性生物质提取生化软泥 +se-bio-sludge-decontamination=生化污泥净化 +se-bio-sludge-from-fish=从鱼类提取生化软泥 +se-bio-sludge-from-wood=从木材提取生化软泥 +se-bio-sludge-from-vitamelange=由维生质生成生化软泥 +se-bio-sludge=从生物质提取生化软泥 +se-broken-data-scrapping=报废破损的数据卡 +se-cargo-rocket-section-pack=打包运载火箭区段 +se-cargo-rocket-section-unpack=解包运载火箭区段 +se-condenser-turbine-reclaim-water=水回收发电 +se-core-fragment-omni=星核碎片处理 +se-core-mining=星核采矿 +se-empty-antimatter-canister=提取罐装反物质射流 +se-empty-barrel-scrapping=空桶报废 +se-empty-barrel-reprocessing=空桶回收 +se-space-capsule-scrapping=太空舱报废 +se-cargo-pod-scrapping=货舱报废 +se-energy-insight-1=能量学见解 +se-energy-insight-2=通用能量学见解 +se-energy-insight-3=综合能量学见解 +se-energy-insight-4=扩展能量学见解 +se-formatting-1=数据格式化 +se-formatting-2=高效数据格式化 +se-formatting-3=高级数据格式化 +se-formatting-4=深度数据格式化 +se-material-insight-1=材料学见解 +se-material-insight-2=通用材料学见解 +se-material-insight-3=综合材料学见解 +se-material-insight-4=扩展材料学见解 +se-matter-fusion-copper=物质合成(铜矿) +se-matter-fusion-dirty=物质合成(废料) +se-matter-fusion-iron=物质合成(铁矿) +se-matter-fusion-stone=物质合成(石矿) +se-matter-fusion-uranium=物质合成(铀矿) +se-matter-fusion-to=物质合成(__1__) +se-orbital-data=轨道计算数据 +se-plasma-canister-empty=清空等离子罐 +se-pulverised-sand=研磨沙 +se-radiating-space-coolant-fast=快速冷却热流体至-10°C(低温) +se-radiating-space-coolant-normal=冷却热流体至-10°C(低温) +se-radiating-space-coolant-slow=高效冷却热流体至-10°C(低温) +se-mixed-methane-gas-separation=混合的甲烷气体分离 +se-rocket-fuel-from-water-copper=电解水制火箭燃料 +se-scrap-decontamination=污料净化 +se-scrap-recycling=废料回收 +se-space-coolant-cold=超冷却热流体至-100°C(低温) +se-space-coolant-supercooled=超冷却热流体至-273°C(超低温) +se-space-coolant-supercooled-cryonite=深低温冷却热流体至-273°C(超低温) +se-space-coolant-cold-cryonite=深低温冷却热流体至-100°C(低温) +se-space-coolant-supercoole-cryonite=深低温冷却热流体至-273°C(超低温) +se-simulation-a=天文学模拟 +se-simulation-ab=有生源说模拟 +se-simulation-abm=变异情况模拟 +se-simulation-am=物质分布模拟 +se-simulation-as=空间粒子模拟 +se-simulation-asb=空间生物学模拟 +se-simulation-asbm=宇宙学模拟 +se-simulation-asm=天体物理学模拟 +se-simulation-b=生物学模拟 +se-simulation-bm=生物力学模拟 +se-simulation-m=材料学模拟 +se-simulation-s=能量学模拟 +se-simulation-sb=生物化学模拟 +se-simulation-sbm=纳米学模拟 +se-simulation-sm=纳米材料模拟 +se-space-water-decontamination=宇宙污水净化 +se-spaceship-rocket-engine-burn=燃烧液体火箭燃料 +se-specimen-fish=微重力鱼类养殖 +se-specimen-wood=微重力木材种植 +se-thermodynamics-coal=高压制煤 +se-used-lifesupport-canister-cleaning=维生罐清洗 +se-used-lifesupport-canister-cleaning-space=维生罐净化 +space-science-pack=优化科研包 +se-rocket-science-pack=火箭科研包 +se-big-turbine-internal=减压高温蒸汽 +se-arcosphere-fracture=曲虹球极化 +se-arcosphere-fold-in=曲虹球反转 +se-arcosphere-fold-out=曲虹球反转 +se-arcosphere-folding=曲虹球折叠:__1__ __2__ 至 __3__ __4__ +se-electric-boiling-void=蒸发排放 +se-space-probe-rocket-deployed=太空探测火箭(已部署) +se-distortion-drive=扭曲驱动 +se-generic-scrapping=__1__报废 +se-generic-recycling=__1__回收 + +[recipe-description] +se-astronomic-insight-2=更复杂,但更高效。 +se-astronomic-insight-3=更复杂,但更高效。 +se-astronomic-insight-4=更复杂,但更高效。 +se-biological-insight-2=更复杂,但更高效。 +se-biological-insight-3=更复杂,但更高效。 +se-biological-insight-4=更复杂,但更高效。 +se-core-mining=获得的碎片类型取决于所在行星。 操作时间取决于所在行星或卫星上星核钻机的总数。 +se-energy-insight-2=更复杂,但更高效。 +se-energy-insight-3=更复杂,但更高效。 +se-energy-insight-4=更复杂,但更高效。 +se-material-insight-2=更复杂,但更高效。 +se-material-insight-3=更复杂,但更高效。 +se-material-insight-4=更复杂,但更高效。 +se-radiating-space-coolant-normal=热流体的反复冷却和加热会导致降解。 +se-radiating-space-coolant-slow=热流体的反复冷却和加热会导致降解,较慢的冷却速度可以减少损失。 +se-radiating-space-coolant-fast=热流体的反复冷却和加热会导致降解,较快的冷却速度会增加损失。 +se-delivery-cannon-weapon-pack-se-iridium-piledriver=在小范围内造成巨大物理伤害,并形成冲击波造成爆炸伤害。 +se-arcosphere-fracture=曲虹球可通过[img=item/se-arcosphere-collector]曲虹球收集器来收集。 +se-distortion-drive=激活枢纽的扭曲驱动来赢得游戏。临界速度下能耗6GW。 + +[technology-name] +effectivity-module-4=节能插件 4 +effectivity-module-5=节能插件 5 +effectivity-module-6=节能插件 6 +effectivity-module-7=节能插件 7 +effectivity-module-8=节能插件 8 +effectivity-module-9=节能插件 9 +energy-shield-equipment=能量盾 +energy-shield-mk2-equipment=能量盾 MK2 +energy-shield-mk3-equipment=能量盾 MK3 +energy-shield-mk4-equipment=能量盾 MK4 +energy-shield-mk5-equipment=能量盾 MK5 +energy-shield-mk6-equipment=能量盾 MK6 +sand-processing=沙处理 +glass-processing=玻璃处理 +liquid-rocket-fuel=液体火箭燃料 +productivity-module-4=产能插件 4 +productivity-module-5=产能插件 6 +productivity-module-6=产能插件 6 +productivity-module-7=产能插件 7 +productivity-module-8=产能插件 8 +productivity-module-9=产能插件 9 +rocket-silo=卫星火箭发射井 +rocketry=军用火箭学 +se-adaptive-armour=适应性装甲 +se-antimatter-engine=反物质引擎 +se-antimatter-reactor=反物质反应堆 +se-antimatter-production=反物质生产 +se-astronomic-science-pack=天文学研究包 +se-biological-science-pack=生物学研究包 +se-condenser-turbine=冷凝涡轮技术 +se-core-miner=星核采集技术 +se-biogun=生化枪 +se-cryogun=冷冻枪 +se-deep-space-science-pack=深空科学研究包 +se-deep-catalogue=深空目录 +se-dimensional-anchor=次元锚 +se-electric-boiler=电锅炉 +se-energy-science-pack=能量学研究包 +se-fluid-burner-generator=燃油发电技术 +se-fuel-refining=燃料精炼技术 +se-heat-shielding=隔热技术 +se-ion-engine=离子引擎 +se-long-range-star-mapping=长距离星图绘制 +se-material-science-pack=材料学研究包 +se-medpack=医疗包 +se-medpack-2=医疗包 2 +se-medpack-3=医疗包 3 +se-medpack-4=医疗包 4 +se-meteor-defence=广域陨石防御系统 +se-meteor-point-defence=陨石点防御系统 +se-nanomaterial=纳米材料 +se-plague=生物武器 +se-processing-beryllium=铍处理 +se-processing-cryonite=冰晶石处理 +se-processing-holmium=钬处理 +se-processing-iridium=铱处理 +se-processing-naquium=寂介素处理 +se-processing-vitamelange=维生质处理 +se-processing-vulcanite=火成岩处理 +se-pulveriser=粉碎机 +se-railgun=磁轨武器 +se-rocket-cargo-safety=运载火箭安全性 +se-rocket-fuel-from-water=电解水制燃料技术 +se-rocket-launch-pad=运载火箭发射井 +se-rocket-landing-pad=火箭着陆台 +se-rocket-reusability=可重复使用火箭 +se-rocket-survivability=火箭生存能力 +se-rtg-equipment=便携式 RTG MK1 +se-rtg-equipment-2=便携式 RTG MK2 +se-space-assembling=空间组装技术 +se-space-accumulator=钬电池技术 +se-space-accumulator-2=寂介素电池技术 +se-space-astrometrics-laboratory=天体测量设施 +se-space-biochemical-laboratory=生物化学设施 +se-space-catalogue-astronomic=天文学目录 +se-space-catalogue-biological=生物学目录 +se-space-catalogue-universal=宇宙学目录 +se-space-catalogue-energy=能量学目录 +se-space-catalogue-material=材料学目录 +se-space-data-card=数据卡 +se-space-decontamination-facility=净化设施 +se-space-electromagnetics-laboratory=电磁学设施 +se-space-genetics-laboratory=遗传学设施 +se-space-gravimetrics-laboratory=重力学设施 +se-space-growth-facility=培养设施 +se-space-hypercooling=超级冷却技术 +se-space-laser-laboratory=激光设施 +se-lifesupport-facility=维生设施 +se-space-manufactory=太空制造技术 +se-space-material-fabricator=物质合成技术 +se-space-matter-fusion=物质聚变 +se-space-mechanical-laboratory=空间机械加工设施 +se-space-particle-accelerator=粒子加速器 +se-space-particle-collider=粒子对撞器 +se-space-plasma-generator=等离子生成 +se-space-platform-plating=镀层轨道平台 +se-space-platform-scaffold=轨道平台框架 +se-space-radiation-laboratory=辐射设施 +se-space-radiating-efficiency=散热效率 +se-space-radiating-speed=散热速度 +se-space-radiator=散热器 +se-space-radiator-2=散热器 2 +se-space-rail=太空铁路 +se-recycling-facility=回收设施 +se-space-science-lab=空间科学研究 +se-space-simulation-ab=有生源说模拟 +se-space-simulation-am=空间材料模拟 +se-space-simulation-as=空间粒子模拟 +se-space-simulation-bm=生物力学模拟 +se-space-simulation-sb=生物化学模拟 +se-space-simulation-sm=纳米材料模拟 +se-space-simulation-abm=变异情况模拟 +se-space-simulation-asb=空间生物学模拟 +se-space-simulation-asm=天体物理学模拟 +se-space-simulation-sbm=纳米模拟 +se-space-simulation-asbm=宇宙学模拟 +se-space-solar-panel=平板太阳能板 +se-space-spectrometry-facility=光谱测定设施 +se-space-supercomputer=超级计算机 +se-space-telescope=望远镜 +se-space-telescope-gammaray=伽马射线望远镜 +se-space-telescope-xray=X射线望远镜 +se-space-telescope-microwave=微波望远镜 +se-space-telescope-radio=射电望远镜 +se-space-thermodynamics-laboratory=热力学设施 +se-spaceship=飞船 +se-spaceship-integrity=飞船结构强度 +se-factory-spaceship=工厂飞船 +se-superconductive-cable=超导技术 +se-teleportation=传送技术 +se-tesla-gun=特斯拉武器 +se-thruster-suit=推进太空服 +space-science-pack=天文学研究包 +se-rocket-science-pack=火箭科研包 +speed-module-4=速度插件 4 +speed-module-5=速度插件 5 +speed-module-6=速度插件 6 +speed-module-7=速度插件 7 +speed-module-8=速度插件 8 +speed-module-9=速度插件 9 +se-aeroframe-pole=航空框架杆 +se-aeroframe-scaffold=航空框架支架 +se-aeroframe-bulkhead=航空框架隔板 +se-lattice-pressure-vessel=晶格压力容器 +se-heavy-girder=重型梁 +se-heavy-bearing=重型轴承 +se-heavy-composite=重型复合材料 +se-heavy-assembly=重型组装 +se-bioscrubber=生物洗涤器 +se-vitalic-epoxy=维生质环氧树脂 +se-vitalic-reagent=维生质 +se-vitalic-acid=维生质酸 +se-self-sealing-gel=自封凝胶 +se-holmium-cable=钬电缆 +se-holmium-solenoid=钬螺线管 +se-quantum-processor=量子处理器 +se-dynamic-emitter=动态发射器 +se-naquium-processor=寂介素处理器 +se-naquium-cube=寂介素立方体 +se-naquium-tessaract=寂介素超正方体 +se-wide-beacon=广域信标 +se-wide-beacon-2=广域信标2 +se-lifesupport-equipment=维生装备 +se-lifesupport-equipment-1=维生装备 MK1 +se-lifesupport-equipment-2=维生装备 MK2 +se-lifesupport-equipment-3=维生装备 MK3 +se-lifesupport-equipment-4=维生装备 MK4 +se-supercharger=超充能器 +se-addon-power-pole=附加式电线杆 +se-pylon=输电塔 +se-pylon-substation=广域配电式输电塔 +se-pylon-construction=建设网络式输电塔 +se-pylon-construction-radar=建设网络式雷达输电塔 +se-shield-projector=护盾投射器 +se-deep-space-transport-belt=深空传送带 +se-big-turbine=高温汽轮发电机 +se-big-heat-exchanger=高温换热器 +se-zone-discovery-random=星区探测 +se-zone-discovery-targeted=星区定向探测 +se-zone-discovery-deep=深空探测 +se-delivery-cannon=货运火炮 +se-delivery-cannon-capsule-iridium=铱制货运火炮货舱 +se-delivery-cannon-weapon=武器投送火炮 +se-spaceship-clamps=飞船对接夹钳 +se-bio-upgrade-constitution=生化升级:体质 +se-bio-upgrade-strength=生化升级:力量 +se-bio-upgrade-agility=生化升级:敏捷 +se-bio-upgrade-dexterity=生化升级:灵巧 +se-bio-upgrade-intelligence=生化升级:智力 +se-energy-beaming=能量束 +se-energy-beam-defence=保护伞:能量束防御设施 +se-nexus=枢纽 +se-spaceship-victory=飞船胜利 +se-arcosphere=曲虹球收集 +se-arcosphere-folding=曲虹球折叠 +se-space-probe=太空探测火箭发射井 +se-linked-container=曲连存储 +k2-conversion=__1__转换 + +[technology-description] +energy-shield-equipment=护盾发生器,充能快速但会消耗很多能量。 +energy-shield-mk2-equipment=护盾发生器,充能快速但会消耗很多能量。 +energy-shield-mk3-equipment=护盾发生器,充能快速但会消耗很多能量。 +energy-shield-mk4-equipment=护盾发生器,充能快速但会消耗很多能量。 +energy-shield-mk5-equipment=护盾发生器,充能快速但会消耗很多能量。 +energy-shield-mk6-equipment=护盾发生器,充能快速但会消耗很多能量。 +sand-processing=将原料粉碎、研磨并过滤,得到干净的沙子。 +glass-processing=将沙子熔化制成玻璃。 +rocket-silo=允许向轨道上发射卫星以发展太空技术和发现新星球。 +se-adaptive-armour=可以使用能量进行自我修复的装甲。 定位与能量盾相同,但消耗更少的资源,护盾值回复速度也更缓慢。 +se-antimatter-engine=通过湮灭反物质产生难以置信的推力。 +se-antimatter-reactor=通过湮灭反物质产生难以置信的高温。 +se-antimatter-production=制造反物质,能量密度最高的存储形式。 +se-astronomic-science-pack=允许研究太空旅行和星际物流的相关科技。 +se-biological-science-pack=允许研究生物武器、神经处理和提高身体机能的相关科技。 +se-condenser-turbine=只有蒸汽汽轮机机75%的效率,但是99%的蒸汽冷凝为水返还。 温度区间:100至999。\n最大输出:10MW。 +se-core-miner=允许从行星和卫星中无限地提取资源,但如果在同个星体使用多个则会收益递减。 +se-biogun=一种可以发射多种生化弹药的武器。 +se-cryogun=制造一堵能冻结敌人的冰墙。 +se-deep-catalogue=空间扭曲、奇异物质和纳米工程数据结构化,可供分析和计算机模拟。最先进技术所需。 +se-deep-space-science-pack=是大多数高级技术需要的前置科技。 +se-dimensional-anchor=利用恒星的引力井作为空间异常的稳定点。 +se-electric-boiler=使用电力将水加热成蒸汽。能效 90%。 +se-energy-science-pack=允许研究基本力和亚原子相关的科技。 +se-fluid-burner-generator=需要具备热值的液体燃料(如液体火箭燃料)来发电。 简单、紧凑,但缺乏大型蒸汽系统的能源效率。 为太空设计。 实际液体消耗量取决于液体燃料热值。 +se-fuel-refining=精炼更高级的燃料。 +se-heat-shielding=用于抵抗高温和真空环境的复合板。 +se-ion-engine=离子引擎使用少量的离子流和大量的电力产生推力来移动飞船。离子引擎燃料罐比其他燃料罐要小,只能从太空中发射。 +se-long-range-star-mapping=一些距离遥远的星系可以通过不寻常恒星的特定模式来识别。 结果记录在[img=virtual-signal/informatron]信息稽器人[__CONTROL__informatron__]。 +se-material-science-pack=允许研究用于高级机械工程所需的高级材料的相关科技。 +se-medpack=使用医疗包来治疗自己。 +se-medpack-2=使用医疗包来治疗自己。 +se-medpack-3=使用医疗包来治疗自己。 +se-medpack-4=使用医疗包来治疗自己。 +se-meteor-defence=在陨石击中您的设施前将其在空中击毁。 陨石防御系统,可以覆盖整个星球,但同一时间只可攻击1个目标。 +se-meteor-point-defence=在陨石击中您的设施前将其在空中击毁。 陨石点防御系统,可以覆盖一个较小的区域,同一时间可攻击最多4个目标。 +se-nanomaterial=在纳米尺度上组织的不同材料的复杂排列,使复合材料具有优越的性能。 +se-railgun=电磁加速的弹头被加速到极高的速度,以至于在被气化前留下了一道等离子体的弹道。 高伤害,射速低。 +se-plague=引发一场足以消灭整个星球上所有生命形式的瘟疫,使用时请格外小心。 +se-processing-beryllium=将绿柱石转变为铍,铍是一种极轻、坚固、耐腐蚀和耐辐射的金属。 它也几乎不受 X 射线的影响。 +se-processing-cryonite=将冷冻的冰晶石晶体加工成冰晶石棒,可应用于冷冻、冷却和润滑。 冰晶石主要存在于冰冻行星上。 +se-processing-holmium=将钬矿提纯为钬,一种具有最高磁导率的稀土金属。 +se-processing-iridium=将伊矿精炼成铱,铱是在高温下最耐腐蚀的金属和密度最大的元素。 在重工业中有重要作用。 +se-processing-naquium=将神秘的深空寂介素水晶转变成寂介素,寂介素是一种具有不同寻常的时空相互作用的金属状物质。 +se-processing-vitamelange=将原始的维生质海绵状岩转化为有价值的营养萃取物。 +se-processing-vulcanite=将火山中的火成岩晶体精炼成粉末,用于高级熔炼、火箭燃料和其他高温化学过程。 火成岩存在于火山行星和大多数星核碎片中。 +se-pulveriser=粉碎和研磨较硬的矿物和行星核心碎片。 +se-rocket-cargo-safety=运载火箭发射过程中损坏的几率减少10%(乘法叠加)。 +se-rocket-fuel-from-water=通过电解水制备氢氧火箭燃料。 +se-rocket-landing-pad=允许您向指定的着陆点发射运载火箭。 进阶研究可以回收火箭组件。 +se-rocket-launch-pad=允许您向其他星球发射运载火箭。 +se-rocket-reusability=从成功着陆的火箭中回收组件的几率增加4%(基础成功率20%,上限100%)。 +se-rocket-science-pack=允许研究与异星资源加工和太空版地面建筑有关的技术。 +se-rocket-survivability=火箭发射过程中的损毁几率以及因导航错误导致偏离着陆点的几率降低10% (乘法叠加)。 +se-rtg-equipment=放射性同位素热电式发电机。 一个可以将放射性物质衰变时产生的热量转化为电力的便携式装置。 可以持续运行数十年,期间无需添加燃料。 +se-rtg-equipment-2=放射性同位素热电式发电机。 一个可以将放射性物质衰变时产生的热量转化为电力的进阶型便携装置。 可以持续运行数十年,期间无需添加燃料。 +se-space-accumulator=储存大量过剩电能以备不时之需的建筑。 +se-space-accumulator-2=储存超大量过剩电能以备不时之需的建筑。 +se-space-assembling=一台特制的组装机,可以在太空中工作。 +se-space-astrometrics-laboratory=组合、比较和量化来自不同天体的信息。 +se-space-biochemical-laboratory=一所重点研究生物化学的实验室。 也可以用来进行基本的化学反应和原油处理。 +se-space-catalogue-astronomic=结构化的天文学数据,用于分析或计算机模拟。 是进阶天文学研究的必需品。 +se-space-catalogue-biological=结构化的生物学数据,用于分析或计算机模拟。 是进阶生物学研究的必需品。 +se-space-catalogue-universal=将数据分析与计算机模拟相结合。 是进阶深空研究所必须的。 +se-space-catalogue-energy=结构化的能量学数据,用于分析或计算机模拟。 是进阶能量学研究的必需品。 +se-space-catalogue-material=结构化的材料学数据,用于分析或计算机模拟。 是进阶材料学研究的必需品。 +se-space-data-card=一个多用途的数据存储设备,是高级数据研究的必需品。 +se-space-decontamination-facility=净化需要在无菌环境中使用的物质,并制备需要在低压条件下使用的液体。 +se-space-electromagnetics-laboratory=用于强磁场和极高电压环境下使用的设备。 +se-space-genetics-laboratory=一所用于基因测序、基因修饰和基因印刷的实验室。 +se-space-gravimetrics-laboratory=分析并模拟重力扰动。 +se-space-growth-facility=在一些常规环境下无法实现的条件下培养生物,如微重力环境。 +se-space-hypercooling=使用热流体进行热交换,使一端更热,另一端更冷。 +se-space-laser-laboratory=激光实验场所,必须佩戴护目镜。 +se-lifesupport-facility=在更加恶劣的环境中支持生命。 +se-space-manufactory=实现太空中大规模生产的关键技术。 +se-space-material-fabricator=用来合成新材料,是粒子对撞机和3D打印机的完美融合。 +se-space-matter-fusion=通过聚变生产物质。 +se-space-mechanical-laboratory=提供一系列的机械加工工序:破碎,撕裂,剪切,振动等。 +se-space-particle-accelerator=将粒子加速到接近光速。 +se-space-particle-collider=使高速粒子相互撞击并分析结果。 +se-space-plasma-generator=产生各种等离子体。 +se-space-platform-plating=耐用的镀层轨道平台,使太空行走更加顺畅而快速。 +se-space-platform-scaffold=基础的轨道平台框架,可以在上面建造设施,但不太适合太空行走。 +se-space-radiation-laboratory=提供一个相对安全的环境来处理放射性物质,可以用来处理铀。 +se-space-radiator=从过热的热流体中辐射出多余的热量。 +se-space-radiator-2=从过热的热流体中辐射出多余的热量。 +se-space-radiating-efficiency=缓慢但更具资源利用率的方式冷却高温热流体。 +se-space-radiating-speed=高速但缺乏资源利用率的方式冷却高温热流体, +se-space-rail=安全的太空铁路,因为他们可以防止火车从轨道上飞出并毁掉一切。 因其美观性,也可以在地面使用。 +se-recycling-facility=报废物品并将废料加工成原材料。 +se-space-science-lab=允许处理太空科研包和进行更高级的太空研究。 +se-space-simulation-ab=通过结合多个学科进行更有效的模拟。 +se-space-simulation-am=通过结合多个学科进行更有效的模拟。 +se-space-simulation-as=通过结合多个学科进行更有效的模拟。 +se-space-simulation-bm=通过结合多个学科进行更有效的模拟。 +se-space-simulation-sb=通过结合多个学科进行更有效的模拟。 +se-space-simulation-sm=通过结合多个学科进行更有效的模拟。 +se-space-simulation-abm=通过结合多个学科进行更有效的模拟。 +se-space-simulation-asb=通过结合多个学科进行更有效的模拟。 +se-space-simulation-asm=通过结合多个学科进行更有效的模拟。 +se-space-simulation-sbm=通过结合多个学科进行更有效的模拟。 +se-space-simulation-asbm=通过结合多个学科进行更有效的模拟。 +se-space-solar-panel=一种高效的太阳能板,您可以在上面行走。 +se-space-spectrometry-facility=分光光度法,气相色谱法,质谱法和其他光谱学。 向墙上发射物质,使其弯曲,看它击中哪里。 +se-space-supercomputer=允许更高级的数据操作和处理以及模拟。 +se-space-telescope=精密的望远镜,对可见光谱范围内的多个波长敏感。 +se-space-telescope-gammaray=伽马射线不会折射。 这个强大的望远镜使用镜子和特殊的传感器进行观测。 +se-space-telescope-xray=X 射线会被大气层所阻挡。 这个强大的望远镜转为真空环境设计,在这里不再有大气层问题。 +se-space-telescope-microwave=一台巨大的望远镜,可以探测微波和宇宙微波背景。 +se-space-telescope-radio=一台巨大的望远镜,可以探测从非常遥远距离发射的微弱的无线电波。 +se-space-thermodynamics-laboratory=进行涉及极端温度的加工处理。 也可以执行基本的热处理,例如冶炼。 +se-spaceship=使用地板和舱壁一点一点的拼凑起一艘宇宙飞船, 然后使用控制台驾驶她在星海中遨游。 +se-spaceship-integrity=每个级别将飞船结构完整性应力极限提高100。 +se-factory-spaceship=每个级别将飞船结构完整性应力极限提高500。 +se-superconductive-cable=一根无需主动散热装置的超导电缆。 +se-teleportation=解锁其他的传送技术。事实证明,安全的弯曲时空是十分困难的。 +se-tesla-gun=高速闪电链发射器。可以同时击中最多30个敌人。 可在不同的目标之间长距离跳跃,如果没有目标,则沿着地面短距离跳跃。 +se-thruster-suit=配有喷气推进器和磁力鞋的太空服。 进入太空前一定要穿上它。 +se-thruster-suit-2=高级的太空服,拥有更强劲的推进器,增加背包空间和插槽空间。 +se-thruster-suit-3=先进的太空服,拥有更强劲的推进器,增加背包空间和插槽空间。 +se-thruster-suit-4=尖端的太空服,拥有更强劲的推进器,增加背包空间和插槽空间。 +space-science-pack=允许更直接的生产太空科研包,并从这些技术中受益。 +se-aeroframe-pole=一种坚固且轻质的铍梁,通常用作航空和太空探索的支撑梁。 +se-aeroframe-scaffold=一种坚固且轻质的铍结构框架,通常用作航空和太空探索飞船的主要内部骨架。 +se-aeroframe-bulkhead=一种坚固且轻质的气密性铍隔板,用作航空和太空探索飞船的外部蒙皮或次要隔室壁。 +se-lattice-pressure-vessel=一种坚固且轻质的铍压力容器,带有内部晶格,可以将某些流体压缩超过其正常极限。 即使破裂加压流体也能够安全排出。 +se-heavy-girder=一种重型铱结构梁,主要用于重工业和重型军用船体。 +se-heavy-bearing=一种大尺寸重型铱合金轴承,可以承受足以压碎其他材料的力并保持正常工作。 +se-heavy-composite=一种几乎无法穿透的厚舱壁,几乎不受高温、腐蚀、辐射和机械力的影响,缺点是非常沉重。 +se-heavy-assembly=一种由重型机械齿轮和可配置部件组装而成的重型机械组件。 +se-bioscrubber=一种利用生物过程分解废弃物的材料处理室。 +se-vitalic-epoxy=一种具有难以置信的高强度的生物来源环氧树脂,有再生能力特性。 +se-vitalic-reagent=一种用于多种化学反应的高效多功能试剂。 +se-vitalic-acid=多种酸的混合物。 +se-self-sealing-gel=一种在压力下呈粘稠的凝胶,但在真空下呈固态。 通常用作舱壁的内部薄膜,以被动密封孔洞。 +se-holmium-cable=一种专门设计用于消除干扰敏感电子设备的线路中无用噪声的护套电缆。 +se-holmium-solenoid=一种非常强大的电磁铁。 +se-quantum-processor=利用重叠和纠缠来更有效地处理高复杂性问题。 +se-dynamic-emitter=一种可快速调节的光或粒子发射系统,它可以改变许多特性以获得更大的范围或扫描模式或材料穿透特性。 +se-naquium-cube=利用寂介素与时空不同寻常的相互作用,将一个大体积的物体折叠成一个小立方体。 +se-naquium-tessaract=一种奇特的物体,静止时它呈现一个立方体状的形状,一旦被转动或加速就会变成一系列其他的几何形状。 +se-naquium-processor=使用寂介素超正方体进行计算可以绕过一些通常的计算密度限制。 +effect-transmission=插件分享塔可以将插件的加成效果传送给附近3格范围内的友方机器。 使用多个插件分享塔为一个设施提供加成会使其过载并停止工作。 +se-wide-beacon=广域插件分享塔可以将插件的加成效果传送给附近14格范围内的友方机器。 使用多个插件分享塔为一个设施提供加成会使其过载并停止工作。 +se-wide-beacon-2=广域插件分享塔2可以将插件的加成效果传送给附近14格范围内的友方机器。 使用多个插件分享塔为一个设施提供加成会使其过载并停止工作。 +se-lifesupport-equipment-1=提高生命维持效率+100%(加法叠加)。 如果安装在非宇航服中,效率加成会降低一半且无法在太空生效。 +se-lifesupport-equipment-2=提高生命维持效率+200%(加法叠加)。 如果安装在非宇航服中,效率加成会降低一半且无法在太空生效。 +se-lifesupport-equipment-3=提高生命维持效率+800%(加法叠加)。 如果安装在非宇航服中,效率加成会降低一半且无法在太空生效。 +se-lifesupport-equipment-4=提高生命维持效率+1600%(加法叠加)。 如果安装在非宇航服中,效率加成会降低一半且无法在太空生效。 +se-supercharger=可以同时为64个机器人高速充电。 建筑最大功率1GW。 +se-pylon=传输电力。 连接范围64格。 +se-pylon-substation=传输电力。 连接范围64格,输电范围64x64。 +se-pylon-construction=传输电力并能够扩展机器人建筑区。 连接范围64格,建筑区范围64x64。 +se-pylon-construction-radar=传输电力并能够扩展机器人建筑区,还能够提供雷达功能。 连接范围64格,建筑区/视野范围256x256。 +se-shield-projector=创造一个保护力场。 当护盾投射器充能或防护罩承受伤害时,需要更多的能量。 如果安装了“Walls Block Spitters”Mod,可以阻挡喷吐虫攻击。 +se-deep-space-transport-belt=可以放置在太空中的快速长距离运输带。不同的颜色可以提高远处的辨识度。 +se-big-turbine=一种大型发电机,装机容量1GW。从一侧输入5000°C的蒸汽,从另一侧排出500°C的蒸汽,从侧面排出水。能效99%,水回收率99%。 +se-big-heat-exchanger=一种高温大容量的大型换热器。 +se-addon-power-pole=一种被设计用来精确控制输电范围的附加式小型电线杆。 +se-zone-discovery-random=使用望远镜搜寻行星、卫星和小行星带。 +se-zone-discovery-targeted=在行星、卫星和小行星带中搜寻特定的资源。 在[img=virtual-signal/informatron]信息稽器人>星区探索页面指定资源类型。 +se-zone-discovery-deep=寻找星际深处的有趣区域。 小行星区可能包含许多独特而宝贵的资源。 +se-delivery-cannon=一种轨道炮,能够将资源射入轨道或更远的地方,还提供一个装甲箱子来接收它们。 +se-delivery-cannon-capsule-iridium=尽管铱是一种重金属,但其高耐用性意味着与标准货舱相比可以使用更少的材料。 整体重量是一样的,但制造起来更简单。 +se-delivery-cannon-weapon=能够向其他表面发射原子弹等特殊弹药的大型轨道炮。 +se-spaceship-clamps=允许您放置飞船夹钳,以便太空飞船可以通过相匹配的夹钳停泊到特定的位置。 自动驾驶功能需要在飞船控制台输入“使用…停泊”和“停泊到…”两种信号。 +se-bio-upgrade-constitution=提高最大生命值。 +se-bio-upgrade-strength=提高背包容量。 +se-bio-upgrade-agility=提高移动速度 +se-bio-upgrade-dexterity=提高手搓速度。 +se-bio-upgrade-intelligence=提高从每个科研包获得的研究进度。 +se-energy-beaming=高能能量束,可以作为天基武器,也可以向需要的地方传输能量。 +se-energy-beam-defence=防御天基能量束和日冕物质喷射。 工作原理是将磁粒子悬浮到一个保护性的气泡中,然后根据需要重新排列和聚集粒子,以扩散敌对的能量束。 +se-nexus=可以放置在星际空间中移动的飞船上激活的装置,生产数据,并通过额外的技术激活空间扭曲场(飞船胜利)。 +se-spaceship-victory=允许枢纽启动扭曲驱动器以逃离本地恒星群。 让枢纽以扭曲驱动器模式运行在3000+完整性的飞船上,以250的速度在星际空间中移动60秒,即可赢得游戏。 +se-arcosphere=允许收集星际虚空中丢失的曲虹球。 +se-arcosphere-folding=允许将曲虹球用作超维钳子。 +se-space-probe=用于发射太空探测器的太空火箭发射井。 也可用于廉价发射卫星。 +se-linked-container=由高维空间与其他容器相连的容器。 容器的连接取决于它首次放置的表面。 +se-unit-capsule=可以生产一个友军__1__单位的胶囊。 + +[modifier-description] +tesla-shooting-speed-bonus=特斯拉枪射击速度加成 +tesla-damage-bonus=特斯拉枪伤害加成 +railgun-damage-bonus=轨道枪伤害加成 +railgun-shooting-speed-bonus=轨道枪射击速度 +cryogun-shooting-speed-bonus=冷冻枪射击速度 +cryogun-damage-bonus=冷冻枪伤害加成 +character-running-speed=角色移动速度加成:+__1__ +character-crafting-speed=角色手搓速度加成:+__1__ + +[virtual-signal-name] +signal-speed=速度信号 +se-signal-speed=速度信号 +signal-distance=距离信号 +se-signal-distance=距离信号 +se-star=恒星 +se-planet=行星 +se-planet-orbit=行星轨道 +se-moon=卫星 +se-moon-orbit=卫星轨道 +se-asteroid-belt=小行星带 +se-asteroid-field=小行星区 +se-anomaly=异常 +se-meteor=小行星 +se-spaceship=飞船 +se-cargo-rocket=运载火箭 +se-remote-view=远程视角 +se-death=死亡 +se-character-corpse=尸体 +se-ruin=废墟 +se-accolade=桂冠 +se-remove=移除 +se-radius=半径 +se-hierarchy=层次结构 +se-spaceship-launch=飞船启动 +se-anchor-using-left-clamp=使用飞船左侧夹钳停泊 +se-anchor-using-right-clamp=使用飞船右侧夹钳停泊 +se-anchor-to-left-clamp=停泊到左侧夹钳 +se-anchor-to-right-clamp=停泊到右侧夹钳 +se-beacon-overload=插件分享塔过载 +se-heat=热源 +se-pin=大头针 + +[controls] +se-remote-view=导航卫星视角 +se-remote-view-pins=导航卫星大头针 +se-remote-view-next=导航历史下一个 +se-remote-view-previous=导航历史上一个 +se-universe-explorer=宇宙浏览器 +se-respawn=复活 +se-mode-toggle=切换结构操作模式 +se-pin-one=前往大头针1 +se-pin-two=前往大头针2 +se-pin-three=前往大头针3 +se-pin-four=前往大头针4 +se-pin-five=前往大头针5 +se-pin-six=前往大头针6 +se-pin-seven=前往大头针7 +se-pin-eight=前往大头针8 +se-pin-nine=前往大头针9 +se-pin-zero=前往大头针0 +se-pin-set-one=设置大头针1 +se-pin-set-two=设置大头针2 +se-pin-set-three=设置大头针3 +se-pin-set-four=设置大头针4 +se-pin-set-five=设置大头针5 +se-pin-set-six=设置大头针6 +se-pin-set-seven=设置大头针7 +se-pin-set-eight=设置大头针8 +se-pin-set-nine=设置大头针9 +se-pin-set-zero=设置大头针0 + +[shortcut] +se-remote-view=导航卫星视角 +se-remote-view-pins=导航卫星大头针 +se-universe-explorer=宇宙浏览器 +se-respawn=复活 +se-pin-one=1 +se-pin-two=前往大头针2 +se-pin-three=前往大头针3 +se-pin-four=前往大头针4 +se-pin-five=前往大头针5 +se-pin-six=前往大头针6 +se-pin-seven=前往大头针7 +se-pin-eight=前往大头针8 +se-pin-nine=前往大头针9 +se-pin-zero=前往大头针0 +se-pin-set-one=设置大头针1 +se-pin-set-two=设置大头针2 +se-pin-set-three=设置大头针3 +se-pin-set-four=设置大头针4 +se-pin-set-five=设置大头针5 +se-pin-set-six=设置大头针6 +se-pin-set-seven=设置大头针7 +se-pin-set-eight=设置大头针8 +se-pin-set-nine=设置大头针9 +se-pin-set-zero=设置大头针0 + +[shortcut-name] +se-remote-view=导航卫星视角 [__CONTROL__se-remote-view__] +se-remote-view-pins=导航卫星大头针[__CONTROL__se-remote-view-pins__] +se-universe-explorer=宇宙浏览器 [__CONTROL__se-remote-view__] +se-respawn=复活 [__CONTROL__se-respawn__] +se-pin-one=前往大头针1 [__CONTROL__se-pin-one__] +se-pin-two=前往大头针2 [__CONTROL__se-pin-two__] +se-pin-three=前往大头针3 [__CONTROL__se-pin-three__] +se-pin-four=前往大头针4 [__CONTROL__se-pin-four__] +se-pin-five=前往大头针5 [__CONTROL__se-pin-five__] +se-pin-six=前往大头针6 [__CONTROL__se-pin-six__] +se-pin-seven=前往大头针7 [__CONTROL__se-pin-seven__] +se-pin-eight=前往大头针8 [__CONTROL__se-pin-eight__] +se-pin-nine=前往大头针9 [__CONTROL__se-pin-nine__] +se-pin-zero=前往大头针0 [__CONTROL__se-pin-zero__] +se-pin-set-one=设置大头针1 [__CONTROL__se-pin-set-one__] +se-pin-set-two=设置大头针2 [__CONTROL__se-pin-set-two__] +se-pin-set-three=设置大头针3 [__CONTROL__se-pin-set-three__] +se-pin-set-four=设置大头针4 [__CONTROL__se-pin-set-four__] +se-pin-set-five=设置大头针5 [__CONTROL__se-pin-set-five__] +se-pin-set-six=设置大头针6 [__CONTROL__se-pin-set-six__] +se-pin-set-seven=设置大头针7 [__CONTROL__se-pin-set-seven__] +se-pin-set-eight=设置大头针8 [__CONTROL__se-pin-set-eight__] +se-pin-set-nine=设置大头针9 [__CONTROL__se-pin-set-nine__] +se-pin-set-zero=设置大头针0 [__CONTROL__se-pin-set-zero__] + +[tile-name] +se-space-platform-plating=镀层轨道平台 +se-space-platform-scaffold=轨道平台框架 +se-space-platform-underlay=太空 +se-space-platform-underlay-l=太空 +se-space-platform-underlay-r=太空 +se-space=真空 +se-regolith=表岩 +se-asteroid=小行星 +se-spaceship-floor=飞船地板 + +[mod-setting-name] +se-meteor-interval=陨石间隔 +se-plague-max-runtime=瘟疫最大持续时间 +se-planets=星球数量 +se-planet-size=星球尺寸(1%至10000%) +se-seed=星球生成种子 +se-skip-experimental-warning=跳过实验警告 +se-print-meteor-info=在控制台显示陨石撞击警报 +se-print-satellite-discovered-nothing=卫星无新发现时警报 +se-space-pipe-capacity=太空管道容量 +se-electric-boiler=电锅炉 +se-deep-space-belt-speed=深空传送带速度 +se-deep-space-belt-black=黑色深空传送带 +se-deep-space-belt-white=白色深空传送带 +se-deep-space-belt-red=红色深空传送带 +se-deep-space-belt-yellow=黄色深空传送带 +se-deep-space-belt-green=绿色深空传送带 +se-deep-space-belt-cyan=青色深空传送带 +se-deep-space-belt-blue=蓝色深空传送带 +se-deep-space-belt-magenta=品红深空传送带 +se-space-science-pack=太空科研包备用方案 +se-never-show-lifesupport=不再显示维生系统GUI +se-show-zone-preview=显示区域预览窗口 +se-pylon-charge-points=建设区输电塔充电点 +se-cmes-max-frequency=日冕物质喷射最大间隔 +se-spawn-small-resources=额外的初始资源区 +se-show-overhead-button-satellite-mode=显示导航卫星按钮 +se-show-overhead-button-interstellar-map=显示星际地图按钮 +se-show-overhead-button-universe-explorer=显示宇宙浏览器按钮 +se-show-pin-help-tooltip=在大头针按钮上显示帮助提示 +se-scan-search-budget=扫描搜索预算 +se-scan-chart-budget=扫描图预算 +se-scan-alert-interval=扫描警告间隔 +se-supercharger-individual-charge-rate=超充能器单个端口充电率(MW) + +[mod-setting-description] +se-meteor-interval=陨石撞击的基本间隔,单位:分钟。 陨石撞击发生后,下一次陨石来袭的时间为1分钟到此处设定值之间的随机值。 +se-plague-max-runtime=生化武器的最大持续时间(分钟)。 在瘟疫持续这么长时间之后,所有的瘟疫粒子、树木和敌人都会被消灭。 +se-planets=请勿在游戏中途修改。 +se-planet-size=请勿在游戏中途修改。 +se-seed=请勿在游戏中途修改。 +se-skip-experimental-warning=游戏开始时的提示信息将不再显示,今后您也不再会收到新的开局信息。 +se-print-meteor-info=按__CONTROL__toggle-console__可以查看消失的陨石撞击预警。 +se-print-satellite-discovered-nothing=当卫星发射时,您会收到一个警报,告诉您发现了什么。 如果没有发现任何东西,此设置将禁用警报。 +se-space-pipe-capacity=太空管道的流体容量。 +se-electric-boiler=为游戏增加电锅炉。 +se-deep-space-belt-speed=深空传送带应该是最快的传送带。 如果你有其他的修改,增加了更快的传送带,你可以增加深空带子的速度来匹配或超越。 +se-deep-space-belt-black=关闭黑色深空传送带、分流器以及地下传送带的配方使UI更加整洁。 +se-deep-space-belt-white=关闭白色深空传送带、分流器以及地下传送带的配方使UI更加整洁。 +se-deep-space-belt-red=关闭红色深空传送带、分流器以及地下传送带的配方使UI更加整洁。 +se-deep-space-belt-yellow=关闭黄色深空传送带、分流器以及地下传送带的配方使UI更加整洁。 +se-deep-space-belt-green=关闭绿色深空传送带、分流器以及地下传送带的配方使UI更加整洁。 +se-deep-space-belt-cyan=关闭青色深空传送带、分流器以及地下传送带的配方使UI更加整洁。 +se-deep-space-belt-blue=关闭蓝色深空传送带、分流器以及地下传送带的配方使UI更加整洁。 +se-deep-space-belt-magenta=关闭品红深空传送带、分流器以及地下传送带的配方使UI更加整洁。 +se-space-science-pack=如果其他Mod添加了获取太空科研包的方法,则将使用该方法。 如果没有其他制造方法,那么太空探索可以将其移除或将其用作优化科研包。 +se-never-show-lifesupport=如果勾选则维生系统GUI将不会显示,即便你处于窒息状态。 +se-show-zone-preview=取消选择来禁用宇宙管理器内的区域预览窗口。 如果你开启了某些Debug信息屏显,启用区域预览窗口可能会降低FPS。 +se-pylon-charge-points=取消勾选以移除建筑区输电塔充电点。 这有助于控制机器人充电行为,但你可能需要在长距离路线上添加其他充电方式。 +se-cmes-max-frequency=日冕物质喷射(CME)的最大间隔时间。 该值以小时为单位,0=禁用。 第一次 CME 会被脚本化到游戏的第一分钟,并且大部分是无害的。 第二次会延迟大约48小时。 重复之间的延迟是最大间隔设置的50%到100%之间。 非零的设置只适用于新事件,一旦设置了预期抵达时间,就不再受到影响。 零设置将清除所有已排定的CME,但可能需要长达一分钟的时间才会生效。 +se-spawn-small-resources=在起始区域添加一些额外的小资源区。 资源区聚集分布,以减少资源之间的运输时间。 +se-show-overhead-button-satellite-mode=在屏幕左上方显示一个小按钮,用于切换导航卫星视角。 +se-show-overhead-button-interstellar-map=在屏幕左上方显示一个小按钮,用于切换星际地图。 +se-show-overhead-button-universe-explorer=在屏幕左上方显示一个小按钮,用于切换宇宙浏览器。 +se-show-pin-help-tooltip=在大头针按钮上显示一个帮助提示,展示如何使用它们的说明。 +se-scan-search-budget=卫星扫描。 可检查地图状态的块数。 高值可使其加快已扫描的数据块的速度,以到达未扫描的边缘。 +se-scan-chart-budget=卫星扫描。 可并行添加到制图缓冲区的分块请求数量。 如果前一个分块还没有完成,则不会有新的图表请求。 +se-scan-alert-interval=表面扫描更新提醒的间隔时间,以秒为单位。揭示表面会增加游戏保存文件的大小,所以最好不要开了一个就忘了。 +se-supercharger-individual-charge-rate=设置超充器中每个单独充电端口的充电率,以MW为单位(不影响最大充电率)。 最小(默认)值为90MW,足以在一秒钟内为原版机器人充满电,最高可达1000MW,即1GW(超充能器的最大充电率)。 + +[string-mod-setting] +se-space-science-pack-Remove=完全移除 +se-space-science-pack-Replace=用火箭科研包代替 +se-space-science-pack-OptimisationUranium=优化:铀-冰晶石 配方 +se-space-science-pack-OptimisationFish=优化:维生质-火成岩-鱼 配方 + +[autoplace-control-names] +planet-size=星球尺寸 +se-water-ice=水冰(仅在太空生成) +se-methane-ice=甲烷冰(仅在太空生成) +se-cryonite=冰晶石(不会在母星生成) +se-vulcanite=火成岩(不会在母星生成) +se-vitamelange=维生质(不会在母星生成) +se-beryllium-ore=铍矿(不会在母星生成) +se-holmium-ore=钬矿(不会在母星生成) +se-iridium-ore=铱矿(不会在母星生成) +se-naquium-ore=寂介素矿(仅在太空生成) + +[map-gen-preset-name] +space-exploration=太空探索默认 + +[map-gen-preset-description] +space-exploration=太空探索的默认设置 + +[tooltip-category] +shot=用途 diff --git a/space-exploration_0.5.80/space-exploration/lua-style.cfg b/space-exploration_0.5.80/space-exploration/lua-style.cfg new file mode 100644 index 0000000..dad38fd --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/lua-style.cfg @@ -0,0 +1,3 @@ +indent_width: 2 +column_limit: 120 +continuation_indent_width: 2 \ No newline at end of file diff --git a/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.1.146.json b/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.1.146.json new file mode 100644 index 0000000..fb2ec2c --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.1.146.json @@ -0,0 +1,10 @@ +{ + "item": + [ + ["se-quantumn-phenomenon-data", "se-quantum-phenomenon-data"] + ], + "recipe": + [ + ["se-quantumn-phenomenon-data", "se-quantum-phenomenon-data"] + ] +} diff --git a/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.1.64.json b/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.1.64.json new file mode 100644 index 0000000..4045e56 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.1.64.json @@ -0,0 +1,6 @@ +{ + "technology": + [ + ["se-spaceship-supersize", "se-factory-spaceship-1"] + ] +} diff --git a/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.1.8.json b/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.1.8.json new file mode 100644 index 0000000..6ae6431 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.1.8.json @@ -0,0 +1,8 @@ +{ + "tile": + [ + ["se-space-platform-underlay", "se-space"], + ["se-space-platform-underlay-l", "se-space"], + ["se-space-platform-underlay-r", "se-space"] + ] +} diff --git a/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.2.5.json b/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.2.5.json new file mode 100644 index 0000000..0a2dfbe --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.2.5.json @@ -0,0 +1,14 @@ +{ + "item": + [ + ["se-core-fragment-processor", "se-pulveriser"] + ], + "recipe": + [ + ["se-core-fragment-processor", "se-pulveriser"] + ], + "entity": + [ + ["se-core-fragment-processor", "se-pulveriser"] + ] +} diff --git a/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.2.7.lua b/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.2.7.lua new file mode 100644 index 0000000..a0c0b57 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.2.7.lua @@ -0,0 +1,8 @@ +-- move all drills down by 1 pixel so that the animation is on top +for _, surface in pairs(game.surfaces) do + for _, entity in pairs(surface.find_entities_filtered{name="se-core-miner-drill"}) do + entity.teleport({x = entity.position.x, y = entity.position.y + 1/32}) + local e = entity.surface.find_entity("se-core-miner", entity.position) + if e then e.direction = entity.direction end + end +end diff --git a/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.3.126.lua b/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.3.126.lua new file mode 100644 index 0000000..afcf528 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.3.126.lua @@ -0,0 +1,16 @@ +-- fixing "launching_to_destiantion" spelling error in prior launchpad.lua code causes a crash on a save prior to this one during which a rocket is launched, this aims to fix that +if global.rocket_launch_pads then + for _, struct in pairs(global.rocket_launch_pads) do + if struct.launching_to_destiantion then + struct.launching_to_destination = struct.launching_to_destiantion + end + end +end + +if global.tick_tasks then + for _, tick_task in pairs(global.tick_tasks) do + if tick_task.launching_to_destiantion then + tick_task.launching_to_destination = tick_task.launching_to_destiantion + end + end +end diff --git a/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.3.13.json b/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.3.13.json new file mode 100644 index 0000000..ef0939e --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.3.13.json @@ -0,0 +1,6 @@ +{ + "technology": + [ + ["se-space-solar-panel-adv", "se-space-solar-panel-2"] + ] +} diff --git a/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.3.130.json b/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.3.130.json new file mode 100644 index 0000000..65517cf --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.3.130.json @@ -0,0 +1,20 @@ +{ + "item": + [ + ["se-nano-material", "se-nanomaterial"], + ["se-enriched-naquium", "se-naquium-cube"], + ["se-universal-catalogue", "se-deep-catalogue-1"], + ["se-deep-space-science-pack", "se-deep-space-science-pack-1"] + ], + "recipe": + [ + ["se-nano-material", "se-nanomaterial"], + ["se-deep-space-science-pack", "se-deep-space-science-pack-1"] + ], + "technology": + [ + ["se-nano-material", "se-nanomaterial"], + ["se-deep-space-science-pack", "se-deep-space-science-pack-1"], + ["se-deep-space-science-pack-enriched", "se-deep-space-science-pack-1"] + ] +} diff --git a/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.3.21.json b/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.3.21.json new file mode 100644 index 0000000..aff3caa --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.3.21.json @@ -0,0 +1,53 @@ +{ + "item": + [ + ["se-orbital-data", "se-machine-learning-data"], + + ["se-exotic-singularity-data", "se-singularity-data"], + ["se-gravimetric-observation-data", "se-astrometric-data"], + ["se-gravity-wave-observation-data", "se-gravity-wave-data"], + ["se-gravimetric-test-data", "se-gravitational-lensing-data"], + + ["se-nano-hot-thermodynamics-data", "se-experimental-alloys-data"], + ["se-nano-cold-thermodynamics-data", "se-electrical-shielding-data"], + ["se-nano-compressive-strength-data", "se-laser-shielding-data"], + ["se-nano-tensile-strength-data", "se-particle-beam-shielding-data"], + + ["se-plasma-thermodynamics-data", "se-rigidity-data"], + ["se-plasma-electrodynamics-data", "se-electromagnetic-field-data"], + ["se-gammaray-test-data", "se-lepton-data"], + ["se-exotic-fission-data", "se-fusion-test-data"], + ["se-ion-spectrometry-data", "se-polarisation-data"], + ["se-bio-spectral-data", "se-biomechanical-data"], + + ["se-material-decay-data", "se-corrosion-resistance-data"], + ["se-material-spectral-data", "se-rigidity-data"], + ["se-experimental-material-decay-data", "se-electrical-shielding-data"], + ["se-experimental-material-spectral-data", "se-ballistic-shielding-data"], + + ["se-astronomic-science-pack", "se-astronomic-science-pack-1"], + ["se-biological-science-pack", "se-biological-science-pack-1"], + ["se-material-science-pack", "se-material-science-pack-1"], + ["se-energy-science-pack", "se-energy-science-pack-1"] + ], + "recipe": + [ + ["se-orbital-data", "se-machine-learning-data"], + + ["se-exotic-singularity-data", "se-singularity-data"], + ["se-gravimetric-observation-data", "se-gravitational-lensing-data"], + ["se-gravity-wave-observation-data", "se-gravity-wave-data"], + + ["se-astronomic-science-pack", "se-astronomic-science-pack-1"], + ["se-biological-science-pack", "se-biological-science-pack-1"], + ["se-material-science-pack", "se-material-science-pack-1"], + ["se-energy-science-pack", "se-energy-science-pack-1"] + ], + "technology": + [ + ["se-astronomic-science-pack", "se-astronomic-science-pack-1"], + ["se-biological-science-pack", "se-biological-science-pack-1"], + ["se-material-science-pack", "se-material-science-pack-1"], + ["se-energy-science-pack", "se-energy-science-pack-1"] + ] +} diff --git a/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.3.32.json b/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.3.32.json new file mode 100644 index 0000000..85e847b --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.3.32.json @@ -0,0 +1,22 @@ +{ + "entity": + [ + ["se-space-recycling-facility", "se-recycling-facility"], + ["se-space-lifesupport-facility", "se-lifesupport-facility"] + ], + "item": + [ + ["se-space-recycling-facility", "se-recycling-facility"], + ["se-space-lifesupport-facility", "se-lifesupport-facility"] + ], + "recipe": + [ + ["se-space-recycling-facility", "se-recycling-facility"], + ["se-space-lifesupport-facility", "se-lifesupport-facility"] + ], + "technology": + [ + ["se-space-recycling-facility", "se-recycling-facility"], + ["se-space-lifesupport-facility", "se-lifesupport-facility"] + ] +} diff --git a/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.5.1.json b/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.5.1.json new file mode 100644 index 0000000..8dfe4ea --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/migrations/space-exploration.0.5.1.json @@ -0,0 +1,12 @@ +{ + "item": + [ + ["railgun", "se-railgun"], + ["railgun-dart", "se-railgun-ammo"] + ], + "recipe": + [ + ["railgun", "se-railgun"], + ["railgun-dart", "se-railgun-ammo"] + ] +} diff --git a/space-exploration_0.5.80/space-exploration/migrations/space-exploration0.0.3.45.json b/space-exploration_0.5.80/space-exploration/migrations/space-exploration0.0.3.45.json new file mode 100644 index 0000000..04d437f --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/migrations/space-exploration0.0.3.45.json @@ -0,0 +1,10 @@ +{ + "recipe": + [ + ["se-radiating-space-coolant-veryslow", "se-radiating-space-coolant-slow"] + ], + "technology": + [ + ["se-space-radiating-1", "se-space-radiating-efficiency"] + ] +} diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/categories.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/categories.lua new file mode 100644 index 0000000..633a3c6 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/categories.lua @@ -0,0 +1,105 @@ +local data_util = require("data_util") + +-- NOTE: space- prefix categories should ONLY be available in space +-- otherwise add a non-prefixed version +local crafting_categories = { + "arcosphere", + "condenser-turbine", + "big-turbine", + "delivery-cannon", + "delivery-cannon-weapon", + "fixed-recipe", -- generic group for anything with a fixed recipe, not chosen by player + "fuel-refining", + "core-fragment-processing", + "lifesupport", -- same as "space-lifesupport" but can be on land + "nexus", + "pulverising", + "hard-recycling", -- no conflict with "recycling" + "hand-hard-recycling", -- no conflict with "recycling" + "se-electric-boiling", -- needs to be SE specific otherwise energy values will be off + "space-accelerator", + "space-astrometrics", + "space-biochemical", + "space-collider", + "space-crafting", -- same as basic assembling but only in space + "space-decontamination", + "space-electromagnetics", + "space-materialisation", + "space-genetics", + "space-gravimetrics", + "space-growth", + "space-hypercooling", + "space-laser", + "space-lifesupport", -- same as "lifesupport" but can only be in space + "space-manufacturing", + "space-mechanical", + "space-observation-gammaray", + "space-observation-xray", + "space-observation-uv", + "space-observation-visible", + "space-observation-infrared", + "space-observation-microwave", + "space-observation-radio", + "space-plasma", + "space-radiation", + "space-radiator", + "space-hard-recycling", -- no conflict with "recycling" + "space-research", + "space-spectrometry", + "space-supercomputing-1", + "space-supercomputing-2", + "space-supercomputing-3", + "space-supercomputing-4", + "space-thermodynamics", + "spaceship-console", + "spaceship-antimatter-engine", + "spaceship-ion-engine", + "spaceship-rocket-engine", + "pressure-washing", + "dummy", + "no-category" -- has no recipes +} +for _, name in pairs(crafting_categories) do + data:extend({ + { type = "recipe-category", name = name }, + { + type = "item-subgroup", + name = name, + group = "intermediate-products", --group = "space", + order = "z-b-"..name + }, + }) +end +-- table.insert(data.raw.character.character.crafting_categories, "lifesupport") -- too many fluid recipes +data:extend({ + { + type = "fuel-category", + name = "antimatter" + }, + { + type = "resource-category", + name = "hard-resource", + }, + { + type = "resource-category", + name = data_util.mod_prefix .. "core-mining", + }, + { + type = "ammo-category", + name = "weapons-delivery-cannon", + bonus_gui_order = "z", + }, +}) + + +for _, tech in pairs(data.raw.technology) do + if tech.effects then + for _, effect in pairs(tech.effects) do + if (effect.type == "ammo-damage" or effect.type == "gun-speed") and effect.ammo_category == "bullet" then + local c = table.deepcopy(effect) + c.ammo_category = "railgun" + table.insert(tech.effects, c) + end + end + end +end diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/antimatter-reactor.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/antimatter-reactor.lua new file mode 100644 index 0000000..a9cd13d --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/antimatter-reactor.lua @@ -0,0 +1,1052 @@ +local data_util = require("data_util") + +local blank = { + direction_count = 8, + frame_count = 1, + filename = "__space-exploration-graphics__/graphics/blank.png", + width = 1, + height = 1, + priority = "low" +} + +local max_temperature = 10000 +local specific_heat_reactor = "10MJ" +local specific_heat_pipe = "1MJ" +local specific_heat_pipe_long = "2MJ" +local max_transfer = "100GW" +local pipe_tint = {r = 0.8, b=1, g=0.8} +local glow_tint = {r = 0.5, b=1, g=0.5} +local long_versions = { + {pattern = "--+--", icon = "__space-exploration-graphics__/graphics/icons/naquium-heat-pipe-horizontal.png"}, + {pattern = "--+-----+--", icon = "__space-exploration-graphics__/graphics/icons/naquium-heat-pipe-horizontal-2.png"}, +} +data:extend({ + { + type = "reactor", + name = data_util.mod_prefix .. "antimatter-reactor", + icon = "__space-exploration-graphics__/graphics/icons/antimatter-reactor.png", + icon_size = 64, + flags = {"placeable-neutral", "player-creation"}, + minable = {mining_time = 0.5, result = data_util.mod_prefix .. "antimatter-reactor"}, + max_health = 500, + corpse = "nuclear-reactor-remnants", + consumption = "400MW", + neighbour_bonus = 1, + energy_source = + { + type = "burner", + fuel_category = "antimatter", + effectivity = 1, + fuel_inventory_size = 1, + burnt_inventory_size = 1 + }, + collision_box = {{-2.2, -2.2}, {2.2, 2.2}}, + selection_box = {{-2.5, -2.5}, {2.5, 2.5}}, + --the collision box of a reactor is increased by this on the sides where it connects to another reactor: + --neighbour_collision_increase = 0.25, + lower_layer_picture = + { + filename = "__base__/graphics/entity/nuclear-reactor/reactor-pipes.png", + width = 156, + height = 156, + shift = util.by_pixel(-2, -4), + tint = pipe_tint, + hr_version = + { + filename = "__base__/graphics/entity/nuclear-reactor/hr-reactor-pipes.png", + width = 320, + height = 316, + scale = 0.5, + shift = util.by_pixel(-1, -5), + tint = pipe_tint, + } + }, + heat_lower_layer_picture = + { + filename = "__base__/graphics/entity/nuclear-reactor/reactor-pipes-heated.png", + width = 156, + height = 156, + shift = util.by_pixel(-3, -4), + tint = glow_tint, + blend_mode = "additive", + hr_version = + { + filename = "__base__/graphics/entity/nuclear-reactor/hr-reactor-pipes-heated.png", + width = 320, + height = 316, + scale = 0.5, + shift = util.by_pixel(-0.5, -4.5), + tint = glow_tint, + blend_mode = "additive", + } + }, + + picture = + { + layers = + { + { + filename = "__space-exploration-graphics-3__/graphics/entity/antimatter-reactor/reactor.png", + width = 160, + height = 160, + shift = { -0.03125, -0.1875 }, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/antimatter-reactor/hr-reactor.png", + width = 320, + height = 320, + scale = 0.5, + shift = { -0.03125, -0.1875 } + } + }, + { + filename = "__base__/graphics/entity/nuclear-reactor/reactor-shadow.png", + width = 263, + height = 162, + shift = { 1.625 , 0 }, + draw_as_shadow = true, + hr_version = { + filename = "__base__/graphics/entity/nuclear-reactor/hr-reactor-shadow.png", + width = 525, + height = 323, + scale = 0.5, + shift = { 1.625, 0 }, + draw_as_shadow = true + } + } + } + }, + + working_light_picture = + { + filename = "__space-exploration-graphics-3__/graphics/entity/antimatter-reactor/reactor-lights-color.png", + width = 160, + height = 160, + shift = { -0.03125, -0.1875 }, + blend_mode = "additive", + hr_version = + { + filename = "__space-exploration-graphics-3__/graphics/entity/antimatter-reactor/hr-reactor-lights-color.png", + width = 320, + height = 320, + scale = 0.5, + shift = { -0.03125, -0.1875 }, + blend_mode = "additive" + } + }, + + light = {intensity = 1, size = 9.9, shift = {0.0, 0.0}, color = {r = 0.9, g = 0.0, b = 1.0}}, + + heat_buffer = + { + max_temperature = max_temperature, + specific_heat = specific_heat_reactor, + max_transfer = max_transfer, + connections = + { + { + position = {-2, -2}, + direction = defines.direction.north + }, + { + position = {0, -2}, + direction = defines.direction.north + }, + { + position = {2, -2}, + direction = defines.direction.north + }, + { + position = {2, -2}, + direction = defines.direction.east + }, + { + position = {2, 0}, + direction = defines.direction.east + }, + { + position = {2, 2}, + direction = defines.direction.east + }, + { + position = {2, 2}, + direction = defines.direction.south + }, + { + position = {0, 2}, + direction = defines.direction.south + }, + { + position = {-2, 2}, + direction = defines.direction.south + }, + { + position = {-2, 2}, + direction = defines.direction.west + }, + { + position = {-2, 0}, + direction = defines.direction.west + }, + { + position = {-2, -2}, + direction = defines.direction.west + } + }, + + heat_picture = + { + filename = "__base__/graphics/entity/nuclear-reactor/reactor-heated.png", + width = 108, + height = 128, + shift = util.by_pixel(1, -7), + tint = glow_tint, + blend_mode = "additive", + hr_version = + { + filename = "__base__/graphics/entity/nuclear-reactor/hr-reactor-heated.png", + width = 216, + height = 256, + scale = 0.5, + shift = util.by_pixel(3, -6.5), + tint = glow_tint, + blend_mode = "additive", + } + }, + heat_glow = + { + filename = "__base__/graphics/entity/nuclear-reactor/reactor-heat-glow.png", + priority = "extra-high", + width = 188, + height = 190, + shift = util.by_pixel(-2, -4), + tint = glow_tint, + blend_mode = "additive", + } + }, + + connection_patches_connected = + { + sheet = + { + filename = "__base__/graphics/entity/nuclear-reactor/reactor-connect-patches.png", + width = 32, + height = 32, + variation_count = 12, + tint = pipe_tint, + hr_version = + { + filename = "__base__/graphics/entity/nuclear-reactor/hr-reactor-connect-patches.png", + width = 64, + height = 64, + variation_count = 12, + scale = 0.5, + tint = pipe_tint, + } + } + }, + + connection_patches_disconnected = + { + sheet = + { + filename = "__base__/graphics/entity/nuclear-reactor/reactor-connect-patches.png", + width = 32, + height = 32, + variation_count = 12, + y = 32, + tint = pipe_tint, + hr_version = + { + filename = "__base__/graphics/entity/nuclear-reactor/hr-reactor-connect-patches.png", + width = 64, + height = 64, + variation_count = 12, + y = 64, + scale = 0.5, + tint = pipe_tint, + } + } + }, + + connection_patches = + { + north = + { + filename = "__base__/graphics/entity/nuclear-reactor/connection-patch-north.png", + width = 160, + height = 15, + shift = util.by_pixel(0, -72.5), + tint = pipe_tint, + }, + east = + { + filename = "__base__/graphics/entity/nuclear-reactor/connection-patch-east.png", + width = 15, + height = 160, + shift = util.by_pixel(72.5, 0) + }, + south = + { + filename = "__base__/graphics/entity/nuclear-reactor/connection-patch-south.png", + width = 160, + height = 15, + shift = util.by_pixel(0, 72.5) + }, + west = + { + filename = "__base__/graphics/entity/nuclear-reactor/connection-patch-west.png", + width = 15, + height = 160, + shift = util.by_pixel(-72.5, 0) + } + }, + + heat_connection_patches_connected = + { + sheet = + { + filename = "__base__/graphics/entity/nuclear-reactor/reactor-connect-patches-heated.png", + width = 32, + height = 32, + variation_count = 12, + tint = glow_tint, + blend_mode = "additive", + hr_version = + { + filename = "__base__/graphics/entity/nuclear-reactor/hr-reactor-connect-patches-heated.png", + width = 64, + height = 64, + variation_count = 12, + scale = 0.5, + tint = glow_tint, + blend_mode = "additive", + } + } + }, + + heat_connection_patches_disconnected = + { + sheet = + { + filename = "__base__/graphics/entity/nuclear-reactor/reactor-connect-patches-heated.png", + width = 32, + height = 32, + variation_count = 12, + y = 32, + tint = glow_tint, + blend_mode = "additive", + hr_version = + { + filename = "__base__/graphics/entity/nuclear-reactor/hr-reactor-connect-patches-heated.png", + width = 64, + height = 64, + variation_count = 12, + y = 64, + scale = 0.5, + tint = glow_tint, + blend_mode = "additive", + } + } + }, + + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65}, + + meltdown_action = + { + type = "direct", + action_delivery = + { + type = "instant", + target_effects = + { + { + repeat_count = 100, + type = "create-trivial-smoke", + smoke_name = "nuclear-smoke", + offset_deviation = {{-1, -1}, {1, 1}}, + starting_frame = 3, + starting_frame_deviation = 5, + starting_frame_speed = 0, + starting_frame_speed_deviation = 5, + speed_from_center = 0.5 + }, + { + type = "create-entity", + entity_name = "explosion" + }, + { + type = "damage", + damage = {amount = 400, type = "explosion"} + }, + { + type = "create-entity", + entity_name = "small-scorchmark", + check_buildability = true + }, + { + type = "nested-result", + action = + { + type = "area", + target_entities = false, + trigger_from_target = true, + repeat_count = 2000, + radius = 35, + action_delivery = + { + type = "projectile", + projectile = "atomic-bomb-wave", + starting_speed = 0.5 + } + } + } + } + } + } + }, +}) + +data.raw["heat-pipe"]["heat-pipe"].fast_replaceable_group = "heat-pipe" +local heat_pipe = table.deepcopy(data.raw["heat-pipe"]["heat-pipe"]) +heat_pipe.name = data_util.mod_prefix .. "naquium-heat-pipe" +heat_pipe.icon = "__space-exploration-graphics__/graphics/icons/naquium-heat-pipe.png" +heat_pipe.icon_size = 64 +heat_pipe.icon_mipmaps = 1 +heat_pipe.heat_buffer.max_temperature = max_temperature +heat_pipe.heat_buffer.specific_heat = specific_heat_pipe +heat_pipe.heat_buffer.max_transfer = max_transfer +heat_pipe.order = "z" +heat_pipe.minable.result = data_util.mod_prefix .. "naquium-heat-pipe" + +data_util.tint_recursive(heat_pipe.connection_sprites, pipe_tint) +data_util.tint_recursive(heat_pipe.heat_glow_sprites, glow_tint) +data_util.blend_mode_recursive(heat_pipe.heat_glow_sprites, "additive") +data_util.tint_recursive(heat_pipe.heat_buffer.heat_glow, glow_tint) +data_util.blend_mode_recursive(heat_pipe.heat_buffer.heat_glow, "additive") +data:extend({ + heat_pipe, +}) + +local pipes_cross = { + { + filename = "__base__/graphics/entity/heat-pipe/heat-pipe-t-1.png", + height = 32, + priority = "extra-high", + width = 32, + hr_version = { + filename = "__base__/graphics/entity/heat-pipe/hr-heat-pipe-t-1.png", + height = 64, + priority = "extra-high", + scale = 0.5, + width = 64 + }, + } +} +local pipes_horizontal = { + { + filename = "__base__/graphics/entity/heat-pipe/heat-pipe-straight-horizontal-1.png", + height = 32, + priority = "extra-high", + width = 32, + hr_version = { + filename = "__base__/graphics/entity/heat-pipe/hr-heat-pipe-straight-horizontal-1.png", + height = 64, + priority = "extra-high", + scale = 0.5, + width = 64, + }, + }, + { + filename = "__base__/graphics/entity/heat-pipe/heat-pipe-straight-horizontal-2.png", + height = 32, + priority = "extra-high", + width = 32, + hr_version = { + filename = "__base__/graphics/entity/heat-pipe/hr-heat-pipe-straight-horizontal-2.png", + height = 64, + priority = "extra-high", + scale = 0.5, + width = 64, + }, + }, + { + filename = "__base__/graphics/entity/heat-pipe/heat-pipe-straight-horizontal-3.png", + height = 32, + priority = "extra-high", + width = 32, + shift = {-4,0}, + hr_version = { + filename = "__base__/graphics/entity/heat-pipe/hr-heat-pipe-straight-horizontal-3.png", + height = 64, + priority = "extra-high", + scale = 0.5, + width = 64, + }, + }, + { + filename = "__base__/graphics/entity/heat-pipe/heat-pipe-straight-horizontal-4.png", + height = 32, + priority = "extra-high", + width = 32, + hr_version = { + filename = "__base__/graphics/entity/heat-pipe/hr-heat-pipe-straight-horizontal-4.png", + height = 64, + priority = "extra-high", + scale = 0.5, + width = 64, + }, + }, + { + filename = "__base__/graphics/entity/heat-pipe/heat-pipe-straight-horizontal-5.png", + height = 32, + priority = "extra-high", + width = 32, + hr_version = { + filename = "__base__/graphics/entity/heat-pipe/hr-heat-pipe-straight-horizontal-5.png", + height = 64, + priority = "extra-high", + scale = 0.5, + width = 64, + }, + }, + { + filename = "__base__/graphics/entity/heat-pipe/heat-pipe-straight-horizontal-6.png", + height = 32, + priority = "extra-high", + width = 32, + hr_version = { + filename = "__base__/graphics/entity/heat-pipe/hr-heat-pipe-straight-horizontal-6.png", + height = 64, + priority = "extra-high", + scale = 0.5, + width = 64, + }, + }, +} +local pipes_vertical = { + { + filename = "__base__/graphics/entity/heat-pipe/heat-pipe-straight-vertical-1.png", + height = 32, + priority = "extra-high", + width = 32, + hr_version = { + filename = "__base__/graphics/entity/heat-pipe/hr-heat-pipe-straight-vertical-1.png", + height = 64, + priority = "extra-high", + scale = 0.5, + width = 64, + }, + }, + { + filename = "__base__/graphics/entity/heat-pipe/heat-pipe-straight-vertical-2.png", + height = 32, + priority = "extra-high", + width = 32, + hr_version = { + filename = "__base__/graphics/entity/heat-pipe/hr-heat-pipe-straight-vertical-2.png", + height = 64, + priority = "extra-high", + scale = 0.5, + width = 64, + }, + }, + { + filename = "__base__/graphics/entity/heat-pipe/heat-pipe-straight-vertical-3.png", + height = 32, + priority = "extra-high", + width = 32, + shift = {-4,0}, + hr_version = { + filename = "__base__/graphics/entity/heat-pipe/hr-heat-pipe-straight-vertical-3.png", + height = 64, + priority = "extra-high", + scale = 0.5, + width = 64, + }, + }, + { + filename = "__base__/graphics/entity/heat-pipe/heat-pipe-straight-vertical-4.png", + height = 32, + priority = "extra-high", + width = 32, + hr_version = { + filename = "__base__/graphics/entity/heat-pipe/hr-heat-pipe-straight-vertical-4.png", + height = 64, + priority = "extra-high", + scale = 0.5, + width = 64, + }, + }, + { + filename = "__base__/graphics/entity/heat-pipe/heat-pipe-straight-vertical-5.png", + height = 32, + priority = "extra-high", + width = 32, + hr_version = { + filename = "__base__/graphics/entity/heat-pipe/hr-heat-pipe-straight-vertical-5.png", + height = 64, + priority = "extra-high", + scale = 0.5, + width = 64, + }, + }, + { + filename = "__base__/graphics/entity/heat-pipe/heat-pipe-straight-vertical-6.png", + height = 32, + priority = "extra-high", + width = 32, + hr_version = { + filename = "__base__/graphics/entity/heat-pipe/hr-heat-pipe-straight-vertical-6.png", + height = 64, + priority = "extra-high", + scale = 0.5, + width = 64, + }, + }, +} +local pipe_glow = { + filename = "__base__/graphics/entity/heat-pipe/heated-glow.png", + width = 55, + height = 55, + priority = "extra-high", + tint = glow_tint, + blend_mode = "additive" +} + +local shift_sprite = data_util.shift_sprite + +for _, version in pairs(long_versions) do + local length = #version.pattern + local name = heat_pipe.name.."-long"..version.pattern + local long_pipes_horizontal = {} + local long_pipes_vertical = {} + local long_pipes_glow_horizontal = {} + local long_pipes_glow_vertical = {} + local connections = {} + for i = 1, #version.pattern do + local c = string.sub(version.pattern, i, i) + local j = i - length/2 -0.5 + if i == 1 and (c == "-" or c == "+") then + table.insert(connections,{ + position = {0, j}, + direction = defines.direction.north + }) + end + if i == length and (c == "-" or c == "+") then + table.insert(connections,{ + position = {0, j}, + direction = defines.direction.south + }) + end + if c == "+" then + table.insert(connections,{ + position = {0, j}, + direction = defines.direction.east + }) + table.insert(connections,{ + position = {0, j}, + direction = defines.direction.west + }) + table.insert(long_pipes_horizontal, shift_sprite(table.deepcopy(pipes_cross[1+i%#pipes_cross]),{j,0})) + table.insert(long_pipes_vertical, shift_sprite(table.deepcopy(pipes_cross[1+i%#pipes_cross]),{0,j})) + elseif c == "-" then + table.insert(long_pipes_horizontal, shift_sprite(table.deepcopy(pipes_horizontal[1+i%#pipes_horizontal]),{j,0})) + table.insert(long_pipes_vertical, shift_sprite(table.deepcopy(pipes_vertical[1+i%#pipes_vertical]),{0,j})) + end + table.insert(long_pipes_glow_horizontal, shift_sprite(table.deepcopy(pipe_glow),{j,0})) + table.insert(long_pipes_glow_vertical, shift_sprite(table.deepcopy(pipe_glow),{0,j})) + end + local long_pipes_heated_horizontal = table.deepcopy(long_pipes_horizontal) + local long_pipes_heated_vertical = table.deepcopy(long_pipes_vertical) + data_util.tint_recursive(long_pipes_horizontal, pipe_tint) + data_util.tint_recursive(long_pipes_vertical, pipe_tint) + + data_util.replace_filenames_recursive(long_pipes_heated_horizontal, "heat-pipe/heat-pipe", "heat-pipe/heated") + data_util.replace_filenames_recursive(long_pipes_heated_horizontal, "heat-pipe/hr-heat-pipe", "heat-pipe/hr-heated") + data_util.tint_recursive(long_pipes_heated_horizontal, glow_tint) + data_util.blend_mode_recursive(long_pipes_heated_horizontal, "additive") + + data_util.replace_filenames_recursive(long_pipes_heated_vertical, "heat-pipe/heat-pipe", "heat-pipe/heated") + data_util.replace_filenames_recursive(long_pipes_heated_vertical, "heat-pipe/hr-heat-pipe", "heat-pipe/hr-heated") + data_util.tint_recursive(long_pipes_heated_vertical, glow_tint) + data_util.blend_mode_recursive(long_pipes_heated_vertical, "additive") + + + table.insert(data.raw.technology[data_util.mod_prefix.."processing-naquium"].effects, + { type = "unlock-recipe", recipe = name }) + data:extend{ + { + type = "item", + name = name, + icon = version.icon, + icon_size = 64, + order = "f[nuclear-energy]-b[heat-pipe]-n", + subgroup = "energy", + stack_size = 50, + place_result = name, + }, + { + type = "recipe", + name = name, + result = name, + enabled = false, + energy_required = 10, + ingredients = { + { data_util.mod_prefix .. "naquium-heat-pipe", math.ceil(length/2)}, + }, + requester_paste_multiplier = 1, + always_show_made_in = true, + }, + { + type = "boiler", + name = name, + localised_name = {"entity-name."..data_util.mod_prefix.."naquium-heat-pipe-long", version.pattern}, + localised_description = {"entity-description."..data_util.mod_prefix.."naquium-heat-pipe-long", version.pattern}, + burning_cooldown = 20, + collision_box = {{-0.3,-(length/2-0.2)},{0.3,(length/2-0.2)}}, + collision_mask = { + "item-layer", + "floor-layer", + "object-layer", + "water-tile" + }, + selection_box = {{-0.5,-length/2},{0.5,length/2}}, + order = "z", + corpse = "heat-pipe-remnants", + damaged_trigger_effect = { + entity_name = "spark-explosion", + offset_deviation = { + { + -0.5, + -0.5 + }, + { + 0.5, + 0.5 + } + }, + offsets = { + { + 0, + 1 + } + }, + type = "create-entity" + }, + dying_explosion = "heat-exchanger-explosion", + energy_consumption = "0.0000001W", + energy_source = { + connections = connections, + heat_glow = { + east = {layers = long_pipes_glow_horizontal}, + north = {layers = long_pipes_glow_vertical}, + south = {layers = long_pipes_glow_vertical}, + west = {layers = long_pipes_glow_horizontal}, + }, + heat_picture = { + east = {layers = {{layers = long_pipes_heated_horizontal}}}, + north = {layers = {{layers = long_pipes_heated_vertical}}}, + south = {layers ={{layers = long_pipes_heated_vertical}}}, + west = {layers = {{layers = long_pipes_heated_horizontal}}}, + }, + heat_pipe_covers = { + east = { + filename = "__base__/graphics/entity/heat-exchanger/heatex-endings-heated.png", + frame_count = 1, + height = 32, + tint = glow_tint, + blend_mode = "additive", + hr_version = { + tint = glow_tint, + blend_mode = "additive", + filename = "__base__/graphics/entity/heat-exchanger/hr-heatex-endings-heated.png", + frame_count = 1, + height = 64, + priority = "high", + scale = 0.5, + width = 64, + x = 64, + y = 0 + }, + priority = "high", + scale = 1, + width = 32, + x = 32, + y = 0 + }, + north = { + filename = "__base__/graphics/entity/heat-exchanger/heatex-endings-heated.png", + frame_count = 1, + height = 32, + tint = glow_tint, + blend_mode = "additive", + hr_version = { + tint = glow_tint, + blend_mode = "additive", + filename = "__base__/graphics/entity/heat-exchanger/hr-heatex-endings-heated.png", + frame_count = 1, + height = 64, + priority = "high", + scale = 0.5, + width = 64, + x = 0, + y = 0 + }, + priority = "high", + scale = 1, + width = 32, + x = 0, + y = 0 + }, + south = { + filename = "__base__/graphics/entity/heat-exchanger/heatex-endings-heated.png", + frame_count = 1, + height = 32, + tint = glow_tint, + blend_mode = "additive", + hr_version = { + tint = glow_tint, + blend_mode = "additive", + filename = "__base__/graphics/entity/heat-exchanger/hr-heatex-endings-heated.png", + frame_count = 1, + height = 64, + priority = "high", + scale = 0.5, + width = 64, + x = 128, + y = 0 + }, + priority = "high", + scale = 1, + width = 32, + x = 64, + y = 0 + }, + west = { + filename = "__base__/graphics/entity/heat-exchanger/heatex-endings-heated.png", + frame_count = 1, + height = 32, + tint = glow_tint, + blend_mode = "additive", + hr_version = { + tint = glow_tint, + blend_mode = "additive", + filename = "__base__/graphics/entity/heat-exchanger/hr-heatex-endings-heated.png", + frame_count = 1, + height = 64, + priority = "high", + scale = 0.5, + width = 64, + x = 192, + y = 0 + }, + priority = "high", + scale = 1, + width = 32, + x = 96, + y = 0 + } + }, + max_temperature = max_temperature, + max_transfer = max_transfer, + min_working_temperature = max_temperature, + minimum_glow_temperature = 350, + pipe_covers = { + east = { + filename = "__base__/graphics/entity/heat-exchanger/heatex-endings.png", + frame_count = 1, + height = 32, + tint = pipe_tint, + hr_version = { + tint = pipe_tint, + filename = "__base__/graphics/entity/heat-exchanger/hr-heatex-endings.png", + frame_count = 1, + height = 64, + priority = "high", + scale = 0.5, + width = 64, + x = 64, + y = 0 + }, + priority = "high", + scale = 1, + width = 32, + x = 32, + y = 0 + }, + north = { + filename = "__base__/graphics/entity/heat-exchanger/heatex-endings.png", + frame_count = 1, + height = 32, + tint = pipe_tint, + hr_version = { + tint = pipe_tint, + filename = "__base__/graphics/entity/heat-exchanger/hr-heatex-endings.png", + frame_count = 1, + height = 64, + priority = "high", + scale = 0.5, + width = 64, + x = 0, + y = 0 + }, + priority = "high", + scale = 1, + width = 32, + x = 0, + y = 0 + }, + south = { + filename = "__base__/graphics/entity/heat-exchanger/heatex-endings.png", + frame_count = 1, + height = 32, + tint = pipe_tint, + hr_version = { + tint = pipe_tint, + filename = "__base__/graphics/entity/heat-exchanger/hr-heatex-endings.png", + frame_count = 1, + height = 64, + priority = "high", + scale = 0.5, + width = 64, + x = 128, + y = 0 + }, + priority = "high", + scale = 1, + width = 32, + x = 64, + y = 0 + }, + west = { + filename = "__base__/graphics/entity/heat-exchanger/heatex-endings.png", + frame_count = 1, + height = 32, + tint = pipe_tint, + hr_version = { + tint = pipe_tint, + filename = "__base__/graphics/entity/heat-exchanger/hr-heatex-endings.png", + frame_count = 1, + height = 64, + priority = "high", + scale = 0.5, + width = 64, + x = 192, + y = 0 + }, + priority = "high", + scale = 1, + width = 32, + x = 96, + y = 0 + } + }, + specific_heat = specific_heat_pipe_long, + type = "heat" + }, + fire = {}, + fire_glow = {}, + flags = { + "placeable-neutral", + "player-creation" + }, + fluid_box = { + base_area = 1, + base_level = 1, + filter = "water", + height = 2, + pipe_connections = { }, + production_type = "input-output" + }, + icon = version.icon, + icon_mipmaps = 1, + icon_size = 64, + max_health = 200, + minable = { + mining_time = 0.2, + result = name + }, + mode = "output-to-separate-pipe", + output_fluid_box = { + base_area = 1, + base_level = 1, + filter = "steam", + height = 2, + pipe_connections = { }, + production_type = "output" + }, + resistances = { + { + percent = 90, + type = "fire" + }, + { + percent = 30, + type = "explosion" + }, + { + percent = 30, + type = "impact" + } + }, + structure = { + east = {layers = {{layers = long_pipes_horizontal}}}, + north = {layers = {{layers = long_pipes_vertical}}}, + south = {layers = {{layers = long_pipes_vertical}}}, + west = {layers = {{layers = long_pipes_horizontal}}}, + }, + target_temperature = max_temperature, + vehicle_impact_sound = { + { + filename = "__base__/sound/car-metal-impact.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-2.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-3.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-4.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-5.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-6.ogg", + volume = 0.5 + } + }, + water_reflection = { + orientation_to_variation = true, + pictures = { + filename = "__base__/graphics/entity/boiler/boiler-reflection.png", + height = 32, + priority = "extra-high", + scale = 5, + shift = { + 0.15625, + 0.9375 + }, + variation_count = 4, + width = 28 + }, + rotate = false + }, + working_sound = { + fade_in_ticks = 10, + fade_out_ticks = 30, + max_sounds_per_type = 3, + sound = { + filename = "__base__/sound/boiler.ogg", + volume = 0.8 + } + } + } + } +end diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/arcosphere.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/arcosphere.lua new file mode 100644 index 0000000..0af8676 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/arcosphere.lua @@ -0,0 +1,358 @@ +local data_util = require("data_util") + +--[[ +α alpha +β beta +γ gamma +δ delta +ε epsilon +ζ zeta +η eta +θ theta +λ la(m)bda +ξ xi +φ phi +ψ psi +ω omega + + +δ delta +ε epsilon +ζ zeta +θ theta +λ lambda +ξ xi +φ phi +ω omega + +Ζ Zeta +Θ theta +Ω omega +Φ phi +Σ sigma +Λ Lambda + +translation +rotation +reflection +dialation +transformation +inversion +substitution +superposition + +Apex +Omega + +Ruby +Saphire +Emerald +Topaz +Amber +Citrine +Amethyst +Quartz + + +γ gamma +ζ zeta +ξ xi +φ phi +ψ psi +ω omega +θ theta +λ lambda + +]] + +local arcosphere_variants = { + { number = 1, letter = "a", sign = "l", character = "λ", name = "lambda"}, + { number = 2, letter = "b", sign = "x", character = "ξ", name = "xi"}, + { number = 3, letter = "c", sign = "z", character = "ζ", name = "zeta"}, + { number = 4, letter = "d", sign = "t", character = "θ", name = "theta"}, + { number = 5, letter = "e", sign = "e", character = "ε", name = "epsilon"}, + { number = 6, letter = "f", sign = "f", character = "φ", name = "phi"}, + { number = 7, letter = "g", sign = "g", character = "γ", name = "gamma"}, + { number = 8, letter = "h", sign = "o", character = "ω", name = "omega"}, +} + +data:extend({ + { + type = "technology", + name = data_util.mod_prefix .. "arcosphere", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "arcosphere-collector", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/arcosphere.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "deep-space-science-pack-2", + }, + unit = { + count = "200", + time = 60, + ingredients = { + { data_util.mod_prefix .. "deep-space-science-pack-2", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "arcosphere-folding", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "arcosphere-fracture", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "arcosphere-fracture-alt", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "arcosphere-fold-in", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "arcosphere-fold-out", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "arcosphere-fold-a", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "arcosphere-fold-b", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "arcosphere-fold-c", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "arcosphere-fold-d", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "arcosphere-fold-e", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "arcosphere-fold-f", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "arcosphere-fold-g", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "arcosphere-fold-h", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/arcosphere.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "arcosphere", + }, + unit = { + count = "400", + time = 60, + ingredients = { + { data_util.mod_prefix .. "deep-space-science-pack-2", 1 }, + } + }, + }, + { + type = "item", + name = data_util.mod_prefix .. "arcosphere-collector", + icons = { + { icon = "__space-exploration-graphics__/graphics/icons/satellite.png", icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/satellite-mask.png", icon_size = 64, tint = {r=0.9,g=8,b=0.9}}, + }, + icon_size = 64, + order = "a-a", + subgroup = "arcosphere", + stack_size = 1, + rocket_launch_product = { data_util.mod_prefix .. "arcosphere", 0} + }, + { + type = "recipe", + name = data_util.mod_prefix .. "arcosphere-collector", + main_product = data_util.mod_prefix .. "arcosphere-collector", + category = "space-manufacturing", + subgroup = "arcosphere", + enabled = false, + energy_required = 60, + ingredients = { + { name = "laser-turret", amount = 2}, + { name = data_util.mod_prefix .. "dynamic-emitter", amount = 2}, + { name = data_util.mod_prefix .. "quantum-processor", amount = 10}, + { name = data_util.mod_prefix .. "naquium-cube", amount = 10}, + { name = data_util.mod_prefix .. "antimatter-canister", amount = 10, catalyst_amount = 10}, + { name = data_util.mod_prefix .. "aeroframe-bulkhead", amount = 50}, + }, + results = { + { data_util.mod_prefix .. "arcosphere-collector", 1 }, + { name = data_util.mod_prefix .. "magnetic-canister", amount = 10, catalyst_amount = 10}, + }, + requester_paste_multiplier = 1, + icon_size = 64, + }, + { + type = "item", + name = data_util.mod_prefix .. "arcosphere", + icon = "__space-exploration-graphics__/graphics/icons/dss/ns-0.png", + icon_size = 64, + order = "a-b", + subgroup = "arcosphere", + stack_size = 1, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "arcosphere-fracture", + category = "arcosphere", + subgroup = "arcosphere", + enabled = false, + energy_required = 60, + ingredients = { + { data_util.mod_prefix .. "arcosphere", 4 }, + }, + results = { + { data_util.mod_prefix .. "arcosphere-a", 1 }, + { data_util.mod_prefix .. "arcosphere-b", 0 }, + { data_util.mod_prefix .. "arcosphere-c", 1 }, + { data_util.mod_prefix .. "arcosphere-d", 0 }, + { data_util.mod_prefix .. "arcosphere-e", 1 }, + { data_util.mod_prefix .. "arcosphere-f", 0 }, + { data_util.mod_prefix .. "arcosphere-g", 1 }, + { data_util.mod_prefix .. "arcosphere-h", 0 }, + }, + requester_paste_multiplier = 1, + icon = "__space-exploration-graphics__/graphics/icons/dss/ns-0.png", + icon_size = 64, + always_show_made_in = true, + localised_description = {"space-exploration.arcosphere-random"} + }, + { + type = "recipe", + name = data_util.mod_prefix .. "arcosphere-fracture-alt", + category = "arcosphere", + subgroup = "arcosphere", + enabled = false, + energy_required = 60, + ingredients = { + { data_util.mod_prefix .. "arcosphere", 4 }, + }, + results = { + { data_util.mod_prefix .. "arcosphere-a", 0 }, + { data_util.mod_prefix .. "arcosphere-b", 1 }, + { data_util.mod_prefix .. "arcosphere-c", 0 }, + { data_util.mod_prefix .. "arcosphere-d", 1 }, + { data_util.mod_prefix .. "arcosphere-e", 0 }, + { data_util.mod_prefix .. "arcosphere-f", 1 }, + { data_util.mod_prefix .. "arcosphere-g", 0 }, + { data_util.mod_prefix .. "arcosphere-h", 1 }, + }, + requester_paste_multiplier = 1, + icon = "__space-exploration-graphics__/graphics/icons/dss/ns-0.png", + icon_size = 64, + always_show_made_in = true, + localised_name = {"recipe-name."..data_util.mod_prefix .. "arcosphere-fracture"}, + localised_description = {"space-exploration.arcosphere-random"} + } +}) + +for _, arcosphere_variant in pairs(arcosphere_variants) do + data:extend({{ + type = "item", + name = data_util.mod_prefix .. "arcosphere-"..arcosphere_variant.letter, + icon = "__space-exploration-graphics__/graphics/icons/dss/ns-"..arcosphere_variant.letter..".png", -- used for recipe + icon_size = 64, + icons = { -- overrides icon + { icon = "__space-exploration-graphics__/graphics/icons/dss/ns-"..arcosphere_variant.letter..".png", icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/dss/"..arcosphere_variant.name..".png", icon_size = 64 }, + }, + pictures = { + { + filename = "__space-exploration-graphics__/graphics/icons/dss/ns-"..arcosphere_variant.letter..".png", + scale = 0.25, + size = 64 + }, + }, + order = "j-"..arcosphere_variant.letter, + subgroup = "arcosphere", + stack_size = 1, + }}) +end + +local function make_recipe(name, from_high, from_low, to_high, to_low) + + local a = data.raw.item[data_util.mod_prefix .. "arcosphere-"..arcosphere_variants[from_high].letter] + local b = data.raw.item[data_util.mod_prefix .. "arcosphere-"..arcosphere_variants[from_low].letter] + local c = data.raw.item[data_util.mod_prefix .. "arcosphere-"..arcosphere_variants[to_high].letter] + local d = data.raw.item[data_util.mod_prefix .. "arcosphere-"..arcosphere_variants[to_low].letter] + data:extend({ + { + type = "recipe", + name = name, + category = "arcosphere", + subgroup = "arcosphere", + results = { + { data_util.mod_prefix .. "arcosphere-"..arcosphere_variants[to_high].letter, 1 }, + { data_util.mod_prefix .. "arcosphere-"..arcosphere_variants[to_low].letter, 1 }, + }, + enabled = false, + energy_required = 10, + ingredients = { + { data_util.mod_prefix .. "arcosphere-"..arcosphere_variants[from_high].letter, 1 }, + { data_util.mod_prefix .. "arcosphere-"..arcosphere_variants[from_low].letter, 1 }, + }, + requester_paste_multiplier = 1, + always_show_products = false, + allow_decomposition = false, + always_show_made_in = true, + icons = { + { icon = "__space-exploration-graphics__/graphics/blank.png", scale = 1, shift = {0, 0}, icon_size = 64 }, -- to lock scale + { icon = a.icon, scale = 0.33, shift = {-4, -16}, icon_size = 64 }, + { icon = b.icon, scale = 0.33, shift = {16, -16}, icon_size = 64 }, + { icon = c.icon, scale = 0.33, shift = {-16, 16}, icon_size = 64 }, + { icon = d.icon, scale = 0.33, shift = {4, 16}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/transition-arrow.png", scale = 1, shift = {0, 0}, icon_size = 64 }, -- to overlay + }, + localised_name = {"recipe-name.se-arcosphere-folding", + arcosphere_variants[from_high].character, + arcosphere_variants[from_low].character, + arcosphere_variants[to_high].character, + arcosphere_variants[to_low].character} + } + }) +end +make_recipe(data_util.mod_prefix .. "arcosphere-fold-a", 8, 1, 2, 4) +make_recipe(data_util.mod_prefix .. "arcosphere-fold-b", 7, 2, 3, 1) +make_recipe(data_util.mod_prefix .. "arcosphere-fold-c", 2, 3, 4, 6) +make_recipe(data_util.mod_prefix .. "arcosphere-fold-d", 1, 4, 5, 3) +make_recipe(data_util.mod_prefix .. "arcosphere-fold-e", 4, 5, 6, 8) +make_recipe(data_util.mod_prefix .. "arcosphere-fold-f", 3, 6, 7, 5) +make_recipe(data_util.mod_prefix .. "arcosphere-fold-g", 6, 7, 8, 2) +make_recipe(data_util.mod_prefix .. "arcosphere-fold-h", 5, 8, 1, 7) + +data:extend({ + { + type = "recipe", + name = data_util.mod_prefix .. "arcosphere-fold-in", + category = "arcosphere", + subgroup = "arcosphere", + results = { + { data_util.mod_prefix .. "arcosphere-a", 1 }, + { data_util.mod_prefix .. "arcosphere-b", 1 }, + { data_util.mod_prefix .. "arcosphere-e", 1 }, + { data_util.mod_prefix .. "arcosphere-f", 1 }, + }, + enabled = false, + energy_required = 100, + ingredients = { + { data_util.mod_prefix .. "arcosphere-c", 1 }, + { data_util.mod_prefix .. "arcosphere-d", 1 }, + { data_util.mod_prefix .. "arcosphere-g", 1 }, + { data_util.mod_prefix .. "arcosphere-h", 1 }, + }, + requester_paste_multiplier = 1, + always_show_products = false, + allow_decomposition = false, + always_show_made_in = true, + icon = "__space-exploration-graphics__/graphics/icons/dss/ns-0.png", + icon_size = 64 + }, + { + type = "recipe", + name = data_util.mod_prefix .. "arcosphere-fold-out", + category = "arcosphere", + subgroup = "arcosphere", + results = { + { data_util.mod_prefix .. "arcosphere-c", 1 }, + { data_util.mod_prefix .. "arcosphere-d", 1 }, + { data_util.mod_prefix .. "arcosphere-g", 1 }, + { data_util.mod_prefix .. "arcosphere-h", 1 }, + }, + enabled = false, + energy_required = 100, + ingredients = { + { data_util.mod_prefix .. "arcosphere-a", 1 }, + { data_util.mod_prefix .. "arcosphere-b", 1 }, + { data_util.mod_prefix .. "arcosphere-e", 1 }, + { data_util.mod_prefix .. "arcosphere-f", 1 }, + }, + requester_paste_multiplier = 1, + always_show_products = false, + allow_decomposition = false, + always_show_made_in = true, + icon = "__space-exploration-graphics__/graphics/icons/dss/ns-0.png", + icon_size = 64 + } +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/big-heat-exchanger.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/big-heat-exchanger.lua new file mode 100644 index 0000000..989a0ca --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/big-heat-exchanger.lua @@ -0,0 +1,975 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe +local pipe_tint = {r = 0.8, b=1, g=0.8} +local glow_tint = {r = 0.5, b=1, g=0.5} + +data.raw["heat-interface"]["heat-interface"].heat_buffer.max_temperature = 10000 --For testing 5000C heat exchangers. + +data:extend({ + { + type = "item", + name = data_util.mod_prefix .. "big-heat-exchanger", + icon = "__space-exploration-graphics__/graphics/icons/big-heat-exchanger.png", + icon_size = 64, + order = "d[fluid-burner-generator]-a", + subgroup = "energy", + stack_size = 50, + place_result = data_util.mod_prefix .. "big-heat-exchanger", + }, + { + type = "recipe", + name = data_util.mod_prefix .. "big-heat-exchanger", + result = data_util.mod_prefix .. "big-heat-exchanger", + enabled = false, + energy_required = 30, + ingredients = { + { data_util.mod_prefix .. "lattice-pressure-vessel", 10 }, + { data_util.mod_prefix .. "nanomaterial", 10 }, + { data_util.mod_prefix .. "space-pipe", 50 }, + { data_util.mod_prefix .. "heavy-composite", 20 }, + { data_util.mod_prefix .. "heat-shielding", 50 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "technology", + name = data_util.mod_prefix .. "big-heat-exchanger", + effects = { + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "big-heat-exchanger", + }, + }, + icon = "__space-exploration-graphics__/graphics/technology/big-heat-exchanger.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "lattice-pressure-vessel", + data_util.mod_prefix .. "nanomaterial", + }, + unit = { + count = 500, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-4", 1 }, + { data_util.mod_prefix .. "biological-science-pack-4", 1 }, + { data_util.mod_prefix .. "material-science-pack-4", 1 }, + { data_util.mod_prefix .. "energy-science-pack-4", 1 }, + } + }, + }, + { + type = "boiler", + name = data_util.mod_prefix .. "big-heat-exchanger", + icon = "__space-exploration-graphics__/graphics/icons/big-heat-exchanger.png", + icon_mipmaps = 1, + icon_size = 64, + burning_cooldown = 20, + collision_box = {{-2.3,-2.3},{2.3,2.3}}, + selection_box = {{-2.5,-2.5},{2.5,2.5}}, + drawing_box = {{-3.0,-4.0},{3.0,3.0}}, + corpse = "heat-exchanger-remnants", + damaged_trigger_effect = { + entity_name = "spark-explosion", + offset_deviation = { + { + -0.5, + -0.5 + }, + { + 0.5, + 0.5 + } + }, + offsets = { + { + 0, + 1 + } + }, + type = "create-entity" + }, + dying_explosion = "heat-exchanger-explosion", + energy_consumption = "560MW", + energy_source = { + connections = { + { + direction = 4, + position = { + 0, + 2 + } + } + }, + heat_glow = { + east = { + filename = "__base__/graphics/entity/heat-exchanger/heatex-E-glow.png", + height = 62, + priority = "extra-high", + shift = { + -0.6875-1.5, + -0.375-0.5 + }, + width = 60 + }, + north = { + filename = "__base__/graphics/entity/heat-exchanger/heatex-N-glow.png", + height = 70, + priority = "extra-high", + shift = { + 0, + 0.25+1 + }, + tint = { + b = 0.75, + g = 0.85, + r = 1 + }, + width = 38 + }, + south = { + filename = "__base__/graphics/entity/heat-exchanger/heatex-S-glow.png", + height = 40, + priority = "extra-high", + shift = { + 0, + -1.125-1 + }, + tint = nil, + width = 38 + }, + west = { + filename = "__base__/graphics/entity/heat-exchanger/heatex-W-glow.png", + height = 64, + priority = "extra-high", + shift = { + 0.625+1.5, + -0.375-0.5 + }, + width = 60 + } + }, + heat_picture = { + east = { + filename = "__space-exploration-graphics-3__/graphics/entity/big-heat-exchanger/sr/east_heated.png", + frame_count = 1, + line_length = 1, + width = 128/2, + height = 128/2, + shift = {-2,-0.5}, + tint = glow_tint, + blend_mode = "additive", + hr_version = { + tint = glow_tint, + blend_mode = "additive", + filename = "__space-exploration-graphics-3__/graphics/entity/big-heat-exchanger/hr/east_heated.png", + frame_count = 1, + line_length = 1, + width = 128, + height = 128, + shift = {-2,-0.5}, + scale = 0.5, + }, + }, + north = { + filename = "__space-exploration-graphics-3__/graphics/entity/big-heat-exchanger/sr/north_heated.png", + frame_count = 1, + line_length = 1, + width = 64/2, + height = 160/2, + shift = {0,1.25}, + tint = glow_tint, + blend_mode = "additive", + hr_version = { + tint = glow_tint, + blend_mode = "additive", + filename = "__space-exploration-graphics-3__/graphics/entity/big-heat-exchanger/hr/north_heated.png", + frame_count = 1, + line_length = 1, + width = 64, + height = 160, + shift = {0,1.25}, + scale = 0.5, + }, + }, + south = { + filename = "__space-exploration-graphics-3__/graphics/entity/big-heat-exchanger/sr/south_heated.png", + frame_count = 1, + line_length = 1, + width = 64/2, + height = 64/2, + shift = {0,-2.5}, + tint = glow_tint, + blend_mode = "additive", + hr_version = { + tint = glow_tint, + blend_mode = "additive", + filename = "__space-exploration-graphics-3__/graphics/entity/big-heat-exchanger/hr/south_heated.png", + frame_count = 1, + line_length = 1, + width = 64, + height = 64, + shift = {0,-2.5}, + scale = 0.5, + }, + }, + west = { + filename = "__space-exploration-graphics-3__/graphics/entity/big-heat-exchanger/sr/west_heated.png", + frame_count = 1, + line_length = 1, + width = 128/2, + height = 128/2, + shift = {2,-0.5}, + tint = glow_tint, + blend_mode = "additive", + hr_version = { + tint = glow_tint, + blend_mode = "additive", + filename = "__space-exploration-graphics-3__/graphics/entity/big-heat-exchanger/hr/west_heated.png", + frame_count = 1, + line_length = 1, + width = 128, + height = 128, + shift = {2,-0.5}, + scale = 0.5, + }, + }, + }, + heat_pipe_covers = { + east = { + filename = "__base__/graphics/entity/heat-exchanger/heatex-endings-heated.png", + frame_count = 1, + height = 32, + tint = glow_tint, + blend_mode = "additive", + hr_version = { + tint = glow_tint, + blend_mode = "additive", + filename = "__base__/graphics/entity/heat-exchanger/hr-heatex-endings-heated.png", + frame_count = 1, + height = 64, + priority = "high", + scale = 0.5, + width = 64, + x = 64, + y = 0 + }, + priority = "high", + scale = 1, + width = 32, + x = 32, + y = 0 + }, + north = { + filename = "__base__/graphics/entity/heat-exchanger/heatex-endings-heated.png", + frame_count = 1, + height = 32, + tint = glow_tint, + blend_mode = "additive", + hr_version = { + tint = glow_tint, + blend_mode = "additive", + filename = "__base__/graphics/entity/heat-exchanger/hr-heatex-endings-heated.png", + frame_count = 1, + height = 64, + priority = "high", + scale = 0.5, + width = 64, + x = 0, + y = 0 + }, + priority = "high", + scale = 1, + width = 32, + x = 0, + y = 0 + }, + south = { + filename = "__base__/graphics/entity/heat-exchanger/heatex-endings-heated.png", + frame_count = 1, + height = 32, + tint = glow_tint, + blend_mode = "additive", + hr_version = { + tint = glow_tint, + blend_mode = "additive", + filename = "__base__/graphics/entity/heat-exchanger/hr-heatex-endings-heated.png", + frame_count = 1, + height = 64, + priority = "high", + scale = 0.5, + width = 64, + x = 128, + y = 0 + }, + priority = "high", + scale = 1, + width = 32, + x = 64, + y = 0 + }, + west = { + filename = "__base__/graphics/entity/heat-exchanger/heatex-endings-heated.png", + frame_count = 1, + height = 32, + tint = glow_tint, + blend_mode = "additive", + hr_version = { + tint = glow_tint, + blend_mode = "additive", + filename = "__base__/graphics/entity/heat-exchanger/hr-heatex-endings-heated.png", + frame_count = 1, + height = 64, + priority = "high", + scale = 0.5, + width = 64, + x = 192, + y = 0 + }, + priority = "high", + scale = 1, + width = 32, + x = 96, + y = 0 + } + }, + max_temperature = 10000, + max_transfer = "2GW", + min_working_temperature = 5000, + minimum_glow_temperature = 350, + pipe_covers = { + east = { + filename = "__base__/graphics/entity/heat-exchanger/heatex-endings.png", + frame_count = 1, + height = 32, + hr_version = { + filename = "__base__/graphics/entity/heat-exchanger/hr-heatex-endings.png", + frame_count = 1, + height = 64, + priority = "high", + scale = 0.5, + width = 64, + x = 64, + y = 0 + }, + priority = "high", + scale = 1, + width = 32, + x = 32, + y = 0 + }, + north = { + filename = "__base__/graphics/entity/heat-exchanger/heatex-endings.png", + frame_count = 1, + height = 32, + hr_version = { + filename = "__base__/graphics/entity/heat-exchanger/hr-heatex-endings.png", + frame_count = 1, + height = 64, + priority = "high", + scale = 0.5, + width = 64, + x = 0, + y = 0 + }, + priority = "high", + scale = 1, + width = 32, + x = 0, + y = 0 + }, + south = { + filename = "__base__/graphics/entity/heat-exchanger/heatex-endings.png", + frame_count = 1, + height = 32, + hr_version = { + filename = "__base__/graphics/entity/heat-exchanger/hr-heatex-endings.png", + frame_count = 1, + height = 64, + priority = "high", + scale = 0.5, + width = 64, + x = 128, + y = 0 + }, + priority = "high", + scale = 1, + width = 32, + x = 64, + y = 0 + }, + west = { + filename = "__base__/graphics/entity/heat-exchanger/heatex-endings.png", + frame_count = 1, + height = 32, + hr_version = { + filename = "__base__/graphics/entity/heat-exchanger/hr-heatex-endings.png", + frame_count = 1, + height = 64, + priority = "high", + scale = 0.5, + width = 64, + x = 192, + y = 0 + }, + priority = "high", + scale = 1, + width = 32, + x = 96, + y = 0 + } + }, + specific_heat = "1MJ", + type = "heat" + }, + fire = {}, + fire_glow = {}, + flags = { + "placeable-neutral", + "player-creation" + }, + fluid_box = { + base_area = 10, + base_level = -1, + filter = "water", + height = 2, + pipe_connections = { + { + position = { + -3, + 1 + }, + type = "input-output" + }, + { + position = { + 3, + 1 + }, + type = "input-output" + } + }, + pipe_covers = { + east = { + layers = { + { + filename = "__base__/graphics/entity/pipe-covers/pipe-cover-east.png", + height = 64, + hr_version = { + filename = "__base__/graphics/entity/pipe-covers/hr-pipe-cover-east.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + }, + { + draw_as_shadow = true, + filename = "__base__/graphics/entity/pipe-covers/pipe-cover-east-shadow.png", + height = 64, + hr_version = { + draw_as_shadow = true, + filename = "__base__/graphics/entity/pipe-covers/hr-pipe-cover-east-shadow.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + } + } + }, + north = { + layers = { + { + filename = "__base__/graphics/entity/pipe-covers/pipe-cover-north.png", + height = 64, + hr_version = { + filename = "__base__/graphics/entity/pipe-covers/hr-pipe-cover-north.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + }, + { + draw_as_shadow = true, + filename = "__base__/graphics/entity/pipe-covers/pipe-cover-north-shadow.png", + height = 64, + hr_version = { + draw_as_shadow = true, + filename = "__base__/graphics/entity/pipe-covers/hr-pipe-cover-north-shadow.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + } + } + }, + south = { + layers = { + { + filename = "__base__/graphics/entity/pipe-covers/pipe-cover-south.png", + height = 64, + hr_version = { + filename = "__base__/graphics/entity/pipe-covers/hr-pipe-cover-south.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + }, + { + draw_as_shadow = true, + filename = "__base__/graphics/entity/pipe-covers/pipe-cover-south-shadow.png", + height = 64, + hr_version = { + draw_as_shadow = true, + filename = "__base__/graphics/entity/pipe-covers/hr-pipe-cover-south-shadow.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + } + } + }, + west = { + layers = { + { + filename = "__base__/graphics/entity/pipe-covers/pipe-cover-west.png", + height = 64, + hr_version = { + filename = "__base__/graphics/entity/pipe-covers/hr-pipe-cover-west.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + }, + { + draw_as_shadow = true, + filename = "__base__/graphics/entity/pipe-covers/pipe-cover-west-shadow.png", + height = 64, + hr_version = { + draw_as_shadow = true, + filename = "__base__/graphics/entity/pipe-covers/hr-pipe-cover-west-shadow.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + } + } + } + }, + production_type = "input-output" + }, + max_health = 500, + minable = { + mining_time = 0.1, + result = data_util.mod_prefix .. "big-heat-exchanger", + }, + mode = "output-to-separate-pipe", + output_fluid_box = { + base_area = 10, + base_level = 1, + filter = "steam", + height = 2, + pipe_connections = { + { + position = { + 0, + -3 + }, + type = "output" + } + }, + pipe_covers = { + east = { + layers = { + { + filename = "__base__/graphics/entity/pipe-covers/pipe-cover-east.png", + height = 64, + hr_version = { + filename = "__base__/graphics/entity/pipe-covers/hr-pipe-cover-east.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + }, + { + draw_as_shadow = true, + filename = "__base__/graphics/entity/pipe-covers/pipe-cover-east-shadow.png", + height = 64, + hr_version = { + draw_as_shadow = true, + filename = "__base__/graphics/entity/pipe-covers/hr-pipe-cover-east-shadow.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + } + } + }, + north = { + layers = { + { + filename = "__base__/graphics/entity/pipe-covers/pipe-cover-north.png", + height = 64, + hr_version = { + filename = "__base__/graphics/entity/pipe-covers/hr-pipe-cover-north.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + }, + { + draw_as_shadow = true, + filename = "__base__/graphics/entity/pipe-covers/pipe-cover-north-shadow.png", + height = 64, + hr_version = { + draw_as_shadow = true, + filename = "__base__/graphics/entity/pipe-covers/hr-pipe-cover-north-shadow.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + } + } + }, + south = { + layers = { + { + filename = "__base__/graphics/entity/pipe-covers/pipe-cover-south.png", + height = 64, + hr_version = { + filename = "__base__/graphics/entity/pipe-covers/hr-pipe-cover-south.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + }, + { + draw_as_shadow = true, + filename = "__base__/graphics/entity/pipe-covers/pipe-cover-south-shadow.png", + height = 64, + hr_version = { + draw_as_shadow = true, + filename = "__base__/graphics/entity/pipe-covers/hr-pipe-cover-south-shadow.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + } + } + }, + west = { + layers = { + { + filename = "__base__/graphics/entity/pipe-covers/pipe-cover-west.png", + height = 64, + hr_version = { + filename = "__base__/graphics/entity/pipe-covers/hr-pipe-cover-west.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + }, + { + draw_as_shadow = true, + filename = "__base__/graphics/entity/pipe-covers/pipe-cover-west-shadow.png", + height = 64, + hr_version = { + draw_as_shadow = true, + filename = "__base__/graphics/entity/pipe-covers/hr-pipe-cover-west-shadow.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + } + } + } + }, + production_type = "output" + }, + resistances = { + { + percent = 90, + type = "fire" + }, + { + percent = 30, + type = "explosion" + }, + { + percent = 30, + type = "impact" + } + }, + structure = { + east = { + layers = { + { + filename = "__space-exploration-graphics-3__/graphics/entity/big-heat-exchanger/sr/east.png", + frame_count = 1, + line_length = 1, + width = 384/2, + height = 384/2, + shift = {0,-0.5}, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/big-heat-exchanger/hr/east.png", + frame_count = 1, + line_length = 1, + width = 384, + height = 384, + shift = {0,-0.5}, + scale = 0.5, + }, + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/big-heat-exchanger/sr/east_shadow.png", + frame_count = 1, + line_length = 1, + width = 512/2, + height = 352/2, + shift = {1,0.25}, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/big-heat-exchanger/hr/east_shadow.png", + frame_count = 1, + line_length = 1, + width = 512, + height = 352, + shift = {1,0.25}, + scale = 0.5, + }, + }, + } + }, + north = { + layers = { + { + filename = "__space-exploration-graphics-3__/graphics/entity/big-heat-exchanger/sr/north.png", + frame_count = 1, + line_length = 1, + width = 384/2, + height = 384/2, + shift = {0,-0.5}, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/big-heat-exchanger/hr/north.png", + frame_count = 1, + line_length = 1, + width = 384, + height = 384, + shift = {0,-0.5}, + scale = 0.5, + }, + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/big-heat-exchanger/sr/north_shadow.png", + frame_count = 1, + line_length = 1, + width = 512/2, + height = 320/2, + shift = {1.5,0.5}, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/big-heat-exchanger/hr/north_shadow.png", + frame_count = 1, + line_length = 1, + width = 512, + height = 320, + shift = {1.5,0.5}, + scale = 0.5, + }, + }, + } + }, + south = { + layers = { + { + filename = "__space-exploration-graphics-3__/graphics/entity/big-heat-exchanger/sr/south.png", + frame_count = 1, + line_length = 1, + width = 384/2, + height = 384/2, + shift = {0,-0.5}, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/big-heat-exchanger/hr/south.png", + frame_count = 1, + line_length = 1, + width = 384, + height = 384, + shift = {0,-0.5}, + scale = 0.5, + }, + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/big-heat-exchanger/sr/south_shadow.png", + frame_count = 1, + line_length = 1, + width = 512/2, + height = 256/2, + shift = {1.5,0.5}, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/big-heat-exchanger/hr/south_shadow.png", + frame_count = 1, + line_length = 1, + width = 512, + height = 256, + shift = {1.5,0.5}, + scale = 0.5, + }, + }, + } + }, + west = { + layers = { + { + filename = "__space-exploration-graphics-3__/graphics/entity/big-heat-exchanger/sr/west.png", + frame_count = 1, + line_length = 1, + width = 384/2, + height = 384/2, + shift = {0,-0.5}, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/big-heat-exchanger/hr/west.png", + frame_count = 1, + line_length = 1, + width = 384, + height = 384, + shift = {0,-0.5}, + scale = 0.5, + }, + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/big-heat-exchanger/sr/west_shadow.png", + frame_count = 1, + line_length = 1, + width = 448/2, + height = 352/2, + shift = {1,0.25}, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/big-heat-exchanger/hr/west_shadow.png", + frame_count = 1, + line_length = 1, + width = 448, + height = 352, + shift = {1,0.25}, + scale = 0.5, + }, + }, + } + } + }, + target_temperature = 5000, + vehicle_impact_sound = { + { + filename = "__base__/sound/car-metal-impact.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-2.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-3.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-4.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-5.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-6.ogg", + volume = 0.5 + } + }, + water_reflection = { + orientation_to_variation = true, + pictures = { + filename = "__base__/graphics/entity/boiler/boiler-reflection.png", + height = 32, + priority = "extra-high", + scale = 5, + shift = { + 0.15625, + 0.9375 + }, + variation_count = 4, + width = 28 + }, + rotate = false + }, + working_sound = { + fade_in_ticks = 10, + fade_out_ticks = 30, + max_sounds_per_type = 3, + sound = { + filename = "__base__/sound/boiler.ogg", + volume = 0.8 + } + } + } +}) +local he = data.raw.boiler[data_util.mod_prefix .. "big-heat-exchanger"] +data_util.tint_recursive(he.energy_source.pipe_covers, pipe_tint) +data_util.tint_recursive(he.energy_source.heat_pipe_covers, glow_tint) +data_util.blend_mode_recursive(he.energy_source.heat_pipe_covers, "additive") diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/big-turbine.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/big-turbine.lua new file mode 100644 index 0000000..4ea3b3a --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/big-turbine.lua @@ -0,0 +1,565 @@ +local data_util = require("data_util") +--[[ +fluid box connections don't need to line up just find the right entity. +furnace is the placed entity, short but wide, outputs at front +Outpts piped heat to the turbine +turbine ies long and thin, collects from side + +has a connection top and right +always goes on the bottom or left +move horizontal version down 1 pixel so animation shows + +if the turbine is aove the the animation won't work +make sure furnace has outputs at both lockations +]]-- +local selectable = false + +local fan = { + filename = "__space-exploration-graphics-3__/graphics/entity/big-turbine/sr/fan.png", + frame_count = 4, + line_length = 4, + width = 656/4/2, + height = 116/2, + run_mode = "backward", + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/big-turbine/hr/fan.png", + frame_count = 4, + line_length = 4, + width = 656/4, + height = 116, + run_mode = "backward", + scale = 0.5, + }, +} +local fan_shifts = { + north = util.by_pixel(0, -56), + south = util.by_pixel(0, -69), + east = util.by_pixel(-11, -64), + west = util.by_pixel(12, -64) +} +local fan_north = table.deepcopy(fan) +data_util.shift_recursive(fan_north, fan_shifts["north"]) +local fan_south = table.deepcopy(fan) +data_util.shift_recursive(fan_south, fan_shifts["south"]) +local fan_east = table.deepcopy(fan) +data_util.shift_recursive(fan_east, fan_shifts["east"]) +local fan_west = table.deepcopy(fan) +data_util.shift_recursive(fan_west, fan_shifts["west"]) + +local blank_image = { + filename = "__space-exploration-graphics__/graphics/blank.png", + width = 1, + height = 1, + frame_count = 1, + line_length = 1, + shift = { 0, 0 }, +} +local length = 10 +local width = 7 +data:extend({ + { + type = "recipe", + name = data_util.mod_prefix .. "big-turbine-internal", + icon = "__space-exploration-graphics__/graphics/icons/fluid/water.png", + icon_size = 64, + order = "a", + subgroup = "spaceship-process", + energy_required = 4/60, -- try to get craft time in line with generator fluid consumption + category = "big-turbine", + ingredients = + { + {type="fluid", name="steam", amount=100, minimum_temperature = 5000}, + }, + results = { + {type="fluid", name="water", amount=78}, + {type="fluid", name="steam", amount=21, temperature = 500}, + {type="fluid", name=data_util.mod_prefix .. "decompressing-steam", amount=98, temperature = 5000}, + }, + hidden = true, + enabled = true, + allow_as_intermediate = false, + always_show_made_in = true, + }, + { + type = "item", + name = data_util.mod_prefix .. "big-turbine", + icon = "__space-exploration-graphics__/graphics/icons/big-turbine.png", + icon_size = 64, + order = "d[fluid-burner-generator]-a", + subgroup = "energy", + stack_size = 50, + place_result = data_util.mod_prefix .. "big-turbine", + }, + { + type = "recipe", + name = data_util.mod_prefix .. "big-turbine", + result = data_util.mod_prefix .. "big-turbine", + enabled = false, + energy_required = 60, + ingredients = { + { data_util.mod_prefix .. "lattice-pressure-vessel", 10 }, + { data_util.mod_prefix .. "nanomaterial", 10 }, + { data_util.mod_prefix .. "heavy-assembly", 10 }, + { data_util.mod_prefix .. "space-pipe", 50 }, + { data_util.mod_prefix .. "heat-shielding", 50 }, + { data_util.mod_prefix .. "holmium-solenoid", 20 }, + { data_util.mod_prefix .. "superconductive-cable", 20 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "technology", + name = data_util.mod_prefix .. "big-turbine", + effects = { + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "big-turbine", + }, + }, + icon = "__space-exploration-graphics__/graphics/technology/big-turbine.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "big-heat-exchanger", + data_util.mod_prefix .. "heavy-assembly", + }, + unit = { + count = 500, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-4", 1 }, + { data_util.mod_prefix .. "biological-science-pack-4", 1 }, + { data_util.mod_prefix .. "material-science-pack-4", 1 }, + { data_util.mod_prefix .. "energy-science-pack-4", 1 }, + } + }, + }, + { + type = "storage-tank", + name = data_util.mod_prefix .. "big-turbine-tank", + icon = "__space-exploration-graphics__/graphics/icons/big-turbine.png", + icon_size = 64, + flags = {"placeable-player", "player-creation", "not-deconstructable", "not-blueprintable"}, + max_health = 500, + order = "zz", + collision_box = {{-1.5, -0.25},{1.5, 0.25}}, + selection_box = {{-1.5, -0.25},{1.5, 0.25}}, + collision_mask = {"not-colliding-with-itself"}, + se_allow_in_space = true, + selectable_in_game = selectable, + selection_priority = 53, + fluid_box = + { + filter = data_util.mod_prefix .. "decompressing-steam", + base_area = 10, -- gets multiplied by 100 by engine + base_level = 0, -- pull fluid in + pipe_connections = + { + { position = {0, -1} }, -- connects to generator + { position = {1, -1} }, -- connects to furnace + { position = {-1, -1} }, -- connects to furnace + }, + }, + window_bounding_box = {{-0.0, 0.0}, {0.0, 1.0}}, + pictures = { + picture = blank_image, + window_background = blank_image, + fluid_background = blank_image, + flow_sprite = blank_image, + gas_flow = blank_image, + }, + flow_length_in_ticks = 360, + circuit_wire_max_distance = 0 + }, + { + type = "generator", + name = data_util.mod_prefix .. "big-turbine-generator", + icon = "__space-exploration-graphics__/graphics/icons/big-turbine.png", + icon_size = 64, + alert_icon_shift = { 0, 0.375 }, + burns_fluid = false, + scale_fluid_usage = true, + max_power_output = "1GW", + fluid_usage_per_tick = 25, + selectable_in_game = selectable, + selection_priority = 52, + --collision_box = { { -1.25, -1.6 }, { 1.25, 1.6 } }, -- short and wide thin + collision_box = { { -(width/2-0.25), -(length/2-0.9) }, { (width/2-0.25), (length/2-0.9) } }, + --selection_box = { { -1.5, -2.5 }, { 1.5, 2.5 } }, + selection_box = { { -width/2, -(length/2-0.5) }, { width/2, (length/2-0.5) } }, + collision_mask = {"not-colliding-with-itself"}, + order = "zzz", + corpse = "big-remnants", + dying_explosion = "medium-explosion", + effectivity = 1, + energy_source = { type = "electric", usage_priority = "secondary-output" }, + fast_replaceable_group = "steam-engine", + flags = { "placeable-neutral", "player-creation", "placeable-off-grid" }, + fluid_box = { + base_area = 20, + base_level = -1, + filter = data_util.mod_prefix .. "decompressing-steam", + --filter = "steam", + height = 2, + minimum_temperature = 5000, + pipe_connections = { + { + position = { 0, (length/2-0.75) }, + type = "input-output" + }, + { + position = { 0, -(length/2-0.75) }, + type = "input-output" + }, + }, + production_type = "input-output" + }, + horizontal_animation = blank_image, + max_health = 300, + maximum_temperature = 5000, + min_perceived_performance = 0.25, + performance_to_sound_speedup = 0.5, + resistances = { + { + percent = 70, + type = "fire" + } + }, + smoke = { + { + east_position = { + 0.75, + -0.75 + }, + frequency = 0.3125, + name = "turbine-smoke", + north_position = { + 0, + -1 + }, + slow_down_factor = 1, + starting_frame_deviation = 60, + starting_vertical_speed = 0.08 + } + }, + vehicle_impact_sound = { + filename = "__base__/sound/car-metal-impact.ogg", + volume = 0.65 + }, + vertical_animation = blank_image, + working_sound = { + match_speed_to_activity = true, + sound = { + filename = "__base__/sound/steam-engine-90bpm.ogg", + volume = 0.6 + } + } + }, + { + type = "furnace", + name = data_util.mod_prefix .. "big-turbine", + icon = "__space-exploration-graphics__/graphics/icons/big-turbine.png", + --collision_box = { { -1.3, -2.15 }, { 1.3, 2.15 } }, + collision_box = { { -(width/2-0.2), -(length/2-0.35) }, { (width/2-0.2), (length/2-0.35) } }, + --selection_box = { { -1.5, -2.5 }, { 1.5, 2.5 } }, + selection_box = { { -width/2, -length/2 }, { width/2, length/2 } }, + selection_priority = 50, + fluid_boxes = + { + { + production_type = "input", + filter = "steam", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 40, + base_level = -1, + filter = "steam", + pipe_connections = { + { type="input-output", position = {0, -(length/2+0.5)} } + }, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 20, + base_level = 1, + filter = "water", + pipe_connections = { + { type="output", position = {(width/2+0.5), 1.5} }, + { type="output", position = {(width/2+0.5), -1.5} }, + { type="output", position = {-(width/2+0.5), 1.5} }, + { type="output", position = {-(width/2+0.5), -1.5} }, + }, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 20, + base_level = 1, + filter = "steam", + pipe_connections = { + { type="output", position = {0, (length/2+0.5)} }, + }, + secondary_draw_orders = { north = -1 } + }, + { + filter = data_util.mod_prefix .. "decompressing-steam", + --filter = "steam", + production_type = "output", + --pipe_picture = assembler3pipepictures(), + base_area = 20, + base_level = 1, + pipe_connections = { + { type="output", position = {1, length/2 - 0.25} }, + { type="output", position = {-1, length/2 - 0.25} }, + }, + secondary_draw_orders = { north = -1 } + }, + }, + minable = { + mining_time = 0.3, + result = data_util.mod_prefix .. "big-turbine", + }, + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + max_health = 800, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + drawing_box = {{-2, -5}, {2, 5}}, + resistances = { + { type = "poison", percent = 100 }, + { type = "fire", percent = 80 }, + { type = "explosion", percent = 50 } + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + apparent_volume = 1.5, + idle_sound = { + filename = "__base__/sound/idle1.ogg", + volume = 0.6 + }, + sound = { + filename = "__base__/sound/steam-engine-90bpm.ogg", + volume = 0.6 + } + }, + always_draw_idle_animation = true, + source_inventory_size = 0, + result_inventory_size = 0, + animation = nil, + idle_animation = { + east = { + layers = { + { + filename = "__space-exploration-graphics-3__/graphics/entity/big-turbine/sr/east.png", + frame_count = 1, + line_length = 1, + repeat_count = 4, + width = 640/2, + height = 480/2, + shift = {0,-0.25}, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/big-turbine/hr/east.png", + frame_count = 1, + line_length = 1, + repeat_count = 4, + width = 640, + height = 480, + shift = {0,-0.25}, + scale = 0.5, + }, + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/big-turbine/sr/east_shadow.png", + frame_count = 1, + line_length = 1, + repeat_count = 4, + width = 832/2, + height = 384/2, + shift = {1.5,0.5}, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/big-turbine/hr/east_shadow.png", + frame_count = 1, + line_length = 1, + repeat_count = 4, + width = 832, + height = 384, + shift = {1.5,0.5}, + scale = 0.5, + }, + }, + } + }, + west = { + layers = { + { + filename = "__space-exploration-graphics-3__/graphics/entity/big-turbine/sr/west.png", + frame_count = 1, + line_length = 1, + repeat_count = 4, + width = 640/2, + height = 480/2, + shift = {0,-0.25}, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/big-turbine/hr/west.png", + frame_count = 1, + line_length = 1, + repeat_count = 4, + width = 640, + height = 480, + shift = {0,-0.25}, + scale = 0.5, + }, + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/big-turbine/sr/west_shadow.png", + frame_count = 1, + line_length = 1, + repeat_count = 4, + width = 832/2, + height = 384/2, + shift = {1.5,0.5}, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/big-turbine/hr/west_shadow.png", + frame_count = 1, + line_length = 1, + repeat_count = 4, + width = 832, + height = 384, + shift = {1.5,0.5}, + scale = 0.5, + }, + }, + } + }, + north = { + layers = { + { + filename = "__space-exploration-graphics-3__/graphics/entity/big-turbine/sr/north.png", + frame_count = 1, + line_length = 1, + repeat_count = 4, + width = 448/2, + height = 672/2, + shift = {0,-0.25}, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/big-turbine/hr/north.png", + frame_count = 1, + line_length = 1, + repeat_count = 4, + width = 448, + height = 672, + shift = {0,-0.25}, + scale = 0.5, + }, + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/big-turbine/sr/north_shadow.png", + frame_count = 1, + line_length = 1, + repeat_count = 4, + width = 640/2, + height = 576/2, + shift = {1.5,0.5}, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/big-turbine/hr/north_shadow.png", + frame_count = 1, + line_length = 1, + repeat_count = 4, + width = 640, + height = 576, + shift = {1.5,0.5}, + scale = 0.5, + }, + }, + } + }, + south = { + layers = { + { + filename = "__space-exploration-graphics-3__/graphics/entity/big-turbine/sr/south.png", + frame_count = 1, + line_length = 1, + repeat_count = 4, + width = 448/2, + height = 672/2, + shift = {0,-0.25}, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/big-turbine/hr/south.png", + frame_count = 1, + line_length = 1, + repeat_count = 4, + width = 448, + height = 672, + shift = {0,-0.25}, + scale = 0.5, + }, + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/big-turbine/sr/south_shadow.png", + frame_count = 1, + line_length = 1, + repeat_count = 4, + width = 640/2, + height = 576/2, + shift = {1.5,0.5}, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/big-turbine/hr/south_shadow.png", + frame_count = 1, + line_length = 1, + repeat_count = 4, + width = 640, + height = 576, + shift = {1.5,0.5}, + scale = 0.5, + }, + }, + } + }, + }, + crafting_categories = {"big-turbine"}, + crafting_speed = 1, + energy_source = + { + type = "void", + }, + energy_usage = "0.1W", + ingredient_count = 0, + module_specification = + { + module_slots = 0 + }, + allowed_effects = {}, + working_visualisations = { + {east_animation = fan_east, + always_draw = true}, + {west_animation = fan_west, + always_draw = true}, + {north_animation = fan_north, + always_draw = true}, + {south_animation = fan_south, + always_draw = true}, + }, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/delivery-cannon.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/delivery-cannon.lua new file mode 100644 index 0000000..c5fcfb9 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/delivery-cannon.lua @@ -0,0 +1,951 @@ +local data_util = require("data_util") + +local blank = { + direction_count = 8, + frame_count = 1, + filename = "__space-exploration-graphics__/graphics/blank.png", + width = 1, + height = 1, + priority = "low" +} + +data:extend({ + + { + type = "technology", + name = data_util.mod_prefix .. "delivery-cannon", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "delivery-cannon", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "delivery-cannon-chest", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "delivery-cannon-capsule", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/delivery-cannon.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "meteor-defence", + data_util.mod_prefix .. "rocket-landing-pad", + }, + unit = { + count = 200, + time = 30, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "delivery-cannon-capsule-iridium", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "delivery-cannon-capsule-iridium", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/delivery-cannon.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "delivery-cannon", + data_util.mod_prefix .. "material-science-pack-1" + }, + unit = { + count = 100, + time = 30, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "material-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "delivery-cannon-weapon", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "delivery-cannon-weapon", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "delivery-cannon-weapon-capsule", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/delivery-cannon-weapon.png", + icon_size = 128, + order = "e-g", + prerequisites = { + "military-4", + data_util.mod_prefix .. "delivery-cannon", + data_util.mod_prefix .. "heavy-girder", + data_util.mod_prefix .. "holmium-cable", + data_util.mod_prefix .. "aeroframe-pole", + }, + unit = { + count = 200, + time = 30, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "military-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "material-science-pack-1", 1 }, + { data_util.mod_prefix .. "energy-science-pack-1", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-1", 1 }, + } + }, + }, + + { + type = "item", + name = data_util.mod_prefix .. "delivery-cannon", + icon = "__space-exploration-graphics__/graphics/icons/delivery-cannon.png", + icon_size = 64, + order = "j-a", + subgroup = "rocket-logistics", + stack_size = 20, + place_result = data_util.mod_prefix .. "delivery-cannon", + }, + { + type = "item", + name = data_util.mod_prefix .. "delivery-cannon-weapon", + icon = "__space-exploration-graphics__/graphics/icons/delivery-cannon-weapon.png", + icon_size = 64, + order = "j-a", + subgroup = "surface-defense", + stack_size = 1, + place_result = data_util.mod_prefix .. "delivery-cannon-weapon", + }, + { + type = "item", + name = data_util.mod_prefix .. "delivery-cannon-chest", + icon = "__space-exploration-graphics__/graphics/icons/delivery-cannon-chest.png", + icon_size = 64, + order = "j-b", + subgroup = "rocket-logistics", + stack_size = 50, + place_result = data_util.mod_prefix .. "delivery-cannon-chest", + }, + { + type = "item", + name = data_util.mod_prefix .. "delivery-cannon-capsule", + icon = "__space-exploration-graphics__/graphics/icons/delivery-cannon-capsule.png", + icon_size = 64, + order = "j-c", + subgroup = "rocket-logistics", + stack_size = 50, + }, + { + type = "item", + name = data_util.mod_prefix .. "delivery-cannon-weapon-capsule", + icon = "__space-exploration-graphics__/graphics/icons/delivery-cannon-weapon-capsule.png", + icon_size = 64, + order = "j-c", + subgroup = "surface-defense", + stack_size = 20, + }, + { + type = "selection-tool", + name = data_util.mod_prefix .. "delivery-cannon-targeter", + icon = "__space-exploration-graphics__/graphics/icons/target.png", + icon_mipmaps = 1, + icon_size = 64, + subgroup = "tool", + order = "c[automated-construction]-e[unit-remote-control]", + stack_size = 1, + stackable = false, + selection_color = {r = 0.3, g = 0.9, b = 0.3}, + alt_selection_color = {r = 0.9, g = 0.9, b = 0.3}, + selection_mode = {"nothing"}, + alt_selection_mode = {"nothing"}, + selection_cursor_box_type = "entity", + alt_selection_cursor_box_type = "entity", + hidden = true, + flags = {"hidden", "only-in-cursor"} + }, + + { + type = "recipe", + name = data_util.mod_prefix .. "delivery-cannon-capsule", + result = data_util.mod_prefix .. "delivery-cannon-capsule", + enabled = false, + energy_required = 10, + ingredients = { + { "low-density-structure", 1 }, + { data_util.mod_prefix .. "heat-shielding", 1 }, + { "explosives", 5 }, + { "copper-cable", 10 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "delivery-cannon-capsule-iridium", + result = data_util.mod_prefix .. "delivery-cannon-capsule", + enabled = false, + energy_required = 10, + ingredients = { + { data_util.mod_prefix .. "iridium-plate", 5 }, + { "explosives", 5 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "delivery-cannon-weapon-capsule", + result = data_util.mod_prefix .. "delivery-cannon-weapon-capsule", + enabled = false, + energy_required = 20, + ingredients = { + { "low-density-structure", 10 }, + { data_util.mod_prefix .. "heat-shielding", 10 }, + { data_util.mod_prefix .. "iridium-plate", 10 }, + { data_util.mod_prefix .. "holmium-cable", 20 }, + { "explosives", 50 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "delivery-cannon", + result = data_util.mod_prefix .. "delivery-cannon", + enabled = false, + energy_required = 10, + ingredients = { + { "steel-chest", 10 }, + { "pipe", 10 }, + { "electric-engine-unit", 10 }, + { data_util.mod_prefix .. "heat-shielding", 10 }, + { "concrete", 20 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "delivery-cannon-weapon", + result = data_util.mod_prefix .. "delivery-cannon-weapon", + enabled = false, + energy_required = 30, + ingredients = { + { "electric-engine-unit", 50 }, + { data_util.mod_prefix .. "heat-shielding", 50 }, + { data_util.mod_prefix .. "heavy-girder", 100 }, + { data_util.mod_prefix .. "holmium-cable", 200 }, + { data_util.mod_prefix .. "aeroframe-pole", 200 }, + { "processing-unit", 100 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "delivery-cannon-chest", + result = data_util.mod_prefix .. "delivery-cannon-chest", + enabled = false, + energy_required = 10, + ingredients = { + { "radar", 1 }, + { "steel-chest", 10 }, + { "concrete", 20 }, + { data_util.mod_prefix .. "heat-shielding", 10 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + + { + type = "assembling-machine", + name = data_util.mod_prefix.."delivery-cannon", + minable = { + mining_time = 0.5, + result = data_util.mod_prefix.."delivery-cannon", + }, + icon = "__space-exploration-graphics__/graphics/icons/delivery-cannon.png", + icon_size = 64, + icon_mipmaps = 1, + order = "a-a", + max_health = 1500, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{-2.3, -2.3}, {2.3, 2.3}}, + selection_box = {{-2.5, -2.5}, {2.5, 2.5}}, + drawing_box = {{-2.5, -2.5-5}, {2.5, 2.5}}, + se_allow_in_space = true, + resistances = + { + { type = "meteor", percent = 99 }, + { type = "explosion", percent = 99 }, + { type = "impact", percent = 99 }, + { type = "fire", percent = 99 }, + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + apparent_volume = 1.5, + idle_sound = { + filename = "__base__/sound/idle1.ogg", + volume = 0.6 + }, + sound = { + { + filename = "__base__/sound/assembling-machine-t1-1.ogg", + volume = 0.8 + }, + { + filename = "__base__/sound/assembling-machine-t1-2.ogg", + volume = 0.8 + } + } + }, + collision_mask = { + "water-tile", + "item-layer", + "object-layer", + "player-layer", + }, + animation = + { + layers = + { + { + filename = "__space-exploration-graphics-5__/graphics/entity/delivery-cannon/delivery-cannon.png", + frame_count = 1, + line_length = 1, + width = 320/2, + height = 640/2, + shift = {0,-2.5}, + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/delivery-cannon/hr-delivery-cannon.png", + frame_count = 1, + line_length = 1, + width = 320, + height = 640, + shift = {0,-2.5}, + scale = 0.5, + }, + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-5__/graphics/entity/delivery-cannon/delivery-cannon-shadow.png", + shift = { 1.25, 1/32 }, + width = 470/2, + height = 306/2, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-5__/graphics/entity/delivery-cannon/hr-delivery-cannon-shadow.png", + shift = { 1.25, 1/32 }, + width = 470, + height = 306, + scale = 0.5, + } + } + } + }, + crafting_categories = {"delivery-cannon"}, + crafting_speed = 1, + energy_source = + { + type = "void", + }, + energy_usage = "100kW", + ingredient_count = 12, + module_specification = + { + module_slots = 0 + }, + allowed_effects = {}, + }, + { + type = "electric-energy-interface", + name = data_util.mod_prefix .. "delivery-cannon-energy-interface", + icon = "__space-exploration-graphics__/graphics/icons/delivery-cannon.png", + icon_size = 64, + icon_mipmaps = 1, + order = "z-d-a", + allow_copy_paste = true, + picture = + { + layers = + { + blank + }, + }, + collision_box = {{-2.3, -2.3}, {2.3, 2.3}}, + selection_box = {{-2.5, -2.5}, {2.5, 2.5}}, + selectable_in_game = false, + collision_mask = { + "water-tile", + "item-layer", + "object-layer", + "player-layer", + }, + selectable = false, + continuous_animation = true, + corpse = "medium-remnants", + energy_source = { + type = "electric", + usage_priority = "secondary-input", + input_flow_limit = "50MW", + output_flow_limit = "0kW", + buffer_capacity = "1000MJ",-- launch energy cost is removed from buffer + drain = "100kW", + }, + energy_production = "0kW", + energy_usage = "0GW", + flags = { + "placeable-player", + "player-creation", + "hidden", + "not-rotatable" + }, + max_health = 1500, + vehicle_impact_sound = { + filename = "__base__/sound/car-metal-impact.ogg", + volume = 0.65 + }, + }, + + { + type = "assembling-machine", + name = data_util.mod_prefix.."delivery-cannon-weapon", + minable = { + mining_time = 1, + result = data_util.mod_prefix.."delivery-cannon-weapon", + }, + icon = "__space-exploration-graphics__/graphics/icons/delivery-cannon-weapon.png", + icon_size = 64, + icon_mipmaps = 1, + order = "a-a", + max_health = 1500, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = { { -4.3, -4.3 }, { 4.3, 4.3 } }, + selection_box = { { -4.5, -4.5 }, { 4.5, 4.5 } }, + drawing_box = { { -4.5, -4.5-9 }, { 4.5, 4.5 } }, + se_allow_in_space = true, + resistances = + { + { type = "meteor", percent = 99 }, + { type = "explosion", percent = 50 }, + { type = "impact", percent = 99 }, + { type = "fire", percent = 50 }, + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + apparent_volume = 1.5, + idle_sound = { + filename = "__base__/sound/idle1.ogg", + volume = 0.6 + }, + sound = { + { + filename = "__base__/sound/assembling-machine-t1-1.ogg", + volume = 0.8 + }, + { + filename = "__base__/sound/assembling-machine-t1-2.ogg", + volume = 0.8 + } + } + }, + collision_mask = { + "water-tile", + "item-layer", + "object-layer", + "player-layer", + }, + animation = + { + layers = { + { + filename = "__space-exploration-graphics-5__/graphics/entity/delivery-cannon/delivery-cannon-weapon.png", + shift = { 0, -4.75 }, + width = 616/2, + height = 1198/2, + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/delivery-cannon/hr-delivery-cannon-weapon.png", + shift = { 0, -4.75 }, + width = 616, + height = 1198, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-5__/graphics/entity/delivery-cannon/delivery-cannon-weapon-shadow.png", + shift = { 2.5, 2/32 }, + width = 890/2, + height = 578/2, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-5__/graphics/entity/delivery-cannon/hr-delivery-cannon-weapon-shadow.png", + shift = { 2.5, 2/32 }, + width = 890, + height = 578, + scale = 0.5, + } + } + } + }, + crafting_categories = {"delivery-cannon-weapon"}, + crafting_speed = 1, + energy_source = + { + type = "void", + }, + energy_usage = "100kW", + ingredient_count = 12, + module_specification = + { + module_slots = 0 + }, + allowed_effects = {}, + }, + { + type = "electric-energy-interface", + name = data_util.mod_prefix .. "delivery-cannon-weapon-energy-interface", + icon = "__space-exploration-graphics__/graphics/icons/delivery-cannon-weapon.png", + icon_size = 64, + icon_mipmaps = 1, + order = "z-d-a", + allow_copy_paste = true, + picture = + { + layers = + { + blank + }, + }, + collision_box = { { -4.3, -4.3 }, { 4.3, 4.3 } }, + selection_box = { { -4.5, -4.5 }, { 4.5, 4.5 } }, + selectable_in_game = false, + collision_mask = { + "water-tile", + "item-layer", + "object-layer", + "player-layer", + }, + selectable = false, + continuous_animation = true, + corpse = "medium-remnants", + energy_source = { + type = "electric", + usage_priority = "secondary-input", + input_flow_limit = "500MW", + output_flow_limit = "0kW", + buffer_capacity = "10000MJ",-- launch energy cost is removed from buffer + drain = "1000kW", + }, + energy_production = "0kW", + energy_usage = "0GW", + flags = { + "placeable-player", + "player-creation", + "hidden", + "not-rotatable" + }, + max_health = 1500, + vehicle_impact_sound = { + filename = "__base__/sound/car-metal-impact.ogg", + volume = 0.65 + }, + }, + + { + type = "container", + name = data_util.mod_prefix .. "delivery-cannon-chest", + icon = "__space-exploration-graphics__/graphics/icons/delivery-cannon-chest.png", + icon_size = 64, + flags = {"placeable-neutral", "player-creation"}, + minable = {mining_time = 0.5, result = data_util.mod_prefix .. "delivery-cannon-chest"}, + max_health = 1000, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + collision_box = {{-1.3,-1.3},{1.3,1.3}}, + collision_mask = { + "water-tile", + "item-layer", + "object-layer", + "player-layer", + }, + selection_box = {{-1.5,-1.5},{1.5,1.5}}, + se_allow_in_space = true, + inventory_size = 40, + resistances = { + { type = "meteor", percent = 99 }, + { type = "explosion", percent = 75 }, + { type = "impact", percent = 90 }, + { type = "fire", percent = 90 }, + }, + open_sound = { filename = "__base__/sound/metallic-chest-open.ogg", volume=0.65 }, + close_sound = { filename = "__base__/sound/metallic-chest-close.ogg", volume = 0.7 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + picture = { + layers = { + { + filename = "__space-exploration-graphics-5__/graphics/entity/delivery-cannon/delivery-cannon-chest.png", + frame_count = 1, + line_length = 1, + width = 208/2, + height = 200/2, + shift = {0,0}, + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/delivery-cannon/hr-delivery-cannon-chest.png", + frame_count = 1, + line_length = 1, + width = 208, + height = 200, + shift = {0,0}, + scale = 0.5, + }, + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-5__/graphics/entity/delivery-cannon/delivery-cannon-chest-shadow.png", + frame_count = 1, + line_length = 1, + width = 278/2, + height = 150/2, + shift = {0.5625,0.5875}, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-5__/graphics/entity/delivery-cannon/hr-delivery-cannon-chest-shadow.png", + frame_count = 1, + line_length = 1, + width = 278, + height = 150, + shift = {0.5625,0.5875}, + scale = 0.5, + }, + }, + } + }, + circuit_wire_connection_point = + { + shadow = + { + red = {0.7, -1.3}, + green = {0.7, -1.3}, + }, + wire = + { + red = {0.7, -1.3}, + green = {0.7, -1.3}, + } + }, + circuit_wire_max_distance = 12.5, + }, + + { + type = "explosion", + name = data_util.mod_prefix .. "delivery-cannon-beam", + animations = { + { + filename = "__space-exploration-graphics-5__/graphics/entity/delivery-cannon/delivery-cannon-beam.png", + frame_count = 6, + height = 1, + priority = "extra-high", + width = 187 + } + }, + beam = true, + flags = { "not-on-map", "placeable-off-grid"}, + light = { + color = { + b = 0.8, + g = 1, + r = 0.9 + }, + intensity = 1, + size = 20 + }, + rotate = true, + smoke = "smoke-fast", + smoke_count = 2, + smoke_slow_down_factor = 1, + sound = { + { + filename = "__base__/sound/fight/old/huge-explosion.ogg", + volume = 1 + } + }, + }, + { + type = "explosion", + name = data_util.mod_prefix .. "delivery-cannon-weapon-beam", + animations = { + { + filename = "__space-exploration-graphics-5__/graphics/entity/delivery-cannon/delivery-cannon-weapon-beam.png", + frame_count = 6, + height = 1, + priority = "extra-high", + width = 187 + } + }, + beam = true, + flags = { "not-on-map", "placeable-off-grid"}, + light = { + color = { + b = 0.8, + g = 0.9, + r = 1 + }, + intensity = 1, + size = 20 + }, + rotate = true, + smoke = "smoke-fast", + smoke_count = 2, + smoke_slow_down_factor = 1, + sound = { + { + filename = "__base__/sound/fight/old/huge-explosion.ogg", + volume = 1 + } + }, + }, + { + type = "projectile", + name = data_util.mod_prefix.."delivery-cannon-capsule-projectile", + acceleration = 0, + rotatable = false, + animation = { + filename = "__space-exploration-graphics-5__/graphics/entity/delivery-cannon/delivery-cannon-capsule.png", + frame_count = 1, + width = 58/2, + height = 94/2, + line_length = 1, + priority = "high", + shift = { 0, 0 }, + { + filename = "__space-exploration-graphics-5__/graphics/entity/delivery-cannon/hr-delivery-cannon-capsule.png", + frame_count = 1, + width = 58, + height = 94, + line_length = 1, + priority = "high", + shift = { 0, 0 }, + scale = 0.5, + }, + }, + flags = { "not-on-map", "placeable-off-grid"}, + light = { intensity = 0.2, size = 10}, + smoke = { + { + deviation = { + 0.15, + 0.15 + }, + frequency = 1, + name = "smoke-fast", + --name = "smoke-explosion-particle", + --name = "soft-fire-smoke", -- lasts longer + position = {0,0}, + slow_down_factor = 1, + starting_frame = 3, + starting_frame_deviation = 5, + starting_frame_speed = 0, + starting_frame_speed_deviation = 5 + } + }, + }, + { + type = "projectile", + name = data_util.mod_prefix.."delivery-cannon-weapon-capsule-projectile", + acceleration = 0, + rotatable = false, + animation = { + filename = "__space-exploration-graphics-5__/graphics/entity/delivery-cannon/delivery-cannon-weapon-capsule.png", + frame_count = 1, + width = 58/2, + height = 94/2, + line_length = 1, + priority = "high", + shift = { 0, 0 }, + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/delivery-cannon/hr-delivery-cannon-weapon-capsule.png", + frame_count = 1, + width = 58, + height = 94, + line_length = 1, + priority = "high", + shift = { 0, 0 }, + scale = 0.5, + }, + }, + flags = { "not-on-map", "placeable-off-grid"}, + light = { intensity = 0.2, size = 10}, + smoke = { + { + deviation = { + 0.15, + 0.15 + }, + frequency = 1, + name = "smoke-fast", + --name = "smoke-explosion-particle", + --name = "soft-fire-smoke", -- lasts longer + position = {0,0}, + slow_down_factor = 1, + starting_frame = 3, + starting_frame_deviation = 5, + starting_frame_speed = 0, + starting_frame_speed_deviation = 5 + } + }, + }, + { + type = "projectile", + name = data_util.mod_prefix.."delivery-cannon-capsule-shadow", + acceleration = 0, + rotatable = false, + animation = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-5__/graphics/entity/delivery-cannon/delivery-cannon-capsule-shadow.png", + frame_count = 1, + width = 98/2, + height = 50/2, + line_length = 1, + priority = "high", + shift = { 0, 0 }, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-5__/graphics/entity/delivery-cannon/hr-delivery-cannon-capsule-shadow.png", + frame_count = 1, + width = 98, + height = 50, + line_length = 1, + priority = "high", + shift = { 0, 0 }, + scale = 0.5, + }, + }, + flags = { "not-on-map", "placeable-off-grid"}, + }, + { + type = "explosion", + name = data_util.mod_prefix.."delivery-cannon-capsule-explosion", + animations = table.deepcopy(data.raw.explosion["medium-explosion"].animations), + created_effect = { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + { + type = "create-particle", + particle_name = "explosion-remnants-particle", + initial_height = 0.5, + initial_vertical_speed = 0.08, + initial_vertical_speed_deviation = 0.08, + offset_deviation = { { -0.2, -0.2 }, { 0.2, 0.2 } }, + repeat_count = 16, + speed_from_center = 0.08, + speed_from_center_deviation = 0.08, + }, + { + type = "create-particle", + particle_name = "stone-particle", + initial_height = 0.5, + initial_vertical_speed = 0.1, + initial_vertical_speed_deviation = 0.1, + offset_deviation = { { -0.2, -0.2 }, { 0.2, 0.2 } }, + repeat_count = 60, + speed_from_center = 0.08, + speed_from_center_deviation = 0.08, + }, + { + action = { + action_delivery = { + target_effects = { + { + damage = { + amount = 5, + type = "meteor" + }, + type = "damage" + }, + }, + type = "instant" + }, + radius = 10, + type = "area" + }, + type = "nested-result" + }, + { + action = { + action_delivery = { + target_effects = { + { + damage = { + amount = 10, + type = "meteor" + }, + type = "damage" + }, + }, + type = "instant" + }, + radius = 4, + type = "area" + }, + type = "nested-result" + }, + { + action = { + action_delivery = { + target_effects = { + { + damage = { + amount = 35, + type = "meteor" + }, + type = "damage" + }, + }, + type = "instant" + }, + radius = 2, + type = "area" + }, + type = "nested-result" + }, + { + action = { + action_delivery = { + target_effects = { + { + damage = { + amount = 100, + type = "meteor" + }, + type = "damage" + }, + }, + type = "instant" + }, + radius = 1, + type = "area" + }, + type = "nested-result" + }, + }, + }, + }, + flags = { "not-on-map", "placeable-off-grid"}, + light = { color = { r = 1, g = 0.9, b = 0.8 }, intensity = 1, size = 30 }, + sound = { + aggregation = { max_count = 1, remove = true }, + variations = table.deepcopy(data.raw.explosion["medium-explosion"].sound.variations) + }, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/electric-boiler.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/electric-boiler.lua new file mode 100644 index 0000000..5d801db --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/electric-boiler.lua @@ -0,0 +1,400 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +data:extend({ + { + type = "item", + name = data_util.mod_prefix .. "electric-boiler", + icon = "__space-exploration-graphics__/graphics/icons/electric-boiler.png", + icon_size = 64, + order = "b-a-z", + subgroup = "energy", + stack_size = 50, + place_result = data_util.mod_prefix .. "electric-boiler", + }, + { + type = "recipe", + name = data_util.mod_prefix .. "electric-boiler", + result = data_util.mod_prefix .. "electric-boiler", + enabled = false, + energy_required = 3, + ingredients = { + { "copper-plate", 100 }, + { "steel-plate", 10 }, + { "pipe", 10 }, + { data_util.mod_prefix .. "heat-shielding", 1 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "technology", + name = data_util.mod_prefix .. "electric-boiler", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "electric-boiler" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "electric-boiling-void" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "electric-boiling-steam-100" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "electric-boiling-steam-165" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "electric-boiling-steam-500" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "electric-boiling-steam-5000" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "steam-to-water" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/electric-boiler.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "heat-shielding", + }, + unit = { + count = 100, + time = 10, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + } + }, + }, + { + type = "assembling-machine", + name = data_util.mod_prefix .. "electric-boiler", + icon = "__space-exploration-graphics__/graphics/icons/electric-boiler.png", + icon_size = 64, + flags = {"placeable-neutral", "player-creation"}, + minable = { mining_time = 0.2, result = data_util.mod_prefix .. "electric-boiler"}, + max_health = 200, + corpse = "boiler-remnants", + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + resistances = + { + { + type = "fire", + percent = 90 + }, + { + type = "explosion", + percent = 30 + }, + { + type = "impact", + percent = 30 + } + }, + collision_box = {{-1.29, -0.79}, {1.29, 0.79}}, + collision_mask = { + "water-tile", + "item-layer", + "object-layer", + "player-layer", + }, + se_allow_in_space = true, + selection_box = {{-1.5, -1}, {1.5, 1}}, + target_temperature = 500, + + fluid_boxes = + { + { + base_area = 1, + height = 2, + base_level = -1, + pipe_covers = pipecoverspictures(), + pipe_connections = + { + {type = "input-output", position = {-2, 0.5}}, + {type = "input-output", position = {2, 0.5}} + }, + production_type = "input", + filter = "water" + }, + { + base_area = 1, + height = 2, + base_level = 1, + pipe_covers = pipecoverspictures(), + pipe_connections = + { + {type = "output", position = {0, -1.5}} + }, + production_type = "output", + filter = "steam" + }, + off_when_no_fluid_recipe = true + }, + + energy_usage = "5MW", + crafting_categories = {data_util.mod_prefix .. "electric-boiling"}, + crafting_speed = 1, + energy_source = + { + type = "electric", + --drain = "10MW", + usage_priority = "secondary-input" + }, + working_sound = + { + sound = + { + filename = "__base__/sound/boiler.ogg", + volume = 0.8 + }, + max_sounds_per_type = 3 + }, + animation = { + + north = + { + layers = + { + { + filename = "__space-exploration-graphics-3__/graphics/entity/electric-boiler/electric-boiler-n.png", + priority = "extra-high", + width = 268/2, + height = 220/2, + shift = util.by_pixel(-1.25, 5.25), + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/electric-boiler/hr-electric-boiler-n.png", + width = 268, + height = 220, + priority = "extra-high", + shift = util.by_pixel(-1.25, 5.25), + scale = 0.5, + }, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/electric-boiler/electric-boiler-n-shadow.png", + priority = "extra-high", + width = 274/2, + height = 164/2, + shift = util.by_pixel(20.5, 9), + draw_as_shadow = true, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/electric-boiler/hr-electric-boiler-n-shadow.png", + width = 274, + height = 164, + priority = "extra-high", + shift = util.by_pixel(20.5, 9), + scale = 0.5, + draw_as_shadow = true + }, + } + } + }, + east = + { + layers = + { + { + filename = "__space-exploration-graphics-3__/graphics/entity/electric-boiler/electric-boiler-e.png", + priority = "extra-high", + width = 210/2, + height = 300/2, + shift = util.by_pixel(-1.75, 1.25), + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/electric-boiler/hr-electric-boiler-e.png", + width = 210, + height = 300, + priority = "extra-high", + shift = util.by_pixel(-1.75, 1.25), + scale = 0.5, + }, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/electric-boiler/electric-boiler-e-shadow.png", + priority = "extra-high", + width = 184/2, + height = 194/2, + shift = util.by_pixel(30, 9.5), + draw_as_shadow = true, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/electric-boiler/hr-electric-boiler-e-shadow.png", + width = 184, + height = 194, + priority = "extra-high", + shift = util.by_pixel(30, 9.5), + scale = 0.5, + draw_as_shadow = true + }, + } + } + }, + south = + { + layers = + { + { + filename = "__space-exploration-graphics-3__/graphics/entity/electric-boiler/electric-boiler-s.png", + priority = "extra-high", + width = 260/2, + height = 200/2, + shift = util.by_pixel(4, 10.75), + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/electric-boiler/hr-electric-boiler-s.png", + width = 260, + height = 200, + priority = "extra-high", + shift = util.by_pixel(4, 10.75), + scale = 0.5, + }, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/electric-boiler/electric-boiler-s-shadow.png", + priority = "extra-high", + width = 310/2, + height = 130/2, + shift = util.by_pixel(29.75, 15.75), + draw_as_shadow = true, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/electric-boiler/hr-electric-boiler-s-shadow.png", + priority = "extra-high", + width = 310, + height = 130, + shift = util.by_pixel(29.75, 15.75), + scale = 0.5, + draw_as_shadow = true + }, + } + } + }, + west = + { + layers = + { + { + filename = "__space-exploration-graphics-3__/graphics/entity/electric-boiler/electric-boiler-w.png", + priority = "extra-high", + width = 196/2, + height = 272/2, + shift = util.by_pixel(1.5, 7.75), + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/electric-boiler/hr-electric-boiler-w.png", + width = 196, + height = 272, + priority = "extra-high", + shift = util.by_pixel(1.5, 7.75), + scale = 0.5, + }, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/electric-boiler/electric-boiler-w-shadow.png", + priority = "extra-high", + width = 206/2, + height = 218/2, + shift = util.by_pixel(19.5, 6.5), + draw_as_shadow = true, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/electric-boiler/hr-electric-boiler-w-shadow.png", + width = 206, + height = 218, + priority = "extra-high", + shift = util.by_pixel(19.5, 6.5), + scale = 0.5, + draw_as_shadow = true + }, + } + } + } + }, + working_visualisations = + { + { + north_animation = + { + layers = + { + { + filename = "__space-exploration-graphics-3__/graphics/entity/electric-boiler/electric-boiler-n-light.png", + priority = "extra-high", + width = 268/2, + height = 220/2, + shift = util.by_pixel(-1.25, 5.25), + blend_mode = "additive", + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/electric-boiler/hr-electric-boiler-n-light.png", + width = 268, + height = 220, + priority = "extra-high", + shift = util.by_pixel(-1.25, 5.25), + scale = 0.5, + blend_mode = "additive", + }, + }, + } + }, + east_animation = + { + layers = + { + { + filename = "__space-exploration-graphics-3__/graphics/entity/electric-boiler/electric-boiler-e-light.png", + priority = "extra-high", + width = 210/2, + height = 300/2, + shift = util.by_pixel(-1.75, 1.25), + blend_mode = "additive", + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/electric-boiler/hr-electric-boiler-e-light.png", + width = 210, + height = 300, + priority = "extra-high", + shift = util.by_pixel(-1.75, 1.25), + scale = 0.5, + blend_mode = "additive", + }, + }, + } + }, + south_animation = + { + layers = + { + { + filename = "__space-exploration-graphics-3__/graphics/entity/electric-boiler/electric-boiler-s-light.png", + priority = "extra-high", + width = 260/2, + height = 200/2, + shift = util.by_pixel(4, 10.75), + blend_mode = "additive", + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/electric-boiler/hr-electric-boiler-s-light.png", + width = 260, + height = 200, + priority = "extra-high", + shift = util.by_pixel(4, 10.75), + scale = 0.5, + blend_mode = "additive", + }, + }, + } + }, + west_animation = + { + layers = + { + { + filename = "__space-exploration-graphics-3__/graphics/entity/electric-boiler/electric-boiler-w-light.png", + priority = "extra-high", + width = 196/2, + height = 272/2, + shift = util.by_pixel(1.5, 7.75), + blend_mode = "additive", + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/electric-boiler/hr-electric-boiler-w-light.png", + width = 196, + height = 272, + priority = "extra-high", + shift = util.by_pixel(1.5, 7.75), + scale = 0.5, + blend_mode = "additive", + }, + }, + } + } + }, + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.5, size = 4, shift = {0.0, 0.0}, color = {r = 1, g = 0.9, b = 0.5}} + }, + }, + }, + +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/energy-transmitter.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/energy-transmitter.lua new file mode 100644 index 0000000..8bfc44e --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/energy-transmitter.lua @@ -0,0 +1,2428 @@ +local data_util = require("data_util") +--[[ +Trunk 10x10, chamber connections in middle of each edge. +Branch 8x4, chamber connections in middle of each edge. Can have leaves connecting anywhere along the long sides. +Leaf 3x5, Has 1 connection in the middle 1 of the narrow sides. Must connect anywhere along the long side of a chamber. + +emitter = Maser transmitter -- storage tank? +chamber = Maser chamber -- storage tank? +Leaf = Maser injector -- assembling machine + +emitter = Maser transmitter -- assembling (anything that can be opened, maybe roboport?) +chamber = Maser chamber -- storage tank? +Leaf = Maser injector -- assembling machine, reactor + +178, 160, 76 +]] + +local specific_heat = "1GJ" +local blank = { + direction_count = 8, + frame_count = 1, + filename = "__space-exploration-graphics__/graphics/blank.png", + width = 1, + height = 1, + priority = "low" +} +local emitter_layers = { + { + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/sr/energy-transmitter.png", + priority = "high", + width = 640/2, + height = 736/2, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, -24), + animation_speed = 1, + scale = 1, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/energy-transmitter.png", + priority = "high", + width = 640, + height = 736, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, -24), + animation_speed = 1, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/sr/energy-transmitter-shadow.png", + priority = "high", + width = 354, + height = 238, + frame_count = 1, + line_length = 1, + repeat_count = 1, + shift = util.by_pixel(32, 28), + scale = 10/9, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/energy-transmitter-shadow.png", + priority = "high", + width = 709, + height = 477, + frame_count = 1, + line_length = 1, + repeat_count = 1, + shift = util.by_pixel(32, 28), + scale = 0.5*10/9, + } + }, +} +data:extend({ + { + type = "technology", + name = data_util.mod_prefix .. "energy-beaming", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "energy-transmitter-emitter" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "energy-transmitter-chamber" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "energy-transmitter-injector" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "energy-receiver" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/energy-transmitter.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "superconductive-cable", + data_util.mod_prefix .. "aeroframe-bulkhead", + }, + unit = { + count = 500, + time = 30, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-3", 1 }, + { data_util.mod_prefix .. "material-science-pack-3", 1 }, + { data_util.mod_prefix .. "energy-science-pack-3", 1 }, + } + }, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "energy-receiver", + result = data_util.mod_prefix .. "energy-receiver", + enabled = false, + energy_required = 10, + ingredients = { + { "glass", 1000 }, + { "copper-plate", 1000 }, + { data_util.mod_prefix .. "heat-shielding", 100 }, + { data_util.mod_prefix .. "aeroframe-bulkhead", 100 }, + { data_util.mod_prefix .. "superconductive-cable", 20 }, + { data_util.mod_prefix .. "heavy-girder", 100 }, + { "processing-unit", 50 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "energy-transmitter-emitter", + result = data_util.mod_prefix .. "energy-transmitter-emitter", + enabled = false, + energy_required = 10, + ingredients = { + { "glass", 1000 }, + { data_util.mod_prefix .. "aeroframe-bulkhead", 100 }, + { data_util.mod_prefix .. "superconductive-cable", 200 }, + { data_util.mod_prefix .. "heavy-girder", 200 }, + { "processing-unit", 100 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "energy-transmitter-chamber", + result = data_util.mod_prefix .. "energy-transmitter-chamber", + enabled = false, + energy_required = 10, + ingredients = { + { "glass", 100 }, + { data_util.mod_prefix .. "aeroframe-bulkhead", 50 }, + { data_util.mod_prefix .. "superconductive-cable", 50 }, + { data_util.mod_prefix .. "heavy-girder", 50 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "energy-transmitter-injector", + result = data_util.mod_prefix .. "energy-transmitter-injector", + enabled = false, + energy_required = 10, + ingredients = { + { "glass", 100 }, + { data_util.mod_prefix .. "aeroframe-bulkhead", 100 }, + { data_util.mod_prefix .. "superconductive-cable", 100 }, + { data_util.mod_prefix .. "heavy-girder", 100 }, + { "processing-unit", 50 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "item", + name = data_util.mod_prefix .. "energy-receiver", + icon = "__space-exploration-graphics__/graphics/icons/energy-receiver.png", + icon_size = 64, + order = "b-a", + subgroup = "beaming", + stack_size = 1, + place_result = data_util.mod_prefix .. "energy-receiver", + }, + { + type = "item", + name = data_util.mod_prefix .. "energy-transmitter-emitter", + icon = "__space-exploration-graphics__/graphics/icons/energy-transmitter.png", + icon_size = 64, + order = "a-a", + subgroup = "beaming", + stack_size = 1, + place_result = data_util.mod_prefix .. "energy-transmitter-emitter", + }, + { + type = "item", + name = data_util.mod_prefix .. "energy-transmitter-chamber", + icon = "__space-exploration-graphics__/graphics/icons/energy-transmitter-chamber.png", + icon_size = 64, + order = "a-b", + subgroup = "beaming", + stack_size = 10, + place_result = data_util.mod_prefix .. "energy-transmitter-chamber", + }, + { + type = "item", + name = data_util.mod_prefix .. "energy-transmitter-injector", + icon = "__space-exploration-graphics__/graphics/icons/energy-transmitter-injector.png", + icon_size = 64, + order = "a-c", + subgroup = "beaming", + stack_size = 50, + place_result = data_util.mod_prefix .. "energy-transmitter-injector", + }, + { -- + type = "recipe", + name = data_util.mod_prefix .. "energy-transmitter-emitter-fixed", + icon = "__space-exploration-graphics__/graphics/icons/energy-transmitter.png", + icon_size = 64, + order = "a-d", + subgroup = "beaming", + energy_required = 1, + category = "fixed-recipe", + ingredients = {}, + results = {}, + flags = {"hidden"}, + hidden = true, + enabled = true, + always_show_made_in = true, + }, + { -- + type = "recipe", + name = data_util.mod_prefix .. "energy-transmitter-injector-fixed", + icon = "__space-exploration-graphics__/graphics/icons/energy-transmitter-injector.png", + icon_size = 64, + order = "a-d", + subgroup = "beaming", + energy_required = 1, + category = "fixed-recipe", + ingredients = {}, + results = {}, + flags = {"hidden"}, + hidden = true, + enabled = true, + always_show_made_in = true, + }, + { + type = "selection-tool", + name = data_util.mod_prefix .. "energy-transmitter-targeter", + icon = "__space-exploration-graphics__/graphics/icons/target.png", + icon_mipmaps = 1, + icon_size = 64, + subgroup = "beaming", + order = "a-d", + stack_size = 1, + stackable = false, + selection_color = {r = 0.3, g = 0.9, b = 0.3}, + alt_selection_color = {r = 0.9, g = 0.9, b = 0.3}, + selection_mode = {"nothing"}, + alt_selection_mode = {"nothing"}, + selection_cursor_box_type = "entity", + alt_selection_cursor_box_type = "entity", + hidden = true, + flags = {"hidden", "only-in-cursor"}, + }, + { + type = "assembling-machine", -- "boiler", + name = data_util.mod_prefix .. "energy-transmitter-emitter", -- emitter + icon = "__space-exploration-graphics__/graphics/icons/energy-transmitter.png", + icon_size = 64, + minable = {mining_time = 0.5, result = data_util.mod_prefix .. "energy-transmitter-emitter"}, + order = "a-a", + allow_copy_paste = true, + fluid_boxes = + { + { + base_area = 1, + base_level = 0, + height = 1, + pipe_connections = { + { type = "input", position = { -5.5, 0 }, }, + { type = "input", position = { 5.5, 0 }, }, + { type = "input", position = { 0, -5.5}, }, + { type = "input", position = { 0, 5.5 }, }, + }, + production_type = "input" + }, + }, + animation = -- structure = + { + north = {layers = emitter_layers}, + south = {layers = emitter_layers}, + east = {layers = emitter_layers}, + west = {layers = emitter_layers}, + }, + collision_box = data_util.auto_box(10, 10, 0.2), + selection_box = data_util.auto_box(10, 10), + drawing_box = data_util.auto_box(10, 10, 0, {0, 0}, 1), + collision_mask = { + "water-tile", + "item-layer", + "object-layer", + "player-layer", + spaceship_collision_layer, + }, + se_allow_in_space = true, + corpse = "medium-remnants", + energy_source = { + type = "electric", + usage_priority = "secondary-input", + buffer_capacity = "10GJ", + }, + energy_usage = "1GW", + flags = { + "placeable-player", + "player-creation", + }, + max_health = 5000, + vehicle_impact_sound = { + filename = "__base__/sound/car-metal-impact.ogg", + volume = 0.65 + }, + crafting_speed = 1, + crafting_categories = {"fixed-recipe"}, + fixed_recipe = data_util.mod_prefix .. "energy-transmitter-emitter-fixed", + working_sound = { + apparent_volume = 1.5, + fade_in_ticks = 10, + fade_out_ticks = 30, + max_sounds_per_type = 3, + sound = { + { + filename = "__base__/sound/nuclear-reactor-1.ogg", + volume = 0.6 + }, + { + filename = "__base__/sound/nuclear-reactor-2.ogg", + volume = 0.6 + } + } + }, + --fire = blank, + --fire_glow = blank, + --burning_cooldown = 20, + --target_temperature = 1000000, + --mode = "heat-water-inside", + --energy_consumption = "100MW", + --energy_usage = "100MW", + --light = {intensity = 1, size = 8, shift = {0.0, 0.0}, color = {r = 0.6, g = 0.9, b = 1}} + }, + { + type = "boiler", + name = data_util.mod_prefix .. "energy-transmitter-chamber", + icon = "__space-exploration-graphics__/graphics/icons/energy-transmitter-chamber.png", + icon_size = 64, + minable = {mining_time = 0.2, result = data_util.mod_prefix .. "energy-transmitter-chamber"}, + order = "a-b", + allow_copy_paste = true, + collision_box = data_util.auto_box(4, 8, 0.05), + selection_box = data_util.auto_box(4, 8), + collision_mask = { + "water-tile", + "item-layer", + "object-layer", + "player-layer", + spaceship_collision_layer, + }, + se_allow_in_space = true, + fluid_box = { + base_area = 1, + base_level = 0, + height = 1, + pipe_connections = { + { type = "input-output", position = { -2, 0 }, }, + { type = "input-output", position = { 2, 0 }, }, + { type = "input-output", position = { 0, -4}, }, + { type = "input-output", position = { 0, 4 }, }, + }, + production_type = "input-output" + }, + output_fluid_box = { + base_area = 1, + base_level = 0, + height = 1, + pipe_connections = { + --[[ + { type = "output", position = { -2, 3.5 }, }, { type = "output", position = { 2, 3.5 }, }, + { type = "output", position = { -2, 2.5 }, }, { type = "output", position = { 2, 2.5 }, }, + { type = "output", position = { -2, 1.5 }, }, { type = "output", position = { 2, 1.5 }, }, + { type = "output", position = { -2, 0.5 }, }, { type = "output", position = { 2, 0.5 }, }, + { type = "output", position = { -2, -0.5 }, }, { type = "output", position = { 2, -0.5 }, }, + { type = "output", position = { -2, -1.5 }, }, { type = "output", position = { 2, -1.5 }, }, + { type = "output", position = { -2, -2.5 }, }, { type = "output", position = { 2, -2.5 }, }, + { type = "output", position = { -2, -3.5 }, }, { type = "output", position = { 2, -3.5 }, }, + ]] + }, + production_type = "output" + }, + fire = blank, + fire_glow = blank, + burning_cooldown = 20, + target_temperature = 1000000, + mode = "heat-water-inside", + structure = + { + east = { + layers = + { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/chamber-h.png", + priority = "high", + width = 512, + height = 256, + frame_count = 1, + line_length = 1, + animation_speed = 1, + scale = 0.5 + }), + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/chamber-h-glow.png", + priority = "high", + width = 512, + height = 256, + frame_count = 1, + line_length = 1, + animation_speed = 1, + scale = 0.5, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/chamber-h-shadow.png", + priority = "high", + width = 578, + height = 250, + frame_count = 1, + line_length = 1, + animation_speed = 1, + scale = 0.5, + shift = util.by_pixel(17, 1), + }), + }, + }, + west = { + layers = + { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/chamber-h.png", + priority = "high", + width = 512, + height = 256, + frame_count = 1, + line_length = 1, + animation_speed = 1, + scale = 0.5 + }), + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/chamber-h-glow.png", + priority = "high", + width = 512, + height = 256, + frame_count = 1, + line_length = 1, + animation_speed = 1, + scale = 0.5, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/chamber-h-shadow.png", + priority = "high", + width = 578, + height = 250, + frame_count = 1, + line_length = 1, + animation_speed = 1, + scale = 0.5, + shift = util.by_pixel(17, 1), + }), + }, + }, + north = { + layers = + { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/chamber-v.png", + priority = "high", + width = 256, + height = 576, + frame_count = 1, + line_length = 1, + animation_speed = 1, + shift = {0, -0.5}, + scale = 0.5 + }), + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/chamber-v-glow.png", + priority = "high", + width = 256, + height = 576, + frame_count = 1, + line_length = 1, + animation_speed = 1, + shift = {0, -0.5}, + scale = 0.5 + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/chamber-v-shadow.png", + priority = "high", + width = 260, + height = 562, + frame_count = 1, + line_length = 1, + animation_speed = 1, + scale = 0.5, + shift = util.by_pixel(2, -8), + }), + }, + }, + south = { + layers = + { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/chamber-v.png", + priority = "high", + width = 256, + height = 576, + frame_count = 1, + line_length = 1, + animation_speed = 1, + shift = {0, -0.5}, + scale = 0.5 + }), + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/chamber-v-glow.png", + priority = "high", + width = 256, + height = 576, + frame_count = 1, + line_length = 1, + animation_speed = 1, + shift = {0, -0.5}, + scale = 0.5 + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/chamber-v-shadow.png", + priority = "high", + width = 260, + height = 562, + frame_count = 1, + line_length = 1, + animation_speed = 1, + scale = 0.5, + shift = util.by_pixel(2, -8), + }), + }, + }, + }, + corpse = "medium-remnants", + energy_source = { + type = "electric", + usage_priority = "secondary-input", + buffer_capacity = "1GJ", + }, + energy_consumption = "100MW", + energy_usage = "100MW", + flags = { + "placeable-player", + "player-creation", + }, + max_health = 5000, + vehicle_impact_sound = { + filename = "__base__/sound/car-metal-impact.ogg", + volume = 0.65 + }, + crafting_speed = 1, + crafting_categories = {"fixed-recipe"}, + working_sound = { + apparent_volume = 1.5, + fade_in_ticks = 10, + fade_out_ticks = 30, + max_sounds_per_type = 3, + sound = { + { + filename = "__base__/sound/nuclear-reactor-1.ogg", + volume = 0.6 + }, + { + filename = "__base__/sound/nuclear-reactor-2.ogg", + volume = 0.6 + } + } + }, + --light = {intensity = 1, size = 8, shift = {0.0, 0.0}, color = {r = 0.6, g = 0.9, b = 1}} + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "energy-transmitter-chamber-addon-left", + flags = {"placeable-off-grid"}, + collision_mask = {}, + collision_box = {{-0.1,-0.1},{0.1,0.1}}, + picture = { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/chamber-v-west.png", + priority = "high", + width = 128, + height = 224, + frame_count = 1, + line_length = 1, + animation_speed = 1, + shift = {0, -0.25}, + scale = 0.5 + }), + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/chamber-v-west-glow.png", + priority = "high", + width = 128, + height = 224, + frame_count = 1, + line_length = 1, + animation_speed = 1, + shift = {0, -0.25}, + scale = 0.5 + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/chamber-v-west-shadow.png", + priority = "high", + width = 20, + height = 84, + frame_count = 1, + line_length = 1, + animation_speed = 1, + scale = 0.5, + shift = util.by_pixel(32, 0), + }), + } + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "energy-transmitter-chamber-addon-top", + flags = {"placeable-off-grid"}, + collision_mask = {}, + collision_box = {{-0.1,-0.1},{0.1,0.1}}, + picture = { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/chamber-h-north.png", + priority = "high", + width = 192, + height = 160, + frame_count = 1, + line_length = 1, + animation_speed = 1, + shift = {0, -2.25}, + scale = 0.5 + }), + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/chamber-h-north-glow.png", + priority = "high", + width = 192, + height = 160, + frame_count = 1, + line_length = 1, + animation_speed = 1, + shift = {0, -2.25}, + scale = 0.5 + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/chamber-h-north-shadow.png", + priority = "high", + width = 116, + height = 74, + frame_count = 1, + line_length = 1, + animation_speed = 1, + scale = 0.5, + shift = util.by_pixel(32, 0), + }), + } + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "energy-transmitter-chamber-addon-right", + flags = {"placeable-off-grid"}, + collision_mask = {}, + collision_box = {{-0.1,-0.1},{0.1,0.1}}, + picture = { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/chamber-v-east.png", + priority = "high", + width = 128, + height = 224, + frame_count = 1, + line_length = 1, + animation_speed = 1, + shift = {0, -0.25}, + scale = 0.5 + }), + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/chamber-v-east-glow.png", + priority = "high", + width = 128, + height = 224, + frame_count = 1, + line_length = 1, + animation_speed = 1, + shift = {0, -0.25}, + scale = 0.5 + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/chamber-v-east-shadow.png", + priority = "high", + width = 90, + height = 84, + frame_count = 1, + line_length = 1, + animation_speed = 1, + scale = 0.5, + shift = util.by_pixel(32, 0), + }), + } + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "energy-transmitter-chamber-addon-bottom", + flags = {"placeable-off-grid"}, + collision_mask = {}, + collision_box = {{-0.1,-0.1},{0.1,0.1}}, + picture = { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/chamber-h-south.png", + priority = "high", + width = 192, + height = 192, + frame_count = 1, + line_length = 1, + animation_speed = 1, + shift = {0, -0.5}, + scale = 0.5 + }), + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/chamber-h-south-glow.png", + priority = "high", + width = 192, + height = 192, + frame_count = 1, + line_length = 1, + animation_speed = 1, + shift = {0, -0.5}, + scale = 0.5 + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/chamber-h-south-shadow.png", + priority = "high", + width = 114, + height = 22, + frame_count = 1, + line_length = 1, + animation_speed = 1, + scale = 0.5, + shift = util.by_pixel(32, 32), + }), + } + } + }, + { + type = "assembling-machine", + name = data_util.mod_prefix .. "energy-transmitter-injector", + icon = "__space-exploration-graphics__/graphics/icons/energy-transmitter-injector.png", + icon_size = 64, + minable = {mining_time = 0.1, result = data_util.mod_prefix .. "energy-transmitter-injector"}, + fixed_recipe = data_util.mod_prefix .. "energy-transmitter-injector-fixed", + order = "a-c", + allow_copy_paste = true, + collision_box = data_util.auto_box(3, 5, 0.2), + selection_box = data_util.auto_box(3, 5), + collision_mask = { + "water-tile", + "item-layer", + "object-layer", + "player-layer", + spaceship_collision_layer, + }, + se_allow_in_space = true, + fluid_boxes = { + { + base_area = 1, + base_level = 0, + height = 1, + pipe_connections = { + { + position = { 0, -3 }, + type = "output" + }, + }, + production_type = "output" + }, + }, + animation = + { + east = { + layers = + { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/injector-east.png", + priority = "high", + width = 352, + height = 224, + frame_count = 1, + line_length = 1, + animation_speed = 1, + shift = {-0.25, -0.25}, + scale = 0.5 + }), + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/injector-east-glow.png", + priority = "high", + width = 352, + height = 224, + frame_count = 1, + line_length = 1, + shift = {-0.25, -0.25}, + animation_speed = 1, + scale = 0.5 + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/injector-east-shadow.png", + priority = "high", + width = 394, + height = 186, + frame_count = 1, + line_length = 1, + animation_speed = 1, + scale = 0.5, + shift = util.by_pixel(22, -3), + }), + }, + }, + west = { + layers = + { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/injector-west.png", + priority = "high", + width = 352, + height = 224, + frame_count = 1, + line_length = 1, + animation_speed = 1, + shift = {0.25, -0.25}, + scale = 0.5 + }), + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/injector-west-glow.png", + priority = "high", + width = 352, + height = 224, + frame_count = 1, + line_length = 1, + animation_speed = 1, + shift = {0.25, -0.25}, + scale = 0.5 + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/injector-west-shadow.png", + priority = "high", + width = 414, + height = 184, + frame_count = 1, + line_length = 1, + animation_speed = 1, + scale = 0.5, + shift = util.by_pixel(24, -4), + }), + }, + }, + north = { + layers = + { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/injector-north.png", + priority = "high", + width = 192, + height = 352, + frame_count = 1, + line_length = 1, + animation_speed = 1, + shift = {0, -0.2}, + scale = 0.5 + }), + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/injector-north-glow.png", + priority = "high", + width = 192, + height = 352, + frame_count = 1, + line_length = 1, + animation_speed = 1, + shift = {0, -0.25}, + scale = 0.5 + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/injector-north-shadow.png", + priority = "high", + width = 250, + height = 348, + frame_count = 1, + line_length = 1, + animation_speed = 1, + scale = 0.5, + shift = util.by_pixel(14, -6), + }), + }, + }, + south = { + layers = + { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/injector-south.png", + priority = "high", + width = 192, + height = 384, + frame_count = 1, + line_length = 1, + animation_speed = 1, + scale = 0.5 + }), + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/injector-south-glow.png", + priority = "high", + width = 192, + height = 384, + frame_count = 1, + line_length = 1, + animation_speed = 1, + scale = 0.5 + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/injector-south-shadow.png", + priority = "high", + width = 250, + height = 356, + frame_count = 1, + line_length = 1, + animation_speed = 1, + scale = 0.5, + shift = util.by_pixel(15, 1), + }), + }, + }, + }, + corpse = "medium-remnants", + energy_source = { + type = "void", + buffer_capacity = "10GJ", + usage_priority = "secondary-input", + input_flow_limit = "1GW", + }, + energy_usage = "1MW", + flags = { + "placeable-player", + "player-creation", + }, + max_health = 5000, + vehicle_impact_sound = { + filename = "__base__/sound/car-metal-impact.ogg", + volume = 0.65 + }, + crafting_speed = 1, + crafting_categories = {"fixed-recipe"}, + working_sound = { + apparent_volume = 1.5, + fade_in_ticks = 10, + fade_out_ticks = 30, + max_sounds_per_type = 3, + sound = { + { + filename = "__base__/sound/nuclear-reactor-1.ogg", + volume = 0.6 + }, + { + filename = "__base__/sound/nuclear-reactor-2.ogg", + volume = 0.6 + } + } + }, + --light = {intensity = 1, size = 8, shift = {0.0, 0.0}, color = {r = 0.6, g = 0.9, b = 1}} + }, + { + type = "reactor", + name = data_util.mod_prefix .. "energy-transmitter-injector-reactor", + icon = "__space-exploration-graphics__/graphics/icons/energy-transmitter-injector.png", + icon_size = 64, + fixed_recipe = data_util.mod_prefix .. "energy-transmitter-injector-fixed", + order = "a-c-b", + allow_copy_paste = true, + collision_box = data_util.auto_box(3, 3, 0.2), + selection_box = data_util.auto_box(3, 3), + collision_mask = {}, + se_allow_in_space = true, + heat_buffer = + { + max_temperature = 100000, + specific_heat = specific_heat, + max_transfer = "100GW", + connections = + { + }, + heat_picture = blank, + heat_glow = blank, + }, + energy_source = { + type = "electric", + buffer_capacity = "10GJ", + usage_priority = "secondary-input", + input_flow_limit = "1GW", + }, + neighbour_bonus = 0, + energy_usage = "1MW", + consumption = "1GW", + working_light_picture = blank, + animation = blank, + corpse = "medium-remnants", + flags = { + "placeable-player", + "player-creation", + }, + max_health = 5000, + vehicle_impact_sound = { + filename = "__base__/sound/car-metal-impact.ogg", + volume = 0.65 + }, + crafting_speed = 1, + crafting_categories = {"fixed-recipe"}, + working_sound = { + apparent_volume = 1.5, + fade_in_ticks = 10, + fade_out_ticks = 30, + max_sounds_per_type = 3, + sound = { + { + filename = "__base__/sound/nuclear-reactor-1.ogg", + volume = 0.6 + }, + { + filename = "__base__/sound/nuclear-reactor-2.ogg", + volume = 0.6 + } + } + }, + --light = {intensity = 1, size = 8, shift = {0.0, 0.0}, color = {r = 0.6, g = 0.9, b = 1}} + }, + + { + type = "simple-entity", + name = data_util.mod_prefix .. "energy-transmitter-injector-addon", + flags = {"placeable-off-grid"}, + collision_mask = {}, + collision_box = {{-0.1,-0.1},{0.1,0.1}}, + render_layer = "higher-object-under", + pictures = { + { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/injector-north-addon.png", + priority = "high", + width = 64, + height = 192, + frame_count = 1, + line_length = 1, + animation_speed = 1, + shift = {0, -1}, + scale = 0.5 + }), + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/injector-north-addon-glow.png", + priority = "high", + width = 64, + height = 192, + frame_count = 1, + line_length = 1, + animation_speed = 1, + shift = {0, -1}, + scale = 0.5 + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/injector-north-addon-shadow.png", + priority = "high", + width = 128, + height = 138, + frame_count = 1, + line_length = 1, + animation_speed = 1, + scale = 0.5, + shift = util.by_pixel(32, 0), + }), + } + }, + { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/injector-east-addon.png", + priority = "high", + width = 96, + height = 96, + frame_count = 1, + line_length = 1, + animation_speed = 1, + shift = {0.75, -0.25}, + scale = 0.5 + }), + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/injector-east-addon-glow.png", + priority = "high", + width = 96, + height = 96, + frame_count = 1, + line_length = 1, + animation_speed = 1, + shift = {0.75, -0.25}, + scale = 0.5 + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/injector-east-addon-shadow.png", + priority = "high", + width = 24, + height = 54, + frame_count = 1, + line_length = 1, + animation_speed = 1, + scale = 0.5, + shift = util.by_pixel(32, 0), + }), + } + }, + { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/injector-south-addon.png", + priority = "high", + width = 64, + height = 128, + frame_count = 1, + line_length = 1, + animation_speed = 1, + shift = {0, 0.5}, + scale = 0.5 + }), + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/injector-south-addon-glow.png", + priority = "high", + width = 64, + height = 128, + frame_count = 1, + line_length = 1, + animation_speed = 1, + shift = {0, 0.5}, + scale = 0.5 + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/injector-south-addon-shadow.png", + priority = "high", + width = 96, + height = 148, + frame_count = 1, + line_length = 1, + animation_speed = 1, + scale = 0.5, + shift = util.by_pixel(32, 0), + }), + } + }, + { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/injector-west-addon.png", + priority = "high", + width = 96, + height = 96, + frame_count = 1, + line_length = 1, + animation_speed = 1, + shift = {-0.75, -0.25}, + scale = 0.5 + }), + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/injector-west-addon-glow.png", + priority = "high", + width = 96, + height = 96, + frame_count = 1, + line_length = 1, + animation_speed = 1, + shift = {-0.75, -0.25}, + scale = 0.5 + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/injector-west-addon-shadow.png", + priority = "high", + width = 80, + height = 68, + frame_count = 1, + line_length = 1, + animation_speed = 1, + scale = 0.5, + shift = util.by_pixel(32, 0), + }), + } + }, + } + }, + { + type = "reactor", + name = data_util.mod_prefix .. "energy-receiver", + icon = "__space-exploration-graphics__/graphics/icons/energy-receiver.png", + icon_size = 64, + minable = {mining_time = 0.2, result = data_util.mod_prefix .. "energy-receiver"}, + flags = {"placeable-neutral", "player-creation"}, + max_health = 1000, + corpse = "medium-remnants", + consumption = "1W", + neighbour_bonus = 0, + energy_source = + { + type = "void", + }, + collision_box = data_util.auto_box(13, 13, 0.2), + selection_box = data_util.auto_box(13, 13), + --the collision box of a reactor is increased by this on the sides where it connects to another reactor: + --neighbour_collision_increase = 0.25, + lower_layer_picture = + { + filename = "__base__/graphics/entity/nuclear-reactor/reactor-pipes.png", + width = 156, + height = 156, + shift = util.by_pixel(-2, -4), + tint = pipe_tint, + hr_version = + { + filename = "__base__/graphics/entity/nuclear-reactor/hr-reactor-pipes.png", + width = 320, + height = 316, + scale = 0.5, + shift = util.by_pixel(-1, -5), + tint = pipe_tint, + } + }, + heat_lower_layer_picture = + { + filename = "__base__/graphics/entity/nuclear-reactor/reactor-pipes-heated.png", + width = 156, + height = 156, + shift = util.by_pixel(-3, -4), + tint = glow_tint, + blend_mode = "additive", + hr_version = + { + filename = "__base__/graphics/entity/nuclear-reactor/hr-reactor-pipes-heated.png", + width = 320, + height = 316, + scale = 0.5, + shift = util.by_pixel(-0.5, -4.5), + tint = glow_tint, + } + }, + + picture = + { + layers = + { + { + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/sr/receiver.png", + priority = "high", + width = 832/2, + height = 896/2, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, -16), + animation_speed = 1, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/receiver.png", + priority = "high", + width = 832, + height = 896, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, -16), + animation_speed = 1, + scale = 0.5, + } + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/sr/receiver-mask.png", + priority = "high", + width = 832/2, + height = 896/2, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, -16), + animation_speed = 1, + tint = {r=178, g=160, b=76}, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/receiver-mask.png", + priority = "high", + width = 832, + height = 896, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, -16), + animation_speed = 1, + tint = {r=178, g=160, b=76}, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/sr/receiver-shadow.png", + priority = "high", + width = 1214/2, + height = 820/2, + frame_count = 1, + line_length = 1, + repeat_count = 1, + shift = util.by_pixel(32*3+8, 4), + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/receiver-shadow.png", + priority = "high", + width = 1214, + height = 820, + frame_count = 1, + line_length = 1, + repeat_count = 1, + shift = util.by_pixel(32*3+8, 4), + scale = 0.5, + } + }, + }, + }, + + working_light_picture = blank, + + + light = {intensity = 1, size = 18, shift = {0.0, 0.0}, color = {r = 1, g = 0.6, b = 0.1}}, + + heat_buffer = + { + max_temperature = 10000, + specific_heat = specific_heat, + max_transfer = "1000GJ", + connections = + { + { + position = {5, 6}, + direction = defines.direction.south + }, + { + position = {6, 5}, + direction = defines.direction.east + }, + { + position = {5, -6}, + direction = defines.direction.north + }, + { + position = {6, -5}, + direction = defines.direction.east + }, + { + position = {-5, 6}, + direction = defines.direction.south + }, + { + position = {-6, 5}, + direction = defines.direction.west + }, + { + position = {-5, -6}, + direction = defines.direction.north + }, + { + position = {-6, -5}, + direction = defines.direction.west + }, + { + position = {0, -6}, + direction = defines.direction.north + }, + { + position = {6, 0}, + direction = defines.direction.east + }, + { + position = {0, 6}, + direction = defines.direction.south + }, + { + position = {-6, 0}, + direction = defines.direction.west + }, + }, + + heat_picture = + { + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/sr/receiver-glow.png", + priority = "high", + width = 832/2, + height = 896/2, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, -16), + animation_speed = 1, + blend_mode = "additive", + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/receiver-glow.png", + priority = "high", + width = 832, + height = 896, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, -16), + animation_speed = 1, + blend_mode = "additive", + scale = 0.5, + } + }, + heat_glow = + { + filename = "__base__/graphics/entity/nuclear-reactor/reactor-heat-glow.png", + priority = "extra-high", + width = 188, + height = 190, + shift = util.by_pixel(-2, -4), + tint = glow_tint, + } + }, + + connection_patches_connected = + { + sheet = + { + filename = "__base__/graphics/entity/nuclear-reactor/reactor-connect-patches.png", + width = 32, + height = 32, + variation_count = 12, + tint = pipe_tint, + hr_version = + { + filename = "__base__/graphics/entity/nuclear-reactor/hr-reactor-connect-patches.png", + width = 64, + height = 64, + variation_count = 12, + scale = 0.5, + tint = pipe_tint, + } + } + }, + + connection_patches_disconnected = + { + sheet = + { + filename = "__base__/graphics/entity/nuclear-reactor/reactor-connect-patches.png", + width = 32, + height = 32, + variation_count = 12, + y = 32, + tint = pipe_tint, + hr_version = + { + filename = "__base__/graphics/entity/nuclear-reactor/hr-reactor-connect-patches.png", + width = 64, + height = 64, + variation_count = 12, + y = 64, + scale = 0.5, + tint = pipe_tint, + } + } + }, + + connection_patches = + { + north = + { + filename = "__base__/graphics/entity/nuclear-reactor/connection-patch-north.png", + width = 160, + height = 15, + shift = util.by_pixel(0, -72.5), + tint = pipe_tint, + }, + east = + { + filename = "__base__/graphics/entity/nuclear-reactor/connection-patch-east.png", + width = 15, + height = 160, + shift = util.by_pixel(72.5, 0) + }, + south = + { + filename = "__base__/graphics/entity/nuclear-reactor/connection-patch-south.png", + width = 160, + height = 15, + shift = util.by_pixel(0, 72.5) + }, + west = + { + filename = "__base__/graphics/entity/nuclear-reactor/connection-patch-west.png", + width = 15, + height = 160, + shift = util.by_pixel(-72.5, 0) + } + }, + + heat_connection_patches_connected = + { + sheet = + { + filename = "__base__/graphics/entity/nuclear-reactor/reactor-connect-patches-heated.png", + width = 32, + height = 32, + variation_count = 12, + tint = glow_tint, + hr_version = + { + filename = "__base__/graphics/entity/nuclear-reactor/hr-reactor-connect-patches-heated.png", + width = 64, + height = 64, + variation_count = 12, + scale = 0.5, + tint = glow_tint, + } + } + }, + + heat_connection_patches_disconnected = + { + sheet = + { + filename = "__base__/graphics/entity/nuclear-reactor/reactor-connect-patches-heated.png", + width = 32, + height = 32, + variation_count = 12, + y = 32, + tint = glow_tint, + hr_version = + { + filename = "__base__/graphics/entity/nuclear-reactor/hr-reactor-connect-patches-heated.png", + width = 64, + height = 64, + variation_count = 12, + y = 64, + scale = 0.5, + tint = glow_tint, + } + } + }, + + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65}, + + meltdown_action = + { + type = "direct", + action_delivery = + { + type = "instant", + target_effects = + { + { + repeat_count = 100, + type = "create-trivial-smoke", + smoke_name = "nuclear-smoke", + offset_deviation = {{-1, -1}, {1, 1}}, + starting_frame = 3, + starting_frame_deviation = 5, + starting_frame_speed = 0, + starting_frame_speed_deviation = 5, + speed_from_center = 0.5 + }, + { + type = "create-entity", + entity_name = "explosion" + }, + { + type = "damage", + damage = {amount = 400, type = "explosion"} + }, + { + type = "create-entity", + entity_name = "small-scorchmark", + check_buildability = true + }, + { + type = "nested-result", + action = + { + type = "area", + target_entities = false, + trigger_from_target = true, + repeat_count = 2000, + radius = 35, + action_delivery = + { + type = "projectile", + projectile = "atomic-bomb-wave", + starting_speed = 0.5 + } + } + } + } + } + } + }, + + { + type = "projectile", + name = data_util.mod_prefix .. "energy-transmitter-beam", + direction_only = false, + flags = { "not-on-map", "placeable-off-grid" }, + acceleration = 0, + collision_mask = {"not-colliding-with-itself"}, + light = {intensity = 1, size = 8, shift = {0.0, 0.0}, color = {r = 0.6, g = 0.9, b = 1}}, + working_sound = { + apparent_volume = 1.5, + fade_in_ticks = 10, + fade_out_ticks = 30, + max_sounds_per_type = 3, + sound = { + { + filename = "__base__/sound/nuclear-reactor-1.ogg", + volume = 0.6 + }, + { + filename = "__base__/sound/nuclear-reactor-2.ogg", + volume = 0.6 + } + } + }, + animation = { + layers = { + { + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/sr/energy-transmitter-light.png", + priority = "high", + width = 576/2, + height = 640/2, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, -1 * 32 -9 ), + animation_speed = 1, + apply_runtime_tint = true, --"additive-soft" + scale = 1*10/9, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/energy-transmitter-light.png", + priority = "high", + width = 576, + height = 640, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, -1 * 32 -9 ), + animation_speed = 1, + scale = 0.5*10/9, + apply_runtime_tint = true, --"additive-soft" + } + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/sr/energy-transmitter-skybeam.png", + priority = "high", + width = 316/2, + height = 2392/2, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, -21 * 32 -11), + animation_speed = 1, + apply_runtime_tint = true, + blend_mode = "additive-soft", + scale = 10/9, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/energy-transmitter-skybeam.png", + priority = "high", + width = 316, + height = 2392, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, -21 * 32 -11), + animation_speed = 1, + scale = 10/9/2, + apply_runtime_tint = true, + blend_mode = "additive-soft", + } + }, + } + }, + }, + + { + type = "projectile", + name = data_util.mod_prefix .. "energy-receiver-beam", + direction_only = false, + flags = { "not-on-map", "placeable-off-grid" }, + acceleration = 0, + rotatable = false, + collision_mask = {"not-colliding-with-itself"}, + light = {intensity = 1, size = 8, shift = {0.0, 0.0}, color = {r = 0.6, g = 0.9, b = 1}}, + working_sound = { + apparent_volume = 1.5, + fade_in_ticks = 10, + fade_out_ticks = 30, + max_sounds_per_type = 3, + sound = { + { + filename = "__base__/sound/nuclear-reactor-1.ogg", + volume = 0.6 + }, + { + filename = "__base__/sound/nuclear-reactor-2.ogg", + volume = 0.6 + } + } + }, + animation = { + layers = { + { + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/sr/receiver-beam.png", + priority = "high", + width = 512/2, + height = 1088/2, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, -3 * 32 -17), + animation_speed = 1, + apply_runtime_tint = true, + blend_mode = "additive", + scale = 1, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/receiver-beam.png", + priority = "high", + width = 512, + height = 1088, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, -3 * 32 -17), + animation_speed = 1, + scale = 0.5, + apply_runtime_tint = true, + blend_mode = "additive", + } + }, + } + }, + }, + + { + type = "projectile", + name = data_util.mod_prefix .. "energy-glaive-beam", + direction_only = false, + flags = { "not-on-map", "placeable-off-grid" }, + acceleration = 0, + rotatable = false, + collision_mask = {"not-colliding-with-itself"}, + light = {intensity = 1, size = 8, shift = {0.0, 0.0}, color = {r = 0.6, g = 0.9, b = 1}}, + working_sound = { + apparent_volume = 1.5, + fade_in_ticks = 10, + fade_out_ticks = 30, + max_sounds_per_type = 3, + sound = { + { + filename = "__base__/sound/nuclear-reactor-1.ogg", + volume = 0.6 + }, + { + filename = "__base__/sound/nuclear-reactor-2.ogg", + volume = 0.6 + } + } + }, + animation = blank + }, + { + type = "sprite", + name = data_util.mod_prefix .. "energy-glaive-beam-sprite", + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/sr/glaive-beam.png", + priority = "high", + width = 454/2, + height = 1172/2, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, -12 * 32 -11), + animation_speed = 1, + apply_runtime_tint = true, + blend_mode = "additive", + scale = 2, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/glaive-beam.png", + priority = "high", + width = 454, + height = 1172, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, -12 * 32 -11), + animation_speed = 1, + scale = 1, + apply_runtime_tint = true, + blend_mode = "additive", + } + }, + + { + type = "explosion", + name = data_util.mod_prefix .. "energy-glaive-path-fx", + animations = blank, + + created_effect = { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + { + check_buildability = true, + entity_name = "small-scorchmark", + type = "create-entity" + }, + }, + }, + }, + flags = { "not-on-map", "placeable-off-grid" }, + }, + + { + type = "explosion", + name = data_util.mod_prefix .. "energy-glaive-damage-aoe", + animations = blank, + + created_effect = { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + { + type = "nested-result", + action = { + type = "area", + radius = 2, + action_delivery = { + type = "instant", + target_effects = { + { type = "damage", damage = { amount = 10, type = "laser" }}, + { type = "damage", damage = { amount = 10, type = "explosion" }}, + } + }, + } + }, + { + type = "nested-result", + action = { + type = "area", + radius = 4, + action_delivery = { + type = "instant", + target_effects = { + { type = "damage", damage = { amount = 10, type = "laser" }}, + { type = "damage", damage = { amount = 10, type = "fire" }}, + } + }, + } + }, + { + type = "nested-result", + action = { + type = "area", + radius = 8, + action_delivery = { + type = "instant", + target_effects = { + { type = "damage", damage = { amount = 5, type = "laser" }, apply_damage_to_trees = false}, + { type = "damage", damage = { amount = 10, type = "fire" }, apply_damage_to_trees = false}, + } + }, + } + }, + { + type = "nested-result", + action = { + type = "area", + radius = 12, + action_delivery = { + type = "instant", + target_effects = { + { type = "damage", damage = { amount = 1, type = "laser" }, apply_damage_to_trees = false}, + { type = "damage", damage = { amount = 5, type = "fire" }, apply_damage_to_trees = false}, + { + type = "create-sticker", + sticker = "fire-sticker", + } + } + }, + } + }, + { + type = "nested-result", + action = { + type = "area", + radius = 16, + action_delivery = { + type = "instant", + target_effects = { + { type = "damage", damage = { amount = 2, type = "fire" }, apply_damage_to_trees = false}, + } + }, + } + }, + { -- tree fires + type = "nested-result", + action = { + type = "area", + radius = 8, + trigger_target_mask = {"flammable"}, + action_delivery = { + type = "instant", + target_effects = { + { type = "damage", damage = { amount = 100, type = "fire" }}, + { type = "create-entity", entity_name = data_util.mod_prefix .. "tree-fire-starter" } + } + }, + } + }, + }, + }, + }, + flags = { "not-on-map", "placeable-off-grid"}, + }, + + { + type = "explosion", + name = data_util.mod_prefix .. "energy-glaive-damage-aoe-large", + animations = blank, + + created_effect = { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + { + type = "nested-result", + action = { + type = "area", + radius = 4, + action_delivery = { + type = "instant", + target_effects = { + { type = "damage", damage = { amount = 10, type = "laser" }}, + { type = "damage", damage = { amount = 10, type = "explosion" }}, + } + }, + } + }, + { + type = "nested-result", + action = { + type = "area", + radius = 8, + action_delivery = { + type = "instant", + target_effects = { + { type = "damage", damage = { amount = 10, type = "laser" }, apply_damage_to_trees = false}, + { type = "damage", damage = { amount = 10, type = "fire" }, apply_damage_to_trees = false}, + } + }, + } + }, + { + type = "nested-result", + action = { + type = "area", + radius = 16, + action_delivery = { + type = "instant", + target_effects = { + { type = "damage", damage = { amount = 5, type = "laser" }, apply_damage_to_trees = false}, + { type = "damage", damage = { amount = 10, type = "fire" }, apply_damage_to_trees = false}, + } + }, + } + }, + { + type = "nested-result", + action = { + type = "area", + radius = 24, + action_delivery = { + type = "instant", + target_effects = { + { type = "damage", damage = { amount = 1, type = "laser" }, apply_damage_to_trees = false}, + { type = "damage", damage = { amount = 5, type = "fire" }, apply_damage_to_trees = false}, + { + type = "create-sticker", + sticker = "fire-sticker", + } + } + }, + } + }, + { + type = "nested-result", + action = { + type = "area", + radius = 32, + action_delivery = { + type = "instant", + target_effects = { + { type = "damage", damage = { amount = 2, type = "fire" }, apply_damage_to_trees = false}, + } + }, + } + }, + { -- tree fires + type = "nested-result", + action = { + type = "area", + radius = 8, + trigger_target_mask = {"flammable"}, + action_delivery = { + type = "instant", + target_effects = { + { type = "damage", damage = { amount = 100, type = "fire" }}, + { type = "create-entity", entity_name = data_util.mod_prefix .. "tree-fire-starter" } + } + }, + } + }, + + }, + }, + }, + flags = { "not-on-map", "placeable-off-grid"}, + }, + + { + type = "explosion", + name = data_util.mod_prefix .. "energy-glaive-damage-aoe-large-10", + animations = blank, + + created_effect = { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + { + type = "nested-result", + action = { + type = "area", + radius = 4, + action_delivery = { + type = "instant", + target_effects = { + { type = "damage", damage = { amount = 100, type = "laser" }}, + { type = "damage", damage = { amount = 100, type = "explosion" }}, + } + }, + } + }, + { + type = "nested-result", + action = { + type = "area", + radius = 8, + action_delivery = { + type = "instant", + target_effects = { + { type = "damage", damage = { amount = 100, type = "laser" }, apply_damage_to_trees = false}, + { type = "damage", damage = { amount = 100, type = "fire" }, apply_damage_to_trees = false}, + } + }, + } + }, + { + type = "nested-result", + action = { + type = "area", + radius = 16, + action_delivery = { + type = "instant", + target_effects = { + { type = "damage", damage = { amount = 50, type = "laser" }, apply_damage_to_trees = false}, + { type = "damage", damage = { amount = 100, type = "fire" }, apply_damage_to_trees = false}, + } + }, + } + }, + { + type = "nested-result", + action = { + type = "area", + radius = 24, + action_delivery = { + type = "instant", + target_effects = { + { type = "damage", damage = { amount = 10, type = "laser" }, apply_damage_to_trees = false}, + { type = "damage", damage = { amount = 50, type = "fire" }, apply_damage_to_trees = false}, + { + type = "create-sticker", + sticker = "fire-sticker", + } + } + }, + } + }, + { + type = "nested-result", + action = { + type = "area", + radius = 32, + action_delivery = { + type = "instant", + target_effects = { + { type = "damage", damage = { amount = 20, type = "fire" }, apply_damage_to_trees = false}, + } + }, + } + }, + { -- tree fires + type = "nested-result", + action = { + type = "area", + radius = 8, + trigger_target_mask = {"flammable"}, + action_delivery = { + type = "instant", + target_effects = { + { type = "damage", damage = { amount = 100, type = "fire" }}, + { type = "create-entity", entity_name = data_util.mod_prefix .. "tree-fire-starter" } + } + }, + } + }, + + }, + }, + }, + flags = { "not-on-map", "placeable-off-grid"}, + }, + + + { + type = "projectile", + name = data_util.mod_prefix .. "energy-glaive-damage-projectile", + acceleration = -0.01, + action = { + action_delivery = { + target_effects = { + { + type = "damage", + damage = { + amount = 10, + type = "fire" + }, + }, + { + type = "damage", + damage = { + amount = 5, + type = "laser" + }, + }, + { + type = "create-sticker", + sticker = "fire-sticker", + } + }, + type = "instant" + }, + type = "direct" + }, + animation = { + filename = "__base__/graphics/entity/bullet/bullet.png", + frame_count = 1, + height = 50, + priority = "high", + width = 3, + scale = 1.5, + tint = {r = 255/255, g = 100/255, b = 38/255}, + blend_mode = "additive" + }, + collision_box = { + { + -0.25, + -0.25 + }, + { + 0.25, + 0.25 + } + }, + flags = { + "not-on-map" + }, + }, + +}) + + + + +data:extend({ + { + type = "technology", + name = data_util.mod_prefix .. "energy-beam-defence", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "energy-beam-defence" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/energy-beam-defence.png", + icon_size = 128, + order = "e-a", + prerequisites = { + data_util.mod_prefix .. "meteor-defence", + }, + unit = { + count = 500, + time = 30, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + } + }, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "energy-beam-defence", + result = data_util.mod_prefix .. "energy-beam-defence", + enabled = false, + energy_required = 10, + ingredients = { + { "glass", 200 }, + { "copper-plate", 200 }, + { "steel-plate", 200 }, + { "concrete", 200 }, + { "battery", 100 }, + { "processing-unit", 100 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "item", + name = data_util.mod_prefix .. "energy-beam-defence", + icon = "__space-exploration-graphics__/graphics/icons/energy-beam-defence.png", + icon_size = 64, + order = "c-a", + subgroup = "surface-defense", + stack_size = 1, + place_result = data_util.mod_prefix .. "energy-beam-defence", + }, + { + type = "electric-energy-interface", + name = data_util.mod_prefix .. "energy-beam-defence", + icon = "__space-exploration-graphics__/graphics/icons/energy-beam-defence.png", + icon_size = 64, + minable = {mining_time = 1, result = data_util.mod_prefix .. "energy-beam-defence"}, + order = "e-a", + allow_copy_paste = true, + picture = + { + layers = + { + { + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/sr/receiver.png", + priority = "high", + width = 832/2, + height = 896/2, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, -16), + animation_speed = 1, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/receiver.png", + priority = "high", + width = 832, + height = 896, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, -16), + animation_speed = 1, + scale = 0.5, + } + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/sr/receiver-mask.png", + priority = "high", + width = 832/2, + height = 896/2, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, -16), + animation_speed = 1, + tint = {r=58, g=89, b=35}, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/receiver-mask.png", + priority = "high", + width = 832, + height = 896, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, -16), + animation_speed = 1, + tint = {r=58, g=89, b=35}, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/sr/receiver-shadow.png", + priority = "high", + width = 1214/2, + height = 820/2, + frame_count = 1, + line_length = 1, + repeat_count = 1, + shift = util.by_pixel(32*3+8, 4), + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/receiver-shadow.png", + priority = "high", + width = 1214, + height = 820, + frame_count = 1, + line_length = 1, + repeat_count = 1, + shift = util.by_pixel(32*3+8, 4), + scale = 0.5, + } + }, + }, + }, + collosion_mask = { + "water-tile", + "object-layer", + "player-layer", + "item-layer", + spaceship_collision_layer + }, + collision_box = data_util.auto_box(13, 13, 0.2), + selection_box = data_util.auto_box(13, 13), + selectable = false, + continuous_animation = true, + corpse = "medium-remnants", + energy_source = { + buffer_capacity = "1GJ", + input_flow_limit = "50GW", + output_flow_limit = "0kW", + type = "electric", + usage_priority = "primary-input" + }, + energy_production = "0kW", + energy_usage = "10MW", -- platform + 1x per lock + 1x for final energy spike final activation. + --energy_usage = "60GW", -- platform + 1x per lock + 1x for final energy spike final activation. + flags = { + "placeable-player", + "player-creation", + "hidden", + "not-rotatable" + }, + max_health = 5000, + vehicle_impact_sound = { + filename = "__base__/sound/car-metal-impact.ogg", + volume = 0.65 + }, + working_sound = { + apparent_volume = 1.5, + fade_in_ticks = 10, + fade_out_ticks = 30, + max_sounds_per_type = 3, + sound = { + { + filename = "__base__/sound/nuclear-reactor-1.ogg", + volume = 0.6 + }, + { + filename = "__base__/sound/nuclear-reactor-2.ogg", + volume = 0.6 + } + } + }, + --light = {intensity = 1, size = 8, shift = {0.0, 0.0}, color = {r = 0.6, g = 0.9, b = 1}} + }, + { + type = "sprite", + name = data_util.mod_prefix .. "energy-beam-defence-glow", + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/sr/defence-glow.png", + priority = "high", + width = 832/2, + height = 896/2, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, -16), + animation_speed = 1, + blend_mode = "additive", + apply_runtime_tint = true, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/energy-transmitter/hr/defence-glow.png", + priority = "high", + width = 832, + height = 896, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, -16), + animation_speed = 1, + blend_mode = "additive", + apply_runtime_tint = true, + scale = 0.5, + } + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/interburbulator.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/interburbulator.lua new file mode 100644 index 0000000..f6b770c --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/interburbulator.lua @@ -0,0 +1,466 @@ +local data_util = require("data_util") +--[[ +copy of shield projector, SW, SE, NE +copy of laser turret NW +interface addon graphic +interface addon display animation. +]] +local blank_image = { + filename = "__space-exploration-graphics__/graphics/blank.png", + width = 1, + height = 1, + frame_count = 1, + line_length = 1, + shift = { 0, 0 }, +} +local connection_point = { + wire = { red = {-1 -8/32, 2 +20/32}, green = {-1 -2/32, 2 +20/32}, }, + shadow = { red = {2 -8/32, 5}, green = {2 -2/32, 5}, }, +} + +local function make_spidertron_leg(number) + local leg = table.deepcopy(data.raw["spider-leg"]["spidertron-leg-"..number]) + leg.name = data_util.mod_prefix.."burbulator-leg-" .. number + leg.initial_movement_speed = 0.006 + leg.movement_acceleration = 0.003 + leg.movement_based_position_selection_distance = 2 + leg.part_length = 4 + return leg +end + +data:extend({ + { + type = "lamp", + name = data_util.mod_prefix.. "interburbulator-control", + icon = "__space-exploration-graphics__/graphics/icons/shield-projector.png", + icon_size = 64, + flags = {"placeable-player", "player-creation", "placeable-off-grid", "not-deconstructable", "not-blueprintable"}, + order = "y", + energy_source = {type = "void"}, + max_health = 10000, + healing_per_tick = 10000, + collision_box = data_util.auto_box(2, 2, 0.1), + selection_box = data_util.auto_box(2, 2), + collision_mask = {"not-colliding-with-itself"}, + energy_usage_per_tick = "1J", + always_on = true, + picture_off = blank_image, + picture_on = { + layers = { + { + filename = "__base__/graphics/entity/steel-furnace/steel-furnace.png", + frame_count = 1, + height = 87, + hr_version = { + filename = "__base__/graphics/entity/steel-furnace/hr-steel-furnace.png", + frame_count = 1, + height = 174, + priority = "high", + scale = 0.5, + shift = { + -0.0390625, + 0.0625 + }, + width = 171 + }, + priority = "high", + shift = { + -0.046875, + 0.046875 + }, + width = 85 + }, + { + draw_as_shadow = true, + filename = "__base__/graphics/entity/steel-furnace/steel-furnace-shadow.png", + frame_count = 1, + height = 43, + hr_version = { + draw_as_shadow = true, + filename = "__base__/graphics/entity/steel-furnace/hr-steel-furnace-shadow.png", + frame_count = 1, + height = 85, + priority = "high", + scale = 0.5, + shift = { + 1.2265625, + 0.3515625 + }, + width = 277 + }, + priority = "high", + shift = { + 1.234375, + 0.359375 + }, + width = 139 + } + } + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix.. "interburbulator-interface", + icon = "__space-exploration-graphics__/graphics/icons/shield-projector.png", + icon_size = 64, + flags = {"placeable-player", "player-creation", "placeable-off-grid", "not-deconstructable", "not-blueprintable"}, + order = "y", + max_health = 10000, + healing_per_tick = 10000, + collision_box = data_util.auto_box(1, 1, 0.1), + selection_box = data_util.auto_box(1, 1), + collision_mask = {"not-colliding-with-itself"}, + selectable_in_game = false, + animations = { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/robot-faction/hr/interface-addon.png", + frame_count = 1, + width = 72, + height = 82, + line_length = 1, + repeat_count = 3, + animation_speed = 0.1, + shift = { 0,0}, + scale = 0.5 + }), + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/robot-faction/hr/interface-addon-display.png", + frame_count = 3, + width = 78/3, + height = 42, + line_length = 3, + animation_speed = 0.1, + shift = { 0,-0.1}, + scale = 0.5, + belnd_mode = "additive" + }), + } + } + }, + { + type = "constant-combinator", + name = data_util.mod_prefix.. "interburbulator-projector", + icon = "__space-exploration-graphics__/graphics/icons/shield-projector.png", + icon_size = 64, + flags = {"placeable-player", "player-creation", "placeable-off-grid", "not-deconstructable", "not-blueprintable"}, + order = "y", + max_health = 10000, + healing_per_tick = 10000, + collision_box = data_util.auto_box(2, 2, 0.1), + selection_box = data_util.auto_box(2, 2), + collision_mask = {"not-colliding-with-itself"}, + scale_info_icons = false, + selectable_in_game = true, + item_slot_count = 0, + sprites = + { + north = { + layers = { + data_util.auto_sr_hr({ + filename = "__shield-projector__/graphics/entity/shield-projector/hr/shield-projector.png", + frame_count = 1, + x = 196 * 1, + width = 196, + height = 284, + line_length = 1, + shift = { 1/32, -24/32 }, + scale = 0.5 * 2/3 + }), + data_util.auto_sr_hr({ + frame_count = 1, + draw_as_shadow = true, + filename = "__shield-projector__/graphics/entity/shield-projector/hr/shield-projector-shadow.png", + x = 412 * 1, + width = 412, + height = 249, + line_length = 1, + shift = { (1 + 22/32) * 2/3, (-8/32) * 2/3}, + scale = 0.5 * 2/3 + }), + } + }, + east = { + layers = { + data_util.auto_sr_hr({ + filename = "__shield-projector__/graphics/entity/shield-projector/hr/shield-projector.png", + frame_count = 1, + x = 196 * 3, + width = 196, + height = 284, + line_length = 1, + shift = { 1/32, -24/32 }, + scale = 0.5 * 2/3 + }), + data_util.auto_sr_hr({ + frame_count = 1, + draw_as_shadow = true, + filename = "__shield-projector__/graphics/entity/shield-projector/hr/shield-projector-shadow.png", + x = 412 * 3, + width = 412, + height = 249, + line_length = 1, + shift = { (1 + 22/32) * 2/3, (-8/32) * 2/3}, + scale = 0.5 * 2/3 + }), + } + }, + south = { + layers = { + data_util.auto_sr_hr({ + filename = "__shield-projector__/graphics/entity/shield-projector/hr/shield-projector.png", + frame_count = 1, + x = 196 * 5, + width = 196, + height = 284, + line_length = 1, + shift = { 1/32, -24/32 }, + scale = 0.5 * 2/3 + }), + data_util.auto_sr_hr({ + frame_count = 1, + draw_as_shadow = true, + filename = "__shield-projector__/graphics/entity/shield-projector/hr/shield-projector-shadow.png", + x = 412 * 1, + y = 249 * 1, + width = 412, + height = 249, + line_length = 1, + shift = { (1 + 22/32) * 2/3, (-8/32) * 2/3}, + scale = 0.5 * 2/3 + }), + } + }, + west = { + layers = { + data_util.auto_sr_hr({ + filename = "__shield-projector__/graphics/entity/shield-projector/hr/shield-projector.png", + frame_count = 1, + x = 196 * 7, + width = 196, + height = 284, + line_length = 1, + shift = { 1/32, -24/32 }, + scale = 0.5 * 2/3 + }), + data_util.auto_sr_hr({ + frame_count = 1, + draw_as_shadow = true, + filename = "__shield-projector__/graphics/entity/shield-projector/hr/shield-projector-shadow.png", + x = 412 * 3, + y = 249 * 1, + width = 412, + height = 249, + line_length = 1, + shift = { (1 + 22/32) * 2/3, (-8/32) * 2/3}, + scale = 0.5 * 2/3 + }), + } + } + }, + activity_led_sprites = + { + north = blank_image, + east = blank_image, + south = blank_image, + west = blank_image + }, + activity_led_light = + { + intensity = 0.8, + size = 1, + }, + activity_led_light_offsets = + { + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0} + }, + circuit_wire_connection_points = + { + connection_point, connection_point, connection_point, connection_point, + }, + circuit_wire_max_distance = 0 + }, + { + type = "sprite", + name = data_util.mod_prefix.."interburbulator-grid", + filename = "__space-exploration-graphics__/graphics/entity/robot-faction/sr/interburbulator-grid.png", + width = 832, + height = 864, + shift = { 0,-0.5 }, + blend_mode = "additive", + scale = 1 + }, + { + type = "sprite", + name = data_util.mod_prefix.."interburbulator-light", + filename = "__space-exploration-graphics__/graphics/entity/robot-faction/sr/interburbulator-light.png", + width = 832/2, + height = 864/2, + shift = { 0,-0.5 }, + blend_mode = "additive", + scale = 2 + }, + { + type = "spider-vehicle", + name = data_util.mod_prefix.."burbulator", + collision_box = {{-1, -1}, {1, 1}}, + selection_box = {{-1, -1}, {1, 1}}, + icon = "__base__/graphics/icons/spidertron.png", + mined_sound = {filename = "__core__/sound/deconstruct-large.ogg",volume = 0.8}, + open_sound = { filename = "__base__/sound/spidertron/spidertron-door-open.ogg", volume= 0.35 }, + close_sound = { filename = "__base__/sound/spidertron/spidertron-door-close.ogg", volume = 0.4 }, + sound_minimum_speed = 0.1, + sound_scaling_ratio = 0.6, + working_sound = + { + sound = + { + filename = "__base__/sound/spidertron/spidertron-vox.ogg", + volume = 0.35 + }, + activate_sound = + { + filename = "__base__/sound/spidertron/spidertron-activate.ogg", + volume = 0.5 + }, + deactivate_sound = + { + filename = "__base__/sound/spidertron/spidertron-deactivate.ogg", + volume = 0.5 + }, + match_speed_to_activity = true, + }, + icon_size = 64, icon_mipmaps = 4, + weight = 1, + braking_force = 1, + friction_force = 1, + flags = {"placeable-neutral", "player-creation", "placeable-off-grid"}, + collision_mask = {}, + --minable = {mining_time = 1, result = "spidertron"}, + max_health = 100000, + healing_per_tick = 1000, + resistances = + { + { + type = "fire", + decrease = 15, + percent = 60 + }, + { + type = "physical", + decrease = 15, + percent = 60 + }, + { + type = "impact", + decrease = 50, + percent = 80 + }, + { + type = "explosion", + decrease = 20, + percent = 75 + }, + { + type = "acid", + decrease = 0, + percent = 70 + }, + { + type = "laser", + decrease = 0, + percent = 70 + }, + { + type = "electric", + decrease = 0, + percent = 70 + } + }, + minimap_representation = + { + filename = "__base__/graphics/entity/spidertron/spidertron-map.png", + flags = {"icon"}, + size = {128, 128}, + scale = 0.5 + }, + corpse = "spidertron-remnants", + dying_explosion = "spidertron-explosion", + energy_per_hit_point = 1, + guns = { "spidertron-rocket-launcher-1", "spidertron-rocket-launcher-2", "spidertron-rocket-launcher-3", "spidertron-rocket-launcher-4" }, + inventory_size = 80, + equipment_grid = "spidertron-equipment-grid", + height = 1.5, + torso_rotation_speed = 0.01, + chunk_exploration_radius = 3, + selection_priority = 51, + graphics_set = table.deepcopy(data.raw["spider-vehicle"].spidertron.graphics_set), + energy_source = + { + type = "void", + }, + movement_energy_consumption = "250kW", + automatic_weapon_cycling = true, + chain_shooting_cooldown_modifier = 0.5, + spider_engine = + { + legs = + { + { -- 1 + leg = data_util.mod_prefix.."burbulator-leg-1", + mount_position = util.by_pixel(15, -22),--{0.5, -0.75}, + ground_position = {2.25, -2.5}, + blocking_legs = {2}, + leg_hit_the_ground_trigger = get_leg_hit_the_ground_trigger() + }, + { -- 3 + leg = data_util.mod_prefix.."burbulator-leg-3", + mount_position = util.by_pixel(24, -3),--{0.75, 0.25}, + ground_position = {3, 1}, + blocking_legs = {1, 3}, + leg_hit_the_ground_trigger = get_leg_hit_the_ground_trigger() + }, + { -- 4 + leg = data_util.mod_prefix.."burbulator-leg-4", + mount_position = util.by_pixel(15, 17),--{0.5, 0.75}, + ground_position = {2.25, 2.5}, + blocking_legs = {2}, + leg_hit_the_ground_trigger = get_leg_hit_the_ground_trigger() + }, + { -- 5 + leg = data_util.mod_prefix.."burbulator-leg-5", + mount_position = util.by_pixel(-15, -22),--{-0.5, -0.75}, + ground_position = {-2.25, -2.5}, + blocking_legs = {5}, + leg_hit_the_ground_trigger = get_leg_hit_the_ground_trigger() + }, + { -- 7 + leg = data_util.mod_prefix.."burbulator-leg-7", + mount_position = util.by_pixel(-24, 3),--{-0.75, 0.25}, + ground_position = {-3, 1}, + blocking_legs = {4,6}, + leg_hit_the_ground_trigger = get_leg_hit_the_ground_trigger() + }, + { -- 8 + leg = data_util.mod_prefix.."burbulator-leg-8", + mount_position = util.by_pixel(-15, 17),--{-0.5, 0.75}, + ground_position = {-2.25, 2.5}, + blocking_legs = {5}, + leg_hit_the_ground_trigger = get_leg_hit_the_ground_trigger() + } + }, + military_target = "spidertron-military-target", + } + }, + make_spidertron_leg(1), + --make_spidertron_leg(2), + make_spidertron_leg(3), + make_spidertron_leg(4), + make_spidertron_leg(5), + --make_spidertron_leg(6), + make_spidertron_leg(7), + make_spidertron_leg(8), +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/iridium-piledriver.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/iridium-piledriver.lua new file mode 100644 index 0000000..6514e4f --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/iridium-piledriver.lua @@ -0,0 +1,219 @@ +local data_util = require("data_util") + +se_delivery_cannon_ammo_recipes[data_util.mod_prefix.."iridium-piledriver"] = {type = "ammo", name=data_util.mod_prefix.."iridium-piledriver", amount = 1} +table.insert(data.raw.technology[data_util.mod_prefix .. "delivery-cannon-weapon"].effects, { type = "unlock-recipe", recipe = data_util.mod_prefix .. "delivery-cannon-weapon-pack-" .. data_util.mod_prefix .. "iridium-piledriver"}) + +data:extend({ + { + type = "recipe", + name = data_util.mod_prefix .. "iridium-piledriver", + result = data_util.mod_prefix .. "iridium-piledriver", + enabled = false, + energy_required = 20, + ingredients = { + { data_util.mod_prefix .. "heavy-girder", 50 }, + { "rocket-control-unit", 1 }, + { "explosives", 10 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "ammo", + name = data_util.mod_prefix .. "iridium-piledriver", + ammo_type = { + action = { + action_delivery = { + projectile = data_util.mod_prefix .. "iridium-piledriver", + source_effects = { + entity_name = "explosion-hit", + type = "create-entity" + }, + starting_speed = 0.05, + type = "projectile" + }, + type = "direct" + }, + category = "weapons-delivery-cannon", + cooldown_modifier = 3, + range_modifier = 3, + target_type = "position" + }, + icon = "__base__/graphics/icons/cannon-shell.png", + icon_mipmaps = 4, + icon_size = 64, + order = "d[rocket-launcher]-c[atomic-bomb]", + stack_size = 1, + subgroup = "ammo", + }, + { + type = "projectile", + name = data_util.mod_prefix .. "iridium-piledriver", + acceleration = 0.005, + action = { + action_delivery = { + target_effects = { + { + action = { + action_delivery = { + target_effects = { + { + damage = { + amount = 10000, + type = "physical" + }, + type = "damage" + }, + }, + type = "instant" + }, + radius = 2, + type = "area" + }, + type = "nested-result" + }, + { + action = { + action_delivery = { + target_effects = { + { + damage = { + amount = 1000, + type = "explosion" + }, + type = "damage" + } + }, + type = "instant" + }, + radius = 4, + type = "area" + }, + type = "nested-result" + }, + { + action = { + action_delivery = { + target_effects = { + { + damage = { + amount = 500, + type = "explosion" + }, + type = "damage" + } + }, + type = "instant" + }, + radius = 8, + type = "area" + }, + type = "nested-result" + }, + { + action = { + action_delivery = { + target_effects = { + { + damage = { + amount = 200, + type = "explosion" + }, + type = "damage" + } + }, + type = "instant" + }, + radius = 16, + type = "area" + }, + type = "nested-result" + }, + { + initial_height = 0, + max_radius = 3.5, + offset_deviation = { + { + -4, + -4 + }, + { + 4, + 4 + } + }, + repeat_count = 240, + smoke_name = "artillery-smoke", + speed_from_center = 0.05, + speed_from_center_deviation = 0.005, + type = "create-trivial-smoke" + }, + { + entity_name = "big-artillery-explosion", + type = "create-entity" + }, + { + check_buildability = true, + entity_name = "small-scorchmark", + type = "create-entity" + }, + { + scale = 0.25, + type = "show-explosion-on-chart" + } + }, + type = "instant" + }, + type = "direct" + }, + animation = { + filename = "__base__/graphics/entity/rocket/rocket.png", + frame_count = 8, + height = 35, + line_length = 8, + priority = "high", + shift = { + 0, + 0 + }, + width = 9 + }, + flags = { + "not-on-map" + }, + light = { + intensity = 0.8, + size = 15 + }, + shadow = { + filename = "__base__/graphics/entity/rocket/rocket-shadow.png", + frame_count = 1, + height = 24, + priority = "high", + shift = { + 0, + 0 + }, + width = 7 + }, + smoke = { + { + deviation = { + 0.15, + 0.15 + }, + frequency = 1, + name = "smoke-fast", + position = { + 0, + 1 + }, + slow_down_factor = 1, + starting_frame = 3, + starting_frame_deviation = 5, + starting_frame_speed = 0, + starting_frame_speed_deviation = 5 + } + }, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/lifesupport.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/lifesupport.lua new file mode 100644 index 0000000..baafb94 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/lifesupport.lua @@ -0,0 +1,170 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +--[[ +Lifesupport mechanics: +Consume lifesupport canisters for food & air + +Equiment boosts the lifessuport drain efficiency, stacks additivly. +All thruster suits have some base level life support efficiency, 1 module is built-in. + +Non-thruster suits can have modules added but only function on land and efficiency banafits are halved. Only useful on hostile planets. +A spacesuit proper spacesuit is required in space. +]] + +local lifesupport_equipment_prototypes = { + ["lifesupport-equipment-1"] = { + tier = 1, grid_width = 2, grid_height = 2, power = "100kW", + ingredients = { + {"low-density-structure", 10}, + {"pipe", 10}, + {"coal", 10}, + {"electric-engine-unit", 10}, + }, + science_packs = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + }, + prerequisites = { + "battery-equipment", + data_util.mod_prefix .. "lifesupport-facility", + } + }, -- +100% efficiency + + ["lifesupport-equipment-2"] = { + tier = 2, grid_width = 2, grid_height = 2, power = "100kW", + ingredients = { + {data_util.mod_prefix .. "lifesupport-equipment-1", 1}, + {data_util.mod_prefix.."space-pipe", 10}, + {data_util.mod_prefix.."bioscrubber", 10}, + {type = "fluid", name=data_util.mod_prefix.."bio-sludge", amount = 100}, + }, + science_packs = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "biological-science-pack-1", 1 }, + }, + prerequisites = { + data_util.mod_prefix .. "lifesupport-equipment-1", + data_util.mod_prefix.."bioscrubber" + } + }, -- +200% efficiency + + ["lifesupport-equipment-3"] = { + tier = 3, grid_width = 2, grid_height = 2, power = "100kW", + ingredients = { + {data_util.mod_prefix .. "lifesupport-equipment-2", 1}, + {data_util.mod_prefix.."vitalic-reagent", 10}, + {data_util.mod_prefix.."aeroframe-bulkhead", 10}, + }, + science_packs = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "biological-science-pack-2", 1 }, + }, + prerequisites = { + data_util.mod_prefix .. "lifesupport-equipment-2", + data_util.mod_prefix.."vitalic-reagent", + data_util.mod_prefix.."aeroframe-bulkhead" + } + }, -- +400% efficiency + + ["lifesupport-equipment-4"] = { + tier = 4, grid_width = 2, grid_height = 2, power = "100kW", + ingredients = { + {data_util.mod_prefix .. "lifesupport-equipment-3", 1}, + {data_util.mod_prefix.."lattice-pressure-vessel", 10}, + {data_util.mod_prefix.."self-sealing-gel", 10}, + {data_util.mod_prefix.."naquium-tessaract", 1}, + }, + science_packs = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "biological-science-pack-4", 1 }, + { data_util.mod_prefix .. "deep-space-science-pack-2", 1 }, + }, + prerequisites = { + data_util.mod_prefix .. "lifesupport-equipment-3", + data_util.mod_prefix.."lattice-pressure-vessel", + data_util.mod_prefix.."self-sealing-gel", + data_util.mod_prefix.."naquium-tessaract", + } + }, -- +800% efficiency +} + +for name, lep in pairs(lifesupport_equipment_prototypes) do + + local lifesupport_equipment = table.deepcopy(data.raw["movement-bonus-equipment"]["exoskeleton-equipment"]) + lifesupport_equipment.name = data_util.mod_prefix ..name + lifesupport_equipment.movement_bonus = 0 + lifesupport_equipment.energy_consumption = lep.power + lifesupport_equipment.sprite = { filename = "__space-exploration-graphics__/graphics/equipment/"..name..".png", width = 128, height = 128, priority = "medium" } + --lifesupport_equipment.background_color = { r = 0.2, g = 0.3, b = 0.6, a = 1 } + lifesupport_equipment.shape = { width = lep.grid_width, height = lep.grid_width, type = "full" } + lifesupport_equipment.categories = {"armor-jetpack"} -- we only want to put lifesupports in armors, same as jetpacks. Let's jump on an existing restriction. Should be safe as long as jetpacks is a hard req. + + local lifesupport_item = table.deepcopy(data.raw["item"]["exoskeleton-equipment"]) + lifesupport_item.name = data_util.mod_prefix ..name + lifesupport_item.icon = "__space-exploration-graphics__/graphics/icons/"..name..".png" + lifesupport_item.icon_mipmaps = 1 + lifesupport_item.icon_size = 64 + lifesupport_item.placed_as_equipment_result = data_util.mod_prefix ..name + + local lifesupport_recipe = table.deepcopy(data.raw["recipe"]["exoskeleton-equipment"]) + lifesupport_recipe.name = data_util.mod_prefix ..name + lifesupport_recipe.icon = icon_path + lifesupport_recipe.icon_size = 64 + lifesupport_recipe.icon_mipmaps = 1 + lifesupport_recipe.enabled = false + lifesupport_recipe.result = data_util.mod_prefix .. name + lifesupport_recipe.ingredients = lep.ingredients + lifesupport_recipe.energy_required = lep.tier * 10 + lifesupport_recipe.category = "lifesupport" + + local lifesupport_tech = { + type = "technology", + name = data_util.mod_prefix .. name, + effects = { { type = "unlock-recipe", recipe = data_util.mod_prefix ..name } }, + icon = "__space-exploration-graphics__/graphics/technology/"..name..".png", + icon_size = 128, + order = "e-g", + prerequisites = lep.prerequisites, + unit = { + count = lep.tier * 100, + time = 30, + ingredients = lep.science_packs + }, + localised_description = {"technology-description."..data_util.mod_prefix..name} + } + + data:extend({ + lifesupport_equipment, + lifesupport_item, + lifesupport_recipe, + lifesupport_tech + }) + +end + +data:extend({ + { + type = "sprite", + name = data_util.mod_prefix .. "lifesupport-button-sprite", + filename = "__space-exploration-graphics__/graphics/icons/thruster-suit-black.png", + priority = "extra-high-no-scale", + width = 64, + height = 64, + }, + { + type = "sound", + name = data_util.mod_prefix .. "canister-breath", + variations = { filename = "__space-exploration__/sound/canister-breath.ogg", volume = 0.25 } + } +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/linked-container.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/linked-container.lua new file mode 100644 index 0000000..a38f41b --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/linked-container.lua @@ -0,0 +1,103 @@ +local data_util = require("data_util") + + +data:extend({ + { + type = "item", + name = data_util.mod_prefix .. "linked-container", + icon = "__space-exploration-graphics__/graphics/icons/linked-container.png", + icon_size = 64, icon_mipmaps = 1, + subgroup = data.raw["item-subgroup"]["container-2"] and "container-2" or "storage", + order = "z-l", + place_result = data_util.mod_prefix .. "linked-container", + stack_size = 1, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "linked-container", + category = "space-manufacturing", + enabled = false, + ingredients = { + { name = data_util.mod_prefix .. "heavy-assembly", amount = 10}, + { name = data_util.mod_prefix .. "lattice-pressure-vessel", amount = 10}, + { name = data_util.mod_prefix .. "dynamic-emitter", amount = 10}, + { name = data_util.mod_prefix .. "self-sealing-gel", amount = 10}, + { name = data_util.mod_prefix .. "nanomaterial", amount = 10}, + { name = data_util.mod_prefix .. "naquium-processor", amount = 10}, + { name = data_util.mod_prefix .. "antimatter-canister", amount = 10}, + { name = data_util.mod_prefix .. "arcosphere-a", amount = 10}, + }, + energy_required = 600, + result = data_util.mod_prefix .. "linked-container" + }, + { + type = "linked-container", + name = data_util.mod_prefix .. "linked-container", + gui_mode = "none", + icon = "__space-exploration-graphics__/graphics/icons/linked-container.png", + icon_size = 64, icon_mipmaps = 1, + flags = {"placeable-neutral", "player-creation"}, + minable = {mining_time = 1, result = data_util.mod_prefix .. "linked-container"}, + max_health = 250, + corpse = "medium-remnants", + open_sound = { filename = "__base__/sound/metallic-chest-open.ogg", volume=0.43 }, + close_sound = { filename = "__base__/sound/metallic-chest-close.ogg", volume = 0.43 }, + se_allow_in_space = true, + collision_box = {{-0.8, -0.8}, {0.8, 0.8}}, + selection_box = {{-1, -1}, {1, 1}}, + damaged_trigger_effect = { + entity_name = "spark-explosion", + offset_deviation = { { -0.5, -0.5 }, { 0.5, 0.5 } }, + offsets = { { 0, 1 } }, + type = "create-entity" + }, + inventory_size = 10, + vehicle_impact_sound = table.deepcopy(data.raw.container["steel-chest"].vehicle_impact_sound), + picture = + { + layers = + { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics-5__/graphics/entity/linked-container/hr-linked-container.png", + width = 132, + height = 136, + shift = {0, 0/32}, + scale = 0.5 + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics-5__/graphics/entity/linked-container/hr-linked-container-shadow.png", + width = 132, + height = 88, + shift = {13/32, 9/32}, + scale = 0.5 + }), + } + } + }, + { + type = "technology", + name = data_util.mod_prefix .. "linked-container", + effects = {{ type = "unlock-recipe", recipe = data_util.mod_prefix .. "linked-container"}}, + icon = "__space-exploration-graphics__/graphics/technology/linked-container.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "teleportation", + }, + unit = { + count = 5000, + time = 60, + ingredients = { + { "logistic-science-pack", 1 }, + { "utility-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .."astronomic-science-pack-4", 1 }, + { data_util.mod_prefix .."energy-science-pack-4", 1 }, + { data_util.mod_prefix .."deep-space-science-pack-4", 1 }, + } + }, + enabled = true + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/nexus.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/nexus.lua new file mode 100644 index 0000000..6a1c246 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/nexus.lua @@ -0,0 +1,326 @@ +local data_util = require("data_util") +local original_graphic_size = 8 +local structure_size = 8 +local shift_y = 0.75 +data:extend({ + { + type = "item", + name = data_util.mod_prefix .. "nexus", + icon = "__space-exploration-graphics__/graphics/icons/nexus.png", + icon_size = 64, + order = "b-a", + subgroup = "computation", + stack_size = 1, + place_result = data_util.mod_prefix .. "nexus", + }, + { + type = "recipe", + name = data_util.mod_prefix .. "nexus", + result = data_util.mod_prefix .. "nexus", + enabled = false, + energy_required = 60, + ingredients = { + { data_util.mod_prefix .. "aeroframe-bulkhead", 10 }, + { data_util.mod_prefix .. "heavy-assembly", 10 }, + { data_util.mod_prefix .. "naquium-tessaract", 20 }, + { data_util.mod_prefix .. "naquium-processor", 1 }, + { data_util.mod_prefix .. "superconductive-cable", 20 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "interstellar-data", + energy_required = 10000, + ingredients = { + { name = data_util.mod_prefix .. "empty-data", amount = 1 }, + }, + results = { + { name = data_util.mod_prefix .. "interstellar-data", amount = 1 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = true, + enabled = false, + category="nexus" + }, + { + type = "recipe", + name = data_util.mod_prefix .. "distortion-drive", + energy_required = 600, + ingredients = { + { name = data_util.mod_prefix .. "interstellar-data", amount = 1 }, + }, + results = { + { name = data_util.mod_prefix .. "empty-data", amount = 1 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = true, + enabled = false, + icon = "__space-exploration-graphics__/graphics/icons/astronomic/anomaly.png", + icon_size = 64, + category="nexus", + localised_name = {"recipe-name."..data_util.mod_prefix .. "distortion-drive"}, + localised_description = {"recipe-description."..data_util.mod_prefix .. "distortion-drive"} + }, + { + type = "technology", + name = data_util.mod_prefix .. "nexus", + effects = { + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "nexus", + }, + }, + icon = "__space-exploration-graphics__/graphics/technology/nexus.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "naquium-processor", + data_util.mod_prefix .. "heavy-assembly", + data_util.mod_prefix .. "spaceship", + }, + unit = { + count = 2000, + time = 60, + ingredients = { + { data_util.mod_prefix .. "astronomic-science-pack-4", 1 }, + { data_util.mod_prefix .. "energy-science-pack-4", 1 }, + { data_util.mod_prefix .. "deep-space-science-pack-3", 1 }, + } + }, + }, + { + type = "assembling-machine", + name = data_util.mod_prefix .. "nexus", + icon = "__space-exploration-graphics__/graphics/icons/nexus.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = {hardness = 0.2, mining_time = 1, result = data_util.mod_prefix .. "nexus"}, + max_health = 700, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{structure_size/-2+0.3, structure_size/-2+0.3}, {structure_size/2-0.3, structure_size/2-0.3}}, + selection_box = {{-structure_size/2, -structure_size/2}, {structure_size/2, structure_size/2}}, + display_box = {{-structure_size/2, -structure_size/2-2}, {structure_size/2, structure_size/2}}, + resistances = + { + { + type = "impact", + percent = 10 + } + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + apparent_volume = 1, + sound = { + filename = "__base__/sound/lab.ogg", + volume = 0.7 + } + }, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + }, + se_allow_in_space = true, + animation ={ + layers = { + { + filename = "__space-exploration-graphics-3__/graphics/entity/nexus/sr/nexus-base.png", + width = 467/2, + height = 290/2, + line_length = 1, + frame_count = 1, + repeat_count = 64, + animation_speed = 1, + shift = { 0/32, 50.5/32+shift_y }, + scale = structure_size/original_graphic_size, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/nexus/hr/nexus-base.png", + width = 467, + height = 290, + line_length = 1, + frame_count = 1, + repeat_count = 64, + animation_speed = 1, + shift = { 0/32, 50.5/32+shift_y }, + scale = 0.5 * structure_size/original_graphic_size, + }, + }, + { + height = 448/2, + width = 402/2, + frame_count = 64, + animation_speed = 1, + shift = { 1/32, -35/32+shift_y }, + scale = structure_size/original_graphic_size, + stripes = + { + { + filename = "__space-exploration-graphics-3__/graphics/entity/nexus/sr/nexus-1.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/nexus/sr/nexus-2.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/nexus/sr/nexus-3.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/nexus/sr/nexus-4.png", + width_in_frames = 4, + height_in_frames = 4, + }, + }, + hr_version = { + height = 448, + width = 402, + frame_count = 64, + animation_speed = 1, + shift = { 1/32, -35/32+shift_y }, + scale = 0.5 * structure_size/original_graphic_size, + stripes = + { + { + filename = "__space-exploration-graphics-3__/graphics/entity/nexus/hr/nexus-1.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/nexus/hr/nexus-2.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/nexus/hr/nexus-3.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/nexus/hr/nexus-4.png", + width_in_frames = 4, + height_in_frames = 4, + }, + }, + }, + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/nexus/sr/nexus-shadow.png", + width = 599/2, + height = 345/2, + line_length = 1, + frame_count = 1, + repeat_count = 64, + animation_speed = 1, + shift = { 1.40625, 0.34375+shift_y }, + scale = structure_size/original_graphic_size, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/nexus/hr/nexus-shadow.png", + width = 599, + height = 345, + line_length = 1, + frame_count = 1, + repeat_count = 64, + animation_speed = 1, + shift = { 1.40625, 0.34375+shift_y }, + scale = 0.5 * structure_size/original_graphic_size, + }, + } + } + }, + idle_animation = { + layers = { + { + filename = "__space-exploration-graphics-3__/graphics/entity/nexus/sr/nexus-inactive.png", + frame_count = 1, + height = 541/2, + width = 467/2, + repeat_count = 64, + shift = { 0/32, -12/32+shift_y}, + scale = structure_size/original_graphic_size, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/nexus/hr/nexus-inactive.png", + frame_count = 1, + height = 541, + width = 467, + repeat_count = 64, + shift = { 0/32, -12/32+shift_y}, + scale = 0.5 * structure_size/original_graphic_size, + }, + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/nexus/sr/nexus-shadow.png", + frame_count = 1, + width = 599/2, + height = 345/2, + repeat_count = 64, + shift = { 1.40625, 0.34375 +shift_y}, + scale = structure_size/original_graphic_size, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/nexus/hr/nexus-shadow.png", + frame_count = 1, + width = 599, + height = 345, + repeat_count = 64, + shift = { 1.40625, 0.34375 +shift_y}, + scale = 0.5 * structure_size/original_graphic_size, + }, + } + } + }, + crafting_categories = {"nexus"}, + crafting_speed = 1, + energy_source = + { + type = "void", + }, + energy_usage = "1W", + ingredient_count = 12, + module_specification = + { + module_slots = 0 + }, + allowed_effects = {}, + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.5, size = 8, shift = {0.0, 0.0}, color = {r = 1, g = 0.9, b = 0.5}} + }, + }, + }, + { + type = "electric-energy-interface", + name = data_util.mod_prefix .. "nexus-charger", + icon = "__space-exploration-graphics__/graphics/icons/nexus.png", + icon_size = 64, + flags = {"placeable-player", "player-creation", "placeable-off-grid", "not-deconstructable", "not-blueprintable"}, + icon_size = 64, + order = "b-a", + selectable_in_game = false, + collision_box = {{structure_size/-2+0.3, structure_size/-2+0.3}, {structure_size/2-0.3, structure_size/2-0.3}}, + selection_box = {{-structure_size/2, -structure_size/2}, {structure_size/2, structure_size/2}}, + energy_source = { + buffer_capacity = "100MJ", + input_flow_limit = "100GW", + type = "electric", + usage_priority = "secondary-input" + }, + energy_usage = "10MW" + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/pipe.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/pipe.lua new file mode 100644 index 0000000..5083e09 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/pipe.lua @@ -0,0 +1,1043 @@ +local data_util = require("data_util") +--[[ +original plan for space pipes and belts: +more of a spagetti problem. +underground distance for both is 2. +The can't span a void (space tiles or underlay) -- via script +pipes are floor layer +pipes have automatic flow control +All +straight: h, v, +corner: ne, nw, se, sw +t: n, s, w, e +X + + +]]-- +local pipe_span = 5 +local long_versions = { + {junction = true, length = 3}, + {junction = true, length = 5}, + {junction = true, length = 7}, + {junction = false, length = 9}, + {junction = false, length = 15}, +} + +local collision_floor = { -- was considering allowing on empty space + "item-layer", -- stops player from dropping items on belts. + "floor-layer", + "object-layer", + "water-tile", -- disable this for empty space pipes +} +local collision_floor_platform = { + "item-layer", -- stops player from dropping items on belts. + "floor-layer", + "object-layer", + "water-tile", +} + +local blank_image = { + filename = "__space-exploration-graphics__/graphics/blank.png", + width = 1, + height = 1, + frame_count = 1, + line_length = 1, + shift = { 0, 0 }, +} + +local shift_sprite = data_util.shift_sprite + +local pipe_h = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/pipe-straight-horizontal.png", + height = 64, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/hr-pipe-straight-horizontal.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 +} +local pipe_h_window = { + filename = "__space-exploration-graphics__/graphics/entity/pipe-long/pipe-straight-horizontal-window.png", + height = 64, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/pipe-long/hr-pipe-straight-horizontal-window.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 +} +local pipe_v = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/pipe-straight-vertical.png", + height = 64, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/hr-pipe-straight-vertical.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 +} +local pipe_v_window = { + filename = "__space-exploration-graphics__/graphics/entity/pipe-long/pipe-straight-vertical-window.png", + height = 64, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/pipe-long/hr-pipe-straight-vertical-window.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 +} + +data:extend({ + { + icon = "__space-exploration-graphics__/graphics/icons/space-pipe.png", + icon_size = 64, + name = data_util.mod_prefix .. "space-pipe", + order = "a[pipe]-s[space]-a", + place_result = data_util.mod_prefix .. "space-pipe", + stack_size = 100, + subgroup = "pipe", + type = "item" + }, + + { + icon = "__space-exploration-graphics__/graphics/icons/space-pipe-to-ground.png", + icon_size = 64, + name = data_util.mod_prefix .. "space-pipe-to-ground", + order = "a[pipe]-s[space]-b", + place_result = data_util.mod_prefix .. "space-pipe-to-ground", + stack_size = 50, + subgroup = "pipe", + type = "item" + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-pipe", + expensive = { + ingredients = { + { name = "copper-cable", amount = 4 }, + { name = "steel-plate", amount = 2 }, + { name = "plastic-bar", amount = 2 }, + { name = "glass", amount = 2 }, + }, + result = data_util.mod_prefix .. "space-pipe", + energy_required = 10, + enabled = false, + }, + normal = { + ingredients = { + { name = "copper-cable", amount = 2 }, + { name = "steel-plate", amount = 1 }, + { name = "plastic-bar", amount = 1 }, + { name = "glass", amount = 1 }, + }, + result = data_util.mod_prefix .. "space-pipe", + energy_required = 10, + enabled = false, + }, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-pipe-to-ground", + ingredients = { + { data_util.mod_prefix .. "space-pipe", 10 }, + }, + result = data_util.mod_prefix .. "space-pipe-to-ground", + energy_required = 10, + result_count = 1, + enabled = false, + always_show_made_in = true, + }, + { + name = data_util.mod_prefix .. "space-pipe", + collision_box = { + { -0.29, -0.29 }, + { 0.29, 0.29 } + }, + collision_mask = collision_floor, + corpse = "small-remnants", + fast_replaceable_group = "pipe", + flags = { "placeable-neutral", "player-creation" }, + fluid_box = { + base_area = settings.startup["se-space-pipe-capacity"].value/100, + pipe_connections = { + { position = { 0, -1 } }, + { position = { 1, 0 } }, + { position = { 0, 1 } }, + { position = { -1, 0 } } + } + }, + horizontal_window_bounding_box = { + { -0.25, -0.28125 }, + { 0.25, 0.15625 } + }, + icon = "__space-exploration-graphics__/graphics/icons/space-pipe.png", + icon_size = 64, + max_health = 100, + minable = { + mining_time = 0.1, + result = data_util.mod_prefix .. "space-pipe" + }, + pictures = { + corner_down_left = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/pipe-corner-down-left.png", + height = 64, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/hr-pipe-corner-down-left.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + }, + corner_down_right = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/pipe-corner-down-right.png", + height = 64, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/hr-pipe-corner-down-right.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + }, + corner_up_left = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/pipe-corner-up-left.png", + height = 64, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/hr-pipe-corner-up-left.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + }, + corner_up_right = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/pipe-corner-up-right.png", + height = 64, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/hr-pipe-corner-up-right.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + }, + cross = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/pipe-cross.png", + height = 64, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/hr-pipe-cross.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + }, + ending_down = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/pipe-ending-down.png", + height = 64, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/hr-pipe-ending-down.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + }, + ending_left = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/pipe-ending-left.png", + height = 64, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/hr-pipe-ending-left.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + }, + ending_right = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/pipe-ending-right.png", + height = 64, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/hr-pipe-ending-right.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + }, + ending_up = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/pipe-ending-up.png", + height = 64, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/hr-pipe-ending-up.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + }, + fluid_background = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/fluid-background.png", + height = 20, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/hr-fluid-background.png", + height = 40, + priority = "extra-high", + scale = 0.5, + width = 64 + }, + priority = "extra-high", + width = 32 + }, + gas_flow = { + axially_symmetrical = false, + direction_count = 1, + filename = "__space-exploration-graphics__/graphics/entity/pipe/steam.png", + frame_count = 60, + height = 15, + hr_version = { + axially_symmetrical = false, + direction_count = 1, + filename = "__space-exploration-graphics__/graphics/entity/pipe/hr-steam.png", + frame_count = 60, + height = 30, + line_length = 10, + priority = "extra-high", + width = 48 + }, + line_length = 10, + priority = "extra-high", + width = 24 + }, + high_temperature_flow = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/fluid-flow-high-temperature.png", + height = 18, + priority = "extra-high", + width = 160 + }, + horizontal_window_background = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/pipe-horizontal-window-background.png", + height = 64, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/hr-pipe-horizontal-window-background.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + }, + low_temperature_flow = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/fluid-flow-low-temperature.png", + height = 18, + priority = "extra-high", + width = 160 + }, + middle_temperature_flow = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/fluid-flow-medium-temperature.png", + height = 18, + priority = "extra-high", + width = 160 + }, + straight_horizontal = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/pipe-straight-horizontal.png", + height = 64, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/hr-pipe-straight-horizontal.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + }, + straight_horizontal_window = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/pipe-straight-horizontal-window.png", + height = 64, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/hr-pipe-straight-horizontal-window.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + }, + straight_vertical = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/pipe-straight-vertical.png", + height = 64, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/hr-pipe-straight-vertical.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + }, + straight_vertical_single = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/pipe-straight-vertical-single.png", + height = 80, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/hr-pipe-straight-vertical-single.png", + height = 160, + priority = "extra-high", + scale = 0.5, + width = 160 + }, + priority = "extra-high", + width = 80 + }, + straight_vertical_window = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/pipe-straight-vertical-window.png", + height = 64, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/hr-pipe-straight-vertical-window.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + }, + t_down = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/pipe-t-down.png", + height = 64, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/hr-pipe-t-down.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + }, + t_left = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/pipe-t-left.png", + height = 64, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/hr-pipe-t-left.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + }, + t_right = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/pipe-t-right.png", + height = 64, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/hr-pipe-t-right.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + }, + t_up = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/pipe-t-up.png", + height = 64, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/hr-pipe-t-up.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + }, + vertical_window_background = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/pipe-vertical-window-background.png", + height = 64, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/hr-pipe-vertical-window-background.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + } + }, + resistances = { + { + percent = 80, + type = "fire" + }, + { + percent = 30, + type = "impact" + } + }, + selection_box = { + { + -0.5, + -0.5 + }, + { + 0.5, + 0.5 + } + }, + type = "pipe", + vehicle_impact_sound = { + filename = "__base__/sound/car-metal-impact.ogg", + volume = 0.65 + }, + vertical_window_bounding_box = { + { + -0.28125, + -0.5 + }, + { + 0.03125, + 0.125 + } + }, + working_sound = { + match_volume_to_activity = true, + max_sounds_per_type = 3, + sound = { + { + filename = "__base__/sound/pipe.ogg", + volume = 0.85 + } + } + } + }, + { + type = "pipe-to-ground", + name = data_util.mod_prefix .. "space-pipe-to-ground", + icon = "__space-exploration-graphics__/graphics/icons/space-pipe-to-ground.png", + icon_size = 64, + flags = {"placeable-neutral", "player-creation"}, + minable = {mining_time = 0.1, result = data_util.mod_prefix .. "space-pipe-to-ground"}, + max_health = 150, + fast_replaceable_group = "pipe", + corpse = "small-remnants", + resistances = + { + { + type = "fire", + percent = 80 + }, + { + type = "impact", + percent = 40 + } + + }, + collision_box = {{-0.29, -0.29}, {0.29, 0.2}}, + collision_mask = collision_floor_platform, + selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, + fluid_box = + { + base_area = settings.startup["se-space-pipe-capacity"].value/100, + pipe_covers = pipecoverspictures(), + pipe_connections = + { + { position = {0, -1} }, + { + position = {0, 1}, + max_underground_distance = pipe_span + 1 + } + } + }, + underground_sprite = + { + filename = "__core__/graphics/arrows/underground-lines.png", + priority = "extra-high-no-scale", + width = 64, + height = 64, + scale = 0.5 + }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + pictures = + { + up = + { + filename = "__space-exploration-graphics__/graphics/entity/pipe-to-ground/pipe-to-ground-up.png", + priority = "high", + width = 64, + height = 64, --, shift = {0.10, -0.04} + hr_version = + { + filename = "__space-exploration-graphics__/graphics/entity/pipe-to-ground/hr-pipe-to-ground-up.png", + priority = "extra-high", + width = 128, + height = 128, + scale = 0.5 + } + }, + down = + { + filename = "__space-exploration-graphics__/graphics/entity/pipe-to-ground/pipe-to-ground-down.png", + priority = "high", + width = 64, + height = 64, --, shift = {0.05, 0} + hr_version = + { + filename = "__space-exploration-graphics__/graphics/entity/pipe-to-ground/hr-pipe-to-ground-down.png", + priority = "extra-high", + width = 128, + height = 128, + scale = 0.5 + } + }, + left = + { + filename = "__space-exploration-graphics__/graphics/entity/pipe-to-ground/pipe-to-ground-left.png", + priority = "high", + width = 64, + height = 64, --, shift = {-0.12, 0.1} + hr_version = + { + filename = "__space-exploration-graphics__/graphics/entity/pipe-to-ground/hr-pipe-to-ground-left.png", + priority = "extra-high", + width = 128, + height = 128, + scale = 0.5 + } + }, + right = + { + filename = "__space-exploration-graphics__/graphics/entity/pipe-to-ground/pipe-to-ground-right.png", + priority = "high", + width = 64, + height = 64, --, shift = {0.1, 0.1} + hr_version = + { + filename = "__space-exploration-graphics__/graphics/entity/pipe-to-ground/hr-pipe-to-ground-right.png", + priority = "extra-high", + width = 128, + height = 128, + scale = 0.5 + } + } + } + }, +}) +for o, version in pairs(long_versions) do + local long_horizontal_sprites = { layers = {} } + local long_vertical_sprites = { layers = {} } + for i = -(version.length/2-0.5), version.length/2-0.5, 1 do + if i == 0 then + if version.junction then + table.insert(long_horizontal_sprites.layers, pipe_h_window) + table.insert(long_horizontal_sprites.layers, pipe_v_window) + table.insert(long_vertical_sprites.layers, pipe_h_window) + table.insert(long_vertical_sprites.layers, pipe_v_window) + else + table.insert(long_horizontal_sprites.layers, pipe_h_window) + table.insert(long_vertical_sprites.layers, pipe_v_window) + end + else + table.insert(long_horizontal_sprites.layers, shift_sprite(pipe_h,{i,0})) + table.insert(long_vertical_sprites.layers, shift_sprite(pipe_v,{0,i})) + end + end + local pipe_connections = { + {position = {0,version.length/2+0.5}}, + {position = {0,-(version.length/2+0.5)}} + } + if version.junction then + table.insert(pipe_connections, {position = {1,0}}) + table.insert(pipe_connections, {position = {-1,0}}) + end + local name = data_util.mod_prefix.."space-pipe-long-"..(version.junction and "j" or "s").."-"..version.length + table.insert(data.raw.technology[data_util.mod_prefix.."space-platform-scaffold"].effects, + { type = "unlock-recipe", recipe = name }) + + local icons = { + { icon = version.junction + and "__space-exploration-graphics__/graphics/icons/space-pipe-long-junction.png" + or "__space-exploration-graphics__/graphics/icons/space-pipe-long.png", + scale = 0.5, icon_size = 64, shift = {0, 0}}, + --{ icon = "__space-exploration-graphics__/graphics/icons/number/"..version.length..".png", scale = 1, shift = {-20, -20}, icon_size = 20 }, + } + local length_string = tostring(version.length) + for i = 1, #length_string do + local c = length_string:sub(i,i) + table.insert(icons, { icon = "__space-exploration-graphics__/graphics/icons/number/"..c..".png", scale = 0.5, shift = {-10+(i-1)*5, -10}, icon_size = 20 } ) + end + + data:extend{ + { + icons = icons, + pictures = {{ filename = version.junction + and "__space-exploration-graphics__/graphics/icons/space-pipe-long-junction.png" + or "__space-exploration-graphics__/graphics/icons/space-pipe-long.png", + scale = 0.25, + size = 64 + }}, + name = name, + order = "a[pipe]-s[space]-c[long]-"..o, + place_result = name, + stack_size = 50, + subgroup = "pipe", + type = "item" + }, + { + type = "recipe", + name = name, + ingredients = { + { data_util.mod_prefix .. "space-pipe", math.ceil(version.length/2) }, + }, + result = name, + energy_required = 0.25 + version.length/4, + result_count = 1, + enabled = false, + always_show_made_in = true, + }, + { + type = "storage-tank", + name = name, + localised_name = version.junction + and {"entity-name."..data_util.mod_prefix.."space-pipe-long-junction", version.length} + or {"entity-name."..data_util.mod_prefix.."space-pipe-long-straight", version.length}, + localised_description = version.junction + and {"entity-description."..data_util.mod_prefix.."space-pipe-long-junction", version.length} + or {"entity-description."..data_util.mod_prefix.."space-pipe-long-straight", version.length}, + minable = { + mining_time = 0.2, + result = name, + }, + selection_box = {{-0.5,-version.length/2},{0.5,version.length/2}}, + collision_box = {{-0.3,-(version.length/2-0.2)},{0.3,version.length/2-0.2}}, + collision_mask = collision_floor, + scale_info_icons = false, + two_direction_only = true, + circuit_wire_max_distance = 0, + corpse = "storage-tank-remnants", + order = "z", + damaged_trigger_effect = { + entity_name = "spark-explosion", + offset_deviation = { + { + -0.5, + -0.5 + }, + { + 0.5, + 0.5 + } + }, + offsets = { + { + 0, + 1 + } + }, + type = "create-entity" + }, + dying_explosion = "storage-tank-explosion", + flags = { + "placeable-player", + "player-creation" + }, + flow_length_in_ticks = 360, + fluid_box = { + base_area = settings.startup["se-space-pipe-capacity"].value/100, + pipe_connections = pipe_connections, + pipe_covers = { + east = { + layers = { + { + filename = "__base__/graphics/entity/pipe-covers/pipe-cover-east.png", + height = 64, + hr_version = { + filename = "__base__/graphics/entity/pipe-covers/hr-pipe-cover-east.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + }, + { + draw_as_shadow = true, + filename = "__base__/graphics/entity/pipe-covers/pipe-cover-east-shadow.png", + height = 64, + hr_version = { + draw_as_shadow = true, + filename = "__base__/graphics/entity/pipe-covers/hr-pipe-cover-east-shadow.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + } + } + }, + north = { + layers = { + { + filename = "__base__/graphics/entity/pipe-covers/pipe-cover-north.png", + height = 64, + hr_version = { + filename = "__base__/graphics/entity/pipe-covers/hr-pipe-cover-north.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + }, + { + draw_as_shadow = true, + filename = "__base__/graphics/entity/pipe-covers/pipe-cover-north-shadow.png", + height = 64, + hr_version = { + draw_as_shadow = true, + filename = "__base__/graphics/entity/pipe-covers/hr-pipe-cover-north-shadow.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + } + } + }, + south = { + layers = { + { + filename = "__base__/graphics/entity/pipe-covers/pipe-cover-south.png", + height = 64, + hr_version = { + filename = "__base__/graphics/entity/pipe-covers/hr-pipe-cover-south.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + }, + { + draw_as_shadow = true, + filename = "__base__/graphics/entity/pipe-covers/pipe-cover-south-shadow.png", + height = 64, + hr_version = { + draw_as_shadow = true, + filename = "__base__/graphics/entity/pipe-covers/hr-pipe-cover-south-shadow.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + } + } + }, + west = { + layers = { + { + filename = "__base__/graphics/entity/pipe-covers/pipe-cover-west.png", + height = 64, + hr_version = { + filename = "__base__/graphics/entity/pipe-covers/hr-pipe-cover-west.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + }, + { + draw_as_shadow = true, + filename = "__base__/graphics/entity/pipe-covers/pipe-cover-west-shadow.png", + height = 64, + hr_version = { + draw_as_shadow = true, + filename = "__base__/graphics/entity/pipe-covers/hr-pipe-cover-west-shadow.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + }, + priority = "extra-high", + width = 64 + } + } + } + } + }, + icon = version.junction + and "__space-exploration-graphics__/graphics/icons/space-pipe-long-junction.png" + or "__space-exploration-graphics__/graphics/icons/space-pipe-long.png", + icon_size = 64, + icon_mipmaps = 1, + max_health = 500, + pictures = { + flow_sprite = { + filename = "__base__/graphics/entity/pipe/fluid-flow-low-temperature.png", + height = 20, + priority = "extra-high", + width = 160 + }, + fluid_background = { + filename = "__base__/graphics/entity/storage-tank/fluid-background.png", + height = 15, + priority = "extra-high", + width = 16 + }, + gas_flow = { + animation_speed = 0.25, + axially_symmetrical = false, + direction_count = 1, + filename = "__base__/graphics/entity/pipe/steam.png", + frame_count = 60, + height = 15, + hr_version = { + animation_speed = 0.25, + axially_symmetrical = false, + direction_count = 1, + filename = "__base__/graphics/entity/pipe/hr-steam.png", + frame_count = 60, + height = 30, + line_length = 10, + priority = "extra-high", + scale = 0.5, + width = 48 + }, + line_length = 10, + priority = "extra-high", + width = 24 + }, + picture = { + north = long_vertical_sprites, + south = long_vertical_sprites, + east = long_horizontal_sprites, + west = long_horizontal_sprites, + }, + window_background = { + filename = "__base__/graphics/entity/storage-tank/window-background.png", + height = 12, + hr_version = { + filename = "__base__/graphics/entity/storage-tank/hr-window-background.png", + height = 24, + priority = "extra-high", + scale = 0.5, + width = 34 + }, + priority = "extra-high", + width = 17 + } + }, + window_bounding_box = { + { + -0.1, + -0.5 + }, + { + 0.1, + -0.15 + } + }, + vehicle_impact_sound = { + { + filename = "__base__/sound/car-metal-impact.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-2.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-3.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-4.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-5.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-6.ogg", + volume = 0.5 + } + }, + water_reflection = { + orientation_to_variation = false, + pictures = { + filename = "__base__/graphics/entity/storage-tank/storage-tank-reflection.png", + height = 24, + priority = "extra-high", + scale = 5, + shift = { + 0.15625, + 1.09375 + }, + variation_count = 1, + width = 24 + }, + rotate = false + }, + working_sound = { + apparent_volume = 1.5, + match_volume_to_activity = true, + max_sounds_per_type = 3, + sound = { + filename = "__base__/sound/storage-tank.ogg", + volume = 0.6 + } + } + } + } +end diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/probe.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/probe.lua new file mode 100644 index 0000000..2fd6424 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/probe.lua @@ -0,0 +1,990 @@ +local data_util = require("data_util") + +data:extend({ + { + type = "item", + name = data_util.mod_prefix.."space-probe-rocket-silo", + icon = "__space-exploration-graphics__/graphics/icons/probe-rocket-silo.png", + icon_size = 64, + icon_mipmaps = 1, + order = "c-a", + subgroup = "rocket-logistics", + stack_size = 1, + place_result = data_util.mod_prefix.."space-probe-rocket-silo", + }, + { + type = "item", + name = data_util.mod_prefix.."space-probe-rocket", + icon = "__space-exploration-graphics__/graphics/icons/probe-rocket.png", + icon_size = 64, + order = "c-b", + subgroup = "rocket-logistics", + stack_size = 1, + }, + { + type = "item", + name = data_util.mod_prefix .. "space-probe-rocket-deployed", + icon = "__space-exploration-graphics__/graphics/icons/probe-rocket.png", + icon_size = 64, + order = "c-b", + stack_size = 1, + category = "rocket-building", + subgroup = "rocket-logistics", + flags = { "hidden" }, + }, + { + type = "recipe", + name = data_util.mod_prefix.."space-probe-rocket-silo", + result = data_util.mod_prefix.."space-probe-rocket-silo", + enabled = false, + energy_required = 50, + ingredients = { + { "electric-engine-unit", 200 }, + { "processing-unit", 200 }, + { data_util.mod_prefix .. "heat-shielding", 200 }, + { data_util.mod_prefix .. "holmium-cable", 200 }, + { data_util.mod_prefix .. "heavy-girder", 100 }, + { data_util.mod_prefix .. "aeroframe-scaffold", 100 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix.."space-probe-rocket", + result = data_util.mod_prefix.."space-probe-rocket", + enabled = false, + energy_required = 100, + ingredients = { + { data_util.mod_prefix.."cargo-rocket-section", 15 }, + { data_util.mod_prefix .. "iridium-plate", 50 }, + { data_util.mod_prefix .. "aeroframe-scaffold", 40 }, + { data_util.mod_prefix .. "holmium-solenoid", 30 }, + { "rocket-fuel", 50 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + -- the dummy recipe for ethe rcoket silo section, required for launch + -- the component is inserted then the launch pad has the required parts. + type = "recipe", + name = data_util.mod_prefix.."space-probe-rocket-deploy", + result = data_util.mod_prefix .. "space-probe-rocket-deployed", + category = "rocket-building", + enabled = false, + energy_required = 100, + hidden = true, + ingredients = { + { data_util.mod_prefix.."space-probe-rocket", 1 } -- could be anything really + }, + always_show_made_in = true, + }, + { + type = "technology", + name = data_util.mod_prefix .. "space-probe", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix.."space-probe-rocket-silo"}, + { type = "unlock-recipe", recipe = data_util.mod_prefix.."space-probe-rocket" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/probe-rocket.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "aeroframe-scaffold", + data_util.mod_prefix .. "holmium-solenoid", + }, + unit = { + count = 200, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-2", 1 }, + { data_util.mod_prefix .. "energy-science-pack-2", 1 }, + } + } + }, + { + type = "rocket-silo", + name = data_util.mod_prefix.."space-probe-rocket-silo", + icon = "__space-exploration-graphics__/graphics/icons/probe-rocket-silo.png", + icon_size = 64, + icon_mipmaps = 1, + flags = {"placeable-player", "player-creation"}, + crafting_categories = {"rocket-building"}, + rocket_parts_required = 1, + crafting_speed = 1, + rocket_result_inventory_size = 40, + module_specification = + { + module_slots = 4, + module_info_icon_shift = {0, 3.3} + }, + fixed_recipe = data_util.mod_prefix.."space-probe-rocket-deploy", + show_recipe_icon = false, + allowed_effects = {"consumption", "speed", "pollution"}, + minable = {mining_time = 1, result = data_util.mod_prefix.."space-probe-rocket-silo"}, + max_health = 5000, + corpse = "rocket-silo-remnants", + dying_explosion = "rocket-silo-explosion", + collision_box = {{-4.40, -4.40}, {4.40, 4.40}}, + selection_box = {{-4.5, -4.5}, {4.5, 4.5}}, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + spaceship_collision_layer, + }, + se_allow_in_space = true, + damaged_trigger_effect = table.deepcopy(data.raw["rocket-silo"]["rocket-silo"].damaged_trigger_effect), + hole_clipping_box = { {-2.75, -1.15}, {2.75, 2.25} }, + resistances = + { + { + type = "fire", + percent = 60 + }, + { + type = "impact", + percent = 60 + } + }, + vehicle_impact_sound = table.deepcopy(data.raw["rocket-silo"]["rocket-silo"].vehicle_impact_sound), + energy_source = + { + type = "electric", + usage_priority = "primary-input" + }, + energy_usage = "250kW", --energy usage used when crafting the rocket + idle_energy_usage = "10KW", + lamp_energy_usage = "10KW", + active_energy_usage = "3990KW", + rocket_entity = data_util.mod_prefix.."space-probe-rocket", + times_to_blink = 3, + light_blinking_speed = 1 / (3 * 60), + door_opening_speed = 1 / (4.25 * 60), + + base_engine_light = + { + intensity = 1, + size = 25, + shift = {0, 1.5} + }, + + shadow_sprite = + { + filename = "__base__/graphics/entity/rocket-silo/00-rocket-silo-shadow.png", + priority = "medium", + width = 304, + height = 290, + draw_as_shadow = true, + dice = 2, + shift = util.by_pixel(8, 2), + hr_version = + { + filename = "__base__/graphics/entity/rocket-silo/hr-00-rocket-silo-shadow.png", + priority = "medium", + width = 612, + height = 578, + draw_as_shadow = true, + dice = 2, + shift = util.by_pixel(7, 2), + scale = 0.5 + }, + }, + + hole_sprite = + { + filename = "__base__/graphics/entity/rocket-silo/01-rocket-silo-hole.png", + width = 202, + height = 136, + shift = util.by_pixel(-6, 16), + hr_version = + { + filename = "__base__/graphics/entity/rocket-silo/hr-01-rocket-silo-hole.png", + width = 400, + height = 270, + shift = util.by_pixel(-5, 16), + scale = 0.5 + } + }, + hole_light_sprite = + { + filename = "__base__/graphics/entity/rocket-silo/01-rocket-silo-hole-light.png", + width = 202, + height = 136, + shift = util.by_pixel(-6, 16), + tint = {1,1,1,0}, + hr_version = + { + filename = "__base__/graphics/entity/rocket-silo/hr-01-rocket-silo-hole-light.png", + width = 400, + height = 270, + shift = util.by_pixel(-5, 16), + tint = {1,1,1,0}, + scale = 0.5 + } + }, + + rocket_shadow_overlay_sprite = + { + filename = "__base__/graphics/entity/rocket-silo/03-rocket-over-shadow-over-rocket.png", + width = 212, + height = 142, + shift = util.by_pixel(-2, 22), + hr_version = { + filename = "__base__/graphics/entity/rocket-silo/hr-03-rocket-over-shadow-over-rocket.png", + width = 426, + height = 288, + shift = util.by_pixel(-2, 21), + scale = 0.5 + } + }, + rocket_glow_overlay_sprite = + { + filename = "__base__/graphics/entity/rocket-silo/03-rocket-over-glow.png", + blend_mode = "additive", + width = 218, + height = 222, + shift = util.by_pixel(-4, 36), + hr_version = + { + filename = "__base__/graphics/entity/rocket-silo/hr-03-rocket-over-glow.png", + blend_mode = "additive", + width = 434, + height = 446, + shift = util.by_pixel(-3, 36), + scale = 0.5 + } + }, + + door_back_sprite = + { + filename = "__base__/graphics/entity/rocket-silo/04-door-back.png", + width = 158, + height = 144, + shift = util.by_pixel(36, 12), + hr_version = { + filename = "__base__/graphics/entity/rocket-silo/hr-04-door-back.png", + width = 312, + height = 286, + shift = util.by_pixel(37, 12), + scale = 0.5 + } + }, + door_back_open_offset = {1.8, -1.8 * 0.43299225}, + door_front_sprite = + { + filename = "__base__/graphics/entity/rocket-silo/05-door-front.png", + width = 166, + height = 152, + shift = util.by_pixel(-28, 32), + hr_version = + { + filename = "__base__/graphics/entity/rocket-silo/hr-05-door-front.png", + width = 332, + height = 300, + shift = util.by_pixel(-28, 33), + scale = 0.5 + } + }, + door_front_open_offset = {-1.8, 1.8 * 0.43299225}, + + base_day_sprite = {layers = { + { + filename = "__base__/graphics/entity/rocket-silo/06-rocket-silo.png", + width = 300, + height = 300, + shift = util.by_pixel(2, -2), + hr_version = + { + filename = "__base__/graphics/entity/rocket-silo/hr-06-rocket-silo.png", + width = 608, + height = 596, + shift = util.by_pixel(3, -1), + scale = 0.5 + } + }, + { + filename = "__space-exploration-graphics-5__/graphics/entity/probe/sr/06-rocket-silo-mask.png", + width = 608/2, + height = 596/2, + shift = util.by_pixel(3, -1), + tint = {r=0.4,b=0.9,g=0.6}, + hr_version = + { + filename = "__space-exploration-graphics-5__/graphics/entity/probe/hr/06-rocket-silo-mask.png", + width = 608, + height = 596, + shift = util.by_pixel(3, -1), + tint = {r=0.4,b=0.9,g=0.6}, + scale = 0.5 + } + }, + }}, + red_lights_back_sprites = + { + layers = + { + { + filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/red-light.png", + width = 32, + height = 32, + shift = {1.34375, 0.28125-1.375}, + hr_version = + { + filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/hr-red-light.png", + width = 32, + height = 32, + shift = {1.34375, 0.28125-1.375}, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/red-light.png", + width = 32, + height = 32, + shift = {2.3125, 0.9375-1.375}, + hr_version = + { + filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/hr-red-light.png", + width = 32, + height = 32, + shift = {2.3125, 0.9375-1.375}, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/red-light.png", + width = 32, + height = 32, + shift = {2.65625, 1.90625-1.375}, + hr_version = + { + filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/hr-red-light.png", + width = 32, + height = 32, + shift = {2.65625, 1.90625-1.375}, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/red-light.png", + width = 32, + height = 32, + shift = {-2.65625, 1.90625-1.375}, + hr_version = + { + filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/hr-red-light.png", + width = 32, + height = 32, + shift = {-2.65625, 1.90625-1.375}, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/red-light.png", + width = 32, + height = 32, + shift = {-2.3125, 0.9375-1.375}, + hr_version = + { + filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/hr-red-light.png", + width = 32, + height = 32, + shift = {-2.3125, 0.9375-1.375}, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/red-light.png", + width = 32, + height = 32, + shift = {-1.34375, 0.28125-1.375}, + hr_version = + { + filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/hr-red-light.png", + width = 32, + height = 32, + shift = {-1.34375, 0.28125-1.375}, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/red-light.png", + width = 32, + height = 32, + shift = {0, 0-1.375}, + hr_version = + { + filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/hr-red-light.png", + width = 32, + height = 32, + shift = {0, 0-1.375}, + scale = 0.5 + } + } + } + }, + + red_lights_front_sprites = + { + layers = + { + { + filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/red-light.png", + width = 32, + height = 32, + shift = {2.3125, 2.8125-1.375}, + hr_version = + { + filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/hr-red-light.png", + width = 32, + height = 32, + shift = {2.3125, 2.8125-1.375}, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/red-light.png", + width = 32, + height = 32, + shift = {1.34375, 3.40625-1.375}, + hr_version = + { + filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/hr-red-light.png", + width = 32, + height = 32, + shift = {1.34375, 3.40625-1.375}, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/red-light.png", + width = 32, + height = 32, + shift = {0, 3.75-1.375}, + hr_version = + { + filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/hr-red-light.png", + width = 32, + height = 32, + shift = {0, 3.75-1.375}, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/red-light.png", + width = 32, + height = 32, + shift = {-1.34375, 3.40625-1.375}, + hr_version = + { + filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/hr-red-light.png", + width = 32, + height = 32, + shift = {0, 3.75-1.375}, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/red-light.png", + width = 32, + height = 32, + shift = {-2.3125, 2.8125-1.375}, + hr_version = { + filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/hr-red-light.png", + width = 32, + height = 32, + shift = {-2.3125, 2.8125-1.375}, + scale = 0.5 + } + } + } + }, + satellite_animation = + { + filename = "__base__/graphics/entity/rocket-silo/15-rocket-silo-turbine.png", + priority = "medium", + width = 28, + height = 46, + frame_count = 32, + line_length = 8, + animation_speed = 0.4, + shift = util.by_pixel(-100, 110), + hr_version = { + filename = "__base__/graphics/entity/rocket-silo/hr-15-rocket-silo-turbine.png", + priority = "medium", + width = 54, + height = 88, + frame_count = 32, + line_length = 8, + animation_speed = 0.4, + shift = util.by_pixel(-100, 111), + scale = 0.5 + } + }, + + arm_01_back_animation = + { + filename = "__base__/graphics/entity/rocket-silo/08-rocket-silo-arms-back.png", + priority = "medium", + width = 66, + height = 76, + frame_count = 32, + line_length = 32, + animation_speed = 0.3, + shift = util.by_pixel(-54, -84), + hr_version = + { + filename = "__base__/graphics/entity/rocket-silo/hr-08-rocket-silo-arms-back.png", + priority = "medium", + width = 128, + height = 150, + frame_count = 32, + line_length = 32, + animation_speed = 0.3, + shift = util.by_pixel(-53, -84), + scale = 0.5 + } + }, + + arm_02_right_animation = + { + filename = "__base__/graphics/entity/rocket-silo/08-rocket-silo-arms-right.png", + priority = "medium", + width = 94, + height = 94, + frame_count = 32, + line_length = 32, + animation_speed = 0.3, + shift = util.by_pixel(100, -38), + hr_version = + { + filename = "__base__/graphics/entity/rocket-silo/hr-08-rocket-silo-arms-right.png", + priority = "medium", + width = 182, + height = 188, + frame_count = 32, + line_length = 32, + animation_speed = 0.3, + shift = util.by_pixel(101, -38), + scale = 0.5 + } + }, + + arm_03_front_animation = + { + filename = "__base__/graphics/entity/rocket-silo/13-rocket-silo-arms-front.png", + priority = "medium", + width = 66, + height = 114, + frame_count = 32, + line_length = 32, + animation_speed = 0.3, + shift = util.by_pixel(-52, 16), + hr_version = + { + filename = "__base__/graphics/entity/rocket-silo/hr-13-rocket-silo-arms-front.png", + priority = "medium", + width = 126, + height = 228, + frame_count = 32, + line_length = 32, + animation_speed = 0.3, + shift = util.by_pixel(-51, 16), + scale = 0.5 + } + }, + + base_front_sprite = { + layers = { + { + filename = "__base__/graphics/entity/rocket-silo/14-rocket-silo-front.png", + width = 292, + height = 132, + shift = util.by_pixel(-2, 78), + hr_version = + { + filename = "__base__/graphics/entity/rocket-silo/hr-14-rocket-silo-front.png", + width = 580, + height = 262, + shift = util.by_pixel(-1, 78), + scale = 0.5 + } + }, + { + filename = "__space-exploration-graphics-5__/graphics/entity/probe/sr/14-rocket-silo-front-mask.png", + width = 580/2, + height = 262/2, + shift = util.by_pixel(-1, 78), + tint = {r=0.4,b=0.9,g=0.6}, + hr_version = + { + filename = "__space-exploration-graphics-5__/graphics/entity/probe/hr/14-rocket-silo-front-mask.png", + width = 580, + height = 262, + shift = util.by_pixel(-1, 78), + tint = {r=0.4,b=0.9,g=0.6}, + scale = 0.5 + } + }, + } + }, + silo_fade_out_start_distance = 8, + silo_fade_out_end_distance = 15, + + alarm_sound = + { + filename = "__base__/sound/silo-alarm.ogg", + volume = 1.0 + }, + clamps_on_sound = + { + filename = "__base__/sound/silo-clamps-on.ogg", + volume = 1.0 + }, + clamps_off_sound = + { + filename = "__base__/sound/silo-clamps-off.ogg", + volume = 0.8 + }, + doors_sound = + { + filename = "__base__/sound/silo-doors.ogg", + volume = 0.8 + }, + raise_rocket_sound = + { + filename = "__base__/sound/silo-raise-rocket.ogg", + volume = 1.0 + }, + open_sound = table.deepcopy(data.raw["rocket-silo"]["rocket-silo"].open_sound), + close_sound = table.deepcopy(data.raw["rocket-silo"]["rocket-silo"].close_sound), + working_sound = + { + sound = + { + filename = "__base__/sound/rocket-silo-working-1.ogg", + volume = 0.8 + }, + fade_in_ticks = 10, + fade_out_ticks = 15, + }, + flying_sound = + { + filename = "__base__/sound/silo-rocket.ogg", + volume = 1.0, + audible_distance_modifier = 3, + } + + }, + { + type = "rocket-silo-rocket", + name = data_util.mod_prefix.."space-probe-rocket", + flags = {"not-on-map"}, + collision_mask = {"not-colliding-with-itself"}, + collision_box = {{-2, -7}, {2, 4}}, + selection_box = {{0, 0}, {0, 0}}, + dying_explosion = "massive-explosion", + shadow_slave_entity = "rocket-silo-rocket-shadow", + inventory_size = 1, + rising_speed = 1 / (7 * 60), + engine_starting_speed = 1 / (5.5 * 60), + flying_speed = 1 / (2000 * 60), + flying_acceleration = 0.01, + + glow_light = + { + intensity = 1, + size = 30, + shift = {0, 1.5}, + color = {r = 1.0, g = 1.0, b = 1.0} + }, + + rocket_sprite = util.add_shift_offset(util.by_pixel(0, 32*3.5), --util.mul_shift(rocket_rise_offset, -1), + { + filename = "__space-exploration-graphics-5__/graphics/entity/probe/sr/probe-rocket.png", + width = 310/2, + height = 596/2, + shift = util.by_pixel(-5, -27), + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/probe/hr/probe-rocket.png", + width = 310, + height = 596, + shift = util.by_pixel(-5, -27), + scale = 0.5 + } + }), + + rocket_shadow_sprite = util.add_shift_offset(util.by_pixel(-146, -120), + { + filename = "__base__/graphics/entity/rocket-silo/09-rocket-shadow.png", + priority = "medium", + width = 336, + height = 110, + draw_as_shadow = true, + shift = util.by_pixel(146, 120), + hr_version = { + filename = "__base__/graphics/entity/rocket-silo/hr-09-rocket-shadow.png", + priority = "medium", + width = 672, + height = 216, + draw_as_shadow = true, + shift = util.by_pixel(146, 121), + scale = 0.5 + } + }), + + rocket_glare_overlay_sprite = util.add_shift_offset(util.by_pixel(0, 112+112), + { + filename = "__base__/graphics/entity/rocket-silo/03-rocket-over-glare.png", + blend_mode = "additive", + width = 481, + height = 481, + shift = util.by_pixel(-2, -2), + flags = { "linear-magnification", "linear-minification" }, + --hr_version = + --{ + -- filename = "__base__/graphics/entity/rocket-silo/hr-03-rocket-over-glare.png", + -- blend_mode = "additive", + -- width = 954, + -- height = 954, + -- shift = util.by_pixel(0, 0), + -- scale = 0.5 + --} + }), + rocket_smoke_top1_animation = util.add_shift_offset(util.by_pixel(0-66, -112+28+232+32), + { + filename = "__base__/graphics/entity/rocket-silo/12-rocket-smoke.png", + priority = "medium", + tint = { r = 0.8, g = 0.8, b = 1, a = 0.8 }, + --tint = { r = 1, g = 0, b = 0, a = 0.8 }, + width = 41, + height = 145, + frame_count = 24, + line_length = 8, + animation_speed = 0.5, + scale = 1.5*1.3, + shift = util.by_pixel(-2, -2), + hr_version = { + filename = "__base__/graphics/entity/rocket-silo/hr-12-rocket-smoke.png", + priority = "medium", + tint = { r = 0.8, g = 0.8, b = 1, a = 0.8 }, + --tint = { r = 1, g = 0, b = 0, a = 0.8 }, + width = 80, + height = 286, + frame_count = 24, + line_length = 8, + animation_speed = 0.5, + scale = 1.5/2*1.3, + shift = util.by_pixel(-1, -3), + } + }), + rocket_smoke_top2_animation = util.add_shift_offset(util.by_pixel(0+17, -112+28+265+32), + { + filename = "__base__/graphics/entity/rocket-silo/12-rocket-smoke.png", + priority = "medium", + tint = { r = 0.8, g = 0.8, b = 1, a = 0.8 }, + --tint = { r = 0, g = 1, b = 0, a = 0.8 }, + width = 41, + height = 145, + frame_count = 24, + line_length = 8, + animation_speed = 0.5, + scale = 1.5*1.3, + shift = util.by_pixel(-2, -2), + hr_version = { + filename = "__base__/graphics/entity/rocket-silo/hr-12-rocket-smoke.png", + priority = "medium", + tint = { r = 0.8, g = 0.8, b = 1, a = 0.8 }, + --tint = { r = 0, g = 1, b = 0, a = 0.8 }, + width = 80, + height = 286, + frame_count = 24, + line_length = 8, + animation_speed = 0.5, + scale = 1.5/2*1.3, + shift = util.by_pixel(-1, -3), + } + }), + rocket_smoke_top3_animation = util.add_shift_offset(util.by_pixel(0+48, -112+28+252+32), + { + filename = "__base__/graphics/entity/rocket-silo/12-rocket-smoke.png", + priority = "medium", + tint = { r = 0.8, g = 0.8, b = 1, a = 0.8 }, + --tint = { r = 0, g = 0, b = 1, a = 0.8 }, + width = 41, + height = 145, + frame_count = 24, + line_length = 8, + animation_speed = 0.5, + scale = 1.5*1.3, + shift = util.by_pixel(-2, -2), + hr_version = { + filename = "__base__/graphics/entity/rocket-silo/hr-12-rocket-smoke.png", + priority = "medium", + tint = { r = 0.8, g = 0.8, b = 1, a = 0.8 }, + --tint = { r = 0, g = 0, b = 1, a = 0.8 }, + width = 80, + height = 286, + frame_count = 24, + line_length = 8, + animation_speed = 0.5, + scale = 1.5/2*1.3, + shift = util.by_pixel(-1, -3), + } + }), + + rocket_smoke_bottom1_animation = util.add_shift_offset(util.by_pixel(0-69, -112+28+205+32), + { + filename = "__base__/graphics/entity/rocket-silo/12-rocket-smoke.png", + priority = "medium", + tint = { r = 0.8, g = 0.8, b = 1, a = 0.7 }, + --tint = { r = 1, g = 1, b = 0, a = 0.8 }, + width = 41, + height = 145, + frame_count = 24, + line_length = 8, + animation_speed = 0.5, + scale = 1.5*1.3, + shift = util.by_pixel(-2, -2), + hr_version = { + filename = "__base__/graphics/entity/rocket-silo/hr-12-rocket-smoke.png", + priority = "medium", + tint = { r = 0.8, g = 0.8, b = 1, a = 0.7 }, + --tint = { r = 1, g = 1, b = 0, a = 0.8 }, + width = 80, + height = 286, + frame_count = 24, + line_length = 8, + animation_speed = 0.5, + scale = 1.5/2*1.3, + shift = util.by_pixel(-1, -3), + } + }), + rocket_smoke_bottom2_animation = util.add_shift_offset(util.by_pixel(0+62, -112+28+207+32), + { + filename = "__base__/graphics/entity/rocket-silo/12-rocket-smoke.png", + priority = "medium", + tint = { r = 0.8, g = 0.8, b = 1, a = 0.7 }, + --tint = { r = 0, g = 1, b = 1, a = 0.8 }, + width = 41, + height = 145, + frame_count = 24, + line_length = 8, + animation_speed = 0.5, + scale = 1.5*1.3, + shift = util.by_pixel(-2, -2), + hr_version = { + filename = "__base__/graphics/entity/rocket-silo/hr-12-rocket-smoke.png", + priority = "medium", + tint = { r = 0.8, g = 0.8, b = 1, a = 0.7 }, + --tint = { r = 0, g = 1, b = 1, a = 0.8 }, + width = 80, + height = 286, + frame_count = 24, + line_length = 8, + animation_speed = 0.5, + scale = 1.5/2*1.3, + shift = util.by_pixel(-1, -3), + } + }), + rocket_flame_animation = util.add_shift_offset(util.by_pixel(-1, 280-16), + { + filename = "__base__/graphics/entity/rocket-silo/10-jet-flame.png", + priority = "medium", + blend_mode = "additive", + width = 87, + height = 128, + frame_count = 8, + line_length = 8, + animation_speed = 0.5, + scale = 1.13, + shift = util.by_pixel(-0.5, -2), + hr_version = { + filename = "__base__/graphics/entity/rocket-silo/hr-10-jet-flame.png", + priority = "medium", + blend_mode = "additive", + width = 172, + height = 256, + frame_count = 8, + line_length = 8, + animation_speed = 0.5, + scale = 1.13/2, + shift = util.by_pixel(-1, -2), + } + }), + rocket_flame_left_animation = util.add_shift_offset(util.by_pixel(-32-28+3, 280-68+1), + { + filename = "__base__/graphics/entity/rocket-silo/10-jet-flame.png", + priority = "medium", + blend_mode = "additive", + width = 87, + height = 128, + frame_count = 8, + line_length = 8, + animation_speed = 0.5, + scale = 0.345*1.15, + shift = util.by_pixel(-0.5, -2), + hr_version = { + filename = "__base__/graphics/entity/rocket-silo/hr-10-jet-flame.png", + priority = "medium", + blend_mode = "additive", + width = 172, + height = 256, + frame_count = 8, + line_length = 8, + animation_speed = 0.5, + scale = 0.345/2*1.15, + shift = util.by_pixel(-1, -2), + } + }), + rocket_flame_left_rotation = 0.0611, + + rocket_flame_right_animation = util.add_shift_offset(util.by_pixel(32+16, 280-50), + { + filename = "__base__/graphics/entity/rocket-silo/10-jet-flame.png", + priority = "medium", + blend_mode = "additive", + width = 87, + height = 128, + frame_count = 8, + line_length = 8, + animation_speed = 0.5, + scale = 0.368*1.15, + shift = util.by_pixel(-0.5, -2), + hr_version = { + filename = "__base__/graphics/entity/rocket-silo/hr-10-jet-flame.png", + priority = "medium", + blend_mode = "additive", + width = 172, + height = 256, + frame_count = 8, + line_length = 8, + animation_speed = 0.5, + scale = 0.368/2*1.15, + shift = util.by_pixel(-1, -2), + } + }), + rocket_flame_right_rotation = 0.952, + + rocket_initial_offset = {0, 1.5}, + rocket_rise_offset = {0, -3.5}, + rocket_launch_offset = {0, -256}, + rocket_render_layer_switch_distance = 7.5, + full_render_layer_switch_distance = 9, + effects_fade_in_start_distance = 4.5, + effects_fade_in_end_distance = 7.5, + shadow_fade_out_start_ratio = 0.25, + shadow_fade_out_end_ratio = 0.75, + rocket_visible_distance_from_center = 2.75, + rocket_above_wires_slice_offset_from_center = -3, + rocket_air_object_slice_offset_from_center = -5.5 + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/rail.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/rail.lua new file mode 100644 index 0000000..fdd199f --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/rail.lua @@ -0,0 +1,73 @@ +local data_util = require("data_util") + +local collision_floor = { + --"item-layer", -- stops player from dropping items on belts. + "floor-layer", + --"object-layer", + "water-tile", + "rail-layer" +} + +--data.raw["curved-rail"]["curved-rail"].fast_replaceable_group = "curved-rail" -- makes crossing placement overwrite instead of cross +--data.raw["straight-rail"]["straight-rail"].fast_replaceable_group = "straight-rail" -- makes crossing placement overwrite instead of cross + +data.raw["rail-signal"]["rail-signal"].collision_mask = collision_floor +data.raw["rail-chain-signal"]["rail-chain-signal"].collision_mask = collision_floor + +local curved_rail = table.deepcopy(data.raw["curved-rail"]["curved-rail"]) +curved_rail.name = data_util.mod_prefix .. "space-curved-rail" +curved_rail.icon = "__space-exploration-graphics__/graphics/icons/space-rail.png" +curved_rail.icon_size = 64 +curved_rail.icon_mipmaps = 1 +curved_rail.minable = { mining_time = 0.2, count = 4, result = data_util.mod_prefix .. "space-rail"} +curved_rail.placeable_by = { count = 4, item = data_util.mod_prefix .. "space-rail"} +curved_rail.collision_mask = collision_floor +curved_rail.fast_replaceable_group = "space-curved-rail" +curved_rail.next_upgrade = nil +--data.raw["curved-rail"]["curved-rail"].next_upgrade = curved_rail.name + +data_util.replace_filenames_recursive(curved_rail.pictures, "__base__/graphics/entity/curved-rail/hr-", "__space-exploration-graphics__/graphics/entity/space-rail/hr/") +data_util.replace_filenames_recursive(curved_rail.pictures, "__base__/graphics/entity/rail-endings/hr-rail-endings-background.png", + "__space-exploration-graphics__/graphics/entity/space-rail/hr/rail-endings-background.png") +data_util.replace_filenames_recursive(curved_rail.pictures, "__base__/graphics/entity/curved-rail/", "__space-exploration-graphics__/graphics/entity/space-rail/sr/") +data_util.replace_filenames_recursive(curved_rail.pictures, "__base__/graphics/entity/rail-endings/rail-endings-background.png", + "__space-exploration-graphics__/graphics/entity/space-rail/sr/rail-endings-background.png") + +local straight_rail = table.deepcopy(data.raw["straight-rail"]["straight-rail"]) +straight_rail.name = data_util.mod_prefix .. "space-straight-rail" +straight_rail.icon = "__space-exploration-graphics__/graphics/icons/space-rail.png" +straight_rail.icon_size = 64 +straight_rail.icon_mipmaps = 1 +straight_rail.minable = { + mining_time = 0.2, + result = data_util.mod_prefix .. "space-rail" +} +straight_rail.placeable_by = { count = 1, item = data_util.mod_prefix .. "space-rail"} +straight_rail.collision_mask = collision_floor +straight_rail.fast_replaceable_group = "space-rail" +straight_rail.next_upgrade = nil +--data.raw["straight-rail"]["straight-rail"].next_upgrade = straight_rail.name + +data_util.replace_filenames_recursive(straight_rail.pictures, "__base__/graphics/entity/straight-rail/hr-", "__space-exploration-graphics__/graphics/entity/space-rail/hr/") +data_util.replace_filenames_recursive(straight_rail.pictures, "__base__/graphics/entity/rail-endings/hr-rail-endings-background.png", + "__space-exploration-graphics__/graphics/entity/space-rail/hr/rail-endings-background.png") +data_util.replace_filenames_recursive(straight_rail.pictures, "__base__/graphics/entity/straight-rail/", "__space-exploration-graphics__/graphics/entity/space-rail/sr/") +data_util.replace_filenames_recursive(straight_rail.pictures, "__base__/graphics/entity/rail-endings/rail-endings-background.png", + "__space-exploration-graphics__/graphics/entity/space-rail/sr/rail-endings-background.png") + +local rail_planner = table.deepcopy(data.raw["rail-planner"]["rail"]) +rail_planner.name = data_util.mod_prefix .. "space-"..rail_planner.name +rail_planner.curved_rail = curved_rail.name +rail_planner.straight_rail = straight_rail.name +rail_planner.place_result = straight_rail.name +rail_planner.localised_name = { "item-name.".. data_util.mod_prefix .. "space-rail"} +rail_planner.icon = "__space-exploration-graphics__/graphics/icons/space-rail.png" +rail_planner.icon_size = 64 +rail_planner.icon_mipmaps = 1 +rail_planner.subgroup = "rail" + +data:extend({ + rail_planner, + straight_rail, + curved_rail +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/spaceship-clamps.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/spaceship-clamps.lua new file mode 100644 index 0000000..f299a4b --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/spaceship-clamps.lua @@ -0,0 +1,403 @@ +local data_util = require("data_util") + +local blank = { + direction_count = 8, + frame_count = 1, + filename = "__space-exploration-graphics__/graphics/blank.png", + width = 1, + height = 1, + priority = "low" +} +local blank_set = { + backplates = blank, + metals = blank, + stone_path = blank, + ties = blank, +} +local picture_left = { + filename = "__space-exploration-graphics__/graphics/entity/spaceship-clamps/spaceship-clamps.png", + width = 192/2, + height = 160/2, + x = 192/2, + y = 160/2, + priority = "high", + shift = {0,0}, + variation_count = 1, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/spaceship-clamps/hr-spaceship-clamps.png", + width = 192, + height = 160, + x = 192, + y = 160, + priority = "high", + scale = 0.5, + shift = {0,0}, + variation_count = 1, + }, +} + +local pictures_left = { + backplates = blank, + metals = picture_left, + ties = blank, + stone_path = blank +} +local picture_right = { + filename = "__space-exploration-graphics__/graphics/entity/spaceship-clamps/spaceship-clamps.png", + width = 192/2, + height = 160/2, + y = 160/2, + priority = "high", + shift = {0,0}, + variation_count = 1, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/spaceship-clamps/hr-spaceship-clamps.png", + width = 192, + height = 160, + y = 160, + priority = "high", + scale = 0.5, + shift = {0,0}, + variation_count = 1, + }, +} +local pictures_right = { + backplates = blank, + metals = picture_right, + ties = blank, + stone_path = blank +} +local connection_point = { + wire = { red = {0,0}, green = {0,0}, }, + shadow = { red = {0,0}, green = {0,0}, }, +} +data:extend({ + { + type = "item", + name = data_util.mod_prefix .. "spaceship-clamp", + icon = "__space-exploration-graphics__/graphics/icons/spaceship-clamp.png", + icon_size = 64, + order = "c-a", + subgroup = "spaceship-structure", + stack_size = 50, + place_result = data_util.mod_prefix .. "spaceship-clamp-place", + }, + { + type = "recipe", + name = data_util.mod_prefix .. "spaceship-clamp", + result = data_util.mod_prefix .. "spaceship-clamp", + enabled = false, + energy_required = 30, + ingredients = { + { data_util.mod_prefix .. "aeroframe-scaffold", 10 }, + { data_util.mod_prefix .. "heavy-girder", 6 }, + { "electric-engine-unit", 10 }, + { "processing-unit", 10 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + --[[ + { + type = "item", + name = data_util.mod_prefix .. "spaceship-clamp-anchor", + icon = "__space-exploration-graphics__/graphics/icons/spaceship-clamp-anchor.png", + icon_size = 64, + order = "c-b", + subgroup = "energy", + stack_size = 50, + place_result = data_util.mod_prefix .. "spaceship-clamp-anchor", + }, + { + type = "recipe", + name = data_util.mod_prefix .. "spaceship-clamp-anchor", + result = data_util.mod_prefix .. "spaceship-clamp-anchor", + enabled = false, + energy_required = 30, + ingredients = { + { data_util.mod_prefix .. "aeroframe-scaffold", 6 }, + { data_util.mod_prefix .. "heavy-girder", 10 }, + { "electric-engine-unit", 10 }, + { "processing-unit", 10 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = true, + },]] + { + type = "technology", + name = data_util.mod_prefix .. "spaceship-clamps", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "spaceship-clamp" }, + --{ type = "unlock-recipe", recipe = data_util.mod_prefix .. "spaceship-clamp-anchor" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/spaceship-clamps.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "spaceship", + data_util.mod_prefix .. "heavy-girder", + }, + unit = { + count = 500, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-3", 1 }, + { data_util.mod_prefix .. "material-science-pack-1", 1 }, + } + }, + }, + { + type = "straight-rail", + name = data_util.mod_prefix .. "spaceship-clamp-place", + minable = {mining_time = 0.5, result = data_util.mod_prefix .. "spaceship-clamp"}, + se_allow_in_space = true, + corpse = "straight-rail-remnants", + collision_box = {{-0.99,-0.99},{0.99,0.99}}, + collision_mask = {"player-layer", "floor-layer", "item-layer"}, + selection_box = {{-1,-1},{1,1}}, + damaged_trigger_effect = { + entity_name = "wall-damaged-explosion", + offset_deviation = { + { + -0.5, + -0.5 + }, + { + 0.5, + 0.5 + } + }, + offsets = { + { + 0, + 1 + } + }, + type = "create-entity" + }, + dying_explosion = "rail-explosion", + flags = { + "placeable-neutral", + "player-creation", + }, + icon = "__space-exploration-graphics__/graphics/icons/spaceship-clamp.png", + icon_mipmaps = 1, + icon_size = 64, + max_health = 100, + pictures = { + curved_rail_horizontal_left_bottom = blank_set, + curved_rail_horizontal_left_top = blank_set, + curved_rail_horizontal_right_bottom = blank_set, + curved_rail_horizontal_right_top = blank_set, + curved_rail_vertical_left_bottom = blank_set, + curved_rail_vertical_left_top = blank_set, + curved_rail_vertical_right_bottom = blank_set, + curved_rail_vertical_right_top = blank_set, + rail_endings = { + sheets = { + { + filename = "__space-exploration-graphics__/graphics/blank.png", + width = 1, + height = 1, + flags = { + "low-object" + }, + priority = "low", + }, + } + }, + straight_rail_diagonal_left_bottom = blank_set, + straight_rail_diagonal_left_top = blank_set, + straight_rail_diagonal_right_bottom = blank_set, + straight_rail_diagonal_right_top = blank_set, + straight_rail_horizontal = pictures_left, + straight_rail_vertical = pictures_right, + }, + resistances = { + { + percent = 100, + type = "fire" + }, + { + percent = 80, + type = "acid" + } + }, + }, + { + type = "constant-combinator", + name = data_util.mod_prefix .. "spaceship-clamp", + placeable_by = {item=data_util.mod_prefix .. "spaceship-clamp", count = 1}, + minable = {mining_time = 0.5, result = data_util.mod_prefix .. "spaceship-clamp"}, + flags = { + "placeable-neutral", + "player-creation", + }, + icon = "__space-exploration-graphics__/graphics/icons/spaceship-clamp.png", + icon_mipmaps = 1, + icon_size = 64, + order="c", + max_health = 1000, + corpse = "small-remnants", + collision_box = {{-0.99,-0.99},{0.99,0.99}}, + collision_mask = {"player-layer", "floor-layer", "item-layer"}, + selection_box = {{-1,-1},{1,1}}, + scale_info_icons = false, + item_slot_count = 1, + sprites = + { + north = picture_left, + east = picture_right, + south = picture_right, + west = picture_left + }, + activity_led_sprites = + { + north = blank, + east = blank, + south = blank, + west = blank + }, + activity_led_light = + { + intensity = 0.8, + size = 1, + }, + activity_led_light_offsets = + { + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0} + }, + circuit_wire_connection_points = + { + { + wire = { red = {0,0}, green = {0,0}, }, + shadow = { red = {0,0}, green = {0,0}, }, + }, + { + wire = { red = {-0.5,0.8}, green = {-0.7,0.8}, }, + shadow = { red = {-0.5,0.8}, green = {-0.7,0.8}, }, + }, + { + wire = { red = {0,0}, green = {0,0}, }, + shadow = { red = {0,0}, green = {0,0}, }, + }, + { + wire = { red = {0.7,0.8}, green = {0.5,0.8}, }, + shadow = { red = {0.7,0.8}, green = {0.5,0.8}, }, + }, + }, + circuit_wire_max_distance = 8 + }, + { + type = "electric-pole", + name = data_util.mod_prefix .. "spaceship-clamp-power-pole-internal", + selectable_in_game = false, + maximum_wire_distance = 1.4, + -- this pole is positioned on the front side of the clamp + -- which is not necessarily over the top of spaceship flooring + -- so if it has too small of a collision box, it will not be cloned + -- with the ship (since the ship only clones things on tiles it cares about) + -- so the collision box needs to be large enough such that the pole + -- overlaps with the tiles on the back side of the clamp + -- NOTE: if the collision box is too small it won't break anything, + -- but it will force this power pole to be recreated every time the ship launches/lands + -- which will mess with the autoconnection of electric wires + collision_box = {{-0.6,-0.6},{0.6,0.6}}, + collision_mask = {}, + flags = { "placeable-neutral", "player-creation", "placeable-off-grid" }, + icon = "__space-exploration-graphics__/graphics/icons/spaceship-clamp.png", + icon_mipmaps = 1, + icon_size = 64, + pictures = + { + direction_count = 1, + frame_count = 1, + filename = "__space-exploration-graphics__/graphics/blank.png", + width = 1, + height = 1, + priority = "low" + }, + supply_area_distance = 0, + connection_points = { + { + wire = { red = {0,0}, green = {0,0}, copper = {0,0}, }, + shadow = { red = {0,0}, green = {0,0}, copper = {0,0}, }, + }, + }, + draw_copper_wires = false, + draw_circuit_wires = false, + }, + { + type = "electric-pole", + name = data_util.mod_prefix .. "spaceship-clamp-power-pole-external-west", + fast_replaceable_group = data_util.mod_prefix .. "spaceship-clamp-power-pole-external-west", + placeable_by = {item = data_util.mod_prefix .. "struct-generic-clamp-west", count = 1}, + selection_box = {{-0.5,-0.5},{0.5,0.5}}, + collision_box = {{-0.25,-0.25},{0.25,0.25}}, + selection_priority = 150, + maximum_wire_distance = 64, + collision_mask = {composite_entity_circuit_connection_layer}, + flags = { "placeable-neutral", "player-creation", "placeable-off-grid", "not-rotatable", "not-deconstructable" }, + icon = "__space-exploration-graphics__/graphics/icons/spaceship-clamp.png", + icon_mipmaps = 1, + icon_size = 64, + pictures = + { + direction_count = 1, + frame_count = 1, + filename = "__space-exploration-graphics__/graphics/blank.png", + width = 1, + height = 1, + priority = "low" + }, + supply_area_distance = 0, + connection_points = { + { + wire = { red = {0.40,-0.32}, green = {0.40,-0.13}, copper = {0.17,-0.4}, }, + shadow = { red = {0.40,-0.32}, green = {0.40,-0.13}, copper = {0.17,-0.4}, }, + }, + }, + draw_copper_wires = true, + draw_circuit_wires = true, + }, + { + type = "electric-pole", + name = data_util.mod_prefix .. "spaceship-clamp-power-pole-external-east", + fast_replaceable_group = data_util.mod_prefix .. "spaceship-clamp-power-pole-external-east", + placeable_by = {item = data_util.mod_prefix .. "struct-generic-clamp-east", count = 1}, + selection_box = {{-0.5,-0.5},{0.5,0.5}}, + collision_box = {{-0.25,-0.25},{0.25,0.25}}, + selection_priority = 150, + maximum_wire_distance = 64, + collision_mask = {composite_entity_circuit_connection_layer}, + flags = { "placeable-neutral", "player-creation", "placeable-off-grid", "not-rotatable", "not-deconstructable" }, + icon = "__space-exploration-graphics__/graphics/icons/spaceship-clamp.png", + icon_mipmaps = 1, + icon_size = 64, + pictures = + { + direction_count = 1, + frame_count = 1, + filename = "__space-exploration-graphics__/graphics/blank.png", + width = 1, + height = 1, + priority = "low" + }, + supply_area_distance = 0, + connection_points = { + { + wire = { red = {-0.40,-0.32}, green = {-0.40,-0.13}, copper = {-0.17,-0.4}, }, + shadow = { red = {-0.40,-0.32}, green = {-0.40,-0.13}, copper = {-0.17,-0.4}, }, + }, + }, + draw_copper_wires = true, + draw_circuit_wires = true, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/transport-belt.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/transport-belt.lua new file mode 100644 index 0000000..7ac9667 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/transport-belt.lua @@ -0,0 +1,516 @@ +local data_util = require("data_util") + +local belt_span = 5 +local deep_belt_span = 16 +local deep_speed = settings.startup[data_util.mod_prefix .. "deep-space-belt-speed"].value * (1+1/3)/10 / 64 -- 0.133333333 +local default_variant = "black" +local deep_space_variants = { + ["black"] = {r=0,g=0,b=0}, + ["white"] = {r=1,g=1,b=1}, + ["red"] = {r=1,g=0,b=0}, + ["magenta"] = {r=1,g=0,b=1}, + ["blue"] = {r=0,g=0,b=1}, + ["cyan"] = {r=0,g=1,b=1}, + ["green"] = {r=0,g=1,b=0}, + ["yellow"] = {r=1,g=1,b=0}, +} + +local collision_floor = { + --"item-layer", -- stops player from dropping items on belts. + "floor-layer", + "object-layer", + "water-tile", + "transport-belt-layer" +} +local collision_floor_platform = { + --"item-layer", -- stops player from dropping items on belts. + "floor-layer", + "object-layer", + "water-tile", + "transport-belt-layer" +} + +data:extend({ + { + icon = "__space-exploration-graphics__/graphics/icons/transport-belt.png", + icon_size = 64, + name = data_util.mod_prefix .. "space-transport-belt", + order = "x[space-transport-belt]", + place_result = data_util.mod_prefix .. "space-transport-belt", + stack_size = 100, + subgroup = "transport-belt", + type = "item" + }, + { + icon = "__space-exploration-graphics__/graphics/icons/underground-belt.png", + icon_size = 64, + name = data_util.mod_prefix .. "space-underground-belt", + order = "x[space-underground-belt]-u[underground]", + place_result = data_util.mod_prefix .. "space-underground-belt", + stack_size = 50, + subgroup = "underground-belt", + type = "item" + }, + { + icon = "__space-exploration-graphics__/graphics/icons/splitter.png", + icon_size = 64, + name = data_util.mod_prefix .. "space-splitter", + order = "x[space-splitter]-s[splitter]", + place_result = data_util.mod_prefix .. "space-splitter", + stack_size = 50, + subgroup = "splitter", + type = "item" + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-transport-belt", + category = "crafting-with-fluid", + expensive = { + ingredients = { + { type = "fluid", name = "lubricant", amount = 20}, + { name = "steel-plate", amount = 6 }, + { name = "iron-plate", amount = 6 }, + { name = "copper-plate", amount = 6 }, + }, + result = data_util.mod_prefix .. "space-transport-belt", + energy_required = 10, + result_count = 2, + enabled = false, + }, + normal = { + ingredients = { + { type = "fluid", name = "lubricant", amount = 20}, + { name = "steel-plate", amount = 6 }, + { name = "iron-plate", amount = 6 }, + { name = "copper-plate", amount = 6 }, + }, + result = data_util.mod_prefix .. "space-transport-belt", + energy_required = 10, + result_count = 1, + enabled = false, + }, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-underground-belt", + category = "crafting-with-fluid", + ingredients = { + { name = "steel-plate", amount = 8 }, + { data_util.mod_prefix .. "space-transport-belt", 8 }, + { + amount = 40, + name = "lubricant", + type = "fluid" + } + }, + energy_required = 10, + result = data_util.mod_prefix .. "space-underground-belt", + result_count = 1, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-splitter", + category = "crafting-with-fluid", + ingredients = { + { name = "steel-plate", amount = 10 }, + { name = "advanced-circuit", amount = 10 }, + { data_util.mod_prefix .. "space-transport-belt", 4 }, + { + amount = 40, + name = "lubricant", + type = "fluid" + } + }, + energy_required = 10, + result = data_util.mod_prefix .. "space-splitter", + result_count = 1, + enabled = false, + always_show_made_in = true, + }, +}) + +local belt = table.deepcopy(data.raw["transport-belt"]["express-transport-belt"]) +belt.name = data_util.mod_prefix .. "space-transport-belt" +belt.minable.result = data_util.mod_prefix .. "space-transport-belt" +belt.icon = "__space-exploration-graphics__/graphics/icons/transport-belt.png" +belt.icon_size = 64 +belt.icon_mipmaps = 1 +belt.fast_replaceable_group = "space-transport-belt" +belt.next_upgrade = nil +belt.related_underground_belt = data_util.mod_prefix .. "space-underground-belt" +local fields = {"animations", "belt_animation_set", "structure", "structure_patch", "belt_horizontal", "belt_vertical", + "ending_bottom", "ending_patch", "ending_side", "ending_top", + "starting_bottom", "starting_patch", "starting_side", "starting_top"} +for _, field in pairs(fields) do + data_util.replace_filenames_recursive(belt[field], + "__base__", + "__space-exploration-graphics__") + data_util.replace_filenames_recursive(belt[field], + "express-", + "space-") +end +belt.collision_mask = collision_floor + +local splitter = table.deepcopy(data.raw["splitter"]["express-splitter"]) +splitter.name = data_util.mod_prefix .. "space-splitter" +splitter.minable.result = data_util.mod_prefix .. "space-splitter" +splitter.icon = "__space-exploration-graphics__/graphics/icons/splitter.png" +splitter.icon_size = 64 +splitter.icon_mipmaps = 1 +splitter.fast_replaceable_group = "space-transport-belt" +splitter.next_upgrade = nil +for _, field in pairs(fields) do + data_util.replace_filenames_recursive(splitter[field], + "__base__", + "__space-exploration-graphics__") + data_util.replace_filenames_recursive(splitter[field], + "express-", + "space-") +end +splitter.collision_mask = collision_floor + +local ug_belt = table.deepcopy(data.raw["underground-belt"]["express-underground-belt"]) +ug_belt.name = data_util.mod_prefix .. "space-underground-belt" +ug_belt.minable.result = data_util.mod_prefix .. "space-underground-belt" +ug_belt.icon = "__space-exploration-graphics__/graphics/icons/underground-belt.png" +ug_belt.icon_size = 64 +ug_belt.icon_mipmaps = 1 +ug_belt.fast_replaceable_group = "space-transport-belt" +ug_belt.next_upgrade = nil +for _, field in pairs(fields) do + data_util.replace_filenames_recursive(ug_belt[field], + "__base__", + "__space-exploration-graphics__") + data_util.replace_filenames_recursive(ug_belt[field], + "express-", + "space-") +end +ug_belt.max_distance = belt_span + 1 +ug_belt.collision_mask = collision_floor_platform + +-- NOTE: items and recipes are still elsewhere +data:extend({belt, splitter, ug_belt}) + +-- DEEP SPACE ----------------------------------------------------------------- + + +local deep_tech = { + type = "technology", + name = data_util.mod_prefix.."deep-space-transport-belt", + effects = { + {type = "unlock-recipe", recipe = data_util.mod_prefix.."deep-space-transport-belt"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix.."deep-space-splitter"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix.."deep-space-underground-belt"}, + }, + icon = "__space-exploration-graphics__/graphics/technology/deep-space-transport-belt.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix.."deep-space-science-pack-2", + data_util.mod_prefix.."heavy-assembly" + }, + unit = { + count = 500, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix.."astronomic-science-pack-4", 1 }, + { data_util.mod_prefix.."energy-science-pack-4", 1 }, + { data_util.mod_prefix.."material-science-pack-4", 1 }, + { data_util.mod_prefix.."biological-science-pack-4", 1 }, + { data_util.mod_prefix.."deep-space-science-pack-2", 1 }, + } + } +} +local deep_belt_recipe = { + type = "recipe", + name = data_util.mod_prefix.."deep-space-transport-belt", + ingredients = { + { name = data_util.mod_prefix.."space-transport-belt", amount = 10 }, + { name = data_util.mod_prefix.."naquium-plate", amount = 4 }, + { name = data_util.mod_prefix.."heavy-bearing", amount = 1 }, + { name = data_util.mod_prefix.."superconductive-cable", amount = 1 }, + { name = data_util.mod_prefix.."aeroframe-scaffold", amount = 1 }, + { name = data_util.mod_prefix.."cryonite-rod", amount = 1 }, + { type = "fluid", name = "lubricant", amount = 50 }, + }, + result = data_util.mod_prefix.."deep-space-transport-belt-"..default_variant, + result_count = 10, + energy_required = 10, + enabled = false, + always_show_made_in = true, + category = "space-manufacturing", +} +local deep_splitter_recipe = { + type = "recipe", + name = data_util.mod_prefix.."deep-space-splitter", + ingredients = { + { name = data_util.mod_prefix.."space-splitter", amount = 1 }, + { name = data_util.mod_prefix.."deep-space-transport-belt-"..default_variant, amount = 2 }, + { name = data_util.mod_prefix.."naquium-cube", amount = 1 }, + { name = data_util.mod_prefix.."quantum-processor", amount = 1 }, + { name = data_util.mod_prefix.."heavy-assembly", amount = 1 }, + { name = data_util.mod_prefix.."superconductive-cable", amount = 1 }, + { type = "fluid", name = "lubricant", amount = 100 }, + }, + result = data_util.mod_prefix.."deep-space-splitter-"..default_variant, + energy_required = 100, + enabled = false, + always_show_made_in = true, + category = "space-manufacturing", +} +local deep_ug_recipe = { + type = "recipe", + name = data_util.mod_prefix.."deep-space-underground-belt", + ingredients = { + { name = data_util.mod_prefix.."space-underground-belt", amount = 1 }, + { name = data_util.mod_prefix.."deep-space-transport-belt-"..default_variant, amount = 10 }, + { name = data_util.mod_prefix.."naquium-cube", amount = 1 }, + { name = data_util.mod_prefix.."heavy-composite", amount = 5 }, + { name = data_util.mod_prefix.."aeroframe-scaffold", amount = 10 }, + { name = data_util.mod_prefix.."superconductive-cable", amount = 1 }, + { type = "fluid", name = "lubricant", amount = 100 }, + }, + result = data_util.mod_prefix.."deep-space-underground-belt-"..default_variant, + energy_required = 100, + enabled = false, + always_show_made_in = true, + category = "space-manufacturing", +} +data:extend({ + deep_tech, + deep_belt_recipe, + deep_splitter_recipe, + deep_ug_recipe, +}) + +local deep_space_belt_base = table.deepcopy(belt) +deep_space_belt_base.name = data_util.mod_prefix .. "deep-space-transport-belt" +deep_space_belt_base.order = "z" +for _, field in pairs(fields) do + data_util.replace_filenames_recursive(deep_space_belt_base[field], + "space-t", + "deep-space-t") +end +deep_space_belt_base.speed = deep_speed +deep_space_belt_base.related_underground_belt = data_util.mod_prefix.."deep-space-underground-belt" + +local deep_space_splitter_base = table.deepcopy(splitter) +deep_space_splitter_base.name = data_util.mod_prefix .. "deep-space-splitter" +deep_space_splitter_base.order = "z" +deep_space_splitter_base.speed = deep_speed +data_util.replace_filenames_recursive(deep_space_splitter_base.structure, + "space-s", + "deep-space-s") +data_util.replace_filenames_recursive(deep_space_splitter_base.structure_patch, + "space-s", + "deep-space-s") +data_util.replace_sr_with_half_hr(deep_space_splitter_base.structure) +data_util.replace_sr_with_half_hr(deep_space_splitter_base.structure_patch) + +local deep_space_ug_base = table.deepcopy(ug_belt) +deep_space_ug_base.name = data_util.mod_prefix .. "deep-space-underground-belt" +deep_space_ug_base.order = "z" +deep_space_ug_base.speed = deep_speed +deep_space_ug_base.max_distance = deep_belt_span + 1 +data_util.replace_filenames_recursive(deep_space_ug_base.structure, + "space-u", + "deep-space-u") + +for name, tint in pairs(deep_space_variants) do + local suffix = "-"..name + + local variant_belt = table.deepcopy(deep_space_belt_base) + variant_belt.name = variant_belt.name ..suffix + variant_belt.minable.result = variant_belt.name + variant_belt.icons = { + {icon="__space-exploration-graphics__/graphics/icons/deep-space-transport-belt.png", icon_size=64}, + {icon="__space-exploration-graphics__/graphics/icons/deep-space-transport-belt-glow.png", icon_size=64,tint=tint} + } + + variant_belt.related_underground_belt = deep_space_ug_base.name .. suffix + local set = table.deepcopy(variant_belt.belt_animation_set.animation_set) + set.flags = {"no-crop"} + set.hr_version.flags = {"no-crop"} + local glow_set = table.deepcopy(set) + data_util.replace_filenames_recursive(glow_set, + "deep-space-transport-belt.png", + "deep-space-transport-belt-glow.png") + data_util.tint_recursive(glow_set, tint) + data_util.blend_mode_recursive(glow_set, "additive") + variant_belt.belt_animation_set.animation_set = { + layers = { + set, + glow_set + } + } + + + local variant_splitter = table.deepcopy(deep_space_splitter_base) + variant_splitter.name = variant_splitter.name ..suffix + variant_splitter.minable.result = variant_splitter.name + variant_splitter.icons = { + {icon="__space-exploration-graphics__/graphics/icons/deep-space-splitter.png", icon_size=64}, + {icon="__space-exploration-graphics__/graphics/icons/deep-space-splitter-glow.png", icon_size=64,tint=tint} + } + variant_splitter.belt_animation_set = table.deepcopy(variant_belt.belt_animation_set) + for _, structure in pairs({"structure", "structure_patch"}) do + for direction, pictures in pairs(variant_splitter[structure]) do + local pictures = table.deepcopy(pictures) + local glow_pictures = table.deepcopy(pictures) + data_util.replace_filenames_recursive(glow_pictures, + "patch.png", + "patch-glow.png") + data_util.replace_filenames_recursive(glow_pictures, + "east.png", + "east-glow.png") + data_util.replace_filenames_recursive(glow_pictures, + "north.png", + "north-glow.png") + data_util.replace_filenames_recursive(glow_pictures, + "west.png", + "west-glow.png") + data_util.replace_filenames_recursive(glow_pictures, + "south.png", + "south-glow.png") + data_util.tint_recursive(glow_pictures, tint) + data_util.blend_mode_recursive(glow_pictures, "additive") + variant_splitter[structure][direction].layers = {pictures, glow_pictures} + end + end + + local variant_ug = table.deepcopy(deep_space_ug_base) + variant_ug.name = variant_ug.name ..suffix + variant_ug.minable.result = variant_ug.name + variant_ug.icons = { + {icon="__space-exploration-graphics__/graphics/icons/deep-space-underground-belt.png", icon_size=64}, + {icon="__space-exploration-graphics__/graphics/icons/deep-space-underground-belt-glow.png", icon_size=64,tint=tint} + } + variant_ug.belt_animation_set = table.deepcopy(variant_belt.belt_animation_set) + for _, field in pairs({"direction_in", "direction_in_side_loading","direction_out","direction_out_side_loading"}) do + local sheet = table.deepcopy(variant_ug.structure[field].sheet) + local glow_sheet = table.deepcopy(sheet) + data_util.replace_filenames_recursive(glow_sheet, + "underground-belt-structure.png", + "underground-belt-structure-glow.png") + data_util.tint_recursive(glow_sheet, tint) + data_util.blend_mode_recursive(glow_sheet, "additive") + variant_ug.structure[field].sheet = nil + variant_ug.structure[field].sheets = { + sheet, glow_sheet + } + end + + local variant_item_belt = { + type = "item", + name = variant_belt.name, + icons = variant_belt.icons, + order = "z[space-transport-belt]-"..name, + stack_size = 50, + subgroup = "transport-belt", + place_result = variant_belt.name, + } + local variant_item_splitter = { + type = "item", + name = variant_splitter.name, + icons = variant_splitter.icons, + icon_size = 64, + icon_mipmaps = 1, + order = "z[space-transport-belt]-"..name.."-s[splitter]", + stack_size = 50, + subgroup = "splitter", + place_result = variant_splitter.name, + } + local variant_item_ug = { + type = "item", + name = variant_ug.name, + icons = variant_ug.icons, + icon_size = 64, + icon_mipmaps = 1, + order = "z[space-transport-belt]-"..name.."-u[underground]", + stack_size = 50, + subgroup = "underground-belt", + place_result = variant_ug.name, + } + + if name ~= default_variant then + local variant_recipe_belt = { + type = "recipe", + name = variant_belt.name, + ingredients = { + { name = deep_space_belt_base.name.."-"..default_variant, amount = 10 }, + { name = "small-lamp", amount = 1 }, + }, + result = variant_belt.name, + result_count = 10, + energy_required = 0.1, + enabled = false, + always_show_made_in = true, + category = "crafting", + } + local variant_recipe_splitter = { + type = "recipe", + name = variant_splitter.name, + ingredients = { + { name = deep_space_splitter_base.name.."-"..default_variant, amount = 1 }, + { name = "small-lamp", amount = 1 }, + }, + result = variant_splitter.name, + energy_required = 0.5, + enabled = false, + always_show_made_in = true, + category = "crafting", + } + local variant_recipe_ug = { + type = "recipe", + name = variant_ug.name, + ingredients = { + { name = deep_space_ug_base.name.."-"..default_variant, amount = 2 }, + { name = "small-lamp", amount = 1 }, + }, + result = variant_ug.name, + result_count = 2, + energy_required = 0.5, + enabled = false, + always_show_made_in = true, + category = "crafting", + } + + if (not settings.startup[data_util.mod_prefix .. "deep-space-belt-"..name]) or settings.startup[data_util.mod_prefix .. "deep-space-belt-"..name].value ~= false then + table.insert(deep_tech.effects, {type = "unlock-recipe", recipe = variant_recipe_belt.name,}) + table.insert(deep_tech.effects, {type = "unlock-recipe", recipe = variant_recipe_splitter.name,}) + table.insert(deep_tech.effects, {type = "unlock-recipe", recipe = variant_recipe_ug.name,}) + end + + data:extend({ + variant_belt, + variant_splitter, + variant_ug, + variant_item_belt, + variant_item_splitter, + variant_item_ug, + variant_recipe_belt, + variant_recipe_splitter, + variant_recipe_ug + }) + end + + data:extend({ + variant_belt, + variant_splitter, + variant_ug, + variant_item_belt, + variant_item_splitter, + variant_item_ug, + }) +end + + + +--log( serpent.block( data.raw["transport-belt"], {comment = false, numformat = '%1.8g' } ) ) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/weapon-bio.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/weapon-bio.lua new file mode 100644 index 0000000..22bf1fc --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/combined/weapon-bio.lua @@ -0,0 +1,1531 @@ +local data_util = require("data_util") +local tint = { + 0.7, + 0.6944, + 0.3584, + 0.7 +} +data.raw["utility-constants"].default.bonus_gui_ordering["biogun"] = "k-c" +data:extend({ + { + type = "technology", + name = data_util.mod_prefix .. "biogun", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "biogun" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "bloater-ammo" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "pheromone-ammo" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/biogun.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "vitalic-acid", + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "biological-science-pack-1", 1 }, + } + }, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "biogun", + result = data_util.mod_prefix .. "biogun", + enabled = false, + energy_required = 30, + ingredients = { + { "glass", 10 }, + { "steel-plate", 10 }, + { data_util.mod_prefix .. "space-pipe", 1 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "pheromone-ammo", + result = data_util.mod_prefix .. "pheromone-ammo", + enabled = false, + energy_required = 10, + ingredients = { + { data_util.mod_prefix .. "canister", 1 }, + { data_util.mod_prefix .. "vitalic-acid", 10 }, + { type = "fluid", name = data_util.mod_prefix .. "bio-sludge", amount = 100 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + category = "chemistry" + }, + { + type = "recipe", + name = data_util.mod_prefix .. "bloater-ammo", + result = data_util.mod_prefix .. "bloater-ammo", + enabled = false, + energy_required = 10, + ingredients = { + { data_util.mod_prefix .. "canister", 1 }, + { data_util.mod_prefix .. "vitalic-acid", 10 }, + { type = "fluid", name = data_util.mod_prefix .. "bio-sludge", amount = 100 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + category = "chemistry" + }, + { + type = "ammo-category", + name = "biogun", + bonus_gui_order = "k-c", + }, + { + type = "gun", + name = data_util.mod_prefix .. "biogun", + icon = "__space-exploration-graphics__/graphics/icons/biogun.png", + icon_mipmaps = 1, + icon_size = 64, + subgroup = "gun", + order = "e[flamethrower]", + stack_size = 5, + attack_parameters = { + ammo_category = "biogun", + cooldown = 60, + cyclic_sound = { + begin_sound = { + { + filename = "__base__/sound/fight/flamethrower-start.ogg", + volume = 0.7 + } + }, + end_sound = { + { + filename = "__base__/sound/fight/flamethrower-end.ogg", + volume = 0.7 + } + }, + middle_sound = { + { + filename = "__base__/sound/fight/flamethrower-mid.ogg", + volume = 0.7 + } + } + }, + gun_barrel_length = 0.8, + gun_center_shift = { + 0, + -1 + }, + movement_slow_down_factor = 0.1, + range = 25, + type = "stream" + }, + }, + { + type = "ammo", + name = data_util.mod_prefix .. "pheromone-ammo", + ammo_type = + { + category = "biogun", + target_type = "entity", + range_modifier = 3, + action = { + action_delivery = { + projectile = data_util.mod_prefix .. "pheromone-projectile", + source_effects = { + entity_name = "explosion-hit", + type = "create-entity" + }, + starting_speed = 0.3, + type = "projectile" + }, + type = "direct" + }, + }, + icon = "__space-exploration-graphics__/graphics/icons/pheromone-dart.png", + icon_size = 64, + icon_mipmaps = 1, + magazine_size = 1, + order = "z-t[biogun]", + stack_size = 100, + subgroup = "ammo", + }, + { + type = "projectile", + name = data_util.mod_prefix .. "pheromone-projectile", + acceleration = 0.005, + action = { + action_delivery = { + target_effects = { + { + entity_name = data_util.mod_prefix .. "pheromone-trigger", + type = "create-entity", + trigger_created_entity = true, + }, + }, + type = "instant" + }, + type = "direct" + }, + animation = { + filename = "__base__/graphics/entity/rocket/rocket.png", + frame_count = 8, + height = 35, + line_length = 8, + priority = "high", + shift = { + 0, + 0 + }, + width = 9 + }, + flags = { + "not-on-map" + }, + light = { + intensity = 0.5, + size = 4 + }, + shadow = { + filename = "__base__/graphics/entity/rocket/rocket-shadow.png", + frame_count = 1, + height = 24, + priority = "high", + shift = { + 0, + 0 + }, + width = 7 + }, + smoke = { + { + deviation = { + 0.15, + 0.15 + }, + frequency = 1, + name = "smoke-fast", + position = { + 0, + 1 + }, + slow_down_factor = 1, + starting_frame = 3, + starting_frame_deviation = 5, + starting_frame_speed = 0, + starting_frame_speed_deviation = 5 + } + }, + }, + { + type = "explosion", + name = data_util.mod_prefix .. "pheromone-trigger", + animations = { + { + direction_count = 1, + filename = "__space-exploration-graphics__/graphics/blank.png", + frame_count = 1, + height = 1, + line_length = 1, + width = 1 + } + }, + flags = { + "not-on-map", "placeable-off-grid" + }, + }, + { + type = "ammo", + name = data_util.mod_prefix .. "bloater-ammo", + ammo_type = + { + category = "biogun", + target_type = "position", + clamp_position = true, + action = { + action_delivery = { + stream = data_util.mod_prefix .. "bloater-stream", + type = "stream" + }, + type = "direct" + }, + }, + icon = "__space-exploration-graphics__/graphics/icons/bloater-ammo.png", + icon_size = 64, + icon_mipmaps = 1, + magazine_size = 1, + order = "z-t[biogun]", + stack_size = 100, + subgroup = "ammo", + }, + { + name = data_util.mod_prefix .. "bloater-stream", + flags = { + "not-on-map" + }, + initial_action = { + { + action_delivery = { + target_effects = { + { + sound = { + { + filename = "__base__/sound/creatures/projectile-acid-burn-1.ogg", + volume = 0.8 + }, + { + filename = "__base__/sound/creatures/projectile-acid-burn-2.ogg", + volume = 0.8 + }, + { + filename = "__base__/sound/creatures/projectile-acid-burn-long-1.ogg", + volume = 0.8 + }, + { + filename = "__base__/sound/creatures/projectile-acid-burn-long-2.ogg", + volume = 0.8 + } + }, + type = "play-sound" + }, + { + entity_name = data_util.mod_prefix .. "bloater-pool-cloud", + show_in_tooltip = true, + type = "create-entity" + }, + }, + type = "instant" + }, + type = "direct" + }, + { + action_delivery = { + target_effects = { + { + sticker = data_util.mod_prefix .. "bloater-sticker", + type = "create-sticker" + }, + { + damage = { + amount = 1, + type = "acid" + }, + type = "damage" + } + }, + type = "instant" + }, + force = "enemy", + ignore_collision_condition = true, + radius = 1.75, + type = "area" + } + }, + oriented_particle = true, + particle = { + animation_speed = 1, + filename = "__base__/graphics/entity/acid-projectile/acid-projectile-head.png", + frame_count = 15, + height = 84, + hr_version = { + animation_speed = 1, + filename = "__base__/graphics/entity/acid-projectile/hr-acid-projectile-head.png", + frame_count = 15, + height = 164, + line_length = 5, + priority = "high", + scale = 0.5, + shift = { + -0.0625, + 0.96875 + }, + tint = tint, + width = 42 + }, + line_length = 5, + priority = "high", + scale = 1, + shift = { + -0.0625, + 0.9375 + }, + tint = tint, + width = 22 + }, + particle_alpha_per_part = 0.8, + particle_buffer_size = 90, + particle_end_alpha = 1, + particle_fade_out_duration = 2, + particle_horizontal_speed = 0.3375, + particle_horizontal_speed_deviation = 0.0035, + particle_loop_exit_threshold = 0.25, + particle_loop_frame_count = 15, + particle_scale_per_part = 0.8, + particle_spawn_interval = 1, + particle_spawn_timeout = 6, + particle_start_alpha = 0.5, + particle_vertical_acceleration = 0.0045, + shadow = { + animation_speed = 1, + draw_as_shadow = true, + filename = "__base__/graphics/entity/acid-projectile/acid-projectile-shadow.png", + frame_count = 15, + height = 84, + hr_version = { + animation_speed = 1, + draw_as_shadow = true, + filename = "__base__/graphics/entity/acid-projectile/hr-acid-projectile-shadow.png", + frame_count = 15, + height = 164, + line_length = 15, + priority = "high", + scale = 0.5, + shift = { + -0.0625, + 0.96875 + }, + width = 42 + }, + line_length = 15, + priority = "high", + scale = 1, + shift = { + -0.0625, + 0.9375 + }, + width = 22 + }, + shadow_scale_enabled = true, + special_neutral_target_damage = { + amount = 1, + type = "acid" + }, + spine_animation = { + animation_speed = 1, + filename = "__base__/graphics/entity/acid-projectile/acid-projectile-tail.png", + frame_count = 15, + height = 12, + hr_version = { + animation_speed = 1, + filename = "__base__/graphics/entity/acid-projectile/hr-acid-projectile-tail.png", + frame_count = 15, + height = 20, + line_length = 5, + priority = "high", + scale = 0.5, + shift = { + 0, + -0.03125 + }, + tint = tint, + width = 132 + }, + line_length = 5, + priority = "high", + scale = 1, + shift = { + 0, + -0.0625 + }, + tint = tint, + width = 66 + }, + type = "stream" + }, + { + type = "smoke-with-trigger", + name = data_util.mod_prefix .. "bloater-pool-cloud", + flags = {"not-on-map"}, + show_when_smoke_off = true, + particle_count = 16, + particle_spread = { 11 * 1.05, 11 * 0.6 * 1.05 }, + particle_distance_scale_factor = 0.5, + particle_scale_factor = { 1, 0.707 }, + wave_speed = { 1/80, 1/60 }, + wave_distance = { 0.3, 0.2 }, + spread_duration_variation = 20, + particle_duration_variation = 60 * 3, + render_layer = "object", + + affected_by_wind = false, + cyclic = true, + duration = 60 * 20, + fade_away_duration = 2 * 60, + spread_duration = 20, + --color = {r = 0.239, g = 0.875, b = 0.992, a = 0.690}, -- #3ddffdb0, + color = tint, -- #3ddffdb0, + + animation = + { + direction_count = 1, + filename = "__base__/graphics/entity/acid-splash/acid-splash-1.png", + frame_count = 26, + height = 116, + hr_version = { + direction_count = 1, + filename = "__base__/graphics/entity/acid-splash/hr-acid-splash-1.png", + frame_count = 26, + height = 224, + line_length = 8, + scale = 0.5, + shift = { + -0.375, + -0.25 + }, + tint = tint, + width = 210 + }, + line_length = 8, + scale = 1, + shift = { + -0.375, + -0.3125 + }, + tint = tint, + width = 106 + }, + + created_effect = + { + { + type = "cluster", + cluster_count = 10, + distance = 4, + distance_deviation = 5, + action_delivery = + { + type = "instant", + target_effects = + { + type = "create-fire", + show_in_tooltip = false, + entity_name = data_util.mod_prefix .. "bloater-pool-fire", + initial_height = 0 + } + } + }, + { + type = "cluster", + cluster_count = 11, + distance = 8 * 1.1, + distance_deviation = 2, + action_delivery = + { + type = "instant", + target_effects = + { + type = "create-fire", + show_in_tooltip = false, + entity_name = data_util.mod_prefix .. "bloater-pool-fire", + initial_height = 0 + } + } + } + }, + + working_sound = + { + sound = + { + filename = "__base__/sound/fight/poison-cloud.ogg", + volume = 0.7 + }, + }, + action = { + { + type = "direct", + action_delivery = + { + type = "instant", + target_effects = + { + type = "nested-result", + action = + { + type = "area", + radius = 11, + action_delivery = + { + type = "instant", + target_effects = + { + type = "damage", + damage = { amount = 8, type = "acid"} + } + } + } + } + } + }, + { + type = "cluster", + cluster_count = 6, + distance = 6, + distance_deviation = 7, + action_delivery = + { + type = "instant", + target_effects = + { + type = "create-fire", + show_in_tooltip = false, + entity_name = data_util.mod_prefix .. "bloater-pool-fire", + initial_height = 0 + } + } + }, + { + type = "cluster", + cluster_count = 2, + distance = 1, + distance_deviation = 1, + action_delivery = + { + type = "instant", + target_effects = + { + type = "create-fire", + show_in_tooltip = false, + entity_name = data_util.mod_prefix .. "bloater-pool-fire", + initial_height = 0 + } + } + }, + }, + action_cooldown = 10 + }, + { + type = "fire", + name = data_util.mod_prefix .. "bloater-pool-fire", + add_fuel_cooldown = 10, + burnt_patch_lifetime = 0, + damage_multiplier_decrease_per_tick = 0.005, + damage_multiplier_increase_per_added_fuel = 1, + damage_per_tick = { + amount = 0, + type = "acid" + }, + delay_between_initial_flames = 10, + emissions_per_second = 0, + fade_in_duration = 1, + fade_out_duration = 30, + flags = { + "placeable-off-grid", + "not-on-map" + }, + initial_flame_count = 1, + initial_lifetime = 192, + initial_render_layer = "object", + lifetime_increase_by = 0, + lifetime_increase_cooldown = 4, + limit_overlapping_particles = true, + localised_name = { + "entity-name.acid-splash" + }, + maximum_damage_multiplier = 3, + maximum_lifetime = 180, + maximum_spread_count = 100, + on_damage_tick_effect = { + action_delivery = { + target_effects = { + { + show_in_tooltip = true, + sticker = data_util.mod_prefix .. "bloater-sticker", + type = "create-sticker" + }, + { + apply_damage_to_trees = false, + damage = { + amount = 2, + type = "acid" + }, + type = "damage" + } + }, + type = "instant" + }, + filter_enabled = true, + ignore_collision_condition = true, + trigger_target_mask = { + "ground-unit" + }, + type = "direct" + }, + particle_alpha = 0.6, + particle_alpha_blend_duration = 300, + pictures = { + { + layers = { + { + direction_count = 1, + filename = "__base__/graphics/entity/acid-splash/acid-splash-1.png", + frame_count = 26, + height = 116, + hr_version = { + direction_count = 1, + filename = "__base__/graphics/entity/acid-splash/hr-acid-splash-1.png", + frame_count = 26, + height = 224, + line_length = 8, + scale = 0.5, + shift = { + -0.375, + -0.25 + }, + tint = tint, + width = 210 + }, + line_length = 8, + scale = 1, + shift = { + -0.375, + -0.3125 + }, + tint = tint, + width = 106 + }, + { + direction_count = 1, + draw_as_shadow = true, + filename = "__base__/graphics/entity/acid-splash/acid-splash-1-shadow.png", + frame_count = 26, + height = 98, + hr_version = { + direction_count = 1, + draw_as_shadow = true, + filename = "__base__/graphics/entity/acid-splash/hr-acid-splash-1-shadow.png", + frame_count = 26, + height = 188, + line_length = 8, + scale = 0.5, + shift = { + 0.0625, + 0.0625 + }, + width = 266 + }, + line_length = 8, + scale = 1, + shift = { + 0.0625, + 0 + }, + width = 134 + } + } + }, + { + layers = { + { + direction_count = 1, + filename = "__base__/graphics/entity/acid-splash/acid-splash-2.png", + frame_count = 29, + height = 76, + hr_version = { + direction_count = 1, + filename = "__base__/graphics/entity/acid-splash/hr-acid-splash-2.png", + frame_count = 29, + height = 150, + line_length = 8, + scale = 0.5, + shift = { + -0.28125, + -0.53125 + }, + tint = tint, + width = 174 + }, + line_length = 8, + scale = 1, + shift = { + -0.3125, + -0.5625 + }, + tint = tint, + width = 88 + }, + { + direction_count = 1, + draw_as_shadow = true, + filename = "__base__/graphics/entity/acid-splash/acid-splash-2-shadow.png", + frame_count = 29, + height = 136, + hr_version = { + direction_count = 1, + draw_as_shadow = true, + filename = "__base__/graphics/entity/acid-splash/hr-acid-splash-2-shadow.png", + frame_count = 29, + height = 266, + line_length = 8, + scale = 0.5, + shift = { + 0.1875, + 0.90625 + }, + width = 238 + }, + line_length = 8, + scale = 1, + shift = { + 0.1875, + 0.875 + }, + width = 120 + } + } + }, + { + layers = { + { + direction_count = 1, + filename = "__base__/graphics/entity/acid-splash/acid-splash-3.png", + frame_count = 29, + height = 104, + hr_version = { + direction_count = 1, + filename = "__base__/graphics/entity/acid-splash/hr-acid-splash-3.png", + frame_count = 29, + height = 208, + line_length = 8, + scale = 0.5, + shift = { + 0.6875, + -0.5 + }, + tint = tint, + width = 236 + }, + line_length = 8, + scale = 1, + shift = { + 0.6875, + -0.5 + }, + tint = tint, + width = 118 + }, + { + direction_count = 1, + draw_as_shadow = true, + filename = "__base__/graphics/entity/acid-splash/acid-splash-3-shadow.png", + frame_count = 29, + height = 70, + hr_version = { + direction_count = 1, + draw_as_shadow = true, + filename = "__base__/graphics/entity/acid-splash/hr-acid-splash-3-shadow.png", + frame_count = 29, + height = 140, + line_length = 8, + scale = 0.5, + shift = { + 0.53125, + 0.0625 + }, + width = 214 + }, + line_length = 8, + scale = 1, + shift = { + 0.5, + 0.0625 + }, + width = 110 + } + } + }, + { + layers = { + { + direction_count = 1, + filename = "__base__/graphics/entity/acid-splash/acid-splash-4.png", + frame_count = 24, + height = 80, + hr_version = { + direction_count = 1, + filename = "__base__/graphics/entity/acid-splash/hr-acid-splash-4.png", + frame_count = 24, + height = 154, + line_length = 8, + scale = 0.5, + shift = { + 0.53125, + -0.59375 + }, + tint = tint, + width = 252 + }, + line_length = 8, + scale = 1, + shift = { + 0.5, + -0.625 + }, + tint = tint, + width = 128 + }, + { + direction_count = 1, + draw_as_shadow = true, + filename = "__base__/graphics/entity/acid-splash/acid-splash-4-shadow.png", + frame_count = 24, + height = 80, + hr_version = { + direction_count = 1, + draw_as_shadow = true, + filename = "__base__/graphics/entity/acid-splash/hr-acid-splash-4-shadow.png", + frame_count = 24, + height = 160, + line_length = 8, + scale = 0.5, + shift = { + 0.5625, + -0.5 + }, + width = 248 + }, + line_length = 8, + scale = 1, + shift = { + 0.5625, + -0.5 + }, + width = 124 + } + } + } + }, + render_layer = "lower-object-above-shadow", + secondary_picture_fade_out_duration = 60, + secondary_picture_fade_out_start = 30, + secondary_pictures = { + { + layers = { + { + direction_count = 1, + filename = "__base__/graphics/entity/acid-splash/acid-splash-1.png", + frame_count = 26, + height = 116, + hr_version = { + direction_count = 1, + filename = "__base__/graphics/entity/acid-splash/hr-acid-splash-1.png", + frame_count = 26, + height = 224, + line_length = 8, + scale = 0.325, + shift = { + -0.24375, + -0.1625 + }, + tint = { + 0.7, + 0.6944, + 0.3584, + 0.7 + }, + width = 210 + }, + line_length = 8, + scale = 0.65, + shift = { + -0.24375, + -0.203125 + }, + tint = { + 0.7, + 0.6944, + 0.3584, + 0.7 + }, + width = 106 + }, + { + direction_count = 1, + draw_as_shadow = true, + filename = "__base__/graphics/entity/acid-splash/acid-splash-1-shadow.png", + frame_count = 26, + height = 98, + hr_version = { + direction_count = 1, + draw_as_shadow = true, + filename = "__base__/graphics/entity/acid-splash/hr-acid-splash-1-shadow.png", + frame_count = 26, + height = 188, + line_length = 8, + scale = 0.325, + shift = { + 0.040625, + 0.040625 + }, + width = 266 + }, + line_length = 8, + scale = 0.65, + shift = { + 0.040625, + 0 + }, + width = 134 + } + } + }, + { + layers = { + { + direction_count = 1, + filename = "__base__/graphics/entity/acid-splash/acid-splash-2.png", + frame_count = 29, + height = 76, + hr_version = { + direction_count = 1, + filename = "__base__/graphics/entity/acid-splash/hr-acid-splash-2.png", + frame_count = 29, + height = 150, + line_length = 8, + scale = 0.325, + shift = { + -0.1828125, + -0.3453125 + }, + tint = { + 0.7, + 0.6944, + 0.3584, + 0.7 + }, + width = 174 + }, + line_length = 8, + scale = 0.65, + shift = { + -0.203125, + -0.365625 + }, + tint = { + 0.7, + 0.6944, + 0.3584, + 0.7 + }, + width = 88 + }, + { + direction_count = 1, + draw_as_shadow = true, + filename = "__base__/graphics/entity/acid-splash/acid-splash-2-shadow.png", + frame_count = 29, + height = 136, + hr_version = { + direction_count = 1, + draw_as_shadow = true, + filename = "__base__/graphics/entity/acid-splash/hr-acid-splash-2-shadow.png", + frame_count = 29, + height = 266, + line_length = 8, + scale = 0.325, + shift = { + 0.121875, + 0.5890625 + }, + width = 238 + }, + line_length = 8, + scale = 0.65, + shift = { + 0.121875, + 0.56875 + }, + width = 120 + } + } + }, + { + layers = { + { + direction_count = 1, + filename = "__base__/graphics/entity/acid-splash/acid-splash-3.png", + frame_count = 29, + height = 104, + hr_version = { + direction_count = 1, + filename = "__base__/graphics/entity/acid-splash/hr-acid-splash-3.png", + frame_count = 29, + height = 208, + line_length = 8, + scale = 0.325, + shift = { + 0.446875, + -0.325 + }, + tint = { + 0.7, + 0.6944, + 0.3584, + 0.7 + }, + width = 236 + }, + line_length = 8, + scale = 0.65, + shift = { + 0.446875, + -0.325 + }, + tint = { + 0.7, + 0.6944, + 0.3584, + 0.7 + }, + width = 118 + }, + { + direction_count = 1, + draw_as_shadow = true, + filename = "__base__/graphics/entity/acid-splash/acid-splash-3-shadow.png", + frame_count = 29, + height = 70, + hr_version = { + direction_count = 1, + draw_as_shadow = true, + filename = "__base__/graphics/entity/acid-splash/hr-acid-splash-3-shadow.png", + frame_count = 29, + height = 140, + line_length = 8, + scale = 0.325, + shift = { + 0.3453125, + 0.040625 + }, + width = 214 + }, + line_length = 8, + scale = 0.65, + shift = { + 0.325, + 0.040625 + }, + width = 110 + } + } + }, + { + layers = { + { + direction_count = 1, + filename = "__base__/graphics/entity/acid-splash/acid-splash-4.png", + frame_count = 24, + height = 80, + hr_version = { + direction_count = 1, + filename = "__base__/graphics/entity/acid-splash/hr-acid-splash-4.png", + frame_count = 24, + height = 154, + line_length = 8, + scale = 0.325, + shift = { + 0.3453125, + -0.3859375 + }, + tint = { + 0.7, + 0.6944, + 0.3584, + 0.7 + }, + width = 252 + }, + line_length = 8, + scale = 0.65, + shift = { + 0.325, + -0.40625 + }, + tint = { + 0.7, + 0.6944, + 0.3584, + 0.7 + }, + width = 128 + }, + { + direction_count = 1, + draw_as_shadow = true, + filename = "__base__/graphics/entity/acid-splash/acid-splash-4-shadow.png", + frame_count = 24, + height = 80, + hr_version = { + direction_count = 1, + draw_as_shadow = true, + filename = "__base__/graphics/entity/acid-splash/hr-acid-splash-4-shadow.png", + frame_count = 24, + height = 160, + line_length = 8, + scale = 0.325, + shift = { + 0.365625, + -0.325 + }, + width = 248 + }, + line_length = 8, + scale = 0.65, + shift = { + 0.365625, + -0.325 + }, + width = 124 + } + } + } + }, + secondary_render_layer = "higher-object-above", + spread_delay = 300, + spread_delay_deviation = 180, + uses_alternative_behavior = true + }, + { + type = "sticker", + name = data_util.mod_prefix .. "bloater-sticker", + animation = { + animation_speed = 2, + axially_symmetrical = false, + blend_mode = "additive", + direction_count = 1, + filename = "__base__/graphics/entity/fire-flame/fire-flame-13.png", + frame_count = 25, + height = 118, + line_length = 8, + scale = 0.4, + shift = { + -0.0078125, + -0.18125 + }, + tint = {r = 0.2, g = 1, b = 0}, + width = 60 + }, + duration_in_ticks = 120, + flags = { + "not-on-map" + }, + target_movement_modifier_from = 0.4, + target_movement_modifier_to = 1, + vehicle_friction_modifier_from = 1.5, + vehicle_friction_modifier_to = 1, + vehicle_speed_modifier_from = 0.4, + vehicle_speed_modifier_to = 1 + }, + { + type = "projectile", + name = data_util.mod_prefix .. "bloater-splatter", + acceleration = -0.01, + action = { + action_delivery = { + target_effects = { + damage = { + amount = 50, + type = "acid" + }, + type = "damage" + }, + type = "instant" + }, + type = "direct" + }, + animation = { + filename = "__base__/graphics/entity/bullet/bullet.png", + frame_count = 1, + height = 50, + priority = "high", + width = 3, + scale = 1.5, + tint = {r = 159/255, g = 229/255, b = 38/255} + }, + collision_box = { + { + -0.05, + -0.25 + }, + { + 0.05, + 0.25 + } + }, + direction_only = true, + flags = { + "not-on-map" + }, + }, +}) + +for _, e in pairs({10, 40, 100, 400, 1000, 4000, 10000}) do + + data:extend({ + { + type = "explosion", + name = data_util.mod_prefix .. "bloater-burst-"..e, + animations = { + { + direction_count = 1, + filename = "__base__/graphics/entity/acid-splash/acid-splash-1.png", + frame_count = 26, + height = 116, + hr_version = { + direction_count = 1, + filename = "__base__/graphics/entity/acid-splash/hr-acid-splash-1.png", + frame_count = 26, + height = 224, + line_length = 8, + scale = 0.5, + shift = { + -0.375, + -0.25 + }, + tint = tint, + width = 210 + }, + line_length = 8, + scale = 1, + shift = { + -0.375, + -0.3125 + }, + tint = tint, + width = 106 + }, + }, + created_effect = { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + { + type = "create-particle", + repeat_count = 12, + repeat_count_deviation = 0, + probability = 1, + affects_target = false, + show_in_tooltip = false, + particle_name = "blood-particle-carpet", + offsets = { { 0, 0 } }, + offset_deviation = + { + left_top = { -0.5, -0.5 }, + right_bottom = { 0.5, 0.5 } + }, + tile_collision_mask = nil, + initial_height = 0.2, + initial_height_deviation = 0.05, + initial_vertical_speed = 0.062, + initial_vertical_speed_deviation = 0.01, + speed_from_center = 0.18, + speed_from_center_deviation = 0.111, + frame_speed = 1, + frame_speed_deviation = 0, + tail_length = 25, + tail_length_deviation = 0, + tail_width = 1 + }, + { + type = "create-particle", + repeat_count = 10, + repeat_count_deviation = 2, + probability = 1, + affects_target = false, + show_in_tooltip = false, + particle_name = "blood-particle-carpet", + offsets = + { + { 0.0625, 0.7891 }, + { -0.01563, 0.2422 } + }, + offset_deviation = + { + left_top = { -1, -1 }, + right_bottom = { 1, 1 } + }, + tile_collision_mask = nil, + initial_height = 0.9, + initial_height_deviation = 0, + initial_vertical_speed = 0.04, + initial_vertical_speed_deviation = 0.07, + speed_from_center = 0.135, + speed_from_center_deviation = 0.115, + frame_speed = 1, + frame_speed_deviation = 0.02, + tail_length = 12, + tail_length_deviation = 25, + tail_width = 1 + }, + { + type = "create-particle", + repeat_count = 8, + repeat_count_deviation = 2, + probability = 1, + affects_target = false, + show_in_tooltip = false, + particle_name = "guts-entrails-particle-small-medium", + offsets = { { 0, 0 } }, + offset_deviation = + { + left_top = { -0.5, -0.5 }, + right_bottom = { 0.5, 0.5 } + }, + tile_collision_mask = nil, + initial_height = 1, + initial_height_deviation = 0.52, + initial_vertical_speed = 0.078, + initial_vertical_speed_deviation = 0.05, + speed_from_center = 0.17, + speed_from_center_deviation = 0.17/2, + frame_speed = 1, + frame_speed_deviation = 0 + }, + { + type = "create-particle", + repeat_count = 11, + repeat_count_deviation = 0, + probability = 1, + affects_target = false, + show_in_tooltip = false, + particle_name = "blood-particle-carpet", + offsets = { { 0, -0.03906 } }, + offset_deviation = + { + left_top = { -1, -1 }, + right_bottom = { 1, 1 } + }, + tile_collision_mask = nil, + initial_height = 0.1, + initial_height_deviation = 0.05, + initial_vertical_speed = 0.09, + initial_vertical_speed_deviation = 0.05, + speed_from_center = 0.04, + speed_from_center_deviation = 0, + frame_speed = 1, + frame_speed_deviation = 0, + tail_length = 21, + tail_length_deviation = 3, + tail_width = 1 + }, + { + type = "create-particle", + repeat_count = 15, + repeat_count_deviation = 1, + probability = 1, + affects_target = false, + show_in_tooltip = false, + particle_name = "blood-particle-carpet", + offsets = { { 0, 0 } }, + offset_deviation = + { + left_top = { -1, -1 }, + right_bottom = { 1, 1 } + }, + tile_collision_mask = nil, + initial_height = 0.1, + initial_height_deviation = 0.01, + initial_vertical_speed = 0.018, + initial_vertical_speed_deviation = 0.005, + speed_from_center = 0.2, + speed_from_center_deviation = 0.141, + frame_speed = 1, + frame_speed_deviation = 0, + tail_length = 11, + tail_length_deviation = 7, + tail_width = 1 + }, + { + type = "create-particle", + repeat_count = 15, + repeat_count_deviation = 0, + probability = 1, + affects_target = false, + show_in_tooltip = false, + particle_name = "blood-particle-carpet", + offsets = { { 0, 0 } }, + offset_deviation = + { + left_top = { -1, -0.5 }, + right_bottom = { 1, 0.5 } + }, + tile_collision_mask = nil, + initial_height = 0.3, + initial_height_deviation = 0.5, + initial_vertical_speed = 0.055, + initial_vertical_speed_deviation = 0.003, + speed_from_center = 0.09, + speed_from_center_deviation = 0.042, + frame_speed = 1, + frame_speed_deviation = 0, + tail_length = 10, + tail_length_deviation = 12, + tail_width = 1 + }, + { + type = "create-particle", + repeat_count = 2, + repeat_count_deviation = 2, + probability = 1, + affects_target = false, + show_in_tooltip = false, + particle_name = "guts-entrails-particle-big", + offsets = { { 0, 0 } }, + offset_deviation = + { + left_top = { -0.5, -0.5 }, + right_bottom = { 0.5, 0.5 } + }, + tile_collision_mask = nil, + initial_height = 1, + initial_height_deviation = 0.52, + initial_vertical_speed = 0.178, + initial_vertical_speed_deviation = 0.15, + speed_from_center = 0.07, + speed_from_center_deviation = 0, + frame_speed = 1, + frame_speed_deviation = 0 + }, + { + action = { + action_delivery = { + projectile = data_util.mod_prefix .. "bloater-splatter", + starting_speed = 0.4, + starting_speed_deviation = 0.2, + show_in_tooltip = false, + type = "projectile" + }, + radius = 6, + repeat_count = math.max(1, e / 100), + target_entities = false, + trigger_from_target = true, + show_in_tooltip = false, + type = "area" + }, + show_in_tooltip = false, + type = "nested-result" + }, + --[[{ type = "nested-result", action = { type = "area", radius = 3, + action_delivery = { type = "instant", target_effects = { { type = "damage", damage = { amount = e * 0.05, type = "explosion" }}}}, + }}, + { type = "nested-result", action = { type = "area", radius = 6, + action_delivery = { type = "instant", target_effects = { { type = "damage", damage = { amount = e * 0.01, type = "acid" }}}}, + }},]]-- + }, + }, + }, + flags = { "not-on-map" }, + sound = { + aggregation = { max_count = 1, remove = true }, + variations = { + { filename = "__base__/sound/small-explosion-1.ogg", volume = 0.4 }, + { filename = "__base__/sound/small-explosion-2.ogg", volume = 0.4 }, + } + }, + }, + }) +end diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/compatibility/qol_research.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/compatibility/qol_research.lua new file mode 100644 index 0000000..4fc585f --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/compatibility/qol_research.lua @@ -0,0 +1,4 @@ +qol_research_config_overrides = qol_research_config_overrides or {} +qol_research_config_overrides['space-exploration'] = [[1,23,crafting-speed,150*L,automation-science-pack,logistic-science-pack,175*L,chemical-science-pack,225*L,se-rocket-science-pack,300*L,se-biological-science-pack-1,10*L,se-biological-science-pack-2,100+20*L,se-biological-science-pack-3,250+50*L,se-biological-science-pack-4,500+100*L,se-deep-space-science-pack-1,500*2^L,inventory-size,mining-speed,movement-speed,player-reach,5,1,9,5,5,0,0,2,10,1,1,3,5,5,3,1,4,5,15,2,1,3,1,4,5,5,3,1,6,7,20,3,1,3,1,4,1,6,5,5,3,1,8,9,25,4,1,3,1,4,1,6,1,8,5,5,3,1,10,11,30,5,1,3,1,4,1,6,1,8,1,10,5,5,5,1,12,13,30,5,1,3,1,4,1,6,1,8,1,12,5,5,5,1,14,15,30,5,1,3,1,4,1,6,1,8,1,14,5,5,5,1,16,17,30,5,1,3,1,4,1,6,1,8,1,16,0,5,5,1,18,19,30,6,1,3,1,4,1,6,1,8,1,16,1,18,20,9,5,2,0,0,2,10,1,1,3,5,2,3,1,4,5,15,2,1,3,1,4,5,2,3,1,6,7,20,3,1,3,1,4,1,6,5,2,3,1,8,9,25,4,1,3,1,4,1,6,1,8,5,2,3,1,10,11,30,5,1,3,1,4,1,6,1,8,1,10,5,2,5,1,12,13,30,5,1,3,1,4,1,6,1,8,1,12,5,2,5,1,14,15,30,5,1,3,1,4,1,6,1,8,1,14,5,2,5,1,16,17,30,5,1,3,1,4,1,6,1,8,1,16,0,2,5,1,18,19,30,6,1,3,1,4,1,6,1,8,1,16,1,18,21,9,5,10,0,0,2,10,1,1,3,5,10,3,1,4,5,15,2,1,3,1,4,5,10,3,1,6,7,20,3,1,3,1,4,1,6,5,10,3,1,8,9,25,4,1,3,1,4,1,6,1,8,5,10,3,1,10,11,30,5,1,3,1,4,1,6,1,8,1,10,5,10,5,1,12,13,30,5,1,3,1,4,1,6,1,8,1,12,5,10,5,1,14,15,30,5,1,3,1,4,1,6,1,8,1,14,5,10,5,1,16,17,30,5,1,3,1,4,1,6,1,8,1,16,0,10,5,1,18,19,30,6,1,3,1,4,1,6,1,8,1,16,1,18,22,9,5,2,0,0,2,10,1,1,3,5,2,3,1,4,5,15,2,1,3,1,4,5,2,3,1,6,7,20,3,1,3,1,4,1,6,5,2,3,1,8,9,25,4,1,3,1,4,1,6,1,8,5,2,3,1,10,11,30,5,1,3,1,4,1,6,1,8,1,10,5,2,5,1,12,13,30,5,1,3,1,4,1,6,1,8,1,12,5,2,5,1,14,15,30,5,1,3,1,4,1,6,1,8,1,14,5,2,5,1,16,17,30,5,1,3,1,4,1,6,1,8,1,16,0,2,5,1,18,19,30,6,1,3,1,4,1,6,1,8,1,16,1,18,23,9,5,1,0,0,2,10,1,1,3,5,1,3,1,4,5,15,2,1,3,1,4,5,1,3,1,6,7,20,3,1,3,1,4,1,6,5,1,3,1,8,9,25,4,1,3,1,4,1,6,1,8,5,1,3,1,10,11,30,5,1,3,1,4,1,6,1,8,1,10,5,1,5,1,12,13,30,5,1,3,1,4,1,6,1,8,1,12,5,1,5,1,14,15,30,5,1,3,1,4,1,6,1,8,1,14,5,1,5,1,16,17,30,5,1,3,1,4,1,6,1,8,1,16,0,1,5,1,18,19,30,6,1,3,1,4,1,6,1,8,1,16,1,18]] +table.insert(se_prodecural_tech_exclusions, "qol-") +table.insert(se_prodecural_tech_exclusions, "qolinternal-") diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/damage-types.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/damage-types.lua new file mode 100644 index 0000000..9a41336 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/damage-types.lua @@ -0,0 +1,23 @@ +data:extend({ + { + type = "damage-type", + name = "cold", + }, + { + type = "damage-type", + name = "suffocation", + }, + { + type = "damage-type", + name = "meteor", + }, + + { + type = "trigger-target-type", + name = "flammable" + }, + { + type = "trigger-target-type", + name = "tree" + } +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/decorative/crater.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/decorative/crater.lua new file mode 100644 index 0000000..9ab0a6f --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/decorative/crater.lua @@ -0,0 +1,72 @@ +local data_util = require("data_util") + +local function crater_picture (name, width, height) + return { + filename = "__alien-biomes__/graphics/decorative/crater/sr/crater-"..name..".png", + width = math.floor(width/2), + height = math.floor(height/2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/crater/hr/crater-"..name..".png", + width = width, + height = height, + scale = 0.5 + }, + } +end +local i = 0 +local function make_crater(name, box, max_probability, random_probability_penalty, pictures) + i = i + 1 + return { + name = data_util.mod_prefix..name, + type = "optimized-decorative", + subgroup = "grass", + order = "b[decorative]-b[crater-decal]-"..i, + collision_box = {{-box, -box*0.75}, {box, box*0.75}}, + collision_mask = {"doodad-layer", "water-tile"}, + render_layer = "decals", + tile_layer = 50, -- as long as it is over asteroid layer + pictures = pictures, + autoplace = { + max_probability = max_probability, + --random_probability_penalty = random_probability_penalty, + sharpness = 0.7, + order = "a[doodad]-b[decal]", + peaks = { + { influence = 0.4}, + { + influence = 0.15, + noise_layer = "trees-"..i, + noise_octaves_difference = -3, + noise_persistence = 0.9, + } + }, + tile_restriction = {data_util.mod_prefix.."asteroid"} + }, + } +end +data:extend({ + make_crater("crater3-huge", 3, 0.01, 0.95, { + crater_picture("huge-01", 1249, 877), + }), + make_crater("crater1-large-rare", 2, 0.01, 0.95, { + crater_picture("large-01", 679, 513), + }), + make_crater("crater1-large", 1, 0.1, 0.7, { + crater_picture("large-02", 327, 284), + crater_picture("large-03", 481, 393), + crater_picture("large-04", 406, 382), + crater_picture("large-05", 363, 301), + }), + make_crater("crater2-medium", 0.5, 0.1, 0.5, { + crater_picture("medium-01", 283, 231), + crater_picture("medium-02", 213, 182), + crater_picture("medium-03", 243, 189), + crater_picture("medium-04", 237, 173), + crater_picture("medium-05", 195, 182), + crater_picture("medium-06", 146, 125), + crater_picture("medium-07", 180, 127), + }), + make_crater("crater4-small", 0.25, 0.1, 0.8, { + crater_picture("small-01", 122, 108), + }), +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/decorative/rocks-base.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/decorative/rocks-base.lua new file mode 100644 index 0000000..73a8fdf --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/decorative/rocks-base.lua @@ -0,0 +1,3477 @@ +--NOTE: this is different from the alien biomes data +local rock_coverage_multiplier = 6 +local rock_max_prob_multiplier = 2 +return { +{ + name = "rock-huge", + type = "simple-entity", + flags = {"placeable-neutral", "placeable-off-grid", "not-on-map"}, + icon = "__base__/graphics/icons/rock-huge.png", + icon_size = 64, + subgroup = "grass", + order = "b[decorative]-l[rock]-a[huge]", + collision_box = {{-1.5, -1.1}, {1.5, 1.1}}, + collision_mask = {"object-layer"}, + selection_box = {{-1.7, -1.3}, {1.7, 1.3}}, + minable = + { + mining_particle = "stone-particle", + mining_time = 1.5, + results = { + {name = "stone", probability = 1, amount_min = 10, amount_max = 20}, + {name = "iron-ore", probability = 1, amount_min = 0, amount_max = 20}, + {name = "copper-ore", probability = 1, amount_min = 0, amount_max = 10}, + }, + --count = 200 + }, + loot = + { + {item = "stone", probability = 1, count_min = 10, count_max = 20}, + {item = "iron-ore", probability = 1, amount_min = 10, amount_max = 20}, + {item = "copper-ore", probability = 1, amount_min = 10, amount_max = 20}, + }, + count_as_rock_for_filtered_deconstruction = true, + mined_sound = { filename = "__base__/sound/deconstruct-bricks.ogg" }, + vehicle_impact_sound = { filename = "__base__/sound/car-stone-impact.ogg", volume = 1.0 }, + render_layer = "object", + max_health = 2000, + resistances = + { + { type = "fire", percent = 100 }, + { type = "poison", percent = 100 } + }, + autoplace = { + coverage = 0.00125 * rock_coverage_multiplier, + max_probability = 0.0875 * rock_max_prob_multiplier, + order = "a[doodad]-a[rock]-a[huge]", + peaks = { + { + influence = -0.1 + }, + { + noise_layer = "rocks", + noise_octaves_difference = -2, + noise_persistence = 0.9, + } + }, + sharpness = 0.7 + }, + pictures = + { + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-05.png", + width = 101, + height = 90, + shift = {0.25, 0.0625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-05.png", + width = 201, + height = 179, + scale = 0.5, + shift = {0.25, 0.0625} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-06.png", + width = 117, + height = 86, + shift = {0.4375, 0.046875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-06.png", + width = 233, + height = 171, + scale = 0.5, + shift = {0.429688, 0.046875} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-07.png", + width = 120, + height = 96, + shift = {0.390625, 0.03125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-07.png", + width = 240, + height = 192, + scale = 0.5, + shift = {0.398438, 0.03125} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-08.png", + width = 110, + height = 88, + shift = {0.140625, 0.125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-08.png", + width = 219, + height = 175, + scale = 0.5, + shift = {0.148438, 0.132812} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-09.png", + width = 120, + height = 104, + shift = {0.3125, 0.0625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-09.png", + width = 240, + height = 208, + scale = 0.5, + shift = {0.3125, 0.0625} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-10.png", + width = 122, + height = 95, + shift = {0.1875, 0.046875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-10.png", + width = 243, + height = 190, + scale = 0.5, + shift = {0.1875, 0.046875} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-11.png", + width = 125, + height = 93, + shift = {0.390625, 0.0625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-11.png", + width = 249, + height = 185, + scale = 0.5, + shift = {0.398438, 0.0546875} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-12.png", + width = 137, + height = 82, + shift = {0.34375, 0.03125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-12.png", + width = 273, + height = 163, + scale = 0.5, + shift = {0.34375, 0.0390625} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-13.png", + width = 138, + height = 88, + shift = {0.265625, 0.03125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-13.png", + width = 275, + height = 175, + scale = 0.5, + shift = {0.273438, 0.0234375} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-14.png", + width = 121, + height = 108, + shift = {0.203125, 0.046875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-14.png", + width = 241, + height = 215, + scale = 0.5, + shift = {0.195312, 0.0390625} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-15.png", + width = 159, + height = 91, + shift = {0.515625, 0.03125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-15.png", + width = 318, + height = 181, + scale = 0.5, + shift = {0.523438, 0.03125} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-16.png", + width = 109, + height = 112, + shift = {0.046875, 0.015625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-16.png", + width = 217, + height = 224, + scale = 0.5, + shift = {0.0546875, 0.0234375} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-17.png", + width = 166, + height = 114, + shift = {0.234375, 0.046875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-17.png", + width = 332, + height = 228, + scale = 0.5, + shift = {0.226562, 0.046875} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-18.png", + width = 145, + height = 122, + shift = {0.203125, 0.03125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-18.png", + width = 290, + height = 243, + scale = 0.5, + shift = {0.195312, 0.0390625} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-19.png", + width = 175, + height = 113, + shift = {0.609375, 0.015625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-19.png", + width = 349, + height = 225, + scale = 0.5, + shift = {0.609375, 0.0234375} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-20.png", + width = 144, + height = 125, + shift = {0.140625, 0.03125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-20.png", + width = 287, + height = 250, + scale = 0.5, + shift = {0.132812, 0.03125} + }, + } + } +}, +{ + name = "rock-big", + type = "simple-entity", + flags = {"placeable-neutral", "placeable-off-grid", "not-on-map"}, + icon = "__base__/graphics/icons/rock-big.png", + icon_size = 64, + subgroup = "grass", + order = "b[decorative]-l[rock]-b[big]", + collision_box = {{-1.0, -0.9}, {1.0, 1.0}}, + collision_mask = {"object-layer"}, + selection_box = {{-1.2, -1.2}, {1.2, 1.2}}, + minable = + { + mining_particle = "stone-particle", + mining_time = 1, + results = { + {name = "stone", probability = 1, amount_min = 5, amount_max = 10}, + {name = "iron-ore", probability = 1, amount_min = 0, amount_max = 1}, + }, + }, + loot = + { + {item = "stone", probability = 1, count_min = 5, count_max = 10}, + {item = "iron-ore", probability = 1, count_min = 0, count_max = 1} + }, + count_as_rock_for_filtered_deconstruction = true, + mined_sound = { filename = "__base__/sound/deconstruct-bricks.ogg" }, + vehicle_impact_sound = { filename = "__base__/sound/car-stone-impact.ogg", volume = 1.0 }, + render_layer = "object", + max_health = 500, + resistances = + { + { type = "fire", percent = 100 }, + { type = "poison", percent = 100 } + }, + autoplace = { + coverage = 0.0025 * rock_coverage_multiplier, + max_probability = 0.175 * rock_max_prob_multiplier, + order = "a[doodad]-a[rock]-b[big]", + peaks = { + { + noise_layer = "rocks", + noise_octaves_difference = -2, + noise_persistence = 0.9, + } + }, + sharpness = 0.7 + }, + pictures = + { + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-01.png", + width = 94, + height = 64, + shift = {-0.046875, 0.171875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-01.png", + width = 188, + height = 127, + scale = 0.5, + shift = {-0.046875, 0.171875} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-02.png", + width = 98, + height = 68, + shift = {0.4375, 0.125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-02.png", + width = 195, + height = 135, + scale = 0.5, + shift = {0.445312, 0.125} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-03.png", + width = 103, + height = 66, + shift = {0.484375, 0.0625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-03.png", + width = 205, + height = 132, + scale = 0.5, + shift = {0.484375, 0.0546875} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-04.png", + width = 72, + height = 71, + shift = {0.21875, 0.046875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-04.png", + width = 144, + height = 142, + scale = 0.5, + shift = {0.210938, 0.0390625} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-05.png", + width = 65, + height = 54, + shift = {0.015625, 0.21875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-05.png", + width = 130, + height = 107, + scale = 0.5, + shift = {0.0234375, 0.226562} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-06.png", + width = 83, + height = 55, + shift = {0.15625, 0.234375}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-06.png", + width = 165, + height = 109, + scale = 0.5, + shift = {0.15625, 0.226562} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-07.png", + width = 75, + height = 67, + shift = {0.265625, 0.15625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-07.png", + width = 150, + height = 133, + scale = 0.5, + shift = {0.257812, 0.148438} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-08.png", + width = 78, + height = 56, + shift = {0.09375, 0.171875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-08.png", + width = 156, + height = 111, + scale = 0.5, + shift = {0.0859375, 0.179688} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-09.png", + width = 94, + height = 60, + shift = {0.078125, 0.09375}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-09.png", + width = 187, + height = 120, + scale = 0.5, + shift = {0.078125, 0.0859375} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-10.png", + width = 113, + height = 64, + shift = {-0.15625, 0.078125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-10.png", + width = 225, + height = 128, + scale = 0.5, + shift = {-0.15625, 0.0703125} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-11.png", + width = 92, + height = 72, + shift = {0.203125, 0.265625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-11.png", + width = 183, + height = 144, + scale = 0.5, + shift = {0.195312, 0.257812} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-12.png", + width = 79, + height = 69, + shift = {0.046875, 0.15625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-12.png", + width = 158, + height = 138, + scale = 0.5, + shift = {0.0390625, 0.15625} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-13.png", + width = 94, + height = 75, + shift = {0.21875, 0.21875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-13.png", + width = 188, + height = 150, + scale = 0.5, + shift = {0.226562, 0.21875} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-14.png", + width = 93, + height = 80, + shift = {0.125, 0.0625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-14.png", + width = 186, + height = 160, + scale = 0.5, + shift = {0.132812, 0.0625} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-15.png", + width = 91, + height = 87, + shift = {0.3125, -0.09375}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-15.png", + width = 181, + height = 174, + scale = 0.5, + shift = {0.304688, -0.09375} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-16.png", + width = 106, + height = 75, + shift = {0.34375, 0.125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-16.png", + width = 212, + height = 150, + scale = 0.5, + shift = {0.335938, 0.117188} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-17.png", + width = 78, + height = 59, + shift = {0.25, 0.03125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-17.png", + width = 155, + height = 117, + scale = 0.5, + shift = {0.25, 0.0390625} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-18.png", + width = 71, + height = 64, + shift = {0.3125, 0.046875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-18.png", + width = 141, + height = 128, + scale = 0.5, + shift = {0.304688, 0.0390625} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-19.png", + width = 88, + height = 57, + shift = {0.390625, 0.03125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-19.png", + width = 176, + height = 114, + scale = 0.5, + shift = {0.390625, 0.0234375} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-20.png", + width = 60, + height = 63, + shift = {0.140625, 0.03125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-20.png", + width = 120, + height = 125, + scale = 0.5, + shift = {0.148438, 0.03125} + }, + }, + } +}, +{ + name = "rock-medium", + type = "optimized-decorative", + subgroup = "grass", + order = "b[decorative]-l[rock]-c[medium]", + selectable_in_game = false, + collision_box = {{-1.1, -1.1}, {1.1, 1.1}}, + collision_mask = {"item-layer"}, + --selection_box = {{-1.3, -1.3}, {1.3, 1.3}}, + render_layer = "decorative", + autoplace = { + coverage = 0.005 * rock_coverage_multiplier, + max_probability = 0.35 * rock_max_prob_multiplier, + order = "a[doodad]-a[rock]-c[medium]", + peaks = { + { + noise_layer = "rocks", + noise_octaves_difference = -2, + noise_persistence = 0.9, + } + }, + sharpness = 0.7 + }, + pictures = + { + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/rock-medium-01.png", + priority = base_decorative_sprite_priority, + width = 45, + height = 32, + shift = {0.078125, 0.109375}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/hr-rock-medium-01.png", + priority = base_decorative_sprite_priority, + width = 89, + height = 63, + scale = 0.5, + shift = {0.078125, 0.109375} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/rock-medium-02.png", + priority = base_decorative_sprite_priority, + width = 39, + height = 33, + shift = {0.015625, 0.125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/hr-rock-medium-02.png", + priority = base_decorative_sprite_priority, + width = 77, + height = 66, + scale = 0.5, + shift = {0.015625, 0.132812} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/rock-medium-03.png", + priority = base_decorative_sprite_priority, + width = 46, + height = 32, + shift = {0.140625, 0.171875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/hr-rock-medium-03.png", + priority = base_decorative_sprite_priority, + width = 92, + height = 63, + scale = 0.5, + shift = {0.148438, 0.179688} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/rock-medium-04.png", + priority = base_decorative_sprite_priority, + width = 46, + height = 30, + shift = {0, 0.1875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/hr-rock-medium-04.png", + priority = base_decorative_sprite_priority, + width = 91, + height = 59, + scale = 0.5, + shift = {-0.0078125, 0.1875} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/rock-medium-05.png", + priority = base_decorative_sprite_priority, + width = 52, + height = 36, + shift = {0.203125, 0.171875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/hr-rock-medium-05.png", + priority = base_decorative_sprite_priority, + width = 104, + height = 72, + scale = 0.5, + shift = {0.203125, 0.179688} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/rock-medium-06.png", + priority = base_decorative_sprite_priority, + width = 42, + height = 41, + shift = {0.015625, 0.21875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/hr-rock-medium-06.png", + priority = base_decorative_sprite_priority, + width = 83, + height = 82, + scale = 0.5, + shift = {0.015625, 0.21875} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/rock-medium-07.png", + priority = base_decorative_sprite_priority, + width = 56, + height = 33, + shift = {0.0625, 0.3125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/hr-rock-medium-07.png", + priority = base_decorative_sprite_priority, + width = 111, + height = 65, + scale = 0.5, + shift = {0.0625, 0.3125} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/rock-medium-08.png", + priority = base_decorative_sprite_priority, + width = 40, + height = 41, + shift = {0.109375, 0.140625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/hr-rock-medium-08.png", + priority = base_decorative_sprite_priority, + width = 79, + height = 81, + scale = 0.5, + shift = {0.109375, 0.148438} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/rock-medium-09.png", + priority = base_decorative_sprite_priority, + width = 49, + height = 28, + shift = {0.015625, 0.140625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/hr-rock-medium-09.png", + priority = base_decorative_sprite_priority, + width = 98, + height = 56, + scale = 0.5, + shift = {0.015625, 0.140625} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/rock-medium-10.png", + priority = base_decorative_sprite_priority, + width = 46, + height = 34, + shift = {0, 0.140625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/hr-rock-medium-10.png", + priority = base_decorative_sprite_priority, + width = 91, + height = 68, + scale = 0.5, + shift = {0, 0.132812} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/rock-medium-11.png", + priority = base_decorative_sprite_priority, + width = 53, + height = 36, + shift = {-0.03125, 0.125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/hr-rock-medium-11.png", + priority = base_decorative_sprite_priority, + width = 105, + height = 71, + scale = 0.5, + shift = {-0.0234375, 0.125} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/rock-medium-12.png", + priority = base_decorative_sprite_priority, + width = 39, + height = 40, + shift = {0.078125, -0.015625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/hr-rock-medium-12.png", + priority = base_decorative_sprite_priority, + width = 78, + height = 80, + scale = 0.5, + shift = {0.078125, -0.015625} + }, + } + } +}, +{ + name = "rock-small", + type = "optimized-decorative", + subgroup = "grass", + order = "b[decorative]-l[rock]-d[small]", + selectable_in_game = false, + collision_box = {{-0.8, -0.8}, {0.8, 0.8}}, + collision_mask = {"item-layer"}, + render_layer = "decorative", + autoplace = { + coverage = 0.01 * rock_coverage_multiplier, + max_probability = 0.7 * rock_max_prob_multiplier, + order = "a[doodad]-a[rock]-d[small]", + peaks = { + { + noise_layer = "rocks", + noise_octaves_difference = -2, + noise_persistence = 0.9, + } + }, + sharpness = 0.7 + }, + pictures = + { + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-01.png", + priority = base_decorative_sprite_priority, + width = 26, + height = 19, + shift = {0.0625, 0.125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-01.png", + priority = base_decorative_sprite_priority, + width = 51, + height = 37, + scale = 0.5, + shift = {0.0546875, 0.117188} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-02.png", + priority = base_decorative_sprite_priority, + width = 26, + height = 18, + shift = {0.046875, 0.078125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-02.png", + priority = base_decorative_sprite_priority, + width = 52, + height = 35, + scale = 0.5, + shift = {0.0390625, 0.078125} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-03.png", + priority = base_decorative_sprite_priority, + width = 23, + height = 21, + shift = {-0.015625, 0.140625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-03.png", + priority = base_decorative_sprite_priority, + width = 46, + height = 42, + scale = 0.5, + shift = {-0.0078125, 0.148438} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-04.png", + priority = base_decorative_sprite_priority, + width = 27, + height = 17, + shift = {0.015625, 0.15625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-04.png", + priority = base_decorative_sprite_priority, + width = 53, + height = 33, + scale = 0.5, + shift = {0.0234375, 0.15625} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-05.png", + priority = base_decorative_sprite_priority, + width = 24, + height = 23, + shift = {0.046875, 0.140625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-05.png", + priority = base_decorative_sprite_priority, + width = 47, + height = 46, + scale = 0.5, + shift = {0.0390625, 0.140625} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-06.png", + priority = base_decorative_sprite_priority, + width = 31, + height = 21, + shift = {-0.03125, 0.09375}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-06.png", + priority = base_decorative_sprite_priority, + width = 62, + height = 41, + scale = 0.5, + shift = {-0.03125, 0.09375} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-07.png", + priority = base_decorative_sprite_priority, + width = 32, + height = 18, + shift = {-0.015625, 0.078125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-07.png", + priority = base_decorative_sprite_priority, + width = 64, + height = 36, + scale = 0.5, + shift = {-0.015625, 0.0703125} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-08.png", + priority = base_decorative_sprite_priority, + width = 33, + height = 16, + shift = {-0.71875, -0.171875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-08.png", + priority = base_decorative_sprite_priority, + width = 65, + height = 31, + scale = 0.5, + shift = {-0.71875, -0.164062} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-09.png", + priority = base_decorative_sprite_priority, + width = 23, + height = 17, + shift = {-0.09375, 0.109375}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-09.png", + priority = base_decorative_sprite_priority, + width = 46, + height = 34, + scale = 0.5, + shift = {-0.0859375, 0.101562} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-10.png", + priority = base_decorative_sprite_priority, + width = 24, + height = 17, + shift = {0, 0.125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-10.png", + priority = base_decorative_sprite_priority, + width = 48, + height = 34, + scale = 0.5, + shift = {0.0078125, 0.125} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-11.png", + priority = base_decorative_sprite_priority, + width = 26, + height = 17, + shift = {-0.09375, 0.078125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-11.png", + priority = base_decorative_sprite_priority, + width = 51, + height = 33, + scale = 0.5, + shift = {-0.0859375, 0.078125} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-12.png", + priority = base_decorative_sprite_priority, + width = 24, + height = 20, + shift = {0.078125, 0.109375}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-12.png", + priority = base_decorative_sprite_priority, + width = 47, + height = 39, + scale = 0.5, + shift = {0.078125, 0.117188} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-13.png", + priority = base_decorative_sprite_priority, + width = 22, + height = 17, + shift = {0, 0.09375}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-13.png", + priority = base_decorative_sprite_priority, + width = 43, + height = 33, + scale = 0.5, + shift = {0, 0.09375} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-14.png", + priority = base_decorative_sprite_priority, + width = 22, + height = 15, + shift = {0.046875, 0.140625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-14.png", + priority = base_decorative_sprite_priority, + width = 43, + height = 30, + scale = 0.5, + shift = {0.046875, 0.140625} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-15.png", + priority = base_decorative_sprite_priority, + width = 21, + height = 19, + shift = {0, 0.140625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-15.png", + priority = base_decorative_sprite_priority, + width = 41, + height = 37, + scale = 0.5, + shift = {0, 0.140625} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-16.png", + priority = base_decorative_sprite_priority, + width = 23, + height = 17, + shift = {0.015625, 0.125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-16.png", + priority = base_decorative_sprite_priority, + width = 46, + height = 33, + scale = 0.5, + shift = {0.0234375, 0.125} + }, + } + } +}, +{ + name = "rock-tiny", + type = "optimized-decorative", + subgroup = "grass", + order = "b[decorative]-l[rock]-e[tiny]", + selectable_in_game = false, + collision_box = {{-0.1, -0.1}, {0.1, 0.1}}, + collision_mask = {"not-colliding-with-itself"}, + render_layer = "decorative", + autoplace = { + coverage = 0.010 * rock_coverage_multiplier, + max_probability = 0.5 * rock_max_prob_multiplier, + order = "a[doodad]-a[rock]-e[tiny]", + peaks = { + { + noise_layer = "rocks", + noise_octaves_difference = -2, + noise_persistence = 0.9, + } + }, + sharpness = 0.7 + }, + pictures = + { + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-01.png", + priority = base_decorative_sprite_priority, + width = 15, + height = 11, + shift = {0.03125, 0.015625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-01.png", + priority = base_decorative_sprite_priority, + width = 29, + height = 21, + scale = 0.5, + shift = {0.0390625, 0.0234375} + } + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-02.png", + priority = base_decorative_sprite_priority, + width = 15, + height = 10, + shift = {0, 0.03125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-02.png", + priority = base_decorative_sprite_priority, + width = 30, + height = 19, + scale = 0.5, + shift = {0.0078125, 0.0234375} + } + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-03.png", + priority = base_decorative_sprite_priority, + width = 15, + height = 12, + shift = {0.015625, 0.015625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-03.png", + priority = base_decorative_sprite_priority, + width = 29, + height = 24, + scale = 0.5, + shift = {0.0234375, 0.0234375} + } + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-04.png", + priority = base_decorative_sprite_priority, + width = 16, + height = 10, + shift = {0.03125, 0.015625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-04.png", + priority = base_decorative_sprite_priority, + width = 32, + height = 20, + scale = 0.5, + shift = {0.03125, 0.015625} + } + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-05.png", + priority = base_decorative_sprite_priority, + width = 15, + height = 13, + shift = {0, -0.015625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-05.png", + priority = base_decorative_sprite_priority, + width = 29, + height = 25, + scale = 0.5, + shift = {0, -0.0078125} + } + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-06.png", + priority = base_decorative_sprite_priority, + width = 18, + height = 12, + shift = {0, -0.03125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-06.png", + priority = base_decorative_sprite_priority, + width = 36, + height = 24, + scale = 0.5, + shift = {0, -0.0234375} + } + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-07.png", + priority = base_decorative_sprite_priority, + width = 39, + height = 17, + shift = {-0.34375, -0.140625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-07.png", + priority = base_decorative_sprite_priority, + width = 78, + height = 34, + scale = 0.5, + shift = {-0.34375, -0.132812} + } + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-08.png", + priority = base_decorative_sprite_priority, + width = 18, + height = 10, + shift = {-0.03125, 0}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-08.png", + priority = base_decorative_sprite_priority, + width = 35, + height = 19, + scale = 0.5, + shift = {-0.03125, 0} + } + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-09.png", + priority = base_decorative_sprite_priority, + width = 14, + height = 10, + shift = {0.015625, 0.015625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-09.png", + priority = base_decorative_sprite_priority, + width = 28, + height = 20, + scale = 0.5, + shift = {0.0234375, 0.015625} + } + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-10.png", + priority = base_decorative_sprite_priority, + width = 15, + height = 10, + shift = {0.015625, -0.03125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-10.png", + priority = base_decorative_sprite_priority, + width = 29, + height = 20, + scale = 0.5, + shift = {0.0078125, -0.0234375} + } + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-11.png", + priority = base_decorative_sprite_priority, + width = 15, + height = 10, + shift = {0.046875, 0}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-11.png", + priority = base_decorative_sprite_priority, + width = 29, + height = 20, + scale = 0.5, + shift = {0.046875, 0.0078125} + } + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-12.png", + priority = base_decorative_sprite_priority, + width = 15, + height = 11, + shift = {0.015625, 0}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-12.png", + priority = base_decorative_sprite_priority, + width = 29, + height = 22, + scale = 0.5, + shift = {0.015625, 0} + } + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-13.png", + priority = base_decorative_sprite_priority, + width = 14, + height = 10, + shift = {0.03125, 0.015625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-13.png", + priority = base_decorative_sprite_priority, + width = 27, + height = 19, + scale = 0.5, + shift = {0.03125, 0.015625} + } + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-14.png", + priority = base_decorative_sprite_priority, + width = 14, + height = 10, + shift = {0.015625, 0.015625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-14.png", + priority = base_decorative_sprite_priority, + width = 27, + height = 19, + scale = 0.5, + shift = {0.0078125, 0.0078125} + } + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-15.png", + priority = base_decorative_sprite_priority, + width = 13, + height = 11, + shift = {0, 0.015625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-15.png", + priority = base_decorative_sprite_priority, + width = 26, + height = 22, + scale = 0.5, + shift = {0.0078125, 0.015625} + } + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-16.png", + priority = base_decorative_sprite_priority, + width = 14, + height = 10, + shift = {0.03125, 0}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-16.png", + priority = base_decorative_sprite_priority, + width = 27, + height = 20, + scale = 0.5, + shift = {0.03125, 0.0078125} + } + } + } +}, +{ + name = "sand-rock-big", + type = "simple-entity", + flags = {"placeable-neutral", "placeable-off-grid", "not-on-map"}, + icon = "__base__/graphics/icons/rock-big.png", + icon_size = 64, + subgroup = "wrecks", + order = "b[decorative]-l[rock]-b[big]", + collision_box = {{-0.75, -0.75}, {0.75, 0.75}}, + collision_mask = {"object-layer"}, + selection_box = {{-1.0, -1.0}, {1.0, 0.75}}, + render_layer = "object", + max_health = 500, + autoplace = { + coverage = 0.0025 * rock_coverage_multiplier, + max_probability = 0.175 * rock_max_prob_multiplier, + order = "a[doodad]-a[rock]-b[big]", + peaks = { + { + noise_layer = "trees-1", + noise_octaves_difference = -2, + noise_persistence = 0.9, + } + }, + sharpness = 0.7 + }, + minable = + { + mining_particle = "stone-particle", + mining_time = 1, + results = { + {name = "stone", amount_min = 5, amount_max = 10}, + {name = "copper-ore", amount_min = 0, amount_max = 1}, + }, + }, + loot = + { + {item = "stone", probability = 1, count_min = 0, count_max = 10} + }, + resistances = + { + { type = "fire", percent = 100 }, + { type = "poison", percent = 100 } + }, + count_as_rock_for_filtered_deconstruction = true, + mined_sound = { filename = "__base__/sound/deconstruct-bricks.ogg" }, + vehicle_impact_sound = { filename = "__base__/sound/car-stone-impact.ogg", volume = 1.0 }, + pictures = + { + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-01.png", + width = 105, + height = 69, + shift = {0.296875, -0.4}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-01.png", + width = 209, + height = 138, + shift = {0.304688, -0.4}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-02.png", + width = 82, + height = 65, + shift = {0.0, 0.046875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-02.png", + width = 165, + height = 129, + shift = {0.0, 0.0390625}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-03.png", + width = 76, + height = 69, + shift = {0.14375, 0.0}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-03.png", + width = 151, + height = 139, + shift = {0.151562, 0.0}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-04.png", + width = 108, + height = 55, + shift = {0.398438, 0.0}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-04.png", + width = 216, + height = 110, + shift = {0.390625, 0.0}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-05.png", + width = 77, + height = 74, + shift = {0.328125, 0.0625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-05.png", + width = 154, + height = 147, + shift = {0.328125, 0.0703125}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-06.png", + width = 77, + height = 66, + shift = {0.16875, -0.1}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-06.png", + width = 154, + height = 132, + shift = {0.16875, -0.1}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-07.png", + width = 96, + height = 65, + shift = {0.3, -0.2}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-07.png", + width = 193, + height = 130, + shift = {0.3, -0.2}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-08.png", + width = 68, + height = 59, + shift = {0.0, 0.0}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-08.png", + width = 136, + height = 117, + shift = {0.0, 0.0}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-09.png", + width = 78, + height = 58, + shift = {0.2, 0.0}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-09.png", + width = 157, + height = 115, + shift = {0.1, 0.0}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-10.png", + width = 99, + height = 77, + shift = {0.325, -0.1}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-10.png", + width = 198, + height = 153, + shift = {0.325, -0.1}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-11.png", + width = 95, + height = 58, + shift = {0.453125, 0.0}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-11.png", + width = 190, + height = 115, + shift = {0.453125, 0.0}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-12.png", + width = 115, + height = 63, + shift = {0.546875, -0.015625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-12.png", + width = 229, + height = 126, + shift = {0.539062, -0.015625}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-13.png", + width = 75, + height = 63, + shift = {0.0625, 0.171875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-13.png", + width = 151, + height = 125, + shift = {0.0703125, 0.179688}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-14.png", + width = 69, + height = 59, + shift = {0.153125, 0.0}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-14.png", + width = 137, + height = 117, + shift = {0.160938, 0.0}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-15.png", + width = 100, + height = 71, + shift = {0.234375, -0.203125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-15.png", + width = 201, + height = 141, + shift = {0.242188, -0.195312}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-16.png", + width = 104, + height = 77, + shift = {0.359375, -0.1}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-16.png", + width = 209, + height = 154, + shift = {0.351562, -0.1}, + scale = 0.5, + }, + }, + }, +}, +{ + name = "sand-rock-medium", + type = "optimized-decorative", + subgroup = "wrecks", + order = "d[remnants]-d[ship-wreck-grass]-b[small]", + collision_box = {{-1.5, -0.5}, {1.5, 0.5}}, + collision_mask = {"item-layer"}, + selection_box = {{-1.7, -0.6}, {1.7, 0.6}}, + selectable_in_game = false, + render_layer = "floor", + autoplace = { + coverage = 0.004 * rock_coverage_multiplier, + max_probability = 0.27999999999999998 * rock_max_prob_multiplier, + order = "a[doodad]-a[rock]-c[medium]", + peaks = { + { + noise_layer = "trees-1", + noise_octaves_difference = -2, + noise_persistence = 0.9, + } + }, + sharpness = 0.7 + }, + pictures = + { + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-01.png", + priority = base_decorative_sprite_priority, + width = 67, + height = 41, + shift = {0.328125, 0.515625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-01.png", + priority = base_decorative_sprite_priority, + width = 134, + height = 82, + shift = {0.328125, 0.515625}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-02.png", + priority = base_decorative_sprite_priority, + width = 55, + height = 40, + shift = {0.15625, 0.5625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-02.png", + priority = base_decorative_sprite_priority, + width = 110, + height = 79, + shift = {0.15625, 0.570312}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-03.png", + priority = base_decorative_sprite_priority, + width = 44, + height = 30, + shift = {0.34375, 0.484375}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-03.png", + priority = base_decorative_sprite_priority, + width = 90, + height = 60, + shift = {0.34375, 0.484375}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-04.png", + priority = base_decorative_sprite_priority, + width = 55, + height = 45, + shift = {0.296875, 0.484375}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-04.png", + priority = base_decorative_sprite_priority, + width = 110, + height = 89, + shift = {0.296875, 0.476562}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-05.png", + priority = base_decorative_sprite_priority, + width = 53, + height = 38, + shift = {0.359375, 0.25}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-05.png", + priority = base_decorative_sprite_priority, + width = 106, + height = 76, + shift = {0.359375, 0.25}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-06.png", + priority = base_decorative_sprite_priority, + width = 50, + height = 46, + shift = {0.4375, 0.296875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-06.png", + priority = base_decorative_sprite_priority, + width = 100, + height = 92, + shift = {0.4375, 0.296875}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-07.png", + priority = base_decorative_sprite_priority, + width = 41, + height = 41, + shift = {0.59375, 0.40625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-07.png", + priority = base_decorative_sprite_priority, + width = 82, + height = 83, + shift = {0.59375, 0.398438}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-08.png", + priority = base_decorative_sprite_priority, + width = 62, + height = 46, + shift = {0.59375, 0.328125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-08.png", + priority = base_decorative_sprite_priority, + width = 123, + height = 92, + shift = {0.601562, 0.328125}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-09.png", + priority = base_decorative_sprite_priority, + width = 73, + height = 38, + shift = {0.5625, 0.3125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-09.png", + priority = base_decorative_sprite_priority, + width = 146, + height = 76, + shift = {0.5625, 0.3125}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-10.png", + priority = base_decorative_sprite_priority, + width = 56, + height = 39, + shift = {0.46875, 0.453125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-10.png", + priority = base_decorative_sprite_priority, + width = 112, + height = 77, + shift = {0.46875, 0.460938}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-11.png", + priority = base_decorative_sprite_priority, + width = 46, + height = 30, + shift = {0.4375, 0.515625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-11.png", + priority = base_decorative_sprite_priority, + width = 91, + height = 61, + shift = {0.445312, 0.507812}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-12.png", + priority = base_decorative_sprite_priority, + width = 53, + height = 42, + shift = {0.390625, 0.453125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-12.png", + priority = base_decorative_sprite_priority, + width = 105, + height = 84, + shift = {0.398438, 0.453125}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-13.png", + priority = base_decorative_sprite_priority, + width = 46, + height = 36, + shift = {0.375, 0.640625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-13.png", + priority = base_decorative_sprite_priority, + width = 94, + height = 73, + shift = {0.375, 0.632812}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-14.png", + priority = base_decorative_sprite_priority, + width = 61, + height = 45, + shift = {0.359375, 0.578125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-14.png", + priority = base_decorative_sprite_priority, + width = 122, + height = 89, + shift = {0.359375, 0.570312}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-15.png", + priority = base_decorative_sprite_priority, + width = 49, + height = 33, + shift = {0.1875, 0.765625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-15.png", + priority = base_decorative_sprite_priority, + width = 98, + height = 65, + shift = {0.1875, 0.773438}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-16.png", + priority = base_decorative_sprite_priority, + width = 72, + height = 38, + shift = {0.109375, 0.71875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-16.png", + priority = base_decorative_sprite_priority, + width = 144, + height = 76, + shift = {0.109375, 0.71875}, + scale = 0.5, + }, + }, + } +}, + +{ + name = "sand-rock-small", + type = "optimized-decorative", + subgroup = "wrecks", + order = "d[remnants]-d[ship-wreck-grass]-b[small]", + collision_box = {{-1.5, -0.5}, {1.5, 0.5}}, + collision_mask = {"not-colliding-with-itself"}, + selection_box = {{-1.7, -0.6}, {1.7, 0.6}}, + selectable_in_game = false, + render_layer = "floor", + autoplace = { + coverage = 0.011000000000000001 * rock_coverage_multiplier, + max_probability = 0.77000000000000002 * rock_max_prob_multiplier, + order = "a[doodad]-a[rock]-d[small]", + peaks = { + { + noise_layer = "trees-1", + noise_octaves_difference = -2, + noise_persistence = 0.9, + } + }, + sharpness = 0.7 + }, + pictures = + { + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-01.png", + priority = base_decorative_sprite_priority, + width = 28, + height = 23, + shift = {0.40625, 0.484375}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-01.png", + priority = base_decorative_sprite_priority, + width = 56, + height = 45, + shift = {0.40625, 0.476562}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-02.png", + priority = base_decorative_sprite_priority, + width = 27, + height = 22, + shift = {0.296875, 0.484375}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-02.png", + priority = base_decorative_sprite_priority, + width = 54, + height = 45, + shift = {0.296875, 0.476562}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-03.png", + priority = base_decorative_sprite_priority, + width = 22, + height = 20, + shift = {0.328125, 0.53125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-03.png", + priority = base_decorative_sprite_priority, + width = 44, + height = 40, + shift = {0.328125, 0.53125}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-04.png", + priority = base_decorative_sprite_priority, + width = 30, + height = 22, + shift = {0.265625, 0.59375}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-04.png", + priority = base_decorative_sprite_priority, + width = 60, + height = 43, + shift = {0.265625, 0.601562}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-05.png", + priority = base_decorative_sprite_priority, + width = 26, + height = 24, + shift = {0.296875, 0.46875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-05.png", + priority = base_decorative_sprite_priority, + width = 52, + height = 48, + shift = {0.296875, 0.46875}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-06.png", + priority = base_decorative_sprite_priority, + width = 29, + height = 20, + shift = {0.546875, 0.53125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-06.png", + priority = base_decorative_sprite_priority, + width = 57, + height = 39, + shift = {0.554688, 0.523438}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-07.png", + priority = base_decorative_sprite_priority, + width = 36, + height = 21, + shift = {0.578125, 0.546875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-07.png", + priority = base_decorative_sprite_priority, + width = 73, + height = 41, + shift = {0.570312, 0.539062}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-08.png", + priority = base_decorative_sprite_priority, + width = 25, + height = 23, + shift = {0.640625, 0.390625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-08.png", + priority = base_decorative_sprite_priority, + width = 50, + height = 46, + shift = {0.640625, 0.390625}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-09.png", + priority = base_decorative_sprite_priority, + width = 26, + height = 22, + shift = {0.671875, 0.34375}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-09.png", + priority = base_decorative_sprite_priority, + width = 52, + height = 43, + shift = {0.671875, 0.335938}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-10.png", + priority = base_decorative_sprite_priority, + width = 32, + height = 20, + shift = {0.625, 0.40625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-10.png", + priority = base_decorative_sprite_priority, + width = 63, + height = 39, + shift = {0.632812, 0.398438}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-11.png", + priority = base_decorative_sprite_priority, + width = 29, + height = 21, + shift = {0.453125, 0.609375}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-11.png", + priority = base_decorative_sprite_priority, + width = 57, + height = 41, + shift = {0.460938, 0.617188}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-12.png", + priority = base_decorative_sprite_priority, + width = 34, + height = 26, + shift = {0.46875, 0.5625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-12.png", + priority = base_decorative_sprite_priority, + width = 67, + height = 51, + shift = {0.460938, 0.570312}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-13.png", + priority = base_decorative_sprite_priority, + width = 35, + height = 19, + shift = {0.484375, 0.796875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-13.png", + priority = base_decorative_sprite_priority, + width = 70, + height = 37, + shift = {0.484375, 0.789062}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-14.png", + priority = base_decorative_sprite_priority, + width = 32, + height = 24, + shift = {0.1875, 0.90625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-14.png", + priority = base_decorative_sprite_priority, + width = 63, + height = 48, + shift = {0.179688, 0.90625}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-15.png", + priority = base_decorative_sprite_priority, + width = 28, + height = 24, + shift = {0.140625, 0.78125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-15.png", + priority = base_decorative_sprite_priority, + width = 56, + height = 48, + shift = {0.140625, 0.78125}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-16.png", + priority = base_decorative_sprite_priority, + width = 37, + height = 23, + shift = {-0.03125, 0.78125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-16.png", + priority = base_decorative_sprite_priority, + width = 74, + height = 46, + shift = {-0.03125, 0.78125}, + scale = 0.5, + }, + }, + }, +}, +{ + name = "sand-decal", + type = "optimized-decorative", + subgroup = "grass", + order = "b[decorative]-b[red-desert-decal]", + collision_box = {{-6, -6}, {6, 6}}, + collision_mask = {"doodad-layer", "water-tile", "not-colliding-with-itself"}, + render_layer = "decals", + tile_layer = default_decal_layer, -- despite the name, this is not sand exclusive decal; draw under stone path and concrete + autoplace = { + max_probability = 0.05, + order = "a[doodad]-b[decal]", + peaks = { + { + influence = 0.2, + noise_layer = "sand-decal", + --noise_octaves_difference = -2, + noise_octaves_difference = -4, + noise_persistence = 0.9 + }, + { + influence = 0.05, + } + }, + sharpness = 0.1 + }, + pictures = + { + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-01.png", + width = 488, + height = 322, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-01.png", + width = 975, + height = 664, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-02.png", + width = 314, + height = 239, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-02.png", + width = 628, + height = 477, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-03.png", + width = 260, + height = 166, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-03.png", + width = 519, + height = 331, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-04.png", + width = 435, + height = 391, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-04.png", + width = 870, + height = 781, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-05.png", + width = 115, + height = 81, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-05.png", + width = 230, + height = 161, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-06.png", + width = 70, + height = 55, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-06.png", + width = 140, + height = 110, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-07.png", + width = 143, + height = 122, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-07.png", + width = 285, + height = 243, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-08.png", + width = 78, + height = 43, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-08.png", + width = 156, + height = 85, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-09.png", + width = 106, + height = 76, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-09.png", + width = 212, + height = 152, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-10.png", + width = 117, + height = 99, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-10.png", + width = 233, + height = 197, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-11.png", + width = 162, + height = 207, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-11.png", + width = 324, + height = 413, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-12.png", + width = 252, + height = 244, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-12.png", + width = 504, + height = 488, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-13.png", + width = 165, + height = 153, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-13.png", + width = 329, + height = 305, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-14.png", + width = 406, + height = 362, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-14.png", + width = 811, + height = 724, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-15.png", + width = 133, + height = 131, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-15.png", + width = 266, + height = 262, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-16.png", + width = 461, + height = 356, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-16.png", + width = 921, + height = 712, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-17.png", + width = 361, + height = 198, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-17.png", + width = 722, + height = 395, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-18.png", + width = 94, + height = 145, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-18.png", + width = 187, + height = 289, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-19.png", + width = 500, + height = 187, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-19.png", + width = 999, + height = 374, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-20.png", + width = 392, + height = 200, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-20.png", + width = 783, + height = 399, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-21.png", + width = 334, + height = 203, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-21.png", + width = 668, + height = 406, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-22.png", + width = 219, + height = 159, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-22.png", + width = 437, + height = 318, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-23.png", + width = 197, + height = 123, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-23.png", + width = 394, + height = 246, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-24.png", + width = 181, + height = 146, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-24.png", + width = 361, + height = 291, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-25.png", + width = 645, + height = 641, + slice_y = 4, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-25.png", + width = 1290, + height = 1281, + slice_y = 4, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-26.png", + width = 157, + height = 87, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-26.png", + width = 314, + height = 174, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-27.png", + width = 174, + height = 132, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-27.png", + width = 348, + height = 264, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-28.png", + width = 244, + height = 179, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-28.png", + width = 488, + height = 357, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-29.png", + width = 297, + height = 317, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-29.png", + width = 594, + height = 634, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-30.png", + width = 98, + height = 108, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-30.png", + width = 195, + height = 215, + scale = 0.5 + }, + }, + }, +}, +{ + name = "sand-dune-decal", + type = "optimized-decorative", + subgroup = "grass", + order = "b[decorative]-b[red-desert-decal]", + collision_box = {{-4, -4}, {4, 4}}, + collision_mask = {"doodad-layer", "water-tile", "not-colliding-with-itself"}, + render_layer = "decals", + tile_layer = default_decal_layer, + autoplace = + { + order = "a[doodad]-b[decal]", + sharpness = 0.2, + max_probability = 0.04, + peaks = + { + peak, + { + influence = 0.5, + }, + { + influence = 1, + noise_layer = "sand-dune-decal", + noise_octaves_difference = -3, + noise_persistence = 0.7, + } + }, + tile_restriction = { "sand-1" } + }, + pictures = + { + --dune + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-00.png", + width = 105, + height = 84, + shift = util.by_pixel(-8.5, 0), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-00.png", + width = 212, + height = 168, + shift = util.by_pixel(-8, 0), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-01.png", + width = 88, + height = 73, + shift = util.by_pixel(-3, -3.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-01.png", + width = 211, + height = 148, + shift = util.by_pixel(5.75, -3.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-02.png", + width = 130, + height = 91, + shift = util.by_pixel(3, 1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-02.png", + width = 260, + height = 184, + shift = util.by_pixel(3, 1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-03.png", + width = 61, + height = 90, + shift = util.by_pixel(0.5, 2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-03.png", + width = 129, + height = 181, + shift = util.by_pixel(0.75, 1.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-04.png", + width = 95, + height = 92, + shift = util.by_pixel(-3.5, -1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-04.png", + width = 196, + height = 184, + shift = util.by_pixel(-3.5, -1.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-05.png", + width = 107, + height = 92, + shift = util.by_pixel(-1.5, -1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-05.png", + width = 215, + height = 184, + shift = util.by_pixel(-1.25, -1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-06.png", + width = 108, + height = 89, + shift = util.by_pixel(6, 4.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-06.png", + width = 218, + height = 179, + shift = util.by_pixel(6.5, 4.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-07.png", + width = 125, + height = 91, + shift = util.by_pixel(17.5, 3.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-07.png", + width = 250, + height = 183, + shift = util.by_pixel(17.5, 3.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-08.png", + width = 130, + height = 86, + shift = util.by_pixel(5, 1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-08.png", + width = 260, + height = 176, + shift = util.by_pixel(5, 0.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-09.png", + width = 129, + height = 92, + shift = util.by_pixel(-5.5, -1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-09.png", + width = 260, + height = 184, + shift = util.by_pixel(-5.5, -1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-10.png", + width = 115, + height = 91, + shift = util.by_pixel(-14.5, 1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-10.png", + width = 233, + height = 183, + shift = util.by_pixel(-13.75, 1.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-11.png", + width = 85, + height = 92, + shift = util.by_pixel(-9.5, 2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-11.png", + width = 172, + height = 184, + shift = util.by_pixel(-9.5, 2), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-12.png", + width = 129, + height = 82, + shift = util.by_pixel(2.5, -7), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-12.png", + width = 260, + height = 166, + shift = util.by_pixel(2.5, -6.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-13.png", + width = 129, + height = 85, + shift = util.by_pixel(4.5, -0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-13.png", + width = 259, + height = 172, + shift = util.by_pixel(4.75, -1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-14.png", + width = 98, + height = 92, + shift = util.by_pixel(-3, -2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-14.png", + width = 199, + height = 184, + shift = util.by_pixel(-2.25, -2), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-15.png", + width = 104, + height = 92, + shift = util.by_pixel(9, -3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-15.png", + width = 214, + height = 184, + shift = util.by_pixel(8.5, -3), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-16.png", + width = 80, + height = 91, + shift = util.by_pixel(-8, -4.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-16.png", + width = 162, + height = 182, + shift = util.by_pixel(-8, -4.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-17.png", + width = 110, + height = 76, + shift = util.by_pixel(-3, 0), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-17.png", + width = 222, + height = 153, + shift = util.by_pixel(-3, -0.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-18.png", + width = 122, + height = 92, + shift = util.by_pixel(4, -3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-18.png", + width = 247, + height = 184, + shift = util.by_pixel(4.25, -2.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-19.png", + width = 103, + height = 92, + shift = util.by_pixel(-6.5, -3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-19.png", + width = 211, + height = 184, + shift = util.by_pixel(-5.75, -3), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-20.png", + width = 121, + height = 91, + shift = util.by_pixel(-0.5, 2.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-20.png", + width = 248, + height = 183, + shift = util.by_pixel(-1.5, 2.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-21.png", + width = 87, + height = 91, + shift = util.by_pixel(6.5, 1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-21.png", + width = 176, + height = 184, + shift = util.by_pixel(6.5, 1.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-22.png", + width = 104, + height = 92, + shift = util.by_pixel(9, -2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-22.png", + width = 208, + height = 185, + shift = util.by_pixel(9, -1.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-23.png", + width = 113, + height = 91, + shift = util.by_pixel(-3.5, -1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-23.png", + width = 227, + height = 184, + shift = util.by_pixel(-3.75, -1.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-24.png", + width = 78, + height = 92, + shift = util.by_pixel(5, -1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-24.png", + width = 158, + height = 186, + shift = util.by_pixel(4.5, -1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-25.png", + width = 129, + height = 91, + shift = util.by_pixel(1.5, -1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-25.png", + width = 260, + height = 184, + shift = util.by_pixel(1.5, -1.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-26.png", + width = 66, + height = 92, + shift = util.by_pixel(-1, -1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-26.png", + width = 134, + height = 184, + shift = util.by_pixel(-0.5, -1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-27.png", + width = 63, + height = 82, + shift = util.by_pixel(26.5, 1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-27.png", + width = 127, + height = 165, + shift = util.by_pixel(26.25, 1.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-28.png", + width = 129, + height = 79, + shift = util.by_pixel(-2.5, -4.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-28.png", + width = 258, + height = 158, + shift = util.by_pixel(-2.5, -4.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-29.png", + width = 89, + height = 92, + shift = util.by_pixel(-3.5, -2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-29.png", + width = 180, + height = 184, + shift = util.by_pixel(-3.5, -2), + scale = 0.5 + }, + }, + }, +}, +{ + name = "stone-decal", + type = "optimized-decorative", + subgroup = "grass", + order = "b[decorative]-b[red-desert-decal]", + collision_box = {{-4, -4}, {4, 4}}, + collision_mask = {"doodad-layer", "water-tile", "not-colliding-with-itself"}, + render_layer = "decals", + tile_layer = default_decal_layer, -- under stone-path + autoplace = + { + max_probability = 0.01, + order = "a[doodad]-b[decal]", + peaks = { + { + noise_layer = "stone-decal", + noise_octaves_difference = -2, + noise_persistence = 0.9 + } + }, + sharpness = 0.3 + }, + pictures = + { + --lightDecal + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-00.png", + width = 199, + height = 149, + shift = util.by_pixel(4.5, -2.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-00.png", + width = 400, + height = 299, + shift = util.by_pixel(4.5, -2.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-01.png", + width = 210, + height = 160, + shift = util.by_pixel(-1, 2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-01.png", + width = 419, + height = 320, + shift = util.by_pixel(-0.75, 2), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-02.png", + width = 208, + height = 142, + shift = util.by_pixel(-1, 2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-02.png", + width = 417, + height = 287, + shift = util.by_pixel(-1.25, 1.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-03.png", + width = 211, + height = 149, + shift = util.by_pixel(-0.5, 5.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-03.png", + width = 421, + height = 298, + shift = util.by_pixel(-0.25, 5.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-04.png", + width = 198, + height = 151, + shift = util.by_pixel(6, 3.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-04.png", + width = 396, + height = 302, + shift = util.by_pixel(6, 4), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-05.png", + width = 205, + height = 147, + shift = util.by_pixel(-2.5, 7.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-05.png", + width = 408, + height = 295, + shift = util.by_pixel(-2.5, 7.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-06.png", + width = 208, + height = 158, + shift = util.by_pixel(-1, 3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-06.png", + width = 417, + height = 317, + shift = util.by_pixel(-1.25, 3.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-07.png", + width = 209, + height = 155, + shift = util.by_pixel(0.5, 2.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-07.png", + width = 419, + height = 312, + shift = util.by_pixel(0.75, 2.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-08.png", + width = 206, + height = 158, + shift = util.by_pixel(-2, 2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-08.png", + width = 413, + height = 317, + shift = util.by_pixel(-2.25, 2.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-09.png", + width = 201, + height = 155, + shift = util.by_pixel(0.5, 1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-09.png", + width = 403, + height = 310, + shift = util.by_pixel(0.25, 1.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-10.png", + width = 206, + height = 153, + shift = util.by_pixel(-1, 1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-10.png", + width = 411, + height = 307, + shift = util.by_pixel(-0.75, 1.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-11.png", + width = 210, + height = 147, + shift = util.by_pixel(0, -0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-11.png", + width = 421, + height = 295, + shift = util.by_pixel(-0.25, -0.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-12.png", + width = 210, + height = 140, + shift = util.by_pixel(-1, -7), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-12.png", + width = 420, + height = 280, + shift = util.by_pixel(-0.5, -7), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-13.png", + width = 201, + height = 156, + shift = util.by_pixel(0.5, 3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-13.png", + width = 403, + height = 311, + shift = util.by_pixel(0.75, 3.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-14.png", + width = 209, + height = 152, + shift = util.by_pixel(0.5, 2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-14.png", + width = 418, + height = 304, + shift = util.by_pixel(0, 2), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-15.png", + width = 199, + height = 142, + shift = util.by_pixel(-3.5, 6), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-15.png", + width = 398, + height = 284, + shift = util.by_pixel(-3.5, 6.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-16.png", + width = 204, + height = 154, + shift = util.by_pixel(4, -1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-16.png", + width = 406, + height = 313, + shift = util.by_pixel(4, 0.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-17.png", + width = 210, + height = 147, + shift = util.by_pixel(1, 4.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-17.png", + width = 420, + height = 294, + shift = util.by_pixel(0.5, 4.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-18.png", + width = 189, + height = 145, + shift = util.by_pixel(0.5, 5.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-18.png", + width = 379, + height = 289, + shift = util.by_pixel(0.25, 5.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-19.png", + width = 201, + height = 155, + shift = util.by_pixel(-5.5, 1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-19.png", + width = 401, + height = 311, + shift = util.by_pixel(-5.25, 1.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-20.png", + width = 209, + height = 158, + shift = util.by_pixel(0.5, 1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-20.png", + width = 418, + height = 315, + shift = util.by_pixel(0.5, 1.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-21.png", + width = 208, + height = 157, + shift = util.by_pixel(1, 3.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-21.png", + width = 418, + height = 314, + shift = util.by_pixel(1, 3), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-22.png", + width = 211, + height = 135, + shift = util.by_pixel(-0.5, 0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-22.png", + width = 421, + height = 270, + shift = util.by_pixel(-0.25, 1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-23.png", + width = 202, + height = 145, + shift = util.by_pixel(2, -2.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-23.png", + width = 403, + height = 290, + shift = util.by_pixel(2.25, -2.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-24.png", + width = 209, + height = 158, + shift = util.by_pixel(-0.5, 2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-24.png", + width = 418, + height = 315, + shift = util.by_pixel(-0.5, 2.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-25.png", + width = 207, + height = 155, + shift = util.by_pixel(-2.5, 4.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-25.png", + width = 414, + height = 310, + shift = util.by_pixel(-2, 4), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-26.png", + width = 201, + height = 154, + shift = util.by_pixel(-3.5, 5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-26.png", + width = 403, + height = 306, + shift = util.by_pixel(-3.75, 5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-27.png", + width = 208, + height = 151, + shift = util.by_pixel(1, 0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-27.png", + width = 416, + height = 303, + shift = util.by_pixel(1, 0.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-28.png", + width = 211, + height = 155, + shift = util.by_pixel(-0.5, 2.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-28.png", + width = 422, + height = 311, + shift = util.by_pixel(0, 2.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-29.png", + width = 203, + height = 146, + shift = util.by_pixel(-3.5, 2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-29.png", + width = 406, + height = 292, + shift = util.by_pixel(-3.5, 2), + scale = 0.5 + }, + }, + }, +}, +} diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/decorative/rocks.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/decorative/rocks.lua new file mode 100644 index 0000000..e15b50c --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/decorative/rocks.lua @@ -0,0 +1,80 @@ +local data_util = require('data_util') + +-- decals for asteroids +-- rocks floating in space + + +local tints = { + grey = {177,183,187}, +} + + +-- ROCKS +-- get base rocks +local base_rocks_list = require("rocks-base") +local base_rocks = {} +for _, rock in pairs(base_rocks_list) do + base_rocks[rock.name] = rock +end + +-- make a new colored rock from a base rock and restrict to certain biome tiles by tag +local make_rock = function(name, color, base_names, tile_restriction, multiplier) + if table_size(tile_restriction) > 0 then + color = name + for _, base_name in pairs(base_names) do + local rock = table.deepcopy(base_rocks[base_name]) + rock.name = data_util.mod_prefix.. base_name .. '-' .. name + rock.autoplace.tile_restriction = tile_restriction + if rock.autoplace.coverage then rock.autoplace.coverage = rock.autoplace.coverage * multiplier end + if rock.autoplace.max_probability then rock.autoplace.max_probability = rock.autoplace.max_probability * multiplier end + + for _, pic in pairs(rock.pictures) do + pic.tint = tints[color] + if pic.hr_version then + pic.hr_version.tint = tints[color] + end + end + + rock.localised_name = {"entity-name.small-asteroid"} + -- volcanic has generally more rocks + data:extend({rock}) + end + end +end + +make_rock( + 'space', 'grey', + { + 'rock-huge', + 'rock-big', + }, + {data_util.mod_prefix.."space", data_util.mod_prefix.."asteroid"}, + 0.25 +) + +make_rock( + 'asteroid', 'grey', + { + 'rock-huge', + 'rock-big', + 'rock-medium', + 'rock-small', + 'rock-tiny', + 'sand-rock-big', + 'sand-rock-medium', + 'sand-rock-small', + }, + {data_util.mod_prefix.."asteroid"}, + 1 +) + +-- non-sand shared decals +make_rock( + 'space', 'grey', + { + 'stone-decal', + 'sand-decal' + }, + {data_util.mod_prefix.."asteroid"}, + 2 +) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/ancient.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/ancient.lua new file mode 100644 index 0000000..022136c --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/ancient.lua @@ -0,0 +1,339 @@ +local data_util = require("data_util") + +data:extend({ + { + name = data_util.mod_prefix .. "pyramid-a", + type = "simple-entity", + map_color = {r = 0, g = 0, b = 0}, + flags = {"placeable-neutral", "placeable-off-grid"}, + icon = "__space-exploration-graphics__/graphics/icons/pyramid.png", + icon_size = 64, + order = "a[ancient]-p[pyramid]-a", + collision_box = {{-9, -7}, {9, 7}}, + collision_mask = {"item-layer","object-layer","player-layer","water-tile"}, + selection_box = {{-9, -7}, {9, 7}}, + render_layer = "object", + selectable_in_game = false, + picture = + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/entity/cartouche/pyramid-a.png", + width = 622+64, + height = 571+32, + shift = {0,-1+0.25}, + scale = 1, + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/cartouche/pyramid-a-shadow.png", + width = 743, + height = 584, + shift = {1.5-2/32,-1+8/32}, + scale = 1, + } + } + } + }, + { + name = data_util.mod_prefix .. "pyramid-b", + type = "simple-entity", + map_color = {r = 0, g = 0, b = 0}, + flags = {"placeable-neutral", "placeable-off-grid"}, + icon = "__space-exploration-graphics__/graphics/icons/pyramid.png", + icon_size = 64, + order = "a[ancient]-p[pyramid]-b", + collision_box = {{-9, -7}, {9, 7}}, + collision_mask = {"item-layer","object-layer","player-layer","water-tile"}, + selection_box = {{-9, -7}, {9, 7}}, + render_layer = "object", + selectable_in_game = false, + picture = + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/entity/cartouche/pyramid-b.png", + width = 611+64, + height = 554+32, + shift = {0,-1.5+0.25}, + scale = 1, + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/cartouche/pyramid-b-shadow.png", + width = 867, + height = 568, + shift = {3.5+2/32,-1.5+8/32}, + scale = 1, + } + } + } + }, + { + name = data_util.mod_prefix .. "pyramid-c", + type = "simple-entity", + map_color = {r = 0, g = 0, b = 0}, + flags = {"placeable-neutral", "placeable-off-grid"}, + icon = "__space-exploration-graphics__/graphics/icons/pyramid.png", + icon_size = 64, + order = "a[ancient]-p[pyramid]-c", + collision_box = {{-9, -7}, {9, 7}}, + collision_mask = {"item-layer","object-layer","player-layer","water-tile"}, + selection_box = {{-9, -7}, {9, 7}}, + render_layer = "object", + selectable_in_game = false, + picture = + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/entity/cartouche/pyramid-c.png", + width = 623+64, + height = 571+32, + shift = {0,-1+0.25}, + scale = 1, + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/cartouche/pyramid-c-shadow.png", + width = 976, + height = 584, + shift = {5+4/32,-1+8/32}, + scale = 1, + } + } + } + }, + { + name = data_util.mod_prefix .. "cartouche-a", + type = "simple-entity", + flags = {"placeable-neutral", "placeable-off-grid", "not-on-map"}, + icon = "__space-exploration-graphics__/graphics/icons/cartouche-a.png", + icon_size = 64, + order = "a[ancient]-c[cartouche]-a[a]", + collision_box = {{-9, -7}, {9, 7}}, + collision_mask = {"not-colliding-with-itself"}, + selection_box = {{-9, -7}, {9, 7}}, + render_layer = "floor", + selectable_in_game = false, + picture = + { + filename = "__space-exploration-graphics__/graphics/entity/cartouche/cartouche-a.png", + width = 1154, + height = 821, + shift = {0,0}, + scale = 0.5, + } + }, + { + name = data_util.mod_prefix .. "cartouche-b-a", + type = "simple-entity", + flags = {"placeable-neutral", "placeable-off-grid", "not-on-map"}, + icon = "__space-exploration-graphics__/graphics/icons/cartouche-b-a.png", + icon_size = 64, + order = "a[ancient]-c[cartouche]-b[b]-a", + collision_box = {{-4, -3}, {4, 3}}, + collision_mask = {"not-colliding-with-itself"}, + selection_box = {{-4, -3}, {4, 3}}, + selectable_in_game = false, + render_layer = "floor", + picture = + { + filename = "__space-exploration-graphics__/graphics/entity/cartouche/cartouche-b-a.png", + width = 520, + height = 373, + shift = {0,0}, + scale = 0.5, + } + }, + { + name = data_util.mod_prefix .. "cartouche-b-b", + type = "simple-entity", + flags = {"placeable-neutral", "placeable-off-grid", "not-on-map"}, + icon = "__space-exploration-graphics__/graphics/icons/cartouche-b-b.png", + icon_size = 64, + order = "a[ancient]-c[cartouche]-b[b]-b", + collision_box = {{-1, -1}, {1, 1}}, + collision_mask = {"not-colliding-with-itself"}, + selection_box = {{-1, -1}, {1, 1}}, + selectable_in_game = false, + render_layer = "floor", + picture = + { + filename = "__space-exploration-graphics__/graphics/entity/cartouche/cartouche-b-b.png", + width = 520, + height = 373, + shift = {0,0}, + scale = 0.5, + } + }, + { + type = "container", + name = data_util.mod_prefix .. "cartouche-chest", -- "rocket-launch-pad-chest" + circuit_connector_sprites = nil, + circuit_wire_connection_point = nil, + circuit_wire_max_distance = 0, + close_sound = { + filename = "__base__/sound/metallic-chest-close.ogg", + volume = 0.7 + }, + collision_box = {{-0.95, -0.95}, {0.95, 0.95}}, + selection_box = {{-0.95, -0.95}, {0.95, 0.95}}, + corpse = "medium-remnants", + flags = { + "placeable-neutral", + "player-creation" + }, + icon = "__space-exploration-graphics__/graphics/icons/cartouche-chest.png", + icon_size = 64, + inventory_size = 10, + max_health = 1000, + open_sound = { + filename = "__base__/sound/metallic-chest-open.ogg", + volume = 0.65 + }, + order = "z-z", + picture = { + layers = { + { + filename = "__space-exploration-graphics__/graphics/entity/cartouche/chest.png", + height = 128, + priority = "extra-high", + shift = { 0, 0 }, + width = 128, + scale = 0.5 + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/cartouche/chest-shadow.png", + height = 96, + priority = "extra-high", + shift = { 8/32, 8/32 }, + width = 160, + scale = 0.5 + }, + } + }, + vehicle_impact_sound = { + filename = "__base__/sound/car-metal-impact.ogg", + volume = 0.65 + } + }, +}) + +for i = 1, 64, 1 do + local large = { + name = data_util.mod_prefix .. "glyph-a-"..i, + type = "simple-entity", + flags = {"placeable-neutral", "placeable-off-grid", "not-on-map"}, + icon = "__space-exploration-graphics__/graphics/icons/glyph/glyph-a-"..i..".png", + icon_size = 64, + order = "a[ancient]-c[cartouche]-g[glyph]-a[a]-"..i, + collision_box = {{-1, -1}, {1, 1}}, + collision_mask = {"not-colliding-with-itself"}, + selection_box = {{-1, -1}, {1, 1}}, + selectable_in_game = false, + render_layer = "lower-object", + picture = + { + filename = "__space-exploration-graphics__/graphics/entity/cartouche/glyphs-a-metal.png", + width = 2048/8, + height = 1536/8, + x = ((i-1)%8)*2048/8, + y = math.floor((i-1)/8)*1536/8, + shift = {0,0}, + scale = 0.5, + }, + localised_name = {"entity-name.glyph"} + } + local small = table.deepcopy(large) + small.name = small.name .. "-small" + small.picture.scale = small.picture.scale * 0.5 + data:extend({small, large}) +end + +for i = 1, 64, 1 do + local large = { + name = data_util.mod_prefix .. "glyph-b-"..i, + type = "simple-entity", + flags = {"placeable-neutral", "placeable-off-grid", "not-on-map"}, + icon = "__space-exploration-graphics__/graphics/icons/glyph/glyph-b-"..i..".png", + icon_size = 64, + order = "a[ancient]-c[cartouche]-g[glyph]-b[b]-"..i, + collision_box = {{-4, -3}, {4, 3}}, + collision_mask = {"not-colliding-with-itself"}, + selection_box = {{-4, -3}, {4, 3}}, + selectable_in_game = false, + render_layer = "lower-object", + picture = + { + filename = "__space-exploration-graphics__/graphics/entity/cartouche/glyphs-b-metal.png", + width = 1280/8, + height = 1024/8, + x = ((i-1)%8)*1280/8, + y = math.floor((i-1)/8)*1024/8, + shift = {0,0}, + scale = 0.5, + }, + localised_name = {"entity-name.glyph"} + } + local small = table.deepcopy(large) + small.name = small.name .. "-small" + small.picture.scale = small.picture.scale * 0.65 + data:extend({small, large}) +end + +data:extend({ + --[[{ + name = data_util.mod_prefix .. "lightbeam-a", + type = "projectile", + flags = {"placeable-neutral", "placeable-off-grid"}, + icon = "__space-exploration-graphics__/graphics/icons/pyramid.png", + icon_size = 64, + order = "a[ancient]-p[pyramid]-a", + collision_box = {{-9, -7}, {9, 7}}, + collision_mask = {"item-layer","object-layer","player-layer","water-tile"}, + selection_box = {{-9, -7}, {9, 7}}, + render_layer = "object", + selectable_in_game = false, + picture = + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/entity/cartouche/pyramid-a.png", + width = 622, + height = 571, + shift = {0,-1}, + scale = 1, + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/cartouche/pyramid-a-shadow.png", + width = 743, + height = 584, + shift = {1.5-2/32,-1+8/32}, + scale = 1, + } + } + } + },]]-- + { + type = "projectile", + name = data_util.mod_prefix .. "lightbeam-a", + acceleration = 0, + rotatable = false, + animation = { + filename = "__space-exploration-graphics__/graphics/entity/cartouche/lightbeam-a.png", + frame_count = 1, + width = 296, + height = 193, + line_length = 1, + priority = "high", + shift = { 0, 0 }, + scale = 1, + blend_mode = "additive" + }, + flags = { "not-on-map" }, + light = { intensity = 2, size = 16, color={r=1,g=0.9,b=0.8}}, + }, + +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/astrometric-gravimetric.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/astrometric-gravimetric.lua new file mode 100644 index 0000000..054883e --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/astrometric-gravimetric.lua @@ -0,0 +1,356 @@ +local data_util = require("data_util") + +local pipe_pictures = { + north = blank_image, + east = { + filename = "__space-exploration-graphics-4__/graphics/entity/astrometrics-laboratory/sr/pipe-right.png", + width = 10/2, + height = 60/2, + priority = "extra-high", + shift = util.by_pixel(-18, 1), + hr_version = { + filename = "__space-exploration-graphics-4__/graphics/entity/astrometrics-laboratory/hr/pipe-right.png", + width = 10, + height = 60, + priority = "extra-high", + shift = util.by_pixel(-18, 1), + scale = 0.5, + }, + }, + north = { + filename = "__space-exploration-graphics-4__/graphics/entity/astrometrics-laboratory/sr/pipe-top.png", + width = 128/2, + height = 128/2, + priority = "extra-high", + shift = util.by_pixel(0, 22), + hr_version = { + filename = "__space-exploration-graphics-4__/graphics/entity/astrometrics-laboratory/hr/pipe-top.png", + width = 128, + height = 128, + priority = "extra-high", + shift = util.by_pixel(0, 22), + scale = 0.5, + }, + }, + south = { + filename = "__space-exploration-graphics-4__/graphics/entity/astrometrics-laboratory/sr/pipe-bottom.png", + width = 70/2, + height = 44/2, + priority = "extra-high", + shift = util.by_pixel(3, -27), + hr_version = { + filename = "__space-exploration-graphics-4__/graphics/entity/astrometrics-laboratory/hr/pipe-bottom.png", + width = 70, + height = 44, + priority = "extra-high", + shift = util.by_pixel(3, -27), + scale = 0.5, + }, + }, + west = { + filename = "__space-exploration-graphics-4__/graphics/entity/astrometrics-laboratory/sr/pipe-left.png", + width = 10/2, + height = 64/2, + priority = "extra-high", + shift = util.by_pixel(18, 2), + hr_version = { + filename = "__space-exploration-graphics-4__/graphics/entity/astrometrics-laboratory/hr/pipe-left.png", + width = 10, + height = 64, + priority = "extra-high", + shift = util.by_pixel(18, 2), + scale = 0.5, + }, + } +} + +data:extend({ + { + type = "assembling-machine", + name = data_util.mod_prefix .. "space-astrometrics-laboratory", + icon = "__space-exploration-graphics__/graphics/icons/astrometrics-laboratory.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = {hardness = 0.2, mining_time = 1, result = data_util.mod_prefix .. "space-astrometrics-laboratory"}, + max_health = 700, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{-2.3, -2.3}, {2.3, 2.3}}, + selection_box = {{-2.5, -2.5}, {2.5, 2.5}}, + drawing_box = {{-2.5, -3.5}, {2.5, 2.5}}, + resistances = + { + { + type = "impact", + percent = 10 + } + }, + fluid_boxes = + { + { + production_type = "input", + pipe_picture = pipe_pictures, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {0, -3} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + pipe_picture = pipe_pictures, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {0, 3} }}, + secondary_draw_orders = { north = -1 } + }, + off_when_no_fluid_recipe = true + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + apparent_volume = 1.5, + idle_sound = { + filename = "__base__/sound/idle1.ogg", + volume = 0.6 + }, + sound = { + { + filename = "__base__/sound/assembling-machine-t1-1.ogg", + volume = 0.8 + }, + { + filename = "__base__/sound/assembling-machine-t1-2.ogg", + volume = 0.8 + } + } + }, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + spaceship_collision_layer, + }, + animation = + { + layers = + { + { + filename = "__space-exploration-graphics-4__/graphics/entity/astrometrics-laboratory/sr/astrometrics-laboratory.png", + priority = "high", + width = 2752/8/2, + height = 3120/8/2, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(0, -11), + animation_speed = 1, + hr_version = { + filename = "__space-exploration-graphics-4__/graphics/entity/astrometrics-laboratory/hr/astrometrics-laboratory.png", + priority = "high", + width = 2752/8, + height = 3120/8, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(0, -11), + animation_speed = 1, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-4__/graphics/entity/astrometrics-laboratory/sr/astrometrics-laboratory-shadow.png", + priority = "high", + width = 330/2, + height = 220/2, + frame_count = 1, + line_length = 1, + repeat_count = 64, + shift = util.by_pixel(26, 24), + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-4__/graphics/entity/astrometrics-laboratory/hr/astrometrics-laboratory-shadow.png", + priority = "high", + width = 330, + height = 220, + frame_count = 1, + line_length = 1, + repeat_count = 64, + shift = util.by_pixel(26, 24), + scale = 0.5, + } + }, + }, + }, + crafting_categories = {"space-astrometrics"}, + crafting_speed = 1, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + energy_usage = "1000kW", + ingredient_count = 12, + module_specification = + { + module_slots = 4 + }, + allowed_effects = {"consumption", "speed", "pollution"}, -- not "productivity", + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.5, size = 8, shift = {0.0, 0.0}, color = {r = 1, g = 0.9, b = 0.5}} + }, + }, + }, + { + type = "assembling-machine", + name = data_util.mod_prefix .. "space-gravimetrics-laboratory", + icon = "__space-exploration-graphics__/graphics/icons/gravimetrics-laboratory.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = {hardness = 0.2, mining_time = 1, result = data_util.mod_prefix .. "space-gravimetrics-laboratory"}, + max_health = 700, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{-2.3, -2.3}, {2.3, 2.3}}, + selection_box = {{-2.5, -2.5}, {2.5, 2.5}}, + drawing_box = {{-2.5, -3.5}, {2.5, 2.5}}, + resistances = + { + { + type = "impact", + percent = 10 + } + }, + fluid_boxes = + { + { + production_type = "input", + pipe_picture = pipe_pictures, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {0, -3} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + pipe_picture = pipe_pictures, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {0, 3} }}, + secondary_draw_orders = { north = -1 } + }, + off_when_no_fluid_recipe = true + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + apparent_volume = 1.5, + idle_sound = { + filename = "__base__/sound/idle1.ogg", + volume = 0.6 + }, + sound = { + { + filename = "__base__/sound/assembling-machine-t1-1.ogg", + volume = 0.8 + }, + { + filename = "__base__/sound/assembling-machine-t1-2.ogg", + volume = 0.8 + } + } + }, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + spaceship_collision_layer, + }, + animation = + { + layers = + { + { + filename = "__space-exploration-graphics-4__/graphics/entity/gravimetrics-laboratory/sr/gravimetrics-laboratory.png", + priority = "high", + width = 2752/8/2, + height = 3120/8/2, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(0, -11), + animation_speed = 1, + hr_version = { + filename = "__space-exploration-graphics-4__/graphics/entity/gravimetrics-laboratory/hr/gravimetrics-laboratory.png", + priority = "high", + width = 2752/8, + height = 3120/8, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(0, -11), + animation_speed = 1, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-4__/graphics/entity/gravimetrics-laboratory/sr/gravimetrics-laboratory-shadow.png", + priority = "high", + width = 330/2, + height = 220/2, + frame_count = 1, + line_length = 1, + repeat_count = 64, + shift = util.by_pixel(26, 24), + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-4__/graphics/entity/gravimetrics-laboratory/hr/gravimetrics-laboratory-shadow.png", + priority = "high", + width = 330, + height = 220, + frame_count = 1, + line_length = 1, + repeat_count = 64, + shift = util.by_pixel(26, 24), + scale = 0.5, + } + }, + }, + }, + crafting_categories = {"space-gravimetrics", "arcosphere"}, + crafting_speed = 1, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + energy_usage = "1000kW", + ingredient_count = 12, + module_specification = + { + module_slots = 4 + }, + allowed_effects = {"consumption", "speed", "pollution"}, -- not "productivity", + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.5, size = 8, shift = {0.0, 0.0}, color = {r = 100/255, g = 48/255, b = 1}} + }, + }, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/cargo-rocket.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/cargo-rocket.lua new file mode 100644 index 0000000..0a4ce75 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/cargo-rocket.lua @@ -0,0 +1,423 @@ +local data_util = require("data_util") + +local side_thruster_offset = 40 +local bottom_thruster_offset = 89 + +data:extend({ + { + type = "container", + name = data_util.mod_prefix .. "cargo-rocket-cargo-pod", -- "rocket-launch-pad-chest" + circuit_connector_sprites = nil, + circuit_wire_connection_point = nil, + circuit_wire_max_distance = 0, + close_sound = { + filename = "__base__/sound/metallic-chest-close.ogg", + volume = 0.7 + }, + collision_box = {{-0.95, -0.95}, {0.95, 0.95}}, + selection_box = {{-0.95, -0.95}, {0.95, 0.95}}, + corpse = "medium-remnants", + flags = { + "placeable-neutral", + "player-creation" + }, + icon = "__space-exploration-graphics__/graphics/icons/cargo-pod.png", + icon_size = 64, + inventory_size = math.ceil(rocket_capacity / 0.9 / 100 ) * 10, --can fit all partial stacks if 9/10 pods land + max_health = 1000, + minable = { + mining_time = 0.2, + result = data_util.mod_prefix .. "cargo-rocket-cargo-pod" + }, + open_sound = { + filename = "__base__/sound/metallic-chest-open.ogg", + volume = 0.65 + }, + order = "z-z", + picture = { + layers = { + { + filename = "__space-exploration-graphics__/graphics/entity/cargo-pod/cargo-pod.png", + height = 194, + priority = "extra-high", + shift = { 1/32, 1/32 }, + width = 147, + scale = 0.35 + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/cargo-pod/cargo-pod-shadow.png", + height = 164, + priority = "extra-high", + shift = { 10/32, 6/32 }, + width = 167, + scale = 0.35 + }, + } + }, + resistances = { + { + percent = 90, + type = "fire" + }, + { + percent = 90, + type = "explosion" + }, + { + percent = 100, + type = "poison" + }, + { + percent = 60, + type = "impact" + }, + { + percent = 100, + type = "meteor" + } + }, + vehicle_impact_sound = { + filename = "__base__/sound/car-metal-impact.ogg", + volume = 0.65 + } + }, + { + -- this only exists for the animation + -- it won't be selectable or affected normally + -- when ready to launch the required dummy item will be added + -- then launch will be triggered by script + type = "rocket-silo-rocket", + name = data_util.mod_prefix .. "cargo-rocket", + inventory_size = 1, + collision_box = { { -2, -7 }, { 2, 7 } }, + collision_mask = { "not-colliding-with-itself" }, + dying_explosion = "massive-explosion", + shadow_slave_entity = "rocket-silo-rocket-shadow", + engine_starting_speed = 1 / (5.5 * 60), + flying_speed = 1 / (2000 * 60), + flying_acceleration = 0.01, + flags = { "not-on-map" }, + flying_trigger = { + { + sound = { + { + filename = "__base__/sound/silo-rocket.ogg", + volume = 1.8 + } + }, + type = "play-sound" + } + }, + glow_light = + { + intensity = 1, + size = 30, + shift = {0, 1.5}, + color = {r = 1.0, g = 1.0, b = 1.0} + }, + + rising_speed = 1 / (7 * 60), + rocket_initial_offset = {0, 5}, + rocket_rise_offset = {0, -5.75}, + rocket_launch_offset = {0, -256}, + rocket_render_layer_switch_distance = 10.5,--7.5, + full_render_layer_switch_distance = 12,--9, + effects_fade_in_start_distance = 7.5,--4.5, + effects_fade_in_end_distance = 10.5,--7.5, + shadow_fade_out_start_ratio = 0.25, + shadow_fade_out_end_ratio = 0.75, + rocket_visible_distance_from_center = 2.75, + + --[[ + rocket_shadow_sprite = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/09-rocket-shadow/09-rocket-shadow.png", + height = 128, + priority = "medium", + shift = { + -2.5, + 2 + }, + width = 394 + }, + rocket_sprite = { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/02-11-rocket/02-rocket.png", + height = 394, + shift = { + 0, + 5.5 - (394 - 288) / 2 / 32 -- keep base aligned with flare + }, + width = 192 + }, + ]]-- + + rocket_sprite = util.add_shift_offset(util.by_pixel(0, 32*3.5), --util.mul_shift(rocket_rise_offset, -1), + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/02-rocket.png", + width = 310/2, + height = 950/2, + shift = util.by_pixel(-5, -27), + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/hr-02-rocket.png", + width = 310, + height = 950, + shift = util.by_pixel(-5, -27), + scale = 0.5 + } + }), + + rocket_shadow_sprite = util.add_shift_offset(util.by_pixel(-146, -120), + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/09-rocket-shadow.png", + priority = "medium", + width = 788/2, + height = 256/2, + draw_as_shadow = true, + shift = util.by_pixel(146, 120), + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/hr-09-rocket-shadow.png", + priority = "medium", + width = 788, + height = 256, + draw_as_shadow = true, + shift = util.by_pixel(146, 121), + scale = 0.5 + } + }), + + + rocket_glare_overlay_sprite = util.add_shift_offset(util.by_pixel(0, 112+112), + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/03-rocket-over-glare.png", + blend_mode = "additive", + width = 481, + height = 481, + shift = util.by_pixel(-2, -2 + bottom_thruster_offset), + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/hr-03-rocket-over-glare.png", + blend_mode = "additive", + width = 954, + height = 954, + shift = util.by_pixel(0, 0 + bottom_thruster_offset), + scale = 0.5 + } + }), + rocket_smoke_top1_animation = util.add_shift_offset(util.by_pixel(0-66, -112+28+232+32), + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/12-rocket-smoke.png", + priority = "medium", + tint = { r = 0.8, g = 0.8, b = 1, a = 0.8 }, + --tint = { r = 1, g = 0, b = 0, a = 0.8 }, + width = 41, + height = 145, + frame_count = 24, + line_length = 8, + animation_speed = 0.5, + scale = 1.5*1.3, + shift = util.by_pixel(-2, -2 + side_thruster_offset), + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/hr-12-rocket-smoke.png", + priority = "medium", + tint = { r = 0.8, g = 0.8, b = 1, a = 0.8 }, + --tint = { r = 1, g = 0, b = 0, a = 0.8 }, + width = 80, + height = 286, + frame_count = 24, + line_length = 8, + animation_speed = 0.5, + scale = 1.5/2*1.3, + shift = util.by_pixel(-1, -3 + side_thruster_offset), + } + }), + rocket_smoke_top2_animation = util.add_shift_offset(util.by_pixel(0+17, -112+28+265+32), + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/12-rocket-smoke.png", + priority = "medium", + tint = { r = 0.8, g = 0.8, b = 1, a = 0.8 }, + --tint = { r = 0, g = 1, b = 0, a = 0.8 }, + width = 41, + height = 145, + frame_count = 24, + line_length = 8, + animation_speed = 0.5, + scale = 1.5*1.3, + shift = util.by_pixel(-2, -2 + side_thruster_offset), + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/hr-12-rocket-smoke.png", + priority = "medium", + tint = { r = 0.8, g = 0.8, b = 1, a = 0.8 }, + --tint = { r = 0, g = 1, b = 0, a = 0.8 }, + width = 80, + height = 286, + frame_count = 24, + line_length = 8, + animation_speed = 0.5, + scale = 1.5/2*1.3, + shift = util.by_pixel(-1, -3 + side_thruster_offset), + } + }), + rocket_smoke_top3_animation = util.add_shift_offset(util.by_pixel(0+48, -112+28+252+32), + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/12-rocket-smoke.png", + priority = "medium", + tint = { r = 0.8, g = 0.8, b = 1, a = 0.8 }, + --tint = { r = 0, g = 0, b = 1, a = 0.8 }, + width = 41, + height = 145, + frame_count = 24, + line_length = 8, + animation_speed = 0.5, + scale = 1.5*1.3, + shift = util.by_pixel(-2, -2 + side_thruster_offset), + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/hr-12-rocket-smoke.png", + priority = "medium", + tint = { r = 0.8, g = 0.8, b = 1, a = 0.8 }, + --tint = { r = 0, g = 0, b = 1, a = 0.8 }, + width = 80, + height = 286, + frame_count = 24, + line_length = 8, + animation_speed = 0.5, + scale = 1.5/2*1.3, + shift = util.by_pixel(-1, -3 + side_thruster_offset), + } + }), + + rocket_smoke_bottom1_animation = util.add_shift_offset(util.by_pixel(0-69, -112+28+205+32), + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/12-rocket-smoke.png", + priority = "medium", + tint = { r = 0.8, g = 0.8, b = 1, a = 0.7 }, + --tint = { r = 1, g = 1, b = 0, a = 0.8 }, + width = 41, + height = 145, + frame_count = 24, + line_length = 8, + animation_speed = 0.5, + scale = 1.5*1.3, + shift = util.by_pixel(-2, -2 + bottom_thruster_offset), + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/hr-12-rocket-smoke.png", + priority = "medium", + tint = { r = 0.8, g = 0.8, b = 1, a = 0.7 }, + --tint = { r = 1, g = 1, b = 0, a = 0.8 }, + width = 80, + height = 286, + frame_count = 24, + line_length = 8, + animation_speed = 0.5, + scale = 1.5/2*1.3, + shift = util.by_pixel(-1, -3 + bottom_thruster_offset), + } + }), + rocket_smoke_bottom2_animation = util.add_shift_offset(util.by_pixel(0+62, -112+28+207+32), + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/12-rocket-smoke.png", + priority = "medium", + tint = { r = 0.8, g = 0.8, b = 1, a = 0.7 }, + --tint = { r = 0, g = 1, b = 1, a = 0.8 }, + width = 41, + height = 145, + frame_count = 24, + line_length = 8, + animation_speed = 0.5, + scale = 1.5*1.3, + shift = util.by_pixel(-2, -2 + bottom_thruster_offset), + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/hr-12-rocket-smoke.png", + priority = "medium", + tint = { r = 0.8, g = 0.8, b = 1, a = 0.7 }, + --tint = { r = 0, g = 1, b = 1, a = 0.8 }, + width = 80, + height = 286, + frame_count = 24, + line_length = 8, + animation_speed = 0.5, + scale = 1.5/2*1.3, + shift = util.by_pixel(-1, -3 + bottom_thruster_offset), + } + }), + rocket_flame_animation = util.add_shift_offset(util.by_pixel(-1, 280-16), + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/10-jet-flame.png", + priority = "medium", + blend_mode = "additive", + width = 87, + height = 128, + frame_count = 8, + line_length = 8, + animation_speed = 0.5, + scale = 1.13, + shift = util.by_pixel(-0.5, -2 + bottom_thruster_offset), + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/hr-10-jet-flame.png", + priority = "medium", + blend_mode = "additive", + width = 172, + height = 256, + frame_count = 8, + line_length = 8, + animation_speed = 0.5, + scale = 1.13/2, + shift = util.by_pixel(-1, -2 + bottom_thruster_offset), + } + }), + rocket_flame_left_animation = util.add_shift_offset(util.by_pixel(-32-28+3, 280-68+1), + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/10-jet-flame.png", + priority = "medium", + blend_mode = "additive", + width = 87, + height = 128, + frame_count = 8, + line_length = 8, + animation_speed = 0.5, + scale = 0.345*1.15, + shift = util.by_pixel(-0.5, -2 + bottom_thruster_offset), + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/hr-10-jet-flame.png", + priority = "medium", + blend_mode = "additive", + width = 172, + height = 256, + frame_count = 8, + line_length = 8, + animation_speed = 0.5, + scale = 0.345/2*1.15, + shift = util.by_pixel(-1, -2 + bottom_thruster_offset), + } + }), + rocket_flame_left_rotation = 0.0611, + + rocket_flame_right_animation = util.add_shift_offset(util.by_pixel(32+16, 280-50), + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/10-jet-flame.png", + priority = "medium", + blend_mode = "additive", + width = 87, + height = 128, + frame_count = 8, + line_length = 8, + animation_speed = 0.5, + scale = 0.368*1.15, + shift = util.by_pixel(-0.5, -2 + bottom_thruster_offset), + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/hr-10-jet-flame.png", + priority = "medium", + blend_mode = "additive", + width = 172, + height = 256, + frame_count = 8, + line_length = 8, + animation_speed = 0.5, + scale = 0.368/2*1.15, + shift = util.by_pixel(-1, -2 + bottom_thruster_offset), + } + }), + rocket_flame_right_rotation = 0.952, + + + } +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/condenser-turbine.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/condenser-turbine.lua new file mode 100644 index 0000000..5339ceb --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/condenser-turbine.lua @@ -0,0 +1,403 @@ +local data_util = require("data_util") +--[[ +fluid box connections don't need to line up just find the right entity. +furnace is the placed entity, short but wide, outputs at front +Outpts piped heat to the turbine +turbine ies long and thin, collects from side + +has a connection top and right +always goes on the bottom or left +move horizontal version down 1 pixel so animation shows + +if the turbine is aove the the animation won't work +make sure furnace has outputs at both lockations +]]-- +local selectable = false +local idle_horizontal = { + layers = { + { + filename = "__space-exploration-graphics-3__/graphics/entity/condenser-turbine/condenser-turbine-H.png", + frame_count = 1, + height = 123, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/condenser-turbine/hr-condenser-turbine-H.png", + frame_count = 1, + height = 245, + line_length = 1, + scale = 0.5, + shift = { + 0, + -0.0859375 + }, + width = 320 + }, + line_length = 1, + shift = { + 0, + -0.078125 + }, + width = 160 + }, + { + draw_as_shadow = true, + filename = "__base__/graphics/entity/steam-turbine/steam-turbine-H-shadow.png", + frame_count = 1, + height = 74, + hr_version = { + draw_as_shadow = true, + filename = "__base__/graphics/entity/steam-turbine/hr-steam-turbine-H-shadow.png", + frame_count = 1, + height = 150, + line_length = 1, + scale = 0.5, + shift = { + 0.890625, + 0.5625 + }, + width = 435 + }, + line_length = 1, + shift = { + 0.8984375, + 0.5625 + }, + width = 217 + } + } +} +local idle_vertical = { + layers = { + { + filename = "__space-exploration-graphics-3__/graphics/entity/condenser-turbine/condenser-turbine-V.png", + frame_count = 1, + height = 173, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/condenser-turbine/hr-condenser-turbine-V.png", + frame_count = 1, + height = 347, + line_length = 1, + scale = 0.5, + shift = { + 0.1484375, + 0.2109375 + }, + width = 217 + }, + line_length = 1, + shift = { + 0.15625, + 0.203125 + }, + width = 108 + }, + { + draw_as_shadow = true, + filename = "__base__/graphics/entity/steam-turbine/steam-turbine-V-shadow.png", + frame_count = 1, + height = 131, + hr_version = { + draw_as_shadow = true, + filename = "__base__/graphics/entity/steam-turbine/hr-steam-turbine-V-shadow.png", + frame_count = 1, + height = 260, + line_length = 1, + repeat_count = 1, + scale = 0.5, + shift = { + 1.234375, + 0.765625 + }, + width = 302 + }, + line_length = 1, + repeat_count = 1, + shift = { + 1.234375, + 0.765625 + }, + width = 151 + } + } +} +local blank_image = { + filename = "__space-exploration-graphics__/graphics/blank.png", + width = 1, + height = 1, + frame_count = 1, + line_length = 1, + shift = { 0, 0 }, +} +data:extend({ + + { + type = "storage-tank", + name = data_util.mod_prefix .. "condenser-turbine-tank", + icon = "__space-exploration-graphics__/graphics/icons/condenser-turbine.png", + icon_size = 64, + flags = {"placeable-player", "player-creation", "not-deconstructable", "not-blueprintable"}, + max_health = 500, + order = "zz", + collision_box = {{-1.5, -0.25},{1.5, 0.25}}, + selection_box = {{-1.5, -0.25},{1.5, 0.25}}, + collision_mask = {"not-colliding-with-itself"}, + se_allow_in_space = true, + selectable_in_game = selectable, + fluid_box = + { + filter = data_util.mod_prefix .. "decompressing-steam", + base_area = 0.25, -- gets multiplied by 100 by engine + base_level = 0, -- pull fluid in + pipe_connections = + { + { position = {0, -1} }, -- connects to generator + { position = {1, -1} }, -- connects to furnace + { position = {-1, -1} }, -- connects to furnace + }, + }, + window_bounding_box = {{-0.0, 0.0}, {0.0, 1.0}}, + pictures = { + picture = blank_image, + window_background = blank_image, + fluid_background = blank_image, + flow_sprite = blank_image, + gas_flow = blank_image, + }, + flow_length_in_ticks = 360, + circuit_wire_max_distance = 0 + }, + { + type = "generator", + name = data_util.mod_prefix .. "condenser-turbine-generator", + icon = "__space-exploration-graphics__/graphics/icons/condenser-turbine.png", + icon_size = 64, + alert_icon_shift = { 0, 0.375 }, + burns_fluid = false, + fluid_usage_per_tick = 1, + selectable_in_game = selectable, + collision_box = { { -1.25, -1.6 }, { 1.25, 1.6 } }, -- short and wide thin + --collision_box = { { -1, -0.1 }, { 1, 0.1 } }, -- sits on y 2.25 + collision_mask = {"not-colliding-with-itself"}, + selection_box = { { -1.25, -1.6 }, { 1.25, 1.6 } }, + order = "zzz", + corpse = "big-remnants", + dying_explosion = "medium-explosion", + effectivity = 1, + energy_source = { type = "electric", usage_priority = "secondary-output" }, + fast_replaceable_group = "steam-engine", + flags = { "placeable-neutral", "player-creation", "placeable-off-grid" }, + fluid_box = { + base_area = 0.25, + base_level = -1, + filter = data_util.mod_prefix .. "decompressing-steam", + --filter = "steam", + height = 2, + minimum_temperature = 15, + pipe_connections = { + { + position = { 0, 1.65 }, + type = "input-output" + }, + { + position = { 0, -1.65 }, + type = "input-output" + }, + }, + production_type = "input-output" + }, + horizontal_animation = { + layers = { + { + filename = "__space-exploration-graphics-3__/graphics/entity/condenser-turbine/condenser-turbine-H.png", + frame_count = 8, + height = 123, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/condenser-turbine/hr-condenser-turbine-H.png", + frame_count = 8, + height = 245, + line_length = 4, + scale = 0.5, + shift = { + 0, + -0.0859375 - 1/32 + }, + width = 320 + }, + line_length = 4, + shift = { + 0, + -0.078125 - 1/32 + }, + width = 160 + }, + } + }, + max_health = 300, + maximum_temperature = 500, + min_perceived_performance = 0.25, + performance_to_sound_speedup = 0.5, + resistances = { + { + percent = 70, + type = "fire" + } + }, + smoke = { + { + east_position = { + 0.75, + -0.75 + }, + frequency = 0.3125, + name = "turbine-smoke", + north_position = { + 0, + -1 + }, + slow_down_factor = 1, + starting_frame_deviation = 60, + starting_vertical_speed = 0.08 + } + }, + vehicle_impact_sound = { + filename = "__base__/sound/car-metal-impact.ogg", + volume = 0.65 + }, + vertical_animation = { + layers = { + { + filename = "__space-exploration-graphics-3__/graphics/entity/condenser-turbine/condenser-turbine-V.png", + frame_count = 8, + height = 173, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/condenser-turbine/hr-condenser-turbine-V.png", + frame_count = 8, + height = 347, + line_length = 4, + scale = 0.5, + shift = { + 0.1484375, + 0.2109375 - 1/32 + }, + width = 217 + }, + line_length = 4, + shift = { + 0.15625, + 0.203125 - 1/32 + }, + width = 108 + } + } + }, + working_sound = { + match_speed_to_activity = true, + sound = { + filename = "__base__/sound/steam-engine-90bpm.ogg", + volume = 0.6 + } + } + }, + { + type = "furnace", + name = data_util.mod_prefix .. "condenser-turbine", + icon = "__space-exploration-graphics__/graphics/icons/condenser-turbine.png", + collision_box = { { -1.3, -2.15 }, { 1.3, 2.15 } }, + --selection_box = { { -1.5, -2.5 }, { 1.5, 2.5 } }, + selection_box = { { -1.3, -2.15 }, { 1.3, 2.15 } }, + fluid_boxes = + { + { + production_type = "input", + filter = "steam", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 1.5, + base_level = -1, + filter = "steam", + pipe_connections = { + { type="input-output", position = {0, -3} } + }, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 1.5, + base_level = 1, + filter = "water", + pipe_connections = { + { type="output", position = {0, 3} } + }, + secondary_draw_orders = { north = -1 } + }, + { + filter = data_util.mod_prefix .. "decompressing-steam", + --filter = "steam", + production_type = "output", + --pipe_picture = assembler3pipepictures(), + base_area = 1.5, + base_level = 1, + pipe_connections = { + { type="output", position = {1, 2.25} }, + { type="output", position = {-1, 2.25} }, + }, + secondary_draw_orders = { north = -1 } + }, + }, + minable = { + mining_time = 0.3, + result = data_util.mod_prefix .. "condenser-turbine", + }, + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + max_health = 500, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + drawing_box = {{-1.5, -3}, {1.5, 4}}, + resistances = { + { type = "poison", percent = 100 }, + { type = "fire", percent = 80 }, + { type = "explosion", percent = 50 } + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + apparent_volume = 1.5, + idle_sound = { + filename = "__base__/sound/idle1.ogg", + volume = 0.6 + }, + sound = { + filename = "__base__/sound/steam-engine-90bpm.ogg", + volume = 0.6 + } + }, + always_draw_idle_animation = true, + source_inventory_size = 0, + result_inventory_size = 0, + animation = nil, + idle_animation = { + east = idle_horizontal, + west = idle_horizontal, + north = idle_vertical, + south = idle_vertical, + }, + crafting_categories = {"condenser-turbine"}, + crafting_speed = 1, + energy_source = + { + type = "void", + }, + energy_usage = "0.1W", + ingredient_count = 0, + module_specification = + { + module_slots = 0 + }, + allowed_effects = {}, + working_visualisations = nil, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/core-miner.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/core-miner.lua new file mode 100644 index 0000000..e26f5f3 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/core-miner.lua @@ -0,0 +1,195 @@ +local data_util = require("data_util") +local shadow = +{ + filename = "__space-exploration-graphics-3__/graphics/entity/core-miner/hr/core-miner-shadow.png", + priority = "high", + width = 951, + height = 491, + frame_count = 1, + shift = {2 + 3/32, 1 + 22/32}, + draw_as_shadow = true, + scale=0.5, +} +local shadow_anim = table.deepcopy(shadow) +shadow_anim.repeat_count = 30 +local off_layer = { + layers = { + shadow, + { + filename = "__space-exploration-graphics-3__/graphics/entity/core-miner/hr/core-miner-off.png", + priority = "high", + width = 691, + height = 737, + frame_count = 1, + shift = {0, -8/32}, + scale=0.5, + }, + } +} +data:extend({ + { + type = "assembling-machine", + name = data_util.mod_prefix .. "core-miner", + icon = "__space-exploration-graphics__/graphics/icons/core-miner.png", + selection_priority = 0, + icon_size = 64, + flags = {"placeable-neutral", "placeable-player", "player-creation"}, + minable = {mining_time = 0.5, result = data_util.mod_prefix .. "core-miner"}, + max_health = 5000, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + resistances = + { + { type = "fire", percent = 70 }, + { type = "meteor", percent = 90 }, + { type = "explosion", percent = 70 }, + { type = "impact", percent = 70 }, + }, + collision_box = {{-5.2, -5.2}, {5.2, 5.2}}, + collision_mask = { + "item-layer", + "object-layer", + "player-layer", + "water-tile", + space_collision_layer + }, + render_layer = "lower-object-above-shadow", + selection_box = {{-5.5, -5.5}, {5.5, 5.5}}, + fluid_boxes = + { + { + production_type = "output", + base_area = 1, + base_level = 1, + pipe_connections = {{ type="output", position = {0, -5.85} }}, + secondary_draw_orders = { north = -1 } + }, + }, + animation = off_layer, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + energy_usage = "50MW", + energy_source = {type = "void"}, + crafting_speed = 1, + crafting_categories = {"dummy"}, + }, + { + type = "mining-drill", + name = data_util.mod_prefix .. "core-miner-drill", + minable = {mining_time = 0.5, result = data_util.mod_prefix .. "core-miner"}, + selection_priority = 10, + icon = "__space-exploration-graphics__/graphics/icons/core-miner.png", + icon_size = 64, + order = "zzz", + flags = {"placeable-neutral", "placeable-player", "player-creation", "not-blueprintable", "not-deconstructable", "placeable-off-grid"}, + placeable_by = {item = data_util.mod_prefix .. "core-miner", count=1}, + max_health = 5000, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + resistances = + { + { type = "fire", percent = 70 }, + { type = "meteor", percent = 90 }, + { type = "explosion", percent = 70 }, + { type = "impact", percent = 70 }, + }, + collision_box = {{-5.2, -5.2}, {5.2, 5.2}}, + selection_box = {{-5.5, -5.5}, {5.5, 5.5}}, + resource_categories = { data_util.mod_prefix .. "core-mining" }, + resource_searching_radius = 2, + mining_speed = 150, + always_draw_idle_animation = false, + energy_usage = "50MW", + vector_to_place_result = { 0, -5.85 }, + animations = { + layers = { + shadow_anim, + { + priority = "high", + width = 691, + height = 737, + frame_count = 30, + animation_speed = 1, + shift = {0, -8/32}, + scale=0.5, + stripes = + { + { + filename = "__space-exploration-graphics-3__/graphics/entity/core-miner/hr/core-miner-1.png", + width_in_frames = 2, + height_in_frames = 2, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/core-miner/hr/core-miner-2.png", + width_in_frames = 2, + height_in_frames = 2, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/core-miner/hr/core-miner-3.png", + width_in_frames = 2, + height_in_frames = 2, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/core-miner/hr/core-miner-4.png", + width_in_frames = 2, + height_in_frames = 2, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/core-miner/hr/core-miner-5.png", + width_in_frames = 2, + height_in_frames = 2, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/core-miner/hr/core-miner-6.png", + width_in_frames = 2, + height_in_frames = 2, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/core-miner/hr/core-miner-7.png", + width_in_frames = 2, + height_in_frames = 2, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/core-miner/hr/core-miner-8.png", + width_in_frames = 2, + height_in_frames = 1, + }, + }, + }, + } + }, + working_visualisations = + { + shadow, + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 1, size = 32, shift = {0.0, 0.0}, color = {r = 1.0, g = 0.6, b = 0.1}} + }, + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = + { + sound = + { + { + filename = "__base__/sound/electric-mining-drill.ogg", + volume = 1 + }, + }, + apparent_volume = 2 + }, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 200, + }, + ingredient_count = 0, + module_specification = + { + module_slots = 0 + }, + allowed_effects = {} + } +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/decontamination-lifesupport.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/decontamination-lifesupport.lua new file mode 100644 index 0000000..f54e0e9 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/decontamination-lifesupport.lua @@ -0,0 +1,399 @@ +local data_util = require("data_util") + +data:extend({ + { + type = "assembling-machine", + name = data_util.mod_prefix .. "space-decontamination-facility", + icon = "__space-exploration-graphics__/graphics/icons/decontamination-facility.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = {mining_time = 0.2, result = data_util.mod_prefix .. "space-decontamination-facility"}, + max_health = 700, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{-2.8, -2.8}, {2.8, 2.8}}, + selection_box = {{-3, -3}, {3, 3}}, + drawing_box = {{-3, -3.5}, {3, 3}}, + resistances = + { + { + type = "impact", + percent = 10 + } + }, + fluid_boxes = + { + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {-1.5, -3.5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {1.5, -3.5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {-3.5, -1.5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {3.5, -1.5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {-1.5, 3.5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {1.5, 3.5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {3.5, 1.5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {-3.5, 1.5} }}, + secondary_draw_orders = { north = -1 } + }, + --off_when_no_fluid_recipe = true + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + apparent_volume = 1.5, + idle_sound = { + filename = "__base__/sound/idle1.ogg", + volume = 0.6 + }, + sound = { + { + filename = "__base__/sound/assembling-machine-t1-1.ogg", + volume = 0.8 + }, + { + filename = "__base__/sound/assembling-machine-t1-2.ogg", + volume = 0.8 + } + } + }, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + }, + animation = + { + layers = + { + { + filename = "__space-exploration-graphics-5__/graphics/entity/decontamination-facility/sr/decontamination-facility.png", + priority = "high", + width = 3072/8/2, + height = 1792/4/2, + frame_count = 32, + line_length = 8, + shift = util.by_pixel(0, -16), + animation_speed = 1, + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/decontamination-facility/hr/decontamination-facility.png", + priority = "high", + width = 3072/8, + height = 1792/4, + frame_count = 32, + line_length = 8, + shift = util.by_pixel(0, -16), + animation_speed = 1, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-5__/graphics/entity/decontamination-facility/sr/decontamination-facility-shadow.png", + priority = "high", + width = 426/2, + height = 298/2, + frame_count = 1, + line_length = 1, + repeat_count = 32, + shift = util.by_pixel(26, 24), + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-5__/graphics/entity/decontamination-facility/hr/decontamination-facility-shadow.png", + priority = "high", + width = 426, + height = 298, + frame_count = 1, + line_length = 1, + repeat_count = 32, + shift = util.by_pixel(26, 24), + scale = 0.5, + } + }, + }, + }, + crafting_categories = {"space-decontamination"}, + crafting_speed = 2, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + energy_usage = "2000kW", + ingredient_count = 12, + module_specification = + { + module_slots = 4 + }, + allowed_effects = {"consumption", "speed", "pollution"}, -- not "productivity", + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.5, size = 8, shift = {0.0, 0.0}, color = {r = 1, g = 0.9, b = 0.5}} + }, + }, + }, + { + type = "assembling-machine", + name = data_util.mod_prefix .. "lifesupport-facility", + icon = "__space-exploration-graphics__/graphics/icons/lifesupport-facility.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = {mining_time = 0.2, result = data_util.mod_prefix .. "lifesupport-facility"}, + max_health = 700, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{-2.8, -2.8}, {2.8, 2.8}}, + se_allow_in_space = true, + selection_box = {{-3, -3}, {3, 3}}, + drawing_box = {{-3, -3.5}, {3, 3}}, + resistances = + { + { + type = "impact", + percent = 10 + } + }, + fluid_boxes = + { + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {-1.5, -3.5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {1.5, -3.5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {-3.5, -1.5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {3.5, -1.5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {-1.5, 3.5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {1.5, 3.5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {3.5, 1.5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {-3.5, 1.5} }}, + secondary_draw_orders = { north = -1 } + }, + --off_when_no_fluid_recipe = true + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + apparent_volume = 1.5, + idle_sound = { + filename = "__base__/sound/idle1.ogg", + volume = 0.6 + }, + sound = { + { + filename = "__base__/sound/assembling-machine-t1-1.ogg", + volume = 0.8 + }, + { + filename = "__base__/sound/assembling-machine-t1-2.ogg", + volume = 0.8 + } + } + }, + collision_mask = { + "water-tile", + --"ground-tile", -- allow on ground + "item-layer", + "object-layer", + "player-layer", + }, + animation = + { + layers = + { + { + filename = "__space-exploration-graphics-5__/graphics/entity/lifesupport-facility/sr/lifesupport-facility.png", + priority = "high", + width = 3072/8/2, + height = 1792/4/2, + frame_count = 32, + line_length = 8, + shift = util.by_pixel(0, -16), + animation_speed = 1, + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/lifesupport-facility/hr/lifesupport-facility.png", + priority = "high", + width = 3072/8, + height = 1792/4, + frame_count = 32, + line_length = 8, + shift = util.by_pixel(0, -16), + animation_speed = 1, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-5__/graphics/entity/lifesupport-facility/sr/lifesupport-facility-shadow.png", + priority = "high", + width = 426/2, + height = 298/2, + frame_count = 1, + line_length = 1, + repeat_count = 32, + shift = util.by_pixel(26, 24), + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-5__/graphics/entity/lifesupport-facility/hr/lifesupport-facility-shadow.png", + priority = "high", + width = 426, + height = 298, + frame_count = 1, + line_length = 1, + repeat_count = 32, + shift = util.by_pixel(26, 24), + scale = 0.5, + } + }, + }, + }, + crafting_categories = {"lifesupport"}, + crafting_speed = 1, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + energy_usage = "1000kW", + ingredient_count = 12, + module_specification = + { + module_slots = 4 + }, + allowed_effects = {"consumption", "speed", "pollution"}, -- not "productivity", + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.5, size = 8, shift = {0.0, 0.0}, color = {r = 100/255, g = 48/255, b = 1}} + }, + }, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/dimensional-anchor.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/dimensional-anchor.lua new file mode 100644 index 0000000..a116134 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/dimensional-anchor.lua @@ -0,0 +1,197 @@ +local data_util = require("data_util") + +data:extend({ + + { + type = "electric-energy-interface", + name = data_util.mod_prefix .. "dimensional-anchor", + icon = "__space-exploration-graphics__/graphics/icons/dimensional-anchor.png", + icon_size = 64, + minable = {hardness = 0.2, mining_time = 1, result = data_util.mod_prefix .. "dimensional-anchor"}, + order = "z-d-a", + allow_copy_paste = true, + picture = + { + layers = + { + { + filename = "__space-exploration-graphics-3__/graphics/entity/dimensional-anchor/sr/dimensional-anchor.png", + priority = "high", + width = 576/2, + height = 672/2, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, -24), + animation_speed = 1, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/dimensional-anchor/hr/dimensional-anchor.png", + priority = "high", + width = 576, + height = 672, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, -24), + animation_speed = 1, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/dimensional-anchor/sr/dimensional-anchor-shadow.png", + priority = "high", + width = 354, + height = 238, + frame_count = 1, + line_length = 1, + repeat_count = 1, + shift = util.by_pixel(32, 28), + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/dimensional-anchor/hr/dimensional-anchor-shadow.png", + priority = "high", + width = 709, + height = 477, + frame_count = 1, + line_length = 1, + repeat_count = 1, + shift = util.by_pixel(32, 28), + scale = 0.5, + } + }, + }, + }, + collision_box = {{-4.4, -4.4},{4.4, 4.4}}, + selection_box = {{-4.4, -4.4},{4.4, 4.4}}, + drawing_box = {{-4.4, -5.4},{4.4, 4.4}}, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + spaceship_collision_layer, + }, + selectable = false, + continuous_animation = true, + corpse = "medium-remnants", + energy_source = { + buffer_capacity = "1TJ", + input_flow_limit = "60GW", -- total when all active (values over 60GW won't work) + output_flow_limit = "0kW", + type = "electric", + usage_priority = "primary-input" + }, + energy_production = "0kW", + energy_usage = "0GW", -- platform + 1x per lock + 1x for final energy spike final activation. + --energy_usage = "60GW", -- platform + 1x per lock + 1x for final energy spike final activation. + flags = { + "placeable-player", + "player-creation", + "hidden", + "not-rotatable" + }, + max_health = 5000, + vehicle_impact_sound = { + filename = "__base__/sound/car-metal-impact.ogg", + volume = 0.65 + }, + working_sound = { + apparent_volume = 1.5, + fade_in_ticks = 10, + fade_out_ticks = 30, + max_sounds_per_type = 3, + sound = { + { + filename = "__base__/sound/nuclear-reactor-1.ogg", + volume = 0.6 + }, + { + filename = "__base__/sound/nuclear-reactor-2.ogg", + volume = 0.6 + } + } + }, + --light = {intensity = 1, size = 8, shift = {0.0, 0.0}, color = {r = 0.6, g = 0.9, b = 1}} + }, + { + type = "projectile", + name = data_util.mod_prefix .. "dimensional-anchor-fx", + direction_only = false, + flags = { "not-on-map", "placeable-off-grid" }, + acceleration = 0, + collision_mask = {"not-colliding-with-itself"}, + light = {intensity = 1, size = 8, shift = {0.0, 0.0}, color = {r = 0.6, g = 0.9, b = 1}}, + working_sound = { + apparent_volume = 1.5, + fade_in_ticks = 10, + fade_out_ticks = 30, + max_sounds_per_type = 3, + sound = { + { + filename = "__base__/sound/nuclear-reactor-1.ogg", + volume = 0.6 + }, + { + filename = "__base__/sound/nuclear-reactor-2.ogg", + volume = 0.6 + } + } + }, + animation = { + layers = { + { + filename = "__space-exploration-graphics-3__/graphics/entity/dimensional-anchor/sr/dimensional-anchor-light.png", + priority = "high", + width = 576/2, + height = 640/2, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, -32), + animation_speed = 1, + apply_runtime_tint = true, + blend_mode = "additive", --"additive-soft" + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/dimensional-anchor/hr/dimensional-anchor-light.png", + priority = "high", + width = 576, + height = 640, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, -32), + animation_speed = 1, + scale = 0.5, + apply_runtime_tint = true, + blend_mode = "additive", --"additive-soft" + } + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/dimensional-anchor/sr/dimensional-anchor-skybeam.png", + priority = "high", + width = 38, + height = 298, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, -19 * 32 -2), + animation_speed = 1, + scale = 4, + apply_runtime_tint = true, + blend_mode = "additive-soft", + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/dimensional-anchor/hr/dimensional-anchor-skybeam.png", + priority = "high", + width = 77, + height = 597, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, -19 * 32 -2), + animation_speed = 1, + scale = 2, + apply_runtime_tint = true, + blend_mode = "additive-soft", + } + }, + } + }, + }, + +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/entity.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/entity.lua new file mode 100644 index 0000000..2734f70 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/entity.lua @@ -0,0 +1,429 @@ +local data_util = require("data_util") + +-- Collision entities +local base_collision_entity = { + type = "simple-entity", + icon = "__base__/graphics/icons/iron-chest.png", + icon_size = 64, + flags = {"placeable-neutral", "placeable-off-grid"}, + subgroup = "grass", + order = "z-z", + selection_box = {{-0.0, -0.0}, {0.0, 0.0}}, + selectable_in_game = false, + render_layer = "resource", + pictures = {{ + filename = "__space-exploration-graphics__/graphics/blank.png", + width = 1, + height = 1 + }}, +} + +local collision_player = table.deepcopy(base_collision_entity) +collision_player.name = data_util.mod_prefix .. "collision-player" +collision_player.collision_mask = { "player-layer", "train-layer"} +collision_player.collision_box = { { -0.25, -0.25 }, { 0.25, 0.25 } } + +local collision_player_not_space = table.deepcopy(base_collision_entity) +collision_player_not_space.name = data_util.mod_prefix .. "collision-player-not-space" +collision_player_not_space.collision_mask = { "player-layer", "train-layer", space_collision_layer} +collision_player_not_space.collision_box = { { -0.25, -0.25 }, { 0.25, 0.25 } } + +local collision_rocket_destination_surface = table.deepcopy(base_collision_entity) +collision_rocket_destination_surface.name = data_util.mod_prefix .. "collision-rocket-destination-surface" +collision_rocket_destination_surface.collision_mask = { "player-layer", "train-layer", space_collision_layer} +collision_rocket_destination_surface.collision_box = { { -0.25, -0.25 }, { 0.25, 0.25 } } + +local collision_rocket_destination_orbital = table.deepcopy(base_collision_entity) +collision_rocket_destination_orbital.name = data_util.mod_prefix .. "collision-rocket-destination-orbital" +collision_rocket_destination_orbital.collision_mask = { "player-layer", "train-layer"} +collision_rocket_destination_orbital.collision_box = { { -0.25, -0.25 }, { 0.25, 0.25 } } + +data:extend({ + collision_player, + collision_player_not_space, + collision_rocket_destination_surface, + collision_rocket_destination_orbital +}) + +-- settings entity +data:extend({ + { -- this is a tempalte + type = "programmable-speaker", + name = data_util.mod_prefix .. "struct-settings-string", + icon = "__space-exploration-graphics__/graphics/icons/settings.png", + icon_size = 64, + order="zzz", + flags = {"placeable-neutral", "player-creation"}, + collision_box = {{-0.3, -0.3}, {0.3, 0.3}}, + selection_box = {{-0.0, -0.0}, {0.0, 0.0}}, + drawing_box = {{-0.0, -0.0}, {0.0, 0.0}}, + selectable_in_game = false, + energy_source = { + --type = "electric", + type = "void", + usage_priority = "secondary-input", + render_no_power_icon = false + }, + energy_usage_per_tick = "1W", + sprite = + { + layers = + { + { + filename = "__space-exploration-graphics__/graphics/blank.png", + width = 1, + height = 1, + frame_count = 1, + line_length = 1, + shift = { 0, 0 }, + } + } + }, + maximum_polyphony = 0, + instruments = { }, + }, +}) +--[[ +energy_source = { + buffer_capacity = "5MJ", + input_flow_limit = "300kW", + output_flow_limit = "300kW", + type = "electric", + usage_priority = "tertiary" +},]]-- + +data.raw.accumulator.accumulator.fast_replaceable_group = "accumulator" +data.raw.accumulator.accumulator.next_upgrade = data_util.mod_prefix .. "space-accumulator" +data.raw.accumulator.accumulator.collision_box = {{-0.8,-0.8},{0.8,0.8}} +data.raw.accumulator.accumulator.energy_source.buffer_capacity = "5MJ" +data.raw.accumulator.accumulator.energy_source.input_flow_limit = "250kW" +data.raw.accumulator.accumulator.energy_source.output_flow_limit = "500kW" +local accumulator = table.deepcopy(data.raw.accumulator.accumulator) +accumulator.name = data_util.mod_prefix .. "space-accumulator" +--accumulator.collision_mask = { "floor-layer", "object-layer", "water-tile", "ground-tile", "player-layer"} +data_util.replace_filenames_recursive(accumulator, "__base__/graphics/entity/accumulator/accumulator.png", "__space-exploration-graphics-3__/graphics/entity/accumulator/accumulator.png") +data_util.replace_filenames_recursive(accumulator, "__base__/graphics/entity/accumulator/hr-accumulator.png", "__space-exploration-graphics-3__/graphics/entity/accumulator/hr-accumulator.png") +accumulator.icon = "__space-exploration-graphics__/graphics/icons/accumulator.png" +accumulator.icon_size = 64 +accumulator.icon_mipmaps = 1 +accumulator.energy_source = { + --buffer_capacity = "25MJ", + --input_flow_limit = "2500kW", + --output_flow_limit = "2500kW", + buffer_capacity = "50MJ", + input_flow_limit = "500kW", + output_flow_limit = "5MW", + type = "electric", + usage_priority = "tertiary" +} +accumulator.minable.result = data_util.mod_prefix .. "space-accumulator" +--accumulator.fast_replaceable_group = "space-accumulator" +accumulator.next_upgrade = data_util.mod_prefix .. "space-accumulator-2" + + +local accumulator2 = table.deepcopy(accumulator) +accumulator2.name = data_util.mod_prefix .. "space-accumulator-2" +data_util.replace_filenames_recursive(accumulator2, "__space-exploration-graphics-3__/graphics/entity/accumulator/accumulator.png", "__space-exploration-graphics-3__/graphics/entity/accumulator/accumulator-2.png") +data_util.replace_filenames_recursive(accumulator2, "__space-exploration-graphics-3__/graphics/entity/accumulator/hr-accumulator.png", "__space-exploration-graphics-3__/graphics/entity/accumulator/hr-accumulator-2.png") +accumulator2.icon = "__space-exploration-graphics__/graphics/icons/accumulator-2.png" +accumulator2.icon_size = 64 +accumulator2.icon_mipmaps = 1 +accumulator2.energy_source = { + --buffer_capacity = "100MJ", + --input_flow_limit = "10000kW", + --output_flow_limit = "10000kW", + buffer_capacity = "250MJ", + input_flow_limit = "2500kW", + output_flow_limit = "25MW", + type = "electric", + usage_priority = "tertiary" +} +accumulator2.minable.result = data_util.mod_prefix .. "space-accumulator-2" +accumulator2.next_upgrade = nil + +data:extend{ + accumulator, + accumulator2, + { + type = "solar-panel", + name = data_util.mod_prefix .. "space-solar-panel", + collision_box = { + { -1.95, -1.95 }, + { 1.95, 1.95 } + }, + collision_mask = { + "floor-layer", + "object-layer", + "water-tile", + --"ground-tile" + }, + selection_box = { + { -2, -2 }, + { 2, 2 } + }, + production = "400kW", -- 106.6 would be equivalent to a solar panel for its size. + corpse = "big-remnants", + energy_source = { + type = "electric", + usage_priority = "solar" + }, + flags = { + "placeable-neutral", + "player-creation" + }, + fast_replaceable_group = "space-solar-panel", + icon = "__space-exploration-graphics__/graphics/icons/solar-panel.png", + icon_size = 64, + max_health = 400, + minable = { + mining_time = 0.1, + result = data_util.mod_prefix .. "space-solar-panel" + }, + next_upgrade = data_util.mod_prefix .. "space-solar-panel-2", + picture = { + layers = { + { + filename = "__space-exploration-graphics-3__/graphics/entity/solar-panel/solar-panel.png", + width = 260/2, + height = 272/2, + priority = "high", + shift = { + 0, + -1/32 + }, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/solar-panel/hr-solar-panel.png", + width = 260, + height = 272, + priority = "high", + scale = 0.5, + shift = { + 0, + -1/32 + }, + }, + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/solar-panel/solar-panel-shadow.png", + width = 92/2, + height = 260/2, + priority = "high", + shift = { + 1.5, + 1/32 + }, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/solar-panel/hr-solar-panel-shadow.png", + width = 92, + height = 260, + priority = "high", + scale = 0.5, + shift = { + 1.5, + 1/32 + }, + }, + } + } + }, + vehicle_impact_sound = { + filename = "__base__/sound/car-metal-impact.ogg", + volume = 0.65 + } + }, + { + type = "solar-panel", + name = data_util.mod_prefix .. "space-solar-panel-2", + collision_box = { + { -1.95, -1.95 }, + { 1.95, 1.95 } + }, + collision_mask = { + "floor-layer", + "object-layer", + "water-tile", + --"ground-tile" + }, + selection_box = { + { -2, -2 }, + { 2, 2 } + }, + production = "800kW", -- 106.6 would be equivalent to a solar panel for its size. + corpse = "big-remnants", + energy_source = { + type = "electric", + usage_priority = "solar" + }, + flags = { + "placeable-neutral", + "player-creation" + }, + fast_replaceable_group = "space-solar-panel", + icon = "__space-exploration-graphics__/graphics/icons/solar-panel-2.png", + icon_size = 64, + max_health = 500, + minable = { + mining_time = 0.1, + result = data_util.mod_prefix .. "space-solar-panel-2" + }, + next_upgrade = data_util.mod_prefix .. "space-solar-panel-3", + picture = { + layers = { + { + filename = "__space-exploration-graphics-3__/graphics/entity/solar-panel-2/solar-panel.png", + width = 260/2, + height = 272/2, + priority = "high", + shift = { + 0, + -1/32 + }, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/solar-panel-2/hr-solar-panel.png", + width = 260, + height = 272, + priority = "high", + scale = 0.5, + shift = { + 0, + -1/32 + }, + }, + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/solar-panel-2/solar-panel-shadow.png", + width = 92/2, + height = 260/2, + priority = "high", + shift = { + 1.5, + 1/32 + }, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/solar-panel-2/hr-solar-panel-shadow.png", + width = 92, + height = 260, + priority = "high", + scale = 0.5, + shift = { + 1.5, + 1/32 + }, + }, + } + } + }, + vehicle_impact_sound = { + filename = "__base__/sound/car-metal-impact.ogg", + volume = 0.65 + } + }, + { + type = "solar-panel", + name = data_util.mod_prefix .. "space-solar-panel-3", + collision_box = { + { -1.95, -1.95 }, + { 1.95, 1.95 } + }, + collision_mask = { + "floor-layer", + "object-layer", + "water-tile", + --"ground-tile" + }, + selection_box = { + { -2, -2 }, + { 2, 2 } + }, + production = "1600kW", -- 106.6 would be equivalent to a solar panel for its size. + corpse = "big-remnants", + energy_source = { + type = "electric", + usage_priority = "solar" + }, + flags = { + "placeable-neutral", + "player-creation" + }, + fast_replaceable_group = "space-solar-panel", + icon = "__space-exploration-graphics__/graphics/icons/solar-panel-3.png", + icon_size = 64, + max_health = 500, + minable = { + mining_time = 0.1, + result = data_util.mod_prefix .. "space-solar-panel-3" + }, + picture = { + layers = { + { + filename = "__space-exploration-graphics-3__/graphics/entity/solar-panel-3/solar-panel.png", + width = 260/2, + height = 272/2, + priority = "high", + shift = { + 0, + -1/32 + }, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/solar-panel-3/hr-solar-panel.png", + width = 260, + height = 272, + priority = "high", + scale = 0.5, + shift = { + 0, + -1/32 + }, + }, + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/solar-panel-3/solar-panel-shadow.png", + width = 92/2, + height = 260/2, + priority = "high", + shift = { + 1.5, + 1/32 + }, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/solar-panel-3/hr-solar-panel-shadow.png", + width = 92, + height = 260, + priority = "high", + scale = 0.5, + shift = { + 1.5, + 1/32 + }, + }, + } + } + }, + vehicle_impact_sound = { + filename = "__base__/sound/car-metal-impact.ogg", + volume = 0.65 + } + } +} + +local tree_fire_starter = table.deepcopy(data.raw.fire["fire-flame"]) +tree_fire_starter.name = data_util.mod_prefix .. "tree-fire-starter" +tree_fire_starter.damage_multiplier_decrease_per_tick = 0 +tree_fire_starter.initial_lifetime = 600 +tree_fire_starter.spread_delay = 1 +tree_fire_starter.spread_delay_deviation = 1 +tree_fire_starter.spawn_entity = data_util.mod_prefix .. "fire-flame-on-tree-no-pollution" +tree_fire_starter.emissions_per_second = 0 +data:extend({tree_fire_starter}) + +local treefire = table.deepcopy(data.raw.fire["fire-flame-on-tree"]) +treefire.name = data_util.mod_prefix .. "fire-flame-on-tree-no-pollution" +treefire.spawn_entity = treefire.name +treefire.emissions_per_second = 0 +data:extend({treefire}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/explosion.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/explosion.lua new file mode 100644 index 0000000..c9aeeea --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/explosion.lua @@ -0,0 +1,216 @@ +local data_util = require("data_util") + +-- generic triggers +data:extend({ + { -- dummy explosion entity for alerts + type = "explosion", + name = data_util.mod_prefix .. "dummy-explosion", + animations = { + { + direction_count = 1, + filename = "__space-exploration-graphics__/graphics/blank.png", + frame_count = 1, + height = 1, + line_length = 1, + width = 1 + } + }, + flags = { + "not-on-map" + }, + }, + { -- some debris has been added to the surface, in space it should move + type = "explosion", + name = data_util.mod_prefix .. "trigger-movable-debris", + animations = { + { + direction_count = 1, + filename = "__space-exploration-graphics__/graphics/blank.png", + frame_count = 1, + height = 1, + line_length = 1, + width = 1 + } + }, + flags = { + "not-on-map" + }, + }, +}) + + +--[[ +vanila explosions: +"big-artillery-explosion" -- huge smoke plume but very little debris +"big-explosion" -- biggest overall, but smaller plume +"massive-explosion" -- more debris +"medium-explosion" -- medium and wider +"ground-explosion" -- medium but higher, and with stone particles + +SE explosions: +Huge +large +Medium +Small +]]-- + +local big_explsion_hit = table.deepcopy(data.raw.explosion["explosion-hit"]) +big_explsion_hit.name = "big-explosion-hit" +big_explsion_hit.animations[1].scale = 1.5 +data:extend({big_explsion_hit}) + +local function make_explosion(magnitude, name, animation, sound) -- magnitude is 1,2,3,4 + data:extend({ + { + type = "explosion", + name = data_util.mod_prefix..name, + animations = {animation}, + created_effect = { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + { + type = "create-particle", + particle_name = "explosion-remnants-particle", + initial_height = 0.5, + initial_vertical_speed = 0.06 + 0.01 * magnitude, + initial_vertical_speed_deviation = 0.06 + 0.01 * magnitude, + offset_deviation = { { -0.2, -0.2 }, { 0.2, 0.2 } }, + repeat_count = 10 + 5 * magnitude, + speed_from_center = 0.06 + 0.01 * magnitude, + speed_from_center_deviation = 0.06 + 0.01 * magnitude, + }, + { + type = "create-particle", + particle_name = "stone-particle", + initial_height = 0.5, + initial_vertical_speed = 0.1 + 0.05 * magnitude, + initial_vertical_speed_deviation = 0.1 + 0.05 * magnitude, + offset_deviation = { { -0.2, -0.2 }, { 0.2, 0.2 } }, + repeat_count = 40 + 20 * magnitude, + speed_from_center = 0.06 + 0.02 * magnitude, + speed_from_center_deviation = 0.06 + 0.02 * magnitude, + } + }, + }, + }, + flags = { "not-on-map" }, + light = { color = { r = 1, g = 0.9, b = 0.8 }, intensity = 0.8 + 0.1 * magnitude, size = 30 + 5 * magnitude }, + sound = { + aggregation = { max_count = 1, remove = true }, + variations = sound + }, + }, + + }) +end + + +make_explosion(1, "small-explosion", { + filename = "__base__/graphics/entity/medium-explosion/medium-explosion.png", + width = 112, + height = 94, + line_length = 6, + frame_count = 54, + animation_speed = 0.5, + priority = "high", + shift = { -0.56, -0.96 }, + scale = 0.75, +},{ + { filename = "__base__/sound/small-explosion-1.ogg", volume = 0.7 }, + { filename = "__base__/sound/small-explosion-2.ogg", volume = 0.7 } +}) +make_explosion(2, "medium-explosion", { + filename = "__base__/graphics/entity/medium-explosion/medium-explosion.png", + width = 112, + height = 94, + line_length = 6, + frame_count = 54, + animation_speed = 0.5, + priority = "high", + shift = { -0.56, -0.96 }, + scale = 1, +}, { + { filename = "__base__/sound/fight/large-explosion-1.ogg", volume = 0.7 }, + { filename = "__base__/sound/fight/large-explosion-2.ogg", volume = 0.7 } +}) +make_explosion(3, "large-explosion", { + animation_speed = 0.5, + filename = "__base__/graphics/entity/big-explosion/big-explosion.png", + flags = { "compressed" }, + frame_count = 47, + height = 245, + line_length = 6, + shift = { 0.1875, -0.75 }, + width = 197, + scale = 1, +},{ + { filename = "__base__/sound/fight/large-explosion-1.ogg", volume = 0.8 }, + { filename = "__base__/sound/fight/large-explosion-2.ogg", volume = 0.8 } +}) +make_explosion(4, "huge-explosion", { + animation_speed = 0.5, + filename = "__base__/graphics/entity/bigass-explosion/hr-bigass-explosion-36f.png", + flags = { "compressed" }, + frame_count = 36, + width = 324, + height = 416, + shift = { 0, -1.5 }, + stripes = { + { filename = "__base__/graphics/entity/bigass-explosion/hr-bigass-explosion-36f-1.png", height_in_frames = 3, width_in_frames = 6 }, + { filename = "__base__/graphics/entity/bigass-explosion/hr-bigass-explosion-36f-2.png", height_in_frames = 3, width_in_frames = 6 } + }, + scale = 1, +}, { + { filename = "__base__/sound/explosion1.ogg", volume = 1 }, +}) + + +data:extend({ + { + type = "explosion", + name = data_util.mod_prefix.."meteor-explosion", + animations = {{ + animation_speed = 0.5, + filename = "__base__/graphics/entity/bigass-explosion/hr-bigass-explosion-36f.png", + flags = { "compressed" }, + frame_count = 36, + width = 324, + height = 416, + shift = { 0, -1.5 }, + stripes = { + { filename = "__base__/graphics/entity/bigass-explosion/hr-bigass-explosion-36f-1.png", height_in_frames = 3, width_in_frames = 6 }, + { filename = "__base__/graphics/entity/bigass-explosion/hr-bigass-explosion-36f-2.png", height_in_frames = 3, width_in_frames = 6 } + }, + scale = 1, + }}, + created_effect = { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + -- TODO add rock fragments equivalent to "explosion-remnants-particle" from small rock graphics + { + type = "create-particle", + particle_name = "stone-particle", + initial_height = 0.5, + initial_vertical_speed = 0.3, + initial_vertical_speed_deviation = 0.3, + offset_deviation = { { -0.2, -0.2 }, { 0.2, 0.2 } }, + repeat_count = 120, + speed_from_center = 0.2, + speed_from_center_deviation = 0.2, + } + }, + }, + }, + flags = { "not-on-map" }, + light = { color = { r = 1, g = 0.9, b = 0.8 }, intensity = 1, size = 50 }, + sound = { + aggregation = { max_count = 1, remove = true }, + variations = { filename = "__base__/sound/explosion1.ogg", volume = 1 } + }, + }, + +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/fluid-burner-generator.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/fluid-burner-generator.lua new file mode 100644 index 0000000..0a0ce07 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/fluid-burner-generator.lua @@ -0,0 +1,149 @@ +local data_util = require("data_util") + +data:extend({ + { + type = "generator", + name = data_util.mod_prefix .. "fluid-burner-generator", + icon = "__space-exploration-graphics__/graphics/icons/fluid-burner-generator.png", + icon_size = 64, + flags = {"placeable-neutral","player-creation"}, + minable = {mining_time = 0.3, result = data_util.mod_prefix .. "fluid-burner-generator"}, + max_health = 300, + corpse = "steam-turbine-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + effectivity = 1, + fluid_usage_per_tick = 1, + burns_fluid = true, + resistances = { { type = "fire", percent = 70 } }, + fast_replaceable_group = "steam-engine", + collision_box = {{-1.35, -2.35}, {1.35, 2.35}}, + selection_box = {{-1.5, -2.5}, {1.5, 2.5}}, + scale_fluid_usage = true, + max_power_output = "2MW", + maximum_temperature = 1000, + fluid_box = + { + base_area = 1, + height = 2, + base_level = -1, + pipe_covers = pipecoverspictures(), + pipe_connections = + { + { type = "input-output", position = {0, 3} }, + { type = "input-output", position = {0, -3} } + }, + production_type = "input-output", + }, + effectivity = 0.75, + energy_source = { type = "electric", usage_priority = "secondary-output" }, + horizontal_animation = + { + layers = + { + { + filename = "__space-exploration-graphics-3__/graphics/entity/fluid-burner-generator/fluid-burner-generator-h.png", + width = 320/2, + height = 244/2, + frame_count = 8, + line_length = 4, + shift = util.by_pixel(0, -2.75), + animation_speed = 0.5, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/fluid-burner-generator/hr-fluid-burner-generator-h.png", + width = 320, + height = 244, + frame_count = 8, + line_length = 4, + shift = util.by_pixel(0, -2.75), + animation_speed = 0.5, + scale = 0.5 + } + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/fluid-burner-generator/fluid-burner-generator-h-shadow.png", + width = 434/2, + height = 150/2, + frame_count = 1, + repeat_count = 8, + line_length = 1, + draw_as_shadow = true, + shift = util.by_pixel(28.5, 18), + animation_speed = 0.5, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/fluid-burner-generator/hr-fluid-burner-generator-h-shadow.png", + width = 434, + height = 150, + frame_count = 1, + repeat_count = 8, + line_length = 1, + draw_as_shadow = true, + shift = util.by_pixel(28.5, 18), + animation_speed = 0.5, + scale = 0.5 + } + } + } + }, + vertical_animation = + { + layers = + { + { + filename = "__space-exploration-graphics-3__/graphics/entity/fluid-burner-generator/fluid-burner-generator-v.png", + width = 864/4/2, + height = 692/2/2, + frame_count = 8, + line_length = 4, + shift = util.by_pixel(5, 6.5), + animation_speed = 0.5, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/fluid-burner-generator/hr-fluid-burner-generator-v.png", + width = 864/4, + height = 692/2, + frame_count = 8, + line_length = 4, + shift = util.by_pixel(4.75, 6.75), + animation_speed = 0.5, + scale = 0.5 + } + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/fluid-burner-generator/fluid-burner-generator-v-shadow.png", + width = 256/2, + height = 260/2, + frame_count = 1, + repeat_count = 8, + line_length = 1, + draw_as_shadow = true, + shift = util.by_pixel(9.5, 14.5), + animation_speed = 0.5, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/fluid-burner-generator/hr-fluid-burner-generator-v-shadow.png", + width = 256, + height = 260, + frame_count = 1, + repeat_count = 8, + line_length = 1, + draw_as_shadow = true, + shift = util.by_pixel(9.5, 14.5), + animation_speed = 0.5, + scale = 0.5 + } + } + } + }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = + { + sound = + { + filename = "__base__/sound/steam-engine-90bpm.ogg", + volume = 0.6 + }, + match_speed_to_activity = true + }, + min_perceived_performance = 0.25, + performance_to_sound_speedup = 0.5 + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/fuel-refinery.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/fuel-refinery.lua new file mode 100644 index 0000000..9fcec49 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/fuel-refinery.lua @@ -0,0 +1,145 @@ +local data_util = require("data_util") + +data:extend({ + { + type = "assembling-machine", + name = data_util.mod_prefix .. "fuel-refinery", + icon = "__space-exploration-graphics__/graphics/icons/fuel-refinery.png", + icon_size = 64, + flags = {"placeable-neutral","player-creation"}, + minable = {mining_time = 0.2, result = data_util.mod_prefix .. "fuel-refinery"}, + max_health = 350, + dying_explosion = "medium-explosion", + corpse = "oil-refinery-remnants", + collision_box = {{-2.4, -2.4}, {2.4, 2.4}}, + selection_box = {{-2.5, -2.5}, {2.5, 2.5}}, + se_allow_in_space = true, + drawing_box = {{-2.5, -2.8}, {2.5, 2.5}}, + module_specification = + { + module_slots = 3 + }, + scale_entity_info_icon = true, + allowed_effects = {"consumption", "speed", "productivity", "pollution"}, + crafting_categories = {"fuel-refining"}, + crafting_speed = 1, + has_backer_name = false, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 6 + }, + energy_usage = "1000kW", + animation = make_4way_animation_from_spritesheet({ layers = + { + { + filename = "__space-exploration-graphics-5__/graphics/entity/fuel-refinery/fuel-refinery.png", + width = 386/2, + height = 430/2, + frame_count = 1, + shift = util.by_pixel(0, -7.5), + hr_version = + { + filename = "__space-exploration-graphics-5__/graphics/entity/fuel-refinery/hr-fuel-refinery.png", + width = 386, + height = 430, + frame_count = 1, + shift = util.by_pixel(0, -7.5), + scale = 0.5 + } + }, + { + filename = "__space-exploration-graphics-5__/graphics/entity/fuel-refinery/fuel-refinery-shadow.png", + width = 337, + height = 213, + frame_count = 1, + shift = util.by_pixel(82.5, 26.5), + draw_as_shadow = true, + hr_version = + { + filename = "__space-exploration-graphics-5__/graphics/entity/fuel-refinery/hr-fuel-refinery-shadow.png", + width = 674, + height = 426, + frame_count = 1, + shift = util.by_pixel(82.5, 26.5), + draw_as_shadow = true, + scale = 0.5 + } + } + }}), + working_visualisations = + { + { + north_position = util.by_pixel(34, -65), + east_position = util.by_pixel(-52, -61), + south_position = util.by_pixel(-59, -82), + west_position = util.by_pixel(57, -58), + animation = + { + filename = "__base__/graphics/entity/oil-refinery/oil-refinery-fire.png", + line_length = 10, + width = 20, + height = 40, + frame_count = 60, + animation_speed = 0.75, + shift = util.by_pixel(0, -14), + hr_version = + { + filename = "__base__/graphics/entity/oil-refinery/hr-oil-refinery-fire.png", + line_length = 10, + width = 40, + height = 81, + frame_count = 60, + animation_speed = 0.75, + scale = 0.5, + shift = util.by_pixel(0, -14.25) + } + }, + light = {intensity = 0.4, size = 6, color = {r = 1.0, g = 1.0, b = 1.0}} + } + }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = + { + sound = { filename = "__base__/sound/oil-refinery.ogg" }, + idle_sound = { filename = "__base__/sound/idle1.ogg", volume = 0.6 }, + apparent_volume = 2.5 + }, + fluid_boxes = + { + { + production_type = "input", + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {-1, 3} }} + }, + { + production_type = "input", + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {1, 3} }} + }, + { + production_type = "output", + pipe_covers = pipecoverspictures(), + base_level = 1, + pipe_connections = {{ position = {-2, -3} }} + }, + { + production_type = "output", + pipe_covers = pipecoverspictures(), + base_level = 1, + pipe_connections = {{ position = {0, -3} }} + }, + { + production_type = "output", + pipe_covers = pipecoverspictures(), + base_level = 1, + pipe_connections = {{ position = {2, -3} }} + } + } + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/gate.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/gate.lua new file mode 100644 index 0000000..f38303b --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/gate.lua @@ -0,0 +1,1690 @@ +local data_util = require("data_util") + +local fragment_render_layer = "lower-object-above-shadow" +local underlay_render_layer = "transport-belt-integration" +local track_glyph_render_layer = "resource" +local lock_rail_render_layer = "building-smoke" +local lock_shunt_render_layer = "decorative" +local portal_main_shadow_render_layer = "decorative" +local portal_main_render_layer = "lower-object" +local portal_addons_render_layer = "transport-belt-circuit-connector" +local locked_glyph_render_layer = "transport-belt-circuit-connector" +local portal_buttons_render_layer = "lower-object-above-shadow" +local placeable_collision = {"floor-layer", "water-tile"} + +local px = 1/32 + +local blank_image = { + filename = "__space-exploration-graphics__/graphics/blank.png", + width = 1, + height = 1, + frame_count = 1, + line_length = 1, + shift = { 0, 0 }, +} + +local no_north_cover_pictures = pipecoverspictures() +no_north_cover_pictures.north = blank_image + +local function middle_shift (box) + return {(box[1][1]+box[2][1])/2, (box[1][2]+box[2][2])/2} +end + +for i = 1, 64, 1 do + local track = { + name = data_util.mod_prefix .. "glyph-a-energy-"..i, + type = "simple-entity", + flags = {"placeable-neutral", "placeable-off-grid", "not-on-map"}, + icon = "__space-exploration-graphics__/graphics/icons/glyph/glyph-a-"..i..".png", + icon_size = 64, + order = "a[ancient]-g[gate]-g[glyph]-"..i, + collision_box = {{-1, -1}, {1, 1}}, + collision_mask = {"not-colliding-with-itself"}, + selection_box = {{-1, -1}, {1, 1}}, + selectable_in_game = false, + render_layer = lock_rail_render_layer, + picture = { + + filename = "__space-exploration-graphics__/graphics/entity/gate/sr/glyphs-a-energy.png", + width = 2048/8/2, + height = 1536/8/2, + x = ((i-1)%8)*2048/8/2, + y = math.floor((i-1)/8)*1536/8/2, + shift = {0,0}, + scale = 0.135*2, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/glyphs-a-energy.png", + width = 2048/8, + height = 1536/8, + x = ((i-1)%8)*2048/8, + y = math.floor((i-1)/8)*1536/8, + shift = {0,0}, + scale = 0.135, + } + }, + localised_name = {"entity-name.glyph"} + } + local locked = table.deepcopy(track) + locked.name = locked.name .. "-locked" + locked.render_layer = portal_buttons_render_layer + locked.picture.scale = 0.11 + data:extend({track, locked}) +end + + +local main = { + e = {512,1280}, + en = {832,704}, + es = {832,640}, + n = {1600,384}, + ne = {576,576}, + nw = {576,576}, + s = {1344,320}, + se = {704,576}, + sw = {704,576}, + w = {512,1280}, + wn = {832,704}, + ws = {832,640}, +} + +for m, dimensions in pairs(main) do + data:extend({ + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-main-"..m, + localised_name = {"entity-name.se-gate-part"}, + flags = {"placeable-neutral"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + render_layer = portal_main_render_layer, + order = "a[ancient]-g[gate]-m[main]-"..m, + collision_mask = {"not-colliding-with-itself"}, + collision_box = {{-dimensions[1]/64/2, -dimensions[2]/64/2}, {dimensions[1]/64/2, dimensions[2]/64/2}}, + selection_box = {{-dimensions[1]/64/2, -dimensions[2]/64/2}, {dimensions[1]/64/2, dimensions[2]/64/2}}, + selectable_in_game = false, + picture = data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/main-"..m..".png", + width = dimensions[1], + height = dimensions[2], + shift = {0,0}, + scale = 0.5, + }) + }, + }) +end + +local main_shadow = { + e = {192,1280}, + en = {704,576}, + es = {832,640}, + ne = {128,128}, + s = {1344,128}, + se = {704,320}, + sw = {704,320}, + w = {128,1280}, + ws = {832,640}, +} +for m, dimensions in pairs(main_shadow) do + data:extend({ + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-main-"..m.."-shadow", + localised_name = {"entity-name.se-gate-part"}, + flags = {"placeable-neutral"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + render_layer = portal_main_shadow_render_layer, + order = "a[ancient]-g[gate]-s[shadow]-"..m, + collision_mask = {"not-colliding-with-itself"}, + collision_box = {{-dimensions[1]/64/2, -dimensions[2]/64/2}, {dimensions[1]/64/2, dimensions[2]/64/2}}, + selection_box = {{-dimensions[1]/64/2, -dimensions[2]/64/2}, {dimensions[1]/64/2, dimensions[2]/64/2}}, + selectable_in_game = false, + picture = data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/main-"..m.."-shadow.png", + width = dimensions[1], + height = dimensions[2], + shift = {0,0}, + scale = 0.5, + }) + }, + }) +end + +local underlays = { + e = {320,1280}, + en = {512,512}, + es = {576,448}, + n = {1728,192}, + ne = {640,384}, + nw = {640,384}, + s = {1728,256}, + se = {704,384}, + sw = {704,384}, + w = {320,1280}, + wn = {512,512}, + ws = {576,448}, +} +for u, dimensions in pairs(underlays) do + data:extend({ + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-underlay-"..u, + localised_name = {"entity-name.se-gate-part"}, + flags = {"placeable-neutral"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + render_layer = underlay_render_layer, + order = "a[ancient]-g[gate]-u[underlay]-"..u, + collision_mask = {"not-colliding-with-itself"}, + collision_box = {{-dimensions[1]/64/2, -dimensions[2]/64/2}, {dimensions[1]/64/2, dimensions[2]/64/2}}, + selection_box = {{-dimensions[1]/64/2, -dimensions[2]/64/2}, {dimensions[1]/64/2, dimensions[2]/64/2}}, + selectable_in_game = false, + picture = data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/underlay-"..u..".png", + width = dimensions[1], + height = dimensions[2], + shift = {0,0}, + scale = 0.5, + }) + }, + }) +end + +for i = 1, 8, 1 do + data:extend({ + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-rails-"..i, + localised_name = {"entity-name.se-gate-part"}, + flags = {"placeable-neutral"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + render_layer = lock_rail_render_layer, + order = "a[ancient]-g[gate]-r[rails]-"..i, + collision_mask = {"not-colliding-with-itself"}, + collision_box = {{-1.5, -1}, {1.5, 1}}, + selection_box = {{-1.5, -1}, {1.5, 1}}, + selectable_in_game = false, + picture = data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/lock-rails-"..i..".png", + width = 192, + height = 128, + shift = {0,0}, + scale = 0.5, + }) + }, + }) +end + +for i = 1, 8, 1 do + data:extend({ + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-shunt-"..i, + localised_name = {"entity-name.se-gate-part"}, + flags = {"placeable-neutral", "placeable-off-grid"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + render_layer = lock_shunt_render_layer, + order = "a[ancient]-g[gate]-s[shunt]-"..i, + collision_mask = {"not-colliding-with-itself"}, + collision_box = {{-2, -1.5}, {2, 1.5}}, + selection_box = {{-2, -1.5}, {2, 1.5}}, + selectable_in_game = false, + picture = data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/lock-shunt-"..i..".png", + width = 256, + height = 192, + shift = {0,0}, + scale = 0.5, + }) + }, + }) +end + + +data:extend({ + -- fragments + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-fragment-1", + localised_name = {"entity-name."..data_util.mod_prefix .. "gate-fragment"}, + minable = {mining_time = 0.5, result = data_util.mod_prefix .. "gate-fragment-1"}, + flags = {"placeable-neutral", "not-deconstructable", "not-blueprintable"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/fragment-1.png", + icon_size = 64, + render_layer = fragment_render_layer, + order = "a[ancient]-g[gate]-a", + collision_mask = placeable_collision, + collision_box = {{-5+px, -5+px}, {9-px, 1-px}}, + selection_box = {{-5+px, -5+px}, {9-px, 1-px}}, + selectable_in_game = true, + picture = { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/fragment-1.png", + width = 960, + height = 512, + shift = middle_shift({{-6, -6}, {9, 2}}), + scale = 0.5, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/fragment-1-shadow.png", + width = 1024, + height = 448, + shift = {2,-1.5}, + scale = 0.5,q + }) + } + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-fragment-2", + localised_name = {"entity-name."..data_util.mod_prefix .. "gate-fragment"}, + minable = {mining_time = 0.5, result = data_util.mod_prefix .. "gate-fragment-2"}, + flags = {"placeable-neutral", "not-deconstructable", "not-blueprintable"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/fragment-2.png", + icon_size = 64, + render_layer = fragment_render_layer, + order = "a[ancient]-g[gate]-a", + collision_mask = placeable_collision, + collision_box = {{-8+px, -1+px}, {8-px, 3-px}}, + selection_box = {{-8+px, -1+px}, {8-px, 3-px}}, + selectable_in_game = true, + picture = { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/fragment-2.png", + width = 1280, + height = 320, + shift = middle_shift({{-10, -2}, {10, 3}}), + scale = 0.5, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/fragment-2-shadow.png", + width = 1280, + height = 320, + shift = {1,0.5}, + scale = 0.5, + }) + } + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-fragment-3", + localised_name = {"entity-name."..data_util.mod_prefix .. "gate-fragment"}, + minable = {mining_time = 0.5, result = data_util.mod_prefix .. "gate-fragment-3"}, + flags = {"placeable-neutral", "not-deconstructable", "not-blueprintable"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/fragment-3.png", + icon_size = 64, + render_layer = fragment_render_layer, + order = "a[ancient]-g[gate]-a", + collision_mask = placeable_collision, + collision_box = {{-10+px, -3.5+px}, {6-px, 3.5-px}}, + selection_box = {{-10+px, -3.5+px}, {6-px, 3.5-px}}, + selectable_in_game = true, + picture = { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/fragment-3.png", + width = 1280, + height = 512, + shift = {-1,-0.5}, + scale = 0.5, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/fragment-3-shadow.png", + width = 1216, + height = 448, + shift = {0,0}, + scale = 0.5, + }) + } + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-fragment-4", + localised_name = {"entity-name."..data_util.mod_prefix .. "gate-fragment"}, + minable = {mining_time = 0.5, result = data_util.mod_prefix .. "gate-fragment-4"}, + flags = {"placeable-neutral", "not-deconstructable", "not-blueprintable"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/fragment-4.png", + icon_size = 64, + render_layer = fragment_render_layer, + order = "a[ancient]-g[gate]-a", + collision_mask = placeable_collision, + collision_box = {{-3+px, -3+px}, {5-px, 3-px}}, + selection_box = {{-3+px, -3+px}, {5-px, 3-px}}, + selectable_in_game = true, + picture = { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/fragment-4.png", + width = 640, + height = 576, + shift = middle_shift({{-4, -4}, {6, 5}}), + scale = 0.5, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/fragment-4-shadow.png", + width = 704, + height = 576, + shift = middle_shift({{-4, -4}, {7, 5}}), + scale = 0.5, + }) + } + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-fragment-5", + localised_name = {"entity-name."..data_util.mod_prefix .. "gate-fragment"}, + minable = {mining_time = 0.5, result = data_util.mod_prefix .. "gate-fragment-5"}, + flags = {"placeable-neutral", "not-deconstructable", "not-blueprintable"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/fragment-5.png", + icon_size = 64, + render_layer = fragment_render_layer, + order = "a[ancient]-g[gate]-a", + collision_mask = placeable_collision, + collision_box = {{-1+px, -1+px}, {1-px, 1-px}}, + selection_box = {{-1+px, -1+px}, {1-px, 1-px}}, + selectable_in_game = true, + picture = { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/fragment-5.png", + width = 256, + height = 256, + shift = middle_shift({{-3, -2}, {1, 2}}), + scale = 0.5, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/fragment-5-shadow.png", + width = 320, + height = 192, + shift = {-0.5,0.5}, + scale = 0.5, + }) + } + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-fragment-6", + localised_name = {"entity-name."..data_util.mod_prefix .. "gate-fragment"}, + flags = {"placeable-neutral", "not-deconstructable", "not-blueprintable"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/fragment-6.png", + minable = {mining_time = 0.5, result = data_util.mod_prefix .. "gate-fragment-6"}, + icon_size = 64, + render_layer = fragment_render_layer, + order = "a[ancient]-g[gate]-a", + collision_mask = placeable_collision, + collision_box = {{-2+px, -1+px}, {2-px, 1-px}}, + selection_box = {{-2+px, -1+px}, {2-px, 1-px}}, + selectable_in_game = true, + picture = { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/fragment-6.png", + width = 384, + height = 256, + shift = middle_shift({{-3, -2}, {3, 2}}), + scale = 0.5, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/fragment-6-shadow.png", + width = 384, + height = 256, + shift = middle_shift({{-2, -2}, {4, 2}}), + scale = 0.5, + }) + } + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-fragment-7", + localised_name = {"entity-name."..data_util.mod_prefix .. "gate-fragment"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/fragment-7.png", + flags = {"placeable-neutral", "not-deconstructable", "not-blueprintable"}, + minable = {mining_time = 0.5, result = data_util.mod_prefix .. "gate-fragment-7"}, + icon_size = 64, + render_layer = fragment_render_layer, + order = "a[ancient]-g[gate]-a", + collision_mask = placeable_collision, + collision_box = {{-3+px, -2+px}, {3-px, 2-px}}, + selection_box = {{-3+px, -2+px}, {3-px, 2-px}}, + selectable_in_game = true, + picture = { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/fragment-7.png", + width = 448, + height = 384, + shift = middle_shift({{-4, -3}, {3, 3}}), + scale = 0.5, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/fragment-7-shadow.png", + width = 448, + height = 320, + shift = {-0.5,0.5}, + scale = 0.5, + }) + } + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-fragment-8", + localised_name = {"entity-name."..data_util.mod_prefix .. "gate-fragment"}, + minable = {mining_time = 0.5, result = data_util.mod_prefix .. "gate-fragment-8"}, + flags = {"placeable-neutral", "not-deconstructable", "not-blueprintable"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/fragment-8.png", + icon_size = 64, + render_layer = fragment_render_layer, + order = "a[ancient]-g[gate]-a", + collision_mask = placeable_collision, + collision_box = {{-3.5+px, -5+px}, {3.5-px, 5-px}}, + selection_box = {{-3.5+px, -5+px}, {3.5-px, 5-px}}, + selectable_in_game = true, + picture = { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/fragment-8.png", + width = 640, + height = 832, + shift = {-0.5, 0.5}, + scale = 0.5, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/fragment-8-shadow.png", + width = 640, + height = 832, + shift = {-0.5, 1.5}, + scale = 0.5, + }) + } + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-fragment-9", + localised_name = {"entity-name."..data_util.mod_prefix .. "gate-fragment"}, + minable = {mining_time = 0.5, result = data_util.mod_prefix .. "gate-fragment-9"}, + flags = {"placeable-neutral", "not-deconstructable", "not-blueprintable"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/fragment-9.png", + icon_size = 64, + render_layer = fragment_render_layer, + order = "a[ancient]-g[gate]-a", + collision_mask = placeable_collision, + collision_box = {{-2.5+px, -4.5+px}, {2.5-px, 2.5-px}}, + selection_box = {{-2.5+px, -4.5+px}, {2.5-px, 2.5-px}}, + selectable_in_game = true, + picture = { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/fragment-9.png", + width = 320, + height = 704, + shift = {0,-1}, + scale = 0.5, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/fragment-9-shadow.png", + width = 384, + height = 704, + shift = {0.5,0}, + scale = 0.5, + }) + } + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-fragment-10", + localised_name = {"entity-name."..data_util.mod_prefix .. "gate-fragment"}, + minable = {mining_time = 0.5, result = data_util.mod_prefix .. "gate-fragment-10"}, + flags = {"placeable-neutral", "not-deconstructable", "not-blueprintable"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/fragment-10.png", + icon_size = 64, + render_layer = fragment_render_layer, + order = "a[ancient]-g[gate]-a", + collision_mask = placeable_collision, + collision_box = {{-1+px, -3+px}, {1-px, 1-px}}, + selection_box = {{-1+px, -3+px}, {1-px, 1-px}}, + selectable_in_game = true, + picture = { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/fragment-10.png", + width = 320, + height = 512, + shift = {0.5,0}, + scale = 0.5, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/fragment-10-shadow.png", + width = 320, + height = 512, + shift = {1.5,0}, + scale = 0.5, + }) + } + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-fragment-11", + localised_name = {"entity-name."..data_util.mod_prefix .. "gate-fragment"}, + minable = {mining_time = 0.5, result = data_util.mod_prefix .. "gate-fragment-11"}, + flags = {"placeable-neutral", "not-deconstructable", "not-blueprintable"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/fragment-11.png", + icon_size = 64, + render_layer = fragment_render_layer, + order = "a[ancient]-g[gate]-a", + collision_mask = placeable_collision, + collision_box = {{-1+px, -1+px}, {1-px, 3-px}}, + selection_box = {{-1+px, -1+px}, {1-px, 3-px}}, + selectable_in_game = true, + picture = { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/fragment-11.png", + width = 256, + height = 384, + shift = middle_shift({{-2, -2}, {2, 4}}), + scale = 0.5, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/fragment-11-shadow.png", + width = 256, + height = 320, + shift = {0,1.5}, + scale = 0.5, + }) + } + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-fragment-12", + localised_name = {"entity-name."..data_util.mod_prefix .. "gate-fragment"}, + minable = {mining_time = 0.5, result = data_util.mod_prefix .. "gate-fragment-12"}, + flags = {"placeable-neutral", "not-deconstructable", "not-blueprintable"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/fragment-12.png", + icon_size = 64, + render_layer = fragment_render_layer, + order = "a[ancient]-g[gate]-a", + collision_mask = placeable_collision, + collision_box = {{-7+px, -6.5+px}, {5-px, 4.5-px}}, + selection_box = {{-7+px, -6.5+px}, {5-px, 4.5-px}}, + selectable_in_game = true, + picture = { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/fragment-12.png", + width = 832, + height = 896, + shift = {-1.5,-0.5}, + scale = 0.5, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/fragment-12-shadow.png", + width = 896, + height = 960, + shift = {-1,0}, + scale = 0.5, + }) + } + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-fragment-13", + localised_name = {"entity-name."..data_util.mod_prefix .. "gate-fragment"}, + minable = {mining_time = 0.5, result = data_util.mod_prefix .. "gate-fragment-13"}, + flags = {"placeable-neutral", "not-deconstructable", "not-blueprintable"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/fragment-13.png", + icon_size = 64, + render_layer = fragment_render_layer, + order = "a[ancient]-g[gate]-a", + collision_mask = placeable_collision, + collision_box = {{-9+px, -2+px}, {9-px, 6-px}}, + selection_box = {{-9+px, -2+px}, {9-px, 6-px}}, + selectable_in_game = true, + picture = { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/fragment-13.png", + width = 1344, + height = 640, + shift = {-0.5,3}, + scale = 0.5, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/fragment-13-shadow.png", + width = 1280, + height = 640, + shift = {1,3}, + scale = 0.5, + }) + } + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-fragment-14-a", + localised_name = {"entity-name."..data_util.mod_prefix .. "gate-fragment"}, + flags = {"placeable-neutral", "not-deconstructable", "not-blueprintable"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + render_layer = fragment_render_layer, + order = "a[ancient]-g[gate]-a", + collision_mask = {"not-colliding-with-itself"}, + collision_box = {{-6+px, -15+px}, {6-px, 15-px}}, + selection_box = {{-6+px, -15+px}, {6-px, 15-px}}, + selectable_in_game = false, + picture = { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/fragment-14-a.png", + width = 832, + height = 2176, + shift = {-0.5,1}, + scale = 0.5, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/fragment-14-a-shadow.png", + width = 832, + height = 2176, + shift = {-0.5,1}, + scale = 0.5, + }), + } + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-fragment-14-b", + localised_name = {"entity-name."..data_util.mod_prefix .. "gate-fragment"}, + flags = {"placeable-neutral", "not-deconstructable", "not-blueprintable"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + render_layer = fragment_render_layer, + order = "a[ancient]-g[gate]-a", + collision_mask = {"not-colliding-with-itself"}, + collision_box = {{-13.5+px, -1+px}, {13.5-px, 5-px}}, + selection_box = {{-13.5+px, -1+px}, {13.5-px, 5-px}}, + selectable_in_game = false, + picture = { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/fragment-14-b.png", + width = 2048, + height = 704, + shift = {2.5,3.5}, + scale = 0.5, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/fragment-14-b-shadow.png", + width = 2048, + height = 704, + shift = {2.5,3.5}, + scale = 0.5, + }) + } + } + }, + + -- addons + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-addon-1", + localised_name = {"entity-name."..data_util.mod_prefix.."gate-addon"}, + flags = {"placeable-neutral"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + render_layer = portal_addons_render_layer, + order = "a[ancient]-g[gate]-d[addon]", + collision_mask = {"not-colliding-with-itself"}, + collision_box = {{-2, -2}, {2, 2}}, + selection_box = {{-2, -2}, {2, 2}}, + selectable_in_game = false, + picture = { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/lock-addon-1.png", + width = 384, + height = 256, + shift = middle_shift({{-3, -1}, {3, 3}}), + scale = 0.5, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/lock-addon-1-shadow.png", + width = 320, + height = 128, + shift = middle_shift({{-2, 1}, {3, 3}}), + scale = 0.5, + }), + } + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-addon-2", + localised_name = {"entity-name."..data_util.mod_prefix.."gate-addon"}, + flags = {"placeable-neutral"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + render_layer = portal_addons_render_layer, + order = "a[ancient]-g[gate]-d[addon]", + collision_mask = {"not-colliding-with-itself"}, + collision_box = {{-2, -2}, {2, 2}}, + selection_box = {{-2, -2}, {2, 2}}, + selectable_in_game = false, + picture = { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/lock-addon-2.png", + width = 256, + height = 320, + shift = middle_shift({{-3, -3}, {1, 2}}), + scale = 0.5, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/lock-addon-2-shadow.png", + width = 256, + height = 128, + shift = {-1,2}, + scale = 0.5, + }), + } + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-addon-3", + localised_name = {"entity-name."..data_util.mod_prefix.."gate-addon"}, + flags = {"placeable-neutral"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + render_layer = portal_addons_render_layer, + order = "a[ancient]-g[gate]-d[addon]", + collision_mask = {"not-colliding-with-itself"}, + collision_box = {{-2, -2}, {2, 2}}, + selection_box = {{-2, -2}, {2, 2}}, + selectable_in_game = false, + picture = { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/lock-addon-3.png", + width = 256, + height = 320, + shift = middle_shift({{-3, -3}, {1, 2}}) , + scale = 0.5, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/lock-addon-3-shadow.png", + width = 128, + height = 192, + shift = {-1.5,1}, + scale = 0.5, + }), + } + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-addon-4", + localised_name = {"entity-name."..data_util.mod_prefix.."gate-addon"}, + flags = {"placeable-neutral"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + render_layer = portal_addons_render_layer, + order = "a[ancient]-g[gate]-d[addon]", + collision_mask = {"not-colliding-with-itself"}, + collision_box = {{-2, -2}, {2, 2}}, + selection_box = {{-2, -2}, {2, 2}}, + selectable_in_game = false, + picture = { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/lock-addon-4.png", + width = 320, + height = 192, + shift = {0.5,-1.5}, + scale = 0.5, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/lock-addon-4-shadow.png", + width = 128, + height = 64, + shift = {1,-1.5}, + scale = 0.5, + }), + } + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-addon-5", + localised_name = {"entity-name."..data_util.mod_prefix.."gate-addon"}, + flags = {"placeable-neutral"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + render_layer = portal_addons_render_layer, + order = "a[ancient]-g[gate]-d[addon]", + collision_mask = {"not-colliding-with-itself"}, + collision_box = {{-2, -2}, {2, 2}}, + selection_box = {{-2, -2}, {2, 2}}, + selectable_in_game = false, + picture = { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/lock-addon-5.png", + width = 320, + height = 192, + shift = middle_shift({{-2, -3}, {3, 0}}), + scale = 0.5, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/lock-addon-5-shadow.png", + width = 192, + height = 128, + shift = {2.5,-1}, + scale = 0.5, + }), + } + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-addon-6", + localised_name = {"entity-name."..data_util.mod_prefix.."gate-addon"}, + flags = {"placeable-neutral"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + render_layer = portal_addons_render_layer, + order = "a[ancient]-g[gate]-d[addon]", + collision_mask = {"not-colliding-with-itself"}, + collision_box = {{-2, -2}, {2, 2}}, + selection_box = {{-2, -2}, {2, 2}}, + selectable_in_game = false, + picture = { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/lock-addon-6.png", + width = 256, + height = 320, + shift = {1, -0.5}, + scale = 0.5, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/lock-addon-6-shadow.png", + width = 192, + height = 256, + shift = {2.5,0}, + scale = 0.5, + }), + } + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-addon-7", + localised_name = {"entity-name."..data_util.mod_prefix.."gate-addon"}, + flags = {"placeable-neutral"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + render_layer = portal_addons_render_layer, + order = "a[ancient]-g[gate]-d[addon]", + collision_mask = {"not-colliding-with-itself"}, + collision_box = {{-2, -2}, {2, 2}}, + selection_box = {{-2, -2}, {2, 2}}, + selectable_in_game = false, + picture = { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/lock-addon-7.png", + width = 256, + height = 320, + shift = middle_shift({{-1, -3}, {3, 2}}), + scale = 0.5, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/lock-addon-7-shadow.png", + width = 192, + height = 256, + shift = middle_shift({{0, -2}, {3, 2}}), + scale = 0.5, + }), + } + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-addon-8", + localised_name = {"entity-name."..data_util.mod_prefix.."gate-addon"}, + flags = {"placeable-neutral"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + render_layer = portal_addons_render_layer, + order = "a[ancient]-g[gate]-d[addon]", + collision_mask = {"not-colliding-with-itself"}, + collision_box = {{-2, -2}, {2, 2}}, + selection_box = {{-2, -2}, {2, 2}}, + selectable_in_game = false, + picture = { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/lock-addon-8.png", + width = 384, + height = 256, + shift = middle_shift({{-3, -1}, {3, 3}}), + scale = 0.5, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/lock-addon-8-shadow.png", + width = 384, + height = 192, + shift = middle_shift({{-3, 0}, {3, 3}}), + scale = 0.5, + }), + } + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-platform", + flags = {"placeable-neutral"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + render_layer = portal_addons_render_layer, + order = "a[ancient]-g[gate]-d[addon]", + collision_mask = {"not-colliding-with-itself"}, + collision_box = {{-4.5, -4}, {4.5, 2}}, + selection_box = {{-4.5, -4}, {4.5, 2}}, + selectable_in_game = false, + picture = { + layers = { + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/platform.png", + width = 704, + height = 384, + shift = middle_shift({{-5.5, -4}, {5.5, 2}}), + scale = 0.5, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/platform-shadow.png", + width = 768, + height = 192, + shift = {0.5,0.5}, + scale = 0.5, + }), + } + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-platform-button-left", + flags = {"placeable-neutral", "placeable-off-grid"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + render_layer = portal_buttons_render_layer, + order = "a[ancient]-g[gate]-b[button]", + collision_mask = {"not-colliding-with-itself"}, + collision_box = {{-0.5, -0.5}, {0.5, 0.5}}, + selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, + selectable_in_game = true, + pictures = { + blank_image, + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/platform-button-left.png", + width = 52, + height = 48, + shift = {0,0}, + scale = 0.5, + }) + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-platform-button-middle", + flags = {"placeable-neutral", "placeable-off-grid"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + render_layer = portal_buttons_render_layer, + order = "a[ancient]-g[gate]-b[button]", + collision_mask = {"not-colliding-with-itself"}, + collision_box = {{-0.5, -0.5}, {0.5, 0.5}}, + selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, + selectable_in_game = false, + pictures = { + blank_image, + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/platform-button-middle.png", + width = 54, + height = 48, + shift = {0,0}, + scale = 0.5, + }) + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-platform-button-right", + flags = {"placeable-neutral", "placeable-off-grid"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + render_layer = portal_buttons_render_layer, + order = "a[ancient]-g[gate]-b[button]", + collision_mask = {"not-colliding-with-itself"}, + collision_box = {{-0.5, -0.5}, {0.5, 0.5}}, + selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, + selectable_in_game = false, + pictures = { + blank_image, + data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/platform-button-right.png", + width = 48, + height = 48, + shift = {0,0}, + scale = 0.5, + }) + } + }, + { + type = "constant-combinator", + name = data_util.mod_prefix .. "gate-platform-button-switch", + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + order = "a[ancient]-g[gate]-z[invisible]", + flags = {"placeable-neutral", "placeable-off-grid", "not-deconstructable", "not-blueprintable", }, + collision_box = {{-0.5,-0.5},{0.5,0.5}}, + selection_box = {{-0.5,-0.5},{0.5,0.5}}, + selection_priority = 200, + collision_mask = {"not-colliding-with-itself"}, + item_slot_count = 0, + activity_led_light = { color = {b = 1,g = 1,r = 1},intensity = 0.8,size = 1}, + activity_led_light_offsets = {{0.296875,-0.40625},{0.25,-0.03125},{-0.296875,-0.078125},{-0.21875,-0.46875}}, + activity_led_sprites = { + east = blank_image, + north = blank_image, + south = blank_image, + west = blank_image, + }, + circuit_wire_connection_points = { + {shadow = {green = {0.71875,-0.1875},red = {0.21875,-0.1875}},wire = {green = {0.21875,-0.546875},red = {-0.265625,-0.546875}}}, + {shadow = {green = {1,0.25},red = {1,-0.15625}},wire = {green = {0.5,-0.109375},red = {0.5,-0.515625}}}, + {shadow = {green = {0.28125,0.625},red = {0.78125,0.625}},wire = {green = {-0.203125,0.234375},red = {0.28125,0.234375}}}, + {shadow = {green = {0.03125,-0.0625},red = {0.03125,0.34375}},wire = {green = {-0.46875,-0.421875},red = {-0.46875,-0.015625}}} + }, + circuit_wire_max_distance = 0, + max_health = 100000, + sprites = { + east = blank_image, + north = blank_image, + south = blank_image, + west = blank_image, + }, + }, + { + type = "constant-combinator", + name = data_util.mod_prefix .. "gate-lock-switch", + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + order = "a[ancient]-g[gate]-z[invisible]", + flags = {"placeable-neutral", "placeable-off-grid", "not-deconstructable", "not-blueprintable", }, + collision_box = {{-1.5,-1.5},{1.5,1.5}}, + selection_box = {{-1.5,-1.5},{1.5,1.5}}, + selection_priority = 200, + collision_mask = {"not-colliding-with-itself"}, + item_slot_count = 0, + activity_led_light = { color = {b = 1,g = 1,r = 1},intensity = 0.8,size = 1}, + activity_led_light_offsets = {{0.296875,-0.40625},{0.25,-0.03125},{-0.296875,-0.078125},{-0.21875,-0.46875}}, + activity_led_sprites = { + east = blank_image, + north = blank_image, + south = blank_image, + west = blank_image, + }, + circuit_wire_connection_points = { + {shadow = {green = {0.71875,-0.1875},red = {0.21875,-0.1875}},wire = {green = {0.21875,-0.546875},red = {-0.265625,-0.546875}}}, + {shadow = {green = {1,0.25},red = {1,-0.15625}},wire = {green = {0.5,-0.109375},red = {0.5,-0.515625}}}, + {shadow = {green = {0.28125,0.625},red = {0.78125,0.625}},wire = {green = {-0.203125,0.234375},red = {0.28125,0.234375}}}, + {shadow = {green = {0.03125,-0.0625},red = {0.03125,0.34375}},wire = {green = {-0.46875,-0.421875},red = {-0.46875,-0.015625}}} + }, + circuit_wire_max_distance = 0, + max_health = 100000, + sprites = { + east = blank_image, + north = blank_image, + south = blank_image, + west = blank_image, + }, + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-platform-indicator-green", + localised_name = {"entity-name.se-gate-part"}, + flags = {"placeable-neutral", "placeable-off-grid"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + render_layer = portal_buttons_render_layer, + order = "a[ancient]-g[gate]-b[button]", + collision_mask = {"not-colliding-with-itself"}, + collision_box = {{-0.1, -0.25}, {0.1, 0.25}}, + selection_box = {{-0.1, -0.25}, {0.1, 0.25}}, + selectable_in_game = false, + picture = data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/platform-indicator-green.png", + width = 14, + height = 26, + shift = {0,0}, + scale = 0.5, + }) + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-platform-indicator-yellow", + localised_name = {"entity-name.se-gate-part"}, + flags = {"placeable-neutral", "placeable-off-grid"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + render_layer = portal_buttons_render_layer, + order = "a[ancient]-g[gate]-b[button]", + collision_mask = {"not-colliding-with-itself"}, + collision_box = {{-0.1, -0.25}, {0.1, 0.25}}, + selection_box = {{-0.1, -0.25}, {0.1, 0.25}}, + selectable_in_game = false, + picture = data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/platform-indicator-yellow.png", + width = 14, + height = 26, + shift = {0,0}, + scale = 0.5, + }) + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-platform-indicator-red", + localised_name = {"entity-name.se-gate-part"}, + flags = {"placeable-neutral", "placeable-off-grid"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + render_layer = portal_buttons_render_layer, + order = "a[ancient]-g[gate]-b[button]", + collision_mask = {"not-colliding-with-itself"}, + collision_box = {{-0.1, -0.25}, {0.1, 0.25}}, + selection_box = {{-0.1, -0.25}, {0.1, 0.25}}, + selectable_in_game = false, + picture = data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/gate/hr/platform-indicator-red.png", + width = 14, + height = 26, + shift = {0,0}, + scale = 0.5, + }) + }, + { + type = "sprite", + name = data_util.mod_prefix .. "gate-void-sprite", + filename = "__space-exploration-graphics__/graphics/entity/gate/void.png", + priority = "extra-high", + width = 512, + height = 362, + shift = {0,0} + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-blocker", + localised_name = {"entity-name.se-gate-part"}, + flags = {"placeable-neutral"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + order = "a[ancient]-g[gate]-b[button]", + collision_mask = {"object-layer", "floor-layer", "item-layer"}, + collision_box = {{-0.49, -0.49}, {0.49, 0.49}}, + selection_box = {{-0.49, -0.49}, {0.49, 0.49}}, + selectable_in_game = false, + map_color = {r=0.8, g=0.8, b=0.8, a=1}, + picture = { + filename = "__space-exploration-graphics__/graphics/blank.png", + width = 1, + height = 1, + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-blocker-void", + localised_name = {"entity-name.se-gate-part"}, + flags = {"placeable-neutral"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + order = "a[ancient]-g[gate]-b[button]", + collision_mask = {"object-layer", "floor-layer", "item-layer"}, + collision_box = {{-0.49, -0.49}, {0.49, 0.49}}, + selection_box = {{-0.49, -0.49}, {0.49, 0.49}}, + selectable_in_game = false, + map_color = {r=0, g=0, b=0, a=1}, + picture = { + filename = "__space-exploration-graphics__/graphics/blank.png", + width = 1, + height = 1, + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "gate-tryplace", + localised_name = {"entity-name.se-gate-part"}, + flags = {"placeable-neutral"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + order = "a[ancient]-g[gate]-b[button]", + collision_mask = placeable_collision, + collision_box = {{-35.5, -26.5}, {35.5, 26.5}}, -- note gate registration point is at -0.5,-0.5 from this center + selection_box = {{-35.5, -26.5}, {35.5, 26.5}}, + selectable_in_game = false, + map_color = {r=1, g=0, b=0, a=1}, + picture = { + filename = "__space-exploration-graphics__/graphics/blank.png", + width = 1, + height = 1, + } + }, + + -- active entities + { + type = "storage-tank", + name = data_util.mod_prefix .. "gate-tank-input", + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + scale_info_icons = false, + render_layer = "higher-object-above", + flags = {"placeable-neutral", "not-deconstructable", "not-blueprintable"}, + max_health = 500, + order = "a[ancient]-g[gate]-z[invisible]", + corpse = "medium-remnants", + collision_box = {{-0.5+px,-0.5+px},{0.5-px,0.5-px}}, + collision_mask = {"not-colliding-with-itself"}, + selection_box = {{-0.5+px,-0.5+px},{0.5-px,0.5-px}}, + selectable_in_game = true, + fluid_box = + { + filter = data_util.mod_prefix .. "space-coolant-supercooled", + base_area = 10, -- gets multiplied by 100 by engine + base_level = -1, -- pull fluid in + pipe_covers = no_north_cover_pictures, + pipe_connections = + { + { position = {0, -1} }, + }, + secondary_draw_orders = { north = -1 } + }, + window_bounding_box = {{0, 0}, {0, 0}}, + pictures = + { + picture = blank_image, + fluid_background = blank_image, + window_background = blank_image, + flow_sprite = blank_image, + gas_flow = blank_image, + }, + flow_length_in_ticks = 360, + circuit_wire_max_distance = 0 + }, + { + type = "storage-tank", + name = data_util.mod_prefix .. "gate-tank-output", + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + order = "a[ancient]-g[gate]-z[invisible]", + scale_info_icons = false, + render_layer = "higher-object-above", + flags = {"placeable-neutral", "not-deconstructable", "not-blueprintable"}, + max_health = 500, + order = "a[ancient]-g[gate]-z[invisible]", + corpse = "medium-remnants", + collision_box = {{-0.5+px,-0.5+px},{0.5-px,0.5-px}}, + collision_mask = {"not-colliding-with-itself"}, + selection_box = {{-0.5+px,-0.5+px},{0.5-px,0.5-px}}, + selectable_in_game = true, + fluid_box = + { + filter = data_util.mod_prefix .. "space-coolant-hot", + base_area = 10, -- gets multiplied by 100 by engine + base_level = 2, -- push fluid out + pipe_covers = no_north_cover_pictures, + pipe_connections = + { + { position = {0, -1} }, + }, + secondary_draw_orders = { north = -1 } + }, + window_bounding_box = {{0, 0}, {0, 0}}, + pictures = + { + picture = blank_image, + fluid_background = blank_image, + window_background = blank_image, + flow_sprite = blank_image, + gas_flow = blank_image, + }, + flow_length_in_ticks = 360, + circuit_wire_max_distance = 0 + }, + { + type = "constant-combinator", + name = data_util.mod_prefix .. "gate-lock-combinator", + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + order = "a[ancient]-g[gate]-z[invisible]", + flags = {"placeable-neutral", "not-deconstructable", "not-blueprintable", "placeable-off-grid"}, + collision_box = {{-0.35,-0.35},{0.35,0.35}}, + selection_box = {{-0.5,-0.5},{0.5,0.5}}, + selection_priority = 200, + collision_mask = {"not-colliding-with-itself"}, + item_slot_count = 18, + activity_led_light = { color = {b = 1,g = 1,r = 1},intensity = 0.8,size = 1}, + activity_led_light_offsets = {{0.296875,-0.40625},{0.25,-0.03125},{-0.296875,-0.078125},{-0.21875,-0.46875}}, + activity_led_sprites = { + east = { + filename = "__base__/graphics/entity/combinator/activity-leds/constant-combinator-LED-E.png", + frame_count = 1, + width = 8, + height = 8, + shift = {0.25,0}, + hr_version = { + filename = "__base__/graphics/entity/combinator/activity-leds/hr-constant-combinator-LED-E.png", + frame_count = 1, + width = 14, + height = 14, + scale = 0.5, + shift = {0.234375,-0.015625}, + }, + }, + north = { + filename = "__base__/graphics/entity/combinator/activity-leds/constant-combinator-LED-N.png", + frame_count = 1, + width = 8, + height = 6, + shift = {0.28125,-0.375}, + hr_version = { + filename = "__base__/graphics/entity/combinator/activity-leds/hr-constant-combinator-LED-N.png", + frame_count = 1, + width = 14, + height = 12, + scale = 0.5, + shift = {0.28125,-0.359375}, + }, + }, + south = { + filename = "__base__/graphics/entity/combinator/activity-leds/constant-combinator-LED-S.png", + frame_count = 1, + width = 8, + height = 8, + shift = {-0.28125,0.0625}, + hr_version = { + filename = "__base__/graphics/entity/combinator/activity-leds/hr-constant-combinator-LED-S.png", + frame_count = 1, + width = 14, + height = 16, + scale = 0.5, + shift = {-0.28125,0.078125}, + }, + }, + west = { + filename = "__base__/graphics/entity/combinator/activity-leds/constant-combinator-LED-W.png", + frame_count = 1, + width = 8, + height = 8, + shift = {-0.21875,-0.46875}, + hr_version = { + filename = "__base__/graphics/entity/combinator/activity-leds/hr-constant-combinator-LED-W.png", + frame_count = 1, + width = 14, + height = 16, + scale = 0.5, + shift = {-0.21875,-0.46875}, + }, + } + }, + circuit_wire_connection_points = { + {shadow = {green = {0.71875,-0.1875},red = {0.21875,-0.1875}},wire = {green = {0.21875,-0.546875},red = {-0.265625,-0.546875}}}, + {shadow = {green = {1,0.25},red = {1,-0.15625}},wire = {green = {0.5,-0.109375},red = {0.5,-0.515625}}}, + {shadow = {green = {0.28125,0.625},red = {0.78125,0.625}},wire = {green = {-0.203125,0.234375},red = {0.28125,0.234375}}}, + {shadow = {green = {0.03125,-0.0625},red = {0.03125,0.34375}},wire = {green = {-0.46875,-0.421875},red = {-0.46875,-0.015625}}} + }, + circuit_wire_max_distance = 9, + max_health = 100000, + sprites = { + east = blank_image, + north = blank_image, + south = blank_image, + west = blank_image, + }, + }, + { + type = "constant-combinator", + name = data_util.mod_prefix .. "gate-platform-combinator", + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + order = "a[ancient]-g[gate]-z[invisible]", + flags = {"placeable-neutral", "not-deconstructable", "not-blueprintable", "placeable-off-grid"}, + collision_box = {{-0.35,-0.35},{0.35,0.35}}, + selection_box = {{-0.6,-0.7},{0.6,0}}, + selection_priority = 200, + collision_mask = {"not-colliding-with-itself"}, + item_slot_count = 18, + activity_led_light = { color = {b = 1,g = 1,r = 1},intensity = 0.8,size = 1}, + activity_led_light_offsets = {{0.296875,-0.40625},{0.25,-0.03125},{-0.296875,-0.078125},{-0.21875,-0.46875}}, + activity_led_sprites = { + east = { + filename = "__base__/graphics/entity/combinator/activity-leds/constant-combinator-LED-E.png", + frame_count = 1, + width = 8, + height = 8, + shift = {0.25,0}, + hr_version = { + filename = "__base__/graphics/entity/combinator/activity-leds/hr-constant-combinator-LED-E.png", + frame_count = 1, + width = 14, + height = 14, + scale = 0.5, + shift = {0.234375,-0.015625}, + }, + }, + north = { + filename = "__base__/graphics/entity/combinator/activity-leds/constant-combinator-LED-N.png", + frame_count = 1, + width = 8, + height = 6, + shift = {0.28125,-0.375}, + hr_version = { + filename = "__base__/graphics/entity/combinator/activity-leds/hr-constant-combinator-LED-N.png", + frame_count = 1, + width = 14, + height = 12, + scale = 0.5, + shift = {0.28125,-0.359375}, + }, + }, + south = { + filename = "__base__/graphics/entity/combinator/activity-leds/constant-combinator-LED-S.png", + frame_count = 1, + width = 8, + height = 8, + shift = {-0.28125,0.0625}, + hr_version = { + filename = "__base__/graphics/entity/combinator/activity-leds/hr-constant-combinator-LED-S.png", + frame_count = 1, + width = 14, + height = 16, + scale = 0.5, + shift = {-0.28125,0.078125}, + }, + }, + west = { + filename = "__base__/graphics/entity/combinator/activity-leds/constant-combinator-LED-W.png", + frame_count = 1, + width = 8, + height = 8, + shift = {-0.21875,-0.46875}, + hr_version = { + filename = "__base__/graphics/entity/combinator/activity-leds/hr-constant-combinator-LED-W.png", + frame_count = 1, + width = 14, + height = 16, + scale = 0.5, + shift = {-0.21875,-0.46875}, + }, + } + }, + circuit_wire_connection_points = { + {shadow = {green = {0.71875,-0.1875},red = {0.21875,-0.1875}},wire = {green = {0.21875,-0.546875},red = {-0.265625,-0.546875}}}, + {shadow = {green = {1,0.25},red = {1,-0.15625}},wire = {green = {0.5,-0.109375},red = {0.5,-0.515625}}}, + {shadow = {green = {0.28125,0.625},red = {0.78125,0.625}},wire = {green = {-0.203125,0.234375},red = {0.28125,0.234375}}}, + {shadow = {green = {0.03125,-0.0625},red = {0.03125,0.34375}},wire = {green = {-0.46875,-0.421875},red = {-0.46875,-0.015625}}} + }, + circuit_wire_max_distance = 9, + max_health = 100000, + sprites = { + east = blank_image, + north = blank_image, + south = blank_image, + west = blank_image, + }, + }, + { + type = "electric-energy-interface", + name = data_util.mod_prefix .. "gate-energy-interface", + icon = "__space-exploration-graphics__/graphics/icons/gate/gate.png", + icon_size = 64, + order = "a[ancient]-g[gate]-z[invisible]", + allow_copy_paste = false, + picture = blank_image, + collision_box = {{-4.5+px, -1.5+px},{4.5-px, 1.5-px}}, + selection_box = {{-4.5+px, -1.5+px},{4.5-px, 1.5-px}}, + collision_mask = {"not-colliding-with-itself"}, + selectable = false, + continuous_animation = true, + corpse = "medium-remnants", + energy_source = { + buffer_capacity = "1GJ", + --input_flow_limit = "60GW", -- total when all active (values over 60GW won't work) + input_flow_limit = "11GW", -- total when all active (values over 60GW won't work) + output_flow_limit = "0kW", + type = "electric", + usage_priority = "primary-input" + }, + energy_production = "0kW", + --energy_usage = "60GW", -- platform + 1x per lock + 1x for final energy spike final activation. + energy_usage = "10GW", -- platform + 1x per lock + 1x for final energy spike final activation. + flags = { + "placeable-player", + "player-creation", + "hidden", + "not-rotatable" + }, + max_health = 150000, + vehicle_impact_sound = { + filename = "__base__/sound/car-metal-impact.ogg", + volume = 0.65 + }, + working_sound = { + fade_in_ticks = 10, + fade_out_ticks = 30, + idle_sound = { + filename = "__base__/sound/accumulator-idle.ogg", + volume = 0.5 + }, + max_sounds_per_type = 3, + sound = { + filename = "__base__/sound/accumulator-working.ogg", + volume = 1 + } + } + }, + { + type = "animation", + name = data_util.mod_prefix .. "gate-cloud", + animation_speed = 0.5, + filename = "__base__/graphics/entity/cloud/cloud-45-frames.png", + flags = { + "compressed" + }, + frame_count = 45, + height = 256, + line_length = 7, + priority = "low", + scale = 3, + width = 256, + apply_runtime_tint = true, + blend_mode = "additive", --"additive-soft" + }, + { + type = "projectile", + name = data_util.mod_prefix .. "gate-spec-white", + direction_only = false, + flags = { "not-on-map", "placeable-off-grid" }, + acceleration = -0.001, + collision_mask = {"not-colliding-with-itself"}, + animation = { + filename = "__space-exploration-graphics__/graphics/entity/spaceship-particle/speck.png", + frame_count = 1, + height = 50, + priority = "high", + width = 3, + apply_runtime_tint = true, + blend_mode = "additive", --"additive-soft" + scale = 1 + }, + }, + { + type = "projectile", + name = data_util.mod_prefix .. "gate-spec-cyan", + direction_only = false, + flags = { "not-on-map", "placeable-off-grid" }, + acceleration = -0.001, + collision_mask = {"not-colliding-with-itself"}, + animation = { + filename = "__space-exploration-graphics__/graphics/entity/spaceship-particle/speck.png", + frame_count = 1, + height = 50, + priority = "high", + width = 3, + apply_runtime_tint = true, + blend_mode = "additive", --"additive-soft" + tint = {r = 0.0, g = 0.6, b = 1, a = 1}, + scale = 1 + }, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/genetics-laboratory.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/genetics-laboratory.lua new file mode 100644 index 0000000..e86eebb --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/genetics-laboratory.lua @@ -0,0 +1,164 @@ +local data_util = require("data_util") + +data:extend({ + { + type = "assembling-machine", + name = data_util.mod_prefix .. "space-genetics-laboratory", + icon = "__space-exploration-graphics__/graphics/icons/genetics-laboratory.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = {mining_time = 0.2, result = data_util.mod_prefix .. "space-genetics-laboratory"}, + max_health = 1200, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{-3.3, -3.3}, {3.3, 3.3}}, + selection_box = {{-3.5, -3.5}, {3.5, 3.5}}, + drawing_box = {{-3.5, -3.9}, {3.5, 3.5}}, + resistances = + { + { + type = "impact", + percent = 10 + } + }, + fluid_boxes = + { + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {0, -4} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {-4, 0} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {0, 4} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {4, 0} }}, + secondary_draw_orders = { north = -1 } + }, + --off_when_no_fluid_recipe = true + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + apparent_volume = 1.5, + idle_sound = { + filename = "__base__/sound/idle1.ogg", + volume = 0.6 + }, + sound = { + { + filename = "__base__/sound/chemical-plant.ogg", + volume = 0.8 + } + } + }, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + spaceship_collision_layer, + }, + animation = + { + layers = + { + { + filename = "__space-exploration-graphics-2__/graphics/entity/genetics-laboratory/sr/genetics-laboratory.png", + priority = "high", + width = 3584/8/2, + height = 2048/4/2, + frame_count = 32, + line_length = 8, + shift = util.by_pixel(0, -16), + animation_speed = 0.5, + hr_version = { + filename = "__space-exploration-graphics-2__/graphics/entity/genetics-laboratory/hr/genetics-laboratory.png", + priority = "high", + width = 3584/8, + height = 2048/4, + frame_count = 32, + line_length = 8, + shift = util.by_pixel(0, -16), + animation_speed = 0.5, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-2__/graphics/entity/genetics-laboratory/sr/genetics-laboratory-shadow.png", + priority = "high", + width = 604/2, + height = 302/2, + frame_count = 1, + line_length = 1, + repeat_count = 32, + shift = util.by_pixel(40, 8), + animation_speed = 0.5, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-2__/graphics/entity/genetics-laboratory/hr/genetics-laboratory-shadow.png", + priority = "high", + width = 604, + height = 302, + frame_count = 1, + line_length = 1, + repeat_count = 32, + shift = util.by_pixel(40, 8), + animation_speed = 0.5, + scale = 0.5, + } + }, + }, + }, + crafting_categories = {"space-genetics"}, + crafting_speed = 4, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + energy_usage = "1000kW", + ingredient_count = 12, + module_specification = + { + module_slots = 4 + }, + allowed_effects = {"consumption", "speed", "pollution"}, -- not "productivity", + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.5, size = 8, shift = {0.0, 0.0}, color = {r = 0.7, g = 0.8, b = 1}} + }, + }, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/growth-facility.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/growth-facility.lua new file mode 100644 index 0000000..7216753 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/growth-facility.lua @@ -0,0 +1,245 @@ +local data_util = require("data_util") + +local pipe_pics = table.deepcopy(data.raw["assembling-machine"]["assembling-machine-3"].fluid_boxes[1].pipe_picture) +data_util.replace_filenames_recursive(pipe_pics, + "__base__", + "__space-exploration-graphics__") +data_util.replace_filenames_recursive(pipe_pics, + "assembling-machine-3", + "assembling-machine") + + +data:extend({ + { + type = "assembling-machine", + name = data_util.mod_prefix .. "space-growth-facility", + icon = "__space-exploration-graphics__/graphics/icons/growth-facility.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = {mining_time = 0.2, result = data_util.mod_prefix .. "space-growth-facility"}, + max_health = 1500, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{-4.3, -4.3}, {4.3, 4.3}}, + selection_box = {{-4.5, -4.5}, {4.5, 4.5}}, + drawing_box = {{-4.5, -4.9}, {4.5, 4.5}}, + resistances = + { + { + type = "impact", + percent = 10 + } + }, + fluid_boxes = + { + { + production_type = "input", + --pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {-5, 2} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + --pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {-2, -5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + --pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {-5, 0} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + --pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {0, -5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + --pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {-5, -2} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + --pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {2, -5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {-2, 5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {5, 2} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {0, 5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {5, 0} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {2, 5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {5, -2} }}, + secondary_draw_orders = { north = -1 } + }, + --off_when_no_fluid_recipe = true + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + apparent_volume = 1.5, + idle_sound = { + filename = "__base__/sound/idle1.ogg", + volume = 0.6 + }, + sound = { + { + filename = "__base__/sound/chemical-plant.ogg", + volume = 0.8 + } + } + }, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + spaceship_collision_layer, + }, + animation = + { + layers = + { + { + filename = "__space-exploration-graphics-3__/graphics/entity/growth-facility/sr/growth-facility.png", + priority = "high", + width = 4032/7/2, + height = 3360/5/2, + frame_count = 32, + line_length = 7, + shift = util.by_pixel(0, -24), + animation_speed = 0.1, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/growth-facility/hr/growth-facility.png", + priority = "high", + width = 4032/7, + height = 3360/5, + frame_count = 32, + line_length = 7, + shift = util.by_pixel(0, -24), + animation_speed = 0.1, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/growth-facility/sr/growth-facility-shadow.png", + priority = "high", + width = 618/2, + height = 570/2, + frame_count = 1, + line_length = 1, + repeat_count = 32, + shift = util.by_pixel(8, 2), + animation_speed = 0.1, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/growth-facility/hr/growth-facility-shadow.png", + priority = "high", + width = 618, + height = 570, + frame_count = 1, + line_length = 1, + repeat_count = 32, + shift = util.by_pixel(8, 2), + animation_speed = 0.1, + scale = 0.5, + } + }, + }, + }, + crafting_categories = {"space-growth"}, + crafting_speed = 4, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + energy_usage = "4000kW", + ingredient_count = 12, + module_specification = + { + module_slots = 4 + }, + allowed_effects = {"consumption", "speed", "pollution"}, -- not "productivity", + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.5, size = 24, shift = {0.0, 0.0}, color = {r = 0.7, g = 0.8, b = 1}} + }, + }, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/laser-radi-thermo.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/laser-radi-thermo.lua new file mode 100644 index 0000000..3f5ed46 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/laser-radi-thermo.lua @@ -0,0 +1,481 @@ +local data_util = require("data_util") + +data:extend({ + { + type = "assembling-machine", + name = data_util.mod_prefix .. "space-laser-laboratory", + icon = "__space-exploration-graphics__/graphics/icons/laser-laboratory.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = {mining_time = 0.2, result = data_util.mod_prefix .. "space-laser-laboratory"}, + max_health = 1200, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{-3.3, -3.3}, {3.3, 3.3}}, + selection_box = {{-3.5, -3.5}, {3.5, 3.5}}, + drawing_box = {{-3.5, -3.9}, {3.5, 3.5}}, + resistances = + { + { + type = "impact", + percent = 10 + } + }, + fluid_boxes = + { + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {0, -4} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {-4, 0} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {0, 4} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {4, 0} }}, + secondary_draw_orders = { north = -1 } + }, + --off_when_no_fluid_recipe = true + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + apparent_volume = 1.5, + idle_sound = { + filename = "__base__/sound/idle1.ogg", + volume = 0.6 + }, + sound = { + { + filename = "__base__/sound/electric-furnace.ogg", + volume = 0.8 + } + } + }, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + }, + animation = + { + layers = + { + { + filename = "__space-exploration-graphics-2__/graphics/entity/laser-laboratory/sr/laser-laboratory.png", + priority = "high", + width = 3584/8/2, + height = 3840/8/2, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(0, -8), + animation_speed = 0.75, + hr_version = { + filename = "__space-exploration-graphics-2__/graphics/entity/laser-laboratory/hr/laser-laboratory.png", + priority = "high", + width = 3584/8, + height = 3840/8, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(0, -8), + animation_speed = 0.75, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-2__/graphics/entity/laser-laboratory/sr/laser-laboratory-shadow.png", + priority = "high", + width = 442/2, + height = 394/2, + frame_count = 1, + line_length = 1, + repeat_count = 64, + shift = util.by_pixel(21, 13), + animation_speed = 0.75, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-2__/graphics/entity/laser-laboratory/hr/laser-laboratory-shadow.png", + priority = "high", + width = 442, + height = 394, + frame_count = 1, + line_length = 1, + repeat_count = 64, + shift = util.by_pixel(21, 13), + animation_speed = 0.75, + scale = 0.5, + } + }, + }, + }, + crafting_categories = {"space-laser"}, + crafting_speed = 1, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + energy_usage = "5MW", + ingredient_count = 12, + module_specification = + { + module_slots = 4 + }, + allowed_effects = {"consumption", "speed", "pollution"}, -- not "productivity", + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.8, size = 18, shift = {0.0, 0.0}, color = {r = 1, g = 0.2, b = 0.2}} + }, + }, + }, + { + type = "assembling-machine", + name = data_util.mod_prefix .. "space-radiation-laboratory", + icon = "__space-exploration-graphics__/graphics/icons/radiation-laboratory.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = {mining_time = 0.2, result = data_util.mod_prefix .. "space-radiation-laboratory"}, + max_health = 1200, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{-3.3, -3.3}, {3.3, 3.3}}, + selection_box = {{-3.5, -3.5}, {3.5, 3.5}}, + drawing_box = {{-3.5, -3.9}, {3.5, 3.5}}, + resistances = + { + { + type = "impact", + percent = 10 + } + }, + fluid_boxes = + { + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {0, -4} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {-4, 0} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {0, 4} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {4, 0} }}, + secondary_draw_orders = { north = -1 } + }, + --off_when_no_fluid_recipe = true + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + apparent_volume = 1.5, + idle_sound = { + filename = "__base__/sound/idle1.ogg", + volume = 0.6 + }, + sound = { + { + filename = "__base__/sound/electric-furnace.ogg", + volume = 0.8 + } + } + }, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + }, + animation = + { + layers = + { + { + filename = "__space-exploration-graphics-2__/graphics/entity/radiation-laboratory/sr/radiation-laboratory.png", + priority = "high", + width = 3584/8/2, + height = 3840/8/2, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(0, -8), + animation_speed = 0.75, + hr_version = { + filename = "__space-exploration-graphics-2__/graphics/entity/radiation-laboratory/hr/radiation-laboratory.png", + priority = "high", + width = 3584/8, + height = 3840/8, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(0, -8), + animation_speed = 0.75, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-2__/graphics/entity/radiation-laboratory/sr/radiation-laboratory-shadow.png", + priority = "high", + width = 442/2, + height = 394/2, + frame_count = 1, + line_length = 1, + repeat_count = 64, + shift = util.by_pixel(21, 13), + animation_speed = 0.75, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-2__/graphics/entity/radiation-laboratory/hr/radiation-laboratory-shadow.png", + priority = "high", + width = 442, + height = 394, + frame_count = 1, + line_length = 1, + repeat_count = 64, + shift = util.by_pixel(21, 13), + animation_speed = 0.75, + scale = 0.5, + } + }, + }, + }, + crafting_categories = {"space-radiation", "centrifuging"}, + crafting_speed = 1, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + energy_usage = "1000kW", + ingredient_count = 12, + module_specification = + { + module_slots = 4 + }, + allowed_effects = {"consumption", "speed", "pollution"}, -- not "productivity", + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.8, size = 18, shift = {0.0, 0.0}, color = {r = 0.3, g = 1, b = 0.1}} + }, + }, + }, + { + type = "assembling-machine", + name = data_util.mod_prefix .. "space-thermodynamics-laboratory", + icon = "__space-exploration-graphics__/graphics/icons/thermodynamics-laboratory.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = {mining_time = 0.2, result = data_util.mod_prefix .. "space-thermodynamics-laboratory"}, + max_health = 1200, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{-3.3, -3.3}, {3.3, 3.3}}, + selection_box = {{-3.5, -3.5}, {3.5, 3.5}}, + drawing_box = {{-3.5, -3.9}, {3.5, 3.5}}, + resistances = + { + { + type = "impact", + percent = 10 + } + }, + fluid_boxes = + { + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {0, -4} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {-4, 0} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {0, 4} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {4, 0} }}, + secondary_draw_orders = { north = -1 } + }, + --off_when_no_fluid_recipe = true + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + apparent_volume = 1.5, + idle_sound = { + filename = "__base__/sound/idle1.ogg", + volume = 0.6 + }, + sound = { + { + filename = "__base__/sound/electric-furnace.ogg", + volume = 0.8 + } + } + }, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + }, + animation = + { + layers = + { + { + filename = "__space-exploration-graphics-2__/graphics/entity/thermodynamics-laboratory/sr/thermodynamics-laboratory.png", + priority = "high", + width = 3584/8/2, + height = 3840/8/2, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(0, -8), + animation_speed = 0.75, + hr_version = { + filename = "__space-exploration-graphics-2__/graphics/entity/thermodynamics-laboratory/hr/thermodynamics-laboratory.png", + priority = "high", + width = 3584/8, + height = 3840/8, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(0, -8), + animation_speed = 0.75, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-2__/graphics/entity/thermodynamics-laboratory/sr/thermodynamics-laboratory-shadow.png", + priority = "high", + width = 442/2, + height = 394/2, + frame_count = 1, + line_length = 1, + repeat_count = 64, + shift = util.by_pixel(21, 13), + animation_speed = 0.75, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-2__/graphics/entity/thermodynamics-laboratory/hr/thermodynamics-laboratory-shadow.png", + priority = "high", + width = 442, + height = 394, + frame_count = 1, + line_length = 1, + repeat_count = 64, + shift = util.by_pixel(21, 13), + animation_speed = 0.75, + scale = 0.5, + } + }, + }, + }, + crafting_categories = {"space-thermodynamics", "smelting"}, + crafting_speed = 4, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + energy_usage = "1000kW", + ingredient_count = 12, + module_specification = + { + module_slots = 4 + }, + allowed_effects = {"consumption", "speed", "pollution"}, -- not "productivity", + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.8, size = 18, shift = {0.0, 0.0}, color = {r = 1, g = 0.7, b = 0.1}} + }, + }, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/light.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/light.lua new file mode 100644 index 0000000..1488464 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/light.lua @@ -0,0 +1,44 @@ +local data_util = require("data_util") +-- use projectile for light becuase they are can be positioned, moved, and removed at a specific time. +local function make_light(name, light) + data:extend( { + { + type = "projectile", + name = name, + acceleration = 0, + animation = { + filename = "__space-exploration-graphics__/graphics/blank.png", + frame_count = 1, + height = 1, + line_length = 1, + priority = "high", + width = 1 + }, + flags = { "not-on-map", "placeable-off-grid" }, + light = light, + } + }) +end + +make_light(data_util.mod_prefix .."light-space-capsule", { + intensity = 0.4, + size = 16, + color = {r = 255, g = 225, b = 195} +}) + +make_light(data_util.mod_prefix .. "light-space-capsule-launch", { + intensity = 2, + size = 8, + color = {r = 255, g = 50, b = 0} +}) + +make_light(data_util.mod_prefix .. "gate-light", { + intensity = 0.15, + size = 40, + color = {r = 255, g = 250, b = 255} +}) +make_light(data_util.mod_prefix .. "gate-light-middle", { + intensity = 1, + size = 64, + color = {r = 255, g = 250, b = 255} +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/meteor-defence.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/meteor-defence.lua new file mode 100644 index 0000000..53c7f12 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/meteor-defence.lua @@ -0,0 +1,453 @@ +local data_util = require("data_util") + +local blank_image = { + filename = "__space-exploration-graphics__/graphics/blank.png", + width = 1, + height = 1, + frame_count = 1, + line_length = 1, + direction_count = 1, + shift = { 0, 0 }, +} + +local selection_box = { { -4.5, -4.5 }, { 4.5, 4.5 } } +local collision_box = { { -4.3, -4.3 }, { 4.3, 4.3 } } + +data:extend({ + { + type = "ammo-turret", + name = data_util.mod_prefix .. "meteor-defence-container", + minable = { + mining_time = 0.5, + result = data_util.mod_prefix .. "meteor-defence" + }, + alert_when_attacking = false, + automated_ammo_count = 4, + attack_parameters = { + ammo_category = data_util.mod_prefix .. "meteor-defence", + cooldown = 300, + range = 1, + type = "projectile" + }, + base_picture_render_layer = "object", + base_picture = { + layers = { + { + filename = "__space-exploration-graphics-3__/graphics/entity/meteor-defence/meteor-defence.png", + shift = { 0, -4.75 }, + width = 616/2, + height = 1198/2, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/meteor-defence/hr-meteor-defence.png", + shift = { 0, -4.75 }, + width = 616, + height = 1198, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/meteor-defence/meteor-defence-shadow.png", + shift = { 2.5, 2/32 }, + width = 890/2, + height = 578/2, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/meteor-defence/hr-meteor-defence-shadow.png", + shift = { 2.5, 2/32 }, + width = 890, + height = 578, + scale = 0.5, + } + } + } + }, + call_for_help_radius = 40, + folded_animation = blank_image, + collision_box = collision_box, + drawing_box = { { -4.5, -4.5-9 }, { 4.5, 4.5 } }, + collision_mask = { + "water-tile", + "item-layer", + "object-layer", + "player-layer", + spaceship_collision_layer, + }, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + flags = {"placeable-neutral", "player-creation"}, + icon = "__space-exploration-graphics__/graphics/icons/meteor-defence.png", + icon_size = 64, + order = "b-a", + inventory_size = 1, + max_health = 8000, + resistances = { + { type = "impact", percent = 100 }, + { type = "fire", percent = 100 } + }, + open_sound = { + filename = "__base__/sound/machine-open.ogg", + volume = 0.85 + }, + close_sound = { + filename = "__base__/sound/machine-close.ogg", + volume = 0.75 + }, + rotation_speed = 0.015, + selection_box = selection_box, + selection_priority = 100, + vehicle_impact_sound = { + filename = "__base__/sound/car-metal-impact.ogg", + volume = 0.65 + } + }, + { + type = "electric-energy-interface", + name = data_util.mod_prefix .. "meteor-defence-charger", + icon = "__space-exploration-graphics__/graphics/icons/meteor-defence.png", + flags = {"placeable-player", "player-creation", "placeable-off-grid", "not-deconstructable", "not-blueprintable"}, + icon_size = 64, + order = "b-a", + selectable_in_game = false, + selection_box = { { -4.5, -4.5 }, { 4.5, 4.5 } }, + collision_box = collision_box, + energy_source = { + buffer_capacity = "2000MJ", + input_flow_limit = "20MW", + type = "electric", + usage_priority = "secondary-input" + }, + energy_usage = "5MW" + }, + { + type = "explosion", + name = data_util.mod_prefix .. "meteor-defence-beam", + animations = { + { + filename = "__space-exploration-graphics-3__/graphics/entity/meteor-defence/meteor-defence-beam.png", + frame_count = 6, + height = 1, + priority = "extra-high", + width = 187 + } + }, + beam = true, + flags = { "not-on-map", "placeable-off-grid"}, + light = { + color = { + b = 0, + g = 0, + r = 1 + }, + intensity = 1, + size = 20 + }, + rotate = true, + smoke = "smoke-fast", + smoke_count = 2, + smoke_slow_down_factor = 1, + sound = { + { + filename = "__base__/sound/fight/old/huge-explosion.ogg", + volume = 1 + } + }, + }, + { + type = "ammo-turret", + name = data_util.mod_prefix .. "meteor-point-defence-container", + minable = { + mining_time = 0.3, + result = data_util.mod_prefix .. "meteor-point-defence", + }, + alert_when_attacking = false, + automated_ammo_count = 4, + attack_parameters = { + ammo_category = data_util.mod_prefix .. "meteor-point-defence", + cooldown = 300, + range = 64, + type = "projectile" + }, + base_picture_render_layer = "object", + base_picture = { + layers = { + { + filename = "__space-exploration-graphics-3__/graphics/entity/meteor-point-defence/meteor-point-defence-base.png", + shift = { 1/32, -1.5 }, + width = 206/2, + height = 400/2, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/meteor-point-defence/hr-meteor-point-defence-base.png", + shift = { 1/32, -1.5 }, + width = 206, + height = 400, + scale = 0.5, + } + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/meteor-point-defence/meteor-point-defence-mask.png", + shift = { 1/32, -1.5 }, + width = 206/2, + height = 400/2, + tint = {r=255,g=0,b=0}, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/meteor-point-defence/hr-meteor-point-defence-mask.png", + shift = { 1/32, -1.5 }, + width = 206, + height = 400, + scale = 0.5, + tint = {r=255,g=0,b=0}, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/meteor-point-defence/meteor-point-defence-shadow.png", + shift = { 1.7, 0.6 }, + width = 408/2, + height = 136/2, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/meteor-point-defence/hr-meteor-point-defence-shadow.png", + shift = { 1.7, 0.6 }, + width = 408, + height = 136, + scale = 0.5, + } + } + } + }, + call_for_help_radius = 40, + folded_animation = blank_image, + collision_box = { { -1.35, -1.35 }, { 1.35, 1.35 } }, + drawing_box = { {-1.35, -4.35}, {1.35, 1.35} }, + collision_mask = { + "water-tile", + "item-layer", + "object-layer", + "player-layer", + }, + corpse = "medium-remnants", + dying_explosion = "medium-explosion", + flags = {"placeable-neutral", "player-creation"}, + icon = "__space-exploration-graphics__/graphics/icons/meteor-point-defence.png", + icon_size = 64, + order = "a-a", + inventory_size = 1, + max_health = 2000, + resistances = { + { type = "impact", percent = 100 }, + { type = "fire", percent = 100 } + }, + open_sound = { + filename = "__base__/sound/machine-open.ogg", + volume = 0.85 + }, + close_sound = { + filename = "__base__/sound/machine-close.ogg", + volume = 0.75 + }, + rotation_speed = 0.015, + selection_box = { { -1.5, -1.5 }, { 1.5, 1.5 } }, + selection_priority = 100, + vehicle_impact_sound = { + filename = "__base__/sound/car-metal-impact.ogg", + volume = 0.65 + } + }, + { + type = "sprite", + name = data_util.mod_prefix .. "meteor-point-defence-mask", + filename = "__space-exploration-graphics-3__/graphics/entity/meteor-point-defence/meteor-point-defence-mask.png", + shift = { 1/32, -1.5 }, + width = 206/2, + height = 400/2, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/meteor-point-defence/hr-meteor-point-defence-mask.png", + shift = { 1/32, -1.5 }, + width = 206, + height = 400, + scale = 0.5, + } + }, + { + type = "electric-energy-interface", + name = data_util.mod_prefix .. "meteor-point-defence-charger", + icon = "__space-exploration-graphics__/graphics/icons/meteor-point-defence.png", + flags = {"placeable-player", "player-creation", "placeable-off-grid", "not-deconstructable", "not-blueprintable"}, + + render_layer="object", + picture = { + layers = { + { + filename = "__space-exploration-graphics-3__/graphics/entity/meteor-point-defence/meteor-point-defence-base.png", + shift = { 1/32, -1.5 }, + width = 206/2, + height = 400/2, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/meteor-point-defence/hr-meteor-point-defence-base.png", + shift = { 1/32, -1.5 }, + width = 206, + height = 400, + scale = 0.5, + } + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/meteor-point-defence/meteor-point-defence-mask.png", + shift = { 1/32, -1.5 }, + width = 206/2, + height = 400/2, + tint = {r=255,g=0,b=0}, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/meteor-point-defence/hr-meteor-point-defence-mask.png", + shift = { 1/32, -1.5 }, + width = 206, + height = 400, + scale = 0.5, + tint = {r=255,g=0,b=0}, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/meteor-point-defence/meteor-point-defence-shadow.png", + shift = { 1.7, 0.6 }, + width = 408/2, + height = 136/2, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/meteor-point-defence/hr-meteor-point-defence-shadow.png", + shift = { 1.7, 0.6 }, + width = 408, + height = 136, + scale = 0.5, + } + } + } + }, + icon_size = 64, + order = "a-a", + selectable_in_game = false, + selection_box = { { -1.5, -1.5 }, { 1.5, 1.5 } }, + collision_box = { { -1.35, -1.35 }, { 1.35, 1.35 } }, + collision_mask = {"not-colliding-with-itself"}, + energy_source = { + buffer_capacity = "200MJ", + input_flow_limit = "2MW", + type = "electric", + usage_priority = "secondary-input" + }, + energy_usage = "0.5MW" + }, + { + type = "electric-energy-interface", + name = data_util.mod_prefix .. "meteor-point-defence-charger-overcharged", + + render_layer="object", + picture = { + layers = { + { + filename = "__space-exploration-graphics-3__/graphics/entity/meteor-point-defence/meteor-point-defence-base.png", + shift = { 1/32, -1.5 }, + width = 206/2, + height = 400/2, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/meteor-point-defence/hr-meteor-point-defence-base.png", + shift = { 1/32, -1.5 }, + width = 206, + height = 400, + scale = 0.5, + } + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/meteor-point-defence/meteor-point-defence-mask.png", + shift = { 1/32, -1.5 }, + width = 206/2, + height = 400/2, + tint = {r=200,g=100,b=0}, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/meteor-point-defence/hr-meteor-point-defence-mask.png", + shift = { 1/32, -1.5 }, + width = 206, + height = 400, + scale = 0.5, + tint = {r=200,g=100,b=0}, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/meteor-point-defence/meteor-point-defence-shadow.png", + shift = { 1.7, 0.6 }, + width = 408/2, + height = 136/2, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/meteor-point-defence/hr-meteor-point-defence-shadow.png", + shift = { 1.7, 0.6 }, + width = 408, + height = 136, + scale = 0.5, + } + } + } + }, + icon = "__space-exploration-graphics__/graphics/icons/meteor-point-defence.png", + flags = {"placeable-player", "player-creation", "placeable-off-grid", "not-deconstructable", "not-blueprintable"}, + icon_size = 64, + selectable_in_game = false, + selection_box = { { -1.5, -1.5 }, { 1.5, 1.5 } }, + collision_box = { { -1.35, -1.35 }, { 1.35, 1.35 } }, + collision_mask = {"not-colliding-with-itself"}, + energy_source = { + buffer_capacity = "1000MJ", + input_flow_limit = "10GW", + type = "electric", + usage_priority = "primary-input" + }, + energy_usage = "0.25MW" + }, + { + type = "explosion", + name = data_util.mod_prefix .. "meteor-point-defence-beam", + animations = { + { + filename = "__space-exploration-graphics-3__/graphics/entity/meteor-point-defence/meteor-point-defence-beam.png", + frame_count = 6, + height = 1, + priority = "extra-high", + width = 576/6 + } + }, + beam = true, + flags = { "not-on-map", "placeable-off-grid"}, + light = { + color = { + b = 0.5, + g = 0.95, + r = 1 + }, + intensity = 1, + size = 20 + }, + rotate = true, + smoke = "smoke-fast", + smoke_count = 2, + smoke_slow_down_factor = 1, + sound = { + { + filename = "__base__/sound/fight/heavy-gunshot-1.ogg", + volume = 0.45 + }, + { + filename = "__base__/sound/fight/heavy-gunshot-2.ogg", + volume = 0.45 + }, + { + filename = "__base__/sound/fight/heavy-gunshot-3.ogg", + volume = 0.45 + }, + { + filename = "__base__/sound/fight/heavy-gunshot-4.ogg", + volume = 0.45 + } + }, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/meteor.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/meteor.lua new file mode 100644 index 0000000..632a165 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/meteor.lua @@ -0,0 +1,358 @@ +local data_util = require("data_util") +--[[ +meteors +projectile falls from the sky +shadow moves sideways +projectile causes explosion and spawns a rock +]]-- +local meteors = { + ["meteor-01"] = {209, 138}, + ["meteor-02"] = {165,129}, + ["meteor-03"] = {151,139}, + ["meteor-04"] = {216,110}, + ["meteor-05"] = {154,147}, + ["meteor-06"] = {154,132}, + ["meteor-07"] = {193,120}, + ["meteor-08"] = {136,117}, + ["meteor-09"] = {157,115}, + ["meteor-10"] = {198,153}, + ["meteor-11"] = {190,115}, + ["meteor-12"] = {229,126}, + ["meteor-13"] = {151,125}, + ["meteor-14"] = {137,117}, + ["meteor-15"] = {201,141}, + ["meteor-16"] = {209,154}, +} + +local tint = {r = 0.5, g = 0.5, b = 0.5} + +for name, meteor in pairs(meteors) do + local width = meteor[1] + local height = meteor[2] + local shadow_width = meteor[1] + local shadow_height = meteor[2] + local scale = 0.75 + local picture_offset = width / 32 / 16 + data:extend({ + { + type = "projectile", + name = data_util.mod_prefix.."falling-" .. name, + acceleration = 0, + rotatable = false, + animation = { + filename = "__space-exploration-graphics__/graphics/entity/meteor/hr-"..name..".png", + frame_count = 1, + width = width, + height = height, + line_length = 1, + priority = "high", + shift = { picture_offset, 0 }, + tint=tint, + scale = scale, + }, + action = { + action_delivery = { + target_effects = { + { + action = { + action_delivery = { + target_effects = { + { + damage = { + amount = 20, + type = "meteor" + }, + type = "damage" + }, + }, + type = "instant" + }, + radius = 10, + type = "area" + }, + type = "nested-result" + }, + { + action = { + action_delivery = { + target_effects = { + { + damage = { + amount = 100, + type = "meteor" + }, + type = "damage" + }, + }, + type = "instant" + }, + radius = 4, + type = "area" + }, + type = "nested-result" + }, + { + action = { + action_delivery = { + target_effects = { + { + damage = { + amount = 200, + type = "meteor" + }, + type = "damage" + }, + }, + type = "instant" + }, + radius = 2, + type = "area" + }, + type = "nested-result" + }, + { + action = { + action_delivery = { + target_effects = { + { + damage = { + amount = 10000, + type = "meteor" + }, + type = "damage" + }, + }, + type = "instant" + }, + radius = 1, + type = "area" + }, + type = "nested-result" + }, + { + type = "create-entity", + entity_name = data_util.mod_prefix.."meteor-explosion", + }, + { + type = "create-entity", + check_buildability = false, + entity_name = data_util.mod_prefix.."static-"..name, + }, + { + type = "create-entity", + entity_name = data_util.mod_prefix .. "trigger-movable-debris", + trigger_created_entity = true, + }, + }, + type = "instant" + }, + type = "direct" + }, + flags = { "not-on-map" }, + light = { intensity = 1, size = 5, color={r=1,g=0.7,b=0.3}}, + smoke = { + { + deviation = { + 0.15, + 0.15 + }, + frequency = 1, + --name = "smoke-fast", + --name = "smoke-explosion-particle", + name = "soft-fire-smoke", -- lasts longer + position = {0,0}, + slow_down_factor = 1, + starting_frame = 3, + starting_frame_deviation = 5, + starting_frame_speed = 0, + starting_frame_speed_deviation = 5 + } + }, + }, + { + type = "projectile", + name = data_util.mod_prefix.."shadow-" .. name, + acceleration = 0, + rotatable = false, + animation = { + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/meteor/shadows/hr-"..name..".png", + frame_count = 1, + width = shadow_width, + height = shadow_height, + line_length = 1, + priority = "high", + shift = { picture_offset, 0 }, + tint=tint, + scale = scale, + }, + flags = { "not-on-map" }, + }, + { + type = "simple-entity", + name = data_util.mod_prefix.."static-"..name, + icon = "__space-exploration-graphics__/graphics/icons/astronomic/asteroid-belt.png", + icon_size = 64, + flags = {"placeable-neutral", "placeable-off-grid", "not-on-map"}, + subgroup = "wrecks", + order = "d[remnants]-d[ship-wreck]-c[small]-a", + max_health = 1000, + minable = { + mining_time = 1, + results={ + {name = "stone", amount_min = 9, amount_max = 31}, + {name = "iron-ore", amount_min = 0, amount_max = 30}, + {name = "copper-ore", amount_min = 0, amount_max = 30}, + {name = "uranium-ore", amount_min = 0, amount_max = 30, probability = 0.1}, + } + }, + resistances = + { + { type = "fire", percent = 100 }, + { type = "poison", percent = 100 } + }, + collision_box = {{-1, -1}, {1, 1}}, + collision_mask = {"not-colliding-with-itself"}, -- otherwise it kills the entity ghosts too + selection_box = {{-1, -1}, {1, 1}}, + selection_priority = 2, + count_as_rock_for_filtered_deconstruction = true, + picture = + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/entity/meteor/hr-"..name..".png", + width = width, + height = height, + shift = { picture_offset, 0 }, + tint=tint, + scale = scale, + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/meteor/shadows/hr-"..name..".png", + width = shadow_width, + height = shadow_height, + shift = { picture_offset, 0 }, + tint=tint, + scale = scale, + } + } + }, + render_layer = "object", + localised_name = {"entity-name.meteorite"} + }, + + }) +end + +data:extend({ + { + animation = { + direction_count = 1, + frame_count = 1, + filename = "__base__/graphics/entity/scorchmark/small-scorchmark.png", + width = 128, + height = 92, + line_length = 4, + shift = util.by_pixel(0, 2), + variation_count = 4, + hr_version = + { + direction_count = 1, + frame_count = 1, + filename = "__base__/graphics/entity/scorchmark/hr-small-scorchmark.png", + width = 256, + height = 182, + line_length = 4, + shift = util.by_pixel(0, 2), + variation_count = 4, + scale = 0.5, + } + }, + collision_box = { + { + -1.5, + -1.5 + }, + { + 1.5, + 1.5 + } + }, + collision_mask = { + "doodad-layer", + "not-colliding-with-itself" + }, + final_render_layer = "ground-patch-higher2", + flags = { + "placeable-neutral", + "not-on-map", + "placeable-off-grid" + }, + ground_patch = + { + sheet = + { + filename = "__base__/graphics/entity/scorchmark/small-scorchmark.png", + width = 128, + height = 92, + line_length = 4, + shift = util.by_pixel(0, 2), + variation_count = 4, + hr_version = + { + filename = "__base__/graphics/entity/scorchmark/hr-small-scorchmark.png", + width = 256, + height = 182, + line_length = 4, + shift = util.by_pixel(0, 2), + variation_count = 4, + scale = 0.5, + } + } + }, + ground_patch_higher = + { + sheet = + { + filename = "__base__/graphics/entity/scorchmark/small-scorchmark-top.png", + width = 34, + height = 28, + line_length = 4, + variation_count = 4, + shift = util.by_pixel(0, -2), + hr_version = + { + filename = "__base__/graphics/entity/scorchmark/hr-small-scorchmark-top.png", + width = 68, + height = 54, + line_length = 4, + shift = util.by_pixel(0, -2), + variation_count = 4, + scale = 0.5, + } + } + }, + icon = "__base__/graphics/icons/small-scorchmark.png", + icon_size = 64, + name = data_util.mod_prefix.."meteor-scorchmark", + order = "d[remnants]-b[scorchmark]-a[small]", + remove_on_entity_placement = false, + remove_on_tile_placement = true, + selectable_in_game = false, + selection_box = { + { + -1, + -1 + }, + { + 1, + 1 + } + }, + subgroup = "remnants", + time_before_removed = 36000, + type = "corpse" + }, + +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/particle-acc-col-fab.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/particle-acc-col-fab.lua new file mode 100644 index 0000000..0482e86 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/particle-acc-col-fab.lua @@ -0,0 +1,483 @@ +local data_util = require("data_util") + +data:extend({ + { + type = "assembling-machine", + name = data_util.mod_prefix .. "space-particle-accelerator", + icon = "__space-exploration-graphics__/graphics/icons/particle-accelerator.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = {mining_time = 0.2, result = data_util.mod_prefix .. "space-particle-accelerator"}, + max_health = 1500, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{-4.3, -4.3}, {4.3, 4.3}}, + selection_box = {{-4.5, -4.5}, {4.5, 4.5}}, + drawing_box = {{-4.5, -6.0}, {4.5, 4.5}}, + resistances = + { + { + type = "impact", + percent = 10 + } + }, + fluid_boxes = + { + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {0, -5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {-5, 0} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {0, 5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {5, 0} }}, + secondary_draw_orders = { north = -1 } + }, + --off_when_no_fluid_recipe = true + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + apparent_volume = 1.5, + idle_sound = { + filename = "__base__/sound/idle1.ogg", + volume = 0.6 + }, + sound = { + { + filename = "__base__/sound/electric-furnace.ogg", + volume = 0.8 + } + } + }, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + }, + animation = + { + layers = + { + { + filename = "__space-exploration-graphics-2__/graphics/entity/particle-accelerator/sr/particle-accelerator.png", + priority = "high", + width = 3540/6/2, + height = 4032/6/2, + frame_count = 32, + line_length = 6, + shift = util.by_pixel(0, -24), + animation_speed = 1, + hr_version = { + filename = "__space-exploration-graphics-2__/graphics/entity/particle-accelerator/hr/particle-accelerator.png", + priority = "high", + width = 3540/6, + height = 4032/6, + frame_count = 32, + line_length = 6, + shift = util.by_pixel(0, -24), + animation_speed = 1, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-2__/graphics/entity/particle-accelerator/sr/particle-accelerator-shadow.png", + priority = "high", + width = 692/2, + height = 526/2, + frame_count = 1, + line_length = 1, + repeat_count = 32, + shift = util.by_pixel(32, 16), + animation_speed = 1, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-2__/graphics/entity/particle-accelerator/hr/particle-accelerator-shadow.png", + priority = "high", + width = 692, + height = 526, + frame_count = 1, + line_length = 1, + repeat_count = 32, + shift = util.by_pixel(32, 16), + animation_speed = 1, + scale = 0.5, + } + }, + }, + }, + crafting_categories = {"space-accelerator"}, + crafting_speed = 1, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + energy_usage = "100MW", + ingredient_count = 12, + module_specification = + { + module_slots = 4 + }, + allowed_effects = {"consumption", "speed", "pollution"}, -- not "productivity", + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.8, size = 32, shift = {0.0, 0.0}, color = {r = 0.1, g = 0.5, b = 1}} + }, + }, + }, + { + type = "assembling-machine", + name = data_util.mod_prefix .. "space-particle-collider", + icon = "__space-exploration-graphics__/graphics/icons/particle-collider.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = {mining_time = 0.2, result = data_util.mod_prefix .. "space-particle-collider"}, + max_health = 1500, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{-4.3, -4.3}, {4.3, 4.3}}, + selection_box = {{-4.5, -4.5}, {4.5, 4.5}}, + drawing_box = {{-4.5, -6.0}, {4.5, 4.5}}, + resistances = + { + { + type = "impact", + percent = 10 + } + }, + fluid_boxes = + { + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {0, -5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {-5, 0} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {0, 5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {5, 0} }}, + secondary_draw_orders = { north = -1 } + }, + --off_when_no_fluid_recipe = true + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + apparent_volume = 1.5, + idle_sound = { + filename = "__base__/sound/idle1.ogg", + volume = 0.6 + }, + sound = { + { + filename = "__base__/sound/electric-furnace.ogg", + volume = 0.8 + } + } + }, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + spaceship_collision_layer, + }, + animation = + { + layers = + { + { + filename = "__space-exploration-graphics-2__/graphics/entity/particle-collider/sr/particle-collider.png", + priority = "high", + width = 3540/6/2, + height = 4032/6/2, + frame_count = 32, + line_length = 6, + shift = util.by_pixel(0, -24), + animation_speed = 1, + hr_version = { + filename = "__space-exploration-graphics-2__/graphics/entity/particle-collider/hr/particle-collider.png", + priority = "high", + width = 3540/6, + height = 4032/6, + frame_count = 32, + line_length = 6, + shift = util.by_pixel(0, -24), + animation_speed = 1, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-2__/graphics/entity/particle-collider/sr/particle-collider-shadow.png", + priority = "high", + width = 692/2, + height = 526/2, + frame_count = 1, + line_length = 1, + repeat_count = 32, + shift = util.by_pixel(32, 16), + animation_speed = 1, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-2__/graphics/entity/particle-collider/hr/particle-collider-shadow.png", + priority = "high", + width = 692, + height = 526, + frame_count = 1, + line_length = 1, + repeat_count = 32, + shift = util.by_pixel(32, 16), + animation_speed = 1, + scale = 0.5, + } + }, + }, + }, + crafting_categories = {"space-collider"}, + crafting_speed = 1, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + energy_usage = "10MW", + ingredient_count = 12, + module_specification = + { + module_slots = 4 + }, + allowed_effects = {"consumption", "speed", "pollution"}, -- not "productivity", + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.8, size = 32, shift = {0.0, 0.0}, color = {r = 1, g = 1, b = 0.2}} + }, + }, + }, + { + type = "assembling-machine", + name = data_util.mod_prefix .. "space-material-fabricator", + icon = "__space-exploration-graphics__/graphics/icons/material-fabricator.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = {mining_time = 0.2, result = data_util.mod_prefix .. "space-material-fabricator"}, + max_health = 1500, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{-4.3, -4.3}, {4.3, 4.3}}, + selection_box = {{-4.5, -4.5}, {4.5, 4.5}}, + drawing_box = {{-4.5, -6.0}, {4.5, 4.5}}, + resistances = + { + { + type = "impact", + percent = 10 + } + }, + fluid_boxes = + { + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {0, -5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {-5, 0} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {0, 5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {5, 0} }}, + secondary_draw_orders = { north = -1 } + }, + --off_when_no_fluid_recipe = true + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + apparent_volume = 1.5, + idle_sound = { + filename = "__base__/sound/idle1.ogg", + volume = 0.6 + }, + sound = { + { + filename = "__base__/sound/electric-furnace.ogg", + volume = 0.8 + } + } + }, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + spaceship_collision_layer, + }, + animation = + { + layers = + { + { + filename = "__space-exploration-graphics-2__/graphics/entity/material-fabricator/sr/material-fabricator.png", + priority = "high", + width = 3540/6/2, + height = 4032/6/2, + frame_count = 32, + line_length = 6, + shift = util.by_pixel(0, -24), + animation_speed = 1, + hr_version = { + filename = "__space-exploration-graphics-2__/graphics/entity/material-fabricator/hr/material-fabricator.png", + priority = "high", + width = 3540/6, + height = 4032/6, + frame_count = 32, + line_length = 6, + shift = util.by_pixel(0, -24), + animation_speed = 1, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-2__/graphics/entity/material-fabricator/sr/material-fabricator-shadow.png", + priority = "high", + width = 692/2, + height = 526/2, + frame_count = 1, + line_length = 1, + repeat_count = 32, + shift = util.by_pixel(32, 16), + animation_speed = 1, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-2__/graphics/entity/material-fabricator/hr/material-fabricator-shadow.png", + priority = "high", + width = 692, + height = 526, + frame_count = 1, + line_length = 1, + repeat_count = 32, + shift = util.by_pixel(32, 16), + animation_speed = 1, + scale = 0.5, + } + }, + }, + }, + crafting_categories = {"space-materialisation"}, + crafting_speed = 4, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + energy_usage = "250MW", + ingredient_count = 12, + module_specification = + { + module_slots = 0 + }, + allowed_effects = {"pollution"}, -- not "speed", "consumption", "productivity", + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.8, size = 32, shift = {0.0, 0.0}, color = {r = 1, g = 0.1, b = 0.5}} + }, + }, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/pylons.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/pylons.lua new file mode 100644 index 0000000..134c4af --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/pylons.lua @@ -0,0 +1,865 @@ +local data_util = require("data_util") + +local blank_image = { + direction_count = 1, + filename = "__space-exploration-graphics__/graphics/blank.png", + width = 1, + height = 1, + frame_count = 1, + line_length = 1, + shift = { 0, 0 }, +} +local collision_box = { { -0.65, -0.65 }, { 0.65, 0.65 } } +local selection_box = {{-1,-1},{1,1}} +local resistances = { + { type = "fire", percent = 100 }, + { type = "electric", percent = 100 } +} +local collision_mask = { + --"item-layer", -- stops player from dropping items on belts. + "floor-layer", + --"object-layer", + "water-tile", + "player-layer", +} +data:extend({ + { + type = "electric-pole", + name = data_util.mod_prefix .. "addon-power-pole", + supply_area_distance = 0.4, + collision_box = {{-0.2,-0.2},{0.2,0.2}}, + collision_mask = {collision_mask_util_extended.get_make_named_collision_mask("addon-layer")}, + selection_box = {{-0.3,-0.3},{0.3,0.3}}, + selection_priority = 150, + render_layer = "higher-object-above", + connection_points = { + { + shadow = { + copper = { 1.6-0.1, 0.1 }, + green = { 1.6-0.1, 0.1-0.3 }, + red = { 1.6-0.25, 0.1-0.2 } + }, + wire = { + copper = { 0+0.07, -1.2-0.2 }, + green = { 0+0.1, -1.2-0.4 }, + red = { 0-0.15, -1.2-0.3 } + } + }, + }, + corpse = "big-electric-pole-remnants", + damaged_trigger_effect = { + entity_name = "spark-explosion", + offset_deviation = { + { -0.5, -2.5 }, + { 0.5, 0.5 } + }, + offsets = { { 0, 1 } }, + type = "create-entity" + }, + drawing_box = { {-0.5,-1.5},{0.5,0.5} }, + dying_explosion = "big-electric-pole-explosion", + fast_replaceable_group = data_util.mod_prefix .. "addon-power-pole", + flags = { + "placeable-neutral", + "player-creation", + "fast-replaceable-no-build-while-moving", + "placeable-off-grid" + }, + icon = "__space-exploration-graphics__/graphics/icons/addon-power-pole.png", + icon_mipmaps = 1, + icon_size = 64, + max_health = 500, + maximum_wire_distance = 9, + minable = { mining_time = 0.1, result = data_util.mod_prefix .. "addon-power-pole" }, + pictures = { + layers = { + data_util.auto_sr_hr({ + direction_count = 1, + filename = "__space-exploration-graphics-3__/graphics/entity/addon-power-pole/hr/addon-power-pole.png", + width = 64, + height = 128, + shift = { 0, -0.75 }, + scale = 0.5, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + direction_count = 1, + filename = "__space-exploration-graphics-3__/graphics/entity/addon-power-pole/hr/addon-power-pole-shadow.png", + width = 128, + height = 64, + shift = { 0.75, 0 }, + scale = 0.5, + }), + } + }, + radius_visualisation_picture = { + filename = "__base__/graphics/entity/small-electric-pole/electric-pole-radius-visualization.png", + height = 12, + priority = "extra-high-no-scale", + width = 12 + }, + resistances = resistances, + vehicle_impact_sound = { + {filename = "__base__/sound/car-metal-impact.ogg",volume = 0.5}, + {filename = "__base__/sound/car-metal-impact-2.ogg",volume = 0.5}, + {filename = "__base__/sound/car-metal-impact-3.ogg",volume = 0.5}, + {filename = "__base__/sound/car-metal-impact-4.ogg",volume = 0.5}, + {filename = "__base__/sound/car-metal-impact-5.ogg",volume = 0.5}, + {filename = "__base__/sound/car-metal-impact-6.ogg",volume = 0.5} + }, + water_reflection = { + orientation_to_variation = false, + pictures = { + filename = "__base__/graphics/entity/big-electric-pole/big-electric-pole-reflection.png", + height = 32, + priority = "extra-high", + scale = 5, + shift = {0,1.875}, + variation_count = 1, + width = 16 + }, + rotate = false + }, + }, + { + type = "electric-pole", + name = data_util.mod_prefix .. "pylon", + supply_area_distance = 2, + collision_box = collision_box, + collision_mask = collision_mask, + selection_box = selection_box, + connection_points = { + { + shadow = { + copper = { 1.1-0.1, 0.1 }, + green = { 1.1+0.1, 0.1-0.4 }, + red = { 1.1-0.15, 0.1-0.3 } + }, + wire = { + copper = { 0+0.1, -2.3-0.2 }, + green = { 0+0.2, -2.3-0.5 }, + red = { 0-0.25, -2.3-0.4 } + } + }, + }, + corpse = "big-electric-pole-remnants", + damaged_trigger_effect = { + entity_name = "spark-explosion", + offset_deviation = { + { -0.5, -2.5 }, + { 0.5, 0.5 } + }, + offsets = { { 0, 1 } }, + type = "create-entity" + }, + drawing_box = { {-1,-3},{1,0.5} }, + dying_explosion = "big-electric-pole-explosion", + fast_replaceable_group = data_util.mod_prefix .. "pylon", + flags = { + "placeable-neutral", + "player-creation", + "fast-replaceable-no-build-while-moving" + }, + icon = "__space-exploration-graphics__/graphics/icons/pylon.png", + icon_mipmaps = 1, + icon_size = 64, + max_health = 500, + maximum_wire_distance = 64, + minable = { mining_time = 0.1, result = data_util.mod_prefix .. "pylon" }, + pictures = { + layers = { + data_util.auto_sr_hr({ + direction_count = 1, + filename = "__space-exploration-graphics-3__/graphics/entity/pylon/hr/pylon.png", + width = 128, + height = 256, + shift = { 0, -1.25 }, + scale = 0.5, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + direction_count = 1, + filename = "__space-exploration-graphics-3__/graphics/entity/pylon/hr/pylon-shadow.png", + width = 192, + height = 128, + shift = { 0.5, 0 }, + scale = 0.5, + }), + } + }, + radius_visualisation_picture = { + filename = "__base__/graphics/entity/small-electric-pole/electric-pole-radius-visualization.png", + height = 12, + priority = "extra-high-no-scale", + width = 12 + }, + resistances = resistances, + vehicle_impact_sound = { + {filename = "__base__/sound/car-metal-impact.ogg",volume = 0.5}, + {filename = "__base__/sound/car-metal-impact-2.ogg",volume = 0.5}, + {filename = "__base__/sound/car-metal-impact-3.ogg",volume = 0.5}, + {filename = "__base__/sound/car-metal-impact-4.ogg",volume = 0.5}, + {filename = "__base__/sound/car-metal-impact-5.ogg",volume = 0.5}, + {filename = "__base__/sound/car-metal-impact-6.ogg",volume = 0.5} + }, + water_reflection = { + orientation_to_variation = false, + pictures = { + filename = "__base__/graphics/entity/big-electric-pole/big-electric-pole-reflection.png", + height = 32, + priority = "extra-high", + scale = 5, + shift = {0,1.875}, + variation_count = 1, + width = 16 + }, + rotate = false + }, + }, + { + type = "electric-pole", + name = data_util.mod_prefix .. "pylon-substation", + supply_area_distance = 32, + collision_box = collision_box, + collision_mask = collision_mask, + selection_box = selection_box, + connection_points = { + { + shadow = { + copper = { 1.1-0.1, 0.1 }, + green = { 1.1+0.1, 0.1-0.4 }, + red = { 1.1-0.15, 0.1-0.3 } + }, + wire = { + copper = { 0+0.1, -2.3-0.2 }, + green = { 0+0.2, -2.3-0.5 }, + red = { 0-0.25, -2.3-0.4 } + } + }, + }, + corpse = "big-electric-pole-remnants", + damaged_trigger_effect = { + entity_name = "spark-explosion", + offset_deviation = { + { -0.5, -2.5 }, + { 0.5, 0.5 } + }, + offsets = { { 0, 1 } }, + type = "create-entity" + }, + drawing_box = { {-1,-3},{1,0.5} }, + dying_explosion = "big-electric-pole-explosion", + fast_replaceable_group = data_util.mod_prefix .. "pylon", + flags = { + "placeable-neutral", + "player-creation", + "fast-replaceable-no-build-while-moving" + }, + icon = "__space-exploration-graphics__/graphics/icons/pylon-substation.png", + icon_mipmaps = 1, + icon_size = 64, + max_health = 500, + maximum_wire_distance = 64, + minable = { mining_time = 0.1, result = data_util.mod_prefix .. "pylon-substation" }, + pictures = { + layers = { + data_util.auto_sr_hr({ + direction_count = 1, + filename = "__space-exploration-graphics-3__/graphics/entity/pylon-substation/hr/pylon-substation.png", + width = 128, + height = 256, + shift = { 0, -1.25 }, + scale = 0.5, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + direction_count = 1, + filename = "__space-exploration-graphics-3__/graphics/entity/pylon-substation/hr/pylon-substation-shadow.png", + width = 192, + height = 128, + shift = { 0.5, 0 }, + scale = 0.5, + }), + } + }, + radius_visualisation_picture = { + filename = "__base__/graphics/entity/small-electric-pole/electric-pole-radius-visualization.png", + height = 12, + priority = "extra-high-no-scale", + width = 12 + }, + resistances = resistances, + vehicle_impact_sound = { + {filename = "__base__/sound/car-metal-impact.ogg",volume = 0.5}, + {filename = "__base__/sound/car-metal-impact-2.ogg",volume = 0.5}, + {filename = "__base__/sound/car-metal-impact-3.ogg",volume = 0.5}, + {filename = "__base__/sound/car-metal-impact-4.ogg",volume = 0.5}, + {filename = "__base__/sound/car-metal-impact-5.ogg",volume = 0.5}, + {filename = "__base__/sound/car-metal-impact-6.ogg",volume = 0.5} + }, + water_reflection = { + orientation_to_variation = false, + pictures = { + filename = "__base__/graphics/entity/big-electric-pole/big-electric-pole-reflection.png", + height = 32, + priority = "extra-high", + scale = 5, + shift = {0,1.875}, + variation_count = 1, + width = 16 + }, + rotate = false + }, + }, + { + type = "electric-pole", + name = data_util.mod_prefix .. "pylon-construction", + placeable_by = {item = data_util.mod_prefix .. "pylon-construction", count=1}, + minable = { mining_time = 0.1, result = data_util.mod_prefix .. "pylon-construction" }, + supply_area_distance = 2, + collision_mask = {"not-colliding-with-itself"}, + collision_box = collision_box, + selection_box = selection_box, + connection_points = { + { + shadow = { + copper = { 1.1-0.1+0.1, 0.1 }, + green = { 1.1+0.1, 0.1-0.4 }, + red = { 1.1-0.15, 0.1-0.3 } + }, + wire = { + copper = { 0+0.1+0.1, -2.3-0.2+0.3}, + green = { 0+0.2+0.1, -2.3-0.5 }, + red = { 0-0.25-0.3, -2.3-0.4+0.1 } + } + }, + }, + corpse = "big-electric-pole-remnants", + damaged_trigger_effect = { + entity_name = "spark-explosion", + offset_deviation = { + { -0.5, -2.5 }, + { 0.5, 0.5 } + }, + offsets = { { 0, 1 } }, + type = "create-entity" + }, + drawing_box = { {-1,-3},{1,0.5} }, + dying_explosion = "big-electric-pole-explosion", + flags = { + "placeable-neutral", + "player-creation", + "fast-replaceable-no-build-while-moving", + --"not-blueprintable", + "not-deconstructable" + }, + icon = "__space-exploration-graphics__/graphics/icons/pylon-construction.png", + icon_mipmaps = 1, + icon_size = 64, + max_health = 500, + maximum_wire_distance = 64, + pictures = { + layers = { + blank_image + } + }, + radius_visualisation_picture = { + filename = "__base__/graphics/entity/small-electric-pole/electric-pole-radius-visualization.png", + height = 12, + priority = "extra-high-no-scale", + width = 12 + }, + resistances = resistances, + vehicle_impact_sound = { + {filename = "__base__/sound/car-metal-impact.ogg",volume = 0.5}, + {filename = "__base__/sound/car-metal-impact-2.ogg",volume = 0.5}, + {filename = "__base__/sound/car-metal-impact-3.ogg",volume = 0.5}, + {filename = "__base__/sound/car-metal-impact-4.ogg",volume = 0.5}, + {filename = "__base__/sound/car-metal-impact-5.ogg",volume = 0.5}, + {filename = "__base__/sound/car-metal-impact-6.ogg",volume = 0.5} + }, + water_reflection = { + orientation_to_variation = false, + pictures = { + filename = "__base__/graphics/entity/big-electric-pole/big-electric-pole-reflection.png", + height = 32, + priority = "extra-high", + scale = 5, + shift = {0,1.875}, + variation_count = 1, + width = 16 + }, + rotate = false + }, + }, + { + type = "roboport", + name = data_util.mod_prefix .. "pylon-construction-roboport", + placeable_by = {item = data_util.mod_prefix .. "pylon-construction", count=1}, + selectable_in_game = false, + minable = { mining_time = 0.1, result = data_util.mod_prefix .. "pylon-construction" }, + logistics_radius = 0, + logistics_connection_distance = 32, + material_slots_count = 0, + robot_slots_count = 0, + construction_radius = 32, + icon = "__space-exploration-graphics__/graphics/icons/pylon-construction.png", + icon_mipmaps = 1, + icon_size = 64, + fast_replaceable_group = data_util.mod_prefix .. "pylon", + base = blank_image, + base_animation = { + layers = { + data_util.auto_sr_hr({ + direction_count = 1, + filename = "__space-exploration-graphics-3__/graphics/entity/pylon-construction/hr/pylon-construction.png", + width = 128, + height = 256, + frame_count = 32, + shift = { 0, -1.25 }, + scale = 0.5, + line_length = 16, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + direction_count = 1, + filename = "__space-exploration-graphics-3__/graphics/entity/pylon-construction/hr/pylon-construction-shadow.png", + width = 192, + height = 128, + frame_count = 32, + shift = { 0.5, 0 }, + scale = 0.5, + line_length = 2, + }), + } + }, + base_patch = blank_image, + charge_approach_distance = 5, + charging_energy = "10MW", + charging_offsets = { + settings.startup["se-pylon-charge-points"].value and {0, 1.5} or nil + }, + circuit_connector_sprites = nil, + circuit_wire_connection_point = nil, + circuit_wire_max_distance = 0, + collision_box = collision_box, + collision_mask = collision_mask, + selection_box = selection_box, + corpse = "roboport-remnants", + damaged_trigger_effect = { + entity_name = "spark-explosion", + offset_deviation = {{-0.5,-0.5},{0.5,0.5}}, + offsets = {{0,1}}, + type = "create-entity" + }, + door_animation_down = blank_image, + door_animation_up = blank_image, + draw_construction_radius_visualization = true, + draw_logistic_radius_visualization = true, + dying_explosion = "roboport-explosion", + energy_source = { + buffer_capacity = "100MJ", + input_flow_limit = "10MW", + type = "electric", + usage_priority = "secondary-input" + }, + energy_usage = "10kW", + flags = { + "placeable-neutral", + "player-creation", + "fast-replaceable-no-build-while-moving" + }, + max_health = 500, + recharge_minimum = "40MJ", + recharging_animation = { + animation_speed = 0.5, + filename = "__base__/graphics/entity/roboport/roboport-recharging.png", + frame_count = 16, + height = 35, + priority = "high", + scale = 1.5, + width = 37 + }, + recharging_light = { + color = { + b = 1, + g = 1, + r = 1 + }, + intensity = 0.4, + size = 5 + }, + request_to_open_door_timeout = 15, + resistances = resistances, + spawn_and_station_height = -0.1, + stationing_offset = {0,0}, + vehicle_impact_sound = { + { + filename = "__base__/sound/car-metal-impact.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-2.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-3.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-4.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-5.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-6.ogg", + volume = 0.5 + } + }, + water_reflection = { + orientation_to_variation = false, + pictures = { + filename = "__base__/graphics/entity/roboport/roboport-reflection.png", + height = 28, + priority = "extra-high", + scale = 5, + shift = { + 0, + 2.34375 + }, + variation_count = 1, + width = 28 + }, + rotate = false + }, + working_sound = { + audible_distance_modifier = 0.5, + max_sounds_per_type = 3, + probability = 0.0033333333, + sound = { + filename = "__base__/sound/roboport-working.ogg", + volume = 0.6 + } + } + }, + { + type = "electric-pole", + name = data_util.mod_prefix .. "pylon-construction-radar", + placeable_by = {item = data_util.mod_prefix .. "pylon-construction-radar", count=1}, + minable = { mining_time = 0.1, result = data_util.mod_prefix .. "pylon-construction-radar" }, + collision_mask = {"not-colliding-with-itself"}, + supply_area_distance = 32, + collision_box = collision_box, + selection_box = selection_box, + connection_points = { + { + shadow = { + copper = { 1.1-0.1+0.1, 0.1 }, + green = { 1.1+0.1, 0.1-0.4 }, + red = { 1.1-0.15, 0.1-0.3 } + }, + wire = { + copper = { 0+0.1+0.1, -2.3-0.2+0.3}, + green = { 0+0.2+0.1, -2.3-0.5 }, + red = { 0-0.25-0.3, -2.3-0.4+0.1 } + } + }, + }, + corpse = "big-electric-pole-remnants", + damaged_trigger_effect = { + entity_name = "spark-explosion", + offset_deviation = { + { -0.5, -2.5 }, + { 0.5, 0.5 } + }, + offsets = { { 0, 1 } }, + type = "create-entity" + }, + drawing_box = { {-1,-3},{1,0.5} }, + dying_explosion = "big-electric-pole-explosion", + flags = { + "placeable-neutral", + "player-creation", + "fast-replaceable-no-build-while-moving", + --"not-blueprintable", + "not-deconstructable" + }, + icon = "__space-exploration-graphics__/graphics/icons/pylon-construction-radar.png", + icon_mipmaps = 1, + icon_size = 64, + max_health = 500, + maximum_wire_distance = 64, + pictures = { + layers = { + blank_image + } + }, + radius_visualisation_picture = { + filename = "__base__/graphics/entity/small-electric-pole/electric-pole-radius-visualization.png", + height = 12, + priority = "extra-high-no-scale", + width = 12 + }, + resistances = resistances, + vehicle_impact_sound = { + {filename = "__base__/sound/car-metal-impact.ogg",volume = 0.5}, + {filename = "__base__/sound/car-metal-impact-2.ogg",volume = 0.5}, + {filename = "__base__/sound/car-metal-impact-3.ogg",volume = 0.5}, + {filename = "__base__/sound/car-metal-impact-4.ogg",volume = 0.5}, + {filename = "__base__/sound/car-metal-impact-5.ogg",volume = 0.5}, + {filename = "__base__/sound/car-metal-impact-6.ogg",volume = 0.5} + }, + water_reflection = { + orientation_to_variation = false, + pictures = { + filename = "__base__/graphics/entity/big-electric-pole/big-electric-pole-reflection.png", + height = 32, + priority = "extra-high", + scale = 5, + shift = {0,1.875}, + variation_count = 1, + width = 16 + }, + rotate = false + }, + }, + { + type = "roboport", + name = data_util.mod_prefix .. "pylon-construction-radar-roboport", + placeable_by = {item = data_util.mod_prefix .. "pylon-construction-radar", count=1}, + selectable_in_game = false, + minable = { mining_time = 0.1, result = data_util.mod_prefix .. "pylon-construction-radar" }, + logistics_radius = 2, + logistics_connection_distance = 32, + material_slots_count = 0, + robot_slots_count = 0, + construction_radius = 128, + icon = "__space-exploration-graphics__/graphics/icons/pylon-construction-radar.png", + icon_mipmaps = 1, + icon_size = 64, + fast_replaceable_group = data_util.mod_prefix .. "pylon", + base = blank_image, + base_animation = { + layers = { + data_util.auto_sr_hr({ + direction_count = 1, + filename = "__space-exploration-graphics-3__/graphics/entity/pylon-construction-radar/hr/pylon-construction-radar.png", + width = 128, + height = 256, + frame_count = 32, + shift = { 0, -1.25 }, + scale = 0.5, + line_length = 16, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + direction_count = 1, + filename = "__space-exploration-graphics-3__/graphics/entity/pylon-construction-radar/hr/pylon-construction-radar-shadow.png", + width = 192, + height = 128, + frame_count = 32, + shift = { 0.5, 0 }, + scale = 0.5, + line_length = 2, + }), + } + }, + base_patch = blank_image, + charge_approach_distance = 5, + charging_energy = "10MW", + charging_offsets = { + settings.startup["se-pylon-charge-points"].value and {0, 1.5} or nil + }, + circuit_connector_sprites = nil, + circuit_wire_connection_point = nil, + circuit_wire_max_distance = 0, + collision_box = collision_box, + collision_mask = collision_mask, + selection_box = selection_box, + corpse = "roboport-remnants", + damaged_trigger_effect = { + entity_name = "spark-explosion", + offset_deviation = {{-0.5,-0.5},{0.5,0.5}}, + offsets = {{0,1}}, + type = "create-entity" + }, + door_animation_down = blank_image, + door_animation_up = blank_image, + draw_construction_radius_visualization = true, + draw_logistic_radius_visualization = true, + dying_explosion = "roboport-explosion", + energy_source = { + buffer_capacity = "100MJ", + input_flow_limit = "10MW", + type = "electric", + usage_priority = "secondary-input" + }, + energy_usage = "100kW", + flags = { + "placeable-neutral", + "player-creation", + "fast-replaceable-no-build-while-moving" + }, + max_health = 500, + recharge_minimum = "40MJ", + recharging_animation = { + animation_speed = 0.5, + filename = "__base__/graphics/entity/roboport/roboport-recharging.png", + frame_count = 16, + height = 35, + priority = "high", + scale = 1.5, + width = 37 + }, + recharging_light = { + color = { + b = 1, + g = 1, + r = 1 + }, + intensity = 0.4, + size = 5 + }, + request_to_open_door_timeout = 15, + resistances = resistances, + spawn_and_station_height = -0.1, + stationing_offset = {0,0}, + vehicle_impact_sound = { + { + filename = "__base__/sound/car-metal-impact.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-2.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-3.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-4.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-5.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-6.ogg", + volume = 0.5 + } + }, + water_reflection = { + orientation_to_variation = false, + pictures = { + filename = "__base__/graphics/entity/roboport/roboport-reflection.png", + height = 28, + priority = "extra-high", + scale = 5, + shift = { + 0, + 2.34375 + }, + variation_count = 1, + width = 28 + }, + rotate = false + }, + working_sound = { + audible_distance_modifier = 0.5, + max_sounds_per_type = 3, + probability = 0.0033333333, + sound = { + filename = "__base__/sound/roboport-working.ogg", + volume = 0.6 + } + } + }, + { + type = "radar", + name = data_util.mod_prefix .. "pylon-construction-radar-radar", + placeable_by = {item = data_util.mod_prefix .. "pylon-construction-radar", count=1}, + selectable_in_game = false, + max_distance_of_nearby_sector_revealed = 5, + max_distance_of_sector_revealed = 5, + collision_box = collision_box, + selection_box = selection_box, + collision_mask = {"not-colliding-with-itself"}, + corpse = "radar-remnants", + damaged_trigger_effect = { + entity_name = "spark-explosion", + offset_deviation = {{-0.5,-0.5},{0.5,0.5}}, + offsets = {{0,1}}, + type = "create-entity" + }, + dying_explosion = "radar-explosion", + energy_per_nearby_scan = "5MJ", + energy_per_sector = "60MJ", + energy_source = { + type = "electric", + usage_priority = "secondary-input" + }, + energy_usage = "1MW", + flags = { + "placeable-neutral", + "not-blueprintable", + "not-deconstructable" + }, + icon = "__space-exploration-graphics__/graphics/icons/pylon-construction-radar.png", + icon_mipmaps = 1, + icon_size = 64, + max_health = 500, + pictures = { + layers = { + blank_image + } + }, + radius_minimap_visualisation_color = { + a = 0.275, + b = 0.235, + g = 0.092, + r = 0.059 + }, + resistances = resistances, + rotation_speed = 0.01, + vehicle_impact_sound = { + { + filename = "__base__/sound/car-metal-impact.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-2.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-3.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-4.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-5.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-6.ogg", + volume = 0.5 + } + }, + working_sound = { + apparent_volume = 2, + sound = { + { + filename = "__base__/sound/radar.ogg" + } + } + } + } + +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/recycle-mechanical.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/recycle-mechanical.lua new file mode 100644 index 0000000..95f296f --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/recycle-mechanical.lua @@ -0,0 +1,483 @@ +local data_util = require("data_util") + +data:extend({ + { + type = "assembling-machine", + name = data_util.mod_prefix .. "recycling-facility", + icon = "__space-exploration-graphics__/graphics/icons/recycling-facility.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = {mining_time = 0.2, result = data_util.mod_prefix .. "recycling-facility"}, + max_health = 1200, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{-3.3, -3.3}, {3.3, 3.3}}, + selection_box = {{-3.5, -3.5}, {3.5, 3.5}}, + drawing_box = {{-3.5, -3.9}, {3.5, 3.5}}, + resistances = + { + { + type = "impact", + percent = 10 + } + }, + fluid_boxes = + { + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {0, -4} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {-4, 0} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {0, 4} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {4, 0} }}, + secondary_draw_orders = { north = -1 } + }, + --off_when_no_fluid_recipe = true + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + apparent_volume = 1.5, + idle_sound = { + filename = "__base__/sound/idle1.ogg", + volume = 0.6 + }, + sound = { + { + filename = "__base__/sound/burner-mining-drill.ogg", + volume = 0.8 + } + } + }, + collision_mask = { + "water-tile", + --"ground-tile", + "item-layer", + "object-layer", + "player-layer", + }, + animation = + { + layers = + { + { + filename = "__space-exploration-graphics-5__/graphics/entity/recycling-facility/sr/recycling-facility.png", + priority = "high", + width = 3840/8/2, + height = 3584/8/2, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(-8, 0), + animation_speed = 0.75, + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/recycling-facility/hr/recycling-facility.png", + priority = "high", + width = 3840/8, + height = 3584/8, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(-8, 0), + animation_speed = 0.75, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-5__/graphics/entity/recycling-facility/sr/recycling-facility-shadow.png", + priority = "high", + width = 694/2, + height = 400/2, + frame_count = 1, + line_length = 1, + repeat_count = 64, + shift = util.by_pixel(59, 17), + animation_speed = 0.75, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-5__/graphics/entity/recycling-facility/hr/recycling-facility-shadow.png", + priority = "high", + width = 694, + height = 400, + frame_count = 1, + line_length = 1, + repeat_count = 64, + shift = util.by_pixel(59, 17), + animation_speed = 0.75, + scale = 0.5, + } + }, + }, + }, + crafting_categories = {"hand-hard-recycling", "hard-recycling"}, + crafting_speed = 1, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + energy_usage = "100kW", + ingredient_count = 12, + module_specification = + { + module_slots = 4 + }, + allowed_effects = {"consumption", "speed", "pollution"}, -- not "productivity", + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.5, size = 18, shift = {0.0, 0.0}, color = {r = 0.8, g = 1, b = 0.5}} + }, + }, + }, + { + type = "assembling-machine", + name = data_util.mod_prefix .. "space-mechanical-laboratory", + icon = "__space-exploration-graphics__/graphics/icons/mechanical-laboratory.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = {mining_time = 0.2, result = data_util.mod_prefix .. "space-mechanical-laboratory"}, + max_health = 1200, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{-3.3, -3.3}, {3.3, 3.3}}, + selection_box = {{-3.5, -3.5}, {3.5, 3.5}}, + drawing_box = {{-3.5, -3.9}, {3.5, 3.5}}, + resistances = + { + { + type = "impact", + percent = 10 + } + }, + fluid_boxes = + { + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {0, -4} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {-4, 0} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {0, 4} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {4, 0} }}, + secondary_draw_orders = { north = -1 } + }, + --off_when_no_fluid_recipe = true + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + apparent_volume = 1.5, + idle_sound = { + filename = "__base__/sound/idle1.ogg", + volume = 0.6 + }, + sound = { + { + filename = "__base__/sound/burner-mining-drill.ogg", + volume = 0.8 + } + } + }, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + }, + animation = + { + layers = + { + { + filename = "__space-exploration-graphics-5__/graphics/entity/mechanical-laboratory/sr/mechanical-laboratory.png", + priority = "high", + width = 3840/8/2, + height = 3584/8/2, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(-8, 0), + animation_speed = 0.75, + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/mechanical-laboratory/hr/mechanical-laboratory.png", + priority = "high", + width = 3840/8, + height = 3584/8, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(-8, 0), + animation_speed = 0.75, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-5__/graphics/entity/mechanical-laboratory/sr/mechanical-laboratory-shadow.png", + priority = "high", + width = 694/2, + height = 400/2, + frame_count = 1, + line_length = 1, + repeat_count = 64, + shift = util.by_pixel(59, 17), + animation_speed = 0.75, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-5__/graphics/entity/mechanical-laboratory/hr/mechanical-laboratory-shadow.png", + priority = "high", + width = 694, + height = 400, + frame_count = 1, + line_length = 1, + repeat_count = 64, + shift = util.by_pixel(59, 17), + animation_speed = 0.75, + scale = 0.5, + } + }, + }, + }, + crafting_categories = { + "space-mechanical", + "pulverising" + }, + crafting_speed = 1, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + energy_usage = "200kW", + ingredient_count = 12, + module_specification = + { + module_slots = 4 + }, + allowed_effects = {"consumption", "speed", "pollution"}, -- not "productivity", + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.8, size = 18, shift = {0.0, 0.0}, color = {r = 1, g = 0.8, b = 0.5}} + }, + }, + }, + { + type = "assembling-machine", + name = data_util.mod_prefix .. "pulveriser", + icon = "__space-exploration-graphics__/graphics/icons/pulveriser.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = {mining_time = 0.2, result = data_util.mod_prefix .. "pulveriser"}, + max_health = 1200, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{-3.3, -3.3}, {3.3, 3.3}}, + selection_box = {{-3.5, -3.5}, {3.5, 3.5}}, + drawing_box = {{-3.5, -3.9}, {3.5, 3.5}}, + resistances = + { + { + type = "impact", + percent = 30 + } + }, + fluid_boxes = + { + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {0, -4} }}, + --secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {-4, 0} }}, + --secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {0, 4} }}, + --secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {4, 0} }}, + --secondary_draw_orders = { north = -1 } + }, + --off_when_no_fluid_recipe = true + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + apparent_volume = 1.5, + idle_sound = { + filename = "__base__/sound/idle1.ogg", + volume = 0.6 + }, + sound = { + { + filename = "__base__/sound/burner-mining-drill.ogg", + volume = 0.8 + } + } + }, + collision_mask = { + "water-tile", + "item-layer", + "object-layer", + "player-layer", + }, + animation = + { + layers = + { + { + filename = "__space-exploration-graphics-5__/graphics/entity/pulveriser/sr/pulveriser.png", + priority = "high", + width = 3840/8/2, + height = 3584/8/2, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(-8, 0), + animation_speed = 0.35, + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/pulveriser/hr/pulveriser.png", + priority = "high", + width = 3840/8, + height = 3584/8, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(-8, 0), + animation_speed = 0.35, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-5__/graphics/entity/pulveriser/sr/pulveriser-shadow.png", + priority = "high", + width = 694/2, + height = 400/2, + frame_count = 1, + line_length = 1, + repeat_count = 64, + shift = util.by_pixel(59, 17), + animation_speed = 0.35, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-5__/graphics/entity/pulveriser/hr/pulveriser-shadow.png", + priority = "high", + width = 694, + height = 400, + frame_count = 1, + line_length = 1, + repeat_count = 64, + shift = util.by_pixel(59, 17), + animation_speed = 0.35, + scale = 0.5, + } + }, + }, + }, + crafting_categories = {"pulverising", "core-fragment-processing"}, + crafting_speed = 2, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + energy_usage = "500kW", + ingredient_count = 12, + module_specification = + { + module_slots = 4 + }, + allowed_effects = {"consumption", "speed", "pollution", "productivity"}, -- allow "productivity", + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.8, size = 18, shift = {0.0, 0.0}, color = {r = 1, g = 0.8, b = 0.5}} + }, + }, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/resource-autoplace.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/resource-autoplace.lua new file mode 100644 index 0000000..1f3de6b --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/resource-autoplace.lua @@ -0,0 +1,372 @@ +local noise = require("noise") +local expression_to_ascii_math = require("noise.expression-to-ascii-math") +local tne = noise.to_noise_expression +local litexp = noise.literal_expression + +local starting_resource_count = 7 +local regular_resource_count = 9 -- add oil and uranium + +next_resource_index = 0 +function get_next_resource_index() + local resource_index = next_resource_index + next_resource_index = next_resource_index + 1 + return resource_index +end + +local pointillist_mode = false +local patch_blobbiness_enabled = true + +local function dump_expression(name, expr) + log(name..":\n"..tostring(expression_to_ascii_math(expr))) +end + +local onethird = tne(1)/3 -- Looks nicer in output than 0.333333 + +local resource_indexes = { + ["iron-ore"] = 0, + ["copper-ore"] = 1, + ["coal"] = 2, + ["stone"] = 3, + ["crude-oil"] = 4, + ["uranium-ore"] = 5, + ["se-water-ice"] = 6, + ["se-methane-ice"] = 7, +} + +local function resource_autoplace_settings(params) + local name = params.name + local order = params.order or "d" + -- How much of this stuff (probability * richness) should occur per tile on average near the starting area? + local base_density = params.base_density + -- Random probability that this stuff is placed when probability is otherwise positive + -- This IS automatically compensated for by richness, so you don't need to adjust base_density + local random_probability = params.random_probability or 1 + local base_spots_per_km2 = params.base_spots_per_km2 or 2.5 + local random_spot_size_minimum = params.random_spot_size_minimum or 0.25 + local random_spot_size_maximum = params.random_spot_size_maximum or 2.00 + -- Amplitude of spot 'blob noise' relative to typical spot amplitude + local regular_blob_amplitude_multiplier = 1/8 * (params.regular_blob_amplitude_multiplier or 1) + local starting_blob_amplitude_multiplier = 1/8 * (params.starting_blob_amplitude_multiplier or 1) + + local control_setting = noise.get_control_setting(name) + local frequency_multiplier = control_setting.frequency_multiplier + local size_multiplier = control_setting.size_multiplier + local density_multiplier = frequency_multiplier * size_multiplier + + -- The following are more dangerous, since they'll throw total quantities off if you don't compensate for them: + + -- additional_richness will be added to richness but does not affect probability of anything being placed at all. + -- This is NOT automatically compensated for, because that would be difficult to calculate. + -- The caller will need to compensate for any additional_richness by adjusting base_density. + local additional_richness = params.additional_richness or 0 + -- richness will be clamped to minimum_richness at the low end anywhere the stuff is otherwise placed + -- Not automatically compensated for. + local minimum_richness = params.minimum_richness or 0 + -- 'post' as in multiplied after everything else is calculated, including additional_richness + -- and minimum_richness. + local richness_post_multiplier = (params.richness_post_multiplier or 1) * control_setting.richness_multiplier + + local seed1 = 100 + + -- rq_factor is the ratio of the radius of a patch to the cube root of its quantity, + -- i.e. radius of a quantity=1 patch; higher values = fatter, shallower patches + -- Watch out! Shallower patches are more heavily thrown off by noise, + -- so adjust noise amplitude accordingly! + -- (this is automatically done -- se *_blob_amplitude, below) + local regular_rq_factor = (params.regular_rq_factor_multiplier or 1) * 1 / 10 + local starting_rq_factor = (params.starting_rq_factor_multiplier or 1) * 1 / 7 + + local elevation = noise.var("elevation") + local distance = noise.var("distance") + + -- > I just realized because of the new rule of "keep ores outside the + -- > starting area", the starting area size setting should not affect ore + -- > placement. The ore's starting area should be it's own fixed value + -- > that ignores the setting. + -- Twinsen, August 2018 + local starting_resource_placement_radius = 120 + local regular_modulation + -- has_starting_area_placement values: + -- - true - place in starting area and outside starting area independently + -- - false - place outside starting area but not inside + -- - nil - place everywhere as if there is no starting area + + local regular_patch_fade_in_distance = 300 + local regular_ns_multiplier_at + if params.has_starting_area_placement == nil then + regular_ns_multiplier_at = function(dist) return 1 end + else + regular_ns_multiplier_at = function(dist) + return noise.clamp((dist - starting_resource_placement_radius) / regular_patch_fade_in_distance, 0, 1) + end + end + local double_density_distance = 1300 -- distance at which patches have twice as much stuff in them + + -- Maximum distance at which blob amplitude should keep increasing along with spot height + local regular_blob_amplitude_maximum_distance = double_density_distance + local spot_enlargement_maximum_distance = regular_blob_amplitude_maximum_distance + + -- Get distance for purposes of calculating regular ore density, patch size, and richness + local function size_effective_distance_at(dist) + if params.has_starting_area_placement == nil then + return dist + else + -- If there's a starting area measure from the edge of the fade-in radius + return dist - regular_patch_fade_in_distance + end + end + + local function regular_density_at(dist) + -- Don't increase density beyond spot_enlargement_maximum_distance + -- because large spots get unwieldy. We'll increase richness after that, instead. + effective_distance = noise.clamp(size_effective_distance_at(dist), 0, spot_enlargement_maximum_distance) + local distance_density_multiplier = 1 + effective_distance / double_density_distance + return base_density * density_multiplier * distance_density_multiplier * regular_ns_multiplier_at(dist) + end + local spots_per_km2_near_start = base_spots_per_km2 * frequency_multiplier + local candidate_point_count = tne(128) + + if pointillist_mode then + -- Split ore into lots and lots and lots of little patches + -- so that we can get a better idea of the underlying distribution + candidate_point_count = 10000 -- hardcoded max so we don't melt the player's CPU + spots_per_km2_near_start = candidate_point_count / regular_resource_count + end + + -- Regular spot quantity without randomization added + local function regular_spot_quantity_base_at(dist) + return regular_density_at(dist) * 1000000 / spots_per_km2_near_start + end + -- Regular spot quantity averaging over randomization + local function regular_spot_quantity_typical_at(dist) + local average_random_size_multiplier = (random_spot_size_minimum + random_spot_size_maximum) / 2 + return average_random_size_multiplier * regular_spot_quantity_base_at(dist) + end + local function regular_spot_height_typical_at(dist) + return regular_spot_quantity_typical_at(dist)^(onethird) / ((math.pi/3) * regular_rq_factor^2) + end + + local regular_density_expression = regular_density_at(distance) + local regular_spot_quantity_expression = noise.random_between(random_spot_size_minimum, random_spot_size_maximum) * regular_spot_quantity_base_at(distance) + local regular_spot_radius_expression = noise.min(32, regular_rq_factor * regular_spot_quantity_expression ^ (onethird)) + + if params.has_starting_area_placement ~= nil then + regular_blob_amplitude_maximum_distance = regular_blob_amplitude_maximum_distance + regular_patch_fade_in_distance + end + local function regular_blob_amplitude_at(dist) + return regular_blob_amplitude_multiplier * noise.min( + regular_spot_height_typical_at(regular_blob_amplitude_maximum_distance), + regular_spot_height_typical_at(dist) + ) + end + local regular_blob_amplitude_maximum = regular_blob_amplitude_at(regular_blob_amplitude_maximum_distance) + local regular_blob_amplitude_expression = regular_blob_amplitude_at(distance) + + -- Values for starting spots. + -- Simpler calculations than for regular spots because they are only placed + -- in one place and therefore there are fewer variables! + + -- reduce the influence of the frequency slider over the amount of ore in the starting area. + -- note that starting_spot_count is still set to frequency_multiplier below, so we still split the ore to a fairly high amount of patches.s. + local starting_frequency_multiplier = ((frequency_multiplier - 1) * 0.5) + 1 + local starting_amount = 40000 * base_density * starting_frequency_multiplier * size_multiplier + --local starting_amount = 1000000 -- nicer for testing - just check that all spots have ~1.0M + local starting_area_sharpness = tne(math.huge) + local starting_resource_placement_area = math.pi*starting_resource_placement_radius*starting_resource_placement_radius + local starting_density = starting_amount / starting_resource_placement_area + -- Goes < 0 outside of starting area and at negative elevations + local starting_modulation = + noise.clamp((starting_resource_placement_radius - distance) * starting_area_sharpness, 0, 1) + local starting_feasibility = + noise.clamp((elevation - 1) / 10, 0, 1) * starting_modulation + -- Allow resources at lower elevations for starting + + -- Set minimum_favorability_for_full_placement to lower numbers to decrease the likelihood that the starting patches get split. + -- Quantity will automatically be clamped by the spot noise function + -- and radius will be automatically adjusted, too, + -- so it's fine for the spot quantity to be more than the region target quantity. + local minimum_favorability_for_full_placement = 1/2 + local starting_spot_count = frequency_multiplier + local starting_area_spot_quantity = starting_amount / minimum_favorability_for_full_placement / starting_spot_count + local starting_spot_height = starting_area_spot_quantity ^ (1/3) / ((math.pi/3) * starting_rq_factor^2) + local starting_blob_amplitude = starting_blob_amplitude_multiplier * starting_spot_height + + -- since starting and regular spots get maxed together, + -- the basement value should be the lower of the two. + -- This value needs to be low enough that any noise added to it is still below zero + -- so that we don't get bits of ores sticking out between spot noise spots. + -- It also needs to be constant because that's how the spot noise op works. + -- Simply using -infinity would work, but calculating it based on blob amplitude: + -- a) looks nicer if you render the value on a map preview + -- b) acts as a check on our blob_amplitude calculations + local basement_value = noise.min(-6 * regular_blob_amplitude_maximum, + -6 * starting_blob_amplitude) + + local regular_spots = tne{ + type = "function-application", + function_name = "spot-noise", + arguments = + { + x = noise.var("x"), + y = noise.var("y"), + seed0 = noise.var("map_seed"), + seed1 = tne(seed1), + region_size = tne(1024), + candidate_point_count = tne(candidate_point_count), + skip_span = tne(regular_resource_count), + skip_offset = tne(params.resource_index or 0), + density_expression = litexp(regular_density_expression), -- low-frequency noise evaluate for an entire region + spot_quantity_expression = litexp(regular_spot_quantity_expression), -- used to figure out where spots go + hard_region_target_quantity = tne(false), -- it's fine for large spots to push region quantity past the target + spot_radius_expression = litexp(regular_spot_radius_expression), + spot_favorability_expression = litexp(1), + basement_value = basement_value, + maximum_spot_basement_radius = tne(128) + } + } + + -- If you change starting area region size, + -- also change the default starting area position in MapGenSettings + local starting_spots = tne{ + type = "function-application", + function_name = "spot-noise", + arguments = + { + x = noise.var("x"), + y = noise.var("y"), + seed0 = noise.var("map_seed"), + seed1 = tne(seed1+1), + skip_span = tne(starting_resource_count), + skip_offset = tne(params.resource_index or 0), + region_size = tne(starting_resource_placement_radius * 2), + candidate_point_count = tne(128), + minimum_candidate_point_spacing = tne(32), + density_expression = litexp(starting_density * starting_modulation), + spot_quantity_expression = litexp(starting_area_spot_quantity), + hard_region_target_quantity = tne(true), -- Since there's [usually] only one spot, clamp its quantity to the target quantity + spot_radius_expression = litexp(starting_rq_factor * starting_area_spot_quantity ^ (onethird)), + spot_favorability_expression = litexp( + starting_feasibility * 2 - + 1 * distance / starting_resource_placement_radius + + noise.random(0.5) + ), + basement_value = basement_value, + maximum_spot_basement_radius = tne(128) -- does making this huge make a difference? + } + } + + if pointillist_mode or not patch_blobbiness_enabled then + regular_blob_amplitude_expression = 0 + end + if not patch_blobbiness_enabled then + starting_blob_amplitude = 0 + end + + -- Add some blobbiness + local blobs0 = tne{ + type = "function-application", + function_name = "factorio-basis-noise", + arguments = + { + x = noise.var("x"), + y = noise.var("y"), + seed0 = noise.var("map_seed"), + seed1 = tne(seed1), + input_scale = tne(1/8), + output_scale = tne(1) + } + } + tne{ + type = "function-application", + function_name = "factorio-basis-noise", + arguments = + { + x = noise.var("x"), + y = noise.var("y"), + seed0 = noise.var("map_seed"), + seed1 = tne(seed1), + input_scale = tne(1/24), + output_scale = tne(1) + } + } + local blobs0f = blobs0 - 1/4 + + local blobs1 = blobs0 + tne{ + type = "function-application", + function_name = "factorio-basis-noise", + arguments = + { + x = noise.var("x"), + y = noise.var("y"), + seed0 = noise.var("map_seed"), + seed1 = tne(seed1), + input_scale = tne(1/64), + output_scale = tne(1.5) + } + } + local blobs1f = blobs1 - onethird -- attempt to remove positive bias + + local regular_patches = regular_spots + blobs1f * regular_blob_amplitude_expression + local starting_patches = starting_spots + blobs0f * starting_blob_amplitude + + local all_patches + if params.has_starting_area_placement == true then + all_patches = noise.max(starting_patches, regular_patches) + elseif params.has_starting_area_placement == false then + all_patches = regular_patches + else -- nil or unspecified means just make it uniform everywhere + all_patches = regular_patches + end + + local richness_expression = noise.delimit_procedure(all_patches) -- Re-use all that stuff between richness/probability! + local probability_expression = noise.clamp(richness_expression, 0, 1) + if random_probability < 1 then + richness_expression = richness_expression / random_probability + probability_expression = probability_expression * tne{ + type = "function-application", + function_name = "random-penalty", + arguments = + { + source = tne(1), + x = noise.var("x"), + y = noise.var("y"), + amplitude = tne(1/random_probability) -- put random_probability points with probability < 0 + } + } + end + if additional_richness > 0 then + richness_expression = richness_expression + additional_richness + end + if minimum_richness > 0 then + richness_expression = noise.max(richness_expression, minimum_richness) + end + + -- sed = size-effective distance + local function post_semd_richness_distance_multiplier_at(sed) + local ddd = double_density_distance + local semd = spot_enlargement_maximum_distance + -- density = pre-richness-mutliplied density * richness_distance_multiplier. + -- Since pre-richness-multiplied density plateaus at semd, + -- richness needs to increase at that point, and by this much: + return (ddd + sed)/(ddd + semd) + end + local richness_distance_multiplier = noise.max(1, post_semd_richness_distance_multiplier_at(size_effective_distance_at(distance))) + + richness_expression = richness_expression * richness_distance_multiplier * richness_post_multiplier + + local ret = + { + order = order, + control = name, + probability_expression = probability_expression, + richness_expression = richness_expression + } + + return ret +end + +return +{ + get_next_resource_index = get_next_resource_index, + resource_indexes = resource_indexes, + resource_autoplace_settings = resource_autoplace_settings +} diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/resources.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/resources.lua new file mode 100644 index 0000000..6b5a3c6 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/resources.lua @@ -0,0 +1,535 @@ +local data_util = require("data_util") +local noise = require("noise"); +local tne = noise.to_noise_expression; +local resource_autoplace = require("resource-autoplace"); + +data:extend({ + { + type = "resource", + name = data_util.mod_prefix.."water-ice", + icon = "__space-exploration-graphics__/graphics/icons/water-ice.png", + icon_size = 64, + flags = {"placeable-neutral"}, + order="a-b-e", + tree_removal_probability = 0.8, + tree_removal_max_distance = 32 * 32, + minable = + { + mining_particle = "stone-particle", + mining_time = 1, + result = data_util.mod_prefix.."water-ice", + }, + collision_box = {{ -0.1, -0.1}, {0.1, 0.1}}, + selection_box = {{ -0.5, -0.5}, {0.5, 0.5}}, + autoplace = { -- real distribution set in stage 3 + control = data_util.mod_prefix.."water-ice", + tile_restriction = {data_util.mod_prefix.."asteroid"} + }, + stage_counts = {15000, 9500, 5500, 2900, 1300, 400, 150, 80}, + stages = + { + sheet = + { + filename = "__space-exploration-graphics__/graphics/entity/water-ice/water-ice.png", + priority = "extra-high", + size = 64, + frame_count = 8, + variation_count = 8, + hr_version = + { + filename = "__space-exploration-graphics__/graphics/entity/water-ice/hr-water-ice.png", + priority = "extra-high", + size = 128, + frame_count = 8, + variation_count = 8, + scale = 0.5 + } + } + }, + map_color = {r = 198/255, g = 241/255, b = 245/255} + }, + { + type = "resource", + name = data_util.mod_prefix.."methane-ice", + icon = "__space-exploration-graphics__/graphics/icons/methane-ice.png", + icon_size = 64, + flags = {"placeable-neutral"}, + order="a-b-e", + tree_removal_probability = 0.8, + tree_removal_max_distance = 32 * 32, + minable = + { + mining_particle = "stone-particle", + mining_time = 1, + result = data_util.mod_prefix.."methane-ice", + }, + collision_box = {{ -0.1, -0.1}, {0.1, 0.1}}, + selection_box = {{ -0.5, -0.5}, {0.5, 0.5}}, + autoplace = { -- real distribution set in stage 3 + control = data_util.mod_prefix.."methane-ice", + tile_restriction = {data_util.mod_prefix.."asteroid"} + }, + stage_counts = {15000, 9500, 5500, 2900, 1300, 400, 150, 80}, + stages = + { + sheet = + { + filename = "__space-exploration-graphics__/graphics/entity/methane-ice/methane-ice.png", + priority = "extra-high", + size = 64, + frame_count = 8, + variation_count = 8, + hr_version = + { + filename = "__space-exploration-graphics__/graphics/entity/methane-ice/hr-methane-ice.png", + priority = "extra-high", + size = 128, + frame_count = 8, + variation_count = 8, + scale = 0.5 + } + } + }, + map_color = {r = 245/255, g = 231/255, b = 198/255} + }, + { + type = "resource", + name = data_util.mod_prefix.."beryllium-ore", + icon = "__space-exploration-graphics__/graphics/icons/beryllium-ore.png", + icon_size = 64, + flags = {"placeable-neutral"}, + order="a-b-e", + tree_removal_probability = 0.8, + tree_removal_max_distance = 32 * 32, + minable = + { + mining_particle = "stone-particle", + mining_time = 4, + result = data_util.mod_prefix.."beryllium-ore", + }, + collision_box = {{ -0.1, -0.1}, {0.1, 0.1}}, + selection_box = {{ -0.5, -0.5}, {0.5, 0.5}}, + autoplace = { -- real distribution set in stage 3 + control = data_util.mod_prefix.."beryllium-ice" + }, + stage_counts = {15000, 9500, 5500, 2900, 1300, 400, 150, 80}, + stages = + { + sheet = + { + filename = "__space-exploration-graphics__/graphics/entity/beryllium-ore/beryllium-ore.png", + priority = "extra-high", + size = 64, + frame_count = 8, + variation_count = 8, + hr_version = + { + filename = "__space-exploration-graphics__/graphics/entity/beryllium-ore/hr-beryllium-ore.png", + priority = "extra-high", + size = 128, + frame_count = 8, + variation_count = 8, + scale = 0.5 + } + } + }, + map_color = {r = 144/255, g = 222/255, b = 184/255} + }, + { + type = "resource", + name = data_util.mod_prefix.."cryonite", + icon = "__space-exploration-graphics__/graphics/icons/cryonite.png", + icon_size = 64, + flags = {"placeable-neutral"}, + order="a-b-e", + tree_removal_probability = 0.8, + tree_removal_max_distance = 32 * 32, + minable = + { + mining_particle = "stone-particle", + mining_time = 2, + result = data_util.mod_prefix.."cryonite", + }, + collision_box = {{ -0.1, -0.1}, {0.1, 0.1}}, + selection_box = {{ -0.5, -0.5}, {0.5, 0.5}}, + autoplace = { -- real distribution set in stage 3 + control = data_util.mod_prefix.."cryonite", + tile_restriction = alien_biomes.list_tiles(alien_biomes.require_tag(alien_biomes.all_tiles(), {"frozen"})), -- was just snow but too unpredicatable + }, + stage_counts = {15000, 9500, 5500, 2900, 1300, 400, 150, 80}, + stages = + { + sheet = + { + filename = "__space-exploration-graphics__/graphics/entity/cryonite/cryonite.png", + priority = "extra-high", + size = 64, + frame_count = 8, + variation_count = 8, + hr_version = + { + filename = "__space-exploration-graphics__/graphics/entity/cryonite/hr-cryonite.png", + priority = "extra-high", + size = 128, + frame_count = 8, + variation_count = 8, + scale = 0.5 + } + } + }, + stages_effect = { + sheet = { + blend_mode = "additive", + filename = "__space-exploration-graphics__/graphics/entity/cryonite/cryonite-glow.png", + flags = { + "light" + }, + frame_count = 8, + height = 64, + hr_version = { + blend_mode = "additive", + filename = "__space-exploration-graphics__/graphics/entity/cryonite/hr-cryonite-glow.png", + flags = { + "light" + }, + frame_count = 8, + height = 128, + priority = "extra-high", + scale = 0.5, + variation_count = 8, + width = 128 + }, + priority = "extra-high", + variation_count = 8, + width = 64 + } + }, + effect_animation_period = 5, + effect_animation_period_deviation = 1, + effect_darkness_multiplier = 3.6, + max_effect_alpha = 0.3, + min_effect_alpha = 0.2, + map_color = {r = 35/255, g = 164/255, b = 255/255} + }, + { + type = "resource", + name = data_util.mod_prefix.."holmium-ore", + icon = "__space-exploration-graphics__/graphics/icons/holmium-ore.png", + icon_size = 64, + flags = {"placeable-neutral"}, + order="a-b-e", + tree_removal_probability = 0.8, + tree_removal_max_distance = 32 * 32, + minable = + { + mining_particle = "stone-particle", + mining_time = 3, + result = data_util.mod_prefix.."holmium-ore", + }, + collision_box = {{ -0.1, -0.1}, {0.1, 0.1}}, + selection_box = {{ -0.5, -0.5}, {0.5, 0.5}}, + autoplace = { -- real distribution set in stage 3 + control = data_util.mod_prefix.."holmium-ore" + }, + stage_counts = {15000, 9500, 5500, 2900, 1300, 400, 150, 80}, + stages = + { + sheet = + { + filename = "__space-exploration-graphics__/graphics/entity/holmium-ore/holmium-ore.png", + priority = "extra-high", + size = 64, + frame_count = 8, + variation_count = 8, + hr_version = + { + filename = "__space-exploration-graphics__/graphics/entity/holmium-ore/hr-holmium-ore.png", + priority = "extra-high", + size = 128, + frame_count = 8, + variation_count = 8, + scale = 0.5 + } + } + }, + map_color = {r = 135/255, g = 96/255, b = 109/255} + }, + { + type = "resource", + name = data_util.mod_prefix.."iridium-ore", + icon = "__space-exploration-graphics__/graphics/icons/iridium-ore.png", + icon_size = 64, + flags = {"placeable-neutral"}, + order="a-b-e", + tree_removal_probability = 0.8, + tree_removal_max_distance = 32 * 32, + category = "hard-resource", + minable = + { + fluid_amount = 1, + required_fluid = "sulfuric-acid", + mining_particle = "stone-particle", + mining_time = 5, + result = data_util.mod_prefix.."iridium-ore", + }, + collision_box = {{ -0.1, -0.1}, {0.1, 0.1}}, + selection_box = {{ -0.5, -0.5}, {0.5, 0.5}}, + autoplace = { -- real distribution set in stage 3 + control = data_util.mod_prefix.."iridium-ore" + }, + stage_counts = {15000, 9500, 5500, 2900, 1300, 400, 150, 80}, + stages = + { + sheet = + { + filename = "__space-exploration-graphics__/graphics/entity/iridium-ore/iridium-ore.png", + priority = "extra-high", + size = 64, + frame_count = 8, + variation_count = 8, + hr_version = + { + filename = "__space-exploration-graphics__/graphics/entity/iridium-ore/hr-iridium-ore.png", + priority = "extra-high", + size = 128, + frame_count = 8, + variation_count = 8, + scale = 0.5 + } + } + }, + map_color = {r = 244/255, g = 202/255, b = 85/255} + }, + { + type = "resource", + name = data_util.mod_prefix.."naquium-ore", + icon = "__space-exploration-graphics__/graphics/icons/naquium-ore.png", + icon_size = 64, + flags = {"placeable-neutral"}, + order="a-b-e", + tree_removal_probability = 0.8, + tree_removal_max_distance = 32 * 32, + category = "hard-resource", + minable = + { + fluid_amount = 20, + required_fluid = "sulfuric-acid", + mining_particle = "stone-particle", + mining_time = 10, + result = data_util.mod_prefix.."naquium-ore", + }, + collision_box = {{ -0.1, -0.1}, {0.1, 0.1}}, + selection_box = {{ -0.5, -0.5}, {0.5, 0.5}}, + autoplace = { -- real distribution set in stage 3 + control = data_util.mod_prefix.."naquium-ore", + tile_restriction = {data_util.mod_prefix.."asteroid"} -- only in DEEP space + }, + stage_counts = {15000, 9500, 5500, 2900, 1300, 400, 150, 80}, + stages = + { + sheet = + { + filename = "__space-exploration-graphics__/graphics/entity/naquium-ore/naquium-ore.png", + priority = "extra-high", + size = 64, + frame_count = 8, + variation_count = 8, + hr_version = + { + filename = "__space-exploration-graphics__/graphics/entity/naquium-ore/hr-naquium-ore.png", + priority = "extra-high", + size = 128, + frame_count = 8, + variation_count = 8, + scale = 0.5 + } + } + }, + stages_effect = { + sheet = { + blend_mode = "additive", + filename = "__space-exploration-graphics__/graphics/entity/naquium-ore/naquium-ore-glow.png", + flags = { + "light" + }, + frame_count = 8, + height = 64, + hr_version = { + blend_mode = "additive", + filename = "__space-exploration-graphics__/graphics/entity/naquium-ore/hr-naquium-ore-glow.png", + flags = { + "light" + }, + frame_count = 8, + height = 128, + priority = "extra-high", + scale = 0.5, + variation_count = 8, + width = 128 + }, + priority = "extra-high", + variation_count = 8, + width = 64 + } + }, + effect_animation_period = 5, + effect_animation_period_deviation = 1, + effect_darkness_multiplier = 3.6, + max_effect_alpha = 0.3, + min_effect_alpha = 0.2, + map_color = {r = 137/255, g = 113/255, b = 214/255} + }, + { + type = "resource", + name = data_util.mod_prefix.."vulcanite", + icon = "__space-exploration-graphics__/graphics/icons/vulcanite.png", + icon_size = 64, + flags = {"placeable-neutral"}, + order="a-b-e", + tree_removal_probability = 0.8, + tree_removal_max_distance = 32 * 32, + minable = + { + mining_particle = "stone-particle", + mining_time = 2, + result = data_util.mod_prefix.."vulcanite", + }, + collision_box = {{ -0.1, -0.1}, {0.1, 0.1}}, + selection_box = {{ -0.5, -0.5}, {0.5, 0.5}}, + autoplace = { -- real distribution set in stage 3 + control = data_util.mod_prefix.."vulcanite", + tile_restriction = alien_biomes.list_tiles(alien_biomes.require_tag(alien_biomes.all_tiles(), {"volcanic"})), + }, + stage_counts = {15000, 9500, 5500, 2900, 1300, 400, 150, 80}, + stages = + { + sheet = + { + filename = "__space-exploration-graphics__/graphics/entity/vulcanite/vulcanite.png", + priority = "extra-high", + size = 64, + frame_count = 8, + variation_count = 8, + hr_version = + { + filename = "__space-exploration-graphics__/graphics/entity/vulcanite/hr-vulcanite.png", + priority = "extra-high", + size = 128, + frame_count = 8, + variation_count = 8, + scale = 0.5 + } + } + }, + stages_effect = { + sheet = { + blend_mode = "additive", + filename = "__space-exploration-graphics__/graphics/entity/vulcanite/vulcanite-glow.png", + flags = { + "light" + }, + frame_count = 8, + height = 64, + hr_version = { + blend_mode = "additive", + filename = "__space-exploration-graphics__/graphics/entity/vulcanite/hr-vulcanite-glow.png", + flags = { + "light" + }, + frame_count = 8, + height = 128, + priority = "extra-high", + scale = 0.5, + variation_count = 8, + width = 128 + }, + priority = "extra-high", + variation_count = 8, + width = 64 + } + }, + effect_animation_period = 5, + effect_animation_period_deviation = 1, + effect_darkness_multiplier = 3.6, + max_effect_alpha = 0.3, + min_effect_alpha = 0.2, + map_color = {r = 224/255, g = 40/255, b = 10/255} + }, + { + type = "resource", + name = data_util.mod_prefix.."vitamelange", + icon = "__space-exploration-graphics__/graphics/icons/vitamelange.png", + icon_size = 64, + flags = {"placeable-neutral"}, + order="a-b-e", + tree_removal_probability = 0.8, + tree_removal_max_distance = 32 * 32, + minable = + { + mining_particle = "stone-particle", + mining_time = 1, + result = data_util.mod_prefix.."vitamelange", + }, + collision_box = {{ -0.1, -0.1}, {0.1, 0.1}}, + selection_box = {{ -0.5, -0.5}, {0.5, 0.5}}, + autoplace = { -- real distribution set in stage 3 + control = data_util.mod_prefix.."vitamelange", + tile_restriction = alien_biomes.list_tiles(alien_biomes.require_tag(alien_biomes.all_tiles(), {"grass", "dirt"})), -- not snow, volcanic, desert + }, + stage_counts = {15000, 9500, 5500, 2900, 1300, 400, 150, 80}, + stages = + { + sheet = + { + filename = "__space-exploration-graphics__/graphics/entity/vitamelange/vitamelange.png", + priority = "extra-high", + size = 64, + frame_count = 8, + variation_count = 8, + hr_version = + { + filename = "__space-exploration-graphics__/graphics/entity/vitamelange/hr-vitamelange.png", + priority = "extra-high", + size = 128, + frame_count = 8, + variation_count = 8, + scale = 0.5 + } + } + }, + stages_effect = { + sheet = { + blend_mode = "additive-soft", + filename = "__space-exploration-graphics__/graphics/entity/vitamelange/vitamelange-glow.png", + flags = { + "light" + }, + frame_count = 8, + height = 64, + hr_version = { + blend_mode = "additive-soft", + filename = "__space-exploration-graphics__/graphics/entity/vitamelange/hr-vitamelange-glow.png", + flags = { + "light" + }, + frame_count = 8, + height = 128, + priority = "extra-high", + scale = 0.5, + variation_count = 8, + width = 128 + }, + priority = "extra-high", + variation_count = 8, + width = 64 + } + }, + effect_animation_period = 5, + effect_animation_period_deviation = 1, + effect_darkness_multiplier = 3.6, + max_effect_alpha = 0.15, + min_effect_alpha = 0.05, + map_color = {r = 173/255, g = 206/255, b = 54/255}, + }, + +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/rocket-fragments.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/rocket-fragments.lua new file mode 100644 index 0000000..4dd739a --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/rocket-fragments.lua @@ -0,0 +1,399 @@ +local data_util = require("data_util") +--[[ +meteors and crashing rocket parts + +Big sections: +general concept is have a script-controlled entity (and paired shadow) +moved from a spawn point to a predesiganted landing point. +It spawns smoke as moved. +probably use a projectile type for the primary pieces. +Upon impact there are explosions. + +Some cargo part survive, some are lost. +Carried resources are reduecd by similar loss amount and then distributed among survivng containers. + +additional small particles spawned during falling they can fall normally. + +-- parts of rockets / ships that fall. + + +rockets are made of 100 x +heat shielding 20 +low density structure 10 +low density structure 10 +10 rocket control unit +5 cargo pod (seperate) +1 rocket fuel tank +roughly 1.25k of each resource +125k total +if a scrap is 0.3 of a resource +then returning more than 4 166 666 scrap would be bad. + +if there are say +4 big fragments -> 100 scrap each = 400 +6 medium fragments -> 50 scrap each = 300 +20 small fragments -> 20 scrap each = 400 +20 tiny fragments -> 10 scrap each = 200 +1.1k scrap total, recycle value is 330 +]]-- + + +local resistances = { + { type = "fire", percent = 100 }, + { type = "explosion", percent = 100 }, + { type = "impact", percent = 50 } +} + +--{"floor-layer", "player-layer", "water-tile", "object-layer"}, +local collision_mask_blocking = {"player-layer", "object-layer"} +local collision_mask_nonblocking = {"item-layer"} + +local fragments = { -- name = size, width, height, shadoww, shadowh, shadowoffx, shadowoffy + ["rocket-fragment-big-a"] = {4, 215, 185, 234, 131, 27/32, 38/32}, + ["rocket-fragment-big-b"] = {4, 163, 129, 164, 109, 1/32, 12/32}, + ["rocket-fragment-big-c"] = {4, 160, 131, 136, 77, 12/32, 18/32}, + ["rocket-fragment-big-d"] = {4, 108, 86, 123, 52, 22/32, 26/32}, + ["rocket-fragment-medium-a"] = {3, 109, 81, 115, 57, 6/32, 14/32}, + ["rocket-fragment-medium-b"] = {3, 111, 81, 117, 82, 14/32, 18/32}, + ["rocket-fragment-medium-c"] = {3, 120, 75, 122, 62, 2/32, 7/32}, + ["rocket-fragment-small-a"] = {2, 65, 68, 60, 53, 1/32, 6/32}, + ["rocket-fragment-small-b"] = {2, 65, 67, 77, 62, 7/32, 6/32}, + ["rocket-fragment-small-c"] = {2, 69, 38, 76, 35, 3/32, 5/32}, + ["rocket-fragment-small-d"] = {2, 79, 59, 80, 54, 6/32, 3/32}, + ["rocket-fragment-small-e"] = {2, 69, 74, 77, 66, 5/32, 5/32}, + ["rocket-fragment-small-f"] = {2, 55, 49, 59, 39, 4/32, 6/32}, + ["rocket-fragment-small-g"] = {2, 62, 64, 60, 59, 12/32, 8/32}, + ["rocket-fragment-small-h"] = {2, 59, 48, 65, 31, 4/32, 8/32}, + ["rocket-fragment-small-i"] = {2, 41, 49, 47, 41, 5/32, 7/32}, + ["rocket-fragment-small-j"] = {2, 68, 42, 69, 43, 1/32, 3/32}, + ["rocket-fragment-tiny-a"] = {1, 47, 22, 47, 15, 0/32, 5/32}, + ["rocket-fragment-tiny-b"] = {1, 48, 36, 49, 35, 2/32, 2/32}, + ["rocket-fragment-tiny-c"] = {1, 44, 33, 48, 25, 3/32, 5/32}, + ["rocket-fragment-tiny-d"] = {1, 58, 35, 56, 30, 1/32, 1/32}, + ["rocket-fragment-tiny-e"] = {1, 21, 18, 23, 12, 3/32, 5/32}, + ["rocket-fragment-tiny-f"] = {1, 46, 30, 53, 25, 3/32, 5/32}, + + ["cargo-fragment-a"] = {3, 112, 81, 117, 49, 6/32, 14/32, 0.75, true}, + ["cargo-fragment-b"] = {3, 118, 97, 125, 82, 6/32, 14/32, 0.75, true}, + ["cargo-fragment-c"] = {3, 138, 138, 148, 69, 6/32, 14/32, 0.75, true}, + ["cargo-fragment-d"] = {3, 95, 62, 88, 38, 6/32, 14/32, 0.75, true}, +} + +local function get_explosion(size) + if size == 2 then + return data_util.mod_prefix.."medium-explosion" + elseif size == 3 then + return data_util.mod_prefix.."large-explosion" + elseif size == 4 then + return data_util.mod_prefix.."huge-explosion" + end + + return data_util.mod_prefix.."small-explosion" +end + +for name, fragment in pairs(fragments) do + local size = fragment[1] + local width = fragment[2] + local height = fragment[3] + local shadow_width = fragment[4] + local shadow_height = fragment[5] + local shadow_x = fragment[6] + local shadow_y = fragment[7] + local scale = fragment[8] or 1 + local cargo = fragment[9] == true + local scrap = 10 + if size > 3 then + scrap = 100 + elseif size > 2 then + scrap = 50 + elseif size > 1 then + scrap = 20 + end + + data:extend({ + { + type = "projectile", + name = data_util.mod_prefix.."falling-" .. name, + acceleration = 0, + rotatable = false, + animation = { + filename = "__space-exploration-graphics__/graphics/entity/rocket-fragments/"..name..".png", + frame_count = 1, + width = width, + height = height, + line_length = 1, + priority = "high", + shift = { 0, 0 }, + scale = scale + }, + action = { + action_delivery = { + target_effects = { + { + action = { + action_delivery = { + target_effects = { + { + damage = { + amount = 5 + 2.5 * size, + type = "meteor" + }, + type = "damage" + }, + { + entity_name = "explosion", + type = "create-entity" + } + }, + type = "instant" + }, + radius = 0.5 + 0.2 * size, + type = "area" + }, + type = "nested-result" + }, + { + type = "create-entity", + entity_name = get_explosion(size), + }, + { + type = "create-entity", + entity_name = "small-scorchmark", + check_buildability = true, + }, + { + type = "create-entity", + check_buildability = false, + entity_name = data_util.mod_prefix.."static-"..name, + }, + { + type = "create-entity", + entity_name = data_util.mod_prefix .. "trigger-movable-debris", + trigger_created_entity = true, + }, + }, + type = "instant" + }, + type = "direct" + }, + flags = { "not-on-map" }, + light = { intensity = 0.1 + 0.05 * size, size = 10}, + smoke = { + { + deviation = { + 0.15, + 0.15 + }, + frequency = 1, + --name = "smoke-fast", + --name = "smoke-explosion-particle", + name = "soft-fire-smoke", -- lasts longer + position = {0,0}, + slow_down_factor = 1, + starting_frame = 3, + starting_frame_deviation = 5, + starting_frame_speed = 0, + starting_frame_speed_deviation = 5 + } + }, + }, + { + type = "projectile", + name = data_util.mod_prefix.."shadow-" .. name, + acceleration = 0, + rotatable = false, + animation = { + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/rocket-fragments/shadows/"..name..".png", + frame_count = 1, + width = shadow_width, + height = shadow_height, + line_length = 1, + priority = "high", + shift = { 0, 0 }, + scale = scale + }, + flags = { "not-on-map" }, + }, + { + type = "simple-entity", + name = data_util.mod_prefix.."static-"..name, + localised_name = cargo and {"entity-name.destroyed-cargo-pod"} or {"entity-name.rocket-fragment"}, + icon = "__base__/graphics/icons/ship-wreck/small-ship-wreck.png", + icon_size = 64, + flags = {"placeable-neutral", "placeable-off-grid", "not-on-map"}, + subgroup = "wrecks", + order = "d[remnants]-d[ship-wreck]-c[small]-a", + max_health = size * 100, + minable = { + mining_time = 0.2, + results={ + {name= data_util.mod_prefix.."scrap", amount=scrap}, + } + }, + resistances = resistances, + collision_box = size > 3 and {{-1, -1}, {1, 1}} or {{-0.7, -0.7}, {0.7, 0.7}}, + collision_mask = size > 3 and collision_mask_blocking or collision_mask_nonblocking, + selection_box = {{-1.3, -1.1}, {1.3, 1.1}}, + selection_priority = 2, + count_as_rock_for_filtered_deconstruction = true, + picture = + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/entity/rocket-fragments/"..name..".png", + width = width, + height = height, + shift = { 0, 0 }, + scale = scale + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/rocket-fragments/shadows/"..name..".png", + width = shadow_width, + height = shadow_height, + shift = { shadow_x, shadow_y }, + scale = scale + } + } + }, + render_layer = "object", + }, + { + type = "projectile", + name = data_util.mod_prefix.."space-" .. name, + acceleration = -0.001, + rotatable = false, + animation = { + filename = "__space-exploration-graphics__/graphics/entity/rocket-fragments/"..name..".png", + frame_count = 1, + width = width, + height = height, + line_length = 1, + priority = "high", + shift = { 0, 0 }, + scale = scale + }, + action = { + action_delivery = { + target_effects = { + { + action = { + action_delivery = { + target_effects = { + { + damage = { + amount = 5 + 2.5 * size, + type = "meteor" + }, + type = "damage" + }, + { + entity_name = "explosion", + type = "create-entity" + } + }, + type = "instant" + }, + radius = 0.5 + 0.2 * size, + type = "area" + }, + type = "nested-result" + }, + { + type = "create-entity", + check_buildability = false, + entity_name = data_util.mod_prefix.."static-"..name, + }, + { + type = "create-entity", + entity_name = data_util.mod_prefix .. "trigger-movable-debris", + trigger_created_entity = true, + }, + }, + type = "instant" + }, + type = "direct" + }, + flags = { "not-on-map" }, + light = { intensity = 0.1 + 0.05 * size, size = 10}, + smoke = { + { + deviation = { + 0.15, + 0.15 + }, + frequency = 1, + --name = "smoke-fast", + --name = "smoke-explosion-particle", + name = "soft-fire-smoke", -- lasts longer + position = {0,0}, + slow_down_factor = 1, + starting_frame = 3, + starting_frame_deviation = 5, + starting_frame_speed = 0, + starting_frame_speed_deviation = 5 + } + }, + }, + }) +end + + +-- safe version +data:extend({ + { + type = "projectile", + name = data_util.mod_prefix.."falling-cargo-pod", + acceleration = 0, + rotatable = false, + animation = { + filename = "__space-exploration-graphics__/graphics/entity/cargo-pod/cargo-pod.png", + frame_count = 1, + width = 147, + height = 194, + line_length = 1, + priority = "high", + shift = { 0, 0 }, + scale = 0.5, + }, + flags = { "not-on-map" }, + light = { intensity = 0.2, size = 10}, + smoke = { + { + deviation = { + 0.15, + 0.15 + }, + frequency = 1, + name = "smoke-fast", + --name = "smoke-explosion-particle", + --name = "soft-fire-smoke", -- lasts longer + position = {0,0}, + slow_down_factor = 1, + starting_frame = 3, + starting_frame_deviation = 5, + starting_frame_speed = 0, + starting_frame_speed_deviation = 5 + } + }, + }, + { + type = "projectile", + name = data_util.mod_prefix.."shadow-cargo-pod", + acceleration = 0, + rotatable = false, + animation = { + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/cargo-pod/cargo-pod-shadow.png", + frame_count = 1, + width = 167, + height = 164, + line_length = 1, + priority = "high", + shift = { 0, 0 }, + scale = 0.5, + }, + flags = { "not-on-map" }, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/rocket-landing-pad.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/rocket-landing-pad.lua new file mode 100644 index 0000000..7e8c5bc --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/rocket-landing-pad.lua @@ -0,0 +1,64 @@ +local data_util = require("data_util") + +local landing_pad_collision_box = {{-4.35, -4.35}, {4.35, 4.35}} +data:extend({ + { + type = "container", + name = data_util.mod_prefix .. "rocket-landing-pad", -- "rocket-launch-pad-chest", + icon = "__space-exploration-graphics__/graphics/icons/rocket-landing-pad.png", + icon_size = 64, + order = "z-z", + flags = {"placeable-neutral", "player-creation"}, + minable = {mining_time = 0.5, result = data_util.mod_prefix .. "rocket-landing-pad"}, + max_health = 5000, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + collision_box = landing_pad_collision_box, + collision_mask = { + "water-tile", + "item-layer", + "object-layer", + "player-layer", + spaceship_collision_layer -- not spaceship + }, + selection_box = {{-4.35, -4.35}, {4.35, 4.35}}, + drawing_box = {{-4.35, -4.35 - 1}, {4.35, 4.35}}, + inventory_size = rocket_capacity + 110, -- 100 for potential recovered rocket sections and space capsule, plus another 10 to prevent deleting cargo from overflowing reused rocket sections + resistances = { + { type = "meteor", percent = 99 }, + { type = "explosion", percent = 99 }, + { type = "impact", percent = 99 }, + { type = "fire", percent = 99 }, + }, + open_sound = { filename = "__base__/sound/metallic-chest-open.ogg", volume=0.65 }, + close_sound = { filename = "__base__/sound/metallic-chest-close.ogg", volume = 0.7 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + picture = { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-landing-pad/rocket-landing-pad.png", + height = 384, + shift = { 0, -0.5 }, + width = 352, + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-landing-pad/hr-rocket-landing-pad.png", + height = 384 * 2, + shift = { 0, -0.5 }, + width = 352 * 2, + scale = 0.5 + } + }, + circuit_wire_connection_point = + { + shadow = + { + red = {-3.5, 2.7}, + green = {-3.6, 2.6}, + }, + wire = + { + red = {-3.5, 2.7}, + green = {-3.6, 2.6}, + } + }, + circuit_wire_max_distance = 12.5, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/rocket-launch-pad.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/rocket-launch-pad.lua new file mode 100644 index 0000000..6cb3aa7 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/rocket-launch-pad.lua @@ -0,0 +1,992 @@ +--[[ +The plan: +While sile is in assembly mode a vehicle with a filter +is placed over the silo that only takes rocket segments. +also, rocket segments are taken from the container if any. +once the rocket is complete the vehicle is removed so items +are placed in the silo and not the vehicle. + +new rocket doors are 168 up on hr image +]]-- +local data_util = require("data_util") + +local silo_offset_px = -37 +--local shadow_adds_width = 192; +local shadow_adds_width = 96; +local blank_image = { + filename = "__space-exploration-graphics__/graphics/blank.png", + width = 1, + height = 1, + frame_count = 1, + line_length = 1, + shift = { 0, 0 }, +} +local selectable = false -- false for production, true only to help debug layers +local launch_pad_collision_box = {{-4.85, -4.85}, {4.85, 4.85}} + +local connection_point = { + wire = { red = {-1 -8/32, 2 +20/32}, green = {-1 -2/32, 2 +20/32}, }, + shadow = { red = {2 -8/32, 5}, green = {2 -2/32, 5}, }, +} +local tank_connection_point = table.deepcopy(connection_point) +tank_connection_point.wire.red[2] = connection_point.wire.red[2] - 1 +tank_connection_point.wire.green[2] = connection_point.wire.green[2] - 1 +tank_connection_point.shadow.red[2] = connection_point.shadow.red[2] - 1 +tank_connection_point.shadow.green[2] = connection_point.shadow.green[2] - 1 + +local function connection_sprites(offset) + return { + blue_led_light_offset = offset, + led_blue = { + filename = "__base__/graphics/entity/circuit-connector/hr-ccm-universal-04e-blue-LED-on-sequence.png", + height = 60, + priority = "low", + shift = offset, + width = 60, + x = 60, + y = 0 + }, + led_blue_off = { + filename = "__base__/graphics/entity/circuit-connector/hr-ccm-universal-04f-blue-LED-off-sequence.png", + height = 44, + priority = "low", + shift = offset, + width = 46, + x = 46, + y = 0 + }, + led_green = { + filename = "__base__/graphics/entity/circuit-connector/hr-ccm-universal-04h-green-LED-sequence.png", + height = 46, + priority = "low", + shift = offset, + width = 48, + x = 48, + y = 0 + }, + led_light = { + intensity = 0.8, + size = 0.9 + }, + led_red = { + filename = "__base__/graphics/entity/circuit-connector/hr-ccm-universal-04i-red-LED-sequence.png", + height = 46, + priority = "low", + shift = offset, + width = 48, + x = 48, + y = 0 + }, + red_green_led_light_offset = offset, + } +end + +--local container_connection_sprites = connection_sprites({ 3-12/32, 0 }) +local tank_connection_sprites = connection_sprites({ -97/32, -153/32 }) + +data:extend({ + { + type = "container", + name = data_util.mod_prefix .. "rocket-launch-pad", -- "rocket-launch-pad-chest", + icon = "__space-exploration-graphics__/graphics/icons/rocket-launch-pad.png", + icon_size = 64, + scale_info_icons = false, + inventory_size = rocket_capacity, + order = "z-z", + flags = {"placeable-neutral", "player-creation"}, + minable = {mining_time = 0.5, result = data_util.mod_prefix .. "rocket-launch-pad"}, + max_health = 8000, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + collision_box = launch_pad_collision_box, + collision_mask = { + "water-tile", + "item-layer", + "object-layer", + "player-layer", + spaceship_collision_layer -- not spaceship + }, + render_layer = "transport-belt", -- does not work + selection_box = launch_pad_collision_box, + drawing_box = {{-4.85, -4.85 - 1}, {4.85, 4.85}}, + selection_priority = 100, + resistances = { + { type = "meteor", percent = 90 }, + { type = "impact", percent = 100 }, + { type = "fire", percent = 100 } + }, + open_sound = { filename = "__base__/sound/metallic-chest-open.ogg", volume=0.65 }, + close_sound = { filename = "__base__/sound/metallic-chest-close.ogg", volume = 0.7 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + picture = { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/complete.png", + shift = { 0, -0.25 }, + width = 704/2, + height = 736/2, + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/hr-complete.png", + shift = { 0, -0.25 }, + width = 704, + height = 736, + scale = 0.5, + } + }, + --circuit_connector_sprites = container_connection_sprites, -- these are not seen because of layering + circuit_wire_connection_point = connection_point, + circuit_wire_max_distance = 12.5, + }, + { -- invisibly dummy vehicle + type = "car", + name = data_util.mod_prefix .. "rocket-launch-pad-_-section-input", + collision_box = {{-3.85, -3.85}, {3.85, 3.85}}, + collision_mask = {"not-colliding-with-itself"}, + selection_box = launch_pad_collision_box, + scale_info_icons = false, + selection_priority = 200, + selectable_in_game = selectable, + has_belt_immunity = true, + animation = { + layers = { + { + animation_speed = 1, + direction_count = 1, + filename = "__space-exploration-graphics__/graphics/blank.png", + frame_count = 1, + height = 1, + width = 1 + }, + } + }, + braking_power = "200kW", + burner = { + effectivity = 1, + fuel_category = "chemical", + fuel_inventory_size = 0, + render_no_power_icon = false + }, + consumption = "1W", + effectivity = 0.5, + energy_per_hit_point = 1, + flags = { "placeable-neutral", "player-creation", "placeable-off-grid" }, + friction = 0.9, + icon = "__space-exploration-graphics__/graphics/icons/rocket-launch-pad.png", + icon_size = 64, + inventory_size = 2, + max_health = 45000, + open_sound = { + filename = "__base__/sound/car-door-open.ogg", + volume = 0.7 + }, + close_sound = { + filename = "__base__/sound/car-door-close.ogg", + volume = 0.7 + }, + render_layer = "object", + rotation_speed = 0.00, + order = "zz", + weight = 10000, + }, + { + type = "constant-combinator", + name = data_util.mod_prefix .. "rocket-launch-pad-combinator", + icon = "__space-exploration-graphics__/graphics/icons/rocket-launch-pad.png", + icon_size = 64, + flags = {"placeable-player", "player-creation", "placeable-off-grid", "not-deconstructable", "not-blueprintable"}, + order = "y", + max_health = 10000, + healing_per_tick = 10000, + corpse = "small-remnants", + collision_box = {{-0.0, -0.0}, {0.0, 0.0}}, + collision_mask = {"not-colliding-with-itself"}, + selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, + scale_info_icons = false, + selectable_in_game = selectable, + item_slot_count = 10, -- capsule, rocket parts, fuel, rocket made, slots free + sprites = + { + north = blank_image, + east = blank_image, + south = blank_image, + west = blank_image + }, + activity_led_sprites = + { + north = blank_image, + east = blank_image, + south = blank_image, + west = blank_image + }, + activity_led_light = + { + intensity = 0.8, + size = 1, + }, + activity_led_light_offsets = + { + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0} + }, + circuit_wire_connection_points = + { + connection_point, connection_point, connection_point, connection_point, + }, + circuit_wire_max_distance = 10 + }, + { -- invisibly dummy vehicle + -- allows player to enter and go with a rocket + type = "car", + name = data_util.mod_prefix .. "rocket-launch-pad-_-seat", + collision_mask = {"not-colliding-with-itself"}, + collision_box = { { -0.4, -0.05 }, { 0.4, 0.05 } }, + collision_mask = {"not-colliding-with-itself"}, + has_belt_immunity = true, + animation = { + layers = { + { + animation_speed = 1, + direction_count = 1, + filename = "__space-exploration-graphics__/graphics/blank.png", + frame_count = 1, + height = 1, + width = 1 + }, + } + }, + braking_power = "200kW", + burner = { + effectivity = 1, + fuel_category = "chemical", + fuel_inventory_size = 0, + render_no_power_icon = false + }, + consumption = "150kW", + effectivity = 0.5, + energy_per_hit_point = 1, + flags = { "placeable-neutral", "player-creation", "placeable-off-grid" }, + friction = 0.9, + icon = "__space-exploration-graphics__/graphics/icons/rocket-launch-pad.png", + icon_size = 64, + inventory_size = 0, + max_health = 45000, + open_sound = { + filename = "__base__/sound/car-door-open.ogg", + volume = 0.7 + }, + close_sound = { + filename = "__base__/sound/car-door-close.ogg", + volume = 0.7 + }, + render_layer = "object", + rotation_speed = 0.00, + order = "zz", + selectable_in_game = selectable, + weight = 700, + }, + { + type = "storage-tank", + name = data_util.mod_prefix .. "rocket-launch-pad-tank", + icon = "__space-exploration-graphics__/graphics/icons/rocket-launch-pad.png", + icon_size = 64, + scale_info_icons = false, + render_layer = "higher-object-above", + flags = {"placeable-player", "player-creation", "not-deconstructable", "not-blueprintable"}, + max_health = 50000, + order = "zz", + corpse = "medium-remnants", + collision_box = { -- compensate for position shift + {launch_pad_collision_box[1][1], launch_pad_collision_box[1][2] -1}, + {launch_pad_collision_box[2][1], launch_pad_collision_box[2][2] -1}}, + collision_mask = {"not-colliding-with-itself"}, + selection_box = { -- compensate for position shift + {launch_pad_collision_box[1][1], launch_pad_collision_box[1][2] -1}, + {launch_pad_collision_box[2][1], launch_pad_collision_box[2][2] -1}}, + selectable_in_game = selectable, + fluid_box = + { + base_area = 100, -- gets multiplied by 100 by engine + base_level = -1, -- pull fluid in + height = 1.1, + pipe_covers = pipecoverspictures(), + pipe_connections = + { + { position = {-5.5, 3.5-1} }, + { position = {-5.5, -3.5-1} }, + { position = {3.5, -5.5-1} }, + { position = {-3.5, -5.5-1} }, + { position = {5.5, 3.5-1} }, + { position = {5.5, -3.5-1} }, + { position = {3.5, 5.5-1} }, + { position = {-3.5, 5.5-1} }, + }, + }, + two_direction_only = true, + window_bounding_box = {{-0.125, 0.6875}, {0.1875, 1.1875}}, + pictures = + { + picture = { + sheets = { + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/tank-window.png", + priority = "extra-high", + frames = 1, + width = 94/2, + height = 84/2, + shift = {128.5/32, -154/32}, + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/hr-tank-window.png", + priority = "extra-high", + frames = 1, + width = 94, + height = 84, + shift = {128.5/32, -154/32}, + scale=0.5, + }, + }, + } + }, + fluid_background = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/fluid-background.png", + priority = "extra-high", + width = 10, + height = 30, + shift = {128/32, -180/32}, + scale = 2 + }, + window_background = blank_image, + --[[{ + filename = "__base__/graphics/entity/storage-tank/window-background.png", + priority = "extra-high", + width = 17, + height = 24, + shift = {-116/32, -160/32}, + hr_version = { + filename = "__base__/graphics/entity/storage-tank/hr-window-background.png", + priority = "extra-high", + width = 34, + height = 48, + scale = 0.5, + shift = {-116/32, -160/32}, + } + },]]-- + flow_sprite = + { + filename = "__base__/graphics/entity/pipe/fluid-flow-low-temperature.png", + priority = "extra-high", + width = 160, + height = 20, + shift = {128/32, -180/32}, + scale = 2 + }, + gas_flow = + { + filename = "__base__/graphics/entity/pipe/steam.png", + priority = "extra-high", + line_length = 10, + width = 24, + height = 15, + frame_count = 60, + axially_symmetrical = false, + direction_count = 1, + animation_speed = 0.255, + shift = {128/32, -180/32}, + hr_version = + { + filename = "__base__/graphics/entity/pipe/hr-steam.png", + priority = "extra-high", + line_length = 10, + width = 48, + height = 30, + frame_count = 60, + axially_symmetrical = false, + animation_speed = 0.255, + direction_count = 1, + shift = {128/32, -180/32}, + } + } + }, + flow_length_in_ticks = 360, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = + { + sound = { + filename = "__base__/sound/storage-tank.ogg", + volume = 0.8 + }, + apparent_volume = 1.5, + max_sounds_per_type = 3 + }, + circuit_wire_connection_points = { + tank_connection_point, tank_connection_point, tank_connection_point, tank_connection_point, + }, + circuit_connector_sprites = {tank_connection_sprites,tank_connection_sprites,tank_connection_sprites,tank_connection_sprites,}, + circuit_wire_max_distance = default_circuit_wire_max_distance + }, + + { + -- this only exists for the animation + -- it won't be selectable or affected normally + -- when ready to launch the required dummy item will be added + -- then launch will be triggered by script + type = "rocket-silo", + name = data_util.mod_prefix .. "rocket-launch-pad-silo", + rocket_entity = data_util.mod_prefix .. "cargo-rocket", + fixed_recipe = data_util.mod_prefix .. "rocket-launch-pad-silo-dummy-recipe", + rocket_entity = data_util.mod_prefix .. "cargo-rocket", + order = "zz", + icon = "__space-exploration-graphics__/graphics/icons/rocket-launch-pad.png", + icon_size = 64, + flags = {"placeable-player", "player-creation"}, + selection_box = launch_pad_collision_box, + selectable_in_game = selectable, + -- collision box stops inserters from accessing container + --collision_box = launch_pad_collision_box, -- for power + collision_box = {{0,0},{0,0}}, + collision_mask = {"not-colliding-with-itself"}, + crafting_categories = {"rocket-building"}, + rocket_parts_required = 1, + crafting_speed = 1, + rocket_result_inventory_size = 0, + module_specification = { module_slots = 0 }, + allowed_effects = {}, + show_recipe_icon = false, + max_health = 8000, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + hole_clipping_box = { {-2.75, -1.15 + silo_offset_px/32}, {2.75, 2.25 + silo_offset_px/32} }, + resistances = + { + { + type = "fire", + percent = 60 + }, + { + type = "impact", + percent = 60 + } + }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + + energy_source = { + type = "void", + usage_priority = "primary-input", + render_no_power_icon = false + }, + active_energy_usage = "1000KW", + energy_usage = "1000KW", + idle_energy_usage = "1000KW", + lamp_energy_usage = "100KW", + + times_to_blink = 3, + light_blinking_speed = 1 / (3 * 60), + door_opening_speed = 1 / (4.25 * 60), + silo_fade_out_start_distance = 9, --8, + silo_fade_out_end_distance = 16, --15, + + base_engine_light = + { + intensity = 1, + size = 25, + shift = {0, 1.5 + silo_offset_px/32} + }, + + + shadow_sprite = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/00-rocket-silo-shadow.png", + priority = "medium", + width = 410/2, + height = 510/2, + draw_as_shadow = true, + slice = 2, + shift = util.by_pixel(174, 36), + hr_version = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/hr-00-rocket-silo-shadow.png", + priority = "medium", + width = 410, + height = 510, + draw_as_shadow = true, + slice = 2, + shift = util.by_pixel(174, 36), + scale = 0.5 + }, + }, + + hole_sprite = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/01-rocket-silo-hole.png", + width = 202, + height = 136, + shift = util.by_pixel(-6, 16 + silo_offset_px), + hr_version = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/hr-01-rocket-silo-hole.png", + width = 400, + height = 270, + shift = util.by_pixel(-5, 16 + silo_offset_px), + scale = 0.5 + } + }, + hole_light_sprite = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/01-rocket-silo-hole-light.png", + width = 202, + height = 136, + shift = util.by_pixel(-6, 16 + silo_offset_px), + tint = {1,1,1,0}, + hr_version = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/hr-01-rocket-silo-hole-light.png", + width = 400, + height = 270, + shift = util.by_pixel(-5, 16 + silo_offset_px), + tint = {1,1,1,0}, + scale = 0.5 + } + }, + + rocket_shadow_overlay_sprite = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/03-rocket-over-shadow-over-rocket.png", + width = 212, + height = 142, + shift = util.by_pixel(-2, 22 + silo_offset_px), + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/hr-03-rocket-over-shadow-over-rocket.png", + width = 426, + height = 288, + shift = util.by_pixel(-2, 21 + silo_offset_px), + scale = 0.5 + } + }, + rocket_glow_overlay_sprite = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/03-rocket-over-glow.png", + blend_mode = "additive", + width = 218, + height = 222, + shift = util.by_pixel(-4, 36 + silo_offset_px), + hr_version = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/hr-03-rocket-over-glow.png", + blend_mode = "additive", + width = 434, + height = 446, + shift = util.by_pixel(-3, 36 + silo_offset_px), + scale = 0.5 + } + }, + + + door_back_sprite = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/04-door-back.png", + width = 158, + height = 144, + shift = util.by_pixel(36, 12 + silo_offset_px), + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/hr-04-door-back.png", + width = 312, + height = 286, + shift = util.by_pixel(37, 12 + silo_offset_px), + scale = 0.5 + } + }, + door_back_open_offset = {1.8, -1.8 * 0.43299225}, + door_front_sprite = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/05-door-front.png", + width = 166, + height = 152, + shift = util.by_pixel(-28, 32 + silo_offset_px), + hr_version = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/hr-05-door-front.png", + width = 332, + height = 300, + shift = util.by_pixel(-28, 33 + silo_offset_px), + scale = 0.5 + } + }, + door_front_open_offset = {-1.8, 1.8 * 0.43299225}, + + base_day_sprite = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/06-rocket-silo.png", + width = 352, + height = 368, + shift = util.by_pixel(0, -8), + hr_version = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/hr-06-rocket-silo.png", + width = 704, + height = 736, + shift = util.by_pixel(0, -8), + scale = 0.5 + } + }, + + + red_lights_back_sprites = + { + layers = + { + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/07-red-lights-back/red-light.png", + width = 32, + height = 32, + shift = {1.34375, 0.28125-1.375 + silo_offset_px/32}, + hr_version = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/07-red-lights-back/hr-red-light.png", + width = 32, + height = 32, + shift = {1.34375, 0.28125-1.375 + silo_offset_px/32}, + scale = 0.5 + } + }, + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/07-red-lights-back/red-light.png", + width = 32, + height = 32, + shift = {2.3125, 0.9375-1.375 + silo_offset_px/32}, + hr_version = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/07-red-lights-back/hr-red-light.png", + width = 32, + height = 32, + shift = {2.3125, 0.9375-1.375 + silo_offset_px/32}, + scale = 0.5 + } + }, + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/07-red-lights-back/red-light.png", + width = 32, + height = 32, + shift = {2.65625, 1.90625-1.375 + silo_offset_px/32}, + hr_version = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/07-red-lights-back/hr-red-light.png", + width = 32, + height = 32, + shift = {2.65625, 1.90625-1.375 + silo_offset_px/32}, + scale = 0.5 + } + }, + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/07-red-lights-back/red-light.png", + width = 32, + height = 32, + shift = {-2.65625, 1.90625-1.375 + silo_offset_px/32}, + hr_version = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/07-red-lights-back/hr-red-light.png", + width = 32, + height = 32, + shift = {-2.65625, 1.90625-1.375 + silo_offset_px/32}, + scale = 0.5 + } + }, + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/07-red-lights-back/red-light.png", + width = 32, + height = 32, + shift = {-2.3125, 0.9375-1.375 + silo_offset_px/32}, + hr_version = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/07-red-lights-back/hr-red-light.png", + width = 32, + height = 32, + shift = {-2.3125, 0.9375-1.375 + silo_offset_px/32}, + scale = 0.5 + } + }, + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/07-red-lights-back/red-light.png", + width = 32, + height = 32, + shift = {-1.34375, 0.28125-1.375 + silo_offset_px/32}, + hr_version = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/07-red-lights-back/hr-red-light.png", + width = 32, + height = 32, + shift = {-1.34375, 0.28125-1.375 + silo_offset_px/32}, + scale = 0.5 + } + }, + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/07-red-lights-back/red-light.png", + width = 32, + height = 32, + shift = {0, 0-1.375 + silo_offset_px/32}, + hr_version = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/07-red-lights-back/hr-red-light.png", + width = 32, + height = 32, + shift = {0, 0-1.375 + silo_offset_px/32}, + scale = 0.5 + } + } + } + }, + + red_lights_front_sprites = + { + layers = + { + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/07-red-lights-back/red-light.png", + width = 32, + height = 32, + shift = {2.3125, 2.8125-1.375 + silo_offset_px/32}, + hr_version = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/07-red-lights-back/hr-red-light.png", + width = 32, + height = 32, + shift = {2.3125, 2.8125-1.375 + silo_offset_px/32}, + scale = 0.5 + } + }, + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/07-red-lights-back/red-light.png", + width = 32, + height = 32, + shift = {1.34375, 3.40625-1.375 + silo_offset_px/32}, + hr_version = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/07-red-lights-back/hr-red-light.png", + width = 32, + height = 32, + shift = {1.34375, 3.40625-1.375 + silo_offset_px/32}, + scale = 0.5 + } + }, + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/07-red-lights-back/red-light.png", + width = 32, + height = 32, + shift = {0, 3.75-1.375 + silo_offset_px/32}, + hr_version = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/07-red-lights-back/hr-red-light.png", + width = 32, + height = 32, + shift = {0, 3.75-1.375 + silo_offset_px/32}, + scale = 0.5 + } + }, + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/07-red-lights-back/red-light.png", + width = 32, + height = 32, + shift = {-1.34375, 3.40625-1.375 + silo_offset_px/32}, + hr_version = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/07-red-lights-back/hr-red-light.png", + width = 32, + height = 32, + shift = {0, 3.75-1.375 + silo_offset_px/32}, + scale = 0.5 + } + }, + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/07-red-lights-back/red-light.png", + width = 32, + height = 32, + shift = {-2.3125, 2.8125-1.375 + silo_offset_px/32}, + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/07-red-lights-back/hr-red-light.png", + width = 32, + height = 32, + shift = {-2.3125, 2.8125-1.375 + silo_offset_px/32}, + scale = 0.5 + } + } + } + }, + satellite_animation = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/15-rocket-silo-turbine.png", + priority = "medium", + width = 392/4/2, + height = 288/8/2, + frame_count = 4, + line_length = 4, + animation_speed = 0.4, + shift = util.by_pixel(-114, -4), + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/hr-15-rocket-silo-turbine.png", + priority = "medium", + width = 392/4, + height = 288/8, + frame_count = 4, + line_length = 4, + animation_speed = 0.4, + shift = util.by_pixel(-114, -4), + scale = 0.5 + } + }, + + arm_01_back_animation = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/08-rocket-silo-arms-back.png", + priority = "medium", + width = 66, + height = 76, + frame_count = 32, + line_length = 32, + animation_speed = 0.3, + shift = util.by_pixel(-54, -84 + silo_offset_px), + hr_version = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/hr-08-rocket-silo-arms-back.png", + priority = "medium", + width = 128, + height = 150, + frame_count = 32, + line_length = 32, + animation_speed = 0.3, + shift = util.by_pixel(-53, -84 + silo_offset_px), + scale = 0.5 + } + }, + + arm_02_right_animation = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/08-rocket-silo-arms-right.png", + priority = "medium", + width = 94, + height = 94, + frame_count = 32, + line_length = 32, + animation_speed = 0.3, + shift = util.by_pixel(100, -38 + silo_offset_px), + hr_version = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/hr-08-rocket-silo-arms-right.png", + priority = "medium", + width = 182, + height = 188, + frame_count = 32, + line_length = 32, + animation_speed = 0.3, + shift = util.by_pixel(101, -38 + silo_offset_px), + scale = 0.5 + } + }, + + arm_03_front_animation = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/13-rocket-silo-arms-front.png", + priority = "medium", + width = 66, + height = 114, + frame_count = 32, + line_length = 32, + animation_speed = 0.3, + shift = util.by_pixel(-52, 16 + silo_offset_px), + hr_version = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/hr-13-rocket-silo-arms-front.png", + priority = "medium", + width = 126, + height = 228, + frame_count = 32, + line_length = 32, + animation_speed = 0.3, + shift = util.by_pixel(-51, 16 + silo_offset_px), + scale = 0.5 + } + }, + + base_front_sprite = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/14-rocket-silo-front.png", + width = 704 / 2, + height = 448 / 2, + shift = util.by_pixel(0, 64), + hr_version = + { + filename = "__space-exploration-graphics-5__/graphics/entity/rocket-launch-pad/hr-14-rocket-silo-front.png", + width = 704, + height = 448, + shift = util.by_pixel(0, 64), + scale = 0.5 + } + }, + + alarm_trigger = + { + { + type = "play-sound", + sound = + { + { + filename = "__base__/sound/silo-alarm.ogg", + volume = 1.0 + } + } + } + }, + clamps_on_trigger = + { + { + type = "play-sound", + sound = + { + { + filename = "__base__/sound/silo-clamps-on.ogg", + volume = 1.0 + } + } + } + }, + clamps_off_trigger = + { + { + type = "play-sound", + sound = + { + { + filename = "__base__/sound/silo-clamps-off.ogg", + volume = 1.0 + } + } + } + }, + doors_trigger = + { + { + type = "play-sound", + sound = + { + { + filename = "__base__/sound/silo-doors.ogg", + volume = 1.0 + } + } + } + }, + raise_rocket_trigger = + { + { + type = "play-sound", + sound = + { + { + filename = "__base__/sound/silo-raise-rocket.ogg", + volume = 1.0 + } + } + } + } + }, +}) + +data.raw["storage-tank"][data_util.mod_prefix .. "rocket-launch-pad-tank"].fluid_box.pipe_covers.north.layers={blank_image} diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/scaffold.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/scaffold.lua new file mode 100644 index 0000000..e70d329 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/scaffold.lua @@ -0,0 +1,328 @@ +local data_util = require("data_util") + +local auto_hr = function(sr) + local hr = table.deepcopy(sr) + hr.scale = 0.5 * (sr.scale or 1) + hr.filename = data_util.replace(hr.filename, "/sr/", "/hr/") + hr.width = sr.width * 2 + hr.height = sr.height * 2 + sr.hr_version = hr + return sr +end + +local make_scaffold_pictures = function(width, height) + local layers = {} + local x_base = -(width+1)/2*32 + local y_base = -(height+1)/2*32 + for i = 1, width, 1 do + for j = 1, height, 1 do + if j == 1 then + if i == 1 then + table.insert(layers, auto_hr({ + filename = "__space-exploration-graphics__/graphics/entity/scaffold/sr/scaffold-nw.png", + priority = "high", + width = 32, + height = 32, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(x_base+i*32+0, y_base+j*32+0), + animation_speed = 1, + })) + table.insert(layers, auto_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/scaffold/sr/scaffold-nw-shadow.png", + priority = "high", + width = 40, + height = 40, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(x_base+i*32+4, y_base+j*32+4), + animation_speed = 1, + })) + elseif i < width then + table.insert(layers, auto_hr({ + filename = "__space-exploration-graphics__/graphics/entity/scaffold/sr/scaffold-n.png", + priority = "high", + width = 32, + height = 32, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(x_base+i*32+0, y_base+j*32+0), + animation_speed = 1, + })) + table.insert(layers, auto_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/scaffold/sr/scaffold-n-shadow.png", + priority = "high", + width = 32, + height = 40, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(x_base+i*32+8, y_base+j*32+4), + animation_speed = 1, + })) + else + table.insert(layers, auto_hr({ + filename = "__space-exploration-graphics__/graphics/entity/scaffold/sr/scaffold-ne.png", + priority = "high", + width = 32, + height = 32, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(x_base+i*32+0, y_base+j*32+0), + animation_speed = 1, + })) + table.insert(layers, auto_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/scaffold/sr/scaffold-ne-shadow.png", + priority = "high", + width = 32, + height = 40, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(x_base+i*32+8, y_base+j*32+4), + animation_speed = 1, + })) + end + elseif j < height then + if i == 1 then + table.insert(layers, auto_hr({ + filename = "__space-exploration-graphics__/graphics/entity/scaffold/sr/scaffold-w.png", + priority = "high", + width = 32, + height = 32, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(x_base+i*32+0, y_base+j*32+0), + animation_speed = 1, + })) + table.insert(layers, auto_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/scaffold/sr/scaffold-w-shadow.png", + priority = "high", + width = 40, + height = 32, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(x_base+i*32+4, y_base+j*32+8), + animation_speed = 1, + })) + elseif i < width then + table.insert(layers, auto_hr({ + filename = "__space-exploration-graphics__/graphics/entity/scaffold/sr/scaffold-m.png", + priority = "high", + width = 32, + height = 32, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(x_base+i*32+0, y_base+j*32+0), + animation_speed = 1, + })) + table.insert(layers, auto_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/scaffold/sr/scaffold-m-shadow.png", + priority = "high", + width = 32, + height = 32, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(x_base+i*32+8, y_base+j*32+8), + animation_speed = 1, + })) + else + table.insert(layers, auto_hr({ + filename = "__space-exploration-graphics__/graphics/entity/scaffold/sr/scaffold-e.png", + priority = "high", + width = 32, + height = 32, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(x_base+i*32+0, y_base+j*32+0), + animation_speed = 1, + })) + table.insert(layers, auto_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/scaffold/sr/scaffold-e-shadow.png", + priority = "high", + width = 32, + height = 32, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(x_base+i*32+8, y_base+j*32+8), + animation_speed = 1, + })) + end + else + if i == 1 then + table.insert(layers, auto_hr({ + filename = "__space-exploration-graphics__/graphics/entity/scaffold/sr/scaffold-sw.png", + priority = "high", + width = 32, + height = 32, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(x_base+i*32+0, y_base+j*32+0), + animation_speed = 1, + })) + table.insert(layers, auto_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/scaffold/sr/scaffold-sw-shadow.png", + priority = "high", + width = 40, + height = 24, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(x_base+i*32+4, y_base+j*32+4), + animation_speed = 1, + })) + elseif i < width then + table.insert(layers, auto_hr({ + filename = "__space-exploration-graphics__/graphics/entity/scaffold/sr/scaffold-s.png", + priority = "high", + width = 32, + height = 32, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(x_base+i*32+0, y_base+j*32+0), + animation_speed = 1, + })) + table.insert(layers, auto_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/scaffold/sr/scaffold-s-shadow.png", + priority = "high", + width = 32, + height = 24, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(x_base+i*32+8, y_base+j*32+4), + animation_speed = 1, + })) + else + table.insert(layers, auto_hr({ + filename = "__space-exploration-graphics__/graphics/entity/scaffold/sr/scaffold-se.png", + priority = "high", + width = 32, + height = 32, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(x_base+i*32+0, y_base+j*32+0), + animation_speed = 1, + })) + table.insert(layers, auto_hr({ + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/scaffold/sr/scaffold-se-shadow.png", + priority = "high", + width = 32, + height = 24, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(x_base+i*32+8, y_base+j*32+4), + animation_speed = 1, + })) + end + end + end + end + + return { layers = layers } + +end + + +data:extend({ + --[[{ + type = "assembling-machine", + name = data_util.mod_prefix .. "gate-addon-scaffold", + icon = "__space-exploration-graphics__/graphics/icons/scaffold.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + max_health = 700, + corpse = "big-remnants", + order = "a[ancient]-g[gate]-z[scaffold]", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{-4/2+1/32, -4/2+1/32}, {4/2-1/32, 4/2-1/32}}, + selection_box = {{-4/2+1/32, -4/2+1/32}, {4/2-1/32, 4/2-1/32}}, + drawing_box = {{-4/2+1/32, -4/2+1/32}, {4/2-1/32, 4/2-1/32}}, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + apparent_volume = 1.5, + idle_sound = { + filename = "__base__/sound/idle1.ogg", + volume = 0.6 + }, + sound = { + { + filename = "__base__/sound/assembling-machine-t1-1.ogg", + volume = 0.8 + }, + { + filename = "__base__/sound/assembling-machine-t1-2.ogg", + volume = 0.8 + } + } + }, + collision_mask = {"not-colliding-with-itself"}, + animation = make_scaffold_pictures(4,4), + crafting_categories = {"fixed-recipe"}, + fixed_recipe = data_util.mod_prefix .. "gate-addon", + crafting_speed = 1, + energy_source = {type = "void"}, + energy_usage = "1000kW", + ingredient_count = 12, + module_specification = { module_slots = 0 }, + allowed_effects = {}, + },]]-- + { + type = "assembling-machine", + name = data_util.mod_prefix .. "gate-platform-scaffold", + icon = "__space-exploration-graphics__/graphics/icons/scaffold.png", + icon_size = 64, + flags = {"placeable-neutral"}, + max_health = 1000, + corpse = "big-remnants", + order = "a[ancient]-g[gate]-z[scaffold]", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{-9/2+1/32, -3/2+1/32}, {9/2-1/32, 3/2-1/32}}, + selection_box = {{-9/2+1/32, -3/2+1/32}, {9/2-1/32, 3/2-1/32}}, + drawing_box = {{-9/2+1/32, -3/2+1/32}, {9/2-1/32, 3/2-1/32}}, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + apparent_volume = 1.5, + idle_sound = { + filename = "__base__/sound/idle1.ogg", + volume = 0.6 + }, + sound = { + { + filename = "__base__/sound/assembling-machine-t1-1.ogg", + volume = 0.8 + }, + { + filename = "__base__/sound/assembling-machine-t1-2.ogg", + volume = 0.8 + } + } + }, + collision_mask = {"not-colliding-with-itself"}, + animation = make_scaffold_pictures(9,3), + crafting_categories = {"fixed-recipe"}, + fixed_recipe = data_util.mod_prefix .. "gate-platform", + crafting_speed = 1, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + energy_usage = "1000kW", + ingredient_count = 12, + module_specification = { module_slots = 0 }, + allowed_effects = {}, + } +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/space-biochemical.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/space-biochemical.lua new file mode 100644 index 0000000..02a6cf7 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/space-biochemical.lua @@ -0,0 +1,242 @@ +local data_util = require("data_util") + +local pipe_pics = table.deepcopy(data.raw["assembling-machine"]["assembling-machine-3"].fluid_boxes[1].pipe_picture) +data_util.replace_filenames_recursive(pipe_pics, + "__base__", + "__space-exploration-graphics__") +data_util.replace_filenames_recursive(pipe_pics, + "assembling-machine-3", + "assembling-machine") + +data:extend({ + { + type = "assembling-machine", + name = data_util.mod_prefix .. "space-biochemical-laboratory", + icon = "__space-exploration-graphics__/graphics/icons/biochemical-laboratory.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = {mining_time = 0.2, result = data_util.mod_prefix .. "space-biochemical-laboratory"}, + max_health = 700, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{-4.2, -4.2}, {4.2, 4.2}}, + selection_box = {{-4.5, -4.5}, {4.5, 4.5}}, + drawing_box = {{-4.5, -4.7}, {4.5, 4.5}}, + resistances = + { + { + type = "electric", + percent = 70 + } + }, + fluid_boxes = + { + { + production_type = "input", + --pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {-5, 2} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + --pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {-2, -5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + --pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {-5, 0} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + --pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {0, -5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + --pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {-5, -2} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + --pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {2, -5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {-2, 5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {5, 2} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {0, 5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {5, 0} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {2, 5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {5, -2} }}, + secondary_draw_orders = { north = -1 } + }, + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = + { + sound = { + { + filename = "__base__/sound/pumpjack.ogg", + volume = 0.8 + }, + { + filename = "__base__/sound/assembling-machine-t3-1.ogg", + volume = 0.8 + }, + }, + idle_sound = { filename = "__base__/sound/pipe.ogg", volume = 0.6 }, + apparent_volume = 1.5, + }, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + }, + animation = + { + layers = + { + { + filename = "__space-exploration-graphics-2__/graphics/entity/biochemical-laboratory/sr/biochemical-laboratory.png", + priority = "high", + width = 4608/8/2, + height = 5120/8/2, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(0, -16), + animation_speed = 0.5, + hr_version = { + filename = "__space-exploration-graphics-2__/graphics/entity/biochemical-laboratory/hr/biochemical-laboratory.png", + priority = "high", + width = 4608/8, + height = 5120/8, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(0, -16), + animation_speed = 0.5, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-2__/graphics/entity/biochemical-laboratory/sr/shadow.png", + priority = "high", + width = 648/2, + height = 560/2, + frame_count = 1, + line_length = 1, + repeat_count = 64, + shift = util.by_pixel(35, 20), + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-2__/graphics/entity/biochemical-laboratory/hr/shadow.png", + priority = "high", + width = 648, + height = 560, + frame_count = 1, + line_length = 1, + repeat_count = 64, + shift = util.by_pixel(35, 20), + scale = 0.5, + } + }, + }, + }, + crafting_categories = {"space-biochemical", "chemistry", "oil-processing"}, + crafting_speed = 4, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + energy_usage = "3000kW", + ingredient_count = 12, + module_specification = + { + module_slots = 4 + }, + allowed_effects = {"consumption", "speed", "pollution"}, -- not "productivity", + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.2, size = 16, shift = {0.0, 0.0}, color = {r = 0.6, g = 1, b = 0.5}} + }, + }, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/space-capsule.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/space-capsule.lua new file mode 100644 index 0000000..6f6f62d --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/space-capsule.lua @@ -0,0 +1,98 @@ +local scale = 0.4 +local data_util = require("data_util") + +local function shadow_pictures() + local frame_count = 24 + local width = 359 + local height = 120 + local line_length = 3 + local pictures = {} + for i = 1, frame_count do + pictures[i] = { + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/space-capsule/space-capsule-shadow.png", + width = width, + height = height, + x = width * ((i -1) % line_length), + y = height * math.floor((i -1) / line_length), + shift = {21/32, 12/32}, + scale = scale + } + end + return pictures +end +data:extend({ + { + type = "car", + name = data_util.mod_prefix .. "space-capsule-_-vehicle", + collision_box = {{-0.7, -0.7}, {0.7, 0.7}}, -- 2 wide is most a vehicle can be and be able to get in + selection_box = {{-1, -1}, {1, 1}}, + display_box = {{-1.5, -4}, {1.5, 1.5}}, + collision_mask = { + --"water-tile", + "object-layer", + --"floor-layer", + "player-layer"}, + minable = { mining_time = 0.25, result = data_util.mod_prefix .. "space-capsule"}, + has_belt_immunity = true, + selection_priority = 200, + selectable_in_game = true, + animation = { + layers = { + { + animation_speed = 1, + direction_count = 24, + line_length = 8, + filename = "__space-exploration-graphics__/graphics/entity/space-capsule/space-capsule.png", + frame_count = 1, + height = 362, + width = 188, + shift = {1/32, -8/32}, + scale = scale + }, + } + }, + braking_power = "200kW", + burner = { + effectivity = 1, + fuel_category = "chemical", + fuel_inventory_size = 0, + render_no_power_icon = false + }, + consumption = "1W", + effectivity = 0.0, + energy_per_hit_point = 1, + flags = { "placeable-neutral", "player-creation", "placeable-off-grid"}, + friction = 0.9, + icon = "__space-exploration-graphics__/graphics/icons/space-capsule.png", + icon_size = 64, + inventory_size = 40, + max_health = 1000, + open_sound = { + filename = "__base__/sound/car-door-open.ogg", + volume = 0.7 + }, + close_sound = { + filename = "__base__/sound/car-door-close.ogg", + volume = 0.7 + }, + render_layer = "wires-above", + rotation_speed = 0.00, + order = "zz", + weight = 10000, + }, + { + type = "simple-entity-with-force", + name = data_util.mod_prefix .. "space-capsule-_-vehicle-shadow", + collision_box = {{-0, -0}, {0, 0}}, + selection_box = {{-0, -0}, {0, 0}}, + collision_mask = {"not-colliding-with-itself"}, + selectable_in_game = false, + pictures = shadow_pictures(), + flags = { "placeable-neutral", "placeable-off-grid"}, + icon = "__space-exploration-graphics__/graphics/icons/space-capsule.png", + icon_size = 64, + render_layer = "object", + order = "zz", + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/space-electromagnetics.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/space-electromagnetics.lua new file mode 100644 index 0000000..8da3d0c --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/space-electromagnetics.lua @@ -0,0 +1,276 @@ +local data_util = require("data_util") + +data:extend({ + { + type = "assembling-machine", + name = data_util.mod_prefix .. "space-electromagnetics-laboratory", + icon = "__space-exploration-graphics__/graphics/icons/electromagnetics-laboratory.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = {mining_time = 0.2, result = data_util.mod_prefix .. "space-electromagnetics-laboratory"}, + max_health = 700, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{-3.2, -3.2}, {3.2, 3.2}}, + selection_box = {{-3.5, -3.5}, {3.5, 3.5}}, + drawing_box = {{-3.5, -5.5}, {3.5, 3.5}}, + resistances = + { + { + type = "electric", + percent = 70 + } + }, + fluid_boxes = + { + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {0, -4} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {-4, 0} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {0, 4} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {4, 0} }}, + secondary_draw_orders = { north = -1 } + }, + --off_when_no_fluid_recipe = true + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = + { + sound = { + { + filename = "__base__/sound/lab.ogg", + volume = 0.8 + }, + }, + apparent_volume = 1.5, + }, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + spaceship_collision_layer, + }, + idle_animation = + { + layers = + { + { + filename = "__space-exploration-graphics-3__/graphics/entity/electromagnetics-laboratory/sr/base.png", + priority = "high", + width = 448/2, + height = 576/2, + frame_count = 1, + line_length = 1, + repeat_count = 64, + shift = util.by_pixel(0, -16), + animation_speed = 1, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/electromagnetics-laboratory/hr/base.png", + priority = "high", + width = 448, + height = 576, + frame_count = 1, + line_length = 1, + repeat_count = 64, + shift = util.by_pixel(0, -16), + animation_speed = 1, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/electromagnetics-laboratory/sr/shadow.png", + priority = "high", + width = 566/2, + height = 400/2, + frame_count = 1, + line_length = 1, + repeat_count = 64, + shift = util.by_pixel(35, 20), + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/electromagnetics-laboratory/hr/shadow.png", + priority = "high", + width = 566, + height = 400, + frame_count = 1, + line_length = 1, + repeat_count = 64, + shift = util.by_pixel(35, 20), + scale = 0.5, + } + }, + }, + }, + animation = + { + layers = + { + { + filename = "__space-exploration-graphics-3__/graphics/entity/electromagnetics-laboratory/sr/base.png", + priority = "high", + width = 448/2, + height = 576/2, + frame_count = 1, + line_length = 1, + repeat_count = 64, + shift = util.by_pixel(0, -16), + animation_speed = 1, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/electromagnetics-laboratory/hr/base.png", + priority = "high", + width = 448, + height = 576, + frame_count = 1, + line_length = 1, + repeat_count = 64, + shift = util.by_pixel(0, -16), + animation_speed = 1, + scale = 0.5, + } + }, + { + priority = "high", + width = 1392/4/2, + height = 1880/5/2, + frame_count = 64, + shift = util.by_pixel(1, -17), + animation_speed = 0.25, + stripes = + { + { + filename = "__space-exploration-graphics-3__/graphics/entity/electromagnetics-laboratory/sr/animation-1.png", + width_in_frames = 4, + height_in_frames = 5, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/electromagnetics-laboratory/sr/animation-2.png", + width_in_frames = 4, + height_in_frames = 5, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/electromagnetics-laboratory/sr/animation-3.png", + width_in_frames = 4, + height_in_frames = 5, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/electromagnetics-laboratory/sr/animation-4.png", + width_in_frames = 4, + height_in_frames = 1, + }, + }, + hr_version = { + priority = "high", + width = 1392/4, + height = 1880/5, + frame_count = 64, + shift = util.by_pixel(1, -17), + animation_speed = 0.25, + scale = 0.5, + stripes = + { + { + filename = "__space-exploration-graphics-3__/graphics/entity/electromagnetics-laboratory/hr/animation-1.png", + width_in_frames = 4, + height_in_frames = 5, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/electromagnetics-laboratory/hr/animation-2.png", + width_in_frames = 4, + height_in_frames = 5, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/electromagnetics-laboratory/hr/animation-3.png", + width_in_frames = 4, + height_in_frames = 5, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/electromagnetics-laboratory/hr/animation-4.png", + width_in_frames = 4, + height_in_frames = 1, + }, + }, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/electromagnetics-laboratory/sr/shadow.png", + priority = "high", + width = 566/2, + height = 400/2, + frame_count = 1, + line_length = 1, + repeat_count = 64, + shift = util.by_pixel(35, 20), + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/electromagnetics-laboratory/hr/shadow.png", + priority = "high", + width = 566, + height = 400, + frame_count = 1, + line_length = 1, + repeat_count = 64, + shift = util.by_pixel(35, 20), + scale = 0.5, + } + }, + }, + }, + crafting_categories = {"space-electromagnetics"}, + crafting_speed = 1, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + energy_usage = "5MW", + ingredient_count = 12, + module_specification = + { + module_slots = 4 + }, + allowed_effects = {"consumption", "speed", "pollution"}, -- not "productivity", + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.6, size = 16, shift = {0.0, 0.0}, color = {r = 0.3, g = 0.5, b = 1}} + }, + }, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/space-hypercooler.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/space-hypercooler.lua new file mode 100644 index 0000000..9cdaa56 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/space-hypercooler.lua @@ -0,0 +1,148 @@ +local data_util = require("data_util") + +data:extend({ + { + type = "assembling-machine", + name = data_util.mod_prefix .. "space-hypercooler", + icon = "__space-exploration-graphics__/graphics/icons/hypercooler.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = {mining_time = 0.2, result = data_util.mod_prefix .. "space-hypercooler"}, + max_health = 500, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, 0), + resistances = + { + { + type = "fire", + percent = 70 + } + }, + fluid_boxes = + { + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {0, -3} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {-3, 0} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {0, 3} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {3, 0} }}, + secondary_draw_orders = { north = -1 } + }, + --off_when_no_fluid_recipe = true + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = + { + sound = { + { + filename = "__base__/sound/pumpjack.ogg", + volume = 0.8 + }, + }, + idle_sound = { filename = "__base__/sound/pipe.ogg", volume = 0.6 }, + apparent_volume = 1.5, + }, + collision_box = {{-2.2, -2.2}, {2.2, 2.2}}, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + --spaceship_collision_layer, + }, + selection_box = {{-2.5, -2.5}, {2.5, 2.5}}, + drawing_box = {{-2.5, -2.7}, {2.5, 2.5}}, + animation = + { + layers = + { + { + priority = "high", + width = 320, + height = 352, + frame_count = 64, + shift = util.by_pixel(-0, -8), + animation_speed = 1, + scale = 0.5, + stripes = + { + { + filename = "__space-exploration-graphics-4__/graphics/entity/hypercooler/hr/hypercooler-1.png", + width_in_frames = 6, + height_in_frames = 5, + }, + { + filename = "__space-exploration-graphics-4__/graphics/entity/hypercooler/hr/hypercooler-2.png", + width_in_frames = 6, + height_in_frames = 5, + }, + { + filename = "__space-exploration-graphics-4__/graphics/entity/hypercooler/hr/hypercooler-3.png", + width_in_frames = 4, + height_in_frames = 1, + }, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-4__/graphics/entity/hypercooler/hr/shadow.png", + priority = "high", + width = 424, + height = 280, + frame_count = 1, + line_length = 1, + repeat_count = 64, + shift = util.by_pixel(25, 11), + scale = 0.5, + }, + }, + }, + crafting_categories = {"space-hypercooling"}, + crafting_speed = 2, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 2, + }, + energy_usage = "200kW", + ingredient_count = 12, + module_specification = + { + module_slots = 4 + }, + allowed_effects = {"consumption", "speed", "pollution"} -- not "productivity", + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/space-manufactory.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/space-manufactory.lua new file mode 100644 index 0000000..82b8e28 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/space-manufactory.lua @@ -0,0 +1,326 @@ +local data_util = require("data_util") + +local space_assembler = table.deepcopy(data.raw["assembling-machine"]["assembling-machine-3"]) +space_assembler.name = data_util.mod_prefix .. "space-assembling-machine" +space_assembler.icon = "__space-exploration-graphics__/graphics/icons/assembling-machine.png" +space_assembler.icon_size = 64 +space_assembler.icon_mipmaps = 1 + +data_util.replace_filenames_recursive(space_assembler.animation, + "__base__", + "__space-exploration-graphics__") +data_util.replace_filenames_recursive(space_assembler.animation, + "assembling-machine-3", + "assembling-machine") +local pipe_pics = nil +for _, fluid_box in pairs(space_assembler.fluid_boxes) do + if type(fluid_box) == "table" then + data_util.replace_filenames_recursive(fluid_box.pipe_picture, + "__base__", + "__space-exploration-graphics__") + data_util.replace_filenames_recursive(fluid_box.pipe_picture, + "assembling-machine-3", + "assembling-machine") + pipe_pics = table.deepcopy(fluid_box.pipe_picture) + end +end +space_assembler.minable.result = data_util.mod_prefix .. "space-assembling-machine" +space_assembler.allowed_effects = {"consumption", "speed", "pollution"} -- not "productivity" +space_assembler.fast_replaceable_group = nil +space_assembler.next_upgrade = nil +space_assembler.collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", +} +table.insert(space_assembler.crafting_categories, "space-crafting") + +data:extend({ + space_assembler, + { + type = "assembling-machine", + name = data_util.mod_prefix .. "space-manufactory", + icon = "__space-exploration-graphics__/graphics/icons/manufactory.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = {mining_time = 0.2, result = data_util.mod_prefix .. "space-manufactory"}, + max_health = 900, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + resistances = + { + { + type = "fire", + percent = 70 + } + }, + fluid_boxes = + { + { + production_type = "input", + pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {-5, 2} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {-2, -5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {-5, 0} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {0, -5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {-5, -2} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {2, -5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {-2, 5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {5, 2} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {0, 5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {5, 0} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {2, 5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + pipe_picture = pipe_pics, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {5, -2} }}, + secondary_draw_orders = { north = -1 } + }, + --off_when_no_fluid_recipe = true + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = + { + sound = { + { + filename = "__base__/sound/assembling-machine-t3-1.ogg", + volume = 0.8 + }, + { + filename = "__base__/sound/assembling-machine-t3-2.ogg", + volume = 0.8 + }, + }, + idle_sound = { filename = "__base__/sound/idle1.ogg", volume = 0.6 }, + apparent_volume = 1.5, + }, + collision_box = {{-4.2, -4.2}, {4.2, 4.2}}, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + }, + selection_box = {{-4.5, -4.5}, {4.5, 4.5}}, + drawing_box = {{-4.5, -4.7}, {4.5, 4.5}}, + animation = + { + layers = + { + { + filename = "__space-exploration-graphics-5__/graphics/entity/space-manufactory/hr/base.png", + priority = "high", + width = 577, + height = 605, + frame_count = 1, + line_length = 1, + repeat_count = 128, + shift = util.by_pixel(0, -8), + animation_speed = 0.5, + scale = 0.5, + }, + { + priority = "high", + width = 512, + height = 422, + frame_count = 128, + shift = util.by_pixel(-0, -51), + animation_speed = 0.25, + scale = 0.5, + stripes = + { + { + filename = "__space-exploration-graphics-5__/graphics/entity/space-manufactory/hr/top-1.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__space-exploration-graphics-5__/graphics/entity/space-manufactory/hr/top-2.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__space-exploration-graphics-5__/graphics/entity/space-manufactory/hr/top-3.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__space-exploration-graphics-5__/graphics/entity/space-manufactory/hr/top-4.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__space-exploration-graphics-5__/graphics/entity/space-manufactory/hr/top-5.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__space-exploration-graphics-5__/graphics/entity/space-manufactory/hr/top-6.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__space-exploration-graphics-5__/graphics/entity/space-manufactory/hr/top-7.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__space-exploration-graphics-5__/graphics/entity/space-manufactory/hr/top-8.png", + width_in_frames = 4, + height_in_frames = 4, + }, + } + }, + { + filename = "__space-exploration-graphics-5__/graphics/entity/space-manufactory/hr/middle.png", + priority = "high", + width = 40, + height = 82, + frame_count = 128, + line_length = 16, + shift = util.by_pixel(51, 79), + animation_speed = 0.25, + scale = 0.5, + }, + --[[{ + filename = "__space-exploration-graphics-5__/graphics/entity/space-manufactory/hr/lower.png", + priority = "high", + width = 80, + height = 22, + frame_count = 128, + line_length = 8, + shift = util.by_pixel(62, 137), + scale = 0.5, + },]]-- + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-5__/graphics/entity/space-manufactory/hr/shadow.png", + priority = "high", + width = 795, + height = 430, + frame_count = 1, + line_length = 1, + repeat_count = 128, + shift = util.by_pixel(67, 38), + scale = 0.5, + }, + }, + }, + crafting_categories = {"crafting", "advanced-crafting", "crafting-with-fluid", "space-crafting", "space-manufacturing"}, + crafting_speed = 10, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 50, + }, + energy_usage = "2000kW", + ingredient_count = 12, + module_specification = + { + module_slots = 6 + }, + allowed_effects = {"consumption", "speed", "pollution"}, -- not "productivity", + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.8, size = 20, shift = {0.0, 0.0}, color = {r = 0.7, g = 0.8, b = 1}} + }, + }, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/space-plasma-generator.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/space-plasma-generator.lua new file mode 100644 index 0000000..0926411 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/space-plasma-generator.lua @@ -0,0 +1,224 @@ +local data_util = require("data_util") + +data:extend({ + { + type = "assembling-machine", + name = data_util.mod_prefix .. "space-plasma-generator", + icon = "__space-exploration-graphics__/graphics/icons/plasma-generator.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = {mining_time = 0.2, result = data_util.mod_prefix .. "space-plasma-generator"}, + max_health = 700, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{-3.2, -3.2}, {3.2, 3.2}}, + selection_box = {{-3.5, -3.5}, {3.5, 3.5}}, + drawing_box = {{-3.5, -5.5}, {3.5, 3.5}}, + resistances = + { + { + type = "electric", + percent = 70 + } + }, + fluid_boxes = + { + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {0, -4} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {-4, 0} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {0, 4} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {4, 0} }}, + secondary_draw_orders = { north = -1 } + }, + --off_when_no_fluid_recipe = true + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = + { + sound = { + { + filename = "__base__/sound/lab.ogg", + volume = 0.8 + }, + }, + apparent_volume = 1.5, + }, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + spaceship_collision_layer, + }, + animation = + { + layers = + { + { + filename = "__space-exploration-graphics-3__/graphics/entity/plasma-generator/sr/base.png", + priority = "high", + width = 448/2, + height = 576/2, + frame_count = 1, + line_length = 1, + repeat_count = 64, + shift = util.by_pixel(0, -16), + animation_speed = 1, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/plasma-generator/hr/base.png", + priority = "high", + width = 448, + height = 576, + frame_count = 1, + line_length = 1, + repeat_count = 64, + shift = util.by_pixel(0, -16), + animation_speed = 1, + scale = 0.5, + } + }, + { + priority = "high", + width = 1392/4/2, + height = 1880/5/2, + frame_count = 64, + shift = util.by_pixel(-0, -17), + animation_speed = 0.25, + stripes = + { + { + filename = "__space-exploration-graphics-3__/graphics/entity/plasma-generator/sr/animation-1.png", + width_in_frames = 4, + height_in_frames = 5, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/plasma-generator/sr/animation-2.png", + width_in_frames = 4, + height_in_frames = 5, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/plasma-generator/sr/animation-3.png", + width_in_frames = 4, + height_in_frames = 5, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/plasma-generator/sr/animation-4.png", + width_in_frames = 4, + height_in_frames = 1, + }, + }, + hr_version = { + priority = "high", + width = 1392/4, + height = 1880/5, + frame_count = 64, + shift = util.by_pixel(-0, -17), + animation_speed = 0.25, + scale = 0.5, + stripes = + { + { + filename = "__space-exploration-graphics-3__/graphics/entity/plasma-generator/hr/animation-1.png", + width_in_frames = 4, + height_in_frames = 5, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/plasma-generator/hr/animation-2.png", + width_in_frames = 4, + height_in_frames = 5, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/plasma-generator/hr/animation-3.png", + width_in_frames = 4, + height_in_frames = 5, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/plasma-generator/hr/animation-4.png", + width_in_frames = 4, + height_in_frames = 1, + }, + }, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/plasma-generator/sr/shadow.png", + priority = "high", + width = 566/2, + height = 400/2, + frame_count = 1, + line_length = 1, + repeat_count = 64, + shift = util.by_pixel(35, 20), + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/plasma-generator/hr/shadow.png", + priority = "high", + width = 566, + height = 400, + frame_count = 1, + line_length = 1, + repeat_count = 64, + shift = util.by_pixel(35, 20), + scale = 0.5, + } + }, + }, + }, + crafting_categories = {"space-plasma"}, + crafting_speed = 1, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + energy_usage = "2MW", + ingredient_count = 12, + module_specification = + { + module_slots = 4 + }, + allowed_effects = {"consumption", "speed", "pollution"}, -- not "productivity", + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.6, size = 16, shift = {0.0, 0.0}, color = {r = 1, g = 0.5, b = 0}} + }, + }, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/space-radiator.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/space-radiator.lua new file mode 100644 index 0000000..1de4cb8 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/space-radiator.lua @@ -0,0 +1,141 @@ +local data_util = require("data_util") + +data:extend({ + { + type = "assembling-machine", + name = data_util.mod_prefix .. "space-radiator", + icon = "__space-exploration-graphics__/graphics/icons/radiator.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = {mining_time = 0.1, result = data_util.mod_prefix .. "space-radiator"}, + fast_replaceable_group = data_util.mod_prefix .. "space-radiator", + max_health = 150, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, 0), + collision_box = {{-1.2, -1.2}, {1.2, 1.2}}, + selection_box = {{-1.5, -1.5}, {1.5, 1.5}}, + drawing_box = {{-1.5, -2.5}, {1.5, 1.5}}, + resistances = + { + { + type = "fire", + percent = 90 + } + }, + fluid_boxes = + { + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {0, -2} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {0, 2} }}, + secondary_draw_orders = { north = -1 } + }, + --off_when_no_fluid_recipe = true + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = + { + sound = { + { + filename = "__base__/sound/electric-furnace.ogg", + volume = 0.7 + }, + }, + apparent_volume = 1.5, + }, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + }, + animation = + { + layers = + { + { + priority = "high", + width = 196, + height = 275, + frame_count = 20, + shift = util.by_pixel(-0, -12), + animation_speed = 0.25, + scale = 0.5, + stripes = + { + { + filename = "__space-exploration-graphics-4__/graphics/entity/radiator/hr/radiator.png", + width_in_frames = 10, + height_in_frames = 2, + }, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-4__/graphics/entity/radiator/hr/radiator-shadow.png", + priority = "high", + width = 242, + height = 147, + frame_count = 1, + line_length = 1, + repeat_count = 20, + shift = util.by_pixel(25, 11), + scale = 0.5, + }, + }, + }, + crafting_categories = {"space-radiator"}, + crafting_speed = 1, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 1, + }, + energy_usage = "10kW", + ingredient_count = 12, + module_specification = + { + module_slots = 0 + }, + allowed_effects = {}, -- not "productivity", + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.3, size = 9, shift = {0.0, 0.0}, color = {r = 1, g = 0.3, b = 0.05}} + }, + }, + module_specification = + { + module_slots = 2 + }, + allowed_effects = {"consumption", "speed", "pollution"} -- not "productivity", + }, +}) +local radiator_2 = table.deepcopy(data.raw["assembling-machine"][data_util.mod_prefix .. "space-radiator"]) +radiator_2.name = data_util.mod_prefix .. "space-radiator-2" +radiator_2.crafting_speed = 2 +radiator_2.icon = "__space-exploration-graphics__/graphics/icons/radiator-blue.png" +radiator_2.minable.result = data_util.mod_prefix .. "space-radiator-2" +data_util.replace_filenames_recursive(radiator_2.animation, "radiator.png", "radiator-blue.png") +data:extend({ + radiator_2 +}) +data.raw["assembling-machine"][data_util.mod_prefix .. "space-radiator"].next_upgrade = radiator_2.name diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/space-science-lab.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/space-science-lab.lua new file mode 100644 index 0000000..49dc4ed --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/space-science-lab.lua @@ -0,0 +1,227 @@ +local data_util = require("data_util") + +-- space-science-lab is a lab + +data:extend({ + { + type = "lab", + name = data_util.mod_prefix .. "space-science-lab", + energy_usage = "1000kW", --"60kW", + researching_speed = 10, -- 1, + collision_box = {{-3.2, -3.2}, {3.2, 3.2}}, -- 7 wide + selection_box = {{-3.5, -3.5}, {3.5, 3.5}}, -- 7 wide + display_box = {{-3.5, -4.8}, {3.5, 3.5}}, -- 7 wide + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + spaceship_collision_layer -- not spaceship + }, + icon = "__space-exploration-graphics__/graphics/icons/space-science-lab.png", + icon_size = 64, + inputs = { + "automation-science-pack", + "logistic-science-pack", + "chemical-science-pack", + "military-science-pack", + "production-science-pack", + "utility-science-pack", + "space-science-pack", + data_util.mod_prefix .. "rocket-science-pack", + data_util.mod_prefix .. "astronomic-science-pack-1", + data_util.mod_prefix .. "biological-science-pack-1", + data_util.mod_prefix .. "energy-science-pack-1", + data_util.mod_prefix .. "material-science-pack-1", + data_util.mod_prefix .. "astronomic-science-pack-2", + data_util.mod_prefix .. "biological-science-pack-2", + data_util.mod_prefix .. "energy-science-pack-2", + data_util.mod_prefix .. "material-science-pack-2", + data_util.mod_prefix .. "astronomic-science-pack-3", + data_util.mod_prefix .. "biological-science-pack-3", + data_util.mod_prefix .. "energy-science-pack-3", + data_util.mod_prefix .. "material-science-pack-3", + data_util.mod_prefix .. "astronomic-science-pack-4", + data_util.mod_prefix .. "biological-science-pack-4", + data_util.mod_prefix .. "energy-science-pack-4", + data_util.mod_prefix .. "material-science-pack-4", + data_util.mod_prefix .. "deep-space-science-pack-1", + data_util.mod_prefix .. "deep-space-science-pack-2", + data_util.mod_prefix .. "deep-space-science-pack-3", + data_util.mod_prefix .. "deep-space-science-pack-4", + }, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + energy_source = { + type = "electric", + usage_priority = "secondary-input" + }, + flags = { "placeable-player", "player-creation" }, + light = { color = { b = 1, g = 0.6, r = 0.4 }, intensity = 1, size = 12 }, + max_health = 500, + minable = { mining_time = 0.2, result = data_util.mod_prefix .. "space-science-lab" }, + module_specification = { + max_entity_info_module_icon_rows = 1, + max_entity_info_module_icons_per_row = 7, + module_info_icon_shift = { 0, 2 }, + module_slots = 6 + }, + off_animation = { + layers = { + { + filename = "__space-exploration-graphics-3__/graphics/entity/space-science-lab/sr/space-science-lab-inactive.png", + frame_count = 1, + height = 541/2, + width = 467/2, + shift = { 0/32, -12/32}, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/space-science-lab/hr/space-science-lab-inactive.png", + frame_count = 1, + height = 541, + width = 467, + shift = { 0/32, -12/32}, + scale = 0.5, + }, + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/space-science-lab/sr/space-science-lab-shadow.png", + frame_count = 1, + width = 599/2, + height = 345/2, + shift = { 1.40625, 0.34375 }, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/space-science-lab/hr/space-science-lab-shadow.png", + frame_count = 1, + width = 599, + height = 345, + scale = 0.5, + shift = { 1.40625, 0.34375 }, + }, + } + } + }, + on_animation = { + layers = { + { + filename = "__space-exploration-graphics-3__/graphics/entity/space-science-lab/sr/space-science-lab-base.png", + width = 467/2, + height = 290/2, + line_length = 1, + frame_count = 1, + repeat_count = 64, + animation_speed = 1, + shift = { 0/32, 50.5/32 }, + hr_version = { + filename = "__space-exploration-graphics-3__/graphics/entity/space-science-lab/hr/space-science-lab-base.png", + width = 467, + height = 290, + line_length = 1, + frame_count = 1, + repeat_count = 64, + animation_speed = 1, + shift = { 0/32, 50.5/32 }, + scale = 0.5, + }, + }, + { + height = 448/2, + width = 402/2, + frame_count = 64, + animation_speed = 1, + shift = { 1/32, -35/32 }, + stripes = + { + { + filename = "__space-exploration-graphics-3__/graphics/entity/space-science-lab/sr/space-science-lab-1.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/space-science-lab/sr/space-science-lab-2.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/space-science-lab/sr/space-science-lab-3.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/space-science-lab/sr/space-science-lab-4.png", + width_in_frames = 4, + height_in_frames = 4, + }, + }, + hr_version = { + height = 448, + width = 402, + frame_count = 64, + animation_speed = 1, + shift = { 1/32, -35/32 }, + stripes = + { + { + filename = "__space-exploration-graphics-3__/graphics/entity/space-science-lab/hr/space-science-lab-1.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/space-science-lab/hr/space-science-lab-2.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/space-science-lab/hr/space-science-lab-3.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__space-exploration-graphics-3__/graphics/entity/space-science-lab/hr/space-science-lab-4.png", + width_in_frames = 4, + height_in_frames = 4, + }, + }, + scale = 0.5, + }, + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/space-science-lab/sr/space-science-lab-shadow.png", + width = 599/2, + height = 345/2, + line_length = 1, + frame_count = 1, + repeat_count = 64, + animation_speed = 1, + shift = { 1.40625, 0.34375 }, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-3__/graphics/entity/space-science-lab/hr/space-science-lab-shadow.png", + width = 599, + height = 345, + line_length = 1, + frame_count = 1, + repeat_count = 64, + animation_speed = 1, + scale = 0.5, + shift = { 1.40625, 0.34375 }, + }, + } + } + }, + vehicle_impact_sound = { + filename = "__base__/sound/car-metal-impact.ogg", + volume = 0.65 + }, + working_sound = { + apparent_volume = 1, + sound = { + filename = "__base__/sound/lab.ogg", + volume = 0.7 + } + } + } +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/space-supercomputer.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/space-supercomputer.lua new file mode 100644 index 0000000..0cbcd61 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/space-supercomputer.lua @@ -0,0 +1,672 @@ +local data_util = require("data_util") +local blank_image = { + filename = "__space-exploration-graphics__/graphics/blank.png", + width = 1, + height = 1, + frame_count = 1, + line_length = 1, + shift = { 0, 0 }, +} +local pipe_pictures = { + north = blank_image, + east = { + filename = "__space-exploration-graphics-5__/graphics/entity/supercomputer/sr/pipe-right.png", + width = 46/2, + height = 68/2, + priority = "extra-high", + shift = util.by_pixel(-28, 2), + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/supercomputer/hr/pipe-right.png", + width = 46, + height = 68, + priority = "extra-high", + shift = util.by_pixel(-28, 2), + scale = 0.5, + }, + }, + south = { + filename = "__space-exploration-graphics-5__/graphics/entity/supercomputer/sr/pipe-bottom.png", + width = 84/2, + height = 58/2, + priority = "extra-high", + shift = util.by_pixel(1, -30), + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/supercomputer/hr/pipe-bottom.png", + width = 84, + height = 58, + priority = "extra-high", + shift = util.by_pixel(1, -30), + scale = 0.5, + }, + }, + west = { + filename = "__space-exploration-graphics-5__/graphics/entity/supercomputer/sr/pipe-left.png", + width = 46/2, + height = 74/2, + priority = "extra-high", + shift = util.by_pixel(28, 3), + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/supercomputer/hr/pipe-left.png", + width = 46, + height = 74, + priority = "extra-high", + shift = util.by_pixel(28, 3), + scale = 0.5, + }, + } +} +data:extend({ + { + type = "assembling-machine", + name = data_util.mod_prefix .. "space-supercomputer-1", + icon = "__space-exploration-graphics__/graphics/icons/supercomputer-1.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = { mining_time = 0.1, result = data_util.mod_prefix .. "space-supercomputer-1"}, + fast_replaceable_group = data_util.mod_prefix .. "space-supercomputer", + next_upgrade = data_util.mod_prefix .. "space-supercomputer-2", + max_health = 500, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, 0), + resistances = + { + }, + fluid_boxes = + { + { + production_type = "input", + pipe_picture = pipe_pictures, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {0, -3} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + pipe_picture = pipe_pictures, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {0, 3} }}, + secondary_draw_orders = { north = -1 } + }, + --off_when_no_fluid_recipe = true + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = + { + sound = { + { + filename = "__base__/sound/lab.ogg", + volume = 0.7 + }, + }, + apparent_volume = 1, + }, + collision_box = {{-2.2, -2.2}, {2.2, 2.2}}, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + }, + selection_box = {{-2.5, -2.5}, {2.5, 2.5}}, + drawing_box = {{-2.5, -4.0}, {2.5, 2.5}}, + animation = + { + layers = + { + { + filename = "__space-exploration-graphics-5__/graphics/entity/supercomputer/sr/supercomputer-1.png", + priority = "high", + width = 320/2, + height = 384/2, + frame_count = 1, + shift = util.by_pixel(-0, -16), + animation_speed = 1, + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/supercomputer/hr/supercomputer-1.png", + priority = "high", + width = 320, + height = 384, + frame_count = 1, + shift = util.by_pixel(-0, -16), + animation_speed = 1, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-5__/graphics/entity/supercomputer/sr/supercomputer-shadow.png", + priority = "high", + width = 264/2, + height = 234/2, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(75, 23), + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-5__/graphics/entity/supercomputer/hr/supercomputer-shadow.png", + priority = "high", + width = 264, + height = 234, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(75, 23), + scale = 0.5, + }, + }, + }, + }, + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.6, size = 16, shift = {0.0, 0.0}, color = {r = 1, g = 0.2, b = 0.1}} + }, + { + animation = { + filename = "__space-exploration-graphics-5__/graphics/entity/supercomputer/sr/supercomputer-1-working.png", + priority = "high", + width = 720/9/2, + height = 258/2, + frame_count = 9, + shift = util.by_pixel(-0, -25), + animation_speed = 0.5, + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/supercomputer/hr/supercomputer-1-working.png", + priority = "high", + width = 720/9, + height = 258, + frame_count = 9, + shift = util.by_pixel(-0, -25), + animation_speed = 0.5, + scale = 0.5, + } + }, + } + }, + crafting_categories = {"space-supercomputing-1"}, + crafting_speed = 1, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + energy_usage = "1000kW", + ingredient_count = 12, + module_specification = + { + module_slots = 2 + }, + allowed_effects = {"consumption", "speed", "pollution"} -- not "productivity", + }, + + { + type = "assembling-machine", + name = data_util.mod_prefix .. "space-supercomputer-2", + icon = "__space-exploration-graphics__/graphics/icons/supercomputer-2.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = {hardness = 0.2, mining_time = 0.5, result = data_util.mod_prefix .. "space-supercomputer-2"}, + fast_replaceable_group = data_util.mod_prefix .. "space-supercomputer", + next_upgrade = data_util.mod_prefix .. "space-supercomputer-3", + max_health = 500, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, 0), + resistances = + { + }, + fluid_boxes = + { + { + production_type = "input", + pipe_picture = pipe_pictures, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {0, -3} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + pipe_picture = pipe_pictures, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {0, 3} }}, + secondary_draw_orders = { north = -1 } + }, + --off_when_no_fluid_recipe = true + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = + { + sound = { + { + filename = "__base__/sound/lab.ogg", + volume = 0.7 + }, + }, + apparent_volume = 1, + }, + collision_box = {{-2.2, -2.2}, {2.2, 2.2}}, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + }, + selection_box = {{-2.5, -2.5}, {2.5, 2.5}}, + drawing_box = {{-2.5, -4.0}, {2.5, 2.5}}, + animation = + { + layers = + { + { + filename = "__space-exploration-graphics-5__/graphics/entity/supercomputer/sr/supercomputer-2.png", + priority = "high", + width = 320/2, + height = 384/2, + frame_count = 1, + shift = util.by_pixel(-0, -16), + animation_speed = 1, + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/supercomputer/hr/supercomputer-2.png", + priority = "high", + width = 320, + height = 384, + frame_count = 1, + shift = util.by_pixel(-0, -16), + animation_speed = 1, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-5__/graphics/entity/supercomputer/sr/supercomputer-shadow.png", + priority = "high", + width = 264/2, + height = 234/2, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(75, 23), + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-5__/graphics/entity/supercomputer/hr/supercomputer-shadow.png", + priority = "high", + width = 264, + height = 234, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(75, 23), + scale = 0.5, + }, + }, + }, + }, + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.6, size = 16, shift = {0.0, 0.0}, color = {r = 1, g = 1, b = 0.1}} + }, + { + animation = { + filename = "__space-exploration-graphics-5__/graphics/entity/supercomputer/sr/supercomputer-2-working.png", + priority = "high", + width = 720/9/2, + height = 258/2, + frame_count = 9, + shift = util.by_pixel(-0, -25), + animation_speed = 0.5, + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/supercomputer/hr/supercomputer-2-working.png", + priority = "high", + width = 720/9, + height = 258, + frame_count = 9, + shift = util.by_pixel(-0, -25), + animation_speed = 0.5, + scale = 0.5, + } + }, + } + }, + crafting_categories = {"space-supercomputing-1", "space-supercomputing-2"}, + crafting_speed = 2, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + energy_usage = "2500kW", + ingredient_count = 12, + module_specification = + { + module_slots = 4 + }, + allowed_effects = {"consumption", "speed", "pollution"} -- not "productivity", + }, + { + type = "assembling-machine", + name = data_util.mod_prefix .. "space-supercomputer-3", + icon = "__space-exploration-graphics__/graphics/icons/supercomputer-3.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = {hardness = 0.2, mining_time = 0.5, result = data_util.mod_prefix .. "space-supercomputer-3"}, + fast_replaceable_group = data_util.mod_prefix .. "space-supercomputer", + next_upgrade = data_util.mod_prefix .. "space-supercomputer-4", + max_health = 500, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, 0), + resistances = + { + }, + fluid_boxes = + { + { + production_type = "input", + pipe_picture = pipe_pictures, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {0, -3} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + pipe_picture = pipe_pictures, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {0, 3} }}, + secondary_draw_orders = { north = -1 } + }, + --off_when_no_fluid_recipe = true + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = + { + sound = { + { + filename = "__base__/sound/lab.ogg", + volume = 0.7 + }, + }, + apparent_volume = 1, + }, + collision_box = {{-2.2, -2.2}, {2.2, 2.2}}, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + }, + selection_box = {{-2.5, -2.5}, {2.5, 2.5}}, + drawing_box = {{-2.5, -4.0}, {2.5, 2.5}}, + animation = + { + layers = + { + { + filename = "__space-exploration-graphics-5__/graphics/entity/supercomputer/sr/supercomputer-3.png", + priority = "high", + width = 320/2, + height = 384/2, + frame_count = 1, + shift = util.by_pixel(-0, -16), + animation_speed = 1, + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/supercomputer/hr/supercomputer-3.png", + priority = "high", + width = 320, + height = 384, + frame_count = 1, + shift = util.by_pixel(-0, -16), + animation_speed = 1, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-5__/graphics/entity/supercomputer/sr/supercomputer-shadow.png", + priority = "high", + width = 264/2, + height = 234/2, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(75, 23), + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-5__/graphics/entity/supercomputer/hr/supercomputer-shadow.png", + priority = "high", + width = 264, + height = 234, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(75, 23), + scale = 0.5, + }, + }, + }, + }, + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.6, size = 16, shift = {0.0, 0.0}, color = {r = 0.1, g = 1, b = 1}} + }, + { + animation = { + filename = "__space-exploration-graphics-5__/graphics/entity/supercomputer/sr/supercomputer-3-working.png", + priority = "high", + width = 720/9/2, + height = 258/2, + frame_count = 9, + shift = util.by_pixel(-0, -25), + animation_speed = 0.5, + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/supercomputer/hr/supercomputer-3-working.png", + priority = "high", + width = 720/9, + height = 258, + frame_count = 9, + shift = util.by_pixel(-0, -25), + animation_speed = 0.5, + scale = 0.5, + } + }, + } + }, + crafting_categories = {"space-supercomputing-1", "space-supercomputing-2", "space-supercomputing-3"}, + crafting_speed = 4, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + energy_usage = "5000kW", + ingredient_count = 12, + module_specification = + { + module_slots = 6 + }, + allowed_effects = {"consumption", "speed", "pollution"} -- not "productivity", + }, + + { + type = "assembling-machine", + name = data_util.mod_prefix .. "space-supercomputer-4", + icon = "__space-exploration-graphics__/graphics/icons/supercomputer-4.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = {hardness = 0.2, mining_time = 0.5, result = data_util.mod_prefix .. "space-supercomputer-4"}, + fast_replaceable_group = data_util.mod_prefix .. "space-supercomputer", + max_health = 500, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, 0), + resistances = + { + }, + fluid_boxes = + { + { + production_type = "input", + pipe_picture = pipe_pictures, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {0, -3} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + pipe_picture = pipe_pictures, + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {0, 3} }}, + secondary_draw_orders = { north = -1 } + }, + --off_when_no_fluid_recipe = true + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = + { + sound = { + { + filename = "__base__/sound/lab.ogg", + volume = 0.7 + }, + }, + apparent_volume = 1, + }, + collision_box = {{-2.2, -2.2}, {2.2, 2.2}}, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + }, + selection_box = {{-2.5, -2.5}, {2.5, 2.5}}, + drawing_box = {{-2.5, -4.0}, {2.5, 2.5}}, + animation = + { + layers = + { + { + filename = "__space-exploration-graphics-5__/graphics/entity/supercomputer/sr/supercomputer-4.png", + priority = "high", + width = 320/2, + height = 384/2, + frame_count = 1, + shift = util.by_pixel(-0, -16), + animation_speed = 1, + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/supercomputer/hr/supercomputer-4.png", + priority = "high", + width = 320, + height = 384, + frame_count = 1, + shift = util.by_pixel(-0, -16), + animation_speed = 1, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-5__/graphics/entity/supercomputer/sr/supercomputer-shadow.png", + priority = "high", + width = 264/2, + height = 234/2, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(75, 23), + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-5__/graphics/entity/supercomputer/hr/supercomputer-shadow.png", + priority = "high", + width = 264, + height = 234, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(75, 23), + scale = 0.5, + }, + }, + }, + }, + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.8, size = 16, shift = {0.0, 0.0}, color = {r = 0.3, g = 0.1, b = 1}} + }, + { + animation = { + filename = "__space-exploration-graphics-5__/graphics/entity/supercomputer/sr/supercomputer-4-working.png", + priority = "high", + width = 504/4/2, + height = 1064/4/2, + line_length = 4, + frame_count = 16, + shift = util.by_pixel(-0, -22), + animation_speed = 0.05, + blend_mode = "additive", + draw_as_glow = true, + max_advance = 1, + hr_version = { + filename = "__space-exploration-graphics-5__/graphics/entity/supercomputer/hr/supercomputer-4-working.png", + priority = "high", + width = 504/4, + height = 1064/4, + line_length = 4, + frame_count = 16, + shift = util.by_pixel(-0, -22), + animation_speed = 0.05, + blend_mode = "additive", + draw_as_glow = true, + max_advance = 1, + scale = 0.5, + } + }, + }, + }, + crafting_categories = {"space-supercomputing-1", "space-supercomputing-2", "space-supercomputing-3", "space-supercomputing-4"}, + crafting_speed = 6, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + energy_usage = "10000kW", + ingredient_count = 12, + module_specification = + { + module_slots = 8 + }, + allowed_effects = {"consumption", "speed", "pollution"} -- not "productivity", + } +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/spaceship-obstacles.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/spaceship-obstacles.lua new file mode 100644 index 0000000..6ced73e --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/spaceship-obstacles.lua @@ -0,0 +1,464 @@ +local data_util = require("data_util") + +local health_multiplier = 300 + +-- projectile: invisible. Deals damage if it hits stuff, maybe destroys floor too. +-- graphic: The visible graphic, may also be mined. +-- targetable: invisible. exists so that turrets will shoot it, should only exist when moving. +local blank = { + filename = "__space-exploration-graphics__/graphics/blank.png", + priority = "high", + frame_count = 1, + height = 1, + width = 1, + direction_count = 1 +} +local blank_d18 = { + filename = "__space-exploration-graphics__/graphics/blank.png", + priority = "high", + frame_count = 1, + height = 1, + width = 1, + direction_count = 18 +} +local meteors = { + ["meteor-01"] = {209, 138}, + ["meteor-02"] = {165,129}, + ["meteor-03"] = {151,139}, + ["meteor-04"] = {216,110}, + ["meteor-05"] = {154,147}, + ["meteor-06"] = {154,132}, + ["meteor-07"] = {193,120}, + ["meteor-08"] = {136,117}, + ["meteor-09"] = {157,115}, + ["meteor-10"] = {198,153}, + ["meteor-11"] = {190,115}, + ["meteor-12"] = {229,126}, + ["meteor-13"] = {151,125}, + ["meteor-14"] = {137,117}, + ["meteor-15"] = {201,141}, + ["meteor-16"] = {209,154}, +} +local function collision_mask() + return { + "not-colliding-with-itself", + collision_mask_util_extended.get_make_named_collision_mask("vehicle-layer"), + "player-layer", + "floor-layer", + collision_mask_util_extended.get_make_named_collision_mask("flying-layer"), + collision_mask_util_extended.get_make_named_collision_mask("projectile-layer"), + } +end +local resistances = { + -- no laser + { type = "explosion", percent = 10 }, + { type = "physical", percent = 20}, + { type = "electric", percent = 50 }, + { type = "fire", percent = 90 }, + { type = "poison", percent = 100 }, + --{ type = "meteor", percent = 100 }, +} + +local sizes = { + ["small"] = { + size = 1, + radius = 0.125, + graphic_scale = 0.15, + minimap_graphic_scale = 0.25, + max_health = 20*health_multiplier, + weight = 100, + damage = 200, + tint = {0.6,0.6,0.6}, + minable = { + mining_particle = "stone-particle", + mining_time = 0.2, + results = { + {name = "stone", amount_min = 1, amount_max = 3}, + {name = "iron-ore", amount_min = 1, amount_max = 3}, + {name = "copper-ore", amount_min = 1, amount_max = 3}, + }, + }, + target_effects = { + { + damage = { + amount = 200, + type = "meteor" + }, + type = "damage" + }, + { type = "create-entity", entity_name = "explosion-hit" }, + }, + }, + ["medium"] = { + size = 2, + radius = 0.25, + graphic_scale = 0.3, + minimap_graphic_scale = 0.375, + max_health = 200*health_multiplier, + weight = 1000, + tint = {0.8,0.8,0.8}, + minable = { + mining_particle = "stone-particle", + mining_time = 0.5, + results = { + {name = "stone", amount_min = 0, amount_max = 15}, + {name = "iron-ore", amount_min = 0, amount_max = 15}, + {name = "copper-ore", amount_min = 0, amount_max = 15}, + }, + }, + target_effects = { + { type = "nested-result", action = { type = "area", radius = 0.5, + action_delivery = { type = "instant", target_effects = { { type = "damage", damage = { amount = 400, type = "meteor" }}}}, + }}, + { type = "nested-result", action = { type = "area", radius = 1, + action_delivery = { type = "instant", target_effects = { { type = "damage", damage = { amount = 40, type = "meteor" }}}}, + }}, + { type = "create-entity", entity_name = "big-explosion-hit" }, + } + }, + ["large"] = { + size = 3, + radius = 1, + graphic_scale = 0.7, + minimap_graphic_scale = 0.5, + max_health = 2000*health_multiplier, + weight = 10000, + tint = {1,1,1}, + minable = { + mining_particle = "stone-particle", + mining_time = 1, + results = { + {name = "stone", amount_min = 0, amount_max = 5000}, + {name = "iron-ore", amount_min = 0, amount_max = 5000}, + {name = "copper-ore", amount_min = 0, amount_max = 5000}, + {name = "uranium-ore", amount_min = 0, amount_max = 500}, + }, + }, + target_effects = { + { type = "nested-result", action = { type = "area", radius = 0.5, + action_delivery = { type = "instant", target_effects = { { type = "damage", damage = { amount = 4000, type = "meteor" }}}}, + }}, + { type = "nested-result", action = { type = "area", radius = 1, + action_delivery = { type = "instant", target_effects = { { type = "damage", damage = { amount = 400, type = "meteor" }}}}, + }}, + { type = "create-entity", entity_name = "big-explosion-hit" }, + } + }, +} + +for size_name, size in pairs(sizes) do + local i = 0 + for meteor_name, meteor in pairs(meteors) do + -- make the graphics variations + i = i + 1 + data:extend({ + -- sprites get attached to the vehicles using the target of a LuaRendering.draw_sprite call + { + type = "sprite", + name = data_util.mod_prefix .. "spaceship-obstacle-"..size_name.."-sprite-"..i, + filename = "__space-exploration-graphics__/graphics/entity/meteor/hr-"..meteor_name..".png", + priority = "low", + width = math.floor(meteor[1]), + height = math.floor(meteor[2]), + shift = {0,0}, + apply_runtime_tint = true, + tint = size.tint, + scale = size.graphic_scale, + }, + -- entities are used for making them mineable when the ship is stopped + { + type = "simple-entity", + name = data_util.mod_prefix .. "spaceship-obstacle-"..size_name.."-static-"..i, + selectable_in_game = true, + selection_priority = 2, + count_as_rock_for_filtered_deconstruction = true, + collision_box = { { -size.radius, -size.radius }, { size.radius, size.radius } }, + collision_mask = collision_mask(), + selection_box = { { -(size.radius+1), -(size.radius+1) }, { (size.radius+1), (size.radius+1) } }, + minable = table.deepcopy(size.minable), + flags = {"placeable-neutral", "placeable-off-grid", "not-on-map"}, + icon = "__base__/graphics/icons/small-scorchmark.png", + icon_size = 64, + max_health = size.max_health, + order = "s-e-w-f", + render_layer = "object", + picture = { + filename = "__space-exploration-graphics__/graphics/entity/meteor/hr-"..meteor_name..".png", + width = math.floor(meteor[1]), + height = math.floor(meteor[2]), + priority = "low", + shift = { 0, 0 }, + scale = size.graphic_scale, + tint = size.tint, + }, + dying_explosion = "explosion-hit", + localised_name = {"entity-name."..size_name.."-asteroid"}, + resistances = resistances, + } + }) + end + -- make the asteroid vehicle, the debris vehicle, the character, and the damage explosion + local vehicle = { -- This will have the entity name, asteroid or debris + type = "car", + name = data_util.mod_prefix .. "spaceship-obstacle-"..size_name.."-vehicle", + collision_mask = collision_mask(), + collision_box = { { -size.radius, -size.radius }, { size.radius, size.radius } }, + selection_box = { { -(size.radius+1), -(size.radius+1) }, { size.radius+1, size.radius+1 } }, + selectable_in_game = false, + has_belt_immunity = true, + animation = { + layers = { + { + animation_speed = 1, + direction_count = 1, + filename = "__space-exploration-graphics__/graphics/blank.png", + frame_count = 1, + height = 1, + width = 1 + }, + } + }, + braking_power = "200kW", + energy_source = {type = "void"}, + consumption = "150kW", + effectivity = 1, + energy_per_hit_point = 1, + flags = { "placeable-neutral", "player-creation", "placeable-off-grid" }, + friction = 0.0000000000000001, + icon = "__base__/graphics/icons/small-scorchmark.png", + icon_size = 64, + inventory_size = 0, + max_health = size.max_health, + render_layer = "object", + rotation_speed = 0.01, + order = "zz", + weight = size.weight, + resistances = resistances, + immune_to_rock_impacts = true, + immune_to_tree_impacts = true, + localised_name = {"entity-name."..size_name.."-asteroid"}, + crash_trigger = { + type = "create-entity", + entity_name = data_util.mod_prefix .. "spaceship-obstacle-explosion-"..size_name, + trigger_created_entity = true + }, + minimap_representation = { + filename = "__space-exploration-graphics__/graphics/entity/meteor/meteor-minimap-representation.png", + flags = {"icon"}, + size = {20, 20}, + scale = size.minimap_graphic_scale + }, + selected_minimap_representation = { + filename = "__space-exploration-graphics__/graphics/entity/meteor/meteor-minimap-representation.png", + flags = {"icon"}, + size = {20, 20}, + scale = size.minimap_graphic_scale + }, + trigger_target_mask = {"common"} + } + local debris_vehicle = table.deepcopy(vehicle) + debris_vehicle.name = data_util.mod_prefix .. "spaceship-obstacle-debris-"..size_name.."-vehicle" + debris_vehicle.localised_name = {"entity-name.spaceship-debris-"..size_name} + data:extend({ + vehicle, + debris_vehicle, + { -- applies to both the asteroid and the same sized debris + type = "explosion", + name = data_util.mod_prefix .. "spaceship-obstacle-explosion-"..size_name, + animations = blank, + created_effect = { + type = "direct", + action_delivery = { + type = "instant", + target_effects = size.target_effects, + }, + }, + flags = {"placeable-off-grid"}, + }, + }) +end + +local enemy_proxy = table.deepcopy(data.raw.character.character) +enemy_proxy.name = data_util.mod_prefix .. "spaceship-enemy-proxy" +enemy_proxy.crafting_categories = {"dummy"} +enemy_proxy.character_corpse = nil +enemy_proxy.max_health = 1 +enemy_proxy.light = nil +enemy_proxy.animations = {{ + idle = blank_d18, + idle_with_gun = blank_d18, + running = blank_d18, + running_with_gun = blank_d18, + mining_with_tool = blank_d18, +}} +enemy_proxy.collision_mask = {} +table.insert(enemy_proxy.flags, "hidden") +data:extend({ + enemy_proxy, + { -- This will have the entity name, asteroid or debris + type = "car", + name = data_util.mod_prefix.."spaceship-travel-anchor", + collision_mask = {}, + collision_box = {{0,0},{0,0}}, + has_belt_immunity = true, + animation = { + layers = { + { + animation_speed = 1, + direction_count = 1, + filename = "__space-exploration-graphics__/graphics/blank.png", + frame_count = 1, + height = 1, + width = 1 + }, + } + }, + braking_power = "200kW", + energy_source = {type = "void"}, + consumption = "150kW", + effectivity = 1, + energy_per_hit_point = 1, + flags = { "placeable-neutral", "player-creation", "placeable-off-grid" }, + friction = 0.0000000000000001, + icon = "__space-exploration-graphics__/graphics/blank.png", + icon_size = 64, + inventory_size = 0, + max_health = 1000000, + render_layer = "object", + rotation_speed = 0.01, + order = "zz", + weight = 1000, + resistances = resistances, + immune_to_rock_impacts = true, + immune_to_tree_impacts = true, + localised_name = {"entity-name.spaceship-spec"}, + selectable_in_game = false, + minimap_representation = blank, + selected_minimap_representation = blank, + trigger_target_mask = {"common"} + }, + -- SPECK + { -- just a visual for motion + type = "simple-entity", + name = data_util.mod_prefix.."spaceship-speck-graphic", + direction_only = true, + flags = { "not-on-map", "placeable-off-grid" }, + acceleration = 0, + collision_mask = {"not-colliding-with-itself"}, + collision_box = { { -0.0, -0.0 }, { 0.0, 0.0 } }, + pictures = { + filename = "__space-exploration-graphics__/graphics/entity/spaceship-particle/speck.png", + frame_count = 1, + height = 50, + priority = "high", + width = 3 + }, + localised_name = {"entity-name.small-asteroid"}, + }, + { + type = "sprite", + name = data_util.mod_prefix .. "spaceship-speck-graphic", + filename = "__space-exploration-graphics__/graphics/entity/spaceship-particle/speck.png", + priority = "extra-high", + width = 3, + height = 50, + shift = {0,0}, + apply_runtime_tint = true, + }, +}) + +-- moveable entities +data:extend({ + { + type = "simple-entity-with-force", + name = data_util.mod_prefix .. "spaceship-obstacle-entity-small-targetable", + selectable_in_game = false, + collision_box = { { -0, -0 }, { 0, 0 } }, + collision_mask = {"not-colliding-with-itself"}, + selection_box = { { -0.2, -0.2 }, { 0.2, 0.2 } }, + flags = {"placeable-neutral", "placeable-off-grid", "not-on-map"}, + icon = "__base__/graphics/icons/small-scorchmark.png", + icon_size = 64, + max_health = 20*health_multiplier, + order = "s-e-w-f", + render_layer = "object", + picture = blank, + dying_explosion = "explosion-hit", + localised_name = {"entity-name.small-asteroid"}, + resistances = resistances, + }, + { + type = "projectile", + name = data_util.mod_prefix.."spaceship-obstacle-entity-small-projectile", + direction_only = true, + flags = { "not-on-map", "placeable-off-grid" }, + acceleration = 0, + collision_box = { { -0.05, -0.25 }, { 0.05, 0.25 } }, + force_condition = "not-friend", + action = { + action_delivery = { + target_effects = { + { + damage = { + amount = 200, + type = "meteor" + }, + type = "damage" + }, + { type = "create-entity", entity_name = "explosion-hit" }, + }, + type = "instant" + }, + type = "direct" + }, + animation = blank, + localised_name = {"entity-name.small-asteroid"}, + }, + { + type = "simple-entity-with-force", + name = data_util.mod_prefix .. "spaceship-obstacle-entity-large-targetable", + selectable_in_game = false, + collision_box = { { -0, -0 }, { 0, 0 } }, + collision_mask = {"not-colliding-with-itself"}, + selection_box = { { -1, -1 }, { 1, 1 } }, + flags = { "placeable-neutral", "player-creation", "placeable-off-grid"}, + icon = "__base__/graphics/icons/small-scorchmark.png", + icon_size = 64, + max_health = 2000*health_multiplier, + order = "s-e-w-f", + render_layer = "object", + pictures = blank, + dying_explosion = "big-explosion-hit", + localised_name = {"entity-name.small-asteroid"}, + resistances = resistances, + }, + { + type = "projectile", + name = data_util.mod_prefix.."spaceship-obstacle-entity-large-projectile", + direction_only = true, + flags = { "not-on-map", "placeable-off-grid" }, + acceleration = 0, + collision_box = { { -0.5, -0.5 }, { 0.5, 0.5 } }, + force_condition = "not-friend", + action = { + action_delivery = { + target_effects = { + { type = "nested-result", action = { type = "area", radius = 0.5, + action_delivery = { type = "instant", target_effects = { { type = "damage", damage = { amount = 4000, type = "meteor" }}}}, + }}, + { type = "nested-result", action = { type = "area", radius = 1.5, + action_delivery = { type = "instant", target_effects = { { type = "damage", damage = { amount = 150, type = "meteor" }}}}, + }}, + { type = "nested-result", action = { type = "area", radius = 2.5, + action_delivery = { type = "instant", target_effects = { { type = "damage", damage = { amount = 150, type = "meteor" }}}}, + }}, + { type = "create-entity", entity_name = "big-explosion-hit" }, + }, + type = "instant" + }, + type = "direct" + }, + animation = blank, + localised_name = {"entity-name.small-asteroid"}, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/spaceship.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/spaceship.lua new file mode 100644 index 0000000..4e29c0b --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/spaceship.lua @@ -0,0 +1,1445 @@ +local data_util = require("data_util") + +local blank_image = { + filename = "__space-exploration-graphics__/graphics/blank.png", + width = 1, + height = 1, + frame_count = 1, + line_length = 1, + shift = { 0, 0 }, +} +local blank_directions = { + north = blank_image, + east = blank_image, + south = blank_image, + west = blank_image +} +local wall = table.deepcopy(data.raw.wall["stone-wall"]) + +wall.name = data_util.mod_prefix .. "spaceship-wall" +wall.minable.result = data_util.mod_prefix .. "spaceship-wall" +wall.max_health = 400 +wall.resistances = { + {type = "meteor", percent = 50}, + {type = "impact", percent = 50}, + {type = "physical", percent = 50}, + {type = "laser", percent = 50}, + {type = "fire", percent = 50}, + {type = "electric", percent = 50}, + {type = "explosion", percent = 50}, + {type = "acid", percent = 50}, + {type = "poison", percent = 100}, +} +if mods["aai-industry"] then + data_util.replace_filenames_recursive(wall.pictures, "__aai-industry__", "__space-exploration-graphics__") + data_util.replace_filenames_recursive(wall.pictures, "stone-wall", "spaceship-wall") +else + data_util.replace_filenames_recursive(wall.pictures, "__base__", "__space-exploration-graphics__") + data_util.replace_filenames_recursive(wall.pictures, "entity/wall", "entity/spaceship-wall") +end +wall.collision_mask = { + "ground-tile", + "water-tile", + "object-layer", + "player-layer", + "train-layer", + "item-layer", +} +wall.fast_replaceable_group = nil +wall.next_upgrade = nil +wall.icon = "__space-exploration-graphics__/graphics/icons/spaceship-wall.png" +wall.icon_size = 64 +wall.icon_mipmaps = 1 + +local gate = table.deepcopy(data.raw.gate["gate"]) +gate.name = data_util.mod_prefix .. "spaceship-gate" +gate.minable.result = data_util.mod_prefix .. "spaceship-gate" +for _, pictures in pairs({gate.horizontal_animation, gate.horizontal_rail_animation_left, gate.horizontal_rail_animation_right, gate.horizontal_rail_base, + gate.vertical_animation, gate.vertical_rail_animation_left, gate.vertical_rail_animation_right, gate.vertical_rail_base }) do + data_util.replace_filenames_recursive(pictures, "__base__/graphics/entity/gate/", "__space-exploration-graphics__/graphics/entity/spaceship-gate/") +end +gate.collision_mask = { + "ground-tile", + "water-tile", + "object-layer", + "item-layer", + "player-layer", + "train-layer", +} +gate.opened_collision_mask = { -- thanks Bilka + "ground-tile", + "water-tile", + "object-layer", + "item-layer", +} +gate.fast_replaceable_group = nil +gate.next_upgrade = nil +gate.icon = "__space-exploration-graphics__/graphics/icons/spaceship-gate.png" +gate.icon_size = 64 +gate.icon_mipmaps = 1 + + +local booster = { + type = "storage-tank", + name = "storage-tank", + icon = "__base__/graphics/icons/storage-tank.png", + icon_size = 64, + icon_mipmaps = 1, + flags = {"placeable-player", "player-creation"}, + minable = {mining_time = 0.5, result = "storage-tank"}, + max_health = 500, + corpse = "medium-remnants", + collision_box = {{-1.3, -1.3}, {1.3, 1.3}}, + selection_box = {{-1.5, -1.5}, {1.5, 1.5}}, + fluid_box = + { + base_area = 250, + pipe_covers = pipecoverspictures(), + pipe_connections = + { + { position = {-1, -2} }, + { position = {2, 1} }, + { position = {1, 2} }, + { position = {-2, -1} } + } + }, + two_direction_only = true, + window_bounding_box = {{-0.125, 0.6875}, {0.1875, 1.1875}}, + pictures = + { + picture = + { + sheets = + { + { + filename = "__base__/graphics/entity/storage-tank/storage-tank.png", + priority = "extra-high", + frames = 2, + width = 110, + height = 108, + shift = util.by_pixel(0, 4), + hr_version = + { + filename = "__base__/graphics/entity/storage-tank/hr-storage-tank.png", + priority = "extra-high", + frames = 2, + width = 219, + height = 215, + shift = util.by_pixel(-0.25, 3.75), + scale = 0.5 + } + }, + { + filename = "__base__/graphics/entity/storage-tank/storage-tank-shadow.png", + priority = "extra-high", + frames = 2, + width = 146, + height = 77, + shift = util.by_pixel(30, 22.5), + draw_as_shadow = true, + hr_version = + { + filename = "__base__/graphics/entity/storage-tank/hr-storage-tank-shadow.png", + priority = "extra-high", + frames = 2, + width = 291, + height = 153, + shift = util.by_pixel(29.75, 22.25), + scale = 0.5, + draw_as_shadow = true + } + } + } + }, + fluid_background = + { + filename = "__base__/graphics/entity/storage-tank/fluid-background.png", + priority = "extra-high", + width = 32, + height = 15 + }, + window_background = + { + filename = "__base__/graphics/entity/storage-tank/window-background.png", + priority = "extra-high", + width = 17, + height = 24, + hr_version = + { + filename = "__base__/graphics/entity/storage-tank/hr-window-background.png", + priority = "extra-high", + width = 34, + height = 48, + scale = 0.5 + } + }, + flow_sprite = + { + filename = "__base__/graphics/entity/pipe/fluid-flow-low-temperature.png", + priority = "extra-high", + width = 160, + height = 20 + }, + gas_flow = + { + filename = "__base__/graphics/entity/pipe/steam.png", + priority = "extra-high", + line_length = 10, + width = 24, + height = 15, + frame_count = 60, + axially_symmetrical = false, + direction_count = 1, + animation_speed = 0.25, + hr_version = + { + filename = "__base__/graphics/entity/pipe/hr-steam.png", + priority = "extra-high", + line_length = 10, + width = 48, + height = 30, + frame_count = 60, + axially_symmetrical = false, + animation_speed = 0.25, + direction_count = 1, + scale = 0.5 + } + } + }, + flow_length_in_ticks = 360, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = + { + sound = + { + filename = "__base__/sound/storage-tank.ogg", + volume = 0.8 + }, + match_volume_to_activity = true, + apparent_volume = 1.5, + max_sounds_per_type = 3 + }, + circuit_wire_connection_points = circuit_connector_definitions["storage-tank"].points, + circuit_connector_sprites = circuit_connector_definitions["storage-tank"].sprites, + circuit_wire_max_distance = default_circuit_wire_max_distance +} +booster.name = data_util.mod_prefix .. "spaceship-rocket-booster-tank" +booster.minable.result = data_util.mod_prefix .. "spaceship-rocket-booster-tank" +booster.collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", +} +booster.rotatable = false +booster.collision_box = { {-1.3, -1.1}, {1.3, 1.3} } +booster.fluid_box = { + filter = data_util.mod_prefix .. "liquid-rocket-fuel", + base_area = 1000, + pipe_connections = { + { position = { 0, -2 } }, + { position = { 2, 0 } }, + { position = { -2, 0 } }, + { position = { 0, 2 } }, + }, + pipe_covers = pipecoverspictures(), + secondary_draw_orders = { north = -1 } +} +booster.icon = "__space-exploration-graphics__/graphics/icons/spaceship-rocket-booster-tank.png" +booster.drawing_box = { {-1.5, -2.5}, {1.5, 1.5} } +booster.window_bounding_box = { + util.by_pixel(40/2, -32/2), + util.by_pixel(72/2, 64/2) +} +booster.pictures = { + flow_sprite = { + filename = "__base__/graphics/entity/pipe/fluid-flow-low-temperature.png", + height = 20, + priority = "extra-high", + width = 160, + --shift = util.by_pixel(56/2, 16/2), + }, + fluid_background = { + filename = "__base__/graphics/entity/storage-tank/fluid-background.png", + height = 15, + priority = "extra-high", + width = 32, + shift = util.by_pixel(-5, 0) + --shift = util.by_pixel(56/2, 16/2), + }, + gas_flow = { + animation_speed = 0.25, + axially_symmetrical = false, + direction_count = 1, + filename = "__base__/graphics/entity/pipe/steam.png", + frame_count = 60, + height = 15, + line_length = 10, + priority = "extra-high", + width = 24, + shift = util.by_pixel(-14, 2), + hr_version = { + animation_speed = 0.25, + axially_symmetrical = false, + direction_count = 1, + filename = "__base__/graphics/entity/pipe/hr-steam.png", + frame_count = 60, + height = 30, + line_length = 10, + priority = "extra-high", + width = 48, + shift = util.by_pixel(-14, 2), + }, + }, + picture = { + sheets = { + { + filename = "__space-exploration-graphics__/graphics/entity/spaceship-rocket-booster-tank/spaceship-rocket-booster-tank.png", + frames = 1, + height = 256/2, + width = 192/2, + priority = "extra-high", + shift = util.by_pixel(0, -16), + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/spaceship-rocket-booster-tank/hr-spaceship-rocket-booster-tank.png", + frames = 1, + height = 256, + width = 192, + priority = "extra-high", + shift = util.by_pixel(0, -16), + scale = 0.5, + }, + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/spaceship-rocket-booster-tank/spaceship-rocket-booster-tank-shadow.png", + frames = 1, + width = 262/2, + height = 134/2, + priority = "extra-high", + shift = util.by_pixel(18, 14), + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/spaceship-rocket-booster-tank/hr-spaceship-rocket-booster-tank-shadow.png", + frames = 1, + width = 262, + height = 134, + priority = "extra-high", + shift = util.by_pixel(18, 14), + scale = 0.5, + }, + } + } + }, + window_background = { + filename = "__space-exploration-graphics__/graphics/entity/spaceship-rocket-booster-tank/spaceship-rocket-booster-tank-background.png", + priority = "extra-high", + width = 32/2, + height = 96/2, + --shift = util.by_pixel(56/2, 16/2), + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/spaceship-rocket-booster-tank/hr-spaceship-rocket-booster-tank-background.png", + priority = "extra-high", + width = 32, + height = 96, + --shift = util.by_pixel(56/2, 16/2), + scale = 0.5, + }, + } +} +local antimatter_booster = table.deepcopy(booster) +antimatter_booster.name = data_util.mod_prefix.."spaceship-antimatter-booster-tank" +antimatter_booster.minable.result = data_util.mod_prefix .. "spaceship-antimatter-booster-tank" +data_util.replace_filenames_recursive(antimatter_booster.pictures, "rocket", "antimatter") +antimatter_booster.fluid_box = { + filter = data_util.mod_prefix .. "antimatter-stream", + base_area = 500, + pipe_connections = { + { position = { 0, -2 } }, + { position = { 2, 0 } }, + { position = { -2, 0 } }, + { position = { 0, 2 } }, + }, + pipe_covers = pipecoverspictures(), + secondary_draw_orders = { north = -1 } +} +local console_layers = { + layers = + { + { + filename = "__space-exploration-graphics__/graphics/entity/spaceship-console/spaceship-console-base.png", + priority = "high", + width = 256, + height = 256, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, -16+3), + animation_speed = 1, + scale = 0.5, + }, + { + filename = "__space-exploration-graphics__/graphics/entity/spaceship-console/spaceship-console-mask.png", + priority = "high", + width = 256, + height = 256, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, -16+3), + animation_speed = 1, + scale = 0.5, + tint = data_util.console_tint, + blend_mode = "additive", + draw_as_glow = true, + }, + { + filename = "__space-exploration-graphics__/graphics/entity/spaceship-console/spaceship-console-white.png", + priority = "high", + width = 256, + height = 256, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, -16+3), + animation_speed = 1, + scale = 0.5, + blend_mode = "additive", + draw_as_glow = true, + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/spaceship-console/spaceship-console-shadow.png", + priority = "high", + width = 110, + height = 74, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(75, 16+3), + animation_speed = 1, + scale = 0.5, + }, + }, +} +local console_alt_layers = table.deepcopy(console_layers) +console_alt_layers.layers[2].tint = data_util.console_alt_tint + +local function connection_sprites(offset) + return { + blue_led_light_offset = offset, + led_blue = { + filename = "__base__/graphics/entity/circuit-connector/hr-ccm-universal-04e-blue-LED-on-sequence.png", + height = 60, + priority = "low", + shift = offset, + width = 60, + x = 60, + y = 0 + }, + led_blue_off = { + filename = "__base__/graphics/entity/circuit-connector/hr-ccm-universal-04f-blue-LED-off-sequence.png", + height = 44, + priority = "low", + shift = offset, + width = 46, + x = 46, + y = 0 + }, + led_green = { + filename = "__base__/graphics/entity/circuit-connector/hr-ccm-universal-04h-green-LED-sequence.png", + height = 46, + priority = "low", + shift = offset, + width = 48, + x = 48, + y = 0 + }, + led_light = { + intensity = 0.8, + size = 0.9 + }, + led_red = { + filename = "__base__/graphics/entity/circuit-connector/hr-ccm-universal-04i-red-LED-sequence.png", + height = 46, + priority = "low", + shift = offset, + width = 48, + x = 48, + y = 0 + }, + red_green_led_light_offset = offset, + } +end + +local console_connection_point_left = { + wire = { green = {-92/64, -108/64}, red = {-102/64, -102/64}, }, + shadow = { green = {-92/64 + 1, 0.5}, red = {-102/64 + 1, 0.5}, }, +} +local console_connection_point_right = { + wire = { red = {92/64, -108/64}, green = {102/64, -102/64}, }, + shadow = { red = {92/64 + 1, 0.5}, green = {102/64 + 1, 0.5}, }, +} +local output_connection_point = { + wire = { red = {92/64-1.5, -108/64+1}, green = {102/64-1.5, -102/64+1}, }, + shadow = { red = {92/64-1.5 + 1, 0.5+1}, green = {102/64-1.5 + 1, 0.5+1}, }, +} + +data:extend({ + wall, + gate, + booster, + antimatter_booster, + { + type = "storage-tank", + name = data_util.mod_prefix .. "spaceship-ion-booster-tank", + icon = "__space-exploration-graphics__/graphics/icons/spaceship-ion-booster-tank.png", + icon_size = 64, + icon_mipmaps = 1, + flags = {"placeable-player", "player-creation"}, + minable = {mining_time = 0.5, result = data_util.mod_prefix .. "spaceship-ion-booster-tank"}, + max_health = 400, + corpse = "medium-remnants", + collision_box = {{-0.8, -0.8}, {0.8, 0.8}}, + selection_box = {{-1, -1}, {1, 1}}, + fluid_box = + { + filter = data_util.mod_prefix .. "ion-stream", + base_area = 100, + pipe_covers = pipecoverspictures(), + pipe_connections = + { + { position = {-0.5, -1.5} }, + { position = {1.5, 0.5} }, + { position = {0.5, 1.5} }, + { position = {-1.5, -0.5} } + } + }, + two_direction_only = true, + window_bounding_box = { + util.by_pixel(18/2, -16/2), + util.by_pixel((18+32)/2, (-16+66)/2) + }, + pictures = + { + flow_sprite = { + filename = "__base__/graphics/entity/pipe/fluid-flow-low-temperature.png", + height = 20, + priority = "extra-high", + width = 160, + --shift = util.by_pixel(56/2, 16/2), + }, + fluid_background = { + filename = "__base__/graphics/entity/storage-tank/fluid-background.png", + height = 15, + priority = "extra-high", + width = 32, + shift = util.by_pixel(-5, 0) + --shift = util.by_pixel(56/2, 16/2), + }, + gas_flow = { + animation_speed = 0.25, + axially_symmetrical = false, + direction_count = 1, + filename = "__base__/graphics/entity/pipe/steam.png", + frame_count = 60, + height = 15, + line_length = 10, + priority = "extra-high", + width = 24, + shift = util.by_pixel(-14, 2), + hr_version = { + animation_speed = 0.25, + axially_symmetrical = false, + direction_count = 1, + filename = "__base__/graphics/entity/pipe/hr-steam.png", + frame_count = 60, + height = 30, + line_length = 10, + priority = "extra-high", + width = 48, + shift = util.by_pixel(-14, 2), + }, + }, + picture = { + sheets = { + { + filename = "__space-exploration-graphics__/graphics/entity/spaceship-ion-booster-tank/spaceship-ion-booster-tank.png", + frames = 2, + height = 164/2, + width = 256/4, + priority = "extra-high", + shift = util.by_pixel(0, -8), + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/spaceship-ion-booster-tank/hr-spaceship-ion-booster-tank.png", + frames = 2, + height = 164, + width = 256/2, + priority = "extra-high", + shift = util.by_pixel(0, -8), + scale = 0.5, + }, + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/spaceship-ion-booster-tank/spaceship-ion-booster-tank-shadow.png", + frames = 1, + repeat_count = 2, + width = 184/2, + height = 94/2, + priority = "extra-high", + shift = util.by_pixel(16, 12), + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/spaceship-ion-booster-tank/hr-spaceship-ion-booster-tank-shadow.png", + frames = 1, + repeat_count = 2, + width = 184, + height = 94, + priority = "extra-high", + shift = util.by_pixel(16, 12), + scale = 0.5, + }, + } + } + }, + window_background = { + filename = "__space-exploration-graphics__/graphics/entity/spaceship-ion-booster-tank/spaceship-ion-booster-tank-background.png", + priority = "extra-high", + width = 32/2, + height = 66/2, + --shift = util.by_pixel(56/2, 16/2), + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/spaceship-ion-booster-tank/hr-spaceship-ion-booster-tank-background.png", + priority = "extra-high", + width = 32, + height = 66, + --shift = util.by_pixel(56/2, 16/2), + scale = 0.5, + }, + } + }, + flow_length_in_ticks = 360, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = + { + sound = + { + filename = "__base__/sound/storage-tank.ogg", + volume = 0.8 + }, + match_volume_to_activity = true, + apparent_volume = 1.5, + max_sounds_per_type = 3 + }, + circuit_wire_connection_points = circuit_connector_definitions["storage-tank"].points, + circuit_connector_sprites = circuit_connector_definitions["storage-tank"].sprites, + circuit_wire_max_distance = default_circuit_wire_max_distance + }, + { + type = "accumulator", + name = data_util.mod_prefix .. "spaceship-console", + icons = { + {icon = "__space-exploration-graphics__/graphics/icons/spaceship-console-base.png", icon_size = 64}, + {icon = "__space-exploration-graphics__/graphics/icons/spaceship-console-mask.png", icon_size = 64, tint = data_util.console_tint}, + {icon = "__space-exploration-graphics__/graphics/icons/spaceship-console-white.png", icon_size = 64}, + }, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = { mining_time = 1, result = data_util.mod_prefix .. "spaceship-console"}, + max_health = 500, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{-1.6, -1.6}, {1.6, 1.6}}, + selection_box = {{-2, -2}, {2, 2}}, + drawing_box = {{-2, -2}, {2, 2}}, + resistances = + { + { type = "poison", percent = 100 }, + { type = "fire", percent = 80 }, + { type = "explosion", percent = 50 } + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + match_speed_to_activity = true, + max_sounds_per_type = 2, + sound = { + filename = "__base__/sound/combinator.ogg", + volume = 0.5 + } + }, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + }, + charge_animation = console_layers, + picture = console_layers, + charge_cooldown = 30, + discharge_cooldown = 30, + crafting_categories = {"spaceship-console"}, + crafting_speed = 1, + energy_source = + { + type = "electric", + usage_priority = "primary-input", + input_flow_limit = "1001KW", + buffer_capacity = "1J", + }, + energy_usage = "1000kW", + ingredient_count = 0, + module_specification = + { + module_slots = 0 + }, + allowed_effects = {}, + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.5, size = 8, shift = {0.0, 0.0}, color = data_util.console_tint} + }, + }, + circuit_wire_max_distance = 10, + circuit_wire_connection_point = console_connection_point_left, + }, + { + type = "constant-combinator", + name = data_util.mod_prefix .. "spaceship-console-output", + fast_replaceable_group = data_util.mod_prefix .. "spaceship-console-output", + placeable_by = { item = data_util.mod_prefix .. "struct-generic-output", count = 1}, + icons = { + {icon = "__space-exploration-graphics__/graphics/icons/spaceship-console-base.png", icon_size = 64}, + {icon = "__space-exploration-graphics__/graphics/icons/spaceship-console-mask.png", icon_size = 64, tint = data_util.console_tint}, + {icon = "__space-exploration-graphics__/graphics/icons/spaceship-console-white.png", icon_size = 64}, + }, + flags = {"placeable-player", "player-creation", "placeable-off-grid", "not-rotatable", "not-deconstructable"}, + order = "y", + max_health = 500, + corpse = "small-remnants", + collision_box = {{-0.5, -1}, {0.5, 1}}, + collision_mask = {"floor-layer"}, + selection_box = {{-0.5, -1}, {0.5, 1}}, + scale_info_icons = false, + selectable_in_game = true, + selection_priority = 150, + item_slot_count = 10, -- speed, current_surface, target_surface, distance + sprites = + { + north = blank_image, + east = blank_image, + south = blank_image, + west = blank_image + }, + activity_led_sprites = + { + north = blank_image, + east = blank_image, + south = blank_image, + west = blank_image + }, + activity_led_light = + { + intensity = 0.8, + size = 1, + }, + activity_led_light_offsets = + { + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0} + }, + circuit_wire_connection_points = + { + output_connection_point, output_connection_point, output_connection_point, output_connection_point, + }, + circuit_wire_max_distance = 10 + }, + { + type = "accumulator", + name = data_util.mod_prefix .. "spaceship-console-alt", + icons = { + {icon = "__space-exploration-graphics__/graphics/icons/spaceship-console-base.png", icon_size = 64}, + {icon = "__space-exploration-graphics__/graphics/icons/spaceship-console-mask.png", icon_size = 64, tint = data_util.console_alt_tint}, + {icon = "__space-exploration-graphics__/graphics/icons/spaceship-console-white.png", icon_size = 64}, + }, + flags = {"placeable-neutral","placeable-player", "player-creation", "not-deconstructable"}, + --minable = { mining_time = 1, result = data_util.mod_prefix .. "spaceship-console-alt"}, + max_health = 5000, + healing_per_tick = 1, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{-1.6, -1.6}, {1.6, 1.6}}, + selection_box = {{-2, -2}, {2, 2}}, + drawing_box = {{-2, -2}, {2, 2}}, + resistances = + { + { type = "poison", percent = 100 }, + { type = "fire", percent = 80 }, + { type = "explosion", percent = 50 } + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + match_speed_to_activity = true, + max_sounds_per_type = 2, + sound = { + filename = "__base__/sound/combinator.ogg", + volume = 0.5 + } + }, + collision_mask = { + --"item-layer", -- stops player from dropping items on belts. + "floor-layer", + --"object-layer", + "water-tile", + "player-layer", + }, + charge_animation = console_alt_layers, + picture = console_alt_layers, + charge_cooldown = 30, + discharge_cooldown = 30, + crafting_categories = {"spaceship-console"}, + crafting_speed = 1, + energy_source = + { + type = "electric", + usage_priority = "primary-input", + input_flow_limit = "1001KW", + buffer_capacity = "1J", + }, + energy_usage = "1000kW", + ingredient_count = 0, + module_specification = + { + module_slots = 0 + }, + allowed_effects = {}, + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.5, size = 8, shift = {0.0, 0.0}, color = data_util.console_alt_tint} + }, + }, + circuit_wire_max_distance = 10, + circuit_wire_connection_point = console_connection_point_left, + }, + { + type = "furnace", + name = data_util.mod_prefix .. "spaceship-rocket-engine", + icon = "__space-exploration-graphics__/graphics/icons/spaceship-rocket-engine.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation", "not-rotatable"}, + minable = {mining_time = 0.2, result = data_util.mod_prefix .. "spaceship-rocket-engine"}, + max_health = 500, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{-1.45, -1.95}, {1.45, 1.95}}, + selection_box = {{-1.45, -1.95}, {1.45, 1.95}}, + drawing_box = {{-1.5, -3}, {1.5, 4}}, + resistances = + { + { type = "poison", percent = 100 }, + { type = "fire", percent = 80 }, + { type = "explosion", percent = 50 } + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + apparent_volume = 1.5, + idle_sound = { + filename = "__base__/sound/idle1.ogg", + volume = 0.6 + }, + sound = { + { + filename = "__base__/sound/fight/flamethrower-mid.ogg", + volume = 0.9 + }, + } + }, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + }, + always_draw_idle_animation = true, + source_inventory_size = 0, + result_inventory_size = 0, + animation = { + layers = { + { + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/spaceship-rocket-engine/sr/rocket-engine-shadow.png", + priority = "high", + width = 302/2, + height = 236/2, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(40, 24 + 16), + animation_speed = 1, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/spaceship-rocket-engine/hr/rocket-engine-shadow.png", + priority = "high", + width = 302, + height = 236, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(40, 24 + 16), + animation_speed = 1, + scale = 0.5, + } + }, + }, + }, + idle_animation = { + layers = { + { + filename = "__space-exploration-graphics__/graphics/entity/spaceship-rocket-engine/sr/rocket-engine-inactive.png", + priority = "high", + width = 256/2, + height = 416/2, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, 24 + 16), + animation_speed = 1, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/spaceship-rocket-engine/hr/rocket-engine-inactive.png", + priority = "high", + width = 256, + height = 416, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, 24 + 16), + animation_speed = 1, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/spaceship-rocket-engine/sr/rocket-engine-shadow.png", + priority = "high", + width = 302/2, + height = 236/2, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(40, 24 + 16), + animation_speed = 1, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/spaceship-rocket-engine/hr/rocket-engine-shadow.png", + priority = "high", + width = 302, + height = 236, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(40, 24 + 16), + animation_speed = 1, + scale = 0.5, + } + }, + }, + }, + fluid_boxes = + { + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + filter = data_util.mod_prefix.."liquid-rocket-fuel", + pipe_covers = pipecoverspictures(), + base_area = 0.1, + base_level = -1, + pipe_connections = { + { type="input", position = {-1, -2.5} }, + { type="input", position = { 1, -2.5} } + }, + secondary_draw_orders = { north = -1 } + }, + }, + crafting_categories = {"spaceship-rocket-engine"}, + crafting_speed = 1, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + energy_usage = "100kW", + ingredient_count = 0, + module_specification = + { + module_slots = 0 + }, + allowed_effects = {}, + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 1.2, size = 8, shift = {0.0, 3}, color = {r = 1, g = 0.7, b = 0.1}} + }, + { + animation = { + filename = "__space-exploration-graphics__/graphics/entity/spaceship-rocket-engine/sr/rocket-engine-active.png", + priority = "high", + width = 256/2, + height = 416/2, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, 24 + 16), + animation_speed = 1, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/spaceship-rocket-engine/hr/rocket-engine-active.png", + priority = "high", + width = 256, + height = 416, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, 24 + 16), + animation_speed = 1, + scale = 0.5, + } + }, + }, + }, + circuit_wire_max_distance = 10, + }, + { + type = "furnace", + name = data_util.mod_prefix .. "spaceship-ion-engine", + icon = "__space-exploration-graphics__/graphics/icons/spaceship-ion-engine.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation", "not-rotatable"}, + minable = {mining_time = 0.2, result = data_util.mod_prefix .. "spaceship-ion-engine"}, + max_health = 500, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{-1.95, -2.45}, {1.95, 2.45}}, + selection_box = {{-1.95, -2.45}, {1.95, 2.45}}, + drawing_box = {{-2, -4}, {2, 5}}, + resistances = + { + { type = "poison", percent = 100 }, + { type = "fire", percent = 80 }, + { type = "explosion", percent = 50 } + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + apparent_volume = 1.5, + idle_sound = { + filename = "__base__/sound/idle1.ogg", + volume = 0.6 + }, + sound = { + { + filename = "__base__/sound/electric-furnace.ogg", + volume = 0.8 + }, + } + }, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + }, + always_draw_idle_animation = true, + source_inventory_size = 0, + result_inventory_size = 0, + animation = { + layers = { + --[[{ + filename = "__space-exploration-graphics__/graphics/entity/pipe/pipe-straight-vertical.png", + priority = "extra-high", + height = 64, + width = 64, + shift = {-1.5, -1}, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/hr-pipe-straight-vertical.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + } + }, + { + filename = "__space-exploration-graphics__/graphics/entity/pipe/pipe-straight-vertical.png", + priority = "extra-high", + height = 64, + width = 64, + shift = {1.5, -1}, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/pipe/hr-pipe-straight-vertical.png", + height = 128, + priority = "extra-high", + scale = 0.5, + width = 128 + } + },]] + { + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/spaceship-ion-engine/sr/ion-engine-shadow.png", + priority = "high", + width = 368/2, + height = 474/2, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(40, 24 + 16+24), + animation_speed = 1, + scale = 4/5, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/spaceship-ion-engine/hr/ion-engine-shadow.png", + priority = "high", + width = 368, + height = 474, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(40, 24 + 16+24), + animation_speed = 1, + scale = 0.5*4/5, + } + }, + }, + }, + idle_animation = { + layers = { + { + filename = "__space-exploration-graphics__/graphics/entity/spaceship-ion-engine/sr/ion-engine-inactive.png", + priority = "high", + width = 384/2, + height = 904/2, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, 76+24), + animation_speed = 1, + scale = 4/5, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/spaceship-ion-engine/hr/ion-engine-inactive.png", + priority = "high", + width = 384, + height = 904, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, 76+24), + animation_speed = 1, + scale = 0.5*4/5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/spaceship-ion-engine/sr/ion-engine-shadow.png", + priority = "high", + width = 368/2, + height = 474/2, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(40, 24 + 16+24), + animation_speed = 1, + scale = 4/5, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/spaceship-ion-engine/hr/ion-engine-shadow.png", + priority = "high", + width = 368, + height = 474, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(40, 24 + 16+24), + animation_speed = 1, + scale = 0.5*4/5, + } + }, + }, + }, + fluid_boxes = + { + { + production_type = "input", + filter = data_util.mod_prefix.."ion-stream", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 0.1, + base_level = -1, + pipe_connections = { + { type="input", position = {-0.5, -3} }, + { type="input", position = { 0.5, -3} } + }, + secondary_draw_orders = { north = -1 } + }, + }, + crafting_categories = {"spaceship-ion-engine"}, + crafting_speed = 1, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + energy_usage = "10MW", + ingredient_count = 0, + module_specification = + { + module_slots = 0 + }, + allowed_effects = {}, + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 1.3, size = 12, shift = {0.0, 3}, color = {r = 0, g = 0.1, b = 1}} + }, + { + animation = { + filename = "__space-exploration-graphics__/graphics/entity/spaceship-ion-engine/sr/ion-engine-active.png", + priority = "high", + width = 384/2, + height = 904/2, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, 76+24), + animation_speed = 1, + scale = 4/5, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/spaceship-ion-engine/hr/ion-engine-active.png", + priority = "high", + width = 384, + height = 904, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, 76+24), + animation_speed = 1, + scale = 0.5*4/5, + } + }, + }, + }, + circuit_wire_max_distance = 10, + }, + { + type = "furnace", + name = data_util.mod_prefix .. "spaceship-antimatter-engine", + icon = "__space-exploration-graphics__/graphics/icons/spaceship-antimatter-engine.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation", "not-rotatable"}, + minable = {mining_time = 0.2, result = data_util.mod_prefix .. "spaceship-antimatter-engine"}, + max_health = 500, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{-2.45, -2.95}, {2.45, 2.95}}, + selection_box = {{-2.45, -2.95}, {2.45, 2.95}}, + drawing_box = {{-2.5, -4}, {2.5, 6}}, + resistances = + { + { type = "poison", percent = 100 }, + { type = "fire", percent = 80 }, + { type = "explosion", percent = 50 } + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + apparent_volume = 1.5, + idle_sound = { + filename = "__base__/sound/idle1.ogg", + volume = 0.6 + }, + sound = { + { + filename = "__base__/sound/fight/flamethrower-mid.ogg", + volume = 0.9 + }, + } + }, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + }, + always_draw_idle_animation = true, + source_inventory_size = 0, + result_inventory_size = 0, + animation = { + layers = { + { + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/spaceship-antimatter-engine/sr/antimatter-engine-shadow.png", + priority = "high", + width = 368/2, + height = 474/2, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(40, 24 + 16), + animation_speed = 1, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/spaceship-antimatter-engine/hr/antimatter-engine-shadow.png", + priority = "high", + width = 368, + height = 474, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(40, 24 + 16), + animation_speed = 1, + scale = 0.5, + } + }, + }, + }, + idle_animation = { + layers = { + { + filename = "__space-exploration-graphics__/graphics/entity/spaceship-antimatter-engine/sr/antimatter-engine-inactive.png", + priority = "high", + width = 384/2, + height = 704/2, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, 76), + animation_speed = 1, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/spaceship-antimatter-engine/hr/antimatter-engine-inactive.png", + priority = "high", + width = 384, + height = 704, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, 76), + animation_speed = 1, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/spaceship-antimatter-engine/sr/antimatter-engine-shadow.png", + priority = "high", + width = 368/2, + height = 474/2, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(40, 24 + 16), + animation_speed = 1, + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics__/graphics/entity/spaceship-antimatter-engine/hr/antimatter-engine-shadow.png", + priority = "high", + width = 368, + height = 474, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(40, 24 + 16), + animation_speed = 1, + scale = 0.5, + } + }, + }, + }, + fluid_boxes = + { + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + filter = data_util.mod_prefix.."antimatter-stream", + pipe_covers = pipecoverspictures(), + base_area = 0.1, + base_level = -1, + pipe_connections = { + { type="input", position = {-1, -3.5} }, + { type="input", position = { 1, -3.5} } + }, + secondary_draw_orders = { north = -1 } + }, + }, + crafting_categories = {"spaceship-antimatter-engine"}, + crafting_speed = 1, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + energy_usage = "1000kW", + ingredient_count = 0, + module_specification = + { + module_slots = 0 + }, + allowed_effects = {}, + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 1.3, size = 12, shift = {0.0, 3}, color = {r = 1, g = 0.1, b = 1}} + }, + { + animation = { + filename = "__space-exploration-graphics__/graphics/entity/spaceship-antimatter-engine/sr/antimatter-engine-active.png", + priority = "high", + width = 384/2, + height = 704/2, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, 76), + animation_speed = 1, + hr_version = { + filename = "__space-exploration-graphics__/graphics/entity/spaceship-antimatter-engine/hr/antimatter-engine-active.png", + priority = "high", + width = 384, + height = 704, + frame_count = 1, + line_length = 1, + shift = util.by_pixel(0, 76), + animation_speed = 1, + scale = 0.5, + } + }, + }, + }, + circuit_wire_max_distance = 10, + }, + { + type = "smoke-with-trigger", + name = data_util.mod_prefix .. "spaceship-engine-smoke", + flags = {"placeable-off-grid"}, + action_cooldown = 1, + action = { + type = "direct", + probability = 0.2, + action_delivery = { + type = "instant", + source_effects = { + type = "create-trivial-smoke", + smoke_name = "turbine-smoke", + speed_multiplier = 1, + speed_multiplier_deviation = 0.5, + speed = {0, 0.02}, + speed_from_center = 0.02, + speed_from_center_deviation = 0.02, + starting_frame_deviation = 5, + offsets = {{0.25, 0}}, -- smoke is left-bias + } + } + }, + animation = blank_image, + affected_by_wind = false, + show_when_smoke_off = true, + cyclic = true, + duration = 4294967295 + } +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/starmap.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/starmap.lua new file mode 100644 index 0000000..01c8bae --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/starmap.lua @@ -0,0 +1,301 @@ +local data_util = require("data_util") + +local blank = { + direction_count = 8, + frame_count = 1, + filename = "__space-exploration-graphics__/graphics/blank.png", + width = 1, + height = 1, + priority = "low" +} + +local function make_openable_entity(name, locale, icon, width, height) + height = height or width + data:extend({ + { + type = "lamp", + name = name, + icon = icon, + icon_mipmaps = 0, + icon_size = 64, + circuit_wire_max_distance = 0, + collision_box = {{-width/2,-height/2},{width/2,height/2}}, + selection_box = {{-width/2,-height/2},{width/2,height/2}}, + corpse = "lamp-remnants", + darkness_for_all_lamps_off = 1, + darkness_for_all_lamps_on = 1, + energy_source = { + type = "void", + usage_priority = "lamp" + }, + energy_usage_per_tick = "1W", + flags = { + "placeable-neutral", + "not-blueprintable", + "not-deconstructable", + "placeable-off-grid" + }, + glow_color_intensity = 0.135, + glow_size = width, + light = { intensity = 0.9, size = 40 }, + max_health = 100, + picture_off = blank, + picture_on = blank, + localised_name = locale + } + }) +end + +data:extend({ + { + type = "sprite", + name = data_util.mod_prefix .. "map-star", + filename = "__space-exploration-graphics__/graphics/entity/starmap/star.png", + priority = "extra-high", + width = 512, + height = 512, + shift = {0,0} + }, + { + type = "animation", + name = data_util.mod_prefix .. "map-star-cloud", + animation_speed = 0.5, + filename = "__base__/graphics/entity/cloud/cloud-45-frames.png", + flags = { + "compressed" + }, + frame_count = 45, + line_length = 7, + priority = "low", + scale = 3, + width = 256, + height = 256, + apply_runtime_tint = true, + blend_mode = "additive", --"additive-soft" + }, + { + type = "sprite", + name = data_util.mod_prefix .. "map-planet", + filename = "__space-exploration-graphics__/graphics/entity/starmap/planet-base.png", + priority = "extra-high", + width = 512, + height = 512, + shift = {0,0}, + apply_runtime_tint = true, + }, + { + type = "sprite", + name = data_util.mod_prefix .. "map-planet-detail", + filename = "__space-exploration-graphics__/graphics/entity/starmap/planet-detail.png", + priority = "extra-high", + width = 512, + height = 512, + shift = {0,0}, + apply_runtime_tint = true, + }, + { + type = "sprite", + name = data_util.mod_prefix .. "map-planet-water", + filename = "__space-exploration-graphics__/graphics/entity/starmap/planet-water.png", + priority = "extra-high", + width = 512, + height = 512, + shift = {0,0}, + apply_runtime_tint = true, + }, + { + type = "sprite", + name = data_util.mod_prefix .. "map-planet-cloud-ice", + filename = "__space-exploration-graphics__/graphics/entity/starmap/planet-cloud-ice.png", + priority = "extra-high", + width = 512, + height = 512, + shift = {0,0}, + apply_runtime_tint = true, + }, + { + type = "sprite", + name = data_util.mod_prefix .. "map-planet-haze", + filename = "__space-exploration-graphics__/graphics/entity/starmap/planet-haze.png", + priority = "extra-high", + width = 512, + height = 512, + shift = {0,0}, + apply_runtime_tint = true, + }, + { + type = "sprite", + name = data_util.mod_prefix .. "map-planet-atmosphere", + filename = "__space-exploration-graphics__/graphics/entity/starmap/planet-atmosphere.png", + priority = "extra-high", + width = 512, + height = 512, + shift = {0,0}, + apply_runtime_tint = true, + }, + { + type = "sprite", + name = data_util.mod_prefix .. "map-asteroid-belt", + filename = "__space-exploration-graphics__/graphics/entity/starmap/asteroid-belt.png", + priority = "extra-high", + width = 512, + height = 512, + shift = {0, 0} + }, + { + type = "sprite", + name = data_util.mod_prefix .. "map-asteroid-belt-detail", + filename = "__space-exploration-graphics__/graphics/entity/starmap/asteroid-belt-detail.png", + priority = "extra-high", + width = 512, + height = 512, + shift = {0, 0}, + apply_runtime_tint = true, + }, + { + type = "sprite", + name = data_util.mod_prefix .. "map-asteroid-belt-scatter", + filename = "__space-exploration-graphics__/graphics/entity/starmap/asteroid-belt-scatter.png", + priority = "high", + width = 511, + height = 128, + shift = {0, 0} + }, + { + type = "sprite", + name = data_util.mod_prefix .. "map-asteroid-belt-scatter-detail", + filename = "__space-exploration-graphics__/graphics/entity/starmap/asteroid-belt-scatter-detail.png", + priority = "high", + width = 511, + height = 128, + shift = {0, 0}, + apply_runtime_tint = true, + }, + { + type = "sprite", + name = data_util.mod_prefix .. "map-asteroid-field", + filename = "__space-exploration-graphics__/graphics/entity/starmap/asteroid-field.png", + priority = "extra-high", + width = 512, + height = 512, + shift = {0, 0} + }, + { + type = "sprite", + name = data_util.mod_prefix .. "map-asteroid-field-scatter", + filename = "__space-exploration-graphics__/graphics/entity/starmap/asteroid-field-scatter.png", + priority = "high", + width = 512, + height = 512, + shift = {0, 0} + }, + { + type = "sprite", + name = data_util.mod_prefix .. "map-asteroid-field-scatter-detail", + filename = "__space-exploration-graphics__/graphics/entity/starmap/asteroid-field-scatter-detail.png", + priority = "high", + width = 512, + height = 512, + shift = {0, 0}, + apply_runtime_tint = true, + }, + { + type = "sprite", + name = data_util.mod_prefix .. "map-spaceship", + filename = "__space-exploration-graphics__/graphics/entity/starmap/spaceship.png", + priority = "extra-high", + width = 87, + height = 256, + shift = {0,0}, + apply_runtime_tint = true, + }, + { + type = "sprite", + name = data_util.mod_prefix .. "gradient-sprite", + filename = "__space-exploration-graphics__/graphics/gradient-white.png", + priority = "high", + width = 4, + height = 512, + frame_count = 1, + line_length = 1, + apply_runtime_tint = true, + --blend_mode = "additive", + }, + { + type = "sprite", + name = data_util.mod_prefix .. "map-starmap", + filename = "__space-exploration-graphics__/graphics/entity/starmap/starmap.png", + priority = "extra-high", + width = 512, + height = 512, + shift = {0,0}, + apply_runtime_tint = true, + }, + { + type = "sprite", + name = data_util.mod_prefix .. "map-gui-starmap", + filename = "__space-exploration-graphics__/graphics/icons/starmap-transparent.png", + priority = "extra-high", + width = 64, + height = 64, + shift = {0,0}, + apply_runtime_tint = true, + }, + { + type = "sprite", + name = data_util.mod_prefix .. "map-gui-starmap-small", + filename = "__space-exploration-graphics__/graphics/icons/starmap-transparent.png", + priority = "extra-high", + width = 64, + height = 64, + scale = 0.5, + shift = {0,0}, + apply_runtime_tint = true, + }, + { + type = "sprite", + name = data_util.mod_prefix .. "map-gui-universe-explorer", + filename = "__space-exploration-graphics__/graphics/icons/universe-explorer.png", + priority = "extra-high", + width = 64, + height = 64, + shift = {0,0}, + apply_runtime_tint = true, + }, + { + type = "sprite", + name = data_util.mod_prefix .. "map-gui-right-arrow", + filename = "__space-exploration-graphics__/graphics/icons/astronomic/right-arrow.png", + priority = "extra-high", + width = 16, + height = 32, + shift = {0,0}, + apply_runtime_tint = true, + }, + { + type = "sprite", + name = data_util.mod_prefix .. "map-gui-system", + filename = "__space-exploration-graphics__/graphics/technology/discovery.png", + priority = "extra-high", + width = 128, + height = 128, + shift = {0,0}, + apply_runtime_tint = true, + }, +}) + +make_openable_entity(data_util.mod_prefix .. "interstellar-map-star", {"space-exploration.star"}, "__space-exploration-graphics__/graphics/icons/astronomic/star.png", 2) -- used for stars on starmap +make_openable_entity(data_util.mod_prefix .. "interstellar-map-asteroid-field", {"space-exploration.asteroid-field"}, "__space-exploration-graphics__/graphics/icons/astronomic/asteroid-field.png", 5) +make_openable_entity(data_util.mod_prefix .. "interstellar-map-spaceship", {"space-exploration.spaceship"}, "__space-exploration-graphics__/graphics/icons/spaceship.png", 0.75) + +make_openable_entity(data_util.mod_prefix .. "system-map-star", {"space-exploration.star"}, "__space-exploration-graphics__/graphics/icons/astronomic/star.png", 22) -- used for star on solarmap +for i = 1, 20 do + make_openable_entity(data_util.mod_prefix .. "system-map-planet-"..i, {"space-exploration.planet"}, "__space-exploration-graphics__/graphics/icons/astronomic/planet.png", 4 * ((i+1)/11)) -- different sizes of planet based on radius + make_openable_entity(data_util.mod_prefix .. "system-map-moon-"..i, {"space-exploration.moon"}, "__space-exploration-graphics__/graphics/icons/astronomic/moon.png", 4 * ((i+1)/11)) -- different sizes of moon based on radius +end +make_openable_entity(data_util.mod_prefix .. "system-map-asteroid-belt", {"space-exploration.asteroid-belt"}, "__space-exploration-graphics__/graphics/icons/astronomic/asteroid-belt.png", 3) +make_openable_entity(data_util.mod_prefix .. "system-map-spaceship", {"space-exploration.spaceship"}, "__space-exploration-graphics__/graphics/icons/spaceship.png", 0.75) +make_openable_entity(data_util.mod_prefix .. "system-map-interstellar-space", {"space-exploration.interstellar-map"}, "__space-exploration-graphics__/graphics/icons/astronomic/star.png", 8, 8) + +data.raw.lamp[data_util.mod_prefix .. "interstellar-map-spaceship"].selection_priority = 100 +data.raw.lamp[data_util.mod_prefix .. "system-map-spaceship"].selection_priority = 100 diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/supercharger.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/supercharger.lua new file mode 100644 index 0000000..7d34720 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/supercharger.lua @@ -0,0 +1,170 @@ +local data_util = require("data_util") + +local blank_image = { + filename = "__space-exploration-graphics__/graphics/blank.png", + width = 1, + height = 1, + frame_count = 1, + line_length = 1, + shift = { 0, 0 }, +} +local charging_offsets = {} +local radius = 2 +for i = 1, 64 do + local a = i/64 + table.insert(charging_offsets, {math.sin(a * 2 * math.pi) * 0.75 * radius, -2 + math.cos(a * 2 * math.pi) * radius}) +end + +data:extend({ + { + type = "roboport", + name = data_util.mod_prefix .. "supercharger", + logistics_radius = 32, + logistics_connection_distance = 32, + material_slots_count = 0, + robot_slots_count = 0, + construction_radius = 32, + minable = { + mining_time = 0.1, + result = data_util.mod_prefix .. "supercharger" + }, + icon = "__space-exploration-graphics__/graphics/icons/supercharger.png", + icon_mipmaps = 1, + icon_size = 64, + base = { + layers = { + data_util.auto_sr_hr({ + direction_count = 1, + filename = "__space-exploration-graphics-3__/graphics/entity/supercharger/hr/supercharger.png", + width = 256, + height = 320, + frame_count = 1, + shift = { 0, -0.5 }, + scale = 0.5, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + direction_count = 1, + filename = "__space-exploration-graphics-3__/graphics/entity/supercharger/hr/supercharger-shadow.png", + width = 298, + height = 165, + frame_count = 1, + shift = { 0.3, 0.8 }, + scale = 0.5, + }), + } + }, + base_animation = blank_image, + base_patch = blank_image, + charge_approach_distance = 5, + charging_energy = settings.startup["se-supercharger-individual-charge-rate"].value.."MW", + charging_offsets = charging_offsets, + circuit_connector_sprites = nil, + circuit_wire_connection_point = nil, + circuit_wire_max_distance = 0, + collision_box = { { -1.65, -1.65 }, { 1.65, 1.65 } }, + drawing_box = { { -1.65, -1.65 - 1.5 }, {1.65, 1.65 + 0.5 } }, + corpse = "roboport-remnants", + damaged_trigger_effect = { + entity_name = "spark-explosion", + offset_deviation = {{-0.5,-0.5},{0.5,0.5}}, + offsets = {{0,1}}, + type = "create-entity" + }, + door_animation_down = blank_image, + door_animation_up = blank_image, + draw_construction_radius_visualization = true, + draw_logistic_radius_visualization = true, + dying_explosion = "roboport-explosion", + energy_source = { + buffer_capacity = "1000MJ", + input_flow_limit = "1GW", + type = "electric", + usage_priority = "secondary-input" + }, + energy_usage = "100kW", + flags = { + "placeable-player", + "player-creation" + }, + max_health = 500, + recharge_minimum = "40MJ", + recharging_animation = { + animation_speed = 0.5, + filename = "__base__/graphics/entity/roboport/roboport-recharging.png", + frame_count = 16, + height = 35, + priority = "high", + scale = 1.5, + width = 37 + }, + recharging_light = { + color = { + b = 1, + g = 1, + r = 1 + }, + intensity = 0.4, + size = 5 + }, + request_to_open_door_timeout = 15, + resistances = { + { type = "fire", percent = 100 }, + { type = "electric", percent = 100 } + }, + selection_box = {{-2,-2},{2,2}}, + spawn_and_station_height = -0.1, + stationing_offset = {0,0}, + vehicle_impact_sound = { + { + filename = "__base__/sound/car-metal-impact.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-2.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-3.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-4.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-5.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-6.ogg", + volume = 0.5 + } + }, + water_reflection = { + orientation_to_variation = false, + pictures = { + filename = "__base__/graphics/entity/roboport/roboport-reflection.png", + height = 28, + priority = "extra-high", + scale = 5, + shift = { + 0, + 2.34375 + }, + variation_count = 1, + width = 28 + }, + rotate = false + }, + working_sound = { + audible_distance_modifier = 0.5, + max_sounds_per_type = 3, + probability = 0.0033333333, + sound = { + filename = "__base__/sound/roboport-working.ogg", + volume = 0.6 + } + } + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/telescopes.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/telescopes.lua new file mode 100644 index 0000000..2162483 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/telescopes.lua @@ -0,0 +1,714 @@ +local data_util = require("data_util") + +data:extend({ + { + type = "assembling-machine", + name = data_util.mod_prefix .. "space-telescope", + icon = "__space-exploration-graphics__/graphics/icons/telescope.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = {mining_time = 0.1, result = data_util.mod_prefix .. "space-telescope"}, + max_health = 500, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{-1.3, -1.3}, {1.3, 1.3}}, + selection_box = {{-1.5, -1.5}, {1.5, 1.5}}, + drawing_box = {{-1.5, -1.9}, {1.5, 1.5}}, + resistances = + { + { + type = "impact", + percent = 10 + } + }, + fluid_boxes = + { + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {0, -2} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {0, 2} }}, + secondary_draw_orders = { north = -1 } + }, + --off_when_no_fluid_recipe = true + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + apparent_volume = 1.5, + idle_sound = { + filename = "__base__/sound/idle1.ogg", + volume = 0.6 + }, + sound = { + { + filename = "__base__/sound/assembling-machine-t1-1.ogg", + volume = 0.8 + }, + { + filename = "__base__/sound/assembling-machine-t1-2.ogg", + volume = 0.8 + } + } + }, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + spaceship_collision_layer, + }, + animation = + { + layers = + { + { + filename = "__space-exploration-graphics-4__/graphics/entity/telescope/sr/telescope.png", + priority = "high", + width = 2080/8/2, + height = 2128/8/2, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(6, -19), + animation_speed = 0.1, + hr_version = { + filename = "__space-exploration-graphics-4__/graphics/entity/telescope/hr/telescope.png", + priority = "high", + width = 2080/8, + height = 2128/8, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(6, -19), + animation_speed = 0.1, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-4__/graphics/entity/telescope/sr/telescope-shadow.png", + priority = "high", + width = 2608/8/2, + height = 1552/8/2, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(32, 7), + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-4__/graphics/entity/telescope/hr/telescope-shadow.png", + priority = "high", + width = 2608/8, + height = 1552/8, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(32, 7), + scale = 0.5, + } + }, + }, + }, + crafting_categories = {"space-observation-visible", "space-observation-uv", "space-observation-infrared"}, + crafting_speed = 2, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + energy_usage = "1000kW", + ingredient_count = 12, + module_specification = + { + module_slots = 4 + }, + allowed_effects = {"consumption", "speed", "pollution"}, -- not "productivity", + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.5, size = 8, shift = {0.0, 0.0}, color = {r = 0.9, g = 1, b = 0.8}} + }, + }, + }, + { + type = "assembling-machine", + name = data_util.mod_prefix .. "space-telescope-xray", + icon = "__space-exploration-graphics__/graphics/icons/telescope-xray.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = {mining_time = 0.2, result = data_util.mod_prefix .. "space-telescope-xray"}, + max_health = 500, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{-2.3, -2.3}, {2.3, 2.3}}, + selection_box = {{-2.5, -2.5}, {2.5, 2.5}}, + drawing_box = {{-2.5, -3.5}, {2.5, 2.5}}, + resistances = + { + { + type = "impact", + percent = 10 + } + }, + fluid_boxes = + { + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {0, -3} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {0, 3} }}, + secondary_draw_orders = { north = -1 } + }, + --off_when_no_fluid_recipe = true + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + apparent_volume = 1.5, + idle_sound = { + filename = "__base__/sound/idle1.ogg", + volume = 0.6 + }, + sound = { + { + filename = "__base__/sound/assembling-machine-t1-1.ogg", + volume = 0.8 + }, + { + filename = "__base__/sound/assembling-machine-t1-2.ogg", + volume = 0.8 + } + } + }, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + spaceship_collision_layer, + }, + animation = + { + layers = + { + { + filename = "__space-exploration-graphics-4__/graphics/entity/telescope-xray/sr/telescope-xray.png", + priority = "high", + width = 2880/8/2, + height = 3232/8/2, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(6, -13), + animation_speed = 0.1, + hr_version = { + filename = "__space-exploration-graphics-4__/graphics/entity/telescope-xray/hr/telescope-xray.png", + priority = "high", + width = 2880/8, + height = 3232/8, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(6, -13), + animation_speed = 0.1, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-4__/graphics/entity/telescope-xray/sr/telescope-xray-shadow.png", + priority = "high", + width = 3712/8/2, + height = 2224/8/2, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(33, 10), + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-4__/graphics/entity/telescope-xray/hr/telescope-xray-shadow.png", + priority = "high", + width = 3712/8, + height = 2224/8, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(33, 10), + scale = 0.5, + } + }, + }, + }, + crafting_categories = {"space-observation-xray"}, + crafting_speed = 1, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + energy_usage = "1000kW", + ingredient_count = 12, + module_specification = + { + module_slots = 4 + }, + allowed_effects = {"consumption", "speed", "pollution"}, -- not "productivity", + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.5, size = 8, shift = {0.0, 0.0}, color = {r = 0.5, g = 0.5, b = 1}} + }, + }, + }, + { + type = "assembling-machine", + name = data_util.mod_prefix .. "space-telescope-gammaray", + icon = "__space-exploration-graphics__/graphics/icons/telescope-gammaray.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = {mining_time = 0.2, result = data_util.mod_prefix .. "space-telescope-gammaray"}, + max_health = 500, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{-2.3, -2.3}, {2.3, 2.3}}, + selection_box = {{-2.5, -2.5}, {2.5, 2.5}}, + drawing_box = {{-2.5, -3.5}, {2.5, 2.5}}, + resistances = + { + { + type = "impact", + percent = 10 + } + }, + fluid_boxes = + { + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {0, -3} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {0, 3} }}, + secondary_draw_orders = { north = -1 } + }, + --off_when_no_fluid_recipe = true + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + apparent_volume = 1.5, + idle_sound = { + filename = "__base__/sound/idle1.ogg", + volume = 0.6 + }, + sound = { + { + filename = "__base__/sound/assembling-machine-t1-1.ogg", + volume = 0.8 + }, + { + filename = "__base__/sound/assembling-machine-t1-2.ogg", + volume = 0.8 + } + } + }, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + spaceship_collision_layer, + }, + animation = + { + layers = + { + { + filename = "__space-exploration-graphics-4__/graphics/entity/telescope-gammaray/sr/telescope-gammaray.png", + priority = "high", + width = 2880/8/2, + height = 3232/8/2, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(6, -13), + animation_speed = 0.1, + hr_version = { + filename = "__space-exploration-graphics-4__/graphics/entity/telescope-gammaray/hr/telescope-gammaray.png", + priority = "high", + width = 2880/8, + height = 3232/8, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(6, -13), + animation_speed = 0.1, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-4__/graphics/entity/telescope-gammaray/sr/telescope-gammaray-shadow.png", + priority = "high", + width = 3712/8/2, + height = 2224/8/2, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(33, 10), + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-4__/graphics/entity/telescope-gammaray/hr/telescope-gammaray-shadow.png", + priority = "high", + width = 3712/8, + height = 2224/8, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(33, 10), + scale = 0.5, + } + }, + }, + }, + crafting_categories = {"space-observation-gammaray"}, + crafting_speed = 1, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + energy_usage = "1000kW", + ingredient_count = 12, + module_specification = + { + module_slots = 4 + }, + allowed_effects = {"consumption", "speed", "pollution"}, -- not "productivity", + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.5, size = 8, shift = {0.0, 0.0}, color = {r = 1, g = 0.5, b = 1}} + }, + }, + }, + { + type = "assembling-machine", + name = data_util.mod_prefix .. "space-telescope-microwave", + icon = "__space-exploration-graphics__/graphics/icons/telescope-microwave.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = {mining_time = 0.2, result = data_util.mod_prefix .. "space-telescope-microwave"}, + max_health = 500, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{-4.3, -4.3}, {4.3, 4.3}}, + selection_box = {{-4.5, -4.5}, {4.5, 4.5}}, + drawing_box = {{-4.5, -6.5}, {4.5, 4.5}}, + resistances = + { + { + type = "impact", + percent = 10 + } + }, + fluid_boxes = + { + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {0, -5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {0, 5} }}, + secondary_draw_orders = { north = -1 } + }, + --off_when_no_fluid_recipe = true + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + apparent_volume = 1.5, + idle_sound = { + filename = "__base__/sound/idle1.ogg", + volume = 0.6 + }, + sound = { + { + filename = "__base__/sound/assembling-machine-t1-1.ogg", + volume = 0.8 + }, + { + filename = "__base__/sound/assembling-machine-t1-2.ogg", + volume = 0.8 + } + } + }, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + spaceship_collision_layer, + }, + animation = + { + layers = + { + { + filename = "__space-exploration-graphics-4__/graphics/entity/telescope-microwave/sr/telescope-microwave.png", + priority = "high", + width = 4688/8/2, + height = 5440/8/2, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(1, -26), + animation_speed = 0.1, + hr_version = { + filename = "__space-exploration-graphics-4__/graphics/entity/telescope-microwave/hr/telescope-microwave.png", + priority = "high", + width = 4688/8, + height = 5440/8, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(1, -26), + animation_speed = 0.1, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-4__/graphics/entity/telescope-microwave/sr/telescope-microwave-shadow.png", + priority = "high", + width = 5440/8/2, + height = 4800/8/2, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(25, 19), + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-4__/graphics/entity/telescope-microwave/hr/telescope-microwave-shadow.png", + priority = "high", + width = 5440/8, + height = 4800/8, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(25, 19), + scale = 0.5, + } + }, + }, + }, + crafting_categories = {"space-observation-microwave"}, + crafting_speed = 1, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + energy_usage = "1000kW", + ingredient_count = 12, + module_specification = + { + module_slots = 4 + }, + allowed_effects = {"consumption", "speed", "pollution"}, -- not "productivity", + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.5, size = 8, shift = {0.0, 0.0}, color = {r = 1, g = 1, b = 0.5}} + }, + }, + }, + { + type = "assembling-machine", + name = data_util.mod_prefix .. "space-telescope-radio", + icon = "__space-exploration-graphics__/graphics/icons/telescope-radio.png", + icon_size = 64, + flags = {"placeable-neutral","placeable-player", "player-creation"}, + minable = {mining_time = 0.2, result = data_util.mod_prefix .. "space-telescope-radio"}, + max_health = 500, + corpse = "big-remnants", + dying_explosion = "medium-explosion", + alert_icon_shift = util.by_pixel(0, -12), + collision_box = {{-4.3, -4.3}, {4.3, 4.3}}, + selection_box = {{-4.5, -4.5}, {4.5, 4.5}}, + drawing_box = {{-4.5, -6.5}, {4.5, 4.5}}, + resistances = + { + { + type = "impact", + percent = 10 + } + }, + fluid_boxes = + { + { + production_type = "input", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = {{ type="input", position = {0, -5} }}, + secondary_draw_orders = { north = -1 } + }, + { + production_type = "output", + --pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = 1, + pipe_connections = {{ type="output", position = {0, 5} }}, + secondary_draw_orders = { north = -1 } + }, + --off_when_no_fluid_recipe = true + }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + apparent_volume = 1.5, + idle_sound = { + filename = "__base__/sound/idle1.ogg", + volume = 0.6 + }, + sound = { + { + filename = "__base__/sound/assembling-machine-t1-1.ogg", + volume = 0.8 + }, + { + filename = "__base__/sound/assembling-machine-t1-2.ogg", + volume = 0.8 + } + } + }, + collision_mask = { + "water-tile", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + spaceship_collision_layer, + }, + animation = + { + layers = + { + { + filename = "__space-exploration-graphics-4__/graphics/entity/telescope-radio/sr/telescope-radio.png", + priority = "high", + width = 4688/8/2, + height = 5440/8/2, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(1, -26), + animation_speed = 0.1, + hr_version = { + filename = "__space-exploration-graphics-4__/graphics/entity/telescope-radio/hr/telescope-radio.png", + priority = "high", + width = 4688/8, + height = 5440/8, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(1, -26), + animation_speed = 0.1, + scale = 0.5, + } + }, + { + draw_as_shadow = true, + filename = "__space-exploration-graphics-4__/graphics/entity/telescope-radio/sr/telescope-radio-shadow.png", + priority = "high", + width = 5440/8/2, + height = 4800/8/2, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(25, 19), + hr_version = { + draw_as_shadow = true, + filename = "__space-exploration-graphics-4__/graphics/entity/telescope-radio/hr/telescope-radio-shadow.png", + priority = "high", + width = 5440/8, + height = 4800/8, + frame_count = 64, + line_length = 8, + shift = util.by_pixel(25, 19), + scale = 0.5, + } + }, + }, + }, + crafting_categories = {"space-observation-radio"}, + crafting_speed = 1, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + energy_usage = "1000kW", + ingredient_count = 12, + module_specification = + { + module_slots = 4 + }, + allowed_effects = {"consumption", "speed", "pollution"}, -- not "productivity", + working_visualisations = + { + { + effect = "uranium-glow", -- changes alpha based on energy source light intensity + light = {intensity = 0.5, size = 8, shift = {0.0, 0.0}, color = {r = 1, g = 0.5, b = 0.5}} + }, + }, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/wide-beacon.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/wide-beacon.lua new file mode 100644 index 0000000..7bde6a3 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/entity/wide-beacon.lua @@ -0,0 +1,253 @@ +local data_util = require("data_util") + + +local blank_image = { + filename = "__space-exploration-graphics__/graphics/blank.png", + width = 1, + height = 1, + frame_count = 1, + line_length = 1, + shift = { 0, 0 }, + repeat_count = 32, +} +data.raw.beacon.beacon.energy_usage = "200kW" +data.raw.beacon.beacon.module_specification = { + module_info_icon_shift = { 0, 0.5 }, + module_info_max_icons_per_row = 4, + module_info_max_icon_rows = 2, + module_info_multi_row_initial_height_modifier = -0.3, + module_slots = 8 +} +data:extend({ + { + type = "beacon", + name = data_util.mod_prefix .. "wide-beacon", + icon = "__space-exploration-graphics__/graphics/icons/wide-beacon.png", + icon_mipmaps = 1, + icon_size = 64, + flags = { "placeable-player", "player-creation" }, + minable = { + mining_time = 0.25, + result = data_util.mod_prefix .. "wide-beacon" + }, + next_upgrade = data_util.mod_prefix .. "wide-beacon-2", + fast_replaceable_group = "wide-beacon", + se_allow_in_space = true, + allowed_effects = { "consumption", "speed", "pollution" }, + animation = { + layers = { + data_util.auto_sr_hr({ + animation_speed = 0.5, + filename = "__space-exploration-graphics-4__/graphics/entity/wide-beacon/hr/wide-beacon.png", + frame_count = 32, + width = 256, + height = 320, + line_length = 8, + shift = { 0, -0.5 }, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + animation_speed = 0.5, + filename = "__space-exploration-graphics-4__/graphics/entity/wide-beacon/hr/wide-beacon-shadow.png", + frame_count = 32, + width = 330, + height = 174, + line_length = 4, + shift = { 0.5+4/32, 0.5+4/32 }, + }), + } + }, + animation_shadow = blank_image, + base_picture = blank_image, + collision_box = { { -1.7, -1.7 }, { 1.7, 1.7 } }, + allow_in_space = true, + drawing_box = { { -2, -2.7 }, { 2, 2 } }, + selection_box = { { -2, -2 }, { 2, 2 } }, + corpse = "medium-remnants", + damaged_trigger_effect = { + entity_name = "spark-explosion", + offset_deviation = { { -0.5, -0.5 }, { 0.5, 0.5 } }, + offsets = { { 0, 1 } }, + type = "create-entity" + }, + dying_explosion = "beacon-explosion", + energy_source = { + type = "electric", + usage_priority = "secondary-input" + }, + energy_usage = "10000kW", + max_health = 800, + module_specification = { + module_info_icon_shift = { 0, 0.5 }, + module_info_max_icons_per_row = 5, + module_info_max_icon_rows = 5, + module_info_multi_row_initial_height_modifier = -0.3, + module_slots = 15 + }, + distribution_effectivity = 0.5, + supply_area_distance = 14, -- extends from edge of collision box, actual is 16 + radius_visualisation_picture = { + filename = "__base__/graphics/entity/beacon/beacon-radius-visualization.png", + height = 10, + priority = "extra-high-no-scale", + width = 10 + }, + vehicle_impact_sound = { + { + filename = "__base__/sound/car-metal-impact.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-2.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-3.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-4.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-5.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-6.ogg", + volume = 0.5 + } + }, + water_reflection = { + orientation_to_variation = false, + pictures = { + filename = "__base__/graphics/entity/beacon/beacon-reflection.png", + height = 28, + priority = "extra-high", + scale = 5, + shift = { + 0, + 1.71875 + }, + variation_count = 1, + width = 24 + }, + rotate = false + } + }, + { + type = "beacon", + name = data_util.mod_prefix .. "wide-beacon-2", + icon = "__space-exploration-graphics__/graphics/icons/wide-beacon-2.png", + icon_mipmaps = 1, + icon_size = 64, + flags = { "placeable-player", "player-creation" }, + minable = { + mining_time = 0.25, + result = data_util.mod_prefix .. "wide-beacon-2" + }, + fast_replaceable_group = "wide-beacon", + se_allow_in_space = true, + allowed_effects = { "consumption", "speed", "pollution" }, + animation = { + layers = { + data_util.auto_sr_hr({ + animation_speed = 0.5, + filename = "__space-exploration-graphics-4__/graphics/entity/wide-beacon/hr/wide-beacon-2.png", + frame_count = 32, + width = 256, + height = 320, + line_length = 8, + shift = { 0, -0.5 }, + }), + data_util.auto_sr_hr({ + draw_as_shadow = true, + animation_speed = 0.5, + filename = "__space-exploration-graphics-4__/graphics/entity/wide-beacon/hr/wide-beacon-shadow.png", + frame_count = 32, + width = 330, + height = 174, + line_length = 4, + shift = { 0.5+4/32, 0.5+4/32 }, + }), + } + }, + animation_shadow = blank_image, + base_picture = blank_image, + collision_box = { { -1.7, -1.7 }, { 1.7, 1.7 } }, + allow_in_space = true, + drawing_box = { { -2, -2.7 }, { 2, 2 } }, + selection_box = { { -2, -2 }, { 2, 2 } }, + corpse = "medium-remnants", + damaged_trigger_effect = { + entity_name = "spark-explosion", + offset_deviation = { { -0.5, -0.5 }, { 0.5, 0.5 } }, + offsets = { { 0, 1 } }, + type = "create-entity" + }, + dying_explosion = "beacon-explosion", + energy_source = { + type = "electric", + usage_priority = "secondary-input" + }, + energy_usage = "10000kW", + max_health = 800, + module_specification = { + module_info_icon_shift = { 0, 0 }, + module_info_max_icons_per_row = 5, + module_info_max_icon_rows = 5, + module_info_multi_row_initial_height_modifier = -0.3, + module_slots = 20 + }, + distribution_effectivity = 0.5, + supply_area_distance = 14, -- extends from edge of collision box, actual is 16 + radius_visualisation_picture = { + filename = "__base__/graphics/entity/beacon/beacon-radius-visualization.png", + height = 10, + priority = "extra-high-no-scale", + width = 10 + }, + vehicle_impact_sound = { + { + filename = "__base__/sound/car-metal-impact.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-2.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-3.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-4.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-5.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/car-metal-impact-6.ogg", + volume = 0.5 + } + }, + water_reflection = { + orientation_to_variation = false, + pictures = { + filename = "__base__/graphics/entity/beacon/beacon-reflection.png", + height = 28, + priority = "extra-high", + scale = 5, + shift = { + 0, + 1.71875 + }, + variation_count = 1, + width = 24 + }, + rotate = false + } + } +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/fluid/fluid.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/fluid/fluid.lua new file mode 100644 index 0000000..b232992 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/fluid/fluid.lua @@ -0,0 +1,353 @@ +local data_util = require("data_util") + +local steam_max_temperature = 5000 +data.raw.fluid.steam.max_temperature = math.max(data.raw.fluid.steam.max_temperature, steam_max_temperature) + +local decompressing_steam = table.deepcopy(data.raw.fluid.steam) +decompressing_steam.name = data_util.mod_prefix .. "decompressing-steam" + +local space_water = table.deepcopy(data.raw.fluid.water) +space_water.name = data_util.mod_prefix .. "space-water" +space_water.icon = "__space-exploration-graphics__/graphics/icons/fluid/space-water.png" +space_water.icon_size = 64 +space_water.icon_mipmaps = 1 +space_water.subgroup = "space-fluids" + +local contaminated_space_water = table.deepcopy(data.raw.fluid.water) +contaminated_space_water.name = data_util.mod_prefix .. "contaminated-space-water" +contaminated_space_water.icon = "__space-exploration-graphics__/graphics/icons/fluid/contaminated-space-water.png" +contaminated_space_water.icon_size = 64 +contaminated_space_water.icon_mipmaps = 1 +contaminated_space_water.subgroup = "space-fluids" + + +--TODO: order strings +data:extend({ + decompressing_steam, + { + type = "fluid", + name = data_util.mod_prefix .. "methane-gas", + default_temperature = 15, + max_temperature = 1000, + heat_capacity = "0.1KJ", + icon = "__space-exploration-graphics__/graphics/icons/fluid/methane-gas.png", + icon_size = 64, + icon_mipmaps = 1, + base_color = {r=0.7, g=0.5, b=0.4}, + flow_color = {r=1.0, g=0.97, b=0.95}, + order = "a[fluid]-b[steam]", + gas_temperature = -160, + auto_barrel = true + }, + space_water, + contaminated_space_water, + { + type = "fluid", + name = data_util.mod_prefix .. "liquid-rocket-fuel", + default_temperature = 25, + heat_capacity = "0.1KJ", + fuel_category = "chemical", + fuel_value = (100 / data_util.liquid_rocket_fuel_per_solid) .. "MJ", -- solid rocket fuel is "100MJ", 50 liquid to solid + max_temperature = 100, + base_color = {r=0.53, g=0.1, b=0}, + flow_color = {r=0.93, g=0.68, b=0.2}, + icon = "__space-exploration-graphics__/graphics/icons/fluid/liquid-rocket-fuel.png", + icon_size = 64, + icon_mipmaps = 1, + order = "p-z-a", + pressure_to_speed_ratio = 0.4, + flow_to_energy_ratio = 0.59, + subgroup = "processed-fuel", + }, + --[[{ + type = "fluid", + name = data_util.mod_prefix .. "space-coolant", + default_temperature = data_util.coolant_temperature.hot, + heat_capacity = "0.1KJ", + min_temperature = -273, + max_temperature = 1000, + base_color = {r=80, g=27, b=255}, + flow_color = {r=178, g=155, b=255}, + icon = "__space-exploration-graphics__/graphics/icons/fluid/space-coolant.png", + icon_size = 64, + order = "a[fluid]-a[water]", + pressure_to_speed_ratio = 0.4, + flow_to_energy_ratio = 0.59, + },]]-- + { + type = "fluid", + name = data_util.mod_prefix .. "space-coolant-hot", + default_temperature = data_util.coolant_temperature.hot, + heat_capacity = "0.1KJ", + min_temperature = -273, + max_temperature = steam_max_temperature, + base_color = {r=159, g=27, b=255}, + flow_color = {r=212, g=155, b=255}, + icon = "__space-exploration-graphics__/graphics/icons/fluid/space-coolant-hot.png", + icon_size = 64, + icon_mipmaps = 1, + order = "t-a", + pressure_to_speed_ratio = 0.4, + flow_to_energy_ratio = 0.59, + subgroup = "space-fluids", + }, + { + type = "fluid", + name = data_util.mod_prefix .. "space-coolant-warm", + default_temperature = data_util.coolant_temperature.normal, + heat_capacity = "0.1KJ", + min_temperature = -273, + max_temperature = steam_max_temperature, + base_color = {r=121, g=27, b=255}, + flow_color = {r=196, g=155, b=255}, + icon = "__space-exploration-graphics__/graphics/icons/fluid/space-coolant-warm.png", + icon_size = 64, + icon_mipmaps = 1, + order = "t-b", + pressure_to_speed_ratio = 0.4, + flow_to_energy_ratio = 0.59, + subgroup = "space-fluids", + auto_barrel = false, + }, + { + type = "fluid", + name = data_util.mod_prefix .. "space-coolant-cold", + default_temperature = data_util.coolant_temperature.cold, + heat_capacity = "0.1KJ", + min_temperature = -273, + max_temperature = steam_max_temperature, + base_color = {r=95, g=47, b=255}, + flow_color = {r=185, g=164, b=255}, + icon = "__space-exploration-graphics__/graphics/icons/fluid/space-coolant-cold.png", + icon_size = 64, + icon_mipmaps = 1, + order = "t-c", + pressure_to_speed_ratio = 0.4, + flow_to_energy_ratio = 0.59, + subgroup = "space-fluids", + auto_barrel = false, + }, + { + type = "fluid", + name = data_util.mod_prefix .. "space-coolant-supercooled", + default_temperature = data_util.coolant_temperature.supercooled, + heat_capacity = "0.1KJ", + min_temperature = -273, + max_temperature = steam_max_temperature, + base_color = {r=98, g=111, b=255}, + flow_color = {r=186, g=192, b=255}, + icon = "__space-exploration-graphics__/graphics/icons/fluid/space-coolant-supercooled.png", + icon_size = 64, + icon_mipmaps = 1, + order = "t-d", + pressure_to_speed_ratio = 0.4, + flow_to_energy_ratio = 0.59, + subgroup = "space-fluids", + auto_barrel = false, + }, + { + type = "fluid", + name = data_util.mod_prefix .. "bio-sludge", + default_temperature = 25, + heat_capacity = "0.1KJ", + max_temperature = 100, + base_color = {r=0, g=84, b=3}, + flow_color = {r=133, g=226, b=18}, + icon = "__space-exploration-graphics__/graphics/icons/fluid/bio-sludge.png", + icon_size = 64, + icon_mipmaps = 1, + order = "q-a", + pressure_to_speed_ratio = 0.4, + flow_to_energy_ratio = 0.59, + subgroup = "space-fluids", + }, + { + type = "fluid", + name = data_util.mod_prefix .. "contaminated-bio-sludge", + default_temperature = 25, + heat_capacity = "0.1KJ", + max_temperature = 100, + base_color = {r=71, g=46, b=5}, + flow_color = {r=135, g=121, b=9}, + icon = "__space-exploration-graphics__/graphics/icons/fluid/contaminated-bio-sludge.png", + icon_size = 64, + icon_mipmaps = 1, + order = "q-b", + pressure_to_speed_ratio = 0.4, + flow_to_energy_ratio = 0.59, + subgroup = "space-fluids", + }, + { + type = "fluid", + name = data_util.mod_prefix .. "chemical-gel", + default_temperature = 25, + heat_capacity = "0.1KJ", + max_temperature = 100, + base_color = {r=103, g=31, b=0}, + flow_color = {r=234, g=135, b=0}, + icon = "__space-exploration-graphics__/graphics/icons/fluid/chemical-gel.png", + icon_size = 64, + icon_mipmaps = 1, + order = "q-c", + pressure_to_speed_ratio = 0.4, + flow_to_energy_ratio = 0.59, + subgroup = "space-fluids", + }, + { + type = "fluid", + name = data_util.mod_prefix .. "nutrient-gel", + default_temperature = 25, + heat_capacity = "0.1KJ", + max_temperature = 100, + base_color = {r=191, g=64, b=87}, + flow_color = {r=248, g=62, b=122}, + icon = "__space-exploration-graphics__/graphics/icons/fluid/nutrient-gel.png", + icon_size = 64, + icon_mipmaps = 1, + order = "q-d", + pressure_to_speed_ratio = 0.4, + flow_to_energy_ratio = 0.59, + subgroup = "space-fluids", + }, + { + type = "fluid", + name = data_util.mod_prefix .. "neural-gel", + default_temperature = 25, + heat_capacity = "0.1KJ", + max_temperature = 100, + base_color = {r=95, g=40, b=29}, + flow_color = {r=188, g=128, b=116}, + icon = "__space-exploration-graphics__/graphics/icons/fluid/neural-gel.png", + icon_size = 64, + icon_mipmaps = 1, + order = "q-e", + pressure_to_speed_ratio = 0.4, + flow_to_energy_ratio = 0.59, + subgroup = "space-fluids", + }, + { + type = "fluid", + name = data_util.mod_prefix .. "neural-gel-2", + default_temperature = 25, + heat_capacity = "0.1KJ", + max_temperature = 100, + base_color = {r=55, g=29, b=57}, + flow_color = {r=184, g=106, b=194}, + icon = "__space-exploration-graphics__/graphics/icons/fluid/neural-gel-2.png", + icon_size = 64, + icon_mipmaps = 1, + order = "q-f", + pressure_to_speed_ratio = 0.4, + flow_to_energy_ratio = 0.59, + subgroup = "space-fluids", + }, + { + type = "fluid", + name = data_util.mod_prefix .. "plasma-stream", + default_temperature = 5000, + heat_capacity = "0.01KJ", + max_temperature = 100000, + base_color = {r=255, g=0, b=0}, + flow_color = {r=255, g=235, b=0}, + icon = "__space-exploration-graphics__/graphics/icons/fluid/plasma-stream.png", + icon_size = 64, + icon_mipmaps = 1, + order = "r-a", + pressure_to_speed_ratio = 0.4, + flow_to_energy_ratio = 0.59, + gas_temperature = 0, + auto_barrel = false, + subgroup = "space-fluids", + }, + { + type = "fluid", + name = data_util.mod_prefix .. "ion-stream", + default_temperature = 5000, + heat_capacity = "0.01KJ", + max_temperature = 100000, + base_color = {r=0, g=102, b=255}, + flow_color = {r=0, g=240, b=255}, + icon = "__space-exploration-graphics__/graphics/icons/fluid/ion-stream.png", + icon_size = 64, + icon_mipmaps = 1, + order = "r-b", + pressure_to_speed_ratio = 0.4, + flow_to_energy_ratio = 0.59, + gas_temperature = 0, + auto_barrel = false, + subgroup = "space-fluids", + }, + { + type = "fluid", + name = data_util.mod_prefix .. "proton-stream", + default_temperature = 5000, + heat_capacity = "0.01KJ", + max_temperature = 100000, + base_color = {r=102, g=197, b=0}, + flow_color = {r=13, g=231, b=174}, + icon = "__space-exploration-graphics__/graphics/icons/fluid/proton-stream.png", + icon_size = 64, + icon_mipmaps = 1, + order = "r-e", + pressure_to_speed_ratio = 0.4, + flow_to_energy_ratio = 0.59, + gas_temperature = 0, + auto_barrel = false, + subgroup = "space-fluids", + }, + { + type = "fluid", + name = data_util.mod_prefix .. "particle-stream", + default_temperature = 5000, + heat_capacity = "0.01KJ", + max_temperature = 100000, + base_color = {r=200, g=0, b=128}, + flow_color = {r=255, g=0, b=252}, + icon = "__space-exploration-graphics__/graphics/icons/fluid/particle-stream.png", + icon_size = 64, + icon_mipmaps = 1, + order = "r-d", + pressure_to_speed_ratio = 0.4, + flow_to_energy_ratio = 0.59, + gas_temperature = 0, + auto_barrel = false, + subgroup = "space-fluids", + }, + { + type = "fluid", + name = data_util.mod_prefix .. "antimatter-stream", + default_temperature = 10000, + heat_capacity = "0.01KJ", + max_temperature = 100000, + base_color = {r=156, g=0, b=255}, + flow_color = {r=255, g=0, b=255}, + icon = "__space-exploration-graphics__/graphics/icons/fluid/antimatter-stream.png", + icon_size = 64, + icon_mipmaps = 1, + order = "z", + pressure_to_speed_ratio = 0.4, + flow_to_energy_ratio = 0.59, + gas_temperature = 0, + auto_barrel = false, + fuel_value = "20MJ", -- liquid rocket fuel is 2 + fuel_category = "antimatter", + subgroup = "space-fluids", + }, + { + type = "fluid", + name = data_util.mod_prefix .. "cryonite-slush", + default_temperature = 0, + heat_capacity = "0.01KJ", + max_temperature = 25, + base_color = {r=47, g=95, b=255}, + flow_color = {r=185, g=164, b=255}, + icon = "__space-exploration-graphics__/graphics/icons/fluid/cryonite-slush.png", + icon_size = 64, + icon_mipmaps = 1, + order = "z", + pressure_to_speed_ratio = 0.4, + flow_to_energy_ratio = 0.59, + auto_barrel = true, + subgroup = "space-fluids", + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/input.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/input.lua new file mode 100644 index 0000000..ebebd70 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/input.lua @@ -0,0 +1,195 @@ +local data_util = require("data_util") + +data:extend{ + { + type = 'custom-input', + name = data_util.mod_prefix .. 'remote-view', + key_sequence = 'N', + enabled_while_spectating = true, + order = "a-a", + }, + { + type = 'custom-input', + name = data_util.mod_prefix .. 'remote-view-pins', + key_sequence = "CONTROL + SHIFT + N", + enabled_while_spectating = true, + order = "a-aa" + }, + { + type = 'custom-input', + name = data_util.mod_prefix .. 'remote-view-next', + key_sequence = 'SHIFT + N', + enabled_while_spectating = true, + order = "a-ab" + }, + { + type = 'custom-input', + name = data_util.mod_prefix .. 'remote-view-previous', + key_sequence = 'CONTROL + N', + enabled_while_spectating = true, + order = "a-ac" + }, + { + type = 'custom-input', + name = data_util.mod_prefix .. 'universe-explorer', + key_sequence = 'U', + enabled_while_spectating = true, + order = "a-b", + }, + { + type = 'custom-input', + name = data_util.mod_prefix .. 'respawn', + key_sequence = "HOME", + enabled_while_spectating = true, + order = "a-c", + }, + { + type = 'custom-input', + name = data_util.mod_prefix .. 'mode-toggle', + key_sequence = "R", + enabled_while_spectating = true, + order = "a-d", + }, + -- pin to pin hotkeys + { + type = 'custom-input', + name = data_util.mod_prefix .. 'pin-one', + key_sequence = "CONTROL + 1", + enabled_while_spectating = true, + order = "b-a", + }, + { + type = 'custom-input', + name = data_util.mod_prefix .. 'pin-two', + key_sequence = "CONTROL + 2", + enabled_while_spectating = true, + order = "b-b", + }, + { + type = 'custom-input', + name = data_util.mod_prefix .. 'pin-three', + key_sequence = "CONTROL + 3", + enabled_while_spectating = true, + order = "b-c", + }, + { + type = 'custom-input', + name = data_util.mod_prefix .. 'pin-four', + key_sequence = "CONTROL + 4", + enabled_while_spectating = true, + order = "b-d", + }, + { + type = 'custom-input', + name = data_util.mod_prefix .. 'pin-five', + key_sequence = "CONTROL + 5", + enabled_while_spectating = true, + order = "b-e", + }, + { + type = 'custom-input', + name = data_util.mod_prefix .. 'pin-six', + key_sequence = "CONTROL + 6", + enabled_while_spectating = true, + order = "b-f", + }, + { + type = 'custom-input', + name = data_util.mod_prefix .. 'pin-seven', + key_sequence = "CONTROL + 7", + enabled_while_spectating = true, + order = "b-g", + }, + { + type = 'custom-input', + name = data_util.mod_prefix .. 'pin-eight', + key_sequence = "CONTROL + 8", + enabled_while_spectating = true, + order = "b-h", + }, + { + type = 'custom-input', + name = data_util.mod_prefix .. 'pin-nine', + key_sequence = "CONTROL + 9", + enabled_while_spectating = true, + order = "b-i", + }, + { + type = 'custom-input', + name = data_util.mod_prefix .. 'pin-zero', + key_sequence = "CONTROL + 0", + enabled_while_spectating = true, + order = "b-j", + }, + -- set pin hotkeys + { + type = 'custom-input', + name = data_util.mod_prefix .. 'pin-set-one', + key_sequence = "CONTROL + SHIFT + 1", + enabled_while_spectating = true, + order = "c-a", + }, + { + type = 'custom-input', + name = data_util.mod_prefix .. 'pin-set-two', + key_sequence = "CONTROL + SHIFT + 2", + enabled_while_spectating = true, + order = "c-b", + }, + { + type = 'custom-input', + name = data_util.mod_prefix .. 'pin-set-three', + key_sequence = "CONTROL + SHIFT + 3", + enabled_while_spectating = true, + order = "c-c", + }, + { + type = 'custom-input', + name = data_util.mod_prefix .. 'pin-set-four', + key_sequence = "CONTROL + SHIFT + 4", + enabled_while_spectating = true, + order = "c-d", + }, + { + type = 'custom-input', + name = data_util.mod_prefix .. 'pin-set-five', + key_sequence = "CONTROL + SHIFT + 5", + enabled_while_spectating = true, + order = "c-e", + }, + { + type = 'custom-input', + name = data_util.mod_prefix .. 'pin-set-six', + key_sequence = "CONTROL + SHIFT + 6", + enabled_while_spectating = true, + order = "c-f", + }, + { + type = 'custom-input', + name = data_util.mod_prefix .. 'pin-set-seven', + key_sequence = "CONTROL + SHIFT + 7", + enabled_while_spectating = true, + order = "c-g", + }, + { + type = 'custom-input', + name = data_util.mod_prefix .. 'pin-set-eight', + key_sequence = "CONTROL + SHIFT + 8", + enabled_while_spectating = true, + order = "c-h", + }, + { + type = 'custom-input', + name = data_util.mod_prefix .. 'pin-set-nine', + key_sequence = "CONTROL + SHIFT + 9", + enabled_while_spectating = true, + order = "c-i", + }, + { + type = 'custom-input', + name = data_util.mod_prefix .. 'pin-set-zero', + key_sequence = "CONTROL + SHIFT + 0", + enabled_while_spectating = true, + order = "c-j", + } +} diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item-groups.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item-groups.lua new file mode 100644 index 0000000..8049747 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item-groups.lua @@ -0,0 +1,427 @@ +data.raw["item-group"]["intermediate-products"].icon = "__space-exploration-graphics__/graphics/item-group/manufacturing.png" +data.raw["item-group"]["intermediate-products"].order = "c-b" +data.raw["item-group"]["combat"].icon = "__space-exploration-graphics__/graphics/item-group/equipment.png" +data:extend({ + + --[[{ + type = "item-group", + name = "space", + order = "b-b-s", + icon = "__space-exploration-graphics__/graphics/item-group/spaceship.png", + icon_size = 64, + },]]-- + { + type = "item-group", + name = "resources", + order = "c-a", + icon = "__space-exploration-graphics__/graphics/item-group/resources.png", + icon_size = 128, + }, + { + type = "item-group", + name = "science", + order = "c-d", + icon = "__space-exploration-graphics__/graphics/item-group/science.png", + icon_size = 128, + }, + + + { + type = "item-subgroup", + name = "storage", + group = "logistics", + order = "a[storage]" + }, + { + type = "item-subgroup", + name = "transport-belt", + group = "logistics", + order = "b[belt]-a" + }, + { + type = "item-subgroup", + name = "underground-belt", + group = "logistics", + order = "b[belt]-b" + }, + { + type = "item-subgroup", + name = "splitter", + group = "logistics", + order = "b[belt]-c" + }, + { + type = "item-subgroup", + name = "loader", + group = "logistics", + order = "b[belt]-c" + }, + { + type = "item-subgroup", + name = "pipe", + group = "logistics", + order = "c" + }, + { + group = "logistics", + name = "rail", + order = "e[transport]-b[rail]", + type = "item-subgroup" + }, + + { + type = "item-subgroup", + name = "spaceship-structure", + group = "logistics", + order = "k" + }, + + { + type = "item-subgroup", + name = "rocket-logistics", + group = "logistics", + order = "j" + }, + { + type = "item-subgroup", + name = "delivery-cannon-capsules", + group = "logistics", + order = "k" + }, + + + { + type = "item-subgroup", + name = "ancient", + group = "logistics", + order = "z-z-a" + }, + + + + { + type = "item-subgroup", + name = "solar", + group = "production", + order = "b-a" + }, + { + type = "item-subgroup", + name = "mechanical", + group = "production", + order = "e-a" + }, + { + type = "item-subgroup", + name = "assembling", + group = "production", + order = "e-b" + }, + { + type = "item-subgroup", + name = "chemistry", + group = "production", + order = "e-c" + }, + { + type = "item-subgroup", + name = "radiation", + group = "production", + order = "e-d" + }, + { + type = "item-subgroup", + name = "plasma", + group = "production", + order = "e-e" + }, + { + type = "item-subgroup", + name = "thermofluid", + group = "production", + order = "e-f" + }, + { + type = "item-subgroup", + name = "computation", + group = "production", + order = "e-g" + }, + { + type = "item-subgroup", + name = "telescope", + group = "production", + order = "e-h" + }, + { + type = "item-subgroup", + name = "beaming", + group = "production", + order = "h-i" + }, + { + type = "item-subgroup", + name = "space-structures", + group = "production", + order = "h-j" + }, + { + type = "item-subgroup", + name = "lab", + group = "production", + order = "h-k" + }, + { + type = "item-subgroup", + name = "module-speed", + group = "production", + order = "z-m-b" + }, + { + type = "item-subgroup", + name = "module-productivity", + group = "production", + order = "z-m-c" + }, + { + type = "item-subgroup", + name = "module-effectivity", + group = "production", + order = "z-m-d" + }, + + + + { + type = "item-subgroup", + name = "core-fragments", + group = "resources", + order = "a-a" + }, + { + type = "item-subgroup", + name = "pulverised", + group = "resources", + order = "a-b" + }, + { + type = "item-subgroup", + name = "washed", + group = "resources", + order = "a-c" + }, + { + type = "item-subgroup", + name = "ingots", + group = "resources", + order = "a-d" + }, + { + type = "item-subgroup", + name = "plates", + group = "resources", + order = "a-d" + }, + { + type = "item-subgroup", + name = "arcosphere", + group = "resources", + order = "z-b" + }, + + + + + { + type = "item-subgroup", + name = "spaceship-process", + group = "intermediate-products", + order = "z-a-a-b" + }, + { + type = "item-subgroup", + name = "rocket-intermediate-product", + group = "intermediate-products", + order = "z-a-b-b" + }, + { + type = "item-subgroup", + name = "processed-fuel", + group = "intermediate-products", + order = "z-a-c-a" + }, + { + type = "item-subgroup", + name = "space-cooling", + group = "intermediate-products", + order = "z-a-e" + }, + + { + type = "item-subgroup", + name = "space-fluids", + group = "intermediate-products", + order = "z-f-a" + }, + { + type = "item-subgroup", + name = "space-recycling", + group = "intermediate-products", + order = "z-g-a" + }, + { + type = "item-subgroup", + name = "space-components", + group = "intermediate-products", + order = "z-h-a" + }, + { + type = "item-subgroup", + name = "space-canisters", + group = "intermediate-products", + order = "z-h-b" + }, + { + type = "item-subgroup", + name = "space-bioculture", + group = "intermediate-products", + order = "z-j-a" + }, + { + type = "item-subgroup", + name = "space-observation-frame", + group = "intermediate-products", + order = "z-j-b" + }, + + + + + + { + type = "item-subgroup", + name = "data-generic", + group = "science", + order = "m-a" + }, + { + type = "item-subgroup", + name = "data-significant", + group = "science", + order = "m-m" + }, + + { + type = "item-subgroup", + name = "data-catalogue-astronomic", + group = "science", + order = "n-a" + }, + { + type = "item-subgroup", + name = "data-astronomic", + group = "science", + order = "n-b" + }, + { + type = "item-subgroup", + name = "astronomic-science-pack", + group = "science", + order = "n-c" + }, + { + type = "item-subgroup", + name = "data-catalogue-biological", + group = "science", + order = "o-a" + }, + { + type = "item-subgroup", + name = "data-biological", + group = "science", + order = "o-b" + }, + { + type = "item-subgroup", + name = "biological-science-pack", + group = "science", + order = "o-c" + }, + { + type = "item-subgroup", + name = "data-catalogue-energy", + group = "science", + order = "p-a" + }, + { + type = "item-subgroup", + name = "data-energy", + group = "science", + order = "p-b" + }, + { + type = "item-subgroup", + name = "energy-science-pack", + group = "science", + order = "p-c" + }, + { + type = "item-subgroup", + name = "data-catalogue-material", + group = "science", + order = "q-a" + }, + { + type = "item-subgroup", + name = "data-material", + group = "science", + order = "q-b" + }, + { + type = "item-subgroup", + name = "material-science-pack", + group = "science", + order = "q-c" + }, + + { + type = "item-subgroup", + name = "data-catalogue-deep", + group = "science", + order = "r-a" + }, + { + type = "item-subgroup", + name = "data-deep", + group = "science", + order = "r-b" + }, + { + type = "item-subgroup", + name = "deep-science-pack", + group = "science", + order = "r-c" + }, + + + { + type = "item-subgroup", + name = "surface-defense", + group = "combat", + order = "z-a" + }, + + { + type = "item-subgroup", + name = "virtual-signal-utility", + group = "signals", + order = "u-a" + }, + + { + type = "item-subgroup", + name = "ruins", + group = "environment", + order = "z-r" + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/armor.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/armor.lua new file mode 100644 index 0000000..178c307 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/armor.lua @@ -0,0 +1,190 @@ +local data_util = require("data_util") + + +data:extend{ + { + name = data_util.mod_prefix.."thruster-suit", + type = "armor", + subgroup = "armor", + equipment_grid = data_util.mod_prefix.."thruster-suit-grid", + icon = "__space-exploration-graphics__/graphics/icons/thruster-suit-orange.png", + icon_size = 64, + infinite = true, + inventory_size_bonus = 20, + order = "t-a", + resistances = { + { + percent = 30, + type = "physical" + }, + { + decrease = 0, + percent = 30, + type = "acid" + }, + { + decrease = 0, + percent = 30, + type = "explosion" + }, + { + decrease = 0, + percent = 60, + type = "fire" + } + }, + stack_size = 1, + }, + { + equipment_categories = { + "armor" + }, + name = data_util.mod_prefix.."thruster-suit-grid", + type = "equipment-grid", + height = 8, + width = 8 + }, + { + name = data_util.mod_prefix.."thruster-suit-2", + type = "armor", + subgroup = "armor", + equipment_grid = data_util.mod_prefix.."thruster-suit-2-grid", + icon = "__space-exploration-graphics__/graphics/icons/thruster-suit-red.png", + icon_size = 64, + infinite = true, + inventory_size_bonus = 40, + order = "t-b", + resistances = { + { + percent = 30, + type = "physical" + }, + { + decrease = 0, + percent = 30, + type = "acid" + }, + { + decrease = 0, + percent = 30, + type = "explosion" + }, + { + decrease = 0, + percent = 60, + type = "fire" + } + }, + stack_size = 1, + }, + { + equipment_categories = { + "armor" + }, + name = data_util.mod_prefix.."thruster-suit-2-grid", + type = "equipment-grid", + height = 10, + width = 10 + }, + { + name = data_util.mod_prefix.."thruster-suit-3", + type = "armor", + subgroup = "armor", + equipment_grid = data_util.mod_prefix.."thruster-suit-3-grid", + icon = "__space-exploration-graphics__/graphics/icons/thruster-suit-blue.png", + icon_size = 64, + infinite = true, + inventory_size_bonus = 50, + order = "t-c", + resistances = { + { + percent = 30, + type = "physical" + }, + { + decrease = 0, + percent = 30, + type = "acid" + }, + { + decrease = 0, + percent = 30, + type = "explosion" + }, + { + decrease = 0, + percent = 60, + type = "fire" + } + }, + stack_size = 1, + }, + { + equipment_categories = { + "armor" + }, + name = data_util.mod_prefix.."thruster-suit-3-grid", + type = "equipment-grid", + height = 14, + width = 12 + }, + { + name = data_util.mod_prefix.."thruster-suit-4", + type = "armor", + subgroup = "armor", + equipment_grid = data_util.mod_prefix.."thruster-suit-4-grid", + icon = "__space-exploration-graphics__/graphics/icons/thruster-suit-black.png", + icon_size = 64, + infinite = true, + inventory_size_bonus = 60, + order = "t-d", + resistances = { + { + percent = 30, + type = "physical" + }, + { + decrease = 0, + percent = 30, + type = "acid" + }, + { + decrease = 0, + percent = 30, + type = "explosion" + }, + { + decrease = 0, + percent = 60, + type = "fire" + } + }, + stack_size = 1, + }, + { + equipment_categories = { + "armor" + }, + name = data_util.mod_prefix.."thruster-suit-4-grid", + type = "equipment-grid", + height = 16, + width = 16 + }, +} +data.raw["character-corpse"]["character-corpse"].armor_picture_mapping[ data_util.mod_prefix .. "thruster-suit"] = 3 +data.raw["character-corpse"]["character-corpse"].armor_picture_mapping[ data_util.mod_prefix .. "thruster-suit-2"] = 3 +data.raw["character-corpse"]["character-corpse"].armor_picture_mapping[ data_util.mod_prefix .. "thruster-suit-3"] = 3 +data.raw["character-corpse"]["character-corpse"].armor_picture_mapping[ data_util.mod_prefix .. "thruster-suit-4"] = 3 + +for _, animation in pairs(data.raw.character.character.animations) do + if animation.armors then + for _, armor in pairs(animation.armors) do + if armor == "power-armor" then + table.insert(animation.armors, data_util.mod_prefix .. "thruster-suit") + table.insert(animation.armors, data_util.mod_prefix .. "thruster-suit-2") + table.insert(animation.armors, data_util.mod_prefix .. "thruster-suit-3") + table.insert(animation.armors, data_util.mod_prefix .. "thruster-suit-4") + end + end + end +end diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/cargo-rocket.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/cargo-rocket.lua new file mode 100644 index 0000000..3ab4588 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/cargo-rocket.lua @@ -0,0 +1,50 @@ +local data_util = require("data_util") +data:extend({ + { + type = "item", + name = data_util.mod_prefix .. "space-capsule", + place_result = data_util.mod_prefix .. "space-capsule-_-vehicle", + icon = "__space-exploration-graphics__/graphics/icons/space-capsule.png", + icon_size = 64, + order = "d", + stack_size = 1, + subgroup = "rocket-logistics", + }, + { + type = "item", + name = data_util.mod_prefix .. "cargo-rocket-section", + icon = "__space-exploration-graphics__/graphics/icons/cargo-rocket-section.png", + icon_size = 64, + order = "q[rocket-part]", + stack_size = 1, + subgroup = "rocket-intermediate-product", + }, + { + type = "item", + name = data_util.mod_prefix .. "cargo-rocket-section-packed", + icon = "__space-exploration-graphics__/graphics/icons/cargo-rocket-section-stacked.png", + icon_size = 64, + order = "q[rocket-part]-b", + stack_size = 1, + subgroup = "rocket-intermediate-product", + }, + { + type = "item", + name = data_util.mod_prefix .. "cargo-rocket-cargo-pod", + place_result = data_util.mod_prefix .. "cargo-rocket-cargo-pod", + icon = "__space-exploration-graphics__/graphics/icons/cargo-pod.png", + icon_size = 64, + order = "q[rocket-part]", + stack_size = 10, + subgroup = "rocket-intermediate-product", + }, + { + type = "item", + name = data_util.mod_prefix .. "cargo-rocket-fuel-tank", + icon = "__space-exploration-graphics__/graphics/icons/rocket-fuel-tank.png", + icon_size = 64, + order = "q[rocket-part]", + stack_size = 10, + subgroup = "rocket-intermediate-product", + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/condenser-turbine.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/condenser-turbine.lua new file mode 100644 index 0000000..e81ffb7 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/condenser-turbine.lua @@ -0,0 +1,15 @@ +local data_util = require("data_util") +--heat.localised_name = {"fluid-name.steam"} +data:extend({ + { + type = "item", + name = data_util.mod_prefix .. "condenser-turbine", + icon = "__space-exploration-graphics__/graphics/icons/condenser-turbine.png", + icon_size = 64, + order = data.raw["item"]["steam-turbine"].order or "".."-b", + place_result = data_util.mod_prefix .. "condenser-turbine", + stack_size = 10, + subgroup = "energy", + --subgroup = "space-energy", + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/core-miner.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/core-miner.lua new file mode 100644 index 0000000..3ef5fa8 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/core-miner.lua @@ -0,0 +1,14 @@ +local data_util = require("data_util") +-- Note: the actual core fragments are in data-final-fixes.lua +data:extend({ + { + type = "item", + name = data_util.mod_prefix .. "core-miner", + icon = "__space-exploration-graphics__/graphics/icons/core-miner.png", + icon_size = 64, + order = "zzzz-core-miner", + stack_size = 1, + subgroup = "extraction-machine", + place_result = data_util.mod_prefix .. "core-miner", + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/equipment.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/equipment.lua new file mode 100644 index 0000000..bc41e43 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/equipment.lua @@ -0,0 +1,388 @@ +local data_util = require("data_util") + +data.raw.item["fusion-reactor-equipment"].order = "a[energy-source]-b[fusion-reactor]-c", + +data:extend{ + { + type = "item", + name = data_util.mod_prefix .. "rtg-equipment", + icon = "__space-exploration-graphics__/graphics/icons/rtg-equipment.png", + icon_size = 64, + icon_mipmaps = 1, + order = "a[energy-source]-b[fusion-reactor]-a", + placed_as_equipment_result = data_util.mod_prefix .. "rtg-equipment", + stack_size = 20, + subgroup = "equipment", + }, + { + type = "generator-equipment", + name = data_util.mod_prefix .. "rtg-equipment", + categories = { "armor" }, + energy_source = { type = "electric", usage_priority = "primary-output" }, + power = "300kW", + shape = { type = "full", height = 4, width = 4 }, + sprite = { + filename = "__space-exploration-graphics__/graphics/equipment/rtg-equipment.png", + height = 128, + priority = "medium", + width = 128 + }, + }, + { + type = "item", + name = data_util.mod_prefix .. "rtg-equipment-2", + icon = "__space-exploration-graphics__/graphics/icons/rtg-equipment-2.png", + icon_size = 64, + icon_mipmaps = 1, + order = "a[energy-source]-b[fusion-reactor]-b", + placed_as_equipment_result = data_util.mod_prefix .. "rtg-equipment-2", + stack_size = 20, + subgroup = "equipment", + }, + { + type = "generator-equipment", + name = data_util.mod_prefix .. "rtg-equipment-2", + categories = { "armor" }, + energy_source = { type = "electric", usage_priority = "primary-output" }, + power = "500kW", + shape = { type = "full", height = 4, width = 4 }, + sprite = { + filename = "__space-exploration-graphics__/graphics/equipment/rtg-equipment-2.png", + height = 128, + priority = "medium", + width = 128 + }, + }, + { + type = "item", + name = data_util.mod_prefix .. "adaptive-armour-equipment-1", + icon = "__space-exploration-graphics__/graphics/icons/adaptive-armour-1.png", + icon_size = 64, + icon_mipmaps = 1, + placed_as_equipment_result = data_util.mod_prefix .. "adaptive-armour-equipment-1", + subgroup = "equipment", + order = "ca[shield]-a[adaptive-armour-1]", + stack_size = 20 + }, + { + type = "energy-shield-equipment", + name = data_util.mod_prefix .. "adaptive-armour-equipment-1", + sprite = { + filename = "__space-exploration-graphics__/graphics/equipment/adaptive-armour-1.png", + width = 64, + height = 64, + priority = "medium" + }, + shape = { + width = 2, + height = 2, + type = "full" + }, + max_shield_value = 25, + energy_source = + { + type = "electric", + buffer_capacity = "10kJ", + input_flow_limit = "25kW", + usage_priority = "primary-input", + }, + energy_per_shield = "20kJ", + categories = {"armor"} + }, + { + type = "item", + name = data_util.mod_prefix .. "adaptive-armour-equipment-2", + icon = "__space-exploration-graphics__/graphics/icons/adaptive-armour-2.png", + icon_size = 64, + icon_mipmaps = 1, + placed_as_equipment_result = data_util.mod_prefix .. "adaptive-armour-equipment-2", + subgroup = "equipment", + order = "ca[shield]-b[adaptive-armour-2]", + stack_size = 20 + }, + { + type = "energy-shield-equipment", + name = data_util.mod_prefix .. "adaptive-armour-equipment-2", + sprite = { + filename = "__space-exploration-graphics__/graphics/equipment/adaptive-armour-2.png", + width = 64, + height = 64, + priority = "medium" + }, + shape = { + width = 2, + height = 2, + type = "full" + }, + max_shield_value = 50, + energy_source = + { + type = "electric", + buffer_capacity = "10kJ", + input_flow_limit = "50kW", + usage_priority = "primary-input", + }, + energy_per_shield = "20kJ", + categories = {"armor"} + }, + { + type = "item", + name = data_util.mod_prefix .. "adaptive-armour-equipment-3", + icon = "__space-exploration-graphics__/graphics/icons/adaptive-armour-3.png", + icon_size = 64, + icon_mipmaps = 1, + placed_as_equipment_result = data_util.mod_prefix .. "adaptive-armour-equipment-3", + subgroup = "equipment", + order = "ca[shield]-c[adaptive-armour-3]", + stack_size = 20 + }, + { + type = "energy-shield-equipment", + name = data_util.mod_prefix .. "adaptive-armour-equipment-3", + sprite = { + filename = "__space-exploration-graphics__/graphics/equipment/adaptive-armour-3.png", + width = 64, + height = 64, + priority = "medium" + }, + shape = { + width = 2, + height = 2, + type = "full" + }, + max_shield_value = 100, + energy_source = + { + type = "electric", + buffer_capacity = "10kJ", + input_flow_limit = "100kW", + usage_priority = "primary-input", + }, + energy_per_shield = "20kJ", + categories = {"armor"} + }, + { + type = "item", + name = data_util.mod_prefix .. "adaptive-armour-equipment-4", + icon = "__space-exploration-graphics__/graphics/icons/adaptive-armour-4.png", + icon_size = 64, + icon_mipmaps = 1, + placed_as_equipment_result = data_util.mod_prefix .. "adaptive-armour-equipment-4", + subgroup = "equipment", + order = "ca[shield]-d[adaptive-armour-4]", + stack_size = 20 + }, + { + type = "energy-shield-equipment", + name = data_util.mod_prefix .. "adaptive-armour-equipment-4", + sprite = { + filename = "__space-exploration-graphics__/graphics/equipment/adaptive-armour-4.png", + width = 64, + height = 64, + priority = "medium" + }, + shape = { + width = 2, + height = 2, + type = "full" + }, + max_shield_value = 200, + energy_source = + { + type = "electric", + buffer_capacity = "10kJ", + input_flow_limit = "200kW", + usage_priority = "primary-input", + }, + energy_per_shield = "20kJ", + categories = {"armor"} + }, + { + type = "item", + name = data_util.mod_prefix .. "adaptive-armour-equipment-5", + icon = "__space-exploration-graphics__/graphics/icons/adaptive-armour-5.png", + icon_size = 64, + icon_mipmaps = 1, + placed_as_equipment_result = data_util.mod_prefix .. "adaptive-armour-equipment-5", + subgroup = "equipment", + order = "ca[shield]-e[adaptive-armour-5]", + stack_size = 20 + }, + { + type = "energy-shield-equipment", + name = data_util.mod_prefix .. "adaptive-armour-equipment-5", + sprite = { + filename = "__space-exploration-graphics__/graphics/equipment/adaptive-armour-5.png", + width = 64, + height = 64, + priority = "medium" + }, + shape = { + width = 2, + height = 2, + type = "full" + }, + max_shield_value = 500, + energy_source = + { + type = "electric", + buffer_capacity = "10kJ", + input_flow_limit = "500kW", + usage_priority = "primary-input", + }, + energy_per_shield = "20kJ", + categories = {"armor"} + }, + { + type = "item", + name = "energy-shield-mk3-equipment", + icon = "__space-exploration-graphics__/graphics/icons/energy-shield-green.png", + icon_size = 64, + icon_mipmaps = 1, + placed_as_equipment_result = "energy-shield-mk3-equipment", + subgroup = "equipment", + order = "b[shield]-c[energy-shield]", + stack_size = 20 + }, + { + type = "energy-shield-equipment", + name = "energy-shield-mk3-equipment", + sprite = + { + filename = "__space-exploration-graphics__/graphics/equipment/energy-shield-green.png", + width = 64, + height = 64, + priority = "medium" + }, + shape = + { + width = 2, + height = 2, + type = "full" + }, + max_shield_value = 500, + energy_source = + { + type = "electric", + buffer_capacity = "180kJ", + input_flow_limit = "5MW", + usage_priority = "primary-input" + }, + energy_per_shield = "30kJ", + categories = {"armor"} + }, + { + type = "item", + name = "energy-shield-mk4-equipment", + icon = "__space-exploration-graphics__/graphics/icons/energy-shield-cyan.png", + icon_size = 64, + icon_mipmaps = 1, + placed_as_equipment_result = "energy-shield-mk4-equipment", + subgroup = "equipment", + order = "b[shield]-d[energy-shield]", + stack_size = 20 + }, + { + type = "energy-shield-equipment", + name = "energy-shield-mk4-equipment", + sprite = + { + filename = "__space-exploration-graphics__/graphics/equipment/energy-shield-cyan.png", + width = 64, + height = 64, + priority = "medium" + }, + shape = + { + width = 2, + height = 2, + type = "full" + }, + max_shield_value = 1000, + energy_source = + { + type = "electric", + buffer_capacity = "180kJ", + input_flow_limit = "10MW", + usage_priority = "primary-input" + }, + energy_per_shield = "30kJ", + categories = {"armor"} + }, + { + type = "item", + name = "energy-shield-mk5-equipment", + icon = "__space-exploration-graphics__/graphics/icons/energy-shield-blue.png", + icon_size = 64, + icon_mipmaps = 1, + placed_as_equipment_result = "energy-shield-mk5-equipment", + subgroup = "equipment", + order = "b[shield]-e[energy-shield]", + stack_size = 20 + }, + { + type = "energy-shield-equipment", + name = "energy-shield-mk5-equipment", + sprite = + { + filename = "__space-exploration-graphics__/graphics/equipment/energy-shield-blue.png", + width = 64, + height = 64, + priority = "medium" + }, + shape = + { + width = 2, + height = 2, + type = "full" + }, + max_shield_value = 2000, + energy_source = + { + type = "electric", + buffer_capacity = "180kJ", + input_flow_limit = "20MW", + usage_priority = "primary-input" + }, + energy_per_shield = "30kJ", + categories = {"armor"} + }, + { + type = "item", + name = "energy-shield-mk6-equipment", + icon = "__space-exploration-graphics__/graphics/icons/energy-shield-magenta.png", + icon_size = 64, + icon_mipmaps = 1, + placed_as_equipment_result = "energy-shield-mk6-equipment", + subgroup = "equipment", + order = "b[shield]-f[energy-shield]", + stack_size = 20 + }, + { + type = "energy-shield-equipment", + name = "energy-shield-mk6-equipment", + sprite = + { + filename = "__space-exploration-graphics__/graphics/equipment/energy-shield-magenta.png", + width = 64, + height = 64, + priority = "medium" + }, + shape = + { + width = 2, + height = 2, + type = "full" + }, + max_shield_value = 4000, + energy_source = + { + type = "electric", + buffer_capacity = "180kJ", + input_flow_limit = "40MW", + usage_priority = "primary-input" + }, + energy_per_shield = "30kJ", + categories = {"armor"} + }, +} diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/gate.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/gate.lua new file mode 100644 index 0000000..a1d0c82 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/gate.lua @@ -0,0 +1,17 @@ +local data_util = require("data_util") + +-- fragments +for i = 1, 13, 1 do + data:extend({{ + type = "item", + name = data_util.mod_prefix .. "gate-fragment-"..i, + localised_name = {"item-name."..data_util.mod_prefix .. "gate-fragment"}, + icon = "__space-exploration-graphics__/graphics/icons/gate/fragment-"..i..".png", + icon_size = 64, + order = "a[ancient]-g[gate]-a", + stack_size = 1, + subgroup = "ancient", + place_result = data_util.mod_prefix .. "gate-fragment-"..i, + flags = { "hidden" }, + }}) +end diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/items.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/items.lua new file mode 100644 index 0000000..b35409b --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/items.lua @@ -0,0 +1,1270 @@ +local data_util = require("data_util") +data.raw.item["rocket-silo"].subgroup = "rocket-logistics" +data.raw.item["rocket-silo"].order = "a-a-a" + +data.raw.item["rocket-control-unit"].subgroup = "rocket-intermediate-product" +data.raw.item["low-density-structure"].subgroup = "rocket-intermediate-product" +data.raw.item["low-density-structure"].order = "b" +data.raw.item["low-density-structure"].stack_size = 50 +data.raw.item["rocket-fuel"].subgroup = "rocket-intermediate-product" + + + +if not data.raw.item["sand"] then + data:extend({ + { + icon = "__space-exploration-graphics__/graphics/icons/sand.png", + icon_size = 64, + name = "sand", + order = "a[wood]-b-b", + stack_size = 200, + subgroup = "raw-material", + type = "item" + } + }) +end + +if not data.raw.item["glass"] then + data:extend({ + { + icon = "__space-exploration-graphics__/graphics/icons/glass.png", + icon_size = 64, + name = "glass", + order = "a[wood]-b-c", + stack_size = 100, + subgroup = "raw-material", + type = "item" + } + }) +end + +-- item_group, sequence +--[[ +data:extend({ + { + action = { + action_delivery = { + target_effects = { + damage = { + amount = 50, -- 8, + type = "physical" + }, + type = "damage" + }, + type = "instant" + }, + type = "direct" + }, + durability = 10000, -- 5000 + icon = "__space-exploration-graphics__/graphics/icons/omega-tool.png", + icon_size = 64, + name = data_util.mod_prefix .. "omega-tool", + order = "a[mining]-b[steel-axe]", + speed = 100, --4, + stack_size = 5, + subgroup = "tool", + type = "mining-tool" + }, +})]]-- + +data:extend({ + { + type = "item", + name = data_util.mod_prefix .. "heat-shielding", + icon = "__space-exploration-graphics__/graphics/icons/heat-shielding.png", + icon_size = 64, + order = "a", + stack_size = 50, + subgroup = "rocket-intermediate-product", + }, + { + icon = "__space-exploration-graphics__/graphics/icons/accumulator.png", + icon_size = 64, + name = data_util.mod_prefix .. "space-accumulator", + order = data.raw.item.accumulator.order, + place_result = data_util.mod_prefix .. "space-accumulator", + stack_size = data.raw.item.accumulator.stack_size, + subgroup = "solar", + type = "item" + }, + { + icon = "__space-exploration-graphics__/graphics/icons/accumulator-2.png", + icon_size = 64, + name = data_util.mod_prefix .. "space-accumulator-2", + order = data.raw.item.accumulator.order, + place_result = data_util.mod_prefix .. "space-accumulator-2", + stack_size = data.raw.item.accumulator.stack_size, + subgroup = "solar", + type = "item" + }, + { + icon = "__space-exploration-graphics__/graphics/icons/solar-panel.png", + icon_size = 64, + name = data_util.mod_prefix .. "space-solar-panel", + order = "d[solar-panel]-a[solar-panel]-b", + place_result = data_util.mod_prefix .. "space-solar-panel", + stack_size = 20, + subgroup = "solar", + type = "item" + }, + { + icon = "__space-exploration-graphics__/graphics/icons/solar-panel-2.png", + icon_size = 64, + name = data_util.mod_prefix .. "space-solar-panel-2", + order = "d[solar-panel]-a[solar-panel]-b2", + place_result = data_util.mod_prefix .. "space-solar-panel-2", + stack_size = 20, + subgroup = "solar", + type = "item" + }, + { + icon = "__space-exploration-graphics__/graphics/icons/solar-panel-3.png", + icon_size = 64, + name = data_util.mod_prefix .. "space-solar-panel-3", + order = "d[solar-panel]-a[solar-panel]-b3", + place_result = data_util.mod_prefix .. "space-solar-panel-3", + stack_size = 20, + subgroup = "solar", + type = "item" + }, +}) + +local function make_item_sequence(item_group, items, set, icon_size) + for _, item in pairs(items) do + -- name, stack_size, icon_size, picture count + local item = type(item) == "string" and {item, 50} or item + local order = "a-" .. string.format("%02d", _) + local filename = item[1] .. ".png" + local proto = { + type = "item", + name = data_util.mod_prefix .. item[1], + icon = "__space-exploration-graphics__/graphics/icons/" .. (set == "catalogue" and "catalogue/" or "") .. filename, + icon_size = set == "catalogue" and 64 or (item[3] or (icon_size or 64)), + subgroup = item_group, + order = order, + stack_size = item[2] + } + if string.find(item[1], "catalogue", 1, true) then + proto.pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/" .. (set == "catalogue" and "catalogue/" or "") .. filename, + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-catalogue-" .. (item[1]):sub(-1)..".png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + end + if item[4] then + local baseFileName = "__space-exploration-graphics__/graphics/icons/" .. (set == "catalogue" and "catalogue/" or "") .. item[1] + proto.pictures = { + { size = 64, filename = baseFileName .. ".png", scale = 0.25 }, + { size = 64, filename = baseFileName .. "-1" .. ".png", scale = 0.25 }, + { size = 64, filename = baseFileName .. "-2" .. ".png", scale = 0.25 }, + { size = 64, filename = baseFileName .. "-3" .. ".png", scale = 0.25 } + } + end + data:extend({proto}) + --log(data_util.mod_prefix .. item[1]) + end +end + +local function make_data_item_sequence(item_group, items, stack_size, icon_size) + local stack_size = stack_size or 100 + for _, item in pairs(items) do + local item = type(item) == "string" and {item, 50} or item + local order = "a-" .. string.format("%02d", _) + data:extend({{ + type = "item", + name = data_util.mod_prefix .. item[1] .. "-data", + icon = "__space-exploration-graphics__/graphics/icons/data/" .. item[1] .. ".png", + icon_size = icon_size or 64, + subgroup = item_group, + order = order, + stack_size = item[2] + }}) + --log(data_util.mod_prefix .. item[1] .. "-data") + end +end + +--[[ +make_item_sequence("data-catalogue-astronomic", { + "astronomic-catalogue-1", "astronomic-catalogue-2", "astronomic-catalogue-3", "astronomic-catalogue-4", "astronomic-insight"}, "catalogue") +make_item_sequence("data-catalogue-energy", { + "energy-catalogue-1", "energy-catalogue-2", "energy-catalogue-3", "energy-catalogue-4", "energy-insight"}, "catalogue") +make_item_sequence("data-catalogue-biological", { + "biological-catalogue-1", "biological-catalogue-2", "biological-catalogue-3", "biological-catalogue-4", "biological-insight"}, "catalogue") +make_item_sequence("data-catalogue-material", { + "material-catalogue-1", "material-catalogue-2", "material-catalogue-3", "material-catalogue-4", "material-insight"}, "catalogue") +]] + +make_data_item_sequence("data-significant", { "significant"}) +make_data_item_sequence("data-generic", {"empty", "junk", "broken", + "machine-learning"}, nil, 64) +data.raw.item[data_util.mod_prefix .. "broken-data"].icon_size = 64 +data.raw.item[data_util.mod_prefix .. "empty-data"].order = "b" +data.raw.item[data_util.mod_prefix .. "machine-learning-data"].order = "c" +--[[ +data:extend({ + { + type = "item", + name = data_util.mod_prefix .. "universal-catalogue", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/universal-catalogue.png", + icon_size = 64, + subgroup = "data-generic", + order = "d", + stack_size = 50 + } +}) +]] + +make_data_item_sequence("data-astronomic", { + "visible-observation", + "infrared-observation", + "uv-observation", + "astrometric", + --"doppler-shift", + + "microwave-observation", + "xray-observation", + "gravitational-lensing", + "gravity-wave", + + "radio-observation", + "gammaray-observation", + "darkmatter", + "negative-pressure", + + "dark-energy", + "micro-black-hole", + --"timespace-anomaly", + "zero-point-energy", +}) + +make_data_item_sequence("data-energy", { + "conductivity", + --"ion-spectrometry", + "electromagnetic-field", + "polarisation", + "radiation", + + "quantum-phenomenon", + "atomic", + "subatomic", + "forcefield", + + "superconductivity", + "quark", + "entanglement", + "lepton", + + "boson", + "fusion-test", + --"singularity", + "magnetic-monopole", +}) + +make_data_item_sequence("data-biological", { + "bio-combustion", + --"bio-spectral", + "biomechanical", + "biochemical", + "genetic", + + "bio-combustion-resistance", + "experimental-genetic", + "biochemical-resistance", + "biomechanical-resistance", + + "bioelectrics", + "cryogenics", + "decompression", + "radiation-exposure", + + "comparative-genetic", + "decompression-resistance", + "neural-anomaly", + "radiation-exposure-resistance", +}) + +make_data_item_sequence("data-material", { + "cold-thermodynamics", + "hot-thermodynamics", + "tensile-strength", + "compressive-strength", + --"shear-strength", + + "rigidity", + "pressure-containment", + "corrosion-resistance", + "impact-shielding", + + "friction", + "ballistic-shielding", + "radiation-shielding", + "explosion-shielding", + + "electrical-shielding", + "laser-shielding", + "particle-beam-shielding", + "experimental-alloys", +}) + +make_item_sequence("space-observation-frame", { + {"observation-frame-blank", 200}, + {"observation-frame-radio", 200}, + {"observation-frame-microwave", 200}, + {"observation-frame-infrared", 200}, + {"observation-frame-visible", 200}, + {"observation-frame-uv", 200}, + {"observation-frame-xray", 200}, + {"observation-frame-gammaray", 200}, +}) + +make_item_sequence("space-canisters", { + {"canister", 50}, + {"magnetic-canister", 50}, + {"plasma-canister", 50}, + {"antimatter-canister", 50}, + {"empty-lifesupport-canister", 50}, + {"lifesupport-canister", 50}, + {"used-lifesupport-canister", 50}, +}) +data.raw.item[data_util.mod_prefix .. "antimatter-canister"].fuel_value = "20000MJ" +data.raw.item[data_util.mod_prefix .. "antimatter-canister"].fuel_category = "antimatter" +data.raw.item[data_util.mod_prefix .. "antimatter-canister"].burnt_result = data_util.mod_prefix .. "magnetic-canister" + +make_item_sequence("space-bioculture", { + {"nutrient-vat", 5}, + {"bioculture", 5}, + {"experimental-bioculture", 5}, + {"specimen", 5}, + {"experimental-specimen", 5}, + {"significant-specimen", 5}, +}, nil, 64) + +make_item_sequence("space-components", { + {"scrap", 50, 64, 4}, + {"contaminated-scrap", 50, 64, 4}, + "space-mirror", + "gammaray-detector", + {"material-testing-pack", 10}, + --"experimental-material", + {"nanomaterial", 50, 64}, + --"experimental-superconductor", + + {"superconductive-cable", 50, 64}, + + {"aeroframe-pole", 50, 64}, + {"aeroframe-scaffold", 50, 64}, + {"aeroframe-bulkhead", 50, 64}, + {"lattice-pressure-vessel", 50, 64}, + + {"heavy-girder", 50, 64}, + {"heavy-bearing", 50, 64}, + {"heavy-composite", 50, 64}, + {"heavy-assembly", 50, 64}, + + {"vitalic-acid", 50, 64}, + {"bioscrubber", 50, 64}, + {"vitalic-reagent", 50, 64}, + {"vitalic-epoxy", 50, 64}, + {"self-sealing-gel", 50, 64}, + + {"holmium-cable", 50, 64}, + {"holmium-solenoid", 50, 64}, + {"quantum-processor", 50, 64}, + {"dynamic-emitter", 50, 64}, + + {"naquium-cube", 8, 64}, + {"naquium-tessaract", 1, 64}, + {"naquium-processor", 1, 64}, +}, nil, 64) + +data.raw.item[data_util.mod_prefix .. "scrap"].pictures = { + {filename = "__space-exploration-graphics__/graphics/icons/scrap.png",scale = 0.25,size = 64}, + {filename = "__space-exploration-graphics__/graphics/icons/scrap-1.png",scale = 0.25,size = 64}, + {filename = "__space-exploration-graphics__/graphics/icons/scrap-2.png",scale = 0.25,size = 64}, + {filename = "__space-exploration-graphics__/graphics/icons/scrap-3.png",scale = 0.25,size = 64} +} +data.raw.item[data_util.mod_prefix .. "contaminated-scrap"].pictures = { + {filename = "__space-exploration-graphics__/graphics/icons/contaminated-scrap.png",scale = 0.25,size = 64}, + {filename = "__space-exploration-graphics__/graphics/icons/contaminated-scrap-1.png",scale = 0.25,size = 64}, + {filename = "__space-exploration-graphics__/graphics/icons/contaminated-scrap-2.png",scale = 0.25,size = 64}, + {filename = "__space-exploration-graphics__/graphics/icons/contaminated-scrap-3.png",scale = 0.25,size = 64} +} + +make_item_sequence("data-generic", { + {"data-storage-substrate", 100}, + {"data-storage-substrate-cleaned", 100}, +}, nil, 64) + +data.raw.item[data_util.mod_prefix .. "material-testing-pack"].icon = "__space-exploration-graphics__/graphics/icons/crate.png" + +data:extend({ + { + type = "item", + name = data_util.mod_prefix .. "satellite-telemetry", + icon = "__space-exploration-graphics__/graphics/icons/satellite-telemetry.png", + icon_size = 64, + order = "n-b", + subgroup = "rocket-intermediate-product", + stack_size = 50, + }, + + { + type = "item", + name = data_util.mod_prefix .. "astronomic-catalogue-1", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/astronomic-catalogue-1.png", + icon_size = 64, + order = "a-a", + subgroup = "data-catalogue-astronomic", + stack_size = 50, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/astronomic-catalogue-1.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-catalogue-1.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "item", + name = data_util.mod_prefix .. "astronomic-catalogue-2", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/astronomic-catalogue-2.png", + icon_size = 64, + order = "a-b", + subgroup = "data-catalogue-astronomic", + stack_size = 50, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/astronomic-catalogue-2.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-catalogue-2.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "item", + name = data_util.mod_prefix .. "astronomic-catalogue-3", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/astronomic-catalogue-3.png", + icon_size = 64, + order = "a-c", + subgroup = "data-catalogue-astronomic", + stack_size = 50, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/astronomic-catalogue-3.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-catalogue-3.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "item", + name = data_util.mod_prefix .. "astronomic-catalogue-4", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/astronomic-catalogue-4.png", + icon_size = 64, + order = "a-d", + subgroup = "data-catalogue-astronomic", + stack_size = 50, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/astronomic-catalogue-4.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-catalogue-4.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "item", + name = data_util.mod_prefix .. "astronomic-insight", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/astronomic-insight.png", + icon_size = 64, + order = "a-e", + subgroup = "data-catalogue-astronomic", + stack_size = 50, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/astronomic-insight.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-insight.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + + { + type = "item", + name = data_util.mod_prefix .. "biological-catalogue-1", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/biological-catalogue-1.png", + icon_size = 64, + order = "a-a", + subgroup = "data-catalogue-biological", + stack_size = 50, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/biological-catalogue-1.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-catalogue-1.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "item", + name = data_util.mod_prefix .. "biological-catalogue-2", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/biological-catalogue-2.png", + icon_size = 64, + order = "a-b", + subgroup = "data-catalogue-biological", + stack_size = 50, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/biological-catalogue-2.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-catalogue-2.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "item", + name = data_util.mod_prefix .. "biological-catalogue-3", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/biological-catalogue-3.png", + icon_size = 64, + order = "a-c", + subgroup = "data-catalogue-biological", + stack_size = 50, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/biological-catalogue-3.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-catalogue-3.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "item", + name = data_util.mod_prefix .. "biological-catalogue-4", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/biological-catalogue-4.png", + icon_size = 64, + order = "a-d", + subgroup = "data-catalogue-biological", + stack_size = 50, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/biological-catalogue-4.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-catalogue-4.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "item", + name = data_util.mod_prefix .. "biological-insight", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/biological-insight.png", + icon_size = 64, + order = "a-e", + subgroup = "data-catalogue-biological", + stack_size = 50, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/biological-insight.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-insight.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + + + { + type = "item", + name = data_util.mod_prefix .. "energy-catalogue-1", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/energy-catalogue-1.png", + icon_size = 64, + order = "a-a", + subgroup = "data-catalogue-energy", + stack_size = 50, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/energy-catalogue-1.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-catalogue-1.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "item", + name = data_util.mod_prefix .. "energy-catalogue-2", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/energy-catalogue-2.png", + icon_size = 64, + order = "a-b", + subgroup = "data-catalogue-energy", + stack_size = 50, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/energy-catalogue-2.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-catalogue-2.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "item", + name = data_util.mod_prefix .. "energy-catalogue-3", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/energy-catalogue-3.png", + icon_size = 64, + order = "a-c", + subgroup = "data-catalogue-energy", + stack_size = 50, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/energy-catalogue-3.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-catalogue-3.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "item", + name = data_util.mod_prefix .. "energy-catalogue-4", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/energy-catalogue-4.png", + icon_size = 64, + order = "a-d", + subgroup = "data-catalogue-energy", + stack_size = 50, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/energy-catalogue-4.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-catalogue-4.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "item", + name = data_util.mod_prefix .. "energy-insight", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/energy-insight.png", + icon_size = 64, + order = "a-e", + subgroup = "data-catalogue-energy", + stack_size = 50, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/energy-insight.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-insight.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + + + { + type = "item", + name = data_util.mod_prefix .. "material-catalogue-1", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/material-catalogue-1.png", + icon_size = 64, + order = "a-a", + subgroup = "data-catalogue-material", + stack_size = 50, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/material-catalogue-1.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-catalogue-1.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "item", + name = data_util.mod_prefix .. "material-catalogue-2", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/material-catalogue-2.png", + icon_size = 64, + order = "a-b", + subgroup = "data-catalogue-material", + stack_size = 50, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/material-catalogue-2.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-catalogue-2.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "item", + name = data_util.mod_prefix .. "material-catalogue-3", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/material-catalogue-3.png", + icon_size = 64, + order = "a-c", + subgroup = "data-catalogue-material", + stack_size = 50, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/material-catalogue-3.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-catalogue-3.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "item", + name = data_util.mod_prefix .. "material-catalogue-4", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/material-catalogue-4.png", + icon_size = 64, + order = "a-d", + subgroup = "data-catalogue-material", + stack_size = 50, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/material-catalogue-4.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-catalogue-4.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "item", + name = data_util.mod_prefix .. "material-insight", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/material-insight.png", + icon_size = 64, + order = "a-e", + subgroup = "data-catalogue-material", + stack_size = 50, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/material-insight.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-insight.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + + + + { + type = "item", + name = data_util.mod_prefix .. "deep-catalogue-1", + icons = { + {icon = "__space-exploration-graphics__/graphics/icons/catalogue/base-catalogue-1.png", icon_size = 64}, + {icon = "__space-exploration-graphics__/graphics/icons/catalogue/mask-catalogue-1.png", icon_size = 64}, + }, + icon_size = 64, + order = "a-a", + subgroup = "data-catalogue-deep", + stack_size = 50, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/base-catalogue-1.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-catalogue-1.png", + scale = 0.25, + size = 64, + draw_as_glow = true + } + } + } + } + }, + { + type = "item", + name = data_util.mod_prefix .. "deep-catalogue-2", + icons = { + {icon = "__space-exploration-graphics__/graphics/icons/catalogue/base-catalogue-2.png", icon_size = 64}, + {icon = "__space-exploration-graphics__/graphics/icons/catalogue/mask-catalogue-2.png", icon_size = 64}, + }, + icon_size = 64, + order = "a-b", + subgroup = "data-catalogue-deep", + stack_size = 50, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/base-catalogue-2.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-catalogue-2.png", + scale = 0.25, + size = 64, + draw_as_glow = true + } + } + } + } + }, + { + type = "item", + name = data_util.mod_prefix .. "deep-catalogue-3", + icons = { + {icon = "__space-exploration-graphics__/graphics/icons/catalogue/base-catalogue-3.png", icon_size = 64}, + {icon = "__space-exploration-graphics__/graphics/icons/catalogue/mask-catalogue-3.png", icon_size = 64}, + }, + icon_size = 64, + order = "a-c", + subgroup = "data-catalogue-deep", + stack_size = 50, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/base-catalogue-3.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-catalogue-3.png", + scale = 0.25, + size = 64, + draw_as_glow = true + } + } + } + } + }, + { + type = "item", + name = data_util.mod_prefix .. "deep-catalogue-4", + icons = { + {icon = "__space-exploration-graphics__/graphics/icons/catalogue/base-catalogue-4.png", icon_size = 64}, + {icon = "__space-exploration-graphics__/graphics/icons/catalogue/mask-catalogue-4.png", icon_size = 64}, + }, + icon_size = 64, + order = "a-d", + subgroup = "data-catalogue-deep", + stack_size = 50, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/base-catalogue-4.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-catalogue-4.png", + scale = 0.25, + size = 64, + draw_as_glow = true + } + } + } + } + }, + { + type = "item", + name = data_util.mod_prefix .. "nano-engineering-data", + icon = "__space-exploration-graphics__/graphics/icons/data/nano-engineering.png", + icon_size = 64, + order = "a-a", + subgroup = "data-deep", + stack_size = 50, + }, + { + type = "item", + name = data_util.mod_prefix .. "naquium-structural-data", + icon = "__space-exploration-graphics__/graphics/icons/data/naquium-structural.png", + icon_size = 64, + order = "a-a", + subgroup = "data-deep", + stack_size = 50, + }, + { + type = "item", + name = data_util.mod_prefix .. "naquium-energy-data", + icon = "__space-exploration-graphics__/graphics/icons/data/naquium-energy.png", + icon_size = 64, + order = "a-a", + subgroup = "data-deep", + stack_size = 50, + }, + { + type = "item", + name = data_util.mod_prefix .. "annihilation-data", + icon = "__space-exploration-graphics__/graphics/icons/data/annihilation.png", + icon_size = 64, + order = "b-a", + subgroup = "data-deep", + stack_size = 50, + }, + { + type = "item", + name = data_util.mod_prefix .. "hyperlattice-data", + icon = "__space-exploration-graphics__/graphics/icons/data/hyperlattice.png", + icon_size = 64, + order = "b-a", + subgroup = "data-deep", + stack_size = 50, + }, + { + type = "item", + name = data_util.mod_prefix .. "timespace-anomaly-data", + icon = "__space-exploration-graphics__/graphics/icons/data/timespace-anomaly.png", + icon_size = 64, + order = "b-a", + subgroup = "data-deep", + stack_size = 50, + }, + { + type = "item", + name = data_util.mod_prefix .. "singularity-data", + icon = "__space-exploration-graphics__/graphics/icons/data/singularity.png", + icon_size = 64, + order = "b-a", + subgroup = "data-deep", + stack_size = 50, + }, + { + type = "item", + name = data_util.mod_prefix .. "star-probe-data", + icon = "__space-exploration-graphics__/graphics/icons/data/star-probe.png", + icon_size = 64, + order = "z", + subgroup = "data-energy", + stack_size = 50, + }, + { + type = "item", + name = data_util.mod_prefix .. "belt-probe-data", + icon = "__space-exploration-graphics__/graphics/icons/data/belt-probe.png", + icon_size = 64, + order = "z", + subgroup = "data-astronomic", + stack_size = 50, + }, + { + type = "item", + name = data_util.mod_prefix .. "void-probe-data", + icon = "__space-exploration-graphics__/graphics/icons/data/void-probe.png", + icon_size = 64, + order = "a-a", + subgroup = "data-deep", + stack_size = 50, + }, + { + type = "item", + name = data_util.mod_prefix .. "space-fold-data", + icon = "__space-exploration-graphics__/graphics/icons/data/space-fold.png", + icon_size = 64, + order = "c-a", + subgroup = "data-deep", + stack_size = 50, + }, + { + type = "item", + name = data_util.mod_prefix .. "space-warp-data", + icon = "__space-exploration-graphics__/graphics/icons/data/space-warp.png", + icon_size = 64, + order = "c-a", + subgroup = "data-deep", + stack_size = 50, + }, + { + type = "item", + name = data_util.mod_prefix .. "space-dialation-data", + icon = "__space-exploration-graphics__/graphics/icons/data/space-dialation.png", + icon_size = 64, + order = "c-a", + subgroup = "data-deep", + stack_size = 50, + }, + { + type = "item", + name = data_util.mod_prefix .. "space-injection-data", + icon = "__space-exploration-graphics__/graphics/icons/data/space-injection.png", + icon_size = 64, + order = "c-a", + subgroup = "data-deep", + stack_size = 50, + }, + { + type = "item", + name = data_util.mod_prefix .. "interstellar-data", + icon = "__space-exploration-graphics__/graphics/icons/data/interstellar.png", + icon_size = 64, + order = "d-a", + subgroup = "data-deep", + stack_size = 50, + }, + { + type = "item", + name = data_util.mod_prefix .. "teleportation-data", + icon = "__space-exploration-graphics__/graphics/icons/data/teleportation.png", + icon_size = 64, + order = "d-a", + subgroup = "data-deep", + stack_size = 50, + }, + { + type = "item", + name = data_util.mod_prefix .. "wormhole-data", + icon = "__space-exploration-graphics__/graphics/icons/data/wormhole.png", + icon_size = 64, + order = "d-a", + subgroup = "data-deep", + stack_size = 50, + }, + { + type = "item", + name = data_util.mod_prefix .. "rhga-data", + icon = "__space-exploration-graphics__/graphics/icons/data/rhga.png", + icon_size = 64, + order = "d-a", + subgroup = "data-deep", + stack_size = 50, + }, + + { + type = "item", + name = data_util.mod_prefix .. "star-probe", + icons = { + { icon = "__space-exploration-graphics__/graphics/icons/satellite.png", icon_size = 64}, + { icon = "__space-exploration-graphics__/graphics/icons/satellite-mask.png", icon_size = 64, tint = {r=1,g=0,b=0.5}}, + }, + icon_size = 64, + order = "z", + subgroup = "data-energy", + stack_size = 1, + rocket_launch_product = { data_util.mod_prefix .. "star-probe-data", 1000} + }, + { + type = "item", + name = data_util.mod_prefix .. "belt-probe", + icons = { + { icon = "__space-exploration-graphics__/graphics/icons/satellite.png", icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/satellite-mask.png", icon_size = 64, tint = {r=0,g=0.5,b=1}}, + }, + icon_size = 64, + order = "z", + subgroup = "data-astronomic", + stack_size = 1, + rocket_launch_product = { data_util.mod_prefix .. "belt-probe-data", 1000} + }, + { + type = "item", + name = data_util.mod_prefix .. "void-probe", + icons = { + { icon = "__space-exploration-graphics__/graphics/icons/satellite.png", icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/satellite-mask.png", icon_size = 64, tint = {r=0.1,g=0,b=0.5}}, + }, + icon_size = 64, + order = "a-d", + subgroup = "data-deep", + stack_size = 1, + rocket_launch_product = { data_util.mod_prefix .. "void-probe-data", 1000} + }, + +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/medpack.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/medpack.lua new file mode 100644 index 0000000..2cdf276 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/medpack.lua @@ -0,0 +1,198 @@ +local data_util = require("data_util") + +data.raw.capsule["raw-fish"].capsule_action = { + attack_parameters = { + ammo_category = "capsule", + ammo_type = { + action = { + action_delivery = { + target_effects = { + damage = { + amount = -10, + type = "poison" + }, + type = "damage" + }, + type = "instant" + }, + type = "direct" + }, + category = "capsule", + target_type = "position" + }, + cooldown = 60, + range = 0, + type = "projectile" + }, + type = "use-on-self" +} +data:extend({ + { + icon = "__space-exploration-graphics__/graphics/icons/medpack-1.png", + icon_size = 64, + name = data_util.mod_prefix .. "medpack", + order = "aa", + stack_size = 20, + subgroup = "tool", + type = "capsule", + capsule_action = { + type = "use-on-self", + attack_parameters = { + activation_type = "consume", + ammo_category = "capsule", + ammo_type = { + action = { + action_delivery = { + target_effects = { + { + type = "play-sound", + sound = { filename = "__base__/sound/character-corpse-open.ogg", volume = 0.5 }, + }, + { + damage = { + amount = -50, + type = "poison" + }, + type = "damage" + } + }, + type = "instant" + }, + type = "direct" + }, + category = "capsule", + target_type = "position" + }, + cooldown = 60, + range = 0, + type = "projectile" + }, + }, + }, + { + icon = "__space-exploration-graphics__/graphics/icons/medpack-2.png", + icon_size = 64, + name = data_util.mod_prefix .. "medpack-2", + order = "aa", + stack_size = 20, + subgroup = "tool", + type = "capsule", + capsule_action = { + type = "use-on-self", + attack_parameters = { + activation_type = "consume", + ammo_category = "capsule", + ammo_type = { + action = { + action_delivery = { + target_effects = { + { + type = "play-sound", + sound = { filename = "__base__/sound/character-corpse-open.ogg", volume = 0.5 }, + }, + { + damage = { + amount = -100, + type = "poison" + }, + type = "damage" + } + }, + type = "instant" + }, + type = "direct" + }, + category = "capsule", + target_type = "position" + }, + cooldown = 60, + range = 0, + type = "projectile" + }, + }, + }, + { + icon = "__space-exploration-graphics__/graphics/icons/medpack-3.png", + icon_size = 64, + name = data_util.mod_prefix .. "medpack-3", + order = "aa", + stack_size = 20, + subgroup = "tool", + type = "capsule", + capsule_action = { + type = "use-on-self", + attack_parameters = { + activation_type = "consume", + ammo_category = "capsule", + ammo_type = { + action = { + action_delivery = { + target_effects = { + { + type = "play-sound", + sound = { filename = "__base__/sound/character-corpse-open.ogg", volume = 0.5 }, + }, + { + damage = { + amount = -200, + type = "poison" + }, + type = "damage" + } + }, + type = "instant" + }, + type = "direct" + }, + category = "capsule", + target_type = "position" + }, + cooldown = 60, + range = 0, + type = "projectile" + }, + }, + }, + { + icon = "__space-exploration-graphics__/graphics/icons/medpack-4.png", + icon_size = 64, + name = data_util.mod_prefix .. "medpack-4", + order = "aa", + stack_size = 20, + subgroup = "tool", + type = "capsule", + capsule_action = { + type = "use-on-self", + attack_parameters = { + activation_type = "consume", + ammo_category = "capsule", + ammo_type = { + action = { + action_delivery = { + target_effects = { + { + type = "play-sound", + sound = { filename = "__base__/sound/character-corpse-open.ogg", volume = 0.5 }, + }, + { + damage = { + amount = -400, + type = "poison" + }, + type = "damage" + } + }, + type = "instant" + }, + type = "direct" + }, + category = "capsule", + target_type = "position" + }, + cooldown = 60, + range = 0, + type = "projectile" + }, + }, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/meteor-defence.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/meteor-defence.lua new file mode 100644 index 0000000..77b627f --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/meteor-defence.lua @@ -0,0 +1,101 @@ +local data_util = require("data_util") + + +data:extend({ + { + type = "ammo-category", + name = data_util.mod_prefix .. "meteor-point-defence", + bonus_gui_order = "z-z", + }, + { + type = "ammo-category", + name = data_util.mod_prefix .. "meteor-defence", + bonus_gui_order = "z-z", + }, + { + type = "item", + name = data_util.mod_prefix .. "meteor-point-defence", + icons = { + {icon="__space-exploration-graphics__/graphics/icons/meteor-point-defence-base.png", icon_size = 64}, + {icon="__space-exploration-graphics__/graphics/icons/meteor-point-defence-mask.png", icon_size = 64, tint = {r=255,g=0,b=0}} + }, + order = "a-a", + subgroup = "surface-defense", + stack_size = 50, + place_result = data_util.mod_prefix .. "meteor-point-defence-container", + }, + { + type = "ammo", + name = data_util.mod_prefix .. "meteor-point-defence-ammo", + icon = "__space-exploration-graphics__/graphics/icons/meteor-point-defence-ammo.png", + icon_size = 64, + order = "a-b", + subgroup = "surface-defense", + stack_size = 50, + ammo_type = + { + category = data_util.mod_prefix .. "meteor-point-defence", + target_type = "entity", + action = { + { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + { + damage = { + amount = 50, + type = "physical" + }, + type = "damage" + }, + } + } + }, + } + }, + magazine_size = 1, + }, + { + type = "item", + name = data_util.mod_prefix .. "meteor-defence", + icon = "__space-exploration-graphics__/graphics/icons/meteor-defence.png", + icon_size = 64, + order = "b-a", + subgroup = "surface-defense", + stack_size = 1, + place_result = data_util.mod_prefix .. "meteor-defence-container", + }, + { + type = "ammo", + name = data_util.mod_prefix .. "meteor-defence-ammo", + icon = "__space-exploration-graphics__/graphics/icons/meteor-defence-ammo.png", + icon_size = 64, + order = "b-b", + subgroup = "surface-defense", + stack_size = 20, + ammo_type = + { + category = data_util.mod_prefix .. "meteor-defence", + target_type = "entity", + action = { + { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + { + damage = { + amount = 80, + type = "physical" + }, + type = "damage" + }, + } + } + }, + } + }, + magazine_size = 1, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/platforms.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/platforms.lua new file mode 100644 index 0000000..545aa86 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/platforms.lua @@ -0,0 +1,54 @@ +local data_util = require("data_util") +data:extend({ + --[[{ + type = "item", + name = "space", + icon = "__space-exploration-graphics__/graphics/icon/starfield-sparse.png", + icon_size = 64, + subgroup = "terrain", + order = "t[starfield]-a[sparse]", + stack_size = 100, + place_as_tile = + { + result = "space", + condition_size = 0, + condition = { "water-tile" } + } + },]]-- + { + type = "item", + name = data_util.mod_prefix .. "space-platform-scaffold", + icon = "__space-exploration-graphics__/graphics/icons/space-platform-scaffold.png", + icon_size = 64, + subgroup = "terrain", + order = "s[space-platform]-a[scaffold]", + stack_size = 100, + place_as_tile = + { + result = data_util.mod_prefix .. "space-platform-scaffold", + condition_size = 1, + condition = { + "water-tile", + "ground-tile", + } + } + }, + { + type = "item", + name = data_util.mod_prefix .. "space-platform-plating", + icon = "__space-exploration-graphics__/graphics/icons/space-platform-plating.png", + icon_size = 64, + subgroup = "terrain", + order = "s[space-platform]-b[plating]", + stack_size = 100, + place_as_tile = + { + result = data_util.mod_prefix .. "space-platform-plating", + condition_size = 1, + condition = { + "water-tile", + "ground-tile", + } + } + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/resources.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/resources.lua new file mode 100644 index 0000000..0f90aca --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/resources.lua @@ -0,0 +1,582 @@ +local data_util = require("data_util") + +data:extend({ + { + type = "item", + name = data_util.mod_prefix .. "water-ice", + icon = "__space-exploration-graphics__/graphics/icons/water-ice.png", + icon_size = 64, + subgroup = "raw-resource", + order = "i-a", + stack_size = 200, + }, + + + { + type = "item", + name = data_util.mod_prefix .. "methane-ice", + icon = "__space-exploration-graphics__/graphics/icons/methane-ice.png", + icon_size = 64, + order = "i-b", + stack_size = 200, + subgroup = "raw-resource", + }, + + + { + type = "item", + name = data_util.mod_prefix .. "cryonite", + icon = "__space-exploration-graphics__/graphics/icons/cryonite.png", + icon_size = 64, + order = "h-a[cryonite]", + pictures = { + { + filename = "__space-exploration-graphics__/graphics/icons/cryonite.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/cryonite-01.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/cryonite-02.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/cryonite-03.png", + scale = 0.25, + size = 64 + } + }, + stack_size = 50, + subgroup = "raw-resource", + }, + { + type = "item", + name = data_util.mod_prefix .. "cryonite-crushed", + icon = "__space-exploration-graphics__/graphics/icons/cryonite-crushed.png", + icon_size = 64, + order = "r[resource]-c[crushed]-a", + stack_size = 50, + subgroup = "pulverised", + }, + { + type = "item", + name = data_util.mod_prefix .. "cryonite-washed", + icon = "__space-exploration-graphics__/graphics/icons/cryonite-washed.png", + icon_size = 64, + order = "r[resource]-d[washed]-a", + stack_size = 50, + subgroup = "washed", + }, + { + type = "item", + name = data_util.mod_prefix .. "cryonite-rod", + icon = "__space-exploration-graphics__/graphics/icons/cryonite-rod.png", + icon_size = 64, + order = "r[resource]-g[extract]-a", + stack_size = 100, + subgroup = "raw-material", + }, + { + type = "item", + name = data_util.mod_prefix .. "cryonite-ion-exchange-beads", + icon = "__space-exploration-graphics__/graphics/icons/cryonite-ion-exchange-beads.png", + icon_size = 64, + order = "r[resource]-h[extract]-a", + stack_size = 200, + subgroup = "raw-material", + }, + + + + + + { + type = "item", + name = data_util.mod_prefix .. "beryllium-ore", + icon = "__space-exploration-graphics__/graphics/icons/beryllium-ore.png", + icon_size = 64, + order = "h-d[beryllium-ore]", + pictures = { + { + filename = "__space-exploration-graphics__/graphics/icons/beryllium-ore.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/beryllium-ore-01.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/beryllium-ore-02.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/beryllium-ore-03.png", + scale = 0.25, + size = 64 + } + }, + stack_size = 100, + subgroup = "raw-resource", + }, + { + type = "item", + name = data_util.mod_prefix .. "beryllium-ore-crushed", + icon = "__space-exploration-graphics__/graphics/icons/beryllium-ore-crushed.png", + icon_size = 64, + order = "r[resource]-c[crushed]-d", + stack_size = 100, + subgroup = "pulverised", + }, + { + type = "item", + name = data_util.mod_prefix .. "beryllium-sulfate", + icon = "__space-exploration-graphics__/graphics/icons/beryllium-sulfate.png", + icon_size = 64, + order = "r[resource]-d[washed]-d", + stack_size = 100, + subgroup = "washed", + }, + { + type = "fluid", + name = data_util.mod_prefix .. "beryllium-hydroxide", + default_temperature = 25, + heat_capacity = "0.1KJ", + max_temperature = 100, + base_color = {r=73, g=112, b=79}, + flow_color = {r=156, g=178, b=159}, + icon = "__space-exploration-graphics__/graphics/icons/fluid/beryllium-hydroxide.png", + icon_size = 64, + pressure_to_speed_ratio = 0.4, + flow_to_energy_ratio = 0.59, + order = "r[resources]-b", + }, + { + type = "item", + name = data_util.mod_prefix .. "beryllium-powder", + icon = "__space-exploration-graphics__/graphics/icons/beryllium-powder.png", + icon_size = 64, + order = "r[resource]-p[powder]-d", + stack_size = 100, + subgroup = "washed", + }, + { + type = "item", + name = data_util.mod_prefix .. "beryllium-ingot", + icon = "__space-exploration-graphics__/graphics/icons/beryllium-ingot.png", + icon_size = 64, + order = "r[resource]-i[ingot]-e", + stack_size = 100, + subgroup = "ingots", + }, + { + type = "item", + name = data_util.mod_prefix .. "beryllium-plate", + icon = "__space-exploration-graphics__/graphics/icons/beryllium-plate.png", + icon_size = 64, + order = "r[resource]-p[plate]-e", + stack_size = 200, + subgroup = "plates", + }, + + + + { + type = "item", + name = data_util.mod_prefix .. "holmium-ore", + icon = "__space-exploration-graphics__/graphics/icons/holmium-ore.png", + icon_size = 64, + order = "h-e[holmium-ore]", + pictures = { + { + filename = "__space-exploration-graphics__/graphics/icons/holmium-ore.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/holmium-ore-01.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/holmium-ore-02.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/holmium-ore-03.png", + scale = 0.25, + size = 64 + } + }, + stack_size = 50, + subgroup = "raw-resource", + }, + { + type = "item", + name = data_util.mod_prefix .. "holmium-ore-crushed", + icon = "__space-exploration-graphics__/graphics/icons/holmium-ore-crushed.png", + icon_size = 64, + order = "r[resource]-c[crushed]-e", + stack_size = 50, + subgroup = "pulverised", + }, + { + type = "item", + name = data_util.mod_prefix .. "holmium-ore-washed", + icon = "__space-exploration-graphics__/graphics/icons/holmium-ore-washed.png", + icon_size = 64, + order = "r[resource]-d[washed]-e", + stack_size = 50, + subgroup = "washed", + }, + { + type = "item", + name = data_util.mod_prefix .. "holmium-powder", + icon = "__space-exploration-graphics__/graphics/icons/holmium-powder.png", + icon_size = 64, + order = "r[resource]-p[powder]-e", + stack_size = 50, + subgroup = "washed", + }, + { + type = "item", + name = data_util.mod_prefix .. "holmium-ingot", + icon = "__space-exploration-graphics__/graphics/icons/holmium-ingot.png", + icon_size = 64, + order = "r[resource]-i[ingot]-e", + stack_size = 50, + subgroup = "ingots", + }, + { + type = "item", + name = data_util.mod_prefix .. "holmium-plate", + icon = "__space-exploration-graphics__/graphics/icons/holmium-plate.png", + icon_size = 64, + order = "r[resource]-p[plate]-e", + stack_size = 100, + subgroup = "plates", + }, + + + + { + type = "item", + name = data_util.mod_prefix .. "iridium-ore", + icon = "__space-exploration-graphics__/graphics/icons/iridium-ore.png", + icon_size = 64, + order = "h-f[iridium-ore]", + pictures = { + { + filename = "__space-exploration-graphics__/graphics/icons/iridium-ore.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/iridium-ore-01.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/iridium-ore-02.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/iridium-ore-03.png", + scale = 0.25, + size = 64 + } + }, + stack_size = 40, + subgroup = "raw-resource", + }, + { + type = "item", + name = data_util.mod_prefix .. "iridium-ore-crushed", + icon = "__space-exploration-graphics__/graphics/icons/iridium-ore-crushed.png", + icon_size = 64, + order = "r[resource]-c[crushed]-f", + stack_size = 40, + subgroup = "pulverised", + }, + { + type = "item", + name = data_util.mod_prefix .. "iridium-ore-washed", + icon = "__space-exploration-graphics__/graphics/icons/iridium-ore-washed.png", + icon_size = 64, + order = "r[resource]-d[washed]-f", + stack_size = 40, + subgroup = "washed", + }, + { + type = "item", + name = data_util.mod_prefix .. "iridium-powder", + icon = "__space-exploration-graphics__/graphics/icons/iridium-powder.png", + icon_size = 64, + order = "r[resource]p[powder]-f", + stack_size = 30, + subgroup = "washed", + }, + { + type = "item", + name = data_util.mod_prefix .. "iridium-ingot", + icon = "__space-exploration-graphics__/graphics/icons/iridium-ingot.png", + icon_size = 64, + order = "r[resource]-i[ingot]-f", + stack_size = 20, + subgroup = "ingots", + }, + { + type = "item", + name = data_util.mod_prefix .. "iridium-plate", + icon = "__space-exploration-graphics__/graphics/icons/iridium-plate.png", + icon_size = 64, + order = "r[resource]-p[plate]-f", + stack_size = 40, + subgroup = "plates", + }, + + + + { + type = "item", + name = data_util.mod_prefix .. "naquium-ore", + icon = "__space-exploration-graphics__/graphics/icons/naquium-ore.png", + icon_size = 64, + order = "h-g[naquium-ore]", + pictures = { + { + filename = "__space-exploration-graphics__/graphics/icons/naquium-ore.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/naquium-ore-01.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/naquium-ore-02.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/naquium-ore-03.png", + scale = 0.25, + size = 64 + } + }, + stack_size = 10, + subgroup = "raw-resource", + }, + { + type = "item", + name = data_util.mod_prefix .. "naquium-ore-crushed", + icon = "__space-exploration-graphics__/graphics/icons/naquium-ore-crushed.png", + icon_size = 64, + order = "r[resource]-c[crushed]-g", + stack_size = 10, + subgroup = "pulverised", + }, + { + type = "item", + name = data_util.mod_prefix .. "naquium-ore-washed", + icon = "__space-exploration-graphics__/graphics/icons/naquium-ore-washed.png", + icon_size = 64, + order = "r[resource]-d[washed]-g", + stack_size = 10, + subgroup = "washed", + }, + { + type = "item", + name = data_util.mod_prefix .. "naquium-powder", + icon = "__space-exploration-graphics__/graphics/icons/naquium-powder.png", + icon_size = 64, + order = "r[resource]-p[powder]-g", + stack_size = 10, + subgroup = "washed", + }, + { + type = "item", + name = data_util.mod_prefix .. "naquium-ingot", + icon = "__space-exploration-graphics__/graphics/icons/naquium-ingot.png", + icon_size = 64, + order = "r[resource]-i[ingot]-g", + stack_size = 10, + subgroup = "ingots", + }, + { + type = "item", + name = data_util.mod_prefix .. "naquium-plate", + icon = "__space-exploration-graphics__/graphics/icons/naquium-plate.png", + icon_size = 64, + order = "r[resource]-p[plate]-g", + stack_size = 20, + subgroup = "plates", + }, + + + { + type = "item", + name = data_util.mod_prefix .. "vitamelange", + icon = "__space-exploration-graphics__/graphics/icons/vitamelange.png", + icon_size = 64, + order = "h-c[vitamelange]", + pictures = { + { + filename = "__space-exploration-graphics__/graphics/icons/vitamelange.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/vitamelange-01.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/vitamelange-02.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/vitamelange-03.png", + scale = 0.25, + size = 64 + } + }, + stack_size = 50, + subgroup = "raw-resource", + fuel_category = "chemical", + fuel_value = "2MJ", + }, + { + type = "item", + name = data_util.mod_prefix .. "vitamelange-nugget", + icon = "__space-exploration-graphics__/graphics/icons/vitamelange-nugget.png", + icon_size = 64, + order = "r[resource]-d[washed]-c", + stack_size = 50, + subgroup = "pulverised", + fuel_category = "chemical", + fuel_value = "1MJ", + }, + { + type = "item", + name = data_util.mod_prefix .. "vitamelange-roast", + icon = "__space-exploration-graphics__/graphics/icons/vitamelange-roast.png", + icon_size = 64, + order = "r[resource]-e[roast]-c", + stack_size = 50, + subgroup = "ingots", + fuel_category = "chemical", + fuel_value = "2.2MJ", + }, + { + type = "item", + name = data_util.mod_prefix .. "vitamelange-spice", + icon = "__space-exploration-graphics__/graphics/icons/vitamelange-spice.png", + icon_size = 64, + order = "r[resource]-f[blended]-c", + stack_size = 50, + subgroup = "washed", + fuel_category = "chemical", + fuel_value = "4.5MJ", + }, + { + type = "item", + name = data_util.mod_prefix .. "vitamelange-extract", + icon = "__space-exploration-graphics__/graphics/icons/vitamelange-extract.png", + icon_size = 64, + order = "r[resource]-g[extract]-c", + stack_size = 50, + subgroup = "raw-material", + fuel_category = "chemical", + fuel_value = "10MJ", + }, + + + { + type = "item", + name = data_util.mod_prefix .. "vulcanite", + icon = "__space-exploration-graphics__/graphics/icons/vulcanite.png", + icon_size = 64, + order = "h-b[vulcanite]", + pictures = { + { + filename = "__space-exploration-graphics__/graphics/icons/vulcanite.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/vulcanite-01.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/vulcanite-02.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/vulcanite-03.png", + scale = 0.25, + size = 64 + } + }, + stack_size = 50, + subgroup = "raw-resource", + fuel_category = "chemical", + fuel_value = "4MJ", + }, + { + type = "item", + name = data_util.mod_prefix .. "vulcanite-crushed", + icon = "__space-exploration-graphics__/graphics/icons/vulcanite-crushed.png", + icon_size = 64, + order = "r[resource]-c[crushed]-b", + stack_size = 50, + subgroup = "pulverised", + fuel_category = "chemical", + fuel_value = "4MJ", + }, + { + type = "item", + name = data_util.mod_prefix .. "vulcanite-washed", + icon = "__space-exploration-graphics__/graphics/icons/vulcanite-washed.png", + icon_size = 64, + order = "r[resource]-d[washed]-b", + stack_size = 50, + subgroup = "washed", + fuel_category = "chemical", + fuel_value = "5MJ", + }, + { + type = "item", + name = data_util.mod_prefix .. "vulcanite-block", + icon = "__space-exploration-graphics__/graphics/icons/vulcanite-block.png", + icon_size = 64, + order = "r[resource]-g[extract]-b", + stack_size = 100, + subgroup = "raw-material", + fuel_category = "chemical", + fuel_value = "10MJ", + }, + { + type = "item", + name = data_util.mod_prefix .. "vulcanite-ion-exchange-beads", + icon = "__space-exploration-graphics__/graphics/icons/vulcanite-ion-exchange-beads.png", + icon_size = 64, + order = "r[resource]-h[extract]-b", + stack_size = 200, + subgroup = "raw-material", + }, + +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/rocket-landing-pad.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/rocket-landing-pad.lua new file mode 100644 index 0000000..17c0eb1 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/rocket-landing-pad.lua @@ -0,0 +1,13 @@ +local data_util = require("data_util") +data:extend({ + { + type = "item", + name = data_util.mod_prefix .. "rocket-landing-pad", + place_result = data_util.mod_prefix .. "rocket-landing-pad", + icon = "__space-exploration-graphics__/graphics/icons/rocket-landing-pad.png", + icon_size = 64, + order = "c", + stack_size = 1, + subgroup = "rocket-logistics", -- need to move to logistics + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/rocket-launch-pad.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/rocket-launch-pad.lua new file mode 100644 index 0000000..08721a9 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/rocket-launch-pad.lua @@ -0,0 +1,33 @@ +local data_util = require("data_util") +data:extend({ + { + type = "item", + name = data_util.mod_prefix .. "rocket-launch-pad-silo-dummy-ingredient-item", + icon = "__space-exploration-graphics__/graphics/icons/cargo-rocket.png", + icon_size = 64, + order = "q[rocket-part]-d", + stack_size = 1, + subgroup = "rocket-intermediate-product", + flags = {"hidden"} + }, + { + type = "item", + name = data_util.mod_prefix .. "rocket-launch-pad-silo-dummy-result-item", + icon = "__space-exploration-graphics__/graphics/icons/cargo-rocket.png", + icon_size = 64, + order = "q[rocket-part]-e", + stack_size = 1, + subgroup = "rocket-intermediate-product", + flags = { "hidden" }, + }, + { + type = "item", + name = data_util.mod_prefix .. "rocket-launch-pad", + place_result = data_util.mod_prefix .. "rocket-launch-pad", + icon = "__space-exploration-graphics__/graphics/icons/rocket-launch-pad.png", + icon_size = 64, + order = "b", + stack_size = 1, + subgroup = "rocket-logistics", -- need to move to logistics + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/science-pack.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/science-pack.lua new file mode 100644 index 0000000..53d2765 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/science-pack.lua @@ -0,0 +1,689 @@ +local data_util = require("data_util") + +data:extend({ + { + type = "tool", + name = data_util.mod_prefix .. "rocket-science-pack", + subgroup = "science-pack", + durability = 1, + durability_description_key = "description.science-pack-remaining-amount-key", + durability_description_value = "description.science-pack-remaining-amount-value", + icons = { + {icon = "__space-exploration-graphics__/graphics/icons/catalogue/deep-1.png", icon_size = 64}, + {icon = "__space-exploration-graphics__/graphics/icons/catalogue/mask-1.png", icon_size = 64}, + }, + order = "h[rocket-science-pack-1]", + stack_size = 200, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/deep-1.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-1.png", + scale = 0.25, + size = 64, + draw_as_glow = true + } + } + } + } + }, + { + type = "tool", + name = data_util.mod_prefix .. "astronomic-science-pack-1", + subgroup = "astronomic-science-pack", + durability = 1, + durability_description_key = "description.science-pack-remaining-amount-key", + durability_description_value = "description.science-pack-remaining-amount-value", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/astronomic-1.png", + icon_size = 64, + icon_mipmaps = 1, + order = "h[astronomic-science-pack-1]", + stack_size = 200, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/astronomic-1.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-1.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "tool", + name = data_util.mod_prefix .. "astronomic-science-pack-2", + subgroup = "astronomic-science-pack", + durability = 1, + durability_description_key = "description.science-pack-remaining-amount-key", + durability_description_value = "description.science-pack-remaining-amount-value", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/astronomic-2.png", + icon_size = 64, + icon_mipmaps = 1, + order = "h[astronomic-science-pack-2]", + stack_size = 200, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/astronomic-2.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-2.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "tool", + name = data_util.mod_prefix .. "astronomic-science-pack-3", + subgroup = "astronomic-science-pack", + durability = 1, + durability_description_key = "description.science-pack-remaining-amount-key", + durability_description_value = "description.science-pack-remaining-amount-value", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/astronomic-3.png", + icon_size = 64, + icon_mipmaps = 1, + order = "h[astronomic-science-pack-3]", + stack_size = 200, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/astronomic-3.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-3.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "tool", + name = data_util.mod_prefix .. "astronomic-science-pack-4", + subgroup = "astronomic-science-pack", + durability = 1, + durability_description_key = "description.science-pack-remaining-amount-key", + durability_description_value = "description.science-pack-remaining-amount-value", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/astronomic-4.png", + icon_size = 64, + icon_mipmaps = 1, + order = "h[astronomic-science-pack-4]", + stack_size = 200, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/astronomic-4.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-4.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "tool", + name = data_util.mod_prefix .. "biological-science-pack-1", + subgroup = "biological-science-pack", + durability = 1, + durability_description_key = "description.science-pack-remaining-amount-key", + durability_description_value = "description.science-pack-remaining-amount-value", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/biological-1.png", + icon_size = 64, + icon_mipmaps = 1, + order = "h[biological-science-pack-1]", + stack_size = 200, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/biological-1.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-1.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "tool", + name = data_util.mod_prefix .. "biological-science-pack-2", + subgroup = "biological-science-pack", + durability = 1, + durability_description_key = "description.science-pack-remaining-amount-key", + durability_description_value = "description.science-pack-remaining-amount-value", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/biological-2.png", + icon_size = 64, + icon_mipmaps = 1, + order = "h[biological-science-pack-2]", + stack_size = 200, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/biological-2.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-2.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "tool", + name = data_util.mod_prefix .. "biological-science-pack-3", + subgroup = "biological-science-pack", + durability = 1, + durability_description_key = "description.science-pack-remaining-amount-key", + durability_description_value = "description.science-pack-remaining-amount-value", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/biological-3.png", + icon_size = 64, + icon_mipmaps = 1, + order = "h[biological-science-pack-3]", + stack_size = 200, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/biological-3.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-3.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "tool", + name = data_util.mod_prefix .. "biological-science-pack-4", + subgroup = "biological-science-pack", + durability = 1, + durability_description_key = "description.science-pack-remaining-amount-key", + durability_description_value = "description.science-pack-remaining-amount-value", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/biological-4.png", + icon_size = 64, + icon_mipmaps = 1, + order = "h[biological-science-pack-4]", + stack_size = 200, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/biological-4.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-4.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "tool", + name = data_util.mod_prefix .. "energy-science-pack-1", + subgroup = "energy-science-pack", + durability = 1, + durability_description_key = "description.science-pack-remaining-amount-key", + durability_description_value = "description.science-pack-remaining-amount-value", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/energy-1.png", + icon_size = 64, + icon_mipmaps = 1, + order = "h[energy-science-pack-1]", + stack_size = 200, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/energy-1.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-1.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "tool", + name = data_util.mod_prefix .. "energy-science-pack-2", + subgroup = "energy-science-pack", + durability = 1, + durability_description_key = "description.science-pack-remaining-amount-key", + durability_description_value = "description.science-pack-remaining-amount-value", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/energy-2.png", + icon_size = 64, + icon_mipmaps = 1, + order = "h[energy-science-pack-2]", + stack_size = 200, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/energy-2.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-2.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "tool", + name = data_util.mod_prefix .. "energy-science-pack-3", + subgroup = "energy-science-pack", + durability = 1, + durability_description_key = "description.science-pack-remaining-amount-key", + durability_description_value = "description.science-pack-remaining-amount-value", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/energy-3.png", + icon_size = 64, + icon_mipmaps = 1, + order = "h[energy-science-pack-3]", + stack_size = 200, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/energy-3.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-3.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "tool", + name = data_util.mod_prefix .. "energy-science-pack-4", + subgroup = "energy-science-pack", + durability = 1, + durability_description_key = "description.science-pack-remaining-amount-key", + durability_description_value = "description.science-pack-remaining-amount-value", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/energy-4.png", + icon_size = 64, + icon_mipmaps = 1, + order = "h[energy-science-pack-4]", + stack_size = 200, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/energy-4.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-4.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "tool", + name = data_util.mod_prefix .. "material-science-pack-1", + subgroup = "material-science-pack", + durability = 1, + durability_description_key = "description.science-pack-remaining-amount-key", + durability_description_value = "description.science-pack-remaining-amount-value", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/material-1.png", + icon_size = 64, + icon_mipmaps = 1, + order = "h[material-science-pack-1]", + stack_size = 200, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/material-1.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-1.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "tool", + name = data_util.mod_prefix .. "material-science-pack-2", + subgroup = "material-science-pack", + durability = 1, + durability_description_key = "description.science-pack-remaining-amount-key", + durability_description_value = "description.science-pack-remaining-amount-value", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/material-2.png", + icon_size = 64, + icon_mipmaps = 1, + order = "h[material-science-pack-2]", + stack_size = 200, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/material-2.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-2.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "tool", + name = data_util.mod_prefix .. "material-science-pack-3", + subgroup = "material-science-pack", + durability = 1, + durability_description_key = "description.science-pack-remaining-amount-key", + durability_description_value = "description.science-pack-remaining-amount-value", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/material-3.png", + icon_size = 64, + icon_mipmaps = 1, + order = "h[material-science-pack-3]", + stack_size = 200, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/material-3.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-3.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "tool", + name = data_util.mod_prefix .. "material-science-pack-4", + subgroup = "material-science-pack", + durability = 1, + durability_description_key = "description.science-pack-remaining-amount-key", + durability_description_value = "description.science-pack-remaining-amount-value", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/material-4.png", + icon_size = 64, + icon_mipmaps = 1, + order = "h[material-science-pack-4]", + stack_size = 200, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/material-4.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-4.png", + scale = 0.25, + size = 64, + draw_as_light = true + } + } + } + } + }, + { + type = "tool", + name = data_util.mod_prefix .. "deep-space-science-pack-1", + subgroup = "deep-science-pack", + durability = 1, + durability_description_key = "description.science-pack-remaining-amount-key", + durability_description_value = "description.science-pack-remaining-amount-value", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/deep-1.png", + icon_size = 64, + icon_mipmaps = 1, + order = "z[space-platform-science-pack-2]", + stack_size = 200, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/deep-1.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-1.png", + scale = 0.25, + size = 64, + tint = {r=50,g=0,b=150}, + draw_as_glow = true + } + } + } + } + }, + { + type = "tool", + name = data_util.mod_prefix .. "deep-space-science-pack-2", + subgroup = "deep-science-pack", + durability = 1, + durability_description_key = "description.science-pack-remaining-amount-key", + durability_description_value = "description.science-pack-remaining-amount-value", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/deep-2.png", + icon_size = 64, + icon_mipmaps = 1, + order = "z[space-platform-science-pack-2]", + stack_size = 200, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/deep-2.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-2.png", + scale = 0.25, + size = 64, + tint = {r=50,g=0,b=150}, + draw_as_glow = true + } + } + } + } + }, + { + type = "tool", + name = data_util.mod_prefix .. "deep-space-science-pack-3", + subgroup = "deep-science-pack", + durability = 1, + durability_description_key = "description.science-pack-remaining-amount-key", + durability_description_value = "description.science-pack-remaining-amount-value", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/deep-3.png", + icon_size = 64, + icon_mipmaps = 1, + order = "z[space-platform-science-pack-2]", + stack_size = 200, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/deep-3.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-3.png", + scale = 0.25, + size = 64, + tint = {r=50,g=0,b=150}, + draw_as_glow = true + } + } + } + } + }, + { + type = "tool", + name = data_util.mod_prefix .. "deep-space-science-pack-4", + subgroup = "deep-science-pack", + durability = 1, + durability_description_key = "description.science-pack-remaining-amount-key", + durability_description_value = "description.science-pack-remaining-amount-value", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/deep-4.png", + icon_size = 64, + icon_mipmaps = 1, + order = "z[space-platform-science-pack-2]", + stack_size = 200, + pictures = { + { + layers = { + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/deep-4.png", + scale = 0.25, + size = 64 + }, + { + filename = "__space-exploration-graphics__/graphics/icons/catalogue/mask-4.png", + scale = 0.25, + size = 64, + tint = {r=50,g=0,b=150}, + draw_as_glow = true + } + } + } + } + }, +}) + +--[[ +local function tint_science_pack(name, tint) + if data.raw.tool[name] then + data.raw.tool[name].icon = nil + data.raw.tool[name].icons = { + { + icon = "__space-exploration-graphics__/graphics/icons/science-pack-base.png" + }, + { + icon = "__space-exploration-graphics__/graphics/icons/science-pack-mask.png", + tint = tint + } + } + end +end +tint_science_pack("science-pack-1", {r = 0.9, g = 0.7, b = 0}) +tint_science_pack("science-pack-2", {r = 0, g = 0.6, b = 0}) +tint_science_pack("science-pack-3", {r = 0.2, g = 0.4, b = 0.8}) +tint_science_pack("military-science-pack", {r = 0.7, g = 0, b = 0}) +tint_science_pack("production-science-pack", {r = 0.9, g = 0.4, b = 0}) +tint_science_pack("high-tech-science-pack", {r = 0.7, g = 0, b = 0.7}) +tint_science_pack("space-science-pack", {r = 0, g = 1, b = 1}) +tint_science_pack(data_util.mod_prefix .. "science-pack-1", {r = 1, g = 1, b = 1}) +data.raw.tool[data_util.mod_prefix .. "science-pack-2"].icons = nil +data.raw.tool[data_util.mod_prefix .. "science-pack-2"].icon = "__space-exploration-graphics__/graphics/icons/science-pack-dark.png" +"space-science-pack" +]]-- +--[[ + +[red] = science pack 1 +[green] = science pack 2 +[military] (grey) +[blue] = science pack 3 +[tech] (gold) High Tech +[production] (purple) +[rocket] (orange ) - was white space science 1 +[space] (white) - new space platform +[deep-space] - advanced space science + +yellow = 1 +green = 2 +cyan = 3 +red = military +purple = production +turquoise = tech +orange = rocketry +white = space +black = deep space +]]-- diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/spaceship.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/spaceship.lua new file mode 100644 index 0000000..9c33cce --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/spaceship.lua @@ -0,0 +1,133 @@ +local data_util = require("data_util") +data:extend({ + { + icons = { + {icon = "__space-exploration-graphics__/graphics/icons/spaceship-console-base.png", icon_size = 64}, + {icon = "__space-exploration-graphics__/graphics/icons/spaceship-console-mask.png", icon_size = 64, draw_as_glow = true, tint = data_util.console_tint}, + {icon = "__space-exploration-graphics__/graphics/icons/spaceship-console-white.png", icon_size = 64}, + }, + name = data_util.mod_prefix .. "spaceship-console", + order = "a-a[spaceship-console]", + place_result = data_util.mod_prefix .. "spaceship-console", + stack_size = 10, + subgroup = "spaceship-structure", + type = "item", + }, + { + icons = { + {icon = "__space-exploration-graphics__/graphics/icons/spaceship-console-base.png", icon_size = 64}, + {icon = "__space-exploration-graphics__/graphics/icons/spaceship-console-mask.png", icon_size = 64, draw_as_glow = true, tint = data_util.console_alt_tint}, + {icon = "__space-exploration-graphics__/graphics/icons/spaceship-console-white.png", icon_size = 64}, + }, + name = data_util.mod_prefix .. "spaceship-console-alt", + order = "a-a[spaceship-console]", + place_result = data_util.mod_prefix .. "spaceship-console-alt", + stack_size = 10, + subgroup = "spaceship-structure", + type = "item", + }, + { + icon = "__space-exploration-graphics__/graphics/icons/spaceship-floor.png", + icon_size = 64, + icon_mipmaps = 1, + name = data_util.mod_prefix .. "spaceship-floor", + order = "a-b[spaceship-floor]", + stack_size = 50, + subgroup = "spaceship-structure", + type = "item", + place_as_tile = + { + result = data_util.mod_prefix .. "spaceship-floor", + condition_size = 1, + condition = { "player-layer" } -- prevents placement on out-of-map + } + }, + { + icon = "__space-exploration-graphics__/graphics/icons/spaceship-wall.png", + icon_size = 64, + icon_mipmaps = 1, + name = data_util.mod_prefix .. "spaceship-wall", + order = "a-c[spaceship-wall]", + place_result = data_util.mod_prefix .. "spaceship-wall", + stack_size = 50, + subgroup = "spaceship-structure", + type = "item", + }, + { + icon = "__space-exploration-graphics__/graphics/icons/spaceship-gate.png", + icon_size = 64, + icon_mipmaps = 1, + name = data_util.mod_prefix .. "spaceship-gate", + order = "a-d[spaceship-gate]", + place_result = data_util.mod_prefix .. "spaceship-gate", + stack_size = 50, + subgroup = "spaceship-structure", + type = "item", + }, + { + icon = "__space-exploration-graphics__/graphics/icons/spaceship-rocket-engine.png", + icon_size = 64, + icon_mipmaps = 1, + name = data_util.mod_prefix .. "spaceship-rocket-engine", + order = "a-e[spaceship-engine]-a[rocket]", + place_result = data_util.mod_prefix .. "spaceship-rocket-engine", + stack_size = 10, + subgroup = "spaceship-structure", + type = "item", + }, + { + icon = "__space-exploration-graphics__/graphics/icons/spaceship-rocket-booster-tank.png", + icon_size = 64, + icon_mipmaps = 1, + name = data_util.mod_prefix .. "spaceship-rocket-booster-tank", + order = "a-e[spaceship-engine]-b[booster-tank]", + place_result = data_util.mod_prefix .. "spaceship-rocket-booster-tank", + stack_size = 10, + subgroup = "spaceship-structure", + type = "item", + }, + { + icon = "__space-exploration-graphics__/graphics/icons/spaceship-ion-engine.png", + icon_size = 64, + icon_mipmaps = 1, + name = data_util.mod_prefix .. "spaceship-ion-engine", + order = "a-f[spaceship-engine]-c[ion]", + place_result = data_util.mod_prefix .. "spaceship-ion-engine", + stack_size = 10, + subgroup = "spaceship-structure", + type = "item", + }, + { + icon = "__space-exploration-graphics__/graphics/icons/spaceship-ion-booster-tank.png", + icon_size = 64, + icon_mipmaps = 1, + name = data_util.mod_prefix .. "spaceship-ion-booster-tank", + order = "a-f[spaceship-engine]-d[ion]", + place_result = data_util.mod_prefix .. "spaceship-ion-booster-tank", + stack_size = 10, + subgroup = "spaceship-structure", + type = "item", + }, + { + icon = "__space-exploration-graphics__/graphics/icons/spaceship-antimatter-engine.png", + icon_size = 64, + icon_mipmaps = 1, + name = data_util.mod_prefix .. "spaceship-antimatter-engine", + order = "a-g[spaceship-engine]-e[antimatter]", + place_result = data_util.mod_prefix .. "spaceship-antimatter-engine", + stack_size = 10, + subgroup = "spaceship-structure", + type = "item", + }, + { + icon = "__space-exploration-graphics__/graphics/icons/spaceship-antimatter-booster-tank.png", + icon_size = 64, + icon_mipmaps = 1, + name = data_util.mod_prefix .. "spaceship-antimatter-booster-tank", + order = "a-g[spaceship-engine]-f[booster-tank]", + place_result = data_util.mod_prefix .. "spaceship-antimatter-booster-tank", + stack_size = 10, + subgroup = "spaceship-structure", + type = "item", + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/structures.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/structures.lua new file mode 100644 index 0000000..d6daec0 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/structures.lua @@ -0,0 +1,482 @@ +local data_util = require("data_util") +local function stack_size(width) + if width >= 9 then + return 1 + elseif width >= 8 then + return 2 + elseif width >= 7 then + return 5 + elseif width >= 6 then + return 10 + elseif width >= 5 then + return 15 + elseif width >= 4 then + return 25 + elseif width >= 3 then + return 50 + end +end + + +data:extend({ + { + type = "item", + name = data_util.mod_prefix .. "fuel-refinery", + icon = "__space-exploration-graphics__/graphics/icons/fuel-refinery.png", + icon_size = 64, + order = "z-d[refinery]-e[fuel-refinery]", + subgroup = "chemistry", + stack_size = 10, + place_result = data_util.mod_prefix .. "fuel-refinery", + }, + { + type = "item", + name = data_util.mod_prefix .. "fluid-burner-generator", + icon = "__space-exploration-graphics__/graphics/icons/fluid-burner-generator.png", + icon_size = 64, + order = "z-d[fluid-burner-generator]", + subgroup = "energy", + stack_size = 20, + place_result = data_util.mod_prefix .. "fluid-burner-generator", + }, + { + type = "item", + name = data_util.mod_prefix .. "antimatter-reactor", + icon = "__space-exploration-graphics__/graphics/icons/antimatter-reactor.png", + icon_size = 64, + order = "f[antimatter]-a[reactor]-b", + subgroup = "energy", + stack_size = stack_size(9), + place_result = data_util.mod_prefix .. "antimatter-reactor", + }, + { + type = "item", + name = data_util.mod_prefix .. "naquium-heat-pipe", + icon = "__space-exploration-graphics__/graphics/icons/naquium-heat-pipe.png", + icon_size = 64, + order = "f[nuclear-energy]-b[heat-pipe]-m", + subgroup = "energy", + stack_size = 50, + place_result = data_util.mod_prefix .. "naquium-heat-pipe", + }, + { + type = "item", + name = data_util.mod_prefix .. "dimensional-anchor", + icon = "__space-exploration-graphics__/graphics/icons/dimensional-anchor.png", + icon_size = 64, + order = "z-a-".."dimensional-anchor", + stack_size = stack_size(9), + subgroup = "beaming", + place_result = data_util.mod_prefix .. "dimensional-anchor", + }, + { + type = "item", + name = data_util.mod_prefix .. "pulveriser", + icon = "__space-exploration-graphics__/graphics/icons/pulveriser.png", + icon_size = 64, + order = "z-d-z", + stack_size = stack_size(7), + subgroup = "mechanical", + place_result = data_util.mod_prefix .. "pulveriser", + }, + { + type = "item", + name = data_util.mod_prefix .. "addon-power-pole", + icon = "__space-exploration-graphics__/graphics/icons/addon-power-pole.png", + icon_size = 64, + order = "z-p-a", + stack_size = 50, + subgroup = "energy-pipe-distribution", + place_result = data_util.mod_prefix .. "addon-power-pole", + }, + { + type = "item", + name = data_util.mod_prefix .. "pylon", + icon = "__space-exploration-graphics__/graphics/icons/pylon.png", + icon_size = 64, + order = "z-p-a", + stack_size = 50, + subgroup = "energy-pipe-distribution", + place_result = data_util.mod_prefix .. "pylon", + }, + { + type = "item", + name = data_util.mod_prefix .. "pylon-substation", + icon = "__space-exploration-graphics__/graphics/icons/pylon-substation.png", + icon_size = 64, + order = "z-p-b", + stack_size = 50, + subgroup = "energy-pipe-distribution", + place_result = data_util.mod_prefix .. "pylon-substation", + }, + { + type = "item", + name = data_util.mod_prefix .. "pylon-construction", + icon = "__space-exploration-graphics__/graphics/icons/pylon-construction.png", + icon_size = 64, + order = "z-p-c", + stack_size = 50, + subgroup = "energy-pipe-distribution", + place_result = data_util.mod_prefix .. "pylon-construction-roboport", + }, + { + type = "item", + name = data_util.mod_prefix .. "pylon-construction-radar", + icon = "__space-exploration-graphics__/graphics/icons/pylon-construction-radar.png", + icon_size = 64, + order = "z-p-d", + stack_size = 50, + subgroup = "energy-pipe-distribution", + place_result = data_util.mod_prefix .. "pylon-construction-radar-roboport", + }, + { + type = "item", + name = data_util.mod_prefix .. "space-assembling-machine", + icon = "__space-exploration-graphics__/graphics/icons/assembling-machine.png", + icon_size = 64, + order = "z-a-".."space-assembling-machine", + stack_size = stack_size(3), + subgroup = "assembling", + place_result = data_util.mod_prefix .. "space-assembling-machine", + }, + { + type = "item", + name = data_util.mod_prefix .. "space-astrometrics-laboratory", + icon = "__space-exploration-graphics__/graphics/icons/astrometrics-laboratory.png", + icon_size = 64, + order = "a-a", + stack_size = stack_size(5), + subgroup = "computation", + place_result = data_util.mod_prefix .. "space-astrometrics-laboratory", + }, + { + type = "item", + name = data_util.mod_prefix .. "space-biochemical-laboratory", + icon = "__space-exploration-graphics__/graphics/icons/biochemical-laboratory.png", + icon_size = 64, + order = "z-a-".."space-biochemical-laboratory", + stack_size = stack_size(7), + subgroup = "chemistry", + place_result = data_util.mod_prefix .. "space-biochemical-laboratory", + }, + { + type = "item", + name = data_util.mod_prefix .. "space-electromagnetics-laboratory", + icon = "__space-exploration-graphics__/graphics/icons/electromagnetics-laboratory.png", + icon_size = 64, + order = "z-a-".."space-electromagnetics-laboratory", + stack_size = stack_size(7), + subgroup = "plasma", + place_result = data_util.mod_prefix .. "space-electromagnetics-laboratory", + }, + { + type = "item", + name = data_util.mod_prefix .. "space-decontamination-facility", + icon = "__space-exploration-graphics__/graphics/icons/decontamination-facility.png", + icon_size = 64, + order = "z-a-".."space-decontamination-facility", + stack_size = stack_size(6), + subgroup = "chemistry", + place_result = data_util.mod_prefix .. "space-decontamination-facility", + }, + { + type = "item", + name = data_util.mod_prefix .. "space-genetics-laboratory", + icon = "__space-exploration-graphics__/graphics/icons/genetics-laboratory.png", + icon_size = 64, + order = "z-a-".."space-genetics-laboratory", + stack_size = stack_size(7), + subgroup = "chemistry", + place_result = data_util.mod_prefix .. "space-genetics-laboratory", + }, + { + type = "item", + name = data_util.mod_prefix .. "space-gravimetrics-laboratory", + icon = "__space-exploration-graphics__/graphics/icons/gravimetrics-laboratory.png", + icon_size = 64, + order = "a-b", + stack_size = stack_size(5), + subgroup = "computation", + place_result = data_util.mod_prefix .. "space-gravimetrics-laboratory", + }, + { + type = "item", + name = data_util.mod_prefix .. "space-growth-facility", + icon = "__space-exploration-graphics__/graphics/icons/growth-facility.png", + icon_size = 64, + order = "z-a-".."space-growth-facility", + stack_size = stack_size(9), + subgroup = "chemistry", + place_result = data_util.mod_prefix .. "space-growth-facility", + }, + { + type = "item", + name = data_util.mod_prefix .. "space-hypercooler", + icon = "__space-exploration-graphics__/graphics/icons/hypercooler.png", + icon_size = 64, + order = "z-a-".."space-hypercooler", + stack_size = stack_size(5), + subgroup = "thermofluid", + place_result = data_util.mod_prefix .. "space-hypercooler", + }, + { + type = "item", + name = data_util.mod_prefix .. "space-laser-laboratory", + icon = "__space-exploration-graphics__/graphics/icons/laser-laboratory.png", + icon_size = 64, + order = "z-a-".."space-laser-laboratory", + stack_size = stack_size(7), + subgroup = "plasma", + place_result = data_util.mod_prefix .. "space-laser-laboratory", + }, + { + type = "item", + name = data_util.mod_prefix .. "lifesupport-facility", + icon = "__space-exploration-graphics__/graphics/icons/lifesupport-facility.png", + icon_size = 64, + order = "z-a-".."lifesupport-facility", + stack_size = stack_size(6), + subgroup = "chemistry", + place_result = data_util.mod_prefix .. "lifesupport-facility", + }, + { + type = "item", + name = data_util.mod_prefix .. "space-manufactory", + icon = "__space-exploration-graphics__/graphics/icons/manufactory.png", + icon_size = 64, + order = "z-a-".."space-manufactory", + stack_size = stack_size(9), + subgroup = "assembling", + place_result = data_util.mod_prefix .. "space-manufactory", + }, + { + type = "item", + name = data_util.mod_prefix .. "space-material-fabricator", + icon = "__space-exploration-graphics__/graphics/icons/material-fabricator.png", + icon_size = 64, + order = "z-a-".."space-material-fabricator", + stack_size = stack_size(9), + subgroup = "plasma", + place_result = data_util.mod_prefix .. "space-material-fabricator", + }, + { + type = "item", + name = data_util.mod_prefix .. "space-mechanical-laboratory", + icon = "__space-exploration-graphics__/graphics/icons/mechanical-laboratory.png", + icon_size = 64, + order = "z-a-".."space-mechanical-laboratory", + stack_size = stack_size(7), + subgroup = "mechanical", + place_result = data_util.mod_prefix .. "space-mechanical-laboratory", + }, + { + type = "item", + name = data_util.mod_prefix .. "space-particle-accelerator", + icon = "__space-exploration-graphics__/graphics/icons/particle-accelerator.png", + icon_size = 64, + order = "z-a-".."space-particle-accelerator", + stack_size = stack_size(9), + subgroup = "plasma", + place_result = data_util.mod_prefix .. "space-particle-accelerator", + }, + { + type = "item", + name = data_util.mod_prefix .. "space-particle-collider", + icon = "__space-exploration-graphics__/graphics/icons/particle-collider.png", + icon_size = 64, + order = "z-a-".."space-particle-collider", + stack_size = stack_size(9), + subgroup = "plasma", + place_result = data_util.mod_prefix .. "space-particle-collider", + }, + { + type = "item", + name = data_util.mod_prefix .. "space-plasma-generator", + icon = "__space-exploration-graphics__/graphics/icons/plasma-generator.png", + icon_size = 64, + order = "z-a-".."space-plasma-generator", + stack_size = stack_size(7), + subgroup = "plasma", + place_result = data_util.mod_prefix .. "space-plasma-generator", + }, + { + type = "item", + name = data_util.mod_prefix .. "space-radiation-laboratory", + icon = "__space-exploration-graphics__/graphics/icons/radiation-laboratory.png", + icon_size = 64, + order = "z-a-".."space-radiation-laboratory", + stack_size = stack_size(7), + subgroup = "radiation", + place_result = data_util.mod_prefix .. "space-radiation-laboratory", + }, + { + type = "item", + name = data_util.mod_prefix .. "space-radiator", + icon = "__space-exploration-graphics__/graphics/icons/radiator.png", + icon_size = 64, + order = "z-a-".."space-radiator", + stack_size = stack_size(3), + subgroup = "thermofluid", + place_result = data_util.mod_prefix .. "space-radiator", + }, + { + type = "item", + name = data_util.mod_prefix .. "space-radiator-2", + icon = "__space-exploration-graphics__/graphics/icons/radiator-blue.png", + icon_size = 64, + order = "z-a-".."space-radiator-2", + stack_size = stack_size(3), + subgroup = "thermofluid", + place_result = data_util.mod_prefix .. "space-radiator-2", + }, + { + type = "item", + name = data_util.mod_prefix .. "recycling-facility", + icon = "__space-exploration-graphics__/graphics/icons/recycling-facility.png", + icon_size = 64, + order = "z-a-".."recycling-facility", + stack_size = stack_size(7), + subgroup = "mechanical", + place_result = data_util.mod_prefix .. "recycling-facility", + }, + { + type = "item", + name = data_util.mod_prefix .. "space-supercomputer-1", + icon = "__space-exploration-graphics__/graphics/icons/supercomputer-1.png", + icon_size = 64, + order = "z-a-".."space-supercomputer", + stack_size = stack_size(5), + subgroup = "computation", + place_result = data_util.mod_prefix .. "space-supercomputer-1", + }, + { + type = "item", + name = data_util.mod_prefix .. "space-supercomputer-2", + icon = "__space-exploration-graphics__/graphics/icons/supercomputer-2.png", + icon_size = 64, + order = "z-a-".."space-supercomputer", + stack_size = stack_size(5), + subgroup = "computation", + place_result = data_util.mod_prefix .. "space-supercomputer-2", + }, + { + type = "item", + name = data_util.mod_prefix .. "space-supercomputer-3", + icon = "__space-exploration-graphics__/graphics/icons/supercomputer-3.png", + icon_size = 64, + order = "z-a-".."space-supercomputer", + stack_size = stack_size(5), + subgroup = "computation", + place_result = data_util.mod_prefix .. "space-supercomputer-3", + }, + { + type = "item", + name = data_util.mod_prefix .. "space-supercomputer-4", + icon = "__space-exploration-graphics__/graphics/icons/supercomputer-4.png", + icon_size = 64, + order = "z-a-".."space-supercomputer", + stack_size = stack_size(5), + subgroup = "computation", + place_result = data_util.mod_prefix .. "space-supercomputer-4", + }, + { + type = "item", + name = data_util.mod_prefix .. "space-telescope", + icon = "__space-exploration-graphics__/graphics/icons/telescope.png", + icon_size = 64, + order = "z-a-".."space-telescope", + stack_size = stack_size(3), + subgroup = "telescope", + place_result = data_util.mod_prefix .. "space-telescope", + }, + { + type = "item", + name = data_util.mod_prefix .. "space-telescope-xray", + icon = "__space-exploration-graphics__/graphics/icons/telescope-xray.png", + icon_size = 64, + order = "z-a-".."space-telescope-xray", + stack_size = stack_size(5), + subgroup = "telescope", + place_result = data_util.mod_prefix .. "space-telescope-xray", + }, + { + type = "item", + name = data_util.mod_prefix .. "space-telescope-gammaray", + icon = "__space-exploration-graphics__/graphics/icons/telescope-gammaray.png", + icon_size = 64, + order = "z-a-".."space-telescope-gammaray", + stack_size = stack_size(5), + subgroup = "telescope", + place_result = data_util.mod_prefix .. "space-telescope-gammaray", + }, + { + type = "item", + name = data_util.mod_prefix .. "space-telescope-microwave", + icon = "__space-exploration-graphics__/graphics/icons/telescope-microwave.png", + icon_size = 64, + order = "z-a-".."space-telescope-microwave", + stack_size = stack_size(9), + subgroup = "telescope", + place_result = data_util.mod_prefix .. "space-telescope-microwave", + }, + { + type = "item", + name = data_util.mod_prefix .. "space-telescope-radio", + icon = "__space-exploration-graphics__/graphics/icons/telescope-radio.png", + icon_size = 64, + order = "z-a-".."space-telescope-radio", + stack_size = stack_size(9), + subgroup = "telescope", + place_result = data_util.mod_prefix .. "space-telescope-radio", + }, + { + type = "item", + name = data_util.mod_prefix .. "space-thermodynamics-laboratory", + icon = "__space-exploration-graphics__/graphics/icons/thermodynamics-laboratory.png", + icon_size = 64, + order = "z-a-".."space-thermodynamics-laboratory", + stack_size = stack_size(7), + subgroup = "smelting-machine", + place_result = data_util.mod_prefix .. "space-thermodynamics-laboratory", + }, + { + type = "item", + name = data_util.mod_prefix .. "supercharger", + icon = "__space-exploration-graphics__/graphics/icons/supercharger.png", + icon_size = 64, + order = "z-z", + stack_size = stack_size(4), + subgroup = "logistic-network", + place_result = data_util.mod_prefix .. "supercharger", + }, + { + type = "item", + name = data_util.mod_prefix .. "wide-beacon", + icon = "__space-exploration-graphics__/graphics/icons/wide-beacon.png", + icon_size = 64, + order = "z-a[beacon]-b", + stack_size = stack_size(4), + subgroup = "module", + place_result = data_util.mod_prefix .. "wide-beacon", + }, + { + type = "item", + name = data_util.mod_prefix .. "wide-beacon-2", + icon = "__space-exploration-graphics__/graphics/icons/wide-beacon-2.png", + icon_size = 64, + order = "z-a[beacon]-c", + stack_size = stack_size(4), + subgroup = "module", + place_result = data_util.mod_prefix .. "wide-beacon-2", + }, + { + type = "item", + name = data_util.mod_prefix .. "space-science-lab", + icon = "__space-exploration-graphics__/graphics/icons/space-science-lab.png", + icon_size = 64, + order = "z-space-science-lab", + stack_size = 1, + subgroup = "lab", + place_result = data_util.mod_prefix .. "space-science-lab" + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/utility.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/utility.lua new file mode 100644 index 0000000..e58a37b --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/utility.lua @@ -0,0 +1,45 @@ +local data_util = require("data_util") +data:extend{ + { + type = "item", + name = data_util.mod_prefix .. "struct-generic-settings", + icon = "__space-exploration-graphics__/graphics/icons/settings.png", + icon_size = 64, icon_mipmaps = 1, + flags = { "hidden"}, + stack_size = 50, + }, + { + type = "item", + name = data_util.mod_prefix .. "struct-generic-input", + --icon = "__space-exploration-graphics__/graphics/icon/generic-input.png", + icon = "__space-exploration-graphics__/graphics/icons/settings.png", + icon_size = 64, icon_mipmaps = 1, + flags = { "hidden"}, + stack_size = 50, + }, + { + type = "item", + name = data_util.mod_prefix .. "struct-generic-output", + --icon = "__space-exploration-graphics__/graphics/icon/generic-output.png", + icon = "__space-exploration-graphics__/graphics/icons/settings.png", + icon_size = 64, icon_mipmaps = 1, + flags = { "hidden"}, + stack_size = 50, + }, + { + type = "item", + name = data_util.mod_prefix .. "struct-generic-clamp-west", + icon = "__space-exploration-graphics__/graphics/icons/settings.png", + icon_size = 64, icon_mipmaps = 1, + flags = { "hidden" }, + stack_size = 50, + }, + { + type = "item", + name = data_util.mod_prefix .. "struct-generic-clamp-east", + icon = "__space-exploration-graphics__/graphics/icons/settings.png", + icon_size = 64, icon_mipmaps = 1, + flags = { "hidden" }, + stack_size = 50, +} +} diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/weapon-cryogun.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/weapon-cryogun.lua new file mode 100644 index 0000000..7f68387 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/weapon-cryogun.lua @@ -0,0 +1,489 @@ +local data_util = require("data_util") + +data.raw["utility-constants"].default.bonus_gui_ordering["cryogun"] = "k-c" +data:extend({ + { + type = "ammo-category", + name = "cryogun", + bonus_gui_order = "k-c", + }, + { + type = "gun", + name = data_util.mod_prefix .. "cryogun", + icon = "__space-exploration-graphics__/graphics/icons/cryogun.png", + icon_mipmaps = 1, + icon_size = 64, + subgroup = "gun", + order = "e[flamethrower]", + stack_size = 5, + attack_parameters = { + ammo_category = "cryogun", + cooldown = 1, + cyclic_sound = { + begin_sound = { + { + filename = "__base__/sound/fight/flamethrower-start.ogg", + volume = 0.7 + } + }, + end_sound = { + { + filename = "__base__/sound/fight/flamethrower-end.ogg", + volume = 0.7 + } + }, + middle_sound = { + { + filename = "__base__/sound/fight/flamethrower-mid.ogg", + volume = 0.7 + } + } + }, + gun_barrel_length = 0.8, + gun_center_shift = { + 0, + -1 + }, + min_range = 3, + movement_slow_down_factor = 0.1, + range = 20, + type = "stream" + }, + }, + { + type = "ammo", + name = data_util.mod_prefix .. "cryogun-ammo", + ammo_type = + { + category = "cryogun", + target_type = "position", + clamp_position = true, + action = { + action_delivery = { + stream = "cryogun-stream", + type = "stream" + }, + type = "direct" + }, + }, + icon = "__space-exploration-graphics__/graphics/icons/cryogun-ammo.png", + icon_size = 64, + magazine_size = 100, + order = "z-t[cryogun]", + stack_size = 100, + subgroup = "ammo", + }, + { + type = "sticker", + name = "cryogun-sticker", + --icon = "__base__/graphics/icons/slowdown-sticker.png", + flags = {}, + duration_in_ticks = 30 * 60, + target_movement_modifier = 0.25 + }, + { + type = "stream", + name = "cryogun-stream", + action = { + { + action_delivery = { + target_effects = { + { + sticker = "cryogun-sticker", + type = "create-sticker" + }, + { + apply_damage_to_trees = false, + damage = { + amount = 2, + type = "cold" + }, + type = "damage" + }, + }, + type = "instant" + }, + radius = 4, + type = "area" + }, + { + action_delivery = { + target_effects = { + { + type = "create-entity", + entity_name = data_util.mod_prefix .. "cryogun-trigger", + trigger_created_entity = true, + show_in_tooltip = false, + }, + }, + type = "instant" + }, + type = "direct" + } + --[[{ + action_delivery = { + target_effects = { + { + entity_name = "fire-flame", + initial_ground_flame_count = 2, + show_in_tooltip = true, + type = "create-fire" + } + }, + type = "instant" + }, + type = "direct" + }]] + }, + flags = { + "not-on-map" + }, + ground_light = { + intensity = 0.8, + size = 3.2, + color = {r = 0.5, g = 0.5, b = 1} + }, + particle = { + filename = "__space-exploration-graphics__/graphics/entity/cryostream/cryostream-explosion.png", + frame_count = 32, + height = 64, + line_length = 8, + priority = "extra-high", + scale = 0.8, + width = 64 + }, + particle_buffer_size = 65, + particle_end_alpha = 1, + particle_fade_out_threshold = 0.9, + particle_horizontal_speed = 0.5, + particle_horizontal_speed_deviation = 0.0035, + particle_loop_exit_threshold = 0.25, + particle_loop_frame_count = 3, + particle_spawn_interval = 2, + particle_spawn_timeout = 2, + particle_start_alpha = 0.5, + particle_start_scale = 0.2, + particle_vertical_acceleration = 0.003, + shadow = { + filename = "__base__/graphics/entity/acid-projectile/projectile-shadow.png", + frame_count = 33, + height = 16, + line_length = 5, + priority = "high", + scale = 0.5, + shift = { + -0.045, + 0.1975 + }, + width = 28 + }, + smoke_sources = { + { + frequency = 0.05, + name = "soft-fire-smoke", + position = { + 0, + 0 + }, + starting_frame_deviation = 60 + } + }, + spine_animation = { + animation_speed = 2, + axially_symmetrical = false, + blend_mode = "additive-soft", + direction_count = 1, + filename = "__space-exploration-graphics__/graphics/entity/cryostream/cryostream-spine.png", + frame_count = 32, + height = 18, + line_length = 4, + scale = 0.75, + shift = { + 0, + 0 + }, + width = 32 + }, + stream_light = { + intensity = 1, + size = 3.2, + color = {r = 0.5, g = 0.5, b = 1} + }, + }, + { + type = "explosion", + name = data_util.mod_prefix .. "cryogun-trigger", + animations = { + { + direction_count = 1, + filename = "__space-exploration-graphics__/graphics/blank.png", + frame_count = 1, + height = 1, + line_length = 1, + width = 1 + } + }, + flags = { + "not-on-map", "placeable-off-grid" + }, + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "cryogun-ice-spacer", + flags = {"placeable-neutral", "placeable-off-grid"}, + icon = "__space-exploration-graphics__/graphics/icons/cryogun-ice.png", + icon_size = 64, + icon_mipmaps = 1, + order = "b-z", + collision_box = {{-0.49, -0.49}, {0.49, 0.49}}, + collision_mask = {"player-layer", "train-layer"}, + selection_box = {{-0.49, -0.49}, {0.49, 0.49}}, + selectable_in_game = false, + map_color = {r = 0.8, g = 0.9, b = 1, a = 0.5}, + picture = { + filename = "__space-exploration-graphics__/graphics/blank.png", + width = 1, + height = 1, + } + }, + { + type = "simple-entity", + name = data_util.mod_prefix .. "cryogun-ice", + icon = "__space-exploration-graphics__/graphics/icons/cryogun-ice.png", + icon_size = 64, + icon_mipmaps = 1, + subgroup = "grass", + collision_box = {{-1.1,-1.1},{1.1,1.1}}, + collision_mask = {"player-layer", "train-layer"}, + selection_box = {{-1.1,-1.1},{1.1,1.1}}, + count_as_rock_for_filtered_deconstruction = true, + damaged_trigger_effect = { + entity_name = "rock-damaged-explosion", + offset_deviation = { + { -0.5, -0.5 }, + { 0.5, 0.5 } + }, + offsets = { { 0, 1 } }, + type = "create-entity" + }, + flags = {"placeable-neutral", "placeable-off-grid"}, + map_color = {r = 0.8, g = 0.9, b = 1, a = 0.5}, + icon = "__space-exploration-graphics__/graphics/icons/cryogun-ice.png", + icon_mipmaps = 1, + icon_size = 64, + loot = { + { + item = data_util.mod_prefix .. "water-ice", + } + }, + max_health = 500, + resistances = { + { + type = "cold", + percent = 100 + }, + { + type = "poison", + percent = 100 + }, + { + type = "fire", + percent = -100 + }, + }, + minable = { + mining_particle = "stone-particle", + mining_time = 0.1, + results = { + { + amount_max = 1, + amount_min = 1, + name = data_util.mod_prefix .. "water-ice", + }, + } + }, + mined_sound = { + filename = "__base__/sound/deconstruct-bricks.ogg" + }, + order = "b-z", + pictures = { + { + filename = "__space-exploration-graphics__/graphics/entity/cryostream/ice/ice-01.png", + height = 179, + scale = 0.5, + shift = { + 0.25, + 0.0625 + }, + width = 201 + }, + { + filename = "__space-exploration-graphics__/graphics/entity/cryostream/ice/ice-02.png", + height = 171, + scale = 0.5, + shift = { + 0.429688, + 0.046875 + }, + width = 233 + }, + { + filename = "__space-exploration-graphics__/graphics/entity/cryostream/ice/ice-03.png", + height = 192, + scale = 0.5, + shift = { + 0.398438, + 0.03125 + }, + width = 240 + }, + { + filename = "__space-exploration-graphics__/graphics/entity/cryostream/ice/ice-04.png", + height = 175, + scale = 0.5, + shift = { + 0.148438, + 0.132812 + }, + width = 219 + }, + { + filename = "__space-exploration-graphics__/graphics/entity/cryostream/ice/ice-05.png", + height = 208, + scale = 0.5, + shift = { + 0.3125, + 0.0625 + }, + width = 240 + }, + { + filename = "__space-exploration-graphics__/graphics/entity/cryostream/ice/ice-06.png", + height = 190, + scale = 0.5, + shift = { + 0.1875, + 0.046875 + }, + width = 243 + }, + { + filename = "__space-exploration-graphics__/graphics/entity/cryostream/ice/ice-07.png", + height = 185, + scale = 0.5, + shift = { + 0.398438, + 0.0546875 + }, + width = 249 + }, + { + filename = "__space-exploration-graphics__/graphics/entity/cryostream/ice/ice-08.png", + height = 163, + scale = 0.5, + shift = { + 0.34375, + 0.0390625 + }, + width = 273 + }, + { + filename = "__space-exploration-graphics__/graphics/entity/cryostream/ice/ice-09.png", + height = 175, + scale = 0.5, + shift = { + 0.273438, + 0.0234375 + }, + width = 275 + }, + { + filename = "__space-exploration-graphics__/graphics/entity/cryostream/ice/ice-10.png", + height = 215, + scale = 0.5, + shift = { + 0.195312, + 0.0390625 + }, + width = 241 + }, + { + filename = "__space-exploration-graphics__/graphics/entity/cryostream/ice/ice-11.png", + height = 181, + scale = 0.5, + shift = { + 0.523438, + 0.03125 + }, + width = 318 + }, + { + filename = "__space-exploration-graphics__/graphics/entity/cryostream/ice/ice-12.png", + height = 224, + scale = 0.5, + shift = { + 0.0546875, + 0.0234375 + }, + width = 217 + }, + { + filename = "__space-exploration-graphics__/graphics/entity/cryostream/ice/ice-13.png", + height = 228, + scale = 0.5, + shift = { + 0.226562, + 0.046875 + }, + width = 332 + }, + { + filename = "__space-exploration-graphics__/graphics/entity/cryostream/ice/ice-14.png", + height = 243, + scale = 0.5, + shift = { + 0.195312, + 0.0390625 + }, + width = 290 + }, + { + filename = "__space-exploration-graphics__/graphics/entity/cryostream/ice/ice-15.png", + height = 225, + scale = 0.5, + shift = { + 0.609375, + 0.0234375 + }, + width = 349 + }, + { + filename = "__space-exploration-graphics__/graphics/entity/cryostream/ice/ice-16.png", + height = 250, + scale = 0.5, + shift = { + 0.132812, + 0.03125 + }, + width = 287 + } + }, + render_layer = "object", + vehicle_impact_sound = { + filename = "__base__/sound/car-stone-impact.ogg", + volume = 0.5 + } + } +}) + +for _, tech in pairs(data.raw.technology) do + if tech.effects then + for _, effect in pairs(tech.effects) do + if (effect.type == "ammo-damage" or effect.type == "gun-speed") and effect.ammo_category == "laser-turret" then + local c = table.deepcopy(effect) + c.ammo_category = "cryogun" + table.insert(tech.effects, c) + end + end + end +end diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/weapon-plague.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/weapon-plague.lua new file mode 100644 index 0000000..f93ce72 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/weapon-plague.lua @@ -0,0 +1,323 @@ +local data_util = require("data_util") + +-- concept: fire a plague rocket. +-- it explodes in a cloud, cloud applies disease stickers to biters. +-- initial impact fires many plague projectiles in all directions. +-- impact with biter applies sticker and a new set of plague projectiles. +-- each time a projectile is spawned deal small damage in radius to biter bases. +-- sticker slows and deals damage. biters are only damaged by the sticker. + +local wave_radius = 256 + +data:extend({ + { + type = "ammo", + name = data_util.mod_prefix .. "plague-bomb", + ammo_type = { + action = { + action_delivery = { + projectile = data_util.mod_prefix .. "plague-rocket", + source_effects = { + entity_name = "explosion-hit", + type = "create-entity" + }, + starting_speed = 0.05, + type = "projectile", + show_in_tooltip = false, + }, + type = "direct" + }, + category = "rocket", + cooldown_modifier = 3, + range_modifier = 3, + target_type = "position" + }, + icon = "__space-exploration-graphics__/graphics/icons/plague-bomb.png", + icon_size = 64, + icon_mipmaps = 1, + order = "d[rocket-launcher]-d[plague-bomb]", + stack_size = 10, + subgroup = "ammo", + }, + + + { + type = "projectile", + name = data_util.mod_prefix .. "plague-rocket", + acceleration = 0.005, + action = { + action_delivery = { + target_effects = { + { + entity_name = "explosion", + type = "create-entity" + }, + { + damage = { + amount = 50, + type = "poison" + }, + type = "damage" + }, + { + check_buildability = true, + entity_name = "small-scorchmark", + type = "create-entity" + }, + { + entity_name = data_util.mod_prefix .. "plague-cloud", + show_in_tooltip = false, + trigger_created_entity = true, + type = "create-entity" + }, + --[[{ + action = { + action_delivery = { + projectile = data_util.mod_prefix .. "plague-wave", + starting_speed = 0.05, + starting_speed_deviation = 0.049, + show_in_tooltip = false, + type = "projectile" + }, + radius = wave_radius, + repeat_count = 64, + target_entities = false, + trigger_from_target = true, + show_in_tooltip = false, + type = "area" + }, + show_in_tooltip = false, + type = "nested-result" + }]] + }, + type = "instant" + }, + type = "direct" + }, + animation = { + filename = "__base__/graphics/entity/rocket/rocket.png", + frame_count = 8, + height = 35, + line_length = 8, + priority = "high", + shift = { + 0, + 0 + }, + width = 9 + }, + flags = { + "not-on-map" + }, + light = { + intensity = 0.8, + size = 15 + }, + shadow = { + filename = "__base__/graphics/entity/rocket/rocket-shadow.png", + frame_count = 1, + height = 24, + priority = "high", + shift = { + 0, + 0 + }, + width = 7 + }, + smoke = { + { + deviation = { + 0.15, + 0.15 + }, + frequency = 1, + name = "smoke-fast", + position = { + 0, + -1 + }, + slow_down_factor = 1, + starting_frame = 3, + starting_frame_deviation = 5, + starting_frame_speed = 0, + starting_frame_speed_deviation = 5 + } + }, + }, + + + { + type = "projectile", + name = data_util.mod_prefix .. "plague-wave", + acceleration = -0.000001, + action = { + { + action_delivery = { + target_effects = { + { + entity_name = data_util.mod_prefix .. "plague-cloud", + show_in_tooltip = false, + trigger_created_entity = true, + type = "create-entity" + }, + }, + type = "instant" + }, + radius = 3, + entity_flags = { "breaths-air" }, + type = "area" + }, + }, + animation = { + animation_speed = 0.5, + filename = "__space-exploration-graphics__/graphics/entity/cloud/plague-cloud-faint.png", + run_mode = "backward", + flags = { + "compressed" + }, + frame_count = 45, + height = 128, + line_length = 7, + priority = "low", + scale = 3, + width = 128 + }, + flags = { + "not-on-map" + }, + shadow = { + filename = "__core__/graphics/empty.png", + frame_count = 1, + height = 1, + priority = "high", + width = 1 + }, + }, + + + { + type = "smoke-with-trigger", + name = data_util.mod_prefix .. "plague-cloud", + action = { + { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + type = "nested-result", + action = { + radius = 6, + type = "area", + action_delivery = { + type = "instant", + target_effects = { + { + type = "damage", + damage = { + amount = 20, + type = "poison" + }, + }, + { + type = "create-sticker", + sticker = data_util.mod_prefix .. "plague-sticker", + } + }, + }, + }, + }, + }, + }, + --[[{ + type = "area", + radius = wave_radius, + repeat_count = 3, + target_entities = false, + trigger_from_target = true, + action_delivery = { + direction_deviation = 0.5, + projectile = data_util.mod_prefix .. "plague-wave", + starting_speed = 0.05, + starting_speed_deviation = 0.049, + type = "projectile" + }, + }]] + }, + action_cooldown = 200, + affected_by_wind = true, + animation = { + animation_speed = 0.5, + filename = "__space-exploration-graphics__/graphics/entity/cloud/plague-cloud-faint.png", + run_mode = "backward", + flags = { + "compressed" + }, + frame_count = 45, + height = 128, + line_length = 7, + priority = "low", + scale = 3, + width = 128 + }, + cyclic = true, + duration = 30 * 60, + fade_away_duration = 120, + flags = { + "not-on-map" + }, + show_when_smoke_off = true, + spread_duration = 10, + }, + + + { + type = "sticker", + name = data_util.mod_prefix .. "plague-sticker", + animation = { + animation_speed = 0.4, + filename = "__base__/graphics/entity/slowdown-sticker/slowdown-sticker.png", + frame_count = 13, + height = 11, + priority = "extra-high", + width = 11 + }, + damage_per_tick = { + amount = 2, + type = "poison" + }, + duration_in_ticks = 60, + flags = { + "not-on-map" + }, + target_movement_modifier = 0.75, + --fire_spread_cooldown = 30, + --fire_spread_radius = 1, + --spread_fire_entity = "fire-flame-on-tree", + }, +}) + +if data_util.dot_string_greater_than(mods["base"], "0.18.35", false) then + data.raw.sticker[data_util.mod_prefix .. "plague-sticker"].animation = { + filename = "__base__/graphics/entity/slowdown-sticker/slowdown-sticker.png", + priority = "extra-high", + line_length = 5, + width = 22, + height = 24, + frame_count = 50, + animation_speed = 0.5, + tint = {r = 0.663, g = 1.000, b = 0.000, a = 0.694}, + shift = util.by_pixel (2,-1), + hr_version = + { + filename = "__base__/graphics/entity/slowdown-sticker/hr-slowdown-sticker.png", + line_length = 5, + width = 42, + height = 48, + frame_count = 50, + animation_speed = 0.5, + tint = {r = 0.663, g = 1.000, b = 0.000, a = 0.694}, + shift = util.by_pixel(2, -0.5), + scale = 0.5 + } + } +end diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/weapon-railgun.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/weapon-railgun.lua new file mode 100644 index 0000000..a885461 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/weapon-railgun.lua @@ -0,0 +1,104 @@ +local data_util = require("data_util") + +data:extend({ + { + type = "ammo-category", + name = "railgun", + bonus_gui_order = "k-c-b", + }, + { + type = "ammo", + name = data_util.mod_prefix .. "railgun-ammo", + icon = "__space-exploration-graphics__/graphics/icons/railgun-ammo.png", + icon_size = 64, icon_mipmaps = 4, + ammo_type = + { + category = "railgun", + target_type = "direction", + clamp_position = true, + action = + { + type = "line", + range = 100, + width = 0.5, + + range_effects = + { + type = "create-explosion", + entity_name = data_util.mod_prefix .. "railgun-beam" + }, + action_delivery = + { + type = "instant", + target_effects = + { + type = "damage", + damage = { amount = 250, type="physical"} + } + } + } + }, + magazine_size = 4, + subgroup = "ammo", + order = "c[railgun]", + stack_size = 200 + }, + { + type = "gun", + name = data_util.mod_prefix .. "railgun", + icon = "__space-exploration-graphics__/graphics/icons/railgun.png", + icon_size = 64, icon_mipmaps = 4, + subgroup = "gun", + order = "c[railgun]", + attack_parameters = + { + type = "projectile", + ammo_category = "railgun", + cooldown = 150, + movement_slow_down_factor = 0.4, + projectile_creation_distance = 0.6, + range = 100, + sound = + { + { + filename = "__space-exploration__/sound/railgun.ogg", + volume = 0.5 + } + } + }, + stack_size = 5 + }, + { + type = "explosion", + name = data_util.mod_prefix .. "railgun-beam", + localised_name = {"entity-name."..data_util.mod_prefix .. "railgun-beam"}, + flags = {"not-on-map"}, + subgroup = "explosions", + rotate = true, + beam = true, + animations = { + { + filename = "__space-exploration-graphics__/graphics/entity/railgun/beam.png", + priority = "extra-high", + width = 187, + height = 1, + frame_count = 6 + } + }, + light = {intensity = 1, size = 10, color = {r = 1.0, g = 0.8, b = 0.5}}, + smoke = "smoke-fast", + smoke_count = 2, + smoke_slow_down_factor = 1 + }, +}) +for _, tech in pairs(data.raw.technology) do + if tech.effects then + for _, effect in pairs(tech.effects) do + if (effect.type == "ammo-damage" or effect.type == "gun-speed") and effect.ammo_category == "bullet" then + local c = table.deepcopy(effect) + c.ammo_category = "railgun" + table.insert(tech.effects, c) + end + end + end +end diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/weapon-tesla.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/weapon-tesla.lua new file mode 100644 index 0000000..ac38213 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/item/weapon-tesla.lua @@ -0,0 +1,315 @@ +local data_util = require("data_util") + +data.raw["utility-constants"].default.bonus_gui_ordering["tesla"] = "k-c" +data:extend({ + { + type = "ammo-category", + name = "tesla", + bonus_gui_order = "k-c", + }, + { + type = "gun", + name = data_util.mod_prefix .. "tesla-gun", + attack_parameters = { + ammo_category = "tesla", + cooldown = 10, + movement_slow_down_factor = 0.2, + damage_modifier = 1, + range = 10, + type = "projectile", + sound = { + { + filename = "__space-exploration__/sound/tesla-gunshot.ogg", + volume = 0.9 + }, + }, + }, + icon = "__space-exploration-graphics__/graphics/icons/tesla-gun.png", + icon_size = 64, + order = "z-t[tesla]", + stack_size = 5, + subgroup = "gun", + }, + { + type = "ammo", + name = data_util.mod_prefix .. "tesla-ammo", + ammo_type = + { + category = "tesla", + target_type = "direction", + action = { + { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + { + type = "create-entity", + entity_name = data_util.mod_prefix .. "tesla-gun-trigger", + trigger_created_entity = true, + show_in_tooltip = false, + }, + { + action = { + action_delivery = { + target_effects = { + { + damage = { + amount = 0, + type = "electric" + }, + type = "damage" + }, + }, + type = "instant" + }, + radius = 32, + force = "enemy", + type = "area" + }, + type = "nested-result" + }, + } + } + }, + } + }, + icon = "__space-exploration-graphics__/graphics/icons/tesla-ammo.png", + icon_size = 64, + magazine_size = 10, + order = "z-t[tesla]", + stack_size = 200, + subgroup = "ammo", + sound = { + { + filename = "__space-exploration__/sound/tesla-gunshot.ogg", + volume = 0.9 + }, + }, + }, + { + type = "explosion", + name = data_util.mod_prefix .. "tesla-gun-trigger", + animations = { + { + direction_count = 1, + filename = "__space-exploration-graphics__/graphics/blank.png", + frame_count = 1, + height = 1, + line_length = 1, + width = 1 + } + }, + flags = { + "not-on-map", "placeable-off-grid" + }, + }, + { + type = "explosion", + name = data_util.mod_prefix .. "tesla-gun-light", + animations = { + { + blend_mode = "additive", + animation_speed = 1.5, + direction_count = 1, + filename = "__base__/graphics/entity/beam/tileable-beam-END.png", + frame_count = 16, + height = 54, + hr_version = { + blend_mode = "additive", + animation_speed = 1.5, + direction_count = 1, + filename = "__base__/graphics/entity/beam/hr-tileable-beam-END.png", + frame_count = 16, + height = 93, + line_length = 4, + scale = 0.5, + shift = { 0, 1 }, + width = 91 + }, + line_length = 4, + shift = { 0, 1 }, + width = 49 + } + }, + flags = { + "not-on-map", "placeable-off-grid" + }, + light = { + color = { + b = 1, + g = 1, + r = 0.7 + }, + intensity = 0.1, + size = 10 + }, + smoke = "smoke-fast", + smoke_count = 1, + smoke_slow_down_factor = 1, + }, + { + type = "beam", + name = data_util.mod_prefix .. "tesla-gun-beam", + action = { + action_delivery = { + target_effects = { + { + type = "create-entity", + entity_name = data_util.mod_prefix .. "tesla-gun-light", + }, + { + damage = { + amount = 20, + type = "electric" + }, + type = "damage" + }, + }, + type = "instant" + }, + type = "direct" + }, + body = { + { + blend_mode = "additive", + filename = "__base__/graphics/entity/beam/beam-body-1.png", + frame_count = 16, + height = 39, + line_length = 16, + width = 45 + }, + { + blend_mode = "additive", + filename = "__base__/graphics/entity/beam/beam-body-2.png", + frame_count = 16, + height = 39, + line_length = 16, + width = 45 + }, + { + blend_mode = "additive", + filename = "__base__/graphics/entity/beam/beam-body-3.png", + frame_count = 16, + height = 39, + line_length = 16, + width = 45 + }, + { + blend_mode = "additive", + filename = "__base__/graphics/entity/beam/beam-body-4.png", + frame_count = 16, + height = 39, + line_length = 16, + width = 45 + }, + { + blend_mode = "additive", + filename = "__base__/graphics/entity/beam/beam-body-5.png", + frame_count = 16, + height = 39, + line_length = 16, + width = 45 + }, + { + blend_mode = "additive", + filename = "__base__/graphics/entity/beam/beam-body-6.png", + frame_count = 16, + height = 39, + line_length = 16, + width = 45 + } + }, + damage_interval = 20, + ending = { + direction_count = 1, + filename = "__base__/graphics/entity/beam/tileable-beam-END.png", + frame_count = 16, + height = 54, + hr_version = { + direction_count = 1, + filename = "__base__/graphics/entity/beam/hr-tileable-beam-END.png", + frame_count = 16, + height = 93, + line_length = 4, + scale = 0.5, + shift = { + -0.078125, + -0.046875 + }, + width = 91 + }, + line_length = 4, + shift = { + -0.046875, + 0 + }, + width = 49 + }, + flags = { + "not-on-map", "placeable-off-grid" + }, + head = { + animation_speed = 0.5, + blend_mode = "additive", + filename = "__base__/graphics/entity/beam/beam-head.png", + frame_count = 16, + height = 39, + line_length = 16, + width = 45 + }, + random_target_offset = true, + start = { + direction_count = 1, + filename = "__base__/graphics/entity/beam/tileable-beam-START.png", + frame_count = 16, + height = 40, + hr_version = { + direction_count = 1, + filename = "__base__/graphics/entity/beam/hr-tileable-beam-START.png", + frame_count = 16, + height = 66, + line_length = 4, + scale = 0.5, + shift = { + 0.53125, + 0 + }, + width = 94 + }, + line_length = 4, + shift = { + -0.03125, + 0 + }, + width = 52 + }, + tail = { + blend_mode = "additive", + filename = "__base__/graphics/entity/beam/beam-tail.png", + frame_count = 16, + height = 39, + line_length = 16, + width = 45 + }, + target_offset_y = -0.3, + width = 0.5, + working_sound = { + { + filename = "__base__/sound/fight/electric-beam.ogg", + volume = 0.7 + } + } + }, +}) +for _, tech in pairs(data.raw.technology) do + if tech.effects then + for _, effect in pairs(tech.effects) do + if (effect.type == "ammo-damage" or effect.type == "gun-speed") and effect.ammo_category == "laser" then + local c = table.deepcopy(effect) + c.ammo_category = "tesla" + table.insert(tech.effects, c) + end + end + end +end diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/astrometrics-laboratory.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/astrometrics-laboratory.lua new file mode 100644 index 0000000..42ed924 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/astrometrics-laboratory.lua @@ -0,0 +1,98 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe +local obs_types = data_util.obs_types + +make_recipe({ + name = data_util.mod_prefix .. "astrometric-analysis-multispectral-1", + ingredients = { + { data_util.mod_prefix .. "visible-observation-data", 1 }, + { data_util.mod_prefix .. "uv-observation-data", 1 }, + { data_util.mod_prefix .. "infrared-observation-data", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 10}, + }, + results = { + { data_util.mod_prefix .. "astrometric-data", 3 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 3, + icon = "__space-exploration-graphics__/graphics/icons/data/astrometric.png", + icon_size = 64, + category = "space-astrometrics", + subgroup = "data-astronomic", + enabled = false, + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "astrometric-analysis-multispectral-2", + ingredients = { + { data_util.mod_prefix .. "empty-data", 5 }, + { data_util.mod_prefix .. "visible-observation-data", 1 }, + { data_util.mod_prefix .. "uv-observation-data", 1 }, + { data_util.mod_prefix .. "infrared-observation-data", 1 }, + { data_util.mod_prefix .. "microwave-observation-data", 1 }, + { data_util.mod_prefix .. "xray-observation-data", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 10}, + }, + results = { + { data_util.mod_prefix .. "astrometric-data", 10 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 10, + icon = "__space-exploration-graphics__/graphics/icons/data/astrometric.png", + icon_size = 64, + category = "space-astrometrics", + subgroup = "data-astronomic", + enabled = false, + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "astrometric-analysis-multispectral-3", + ingredients = { + { data_util.mod_prefix .. "empty-data", 13 }, + { data_util.mod_prefix .. "visible-observation-data", 1 }, + { data_util.mod_prefix .. "infrared-observation-data", 1 }, + { data_util.mod_prefix .. "uv-observation-data", 1 }, + { data_util.mod_prefix .. "microwave-observation-data", 1 }, + { data_util.mod_prefix .. "xray-observation-data", 1 }, + { data_util.mod_prefix .. "radio-observation-data", 1 }, + { data_util.mod_prefix .. "gammaray-observation-data", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 10}, + }, + results = { + { data_util.mod_prefix .. "astrometric-data", 20 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 20, + icon = "__space-exploration-graphics__/graphics/icons/data/astrometric.png", + icon_size = 64, + category = "space-astrometrics", + subgroup = "data-astronomic", + enabled = false, + always_show_made_in = true, +}) + +local i = 0 +for _, type in pairs(obs_types) do + i = i + 1 + make_recipe({ + name = data_util.mod_prefix .. type[1] .. "-observation-data", + ingredients = { + { data_util.mod_prefix .. "observation-frame-" .. type[1], type[2] }, + { data_util.mod_prefix .. "empty-data", 1 }, + }, + results = { + { name = data_util.mod_prefix .. type[1] .. "-observation-data", amount_min = 1, amount_max = 1, probability = type[3] }, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.99 - type[3] }, + { name = data_util.mod_prefix .. "scrap", amount_min = 1, amount_max = 1, probability = 0.01 * type[2] }, + }, + energy_required = math.floor(60 * type[3]) / 10, + main_product = data_util.mod_prefix .. type[1] .. "-observation-data", + icon = "__space-exploration-graphics__/graphics/icons/data/"..type[1].."-observation.png", + icon_size = 64, icon_mipmaps = 1, + category = "space-astrometrics", + order = "od-a"..i, + enabled = false, + always_show_made_in = true, + allow_as_intermediate = false, + }) +end diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/biochemical-laboratory.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/biochemical-laboratory.lua new file mode 100644 index 0000000..6e3cdad --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/biochemical-laboratory.lua @@ -0,0 +1,296 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +make_recipe({ + name = data_util.mod_prefix .. "bio-sludge-from-fish", + ingredients = { + { name = "raw-fish", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-water", amount = 7 }, + }, + results = { + { type = "fluid", name = data_util.mod_prefix .. "bio-sludge", amount = 10 }, + }, + icons = { + { icon = data.raw.fluid[data_util.mod_prefix .. "bio-sludge"].icon, scale = 1, icon_size = 64 }, + { icon = data.raw.capsule["raw-fish"].icon, scale = 0.75/2, icon_size = 64 }, + }, + energy_required = 4, + localised_name = {"recipe-name."..data_util.mod_prefix .. "bio-sludge-from-fish"}, + category = "space-biochemical", + enabled = false, + subgroup = "space-bioculture", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "bio-sludge-from-wood", + ingredients = { + { name = "wood", amount = 10}, + { type = "fluid", name = data_util.mod_prefix .. "space-water", amount = 10 }, + }, + results = { + { type = "fluid", name = data_util.mod_prefix .. "bio-sludge", amount = 20 }, + }, + icons = { + { icon = data.raw.fluid[data_util.mod_prefix .. "bio-sludge"].icon, scale = 1, icon_size = 64 }, + { icon = data.raw.item["wood"].icon, scale = 0.75/2, icon_size = 64 }, + }, + energy_required = 4, + localised_name = {"recipe-name."..data_util.mod_prefix .. "bio-sludge-from-wood"}, + category = "space-biochemical", + enabled = false, + subgroup = "space-bioculture", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "bio-sludge-from-vitamelange", + ingredients = { + { name = data_util.mod_prefix .. "vitalic-acid", amount = 1}, + { name = data_util.mod_prefix .. "vitamelange-nugget", amount = 40}, + { type = "fluid", name = data_util.mod_prefix .. "space-water", amount = 10 }, + }, + results = { + { type = "fluid", name = data_util.mod_prefix .. "bio-sludge", amount = 10 }, + }, + icons = { + { icon = data.raw.fluid[data_util.mod_prefix .. "bio-sludge"].icon, scale = 1, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "vitamelange-nugget"].icon, scale = 0.75/2, icon_size = 64 }, + }, + energy_required = 4, + localised_name = {"recipe-name."..data_util.mod_prefix .. "bio-sludge-from-vitamelange"}, + category = "space-biochemical", + enabled = false, + subgroup = "space-bioculture", + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "bio-sludge", + ingredients = { + { type = "fluid", name = data_util.mod_prefix .. "space-water", amount = 10 }, + { name = data_util.mod_prefix .. "specimen", amount = 1}, + }, + results = { + { type = "fluid", name = data_util.mod_prefix .. "bio-sludge", amount = 30 }, + { name = data_util.mod_prefix .. "contaminated-scrap", amount = 1 }, + }, + icons = { + { icon = data.raw.fluid[data_util.mod_prefix .. "bio-sludge"].icon, scale = 1, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "specimen"].icon, scale = 0.75, icon_size = 64 }, + }, + energy_required = 4, + main_product = data_util.mod_prefix .. "bio-sludge", + localised_name = {"recipe-name."..data_util.mod_prefix .. "bio-sludge"}, + category = "space-biochemical", + enabled = false, + subgroup = "space-bioculture", + allow_as_intermediate = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "bio-sludge-crude-oil", + ingredients = { + { type = "fluid", name = data_util.mod_prefix .. "space-water", amount = 5 }, + { name = data_util.mod_prefix .. "experimental-specimen", amount = 1}, + }, + results = { + { type = "fluid", name = data_util.mod_prefix .. "bio-sludge", amount = 20 }, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-space-water", amount = 5 }, + { type = "fluid", name = "crude-oil", amount = 100 }, + { name = data_util.mod_prefix .. "contaminated-scrap", amount = 1 }, + }, + icons = data_util.add_icons_to_stack(nil, { + {icon = data.raw.fluid[data_util.mod_prefix .. "bio-sludge"]}, + {icon = data.raw.fluid["crude-oil"], properties = {scale = 0.75}}, + }), + energy_required = 10, + category = "space-biochemical", + enabled = false, + subgroup = "space-bioculture", + allow_as_intermediate = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "biochemical-data", + ingredients = { + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + { name = data_util.mod_prefix .. "specimen", amount = 1}, + { name = data_util.mod_prefix .. "vitamelange-spice", amount = 1}, + { type="fluid", name = data_util.mod_prefix .. "chemical-gel", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "biochemical-data", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-bio-sludge", amount = 10 }, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-space-water", amount = 10 }, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "biochemical-data", + category = "space-biochemical", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "cryogenics-data", + ingredients = { + { name = data_util.mod_prefix .. "significant-specimen", amount = 1}, + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "cryogenics-data", amount_min = 1, amount_max = 1, probability = 0.9}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.09}, + { type="fluid", name = data_util.mod_prefix .. "contaminated-bio-sludge", amount = 10}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-warm", amount = 10}, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "cryogenics-data", + category = "space-biochemical", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "biochemical-resistance-data", + ingredients = { + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + { name = data_util.mod_prefix .. "experimental-specimen", amount = 1}, + { name = data_util.mod_prefix .. "vitalic-acid", amount = 1}, + { type="fluid", name = data_util.mod_prefix .. "chemical-gel", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "biochemical-resistance-data", amount_min = 1, amount_max = 1, probability = 0.9}, + { name = data_util.mod_prefix .. "experimental-specimen", amount_min = 1, amount_max = 1, probability = 0.5}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.09}, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-bio-sludge", amount = 5 }, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-space-water", amount = 5 }, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "biochemical-resistance-data", + category = "space-biochemical", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "nutrient-gel", + ingredients = { + { name = "coal", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "chemical-gel", amount = 4}, + { type = "fluid", name = data_util.mod_prefix .. "bio-sludge", amount = 20}, + { type = "fluid", name = data_util.mod_prefix .. "space-water", amount = 25}, + }, + results = { + { type = "fluid", name = data_util.mod_prefix .. "nutrient-gel", amount = 50}, + }, + energy_required = 5, + category = "space-biochemical", + subgroup = "space-bioculture", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "nutrient-gel-methane", + ingredients = { + { type = "fluid", name = data_util.mod_prefix .. "methane-gas", amount = 50}, + { type = "fluid", name = data_util.mod_prefix .. "chemical-gel", amount = 5}, + { type = "fluid", name = data_util.mod_prefix .. "bio-sludge", amount = 10}, + { type = "fluid", name = data_util.mod_prefix .. "space-water", amount = 20}, + }, + results = { + { type = "fluid", name = data_util.mod_prefix .. "nutrient-gel", amount = 50}, + }, + energy_required = 10, + category = "space-biochemical", + subgroup = "space-bioculture", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "nutrient-vat", + ingredients = { + { name = "iron-plate", amount = 1}, + { name = "glass", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "nutrient-gel", amount = 50}, + }, + results = { + { name = data_util.mod_prefix .. "nutrient-vat", amount = 5}, + }, + energy_required = 10, + category = "space-biochemical", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "plague-bomb", + ingredients = { + { name = data_util.mod_prefix .. "significant-specimen", amount = 100}, + { name = data_util.mod_prefix .. "biological-catalogue-4", amount = 10}, + { type="fluid", name = data_util.mod_prefix .. "bio-sludge", amount = 1000}, + { type="fluid", name = data_util.mod_prefix .. "chemical-gel", amount = 1000}, + }, + results = { + { name = data_util.mod_prefix .. "plague-bomb", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-bio-sludge", amount = 2000 }, + }, + energy_required = 60, + main_product = data_util.mod_prefix .. "plague-bomb", + category = "space-biochemical", + enabled = false, + always_show_made_in = true, +}) + + +make_recipe({ + name = data_util.mod_prefix .. "melting-water-ice", + ingredients = { + { name = data_util.mod_prefix .. "water-ice", amount = 1}, + }, + results = { + { type = "fluid", name = "water", amount = 100}, + }, + energy_required = 0.25, + subgroup = "space-fluids", + category = "chemistry", + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "melting-methane-ice", + ingredients = { + { name = data_util.mod_prefix .. "methane-ice", amount = 1}, + }, + results = { + { type = "fluid", name = data_util.mod_prefix .. "methane-gas", amount = 10}, + }, + energy_required = 0.25, + subgroup = "space-fluids", + category = "chemistry", + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "corrosion-resistance-data", + ingredients = { + { name = "glass", amount = 2}, + { name = data_util.mod_prefix .. "material-testing-pack", amount = 2}, + { name = data_util.mod_prefix .. "iridium-plate", amount = 1}, + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "chemical-gel", amount = 5}, + }, + results = { + { name = data_util.mod_prefix .. "corrosion-resistance-data", amount = 1}, + { name = data_util.mod_prefix .. "iridium-plate", amount_min = 1, amount_max = 1, probability = 0.5}, + { name = data_util.mod_prefix .. "scrap", amount = 6}, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-space-water", amount = 5}, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "corrosion-resistance-data", + category = "space-mechanical", + enabled = false, + always_show_made_in = true, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/cargo-rocket.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/cargo-rocket.lua new file mode 100644 index 0000000..13a4cbd --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/cargo-rocket.lua @@ -0,0 +1,127 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +data:extend({ + { + type = "recipe", + name = data_util.mod_prefix .. "space-capsule", + result = data_util.mod_prefix .. "space-capsule", + energy_required = 60, + ingredients = { + { data_util.mod_prefix .. "heat-shielding", 100 }, + { "rocket-control-unit", 100 }, + { "low-density-structure", 100 }, + { "rocket-fuel", 100 }, + { "solar-panel", 50 }, + { "accumulator", 50 }, + { "glass", 50 }, + }, + requester_paste_multiplier = 2, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "cargo-rocket-section", + result = data_util.mod_prefix .. "cargo-rocket-section", + energy_required = 30, + ingredients = { + { data_util.mod_prefix .. "heat-shielding", 4 }, + { "low-density-structure", 4 }, + { "rocket-control-unit", 4 }, + { data_util.mod_prefix .. "cargo-rocket-cargo-pod", 1 }, + { data_util.mod_prefix .. "cargo-rocket-fuel-tank", 1 } + }, + requester_paste_multiplier = 1, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "cargo-rocket-section-beryllium", + results = { + { data_util.mod_prefix .. "cargo-rocket-section", 2 } + }, + energy_required = 60, + ingredients = { + { data_util.mod_prefix .. "beryllium-plate", 10 }, + { data_util.mod_prefix .. "heat-shielding", 4 }, + { "low-density-structure", 4 }, + { "rocket-control-unit", 4 }, + { data_util.mod_prefix .. "cargo-rocket-cargo-pod", 1 }, + { data_util.mod_prefix .. "cargo-rocket-fuel-tank", 1 } + }, + requester_paste_multiplier = 1, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "cargo-rocket-section-unpack", + results = {{ + type = "item", + name = data_util.mod_prefix .. "cargo-rocket-section", + amount = 5, + catalyst_amount = 5 + }}, + result_count = 5, + energy_required = 5, + ingredients = { + { data_util.mod_prefix .. "cargo-rocket-section-packed", 1 } + }, + requester_paste_multiplier = 1, + enabled = false, + always_show_made_in = true, + always_show_products = true, + category = "crafting-with-fluid", -- no hand crafting + localised_name = {"recipe-name."..data_util.mod_prefix .. "cargo-rocket-section-unpack"}, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "cargo-rocket-section-pack", + result = data_util.mod_prefix .. "cargo-rocket-section-packed", + energy_required = 5, + ingredients = {{ + type = "item", + name = data_util.mod_prefix .. "cargo-rocket-section", + amount = 5, + catalyst_amount = 5 + }}, + requester_paste_multiplier = 1, + enabled = false, + always_show_made_in = true, + always_show_products = true, + category = "crafting-with-fluid", -- no hand crafting + localised_name = {"recipe-name."..data_util.mod_prefix .. "cargo-rocket-section-pack"}, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "cargo-rocket-cargo-pod", + result = data_util.mod_prefix .. "cargo-rocket-cargo-pod", + energy_required = 30, + ingredients = { + { "steel-plate", 6 }, + { "advanced-circuit", 4 }, + { "iron-chest", 4 }, -- Bentham, at least they die in fire + { "fast-inserter", 2}, + }, + requester_paste_multiplier = 2, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "cargo-rocket-fuel-tank", + result = data_util.mod_prefix .. "cargo-rocket-fuel-tank", + energy_required = 30, + ingredients = { + { "advanced-circuit", 2 }, + { "pipe", 2 }, + { "storage-tank", 1 }, + { "pump", 1 }, + }, + requester_paste_multiplier = 2, + enabled = false, + always_show_made_in = true, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/condenser-turbine.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/condenser-turbine.lua new file mode 100644 index 0000000..8f88ae8 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/condenser-turbine.lua @@ -0,0 +1,66 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +make_recipe({ + name = data_util.mod_prefix .. "condenser-turbine", + ingredients = { + { name = "steam-turbine", amount = 1}, + { name = "storage-tank", amount = 2}, + { name = "electric-engine-unit", amount = 10}, + { name = "low-density-structure", amount = 20}, + { name = "glass", amount = 20}, + }, + results = { + { name = data_util.mod_prefix .. "condenser-turbine", amount = 1}, + }, + energy_required = 5, + category = "crafting", + enabled = false, + always_show_made_in = false, +}) +local steam_temperature_ranges = { + 100, -- Min + 165, -- Vanilla boiler + 200, + 300, + 400, + 415, -- K2 HE + 500, -- HE + 600, + 700, + 800, + 900, + 1000 -- last one is accepted but previous temperature is used internally +} +for i = 1, #steam_temperature_ranges - 1 do + local low = steam_temperature_ranges[i] + local high = steam_temperature_ranges[i+1] + + data:extend({ + { + type = "recipe", + name = data_util.mod_prefix .. "condenser-turbine-reclaim-water-"..low.."-"..high, + icon = "__space-exploration-graphics__/graphics/icons/fluid/water.png", + icon_size = 64, + order = "a", + subgroup = "spaceship-process", + energy_required = 0.1, + category = "condenser-turbine", + ingredients = + { + {type="fluid", name="steam", amount=100, + minimum_temperature = low - 1, + maximum_temperature = (i == (#steam_temperature_ranges - 1)) and (high + 1) or (high -1)}, + }, + results = { + {type="fluid", name="water", amount=99}, + {type="fluid", name=data_util.mod_prefix .. "decompressing-steam", amount=75, temperature = low}, + }, + hidden = true, + enabled = true, + allow_as_intermediate = false, + always_show_made_in = true, + localised_name = {"recipe-name.se-condenser-turbine-reclaim-water"} + }, + }) +end diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/core-miner.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/core-miner.lua new file mode 100644 index 0000000..1d09068 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/core-miner.lua @@ -0,0 +1,24 @@ +local data_util = require("data_util") +data:extend({ + { + type = "recipe", + name = data_util.mod_prefix .. "core-miner", + category = "crafting", + enabled = false, + energy_required = 100, + ingredients = { + {"concrete", 400}, + {"electronic-circuit", 200}, + {"steel-plate", 100}, + {"electric-mining-drill", 40}, + }, + results= + { + {name = data_util.mod_prefix .. "core-miner", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/core-miner.png", + icon_size = 64, + order = "zzz-core-miner", + always_show_made_in = true, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/decontamination-facility.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/decontamination-facility.lua new file mode 100644 index 0000000..104400a --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/decontamination-facility.lua @@ -0,0 +1,178 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +data:extend({{ + type = "recipe", + name = data_util.mod_prefix .. "space-water", + enabled = false, + energy_required = 1, + ingredients = { + { type = "fluid", name = "water", amount = 99 }, + { type = "fluid", name = "lubricant", amount = 1 } + }, + energy_required = 1, + results = { { type = "fluid", name = data_util.mod_prefix .. "space-water", amount = 10 } }, + allow_as_intermediate = false, + icon_size = 64, + crafting_machine_tint = nil, -- TODO: tint + category = "space-decontamination", + always_show_made_in = true, +}}) + +make_recipe({ + name = data_util.mod_prefix .. "used-lifesupport-canister-cleaning-space", + ingredients = { + { data_util.mod_prefix .. "used-lifesupport-canister", 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-water", amount = 10}, + }, + results = { + { data_util.mod_prefix .. "empty-lifesupport-canister", 1}, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-space-water", amount = 10}, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-bio-sludge", amount = 10}, + }, + energy_required = 10, + localised_name = {"recipe-name."..data_util.mod_prefix .. "used-lifesupport-canister-cleaning-space"}, + main_product = data_util.mod_prefix .. "empty-lifesupport-canister", + allow_as_intermediate = false, + category = "space-decontamination", + icon = "__space-exploration-graphics__/graphics/icons/used-lifesupport-canister.png", + icon_size = 64, icon_mipmaps = 1, + enabled = false, + always_show_made_in = true, +}) + +data:extend({{ + type = "recipe", + name = data_util.mod_prefix .. "bio-sludge-decontamination", + enabled = false, + energy_required = 5, + ingredients = { + { type = "fluid", name = data_util.mod_prefix .."contaminated-bio-sludge", amount = 100 }, + }, + results = { + { name = data_util.mod_prefix .."contaminated-scrap", amount_min = 1, amount_max = 1, probability = 0.01 }, + { type = "fluid", name = data_util.mod_prefix .."bio-sludge", amount = 99 }, + }, + energy_required = 5, + allow_as_intermediate = false, + icon_size = 64, + crafting_machine_tint = nil, -- TODO: tint + category = "space-decontamination", + subgroup = "space-fluids", + icons = data_util.transition_icons( + { + icon = data.raw.fluid[data_util.mod_prefix .. "contaminated-bio-sludge"].icon, + icon_size = data.raw.fluid[data_util.mod_prefix .. "contaminated-bio-sludge"].icon_size, scale = 0.5 + }, + { + icon = data.raw.fluid[data_util.mod_prefix .. "bio-sludge"].icon, + icon_size = data.raw.fluid[data_util.mod_prefix .. "bio-sludge"].icon_size, scale = 0.5 + } + ), + always_show_made_in = true, +}}) + +data:extend({{ + type = "recipe", + name = data_util.mod_prefix .. "space-water-decontamination", + enabled = false, + energy_required = 5, + ingredients = { + { type = "fluid", name = data_util.mod_prefix .."contaminated-space-water", amount = 100 }, + }, + results = { + { type = "fluid", name = data_util.mod_prefix .."space-water", amount = 99 }, + { type = "fluid", name = data_util.mod_prefix .."contaminated-bio-sludge", amount = 1 }, + { name = data_util.mod_prefix .."contaminated-scrap", amount_min = 1, amount_max = 1, probability = 0.01 }, + }, + energy_required = 5, + allow_as_intermediate = false, + icon_size = 64, + crafting_machine_tint = nil, -- TODO: tint + category = "space-decontamination", + subgroup = "space-fluids", + icons = data_util.transition_icons( + { + icon = data.raw.fluid[data_util.mod_prefix .. "contaminated-space-water"].icon, + icon_size = data.raw.fluid[data_util.mod_prefix .. "contaminated-space-water"].icon_size, scale = 0.5 + }, + { + icon = data.raw.fluid[data_util.mod_prefix .. "space-water"].icon, + icon_size = data.raw.fluid[data_util.mod_prefix .. "space-water"].icon_size, scale = 0.5 + } + ), + always_show_made_in = true, +}}) + +make_recipe({ + name = data_util.mod_prefix .. "data-storage-substrate-cleaned", + ingredients = { + { data_util.mod_prefix .. "data-storage-substrate", 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-water", amount = 5 } + }, + results = { + { data_util.mod_prefix .. "data-storage-substrate-cleaned", 1}, + { name = data_util.mod_prefix .. "scrap", amount_min = 1, amount_max = 1, probability = 0.01 }, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-space-water", amount = 5 } + }, + icons = { + { icon = data.raw.item[data_util.mod_prefix .. "data-storage-substrate-cleaned"].icon, scale = 1, icon_size = 64 }, + { icon = data.raw.fluid[ data_util.mod_prefix .. "space-water"].icon, scale = 0.6, icon_size = 64, shift = {0,-6}}, + }, + energy_required = 2.5, + main_product = data_util.mod_prefix .. "data-storage-substrate-cleaned", + category = "space-decontamination", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "data-storage-substrate-cleaned-chemical", + ingredients = { + { data_util.mod_prefix .. "data-storage-substrate", 1}, + { type = "fluid", name = data_util.mod_prefix .. "chemical-gel", amount = 1 } + }, + results = { + { data_util.mod_prefix .. "data-storage-substrate-cleaned", 1}, + }, + icons = { + { icon = data.raw.item[data_util.mod_prefix .. "data-storage-substrate-cleaned"].icon, scale = 1, icon_size = 64 }, + { icon = data.raw.fluid[ data_util.mod_prefix .. "chemical-gel"].icon, scale = 0.6, icon_size = 64, shift = {0,-6} }, + }, + energy_required = 2.5, + main_product = data_util.mod_prefix .. "data-storage-substrate-cleaned", + category = "space-decontamination", + enabled = false, + always_show_made_in = true, +}) + +-- scrap processing +make_recipe({ + name = data_util.mod_prefix .. "scrap-decontamination", + ingredients = { + { data_util.mod_prefix .. "contaminated-scrap", 20}, + { type = "fluid", name = data_util.mod_prefix .. "space-water", amount = 2}, + }, + results = { + { name = data_util.mod_prefix .. "scrap", amount = 20}, + { name = "uranium-ore", amount_min = 1, amount_max = 1, probability = 0.001}, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-space-water", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-bio-sludge", amount = 1}, + }, + energy_required = 6, + allow_as_intermediate = false, + category = "space-decontamination", + subgroup = "space-components", + icons = data_util.transition_icons( + { + icon = data.raw.item[data_util.mod_prefix .. "contaminated-scrap"].icon, + icon_size = data.raw.item[data_util.mod_prefix .. "contaminated-scrap"].icon_size, scale = 0.5 + }, + { + icon = data.raw.item[data_util.mod_prefix .. "scrap"].icon, + icon_size = data.raw.item[data_util.mod_prefix .. "scrap"].icon_size, scale = 0.5 + } + ), + enabled = false, + always_show_made_in = true, +}, false, true) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/electromagnetics-laboratory.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/electromagnetics-laboratory.lua new file mode 100644 index 0000000..a47cae3 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/electromagnetics-laboratory.lua @@ -0,0 +1,259 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +make_recipe({ + name = data_util.mod_prefix .. "magnetic-canister", + ingredients = { + { data_util.mod_prefix .. "canister", 1}, + { "battery", 1}, + { data_util.mod_prefix .. "superconductive-cable", 1}, + }, + results = { + { data_util.mod_prefix .. "magnetic-canister", 1}, + }, + energy_required = 10, + category = "space-electromagnetics", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "bioelectrics-data", + ingredients = { + { name = data_util.mod_prefix .. "significant-specimen", amount = 1}, + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "ion-stream", amount = 5}, + }, + results = { + { name = data_util.mod_prefix .. "bioelectrics-data", amount_min = 1, amount_max = 1, probability = 0.9}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.09}, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "bioelectrics-data", + category = "space-electromagnetics", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "conductivity-data", + ingredients = { + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + { name = "copper-plate", amount = 4}, + { name = data_util.mod_prefix .. "holmium-plate", amount = 1}, + { name = "electronic-circuit", amount = 2}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "conductivity-data", amount = 1}, + { name = data_util.mod_prefix .. "contaminated-scrap", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "conductivity-data", + category = "space-electromagnetics", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "superconductivity-data", + ingredients = { + { name = data_util.mod_prefix .. "holmium-cable", amount = 2}, + { name = data_util.mod_prefix .. "cryonite-rod", amount = 1}, + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "superconductivity-data", amount_min = 1, amount_max = 1, probability = 0.7}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.29}, + { name = data_util.mod_prefix .. "contaminated-scrap", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-warm", amount = 10}, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "superconductivity-data", + category = "space-electromagnetics", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "superconductive-cable", + ingredients = { + { name = data_util.mod_prefix .. "holmium-cable", amount = 2}, + { name = data_util.mod_prefix .. "cryonite-rod", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "superconductive-cable", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-warm", amount = 10}, + }, + energy_required = 30, + main_product = data_util.mod_prefix .. "superconductive-cable", + category = "space-electromagnetics", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "forcefield-data", + ingredients = { + { name = data_util.mod_prefix .. "polarisation-data", amount = 1}, + { name = data_util.mod_prefix .. "electromagnetic-field-data", amount = 1}, + { name = data_util.mod_prefix .. "holmium-cable", amount = 4}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "forcefield-data", amount_min = 1, amount_max = 1, probability = 0.5}, + { name = data_util.mod_prefix .. "empty-data", amount_min = 1, amount_max = 1, probability = 1}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.49}, + { name = data_util.mod_prefix .. "contaminated-scrap", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "forcefield-data", + category = "space-electromagnetics", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "neural-anomaly-data", + ingredients = { + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + { name = "processing-unit", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "neural-gel-2", amount = 20}, + }, + results = { + { name = data_util.mod_prefix .. "neural-anomaly-data", amount_min = 1, amount_max = 1, probability = 0.5}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.49}, + { name = "processing-unit", amount_min = 1, amount_max = 1, probability = 0.75}, + { type = "fluid", name = data_util.mod_prefix .. "neural-gel-2", amount = 10}, + { type = "fluid", name = data_util.mod_prefix .. "bio-sludge", amount = 10}, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "neural-anomaly-data", + category = "space-electromagnetics", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "electromagnetic-field-data", + ingredients = { + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "ion-stream", amount = 50}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "electromagnetic-field-data", amount_min = 1, amount_max = 1, probability = 0.95}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.04}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "electromagnetic-field-data", + category = "space-electromagnetics", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "electrical-shielding-data", + ingredients = { + { name = data_util.mod_prefix .. "empty-data", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "ion-stream", amount = 10}, + { name = "plastic-bar", amount = 1 }, + { name = data_util.mod_prefix .. "iridium-plate", amount = 1}, + }, + results = { + { name = data_util.mod_prefix .. "electrical-shielding-data", amount = 1}, + { name = data_util.mod_prefix .. "contaminated-scrap", amount = 5}, + { name = data_util.mod_prefix .. "iridium-plate", amount_min = 1, amount_max = 1, probability = 0.75 }, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "electrical-shielding-data", + category = "space-electromagnetics", + enabled = false, + always_show_made_in = true, +}) + + +make_recipe({ + name = data_util.mod_prefix .. "naquium-energy-data", + ingredients = { + { name = data_util.mod_prefix .. "naquium-ingot", amount = 4}, + { type = "fluid", name = data_util.mod_prefix .. "ion-stream", amount = 40}, + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + }, + results = { + { name = data_util.mod_prefix .. "naquium-energy-data", amount = 1}, + }, + energy_required = 8, + main_product = data_util.mod_prefix .. "naquium-energy-data", + category = "space-electromagnetics", + enabled = false, + always_show_made_in = true, +}) + + +data_util.make_recipe({ + name = data_util.mod_prefix .. "railgun", + ingredients = { + { "plastic-bar", 10}, + { data_util.mod_prefix .. "heavy-girder", 10}, + { type = "fluid", name = data_util.mod_prefix .. "ion-stream", amount = 10}, + { "copper-cable", 1000}, + }, + results = { + { data_util.mod_prefix .. "railgun", 1}, + }, + energy_required = 30, + category = "space-electromagnetics", + enabled = false, + always_show_made_in = true, +}) + +data_util.make_recipe({ + name = data_util.mod_prefix .. "railgun-ammo", + ingredients = { + { data_util.mod_prefix .. "heavy-girder", 1}, + { "battery", 10}, + }, + results = { + { data_util.mod_prefix .. "railgun-ammo", 1}, + }, + energy_required = 10, + category = "space-electromagnetics", + enabled = false, + always_show_made_in = true, +}) + +data_util.make_recipe({ + name = data_util.mod_prefix .. "tesla-gun", + ingredients = { + { "plastic-bar", 10}, + { data_util.mod_prefix .. "holmium-plate", 10}, + { data_util.mod_prefix .. "holmium-cable", 10}, + { type = "fluid", name = data_util.mod_prefix .. "ion-stream", amount = 10}, + }, + results = { + { data_util.mod_prefix .. "tesla-gun", 1}, + }, + energy_required = 60, + category = "space-electromagnetics", + enabled = false, +}) +data_util.make_recipe({ + name = data_util.mod_prefix .. "tesla-ammo", + ingredients = { + { "battery", 10}, + { data_util.mod_prefix .. "holmium-plate", 1}, + }, + results = { + { data_util.mod_prefix .. "tesla-ammo", 1}, + }, + energy_required = 10, + category = "space-electromagnetics", + enabled = false, + always_show_made_in = true, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/gate.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/gate.lua new file mode 100644 index 0000000..ef72929 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/gate.lua @@ -0,0 +1,44 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +data:extend({ + --[[{ + type = "recipe", + name = data_util.mod_prefix .. "gate-addon", + icon = "__space-exploration-graphics__/graphics/icons/scaffold.png", + icon_size = 64, + ingredients = { + { data_util.mod_prefix .. "space-pipe", 1000}, + { "battery", 1000}, + { data_util.mod_prefix .. "superconductive-cable", 1000}, + }, + results = {}, + energy_required = 1, + category = "fixed-recipe", + subgroup = "ancient", + order = "z", + enabled = true, + always_show_made_in = false, + flags = {"hidden"} + },]]-- + { + type = "recipe", + name = data_util.mod_prefix .. "gate-platform", + icon = "__space-exploration-graphics__/graphics/icons/scaffold.png", + icon_size = 64, + ingredients = { + { data_util.mod_prefix .. "space-pipe", 100}, + { "battery", 100}, + { data_util.mod_prefix .. "superconductive-cable", 100}, + { data_util.mod_prefix .. "naquium-processor", 9}, + }, + results = {}, + energy_required = 1, + category = "fixed-recipe", + subgroup = "ancient", + order = "z", + enabled = true, + always_show_made_in = false, + hidden = true, + } +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/genetics-laboratory.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/genetics-laboratory.lua new file mode 100644 index 0000000..98b4976 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/genetics-laboratory.lua @@ -0,0 +1,111 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +make_recipe({ + name = data_util.mod_prefix .. "comparative-genetic-data", + ingredients = { + { name = data_util.mod_prefix .. "significant-specimen", amount = 1}, + { name = data_util.mod_prefix .. "specimen", amount = 1}, + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + }, + results = { + { name = data_util.mod_prefix .. "comparative-genetic-data", amount = 1}, + { type="fluid", name = data_util.mod_prefix .. "bio-sludge", amount = 20}, + }, + energy_required = 2, + main_product = data_util.mod_prefix .. "comparative-genetic-data", + category = "space-genetics", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "experimental-bioculture", + ingredients = { + { name = data_util.mod_prefix .. "experimental-genetic-data", amount = 1}, + { name = data_util.mod_prefix .. "nutrient-vat", amount = 1}, + { name = data_util.mod_prefix .. "vitamelange-extract", amount = 1}, + { type="fluid", name = data_util.mod_prefix .. "bio-sludge", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "experimental-bioculture", amount = 1}, + { name = data_util.mod_prefix .. "junk-data", amount = 1}, + }, + energy_required = 3, + main_product = data_util.mod_prefix .. "experimental-bioculture", + category = "space-genetics", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "experimental-genetic-data", + ingredients = { + { name = data_util.mod_prefix .. "genetic-data", amount = 1}, + { name = data_util.mod_prefix .. "biochemical-data", amount = 1}, + }, + results = { + { name = data_util.mod_prefix .. "experimental-genetic-data", amount = 2}, + }, + energy_required = 3, + main_product = data_util.mod_prefix .. "experimental-genetic-data", + category = "space-genetics", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "bioculture", + ingredients = { + { name = data_util.mod_prefix .. "genetic-data", amount = 10}, + { name = data_util.mod_prefix .. "nutrient-vat", amount = 10}, + { name = data_util.mod_prefix .. "vitamelange-spice", amount = 5}, + { type="fluid", name = data_util.mod_prefix .. "bio-sludge", amount = 50}, + }, + results = { + { name = data_util.mod_prefix .. "bioculture", amount = 10}, + { name = data_util.mod_prefix .. "genetic-data", amount = 9}, + { name = data_util.mod_prefix .. "junk-data", amount = 1}, + }, + energy_required = 5, + main_product = data_util.mod_prefix .. "bioculture", + category = "space-genetics", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "genetic-data", + ingredients = { + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + { type="fluid", name = data_util.mod_prefix .. "bio-sludge", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "genetic-data", amount = 1}, + { type="fluid", name = data_util.mod_prefix .. "contaminated-space-water", amount = 9}, + }, + energy_required = 1, + main_product = data_util.mod_prefix .. "genetic-data", + category = "space-genetics", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "significant-specimen", + ingredients = { + { name = data_util.mod_prefix .. "experimental-specimen", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "neural-gel", amount = 1}, + { name = data_util.mod_prefix .. "vitalic-reagent", amount = 1}, + }, + results = { + { name = data_util.mod_prefix .. "significant-specimen", amount_min = 1, amount_max = 1, probability = 0.3}, + { name = data_util.mod_prefix .. "experimental-specimen", amount_min = 1, amount_max = 1, probability = 0.6}, + { type="fluid", name = data_util.mod_prefix .. "bio-sludge", amount_min = 1, amount_max = 5, probability = 1}, + }, + energy_required = 1, + main_product = data_util.mod_prefix .. "significant-specimen", + category = "space-genetics", + enabled = false, + always_show_made_in = true, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/gravimetrics-laboratory.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/gravimetrics-laboratory.lua new file mode 100644 index 0000000..537b099 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/gravimetrics-laboratory.lua @@ -0,0 +1,308 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +make_recipe({ + name = data_util.mod_prefix .. "darkmatter-data", + ingredients = { + { data_util.mod_prefix .. "gravitational-lensing-data", 1 }, + { data_util.mod_prefix .. "negative-pressure-data", 1 }, + }, + results = { + { name = data_util.mod_prefix .. "darkmatter-data", amount_min = 1, amount_max = 1, probability = 0.6 }, + { data_util.mod_prefix .. "junk-data", 1 }, + { name = data_util.mod_prefix .. "broken-data", amount_min = 1, amount_max = 1, probability = 0.39 }, + }, + energy_required = 20, + main_product = data_util.mod_prefix .. "darkmatter-data", + icon = "__space-exploration-graphics__/graphics/icons/data/darkmatter.png", + icon_size = 64, + category = "space-gravimetrics", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "gravitational-lensing-data", + ingredients = { + { data_util.mod_prefix .. "astrometric-data", 1 }, + }, + results = { + { name = data_util.mod_prefix .. "gravitational-lensing-data", amount_min = 1, amount_max = 1, probability = 0.95 }, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.04}, + }, + energy_required = 20, + main_product = data_util.mod_prefix .. "gravitational-lensing-data", + icon = "__space-exploration-graphics__/graphics/icons/data/gravitational-lensing.png", + icon_size = 64, + category = "space-gravimetrics", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "timespace-anomaly-data", + ingredients = { + { data_util.mod_prefix .. "gravitational-lensing-data", 1 }, + { data_util.mod_prefix .. "micro-black-hole-data", 1 }, + { data_util.mod_prefix .. "negative-pressure-data", 1 }, + { data_util.mod_prefix .. "zero-point-energy-data", 1 }, + { data_util.mod_prefix .. "naquium-cube", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "timespace-anomaly-data", amount_min = 1, amount_max = 1, probability = 0.6 }, + { name = data_util.mod_prefix .. "gravitational-lensing-data", amount_min = 1, amount_max = 1, probability = 0.6 }, + { name = data_util.mod_prefix .. "micro-black-hole-data", amount_min = 1, amount_max = 1, probability = 0.6 }, + { name = data_util.mod_prefix .. "negative-pressure-data", amount_min = 1, amount_max = 1, probability = 0.6 }, + { name = data_util.mod_prefix .. "zero-point-energy-data", amount_min = 1, amount_max = 1, probability = 0.6 }, + { name = data_util.mod_prefix .. "empty-data", amount_min = 1, amount_max = 1, probability = 0.6 }, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.6 }, + { name = data_util.mod_prefix .. "broken-data", amount_min = 1, amount_max = 1, probability = 0.6 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 30, + main_product = data_util.mod_prefix .. "timespace-anomaly-data", + icon = "__space-exploration-graphics__/graphics/icons/data/timespace-anomaly.png", + icon_size = 64, + category = "space-gravimetrics", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "dark-energy-data", + ingredients = { + { name = data_util.mod_prefix .. "negative-pressure-data", amount = 1}, + { name = data_util.mod_prefix .. "astrometric-data", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "dark-energy-data", amount_min = 1, amount_max = 1, probability = 0.75}, + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.24}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 30, + main_product = data_util.mod_prefix .. "dark-energy-data", + category = "space-gravimetrics", + enabled = false, + always_show_made_in = true, +}) + + + +make_recipe({ + name = data_util.mod_prefix .. "space-fold-data", + ingredients = { + { name = data_util.mod_prefix .. "significant-data", amount = 1 }, + { name = data_util.mod_prefix .. "naquium-plate", amount = 1 }, + { name = data_util.mod_prefix .. "arcosphere-a", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-b", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "space-fold-data", amount = 1 }, + { name = data_util.mod_prefix .. "arcosphere-c", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-d", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-e", amount = 0}, + { name = data_util.mod_prefix .. "arcosphere-f", amount = 0}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 20, + main_product = data_util.mod_prefix .. "space-fold-data", + category = "arcosphere", + enabled = false, + always_show_made_in = true, + localised_description = {"space-exploration.arcosphere-random"} +}) +make_recipe({ + name = data_util.mod_prefix .. "space-fold-data-alt", + ingredients = { + { name = data_util.mod_prefix .. "significant-data", amount = 1 }, + { name = data_util.mod_prefix .. "naquium-plate", amount = 1 }, + { name = data_util.mod_prefix .. "arcosphere-a", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-b", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "space-fold-data", amount = 1 }, + { name = data_util.mod_prefix .. "arcosphere-c", amount = 0}, + { name = data_util.mod_prefix .. "arcosphere-d", amount = 0}, + { name = data_util.mod_prefix .. "arcosphere-e", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-f", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 20, + main_product = data_util.mod_prefix .. "space-fold-data", + category = "arcosphere", + enabled = false, + always_show_made_in = true, + localised_description = {"space-exploration.arcosphere-random"} +}) + +make_recipe({ + name = data_util.mod_prefix .. "space-warp-data", + ingredients = { + { name = data_util.mod_prefix .. "significant-data", amount = 1 }, + { name = data_util.mod_prefix .. "naquium-plate", amount = 1 }, + { name = data_util.mod_prefix .. "arcosphere-e", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-f", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "space-warp-data", amount = 1 }, + { name = data_util.mod_prefix .. "arcosphere-c", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-d", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-h", amount = 0}, + { name = data_util.mod_prefix .. "arcosphere-g", amount = 0}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 20, + main_product = data_util.mod_prefix .. "space-warp-data", + category = "arcosphere", + enabled = false, + always_show_made_in = true, + localised_description = {"space-exploration.arcosphere-random"} +}) +make_recipe({ + name = data_util.mod_prefix .. "space-warp-data-alt", + ingredients = { + { name = data_util.mod_prefix .. "significant-data", amount = 1 }, + { name = data_util.mod_prefix .. "naquium-plate", amount = 1 }, + { name = data_util.mod_prefix .. "arcosphere-e", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-f", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "space-warp-data", amount = 1 }, + { name = data_util.mod_prefix .. "arcosphere-c", amount = 0}, + { name = data_util.mod_prefix .. "arcosphere-d", amount = 0}, + { name = data_util.mod_prefix .. "arcosphere-h", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-g", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 20, + main_product = data_util.mod_prefix .. "space-warp-data", + category = "arcosphere", + enabled = false, + always_show_made_in = true, + localised_description = {"space-exploration.arcosphere-random"} +}) + +make_recipe({ + name = data_util.mod_prefix .. "space-dialation-data", + ingredients = { + { name = data_util.mod_prefix .. "significant-data", amount = 1 }, + { name = data_util.mod_prefix .. "naquium-plate", amount = 1 }, + { name = data_util.mod_prefix .. "arcosphere-c", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-h", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "space-dialation-data", amount = 1 }, + { name = data_util.mod_prefix .. "arcosphere-a", amount = 2}, + { name = data_util.mod_prefix .. "arcosphere-f", amount = 0}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 20, + main_product = data_util.mod_prefix .. "space-dialation-data", + category = "arcosphere", + enabled = false, + always_show_made_in = true, + localised_description = {"space-exploration.arcosphere-random"} +}) +make_recipe({ + name = data_util.mod_prefix .. "space-dialation-data-alt", + ingredients = { + { name = data_util.mod_prefix .. "significant-data", amount = 1 }, + { name = data_util.mod_prefix .. "naquium-plate", amount = 1 }, + { name = data_util.mod_prefix .. "arcosphere-c", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-h", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "space-dialation-data", amount = 1 }, + { name = data_util.mod_prefix .. "arcosphere-a", amount = 0}, + { name = data_util.mod_prefix .. "arcosphere-f", amount = 2}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 20, + main_product = data_util.mod_prefix .. "space-dialation-data", + category = "arcosphere", + enabled = false, + always_show_made_in = true, + localised_description = {"space-exploration.arcosphere-random"} +}) + +make_recipe({ + name = data_util.mod_prefix .. "space-injection-data", + ingredients = { + { name = data_util.mod_prefix .. "significant-data", amount = 1 }, + { name = data_util.mod_prefix .. "naquium-plate", amount = 1 }, + { name = data_util.mod_prefix .. "arcosphere-d", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-g", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "space-injection-data", amount = 1 }, + { name = data_util.mod_prefix .. "arcosphere-e", amount = 2}, + { name = data_util.mod_prefix .. "arcosphere-c", amount = 0}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 20, + main_product = data_util.mod_prefix .. "space-injection-data", + category = "arcosphere", + enabled = false, + always_show_made_in = true, + localised_description = {"space-exploration.arcosphere-random"} +}) +make_recipe({ + name = data_util.mod_prefix .. "space-injection-data-alt", + ingredients = { + { name = data_util.mod_prefix .. "significant-data", amount = 1 }, + { name = data_util.mod_prefix .. "naquium-plate", amount = 1 }, + { name = data_util.mod_prefix .. "arcosphere-d", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-g", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "space-injection-data", amount = 1 }, + { name = data_util.mod_prefix .. "arcosphere-e", amount = 0}, + { name = data_util.mod_prefix .. "arcosphere-c", amount = 2}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 20, + main_product = data_util.mod_prefix .. "space-injection-data", + category = "arcosphere", + enabled = false, + always_show_made_in = true, + localised_description = {"space-exploration.arcosphere-random"} +}) + + +make_recipe({ + name = data_util.mod_prefix .. "wormhole-data", + ingredients = { + { name = data_util.mod_prefix .. "empty-data", amount = 1 }, + { name = data_util.mod_prefix .. "arcosphere-a", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-c", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-e", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-g", amount = 1}, + { name = data_util.mod_prefix .. "naquium-cube", amount = 1}, + { name = data_util.mod_prefix .. "cryonite-rod", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "wormhole-data", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-b", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-d", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-f", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-h", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-warm", amount = 10}, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "wormhole-data", + category = "arcosphere", + enabled = false, + always_show_made_in = true, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/growth-facility.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/growth-facility.lua new file mode 100644 index 0000000..9a09172 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/growth-facility.lua @@ -0,0 +1,147 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +make_recipe({ + name = data_util.mod_prefix .. "neural-gel", + ingredients = { + { name = data_util.mod_prefix .. "specimen", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "nutrient-gel", amount = 10 } + }, + results = { + { type = "fluid", name = data_util.mod_prefix .. "neural-gel", amount = 10 }, + { type = "fluid", name = data_util.mod_prefix .. "bio-sludge", amount = 10 }, + }, + energy_required = 20, + main_product = data_util.mod_prefix .. "neural-gel", + category = "space-growth", + subgroup = "space-bioculture", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "neural-gel-2", + ingredients = { + { name = data_util.mod_prefix .. "significant-specimen", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "neural-gel", amount = 100 }, + { type = "fluid", name = data_util.mod_prefix .. "nutrient-gel", amount = 100 }, + { name = data_util.mod_prefix .. "bioelectrics-data", amount = 1 }, + + }, + results = { + { type = "fluid", name = data_util.mod_prefix .. "neural-gel-2", amount = 100 }, + { data_util.mod_prefix .. "junk-data", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "bio-sludge", amount = 100 }, + }, + energy_required = 50, + main_product = data_util.mod_prefix .. "neural-gel-2", + category = "space-growth", + subgroup = "space-bioculture", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "specimen", + ingredients = { + { name = data_util.mod_prefix .. "bioculture", amount = 10 }, + { type = "fluid", name = data_util.mod_prefix .. "nutrient-gel", amount = 100 }, + }, + results = { + { name = data_util.mod_prefix .. "specimen", amount = 10 }, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-bio-sludge", amount = 30 }, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-space-water", amount = 20 }, + }, + energy_required = 80, + main_product = data_util.mod_prefix .. "specimen", + category = "space-growth", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "experimental-specimen", + ingredients = { + { name = data_util.mod_prefix .. "experimental-bioculture", amount = 10 }, + { type = "fluid", name = data_util.mod_prefix .. "nutrient-gel", amount = 100 }, + }, + results = { + { name = data_util.mod_prefix .. "experimental-specimen", amount_min = 5, amount_max = 10, probability = 1 }, + { name = data_util.mod_prefix .. "specimen", amount_min = 0, amount_max = 5, probability = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-bio-sludge", amount = 30 }, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-space-water", amount = 20 }, + }, + energy_required = 80, + main_product = data_util.mod_prefix .. "experimental-specimen", + category = "space-growth", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "specimen-fish", + ingredients = { + { name = data_util.mod_prefix .. "bioculture", amount = 10 }, + { type = "fluid", name = data_util.mod_prefix .. "nutrient-gel", amount = 100 }, + }, + results = { + { name = "raw-fish", amount = 10 }, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-bio-sludge", amount = 50 }, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-space-water", amount = 50 }, + }, + energy_required = 80, + category = "space-growth", + subgroup = "space-bioculture", + icons = { + { icon = "__space-exploration-graphics__/graphics/blank.png", scale = 1, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "bioculture"].icon, scale = 0.75, shift = {16, -16}, icon_size = 64 }, + { icon = data.raw.capsule["raw-fish"].icon, scale = 0.75, shift = {-16, 16}, icon_size = 64 }, + }, + enabled = false, + allow_as_intermediate = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "specimen-wood", + ingredients = { + { name = data_util.mod_prefix .. "bioculture", amount = 10 }, + { type = "fluid", name = data_util.mod_prefix .. "nutrient-gel", amount = 100 }, + }, + results = { + { name = "wood", amount = 100 }, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-space-water", amount = 125 }, + }, + energy_required = 80, + category = "space-growth", + subgroup = "space-bioculture", + icons = { + { icon = "__space-exploration-graphics__/graphics/blank.png", scale = 1, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "bioculture"].icon, scale = 0.75, shift = {16, -16}, icon_size = 64 }, + { icon = data.raw.item["wood"].icon, scale = 0.75, shift = {-16, 16}, icon_size = 64 }, + }, + enabled = false, + allow_as_intermediate = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "bio-methane-to-crude-oil", + ingredients = { + { type = "fluid", name = data_util.mod_prefix .. "bio-sludge", amount = 100 }, + { type = "fluid", name = data_util.mod_prefix .. "methane-gas", amount = 1000 }, + }, + results = { + { type = "fluid", name = data_util.mod_prefix .. "bio-sludge", amount = 80 }, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-bio-sludge", amount = 10 }, + { type = "fluid", name = "crude-oil", amount = 1000 }, + }, + energy_required = 10, + category = "space-growth", + subgroup = "space-bioculture", + icon = data.raw.fluid["crude-oil"].icon, + icon_size = data.raw.fluid["crude-oil"].icon_size, + enabled = false, + allow_as_intermediate = false, + always_show_made_in = true, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/hypercooler.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/hypercooler.lua new file mode 100644 index 0000000..85a2821 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/hypercooler.lua @@ -0,0 +1,116 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +make_recipe({ + name = data_util.mod_prefix .. "space-coolant", + ingredients = { + { type = "fluid", name = data_util.mod_prefix .. "space-water", amount = 1}, + { type = "fluid", name = "heavy-oil", amount = 20}, + { name = "copper-plate", amount = 2}, + { name = "iron-plate", amount = 1}, + { name = "sulfur", amount = 1}, + }, + results = { + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 5, + subgroup = "space-cooling", + category = "space-manufacturing", + localised_name = {"fluid-name." .. data_util.mod_prefix .. "space-coolant"}, + always_show_made_in = true, + order = "a-a", +}) + +make_recipe({ + name = data_util.mod_prefix .. "space-coolant-cryonite", + ingredients = { + { type = "fluid", name = data_util.mod_prefix .. "space-water", amount = 5}, + { type = "fluid", name = "heavy-oil", amount = 5}, + { name = data_util.mod_prefix .. "cryonite-rod", amount = 1}, + }, + results = { + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 5, + subgroup = "space-cooling", + category = "space-manufacturing", + localised_name = {"fluid-name." .. data_util.mod_prefix .. "space-coolant"}, + always_show_made_in = true, + order = "a-a", +}) + +make_recipe({ + name = data_util.mod_prefix .. "space-coolant-cold", + ingredients = { + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-warm", amount = 10}, + }, + results = { + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 5}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 5}, + }, + energy_required = 1, + subgroup = "space-cooling", + category = "space-hypercooling", + localised_name = {"recipe-name." .. data_util.mod_prefix .. "space-coolant-cold"}, + enabled = false, + always_show_made_in = true, + order = "c-a", +}) + + +make_recipe({ + name = data_util.mod_prefix .. "space-coolant-supercooled", + ingredients = { + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 10}, + }, + results = { + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 5}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 5}, + }, + energy_required = 2, + subgroup = "space-cooling", + category = "space-hypercooling", + localised_name = {"recipe-name." .. data_util.mod_prefix .. "space-coolant-supercooled"}, + enabled = false, + always_show_made_in = true, + order = "d-a", +}) + +make_recipe({ + name = data_util.mod_prefix .. "space-coolant-cold-cryonite", + ingredients = { + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-warm", amount = 20}, + { type = "fluid", name = data_util.mod_prefix .. "cryonite-slush", amount = 1}, + }, + results = { + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 15}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 5}, + }, + energy_required = 1, + subgroup = "space-cooling", + category = "space-hypercooling", + localised_name = {"recipe-name." .. data_util.mod_prefix .. "space-coolant-cold-cryonite"}, + enabled = false, + always_show_made_in = true, + order = "c-a", +}) + + +make_recipe({ + name = data_util.mod_prefix .. "space-coolant-supercooled-cryonite", + ingredients = { + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 15}, + { type = "fluid", name = data_util.mod_prefix .. "cryonite-slush", amount = 1}, + }, + results = { + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 5}, + }, + energy_required = 1, + subgroup = "space-cooling", + category = "space-hypercooling", + localised_name = {"recipe-name." .. data_util.mod_prefix .. "space-coolant-supercooled-cryonite"}, + enabled = false, + always_show_made_in = true, + order = "d-a", +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/laser-laboratory.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/laser-laboratory.lua new file mode 100644 index 0000000..e78e16c --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/laser-laboratory.lua @@ -0,0 +1,174 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +--[[ +make_recipe({ + name = data_util.mod_prefix .. "doppler-shift-data", + ingredients = { + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 50}, + }, + results = { + { name = data_util.mod_prefix .. "doppler-shift-data", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 50}, + }, + energy_required = 2, + main_product = data_util.mod_prefix .. "doppler-shift-data", + category = "space-laser", + enabled = false, + always_show_made_in = true, +})]] + +make_recipe({ + name = data_util.mod_prefix .. "gravity-wave-data", + ingredients = { + { name = data_util.mod_prefix .. "astrometric-data", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "gravity-wave-data", amount_min = 1, amount_max = 1, probability = 0.3}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.69}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-warm", amount = 10}, + }, + energy_required = 2, + main_product = data_util.mod_prefix .. "gravity-wave-data", + category = "space-laser", + enabled = false, + always_show_made_in = true, +}) + + +make_recipe({ + name = data_util.mod_prefix .. "negative-pressure-data", + ingredients = { + { name = data_util.mod_prefix .. "astrometric-data", amount = 1}, + { name = data_util.mod_prefix .. "aeroframe-scaffold", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "negative-pressure-data", amount_min = 1, amount_max = 1, probability = 0.9}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.09}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "negative-pressure-data", + category = "space-laser", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "polarisation-data", + ingredients = { + { name = data_util.mod_prefix .. "empty-data", amount = 10}, + { name = data_util.mod_prefix .. "space-mirror", amount = 2}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "polarisation-data", amount = 9}, + { name = data_util.mod_prefix .. "junk-data", amount = 1}, + { name = data_util.mod_prefix .. "scrap", amount = 2}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-warm", amount = 10}, + }, + energy_required = 60, + main_product = data_util.mod_prefix .. "polarisation-data", + category = "space-laser", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "quantum-phenomenon-data", + ingredients = { + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "quantum-phenomenon-data", amount_min = 1, amount_max = 1, probability = 0.5}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.49}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "quantum-phenomenon-data", + category = "space-laser", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "zero-point-energy-data", + ingredients = { + { name = data_util.mod_prefix .. "negative-pressure-data", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "zero-point-energy-data", amount_min = 1, amount_max = 1, probability = 0.4}, + { name = data_util.mod_prefix .. "negative-pressure-data", amount_min = 1, amount_max = 1, probability = 0.4}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.19}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-warm", amount = 10}, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "zero-point-energy-data", + category = "space-laser", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "laser-shielding-data", + ingredients = { + { name = data_util.mod_prefix .. "empty-data", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + { name = data_util.mod_prefix .. "material-testing-pack", amount = 1 }, + { name = data_util.mod_prefix .. "iridium-plate", amount = 1}, + }, + results = { + { name = data_util.mod_prefix .. "laser-shielding-data", amount = 1}, + { name = data_util.mod_prefix .. "contaminated-scrap", amount = 5}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + { name = data_util.mod_prefix .. "iridium-plate", amount_min = 1, amount_max = 1, probability = 0.5 }, + }, + energy_required = 5, + main_product = data_util.mod_prefix .. "laser-shielding-data", + category = "space-laser", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "teleportation-data", + ingredients = { + { name = data_util.mod_prefix .. "empty-data", amount = 2 }, + { name = data_util.mod_prefix .. "singularity-data", amount = 1}, + { name = data_util.mod_prefix .. "timespace-anomaly-data", amount = 1}, + { name = data_util.mod_prefix .. "naquium-cube", amount = 2}, + { name = data_util.mod_prefix .. "cryonite-rod", amount = 5}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "teleportation-data", amount = 4}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-warm", amount = 10}, + }, + energy_required = 40, + main_product = data_util.mod_prefix .. "teleportation-data", + category = "space-laser", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "hyperlattice-data", + ingredients = { + { name = data_util.mod_prefix .. "empty-data", amount = 6 }, + { name = data_util.mod_prefix .. "nanomaterial", amount = 1}, + { name = data_util.mod_prefix .. "naquium-plate", amount = 24}, + }, + results = { + { name = data_util.mod_prefix .. "hyperlattice-data", amount=6}, + }, + energy_required = 40, + main_product = data_util.mod_prefix .. "hyperlattice-data", + category = "space-laser", + enabled = false, + always_show_made_in = true, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/lifesupport-facility.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/lifesupport-facility.lua new file mode 100644 index 0000000..b255180 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/lifesupport-facility.lua @@ -0,0 +1,101 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +make_recipe({ + name = data_util.mod_prefix .. "empty-lifesupport-canister", + ingredients = { + { data_util.mod_prefix .. "canister", 1}, + { "processing-unit", 1}, + }, + results = { + { data_util.mod_prefix .. "empty-lifesupport-canister", 1}, + }, + energy_required = 10, + category = "lifesupport", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "lifesupport-canister-fish", + ingredients = { + { data_util.mod_prefix .. "empty-lifesupport-canister", 2}, + { "raw-fish", 1}, + { "wood", 10}, + { type = "fluid", name = "water" , amount = 100}, + }, + results = { + { data_util.mod_prefix .. "lifesupport-canister", 2}, + }, + energy_required = 10, + category = "lifesupport", + enabled = false, + icons = { + { icon = data.raw.item[data_util.mod_prefix .. "lifesupport-canister"].icon, scale = 1, icon_size = 64 }, + { icon = data.raw.item["wood"].icon, scale = 0.25, shift = {-20, 20}, icon_size = 64 }, + { icon = data.raw.capsule["raw-fish"].icon, scale = 0.25, shift = {-20, 0}, icon_size = 64 }, + }, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "lifesupport-canister-coal", + ingredients = { + { data_util.mod_prefix .. "empty-lifesupport-canister", 2}, + { "coal", 2}, + { type = "fluid", name = "water" , amount = 100}, + }, + results = { + { data_util.mod_prefix .. "lifesupport-canister", 2}, + }, + energy_required = 10, + category = "lifesupport", + enabled = false, + icons = { + { icon = data.raw.item[data_util.mod_prefix .. "lifesupport-canister"].icon, scale = 1, icon_size = 64 }, + { icon = data.raw.item["coal"].icon, scale = 0.25, shift = {-20, 20}, icon_size = 64 }, + }, + allow_as_intermediate = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "lifesupport-canister-specimen", + ingredients = { + { data_util.mod_prefix .. "empty-lifesupport-canister", 1}, + { data_util.mod_prefix .. "specimen", 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-water" , amount = 10}, + }, + results = { + { data_util.mod_prefix .. "lifesupport-canister", 1}, + }, + energy_required = 10, + category = "lifesupport", + icons = { + { icon = data.raw.item[data_util.mod_prefix .. "empty-lifesupport-canister"].icon, scale = 1, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "specimen"].icon, scale = 0.5, shift = {-20, 20}, icon_size = 64 }, + }, + enabled = false, + allow_as_intermediate = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "used-lifesupport-canister-cleaning", + ingredients = { + { data_util.mod_prefix .. "used-lifesupport-canister", 1}, + { type = "fluid", name = "water", amount = 100}, + }, + results = { + { data_util.mod_prefix .. "empty-lifesupport-canister", 1}, + }, + energy_required = 10, + localised_name = {"recipe-name."..data_util.mod_prefix .. "used-lifesupport-canister-cleaning"}, + main_product = data_util.mod_prefix .. "empty-lifesupport-canister", + allow_as_intermediate = false, + category = "lifesupport", + icon = "__space-exploration-graphics__/graphics/icons/used-lifesupport-canister.png", + icon_size = 64, icon_mipmaps = 1, + enabled = false, + always_show_made_in = true, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/manufacturing.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/manufacturing.lua new file mode 100644 index 0000000..58d4331 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/manufacturing.lua @@ -0,0 +1,421 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +-- making data cell +--[[make_recipe({ + name = data_util.mod_prefix .. "omega-tool", + ingredients = { + { data_util.mod_prefix .. "nanomaterial", 100 }, + }, + results = { + { data_util.mod_prefix .. "omega-tool", 1}, + }, + category = "space-manufacturing" +})]]-- + +-- making data cell +make_recipe({ + name = data_util.mod_prefix .. "data-storage-substrate", + ingredients = { + { "glass", 2 }, + { "iron-plate", 4 } + }, + results = { + { data_util.mod_prefix .. "data-storage-substrate", 1}, + { name = data_util.mod_prefix .. "scrap", amount_min = 1, amount_max = 1, probability = 0.5 }, + }, + energy_required = 5, + main_product = data_util.mod_prefix .. "data-storage-substrate", + category = "crafting", + enabled = false, + always_show_made_in = false, +}) + +make_recipe({ + name = data_util.mod_prefix .. "empty-data", + ingredients = { + { "advanced-circuit", 3 }, + { "copper-plate", 6 }, + { data_util.mod_prefix .. "data-storage-substrate-cleaned", 4 } + }, + results = { + { data_util.mod_prefix .. "empty-data", 1}, + }, + energy_required = 10, + category = "space-manufacturing", + enabled = false, + always_show_made_in = true, +}, true) + +make_recipe({ + name = data_util.mod_prefix .. "material-testing-pack", + ingredients = { + { "iron-plate", 1}, + { "copper-plate", 1}, + { "stone", 1}, + { "plastic-bar", 1}, + }, + results = { + { data_util.mod_prefix .. "material-testing-pack", 1}, + }, + energy_required = 5, + category = "crafting", + enabled = false, + always_show_made_in = false, +}) + +make_recipe({ + name = data_util.mod_prefix .. "canister", + ingredients = { + { "steel-plate", 5}, + { "copper-plate", 10}, + { "plastic-bar", 5}, + { "glass", 5}, + { data_util.mod_prefix .. "heat-shielding", 1}, + }, + results = { + { data_util.mod_prefix .. "canister", 1}, + { data_util.mod_prefix .. "scrap", 1}, + }, + main_product = data_util.mod_prefix .. "canister", + energy_required = 10, + category = "crafting", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "space-mirror", + ingredients = { + { name = "glass", amount = 6}, + { name = "steel-plate", amount = 3}, + { name = "low-density-structure", amount = 1}, + { name = data_util.mod_prefix .. "heat-shielding", amount = 1}, + { type = "fluid", name = "lubricant", amount = 10}, + { type = "fluid", name = data_util.mod_prefix .."chemical-gel", amount = 1}, + }, + results = { + { name = data_util.mod_prefix.."space-mirror", amount = 1 }, + { name = data_util.mod_prefix.."scrap", amount = 1 }, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "space-mirror", + category = "space-manufacturing", + icon = "__space-exploration-graphics__/graphics/icons/space-mirror.png", + icon_size = 64, icon_mipmaps = 1, + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "space-mirror-alternate", + ingredients = { + { name = "glass", amount = 2}, + { name = data_util.mod_prefix.."iridium-plate", amount = 2}, + { name = "low-density-structure", amount = 1}, + { type = "fluid", name = "lubricant", amount = 5}, + { type = "fluid", name = data_util.mod_prefix.."chemical-gel", amount = 5}, + }, + results = { + { name = data_util.mod_prefix.."space-mirror", amount = 1 }, + { name = data_util.mod_prefix.."scrap", amount = 5 }, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "space-mirror", + category = "space-manufacturing", + icon = "__space-exploration-graphics__/graphics/icons/space-mirror.png", + icon_size = 64, icon_mipmaps = 1, + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "gammaray-detector", + ingredients = { + { name = data_util.mod_prefix.."space-mirror", amount = 1 }, + { name = data_util.mod_prefix.."beryllium-plate", amount = 1}, + { type = "fluid", name = data_util.mod_prefix.."cryonite-slush", amount = 5}, + { type = "fluid", name = data_util.mod_prefix.."chemical-gel", amount = 5}, + }, + results = { + { name = data_util.mod_prefix.."gammaray-detector", amount = 1 }, + }, + energy_required = 10, + category = "space-manufacturing", + icon = "__space-exploration-graphics__/graphics/icons/gammaray-detector.png", + icon_size = 64, icon_mipmaps = 1, + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "space-solar-panel", + ingredients = { + { name = data_util.mod_prefix .. "space-mirror", amount = 4}, + { name = "solar-panel", amount = 1}, + }, + results = { + { name = data_util.mod_prefix .. "space-solar-panel", amount = 1 }, + }, + energy_required = 20, + category = "space-manufacturing", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "space-solar-panel-2", + ingredients = { + { name = data_util.mod_prefix .. "space-solar-panel", amount = 1}, + { name = data_util.mod_prefix .. "holmium-plate", amount = 4}, + { name = data_util.mod_prefix .. "holmium-cable", amount = 4}, + { name = data_util.mod_prefix .. "space-mirror", amount = 1}, + }, + results = { + { name = data_util.mod_prefix .. "space-solar-panel-2", amount = 1 }, + }, + energy_required = 40, + category = "space-manufacturing", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "space-solar-panel-3", + ingredients = { + { name = data_util.mod_prefix .. "space-solar-panel-2", amount = 1}, + { name = data_util.mod_prefix .. "naquium-cube", amount = 1}, + { name = data_util.mod_prefix .. "superconductive-cable", amount = 4}, + }, + results = { + { name = data_util.mod_prefix .. "space-solar-panel-3", amount = 1 }, + }, + energy_required = 60, + category = "space-manufacturing", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "space-accumulator", + ingredients = { + { name = "accumulator", amount = 2}, + { name = data_util.mod_prefix .. "heavy-girder", amount = 8}, + { name = data_util.mod_prefix .. "holmium-cable", amount = 40}, + }, + results = { + { name = data_util.mod_prefix .. "space-accumulator", amount = 1 }, + }, + energy_required = 30, + category = "space-manufacturing", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "space-accumulator-2", + ingredients = { + { name = data_util.mod_prefix .. "space-accumulator", amount = 2}, + { name = data_util.mod_prefix .. "superconductive-cable", amount = 8}, + { name = data_util.mod_prefix .. "naquium-cube", amount = 1}, + }, + results = { + { name = data_util.mod_prefix .. "space-accumulator-2", amount = 1 }, + }, + energy_required = 60, + category = "space-manufacturing", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "observation-frame-blank", + ingredients = { + { name = "coal", amount = 1}, + { name = "glass", amount = 1}, + { name = "steel-plate", amount = 1}, + { type = "fluid", name = "light-oil", amount = 10}, + }, + results = { + { name = data_util.mod_prefix.."observation-frame-blank", amount = 5 }, + }, + energy_required = 5, + category = "space-manufacturing", + icon = "__space-exploration-graphics__/graphics/icons/observation-frame-blank.png", + icon_size = 64, icon_mipmaps = 1, + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "observation-frame-blank-beryllium", + ingredients = { + { name = "coal", amount = 1}, + { name = "glass", amount = 1}, + { name = data_util.mod_prefix .. "beryllium-plate", amount = 1}, + { type = "fluid", name = "light-oil", amount = 10}, + }, + results = { + { name = data_util.mod_prefix.."observation-frame-blank", amount = 10 }, + }, + energy_required = 10, + category = "space-manufacturing", + icon = "__space-exploration-graphics__/graphics/icons/observation-frame-blank.png", + icon_size = 64, icon_mipmaps = 1, + enabled = false, + always_show_made_in = true, +}) + + +make_recipe({ + name = data_util.mod_prefix .. "chemical-gel", + ingredients = { + { type = "fluid", name = data_util.mod_prefix .. "space-water", amount = 10}, + { type = "fluid", name = "petroleum-gas", amount = 100}, + }, + results = { + { type="fluid", name = data_util.mod_prefix .. "chemical-gel", amount = 20}, + }, + energy_required = 10, + category = "space-manufacturing", + enabled = false, + always_show_made_in = true, +}) + +--[[ +make_recipe({ + name = data_util.mod_prefix .. "space-rail", + ingredients = { + { name = "low-density-structure", amount = 1}, + { name = "steel-plate", amount = 2}, + { name = "copper-cable", amount = 4}, + }, + results = { + { name = data_util.mod_prefix .. "space-rail", amount = 1}, + }, + energy_required = 10, + category = "space-manufacturing", + enabled = false, + always_show_made_in = true, +}) +]]-- + +make_recipe({ + name = data_util.mod_prefix .. "space-rail", + ingredients = { + { name = "rail", amount = 100}, + { name = "steel-plate", amount = 100}, + { name = "copper-cable", amount = 100}, + { name = data_util.mod_prefix .. "energy-catalogue-1", amount = 1}, + }, + results = { + { name = data_util.mod_prefix .. "space-rail", amount = 100}, + }, + energy_required = 100, + category = "space-manufacturing", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "star-probe", + ingredients = { + { name = "rocket-fuel", amount = 100}, + { name = data_util.mod_prefix .. "heat-shielding", amount = 100}, + { name = "rocket-control-unit", amount = 20}, + { name = data_util.mod_prefix .. "space-solar-panel-2", amount = 10}, + { name = data_util.mod_prefix .. "holmium-solenoid", amount = 50}, + { name = data_util.mod_prefix .. "empty-data", amount = 1000}, + }, + results = { + { name = data_util.mod_prefix .. "star-probe", amount = 1}, + }, + energy_required = 60, + category = "space-manufacturing", + enabled = false, + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "belt-probe", + ingredients = { + { name = "rocket-fuel", amount = 100}, + { name = "uranium-fuel-cell", amount = 10}, + { name = data_util.mod_prefix .. "aeroframe-bulkhead", amount = 50}, + { name = "rocket-control-unit", amount = 20}, + { name = data_util.mod_prefix .. "space-solar-panel", amount = 10}, + { name = data_util.mod_prefix .. "empty-data", amount = 1000}, + }, + results = { + { name = data_util.mod_prefix .. "belt-probe", amount = 1}, + }, + energy_required = 60, + category = "space-manufacturing", + enabled = false, + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "void-probe", + ingredients = { + { name = "uranium-fuel-cell", amount = 20}, + { name = "rocket-fuel", amount = 100}, + { name = "rocket-control-unit", amount = 20}, + { name = data_util.mod_prefix .. "nanomaterial", amount = 10}, + { name = "laser-turret", amount = 10}, + { name = data_util.mod_prefix .. "empty-data", amount = 1000}, + }, + results = { + { name = data_util.mod_prefix .. "void-probe", amount = 1}, + }, + energy_required = 60, + category = "space-manufacturing", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "nanomaterial", + ingredients = { + { type = "fluid", name = data_util.mod_prefix .. "particle-stream", amount = 50}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 25}, + { data_util.mod_prefix .. "dynamic-emitter", 1}, + { data_util.mod_prefix .. "aeroframe-bulkhead", 2}, + { data_util.mod_prefix .. "heavy-girder", 3}, + { data_util.mod_prefix .. "vitalic-epoxy", 1}, + }, + results = { + { name = data_util.mod_prefix .. "nanomaterial", amount=16}, + { name = data_util.mod_prefix .. "contaminated-scrap", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 25}, + }, + energy_required = 60, + main_product = data_util.mod_prefix .. "nanomaterial", + category = "space-manufacturing", + enabled = false, + always_show_made_in = true, +}) + + +make_recipe({ + name = data_util.mod_prefix .. "nano-engineering-data", + ingredients = { + { name = data_util.mod_prefix .. "nanomaterial", amount = 1, catalyst_amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "particle-stream", amount = 50}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 25}, + { name = data_util.mod_prefix .. "empty-data", amount=1}, + }, + results = { + { name = data_util.mod_prefix .. "nano-engineering-data", amount=1}, + { name = data_util.mod_prefix .. "nanomaterial", amount_min = 1, amount_max = 1, probability = 0.05}, + { name = data_util.mod_prefix .. "heat-shielding", amount_min = 1, amount_max = 1, probability = 0.05}, + { name = "low-density-structure", amount_min = 1, amount_max = 1, probability = 0.05}, + { name = data_util.mod_prefix .. "superconductive-cable", amount_min = 1, amount_max = 1, probability = 0.05}, + { name = data_util.mod_prefix .. "scrap", amount_min = 1, amount_max = 1, probability = 0.05}, + { name = data_util.mod_prefix .. "contaminated-scrap", amount_min = 1, amount_max = 1, probability = 0.05}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 25}, + }, + energy_required = 60, + main_product = data_util.mod_prefix .. "nano-engineering-data", + category = "space-manufacturing", + enabled = false, + always_show_made_in = true, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/material-fabricator.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/material-fabricator.lua new file mode 100644 index 0000000..f6fc30e --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/material-fabricator.lua @@ -0,0 +1,357 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +make_recipe({ + name = data_util.mod_prefix .. "antimatter-stream", + ingredients = { + { type = "fluid", name = data_util.mod_prefix .. "particle-stream", amount=50}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 100}, + }, + results = { + { type = "fluid", name = data_util.mod_prefix .. "antimatter-stream", amount = 50}, -- 50 * 20MJ = 1000 MJ = 1GJ + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 100}, + }, + energy_required = 4, -- 400 * 5MW = 2000MJ + main_product = data_util.mod_prefix .. "antimatter-stream", + category = "space-materialisation", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "matter-fusion-dirty", + ingredients = { + { name = data_util.mod_prefix .. "fusion-test-data", amount = 1, catalyst_amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "particle-stream", amount = 50}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 25}, + }, + results = { + { name = data_util.mod_prefix .. "contaminated-scrap", amount = 15}, + { name = data_util.mod_prefix .. "fusion-test-data", amount_min = 1, amount_max = 1, probability = 0.99}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.01}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 25}, + }, + energy_required = 1, + category = "space-materialisation", + subgroup = "space-components", + icons = data_util.transition_icons( + { + icon = data.raw.fluid[data_util.mod_prefix .. "particle-stream"].icon, + icon_size = data.raw.fluid[data_util.mod_prefix .. "particle-stream"].icon_size, scale = 0.5 + }, + { + icon = data.raw.item[data_util.mod_prefix .. "contaminated-scrap"].icon, + icon_size = data.raw.item[data_util.mod_prefix .. "contaminated-scrap"].icon_size, scale = 0.5 + } + ), + enabled = false, + allow_as_intermediate = false, + always_show_made_in = true, + allow_decomposition = false, +}) + +make_recipe({ + name = data_util.mod_prefix .. "matter-fusion-iron", + ingredients = { + { name = data_util.mod_prefix .. "fusion-test-data", amount = 1, catalyst_amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "particle-stream", amount = 50}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 25}, + }, + results = { + { name = "iron-ore", amount = 10}, + { name = data_util.mod_prefix .. "contaminated-scrap", amount = 1}, + { name = data_util.mod_prefix .. "fusion-test-data", amount_min = 1, amount_max = 1, probability = 0.99}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.01}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 25}, + }, + energy_required = 1, + category = "space-materialisation", + icons = data_util.transition_icons( + { + icon = data.raw.fluid[data_util.mod_prefix .. "particle-stream"].icon, + icon_size = data.raw.fluid[data_util.mod_prefix .. "particle-stream"].icon_size, scale = 0.5 + }, + { + icon = data.raw.item["iron-ore"].icon, + icon_size = data.raw.item["iron-ore"].icon_size, scale = 0.5 + } + ), + subgroup = "space-components", + enabled = false, + allow_as_intermediate = false, + always_show_made_in = true, + allow_decomposition = false, + localised_name = {"recipe-name.se-matter-fusion-to", {"item-name.iron-ore"}} +}) + +make_recipe({ + name = data_util.mod_prefix .. "matter-fusion-copper", + ingredients = { + { name = data_util.mod_prefix .. "fusion-test-data", amount = 1, catalyst_amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "particle-stream", amount = 50}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 25}, + }, + results = { + { name = "copper-ore", amount = 10}, + { name = data_util.mod_prefix .. "contaminated-scrap", amount = 1}, + { name = data_util.mod_prefix .. "fusion-test-data", amount_min = 1, amount_max = 1, probability = 0.99}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.01}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 25}, + }, + energy_required = 1, + category = "space-materialisation", + icons = data_util.transition_icons( + { + icon = data.raw.fluid[data_util.mod_prefix .. "particle-stream"].icon, + icon_size = data.raw.fluid[data_util.mod_prefix .. "particle-stream"].icon_size, scale = 0.5 + }, + { + icon = data.raw.item["copper-ore"].icon, + icon_size = data.raw.item["copper-ore"].icon_size, scale = 0.5 + } + ), + subgroup = "space-components", + enabled = false, + allow_as_intermediate = false, + always_show_made_in = true, + allow_decomposition = false, + localised_name = {"recipe-name.se-matter-fusion-to", {"item-name.copper-ore"}} +}) + +make_recipe({ + name = data_util.mod_prefix .. "matter-fusion-stone", + ingredients = { + { name = data_util.mod_prefix .. "fusion-test-data", amount = 1, catalyst_amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "particle-stream", amount = 50}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 25}, + }, + results = { + { name = "stone", amount = 10}, + { name = data_util.mod_prefix .. "contaminated-scrap", amount = 1}, + { name = data_util.mod_prefix .. "fusion-test-data", amount_min = 1, amount_max = 1, probability = 0.99}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.01}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 25}, + }, + energy_required = 1, + category = "space-materialisation", + icons = data_util.transition_icons( + { + icon = data.raw.fluid[data_util.mod_prefix .. "particle-stream"].icon, + icon_size = data.raw.fluid[data_util.mod_prefix .. "particle-stream"].icon_size, scale = 0.5 + }, + { + icon = data.raw.item["stone"].icon, + icon_size = data.raw.item["stone"].icon_size, scale = 0.5 + } + ), + subgroup = "space-components", + enabled = false, + allow_as_intermediate = false, + always_show_made_in = true, + allow_decomposition = false, + localised_name = {"recipe-name.se-matter-fusion-to", {"item-name.stone"}} +}) + +make_recipe({ + name = data_util.mod_prefix .. "matter-fusion-uranium", + ingredients = { + { name = data_util.mod_prefix .. "fusion-test-data", amount = 1, catalyst_amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "particle-stream", amount = 50}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 25}, + }, + results = { + { name = "uranium-ore", amount_min = 1, amount_max = 1, probability = 0.5}, + { name = data_util.mod_prefix .. "contaminated-scrap", amount = 1}, + { name = data_util.mod_prefix .. "fusion-test-data", amount_min = 1, amount_max = 1, probability = 0.99}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.01}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 25}, + }, + energy_required = 6, + category = "space-materialisation", + icons = data_util.transition_icons( + { + icon = data.raw.fluid[data_util.mod_prefix .. "particle-stream"].icon, + icon_size = data.raw.fluid[data_util.mod_prefix .. "particle-stream"].icon_size, scale = 0.5 + }, + { + icon = data.raw.item["uranium-ore"].icon, + icon_size = data.raw.item["uranium-ore"].icon_size, scale = 0.5 + } + ), + subgroup = "space-components", + enabled = false, + allow_as_intermediate = false, + always_show_made_in = true, + allow_decomposition = false, + localised_name = {"recipe-name.se-matter-fusion-to", {"item-name.uranium-ore"}} +}) + +make_recipe({ + name = data_util.mod_prefix .. "matter-fusion-beryllium", + ingredients = { + { name = data_util.mod_prefix .. "fusion-test-data", amount = 1, catalyst_amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "particle-stream", amount = 50}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 25}, + }, + results = { + { name = data_util.mod_prefix .."beryllium-ore", amount = 1}, + { name = data_util.mod_prefix .. "contaminated-scrap", amount = 1}, + { name = data_util.mod_prefix .. "fusion-test-data", amount_min = 1, amount_max = 1, probability = 0.99}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.01}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 25}, + }, + energy_required = 6, + category = "space-materialisation", + icons = data_util.transition_icons( + { + icon = data.raw.fluid[data_util.mod_prefix .. "particle-stream"].icon, + icon_size = data.raw.fluid[data_util.mod_prefix .. "particle-stream"].icon_size, scale = 0.5 + }, + { + icon = data.raw.item[data_util.mod_prefix .."beryllium-ore"].icon, + icon_size = data.raw.item[data_util.mod_prefix .."beryllium-ore"].icon_size, scale = 0.5 + } + ), + subgroup = "space-components", + enabled = false, + allow_as_intermediate = false, + always_show_made_in = true, + allow_decomposition = false, + localised_name = {"recipe-name.se-matter-fusion-to", {"item-name." .. data_util.mod_prefix .."beryllium-ore"}} +}) + +make_recipe({ + name = data_util.mod_prefix .. "matter-fusion-holmium", + ingredients = { + { name = data_util.mod_prefix .. "fusion-test-data", amount = 1, catalyst_amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "particle-stream", amount = 50}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 25}, + }, + results = { + { name = data_util.mod_prefix .."holmium-ore", amount = 1}, + { name = data_util.mod_prefix .. "contaminated-scrap", amount = 1}, + { name = data_util.mod_prefix .. "fusion-test-data", amount_min = 1, amount_max = 1, probability = 0.99}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.01}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 25}, + }, + energy_required = 6, + category = "space-materialisation", + icons = data_util.transition_icons( + { + icon = data.raw.fluid[data_util.mod_prefix .. "particle-stream"].icon, + icon_size = data.raw.fluid[data_util.mod_prefix .. "particle-stream"].icon_size, scale = 0.5 + }, + { + icon = data.raw.item[data_util.mod_prefix .."holmium-ore"].icon, + icon_size = data.raw.item[data_util.mod_prefix .."holmium-ore"].icon_size, scale = 0.5 + } + ), + subgroup = "space-components", + enabled = false, + allow_as_intermediate = false, + always_show_made_in = true, + allow_decomposition = false, + localised_name = {"recipe-name.se-matter-fusion-to", {"item-name." .. data_util.mod_prefix .."holmium-ore"}} +}) + +make_recipe({ + name = data_util.mod_prefix .. "matter-fusion-iridium", + ingredients = { + { name = data_util.mod_prefix .. "fusion-test-data", amount = 1, catalyst_amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "particle-stream", amount = 50}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 25}, + }, + results = { + { name = data_util.mod_prefix .."iridium-ore", amount = 1}, + { name = data_util.mod_prefix .. "contaminated-scrap", amount = 1}, + { name = data_util.mod_prefix .. "fusion-test-data", amount_min = 1, amount_max = 1, probability = 0.99}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.01}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 25}, + }, + energy_required = 6, + category = "space-materialisation", + icons = data_util.transition_icons( + { + icon = data.raw.fluid[data_util.mod_prefix .. "particle-stream"].icon, + icon_size = data.raw.fluid[data_util.mod_prefix .. "particle-stream"].icon_size, scale = 0.5 + }, + { + icon = data.raw.item[data_util.mod_prefix .."iridium-ore"].icon, + icon_size = data.raw.item[data_util.mod_prefix .."iridium-ore"].icon_size, scale = 0.5 + } + ), + subgroup = "space-components", + enabled = false, + allow_as_intermediate = false, + always_show_made_in = true, + allow_decomposition = false, + localised_name = {"recipe-name.se-matter-fusion-to", {"item-name." .. data_util.mod_prefix .."iridium-ore"}} +}) + +make_recipe({ + name = data_util.mod_prefix .. "matter-fusion-vulcanite", + ingredients = { + { name = data_util.mod_prefix .. "fusion-test-data", amount = 1, catalyst_amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "particle-stream", amount = 50}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 25}, + }, + results = { + { name = data_util.mod_prefix .."vulcanite", amount = 1}, + { name = data_util.mod_prefix .. "contaminated-scrap", amount = 1}, + { name = data_util.mod_prefix .. "fusion-test-data", amount_min = 1, amount_max = 1, probability = 0.99}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.01}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 25}, + }, + energy_required = 3, + category = "space-materialisation", + icons = data_util.transition_icons( + { + icon = data.raw.fluid[data_util.mod_prefix .. "particle-stream"].icon, + icon_size = data.raw.fluid[data_util.mod_prefix .. "particle-stream"].icon_size, scale = 0.5 + }, + { + icon = data.raw.item[data_util.mod_prefix .."vulcanite"].icon, + icon_size = data.raw.item[data_util.mod_prefix .."vulcanite"].icon_size, scale = 0.5 + } + ), + subgroup = "space-components", + enabled = false, + allow_as_intermediate = false, + always_show_made_in = true, + allow_decomposition = false, + localised_name = {"recipe-name.se-matter-fusion-to", {"item-name." .. data_util.mod_prefix .."vulcanite"}} +}) + +make_recipe({ + name = data_util.mod_prefix .. "matter-fusion-cryonite", + ingredients = { + { name = data_util.mod_prefix .. "fusion-test-data", amount = 1, catalyst_amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "particle-stream", amount = 50}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 25}, + }, + results = { + { name = data_util.mod_prefix .."cryonite", amount = 1}, + { name = data_util.mod_prefix .. "contaminated-scrap", amount = 1}, + { name = data_util.mod_prefix .. "fusion-test-data", amount_min = 1, amount_max = 1, probability = 0.99}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.01}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 25}, + }, + energy_required = 3, + category = "space-materialisation", + icons = data_util.transition_icons( + { + icon = data.raw.fluid[data_util.mod_prefix .. "particle-stream"].icon, + icon_size = data.raw.fluid[data_util.mod_prefix .. "particle-stream"].icon_size, scale = 0.5 + }, + { + icon = data.raw.item[data_util.mod_prefix .."cryonite"].icon, + icon_size = data.raw.item[data_util.mod_prefix .."cryonite"].icon_size, scale = 0.5 + } + ), + subgroup = "space-components", + enabled = false, + allow_as_intermediate = false, + always_show_made_in = true, + allow_decomposition = false, + localised_name = {"recipe-name.se-matter-fusion-to", {"item-name." .. data_util.mod_prefix .."cryonite"}} +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/mechanical-laboratory.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/mechanical-laboratory.lua new file mode 100644 index 0000000..04010ba --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/mechanical-laboratory.lua @@ -0,0 +1,251 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +make_recipe({ + name = data_util.mod_prefix .. "compressive-strength-data", + ingredients = { + { name = data_util.mod_prefix .. "material-testing-pack", amount = 2}, + { name = "concrete", amount = 1}, + { name = data_util.mod_prefix .. "iridium-plate", amount = 1}, + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + { type = "fluid", name = "lubricant", amount = 5}, + }, + results = { + { name = data_util.mod_prefix .. "compressive-strength-data", amount = 1}, + { name = data_util.mod_prefix .. "iridium-plate", amount_min = 1, amount_max = 1, probability = 0.25}, + { name = data_util.mod_prefix .. "scrap", amount = 6}, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-space-water", amount = 1}, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "compressive-strength-data", + category = "space-mechanical", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "tensile-strength-data", + ingredients = { + { name = data_util.mod_prefix .. "material-testing-pack", amount = 2}, + { name = "steel-plate", amount = 1}, + { name = data_util.mod_prefix .. "iridium-plate", amount = 1}, + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + { type = "fluid", name = "lubricant", amount = 5}, + }, + results = { + { name = data_util.mod_prefix .. "tensile-strength-data", amount = 1}, + { name = data_util.mod_prefix .. "iridium-plate", amount_min = 1, amount_max = 1, probability = 0.25}, + { name = data_util.mod_prefix .. "scrap", amount = 6}, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-space-water", amount = 1}, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "tensile-strength-data", + category = "space-mechanical", + enabled = false, + always_show_made_in = true, +}) +--[[ +make_recipe({ + name = data_util.mod_prefix .. "shear-strength-data", + ingredients = { + { name = data_util.mod_prefix .. "material-testing-pack", amount = 1}, + { name = "refined-concrete", amount = 1}, + { name = data_util.mod_prefix .. "iridium-plate", amount = 1}, + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + { type = "fluid", name = "lubricant", amount = 5}, + }, + results = { + { name = data_util.mod_prefix .. "shear-strength-data", amount = 1}, + { name = data_util.mod_prefix .. "iridium-plate", amount_min = 1, amount_max = 1, probability = 0.5}, + { name = data_util.mod_prefix .. "scrap", amount = 5}, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-space-water", amount = 1}, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "shear-strength-data", + category = "space-mechanical", + enabled = false, + always_show_made_in = true, +})]] + +make_recipe({ + name = data_util.mod_prefix .. "rigidity-data", + ingredients = { + { name = data_util.mod_prefix .. "material-testing-pack", amount = 4}, + { name = data_util.mod_prefix .. "heavy-girder", amount = 1}, + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + { type = "fluid", name = "lubricant", amount = 5}, + }, + results = { + { name = data_util.mod_prefix .. "rigidity-data", amount = 1}, + { name = data_util.mod_prefix .. "heavy-girder", amount_min = 1, amount_max = 1, probability = 0.5}, + { name = data_util.mod_prefix .. "scrap", amount = 8}, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-space-water", amount = 1}, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "rigidity-data", + category = "space-mechanical", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "impact-shielding-data", + ingredients = { + { name = "locomotive", amount = 1}, + { name = data_util.mod_prefix .. "iridium-plate", amount = 1}, + { name = data_util.mod_prefix .. "heavy-girder", amount = 1}, + { name = data_util.mod_prefix .. "empty-data", amount = 25}, + { type = "fluid", name = "lubricant", amount = 5}, + }, + results = { + { name = data_util.mod_prefix .. "impact-shielding-data", amount = 25}, + { name = data_util.mod_prefix .. "heavy-girder", amount_min = 1, amount_max = 1, probability = 0.5}, + { name = data_util.mod_prefix .. "iridium-plate", amount_min = 1, amount_max = 1, probability = 0.25}, + { name = data_util.mod_prefix .. "scrap", amount = 1500}, + }, + energy_required = 200, + main_product = data_util.mod_prefix .. "impact-shielding-data", + category = "space-mechanical", + enabled = false, + always_show_made_in = true, +}) + + +make_recipe({ + name = data_util.mod_prefix .. "ballistic-shielding-data", + ingredients = { + { name = "firearm-magazine", amount = 10}, + { name = data_util.mod_prefix .. "material-testing-pack", amount = 1}, + { name = data_util.mod_prefix .. "heavy-girder", amount = 1}, + { name = data_util.mod_prefix .. "iridium-plate", amount = 1}, + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + { type = "fluid", name = "lubricant", amount = 5}, + }, + results = { + { name = data_util.mod_prefix .. "ballistic-shielding-data", amount = 1}, + { name = data_util.mod_prefix .. "heavy-girder", amount_min = 1, amount_max = 1, probability = 0.75}, + { name = data_util.mod_prefix .. "iridium-plate", amount_min = 1, amount_max = 1, probability = 0.25}, + { name = data_util.mod_prefix .. "scrap", amount = 6}, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-space-water", amount = 1}, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "ballistic-shielding-data", + category = "space-mechanical", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "friction-data", + ingredients = { + { name = data_util.mod_prefix .. "material-testing-pack", amount = 4}, + { name = data_util.mod_prefix .. "heavy-bearing", amount = 1}, + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + { type = "fluid", name = "lubricant", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "friction-data", amount = 1}, + { name = data_util.mod_prefix .. "heavy-bearing", amount_min = 1, amount_max = 1, probability = 0.5}, + { name = data_util.mod_prefix .. "scrap", amount = 8}, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-space-water", amount = 2}, + }, + energy_required = 5, + main_product = data_util.mod_prefix .. "friction-data", + category = "space-mechanical", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "biomechanical-data", + ingredients = { + { name = data_util.mod_prefix .. "specimen", amount = 2}, + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + { type = "fluid", name = "lubricant", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "biomechanical-data", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-bio-sludge", amount = 20}, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-space-water", amount = 10}, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "biomechanical-data", + category = "space-mechanical", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "biomechanical-resistance-data", + ingredients = { + { name = data_util.mod_prefix .. "experimental-specimen", amount = 1}, + { name = data_util.mod_prefix .. "biomechanical-data", amount = 1}, + { type = "fluid", name = "lubricant", amount = 5}, + }, + results = { + { name = data_util.mod_prefix .. "biomechanical-resistance-data", amount = 1}, + { name = data_util.mod_prefix .. "experimental-specimen", amount_min = 1, amount_max = 1, probability = 0.25}, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-bio-sludge", amount = 7}, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-space-water", amount = 1}, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "biomechanical-resistance-data", + category = "space-mechanical", + enabled = false, + always_show_made_in = true, +}) + + +make_recipe({ + name = data_util.mod_prefix .. "decompression-data", + ingredients = { + { name = data_util.mod_prefix .. "experimental-specimen", amount = 1}, + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + }, + results = { + { name = data_util.mod_prefix .. "decompression-data", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-bio-sludge", amount_min = 1, amount_max = 10, probability = 1}, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "decompression-data", + category = "space-mechanical", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "decompression-resistance-data", + ingredients = { + { name = data_util.mod_prefix .. "significant-specimen", amount = 1}, + { name = data_util.mod_prefix .. "vitalic-epoxy", amount = 1}, + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + }, + results = { + { name = data_util.mod_prefix .. "decompression-resistance-data", amount_min = 1, amount_max = 1, probability = 0.5}, + { name = data_util.mod_prefix .. "significant-specimen", amount_min = 1, amount_max = 1, probability = 0.5}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.49}, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-bio-sludge", amount_min = 1, amount_max = 5, probability = 1}, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "decompression-resistance-data", + category = "space-mechanical", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "naquium-structural-data", + ingredients = { + { name = data_util.mod_prefix .. "naquium-ingot", amount = 1}, + { type = "fluid", name = "lubricant", amount = 2}, + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + }, + results = { + { name = data_util.mod_prefix .. "naquium-structural-data", amount = 1}, + }, + energy_required = 4, + main_product = data_util.mod_prefix .. "naquium-structural-data", + category = "space-mechanical", + enabled = false, + always_show_made_in = true, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/medpack.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/medpack.lua new file mode 100644 index 0000000..6ae5f84 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/medpack.lua @@ -0,0 +1,85 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +make_recipe({ + name = data_util.mod_prefix .. "medpack", + ingredients = { + { "raw-fish", 5}, + { "wood", 5}, + { "iron-plate", 1}, + }, + results = { + { data_util.mod_prefix .. "medpack", 1}, + }, + order = "a-a-a", + energy_required = 10, + category = "crafting", + enabled = false, + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "medpack-plastic", + ingredients = { + { "iron-plate", 1}, + { "plastic-bar", 5}, + { type = "fluid", name = "water" , amount = 100}, + { type = "fluid", name = "heavy-oil" , amount = 100}, + }, + results = { + { data_util.mod_prefix .. "medpack", 1}, + }, + order = "a-a-b", + energy_required = 10, + category = "lifesupport", + enabled = false, + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "medpack-2", + ingredients = { + { data_util.mod_prefix .. "medpack", 1}, + { data_util.mod_prefix .. "canister", 1}, + { type = "fluid", name = "petroleum-gas" , amount = 100}, + }, + results = { + { data_util.mod_prefix .. "medpack-2", 1}, + }, + order = "a-b", + energy_required = 10, + category = "lifesupport", + enabled = false, + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "medpack-3", + ingredients = { + { data_util.mod_prefix .. "medpack-2", 1}, + { data_util.mod_prefix .. "specimen", 1}, + { type = "fluid", name = data_util.mod_prefix .. "chemical-gel" , amount = 10}, + }, + results = { + { data_util.mod_prefix .. "medpack-3", 1}, + }, + order = "a-c", + energy_required = 10, + category = "lifesupport", + enabled = false, + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "medpack-4", + ingredients = { + { data_util.mod_prefix .. "medpack-3", 1}, + { data_util.mod_prefix .. "significant-specimen", 1}, + { data_util.mod_prefix .. "self-sealing-gel", 1}, + { type = "fluid", name = data_util.mod_prefix .. "neural-gel-2" , amount = 10}, + }, + results = { + { data_util.mod_prefix .. "medpack-4", 1}, + }, + order = "a-d", + energy_required = 10, + category = "lifesupport", + enabled = false, + always_show_made_in = true, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/observation.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/observation.lua new file mode 100644 index 0000000..d457c6e --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/observation.lua @@ -0,0 +1,142 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe +local obs_types = data_util.obs_types + +make_recipe({ + name = data_util.mod_prefix .. "observation-frame-gammaray", + ingredients = { + { data_util.mod_prefix .. "observation-frame-blank", 12 }, + { data_util.mod_prefix .. "gammaray-detector", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 3}, + }, + results = { + { data_util.mod_prefix .. "observation-frame-gammaray", 12 }, + { name = data_util.mod_prefix .. "scrap", amount_min = 1, amount_max = 1, probability = 0.5 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 3}, + }, + energy_required = 16, + --energy_required = math.ceil(2 + 20 / 5 * 12 / (obs_types["gammaray"][2] / obs_types["gammaray"][3])), -- base, size, results, required, success + main_product = data_util.mod_prefix .. "observation-frame-gammaray", + icon = "__space-exploration-graphics__/graphics/icons/observation-frame-gammaray.png", + icon_size = 64, icon_mipmaps = 1, + category = "space-observation-gammaray", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "observation-frame-xray", + ingredients = { + { data_util.mod_prefix .. "observation-frame-blank", 12 }, + { data_util.mod_prefix .. "space-mirror", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 4}, + }, + results = { + { data_util.mod_prefix .. "observation-frame-xray", 12 }, + { name = data_util.mod_prefix .. "scrap", amount_min = 1, amount_max = 1, probability = 0.25 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 4}, + }, + energy_required = 12, + --energy_required = math.ceil(2 + 20 / 5 * 12 / (obs_types["xray"][2] / obs_types["xray"][3])), -- base, size, results, required, success + main_product = data_util.mod_prefix .. "observation-frame-xray", + icon = "__space-exploration-graphics__/graphics/icons/observation-frame-xray.png", + icon_size = 64, icon_mipmaps = 1, + category = "space-observation-xray", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "observation-frame-uv", + ingredients = { + { data_util.mod_prefix .. "observation-frame-blank", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 8}, + }, + results = { + { data_util.mod_prefix .. "observation-frame-uv", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 8}, + }, + energy_required = math.ceil(2 + 100 / 3 * 1 / (obs_types["uv"][2] / obs_types["uv"][3])), -- base, size, results, required, success + main_product = data_util.mod_prefix .. "observation-frame-uv", + icon = "__space-exploration-graphics__/graphics/icons/observation-frame-uv.png", + icon_size = 64, icon_mipmaps = 1, + category = "space-observation-uv", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "observation-frame-visible", + ingredients = { + { data_util.mod_prefix .. "observation-frame-blank", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 8}, + }, + results = { + { data_util.mod_prefix .. "observation-frame-visible", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 8}, + }, + energy_required = math.ceil(2 + 100 / 3 * 1 / (obs_types["visible"][2] / obs_types["visible"][3])), -- base, size, results, required, success + main_product = data_util.mod_prefix .. "observation-frame-visible", + icon = "__space-exploration-graphics__/graphics/icons/observation-frame-visible.png", + icon_size = 64, icon_mipmaps = 1, + category = "space-observation-visible", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "observation-frame-infrared", + ingredients = { + { data_util.mod_prefix .. "observation-frame-blank", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 6}, + }, + results = { + { data_util.mod_prefix .. "observation-frame-infrared", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 6}, + }, + energy_required = math.ceil(2 + 100 / 3 * 1 / (obs_types["infrared"][2] / obs_types["infrared"][3])), -- base, size, results, required, success + main_product = data_util.mod_prefix .. "observation-frame-infrared", + icon = "__space-exploration-graphics__/graphics/icons/observation-frame-infrared.png", + icon_size = 64, icon_mipmaps = 1, + category = "space-observation-infrared", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "observation-frame-microwave", + ingredients = { + { data_util.mod_prefix .. "observation-frame-blank", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 5}, + }, + results = { + { data_util.mod_prefix .. "observation-frame-microwave", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 5}, + }, + energy_required = math.ceil(2 + 150 / 9 * 1 / (obs_types["microwave"][2] / obs_types["microwave"][3])), -- base, size, results, required, success + main_product = data_util.mod_prefix .. "observation-frame-microwave", + icon = "__space-exploration-graphics__/graphics/icons/observation-frame-microwave.png", + icon_size = 64, icon_mipmaps = 1, + category = "space-observation-microwave", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "observation-frame-radio", + ingredients = { + { data_util.mod_prefix .. "observation-frame-blank", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 4}, + }, + results = { + { data_util.mod_prefix .. "observation-frame-radio", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 4}, + }, + energy_required = math.ceil(2 + 150 / 9 * 1 / (obs_types["radio"][2] / obs_types["radio"][3])), -- base, size, results, required, success + main_product = data_util.mod_prefix .. "observation-frame-radio", + icon = "__space-exploration-graphics__/graphics/icons/observation-frame-radio.png", + icon_size = 64, icon_mipmaps = 1, + category = "space-observation-radio", + enabled = false, + always_show_made_in = true, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/particle-accelerator.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/particle-accelerator.lua new file mode 100644 index 0000000..c192f76 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/particle-accelerator.lua @@ -0,0 +1,72 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +-- accelerator +make_recipe({ + name = data_util.mod_prefix .. "ion-stream", + ingredients = { + { name = "copper-plate", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "plasma-stream", amount = 100}, + }, + results = { + { type = "fluid", name = data_util.mod_prefix .. "ion-stream", amount = 100}, + }, + energy_required = 10, + category = "space-accelerator", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "proton-stream", + ingredients = { + { name = "iron-plate", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "plasma-stream", amount = 100}, + }, + results = { + { type = "fluid", name = data_util.mod_prefix .. "proton-stream", amount = 100}, + }, + energy_required = 20, + category = "space-accelerator", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "particle-stream", + ingredients = { + { name = data_util.mod_prefix .. "material-testing-pack", amount = 1}, + { name = "sand", amount = 5}, + { type = "fluid", name = data_util.mod_prefix .. "plasma-stream", amount = 100}, + }, + results = { + { type = "fluid", name = data_util.mod_prefix .. "particle-stream", amount = 200}, + }, + energy_required = 30, + category = "space-accelerator", + enabled = false, + always_show_made_in = true, +}) + +-- collider +make_recipe({ + name = data_util.mod_prefix .. "empty-antimatter-canister", + ingredients = { + { name = data_util.mod_prefix .. "antimatter-canister", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 100}, + }, + results = { + { type = "fluid", name = data_util.mod_prefix .. "antimatter-stream", amount=1000}, + { data_util.mod_prefix .. "magnetic-canister", 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 100}, + }, + icons = { + { icon = data.raw.item[data_util.mod_prefix .. "magnetic-canister"].icon, scale = 1, icon_size = 64 }, + { icon = data.raw.fluid[data_util.mod_prefix .. "antimatter-stream"].icon, scale = 1, icon_size = 64 }, + }, + subgroup = "space-fluids", + energy_required = 30, + category = "space-accelerator", + enabled = false, + always_show_made_in = true, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/particle-collider.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/particle-collider.lua new file mode 100644 index 0000000..a9a62d7 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/particle-collider.lua @@ -0,0 +1,245 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +-- collider +make_recipe({ + name = data_util.mod_prefix .. "antimatter-canister", + ingredients = { + { data_util.mod_prefix .. "magnetic-canister", 1}, + { type = "fluid", name = data_util.mod_prefix .. "antimatter-stream", amount=1000}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 100}, + }, + results = { + { name = data_util.mod_prefix .. "antimatter-canister", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 100}, + }, + energy_required = 4, + main_product = data_util.mod_prefix .. "antimatter-canister", + category = "space-collider", + enabled = false, + always_show_made_in = true, +}) + + +make_recipe({ + name = data_util.mod_prefix .. "atomic-data", + ingredients = { + { data_util.mod_prefix .. "material-testing-pack", 1}, + { data_util.mod_prefix .. "empty-data", 1}, + { type = "fluid", name = data_util.mod_prefix .. "ion-stream", amount=100}, + }, + results = { + { name = data_util.mod_prefix .. "atomic-data", amount = 1}, + { name = data_util.mod_prefix .. "contaminated-scrap", amount = 8}, + }, + energy_required = 2, + main_product = data_util.mod_prefix .. "atomic-data", + category = "space-collider", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "boson-data", + ingredients = { + { data_util.mod_prefix .. "empty-data", 1}, + { type = "fluid", name = data_util.mod_prefix .. "particle-stream", amount = 15}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "boson-data", amount_min = 1, amount_max = 1, probability = 0.2}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.79}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 5, + main_product = data_util.mod_prefix .. "boson-data", + category = "space-collider", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "entanglement-data", + ingredients = { + { data_util.mod_prefix .. "empty-data", 1}, + { type = "fluid", name = data_util.mod_prefix .. "ion-stream", amount = 20}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "entanglement-data", amount_min = 1, amount_max = 1, probability = 0.2}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.79}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 4, + main_product = data_util.mod_prefix .. "entanglement-data", + category = "space-collider", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "singularity-data", + ingredients = { + { data_util.mod_prefix .. "naquium-cube", 1}, + { data_util.mod_prefix .. "entanglement-data", 1}, + { type = "fluid", name = data_util.mod_prefix .. "particle-stream", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "singularity-data", amount_min = 1, amount_max = 1, probability = 0.5}, + { name = data_util.mod_prefix .. "naquium-cube", amount_min = 1, amount_max = 1, probability = 0.5}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.49}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 5, + main_product = data_util.mod_prefix .. "singularity-data", + category = "space-collider", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "lepton-data", + ingredients = { + { data_util.mod_prefix .. "empty-data", 1}, + { type = "fluid", name = data_util.mod_prefix .. "particle-stream", amount = 20}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "lepton-data", amount_min = 1, amount_max = 1, probability = 0.4}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.59}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 5, + main_product = data_util.mod_prefix .. "lepton-data", + category = "space-collider", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "magnetic-monopole-data", + ingredients = { + { data_util.mod_prefix .. "electromagnetic-field-data", 1}, + { type = "fluid", name = data_util.mod_prefix .. "proton-stream", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "magnetic-monopole-data", amount_min = 1, amount_max = 1, probability = 0.3}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.69}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 5, + main_product = data_util.mod_prefix .. "magnetic-monopole-data", + category = "space-collider", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "micro-black-hole-data", + ingredients = { + { data_util.mod_prefix .. "empty-data", 1}, + { type = "fluid", name = data_util.mod_prefix .. "particle-stream", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "micro-black-hole-data", amount_min = 1, amount_max = 1, probability = 0.2}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.79}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 5, + main_product = data_util.mod_prefix .. "micro-black-hole-data", + category = "space-collider", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "quark-data", + ingredients = { + { data_util.mod_prefix .. "empty-data", 1}, + { type = "fluid", name = data_util.mod_prefix .. "proton-stream", amount = 20}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "quark-data", amount_min = 1, amount_max = 1, probability = 0.5}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.49}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 5, + main_product = data_util.mod_prefix .. "quark-data", + category = "space-collider", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "subatomic-data", + ingredients = { + { data_util.mod_prefix .. "empty-data", 1}, + { type = "fluid", name = data_util.mod_prefix .. "proton-stream", amount = 20}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "subatomic-data", amount_min = 1, amount_max = 1, probability = 0.6}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.39}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 5, + main_product = data_util.mod_prefix .. "subatomic-data", + category = "space-collider", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "fusion-test-data", + ingredients = { + { name = data_util.mod_prefix .. "forcefield-data", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "proton-stream", amount = 50}, + }, + results = { + { name = data_util.mod_prefix .. "fusion-test-data", amount = 1}, + }, + energy_required = 5, + category = "space-collider", + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "particle-beam-shielding-data", + ingredients = { + { name = data_util.mod_prefix .. "empty-data", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "particle-stream", amount = 10}, + { name = data_util.mod_prefix .. "space-platform-plating", amount = 1 }, + { name = data_util.mod_prefix .. "iridium-plate", amount = 1}, + }, + results = { + { name = data_util.mod_prefix .. "particle-beam-shielding-data", amount = 1}, + { name = data_util.mod_prefix .. "contaminated-scrap", amount = 15}, + { name = data_util.mod_prefix .. "iridium-plate", amount_min = 1, amount_max = 1, probability = 0.2 }, + }, + energy_required = 5, + main_product = data_util.mod_prefix .. "particle-beam-shielding-data", + category = "space-collider", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "annihilation-data", + ingredients = { + { name = data_util.mod_prefix .. "empty-data", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "particle-stream", amount = 5}, + { type = "fluid", name = data_util.mod_prefix .. "antimatter-stream", amount = 5 }, + }, + results = { + { name = data_util.mod_prefix .. "annihilation-data", amount = 1 }, + }, + energy_required = 5, + main_product = data_util.mod_prefix .. "annihilation-data", + category = "space-collider", + enabled = false, + always_show_made_in = true, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/plasma-generator.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/plasma-generator.lua new file mode 100644 index 0000000..454757a --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/plasma-generator.lua @@ -0,0 +1,50 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +-- plasma +make_recipe({ + name = data_util.mod_prefix .. "plasma-canister", + ingredients = { + { data_util.mod_prefix .. "magnetic-canister", 1}, + { type = "fluid", name = data_util.mod_prefix .. "plasma-stream", amount=1000}, + }, + results = { + { data_util.mod_prefix .. "plasma-canister", 1}, + }, + energy_required = 30, + category = "space-plasma", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "plasma-canister-empty", + ingredients = { + { data_util.mod_prefix .. "plasma-canister", 1}, + }, + results = { + { type = "fluid", name = data_util.mod_prefix .. "plasma-stream", amount=1000}, + { data_util.mod_prefix .. "magnetic-canister", 1}, + }, + main_product = data_util.mod_prefix .. "plasma-stream", + energy_required = 2, + category = "space-plasma", + enabled = false, + always_show_made_in = true, + localised_name = {"recipe-name." .. data_util.mod_prefix .. "plasma-canister-empty"} +}) + +make_recipe({ + name = data_util.mod_prefix .. "plasma-stream", + ingredients = { + { name = "stone", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "chemical-gel", amount = 10}, + }, + results = { + { type = "fluid", name = data_util.mod_prefix .. "plasma-stream", amount = 100}, + }, + energy_required = 30, + category = "space-plasma", + enabled = false, + always_show_made_in = true, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/platforms.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/platforms.lua new file mode 100644 index 0000000..24b8861 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/platforms.lua @@ -0,0 +1,51 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +data:extend({ + --[[{ + type = "recipe", + name = "starfield-sparse", + energy_required = 10, + category = "crafting", + ingredients = + { + {"iron-plate", 1} + }, + result= "space", + result_count = 10 + },]]-- + { + type = "recipe", + name = data_util.mod_prefix .. "space-platform-scaffold", + energy_required = 1, + category = "crafting", + ingredients = + { + {"steel-plate", 1}, + {"low-density-structure", 1}, + {data_util.mod_prefix .. "heat-shielding", 1}, + }, + energy_required = 10, + result = data_util.mod_prefix .. "space-platform-scaffold", + result_count = 1, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-platform-plating", + energy_required = 2, + category = "crafting", + ingredients = + { + {data_util.mod_prefix .. "space-platform-scaffold", 1}, + {data_util.mod_prefix .. "heavy-girder", 1}, + {"steel-plate", 4}, + }, + energy_required = 30, + result = data_util.mod_prefix .. "space-platform-plating", + result_count = 1, + enabled = false, + always_show_made_in = true, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/radiation-laboratory.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/radiation-laboratory.lua new file mode 100644 index 0000000..8760b00 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/radiation-laboratory.lua @@ -0,0 +1,79 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +make_recipe({ + name = data_util.mod_prefix .. "radiation-shielding-data", + ingredients = { + { name = data_util.mod_prefix .. "empty-data", amount = 1 }, + { name = "uranium-235", amount = 1 }, + { name = data_util.mod_prefix .. "material-testing-pack", amount = 4 }, + { name = data_util.mod_prefix .. "iridium-plate", amount = 1}, + }, + results = { + { name = data_util.mod_prefix .. "radiation-shielding-data", amount = 1}, + { name = data_util.mod_prefix .. "contaminated-scrap", amount = 8}, + { name = "uranium-235", amount_min = 1, amount_max = 1, probability = 0.5 }, + { name = data_util.mod_prefix .. "iridium-plate", amount_min = 1, amount_max = 1, probability = 0.75 }, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "radiation-shielding-data", + category = "space-radiation", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "radiation-data", + ingredients = { + { name = data_util.mod_prefix .. "empty-data", amount = 1 }, + { name = "uranium-235", amount = 1 }, + }, + results = { + { name = data_util.mod_prefix .. "radiation-data", amount = 1}, + { name = "uranium-235", amount_min = 1, amount_max = 1, probability = 0.5 }, + }, + energy_required = 8, + main_product = data_util.mod_prefix .. "radiation-data", + category = "space-radiation", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "radiation-exposure-data", + ingredients = { + { name = data_util.mod_prefix .. "empty-data", amount = 1 }, + { name = data_util.mod_prefix .. "specimen", amount = 1 }, + { name = "uranium-235", amount = 1 }, + }, + results = { + { name = data_util.mod_prefix .. "radiation-exposure-data", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-bio-sludge", amount = 10}, + { name = "uranium-235", amount_min = 1, amount_max = 1, probability = 0.5 }, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "radiation-exposure-data", + category = "space-radiation", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "radiation-exposure-resistance-data", + ingredients = { + { name = data_util.mod_prefix .. "empty-data", amount = 1 }, + { name = data_util.mod_prefix .. "significant-specimen", amount = 1 }, + { name = "uranium-235", amount = 1 }, + }, + results = { + { name = data_util.mod_prefix .. "radiation-exposure-resistance-data", amount = 1}, + { name = data_util.mod_prefix .. "significant-specimen", amount_min = 1, amount_max = 1, probability = 0.5 }, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-bio-sludge", amount_min = 1, amount_max = 10, probability = 1 }, + { name = "uranium-235", amount_min = 1, amount_max = 1, probability = 0.5 }, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "radiation-exposure-resistance-data", + category = "space-radiation", + enabled = false, + always_show_made_in = true, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/radiator.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/radiator.lua new file mode 100644 index 0000000..da25d29 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/radiator.lua @@ -0,0 +1,55 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +make_recipe({ + name = data_util.mod_prefix .. "radiating-space-coolant-slow", + ingredients = { + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 500}, -- 2.5/s + }, + results = { + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-warm", amount = 499}, -- -0.2% + }, + energy_required = 200, + subgroup = "space-cooling", + category = "space-radiator", + localised_name = {"recipe-name." .. data_util.mod_prefix .. "radiating-space-coolant-slow"}, + enabled = false, + always_show_made_in = true, + order = "b-a", +}) + +make_recipe({ + name = data_util.mod_prefix .. "radiating-space-coolant-normal", + ingredients = { + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 50}, -- 5/s + }, + results = { + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-warm", amount = 49}, -- -2% + }, + energy_required = 10, + subgroup = "space-cooling", + category = "space-radiator", + localised_name = {"recipe-name." .. data_util.mod_prefix .. "radiating-space-coolant-normal"}, + enabled = false, + always_show_made_in = true, + order = "b-b", +}) + + + +make_recipe({ + name = data_util.mod_prefix .. "radiating-space-coolant-fast", + ingredients = { + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, -- 10/s + }, + results = { + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-warm", amount = 9}, -- -10% + }, + energy_required = 1, + subgroup = "space-cooling", + category = "space-radiator", + localised_name = {"recipe-name." .. data_util.mod_prefix .. "radiating-space-coolant-fast"}, + enabled = false, + always_show_made_in = true, + order = "b-c", +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/recipe.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/recipe.lua new file mode 100644 index 0000000..a620f3b --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/recipe.lua @@ -0,0 +1,728 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +if not data.raw.recipe["sand-from-stone"] then + data:extend({ + { + ingredients = { + { "stone", 1 } + }, + name = "sand-from-stone", + result = "sand", + result_count = 2, + type = "recipe", + enabled = false, + energy_required = 0.5, + } + }) +end +data:extend({ + { + ingredients = { + { "stone", 1 } + }, + name = data_util.mod_prefix .. "pulverised-sand", + result = "sand", + result_count = 3, + type = "recipe", + enabled = false, + energy_required = 0.5, + category = "pulverising", + --localised_name = {"recipe-name."..data_util.mod_prefix .. "pulverised-sand"}, + always_show_made_in = true, + } +}) + +if not data.raw.recipe["glass-from-sand"] then + data:extend({ + { + category = "smelting", + enabled = true, + energy_required = 4, + ingredients = { + { "sand", 4 } + }, + name = "glass-from-sand", + result = "glass", + type = "recipe", + enabled = false, + }, + }) +end + +data:extend({ + { + type = "recipe", + name = data_util.mod_prefix .. "low-density-structure-beryllium", + result = "low-density-structure", + energy_required = 10, + ingredients = { + { name = data_util.mod_prefix .. "aeroframe-scaffold", amount = 2}, + { name = "glass", amount = 2}, + { "steel-plate", 2 }, + { "plastic-bar", 2 } + }, + requester_paste_multiplier = 2, + enabled = false, + always_show_made_in = false, + allow_as_intermediate = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "heat-shielding", + result = data_util.mod_prefix .. "heat-shielding", + energy_required = 10, + ingredients = { + { name = "stone-tablet", amount = 20}, + { "sulfur", 8 }, + { "steel-plate", 2 } + }, + requester_paste_multiplier = 2, + enabled = false, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "heat-shielding-iridium", + result = data_util.mod_prefix .. "heat-shielding", + energy_required = 10, + ingredients = { + { name = data_util.mod_prefix .. "iridium-plate", amount = 1}, + { name = "stone-tablet", amount = 4}, + { "sulfur", 1 }, + }, + requester_paste_multiplier = 2, + enabled = false, + always_show_made_in = true, + allow_as_intermediate = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "processing-unit-holmium", + result = "processing-unit", + energy_required = 10, + ingredients = { + { "electronic-circuit", 10 }, + { "advanced-circuit", 1 }, + { name = data_util.mod_prefix .. "holmium-cable", amount = 4}, + { type = "fluid", name = "sulfuric-acid", amount = 2 }, + }, + requester_paste_multiplier = 3, + enabled = false, + always_show_made_in = true, + allow_as_intermediate = false, + category = "crafting-with-fluid", + }, + { + type = "recipe", + name = data_util.mod_prefix .. "thruster-suit", + result = data_util.mod_prefix .. "thruster-suit", + enabled = false, + energy_required = 30, + ingredients = { + { "rocket-control-unit", 10 }, + { data_util.mod_prefix .. "heat-shielding", 20 }, + { "low-density-structure", 20 }, + { "glass", 20 }, + { "jetpack-1", 1 }, + { data_util.mod_prefix .. "lifesupport-equipment-1", 1 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "thruster-suit-2", + results = { + { name=data_util.mod_prefix .. "thruster-suit-2", amount = 1}, + }, + main_product = data_util.mod_prefix .. "thruster-suit-2", + enabled = false, + energy_required = 30, + ingredients = { + { "processing-unit", 50 }, + { "rocket-fuel", 50 }, + { data_util.mod_prefix .. "iridium-plate", 50 }, + { data_util.mod_prefix .. "material-catalogue-1", 1 }, + { data_util.mod_prefix .. "thruster-suit", 1 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "thruster-suit-3", + results = { + { name=data_util.mod_prefix .. "thruster-suit-3", amount = 1}, + }, + main_product = data_util.mod_prefix .. "thruster-suit-3", + enabled = false, + energy_required = 30, + ingredients = { + { "processing-unit", 100 }, + { "rocket-fuel", 50 }, + { data_util.mod_prefix .. "superconductive-cable", 50 }, + { data_util.mod_prefix .. "astronomic-catalogue-1", 1 }, + { data_util.mod_prefix .. "biological-catalogue-1", 1 }, + { data_util.mod_prefix .. "energy-catalogue-3", 1 }, + { data_util.mod_prefix .. "material-catalogue-3", 1 }, + { data_util.mod_prefix .. "aeroframe-bulkhead", 1 }, + { data_util.mod_prefix .. "thruster-suit-2", 1 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "thruster-suit-4", + results = { + { name=data_util.mod_prefix .. "thruster-suit-4", amount = 1}, + }, + main_product = data_util.mod_prefix .. "thruster-suit-4", + enabled = false, + energy_required = 30, + ingredients = { + { "processing-unit", 200 }, + { data_util.mod_prefix .. "antimatter-canister", 10 }, + { data_util.mod_prefix .. "nanomaterial", 200 }, + { data_util.mod_prefix .. "superconductive-cable", 100 }, + { data_util.mod_prefix .. "naquium-plate", 100 }, + { data_util.mod_prefix .. "deep-catalogue-2", 1 }, + { data_util.mod_prefix .. "self-sealing-gel", 1 }, + { data_util.mod_prefix .. "lattice-pressure-vessel", 1 }, + { data_util.mod_prefix .. "naquium-processor", 1 }, + { data_util.mod_prefix .. "thruster-suit-3", 1 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "rtg-equipment", + result = data_util.mod_prefix .. "rtg-equipment", + enabled = false, + energy_required = 10, + ingredients = { + { "processing-unit", 50 }, + { "low-density-structure", 50 }, + { "uranium-fuel-cell", 4 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "rtg-equipment-2", + result = data_util.mod_prefix .. "rtg-equipment-2", + enabled = false, + energy_required = 10, + ingredients = { + { "processing-unit", 50 }, + { "low-density-structure", 100 }, + { data_util.mod_prefix .."atomic-data", 1 }, + { data_util.mod_prefix .."radiation-data", 1 }, + { data_util.mod_prefix .. "rtg-equipment", 4 }, + { data_util.mod_prefix .. "holmium-solenoid", 8 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "adaptive-armour-equipment-1", + result = data_util.mod_prefix .. "adaptive-armour-equipment-1", + enabled = false, + energy_required = 10, + ingredients = { + { "steel-plate", 20 }, + { "advanced-circuit", 10 }, + { "battery", 5 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "adaptive-armour-equipment-2", + result = data_util.mod_prefix .. "adaptive-armour-equipment-2", + enabled = false, + energy_required = 10, + ingredients = { + { "steel-plate", 30 }, + { "processing-unit", 10 }, + { "low-density-structure", 10 }, + { data_util.mod_prefix .. "adaptive-armour-equipment-1", 1 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "adaptive-armour-equipment-3", + result = data_util.mod_prefix .. "adaptive-armour-equipment-3", + enabled = false, + energy_required = 10, + ingredients = { + { "steel-plate", 40 }, + { "processing-unit", 10 }, + { data_util.mod_prefix .. "heat-shielding", 10 }, + { data_util.mod_prefix .. "adaptive-armour-equipment-2", 1 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "adaptive-armour-equipment-4", + result = data_util.mod_prefix .. "adaptive-armour-equipment-4", + enabled = false, + energy_required = 10, + ingredients = { + { "steel-plate", 50 }, + { "processing-unit", 20 }, + { data_util.mod_prefix .. "heat-shielding", 20 }, + { data_util.mod_prefix .. "adaptive-armour-equipment-3", 1 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "adaptive-armour-equipment-5", + result = data_util.mod_prefix .. "adaptive-armour-equipment-5", + enabled = false, + energy_required = 10, + ingredients = { + { "steel-plate", 40 }, + { "processing-unit", 30 }, + { data_util.mod_prefix .. "nanomaterial", 10 }, + { data_util.mod_prefix .. "adaptive-armour-equipment-4", 1 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = "energy-shield-mk3-equipment", + result = "energy-shield-mk3-equipment", + enabled = false, + energy_required = 10, + ingredients = { + { "energy-shield-mk2-equipment", 5 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = "energy-shield-mk4-equipment", + result = "energy-shield-mk4-equipment", + enabled = false, + energy_required = 10, + ingredients = { + { "energy-shield-mk3-equipment", 5 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = "energy-shield-mk5-equipment", + result = "energy-shield-mk5-equipment", + enabled = false, + energy_required = 10, + ingredients = { + { "energy-shield-mk4-equipment", 5 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = "energy-shield-mk6-equipment", + result = "energy-shield-mk6-equipment", + enabled = false, + energy_required = 10, + ingredients = { + { "energy-shield-mk5-equipment", 5 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + + + + + { + type = "recipe", + name = data_util.mod_prefix .. "aeroframe-pole", + results = {{data_util.mod_prefix .. "aeroframe-pole", 2}}, + energy_required = 1, + ingredients = { + { data_util.mod_prefix .. "beryllium-plate", 1 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + enabled = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "aeroframe-scaffold", + result = data_util.mod_prefix .. "aeroframe-scaffold", + energy_required = 2, + ingredients = { + { data_util.mod_prefix .. "aeroframe-pole", 2 }, + { data_util.mod_prefix .. "beryllium-plate", 1 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + enabled = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "aeroframe-bulkhead", + result = data_util.mod_prefix .. "aeroframe-bulkhead", + energy_required = 4, + ingredients = { + { data_util.mod_prefix .. "aeroframe-scaffold", 1 }, + { "low-density-structure", 1 }, + { data_util.mod_prefix .. "beryllium-plate", 4 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + enabled = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "lattice-pressure-vessel", + result = data_util.mod_prefix .. "lattice-pressure-vessel", + energy_required = 3, + ingredients = { + { data_util.mod_prefix .. "beryllium-plate", 5 }, + { data_util.mod_prefix .. "cryonite-rod", 2 }, + { data_util.mod_prefix .. "vulcanite-block", 1 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + enabled = false, + category="space-manufacturing" + }, + + { + type = "recipe", + name = data_util.mod_prefix .. "heavy-girder", + result = data_util.mod_prefix .. "heavy-girder", + energy_required = 1, + ingredients = { + { data_util.mod_prefix .. "iridium-plate", 2 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + enabled = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "heavy-bearing", + result = data_util.mod_prefix .. "heavy-bearing", + energy_required = 2, + ingredients = { + { data_util.mod_prefix .. "iridium-plate", 4 }, + { type="fluid", name="lubricant", amount=4 }, + }, + category="crafting-with-fluid", + requester_paste_multiplier = 1, + always_show_made_in = false, + enabled = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "heavy-composite", + result = data_util.mod_prefix .. "heavy-composite", + energy_required = 3, + ingredients = { + { data_util.mod_prefix .. "iridium-plate", 4 }, + { data_util.mod_prefix .. "heavy-girder", 2 }, + { data_util.mod_prefix .. "heat-shielding", 4 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + enabled = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "heavy-assembly", + result = data_util.mod_prefix .. "heavy-assembly", + energy_required = 4, + ingredients = { + { data_util.mod_prefix .. "heavy-composite", 2 }, + { data_util.mod_prefix .. "heavy-bearing", 2 }, + { "electric-engine-unit", 2 }, + { type="fluid", name="lubricant", amount=4 }, + }, + category="crafting-with-fluid", + requester_paste_multiplier = 1, + always_show_made_in = false, + enabled = false, + }, + + + { + type = "recipe", + name = data_util.mod_prefix .. "vitalic-acid", + result = data_util.mod_prefix .. "vitalic-acid", + energy_required = 1, + ingredients = { + { "glass", 1 }, + { data_util.mod_prefix .. "vitamelange-extract", 2 }, + { type = "fluid", name = "sulfuric-acid", amount = 2 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + enabled = false, + category = "crafting-with-fluid", + }, + { + type = "recipe", + name = data_util.mod_prefix .. "bioscrubber", + result = data_util.mod_prefix .. "bioscrubber", + energy_required = 2, + ingredients = { + { data_util.mod_prefix .. "vitalic-acid", 2 }, + { "glass", 1 }, + { "steel-plate", 1 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = true, + enabled = false, + category = "chemistry", + }, + { + type = "recipe", + name = data_util.mod_prefix .. "vitalic-reagent", + result = data_util.mod_prefix .. "vitalic-reagent", + energy_required = 3, + ingredients = { + { data_util.mod_prefix .. "vitamelange-extract", 4 }, + { data_util.mod_prefix .. "vulcanite-block", 4 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = true, + enabled = false, + category = "chemistry", + }, + { + type = "recipe", + name = data_util.mod_prefix .. "vitalic-epoxy", + result = data_util.mod_prefix .. "vitalic-epoxy", + energy_required = 4, + ingredients = { + { data_util.mod_prefix .. "vitalic-reagent", 2 }, + { data_util.mod_prefix .. "vitalic-acid", 2 }, + { "sulfur", 4 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = true, + enabled = false, + category = "chemistry", + }, + { + type = "recipe", + name = data_util.mod_prefix .. "self-sealing-gel", + result = data_util.mod_prefix .. "self-sealing-gel", + energy_required = 5, + ingredients = { + { data_util.mod_prefix .. "vitalic-reagent", 2 }, + { data_util.mod_prefix .. "vitalic-epoxy", 2 }, + { data_util.mod_prefix .. "cryonite-rod", 2 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = true, + enabled = false, + category = "space-biochemical", + }, + + + + + { + type = "recipe", + name = data_util.mod_prefix .. "holmium-cable", + results = {{data_util.mod_prefix .. "holmium-cable", 2}}, + energy_required = 1, + ingredients = { + { data_util.mod_prefix .. "holmium-plate", 1 }, + { "plastic-bar", 1 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + enabled = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "holmium-solenoid", + result = data_util.mod_prefix .. "holmium-solenoid", + energy_required = 2, + ingredients = { + { data_util.mod_prefix .. "holmium-cable", 4 }, + { data_util.mod_prefix .. "holmium-plate", 1 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + enabled = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "quantum-processor", + result = data_util.mod_prefix .. "quantum-processor", + energy_required = 3, + ingredients = { + { "processing-unit", 1 }, + { data_util.mod_prefix .. "holmium-cable", 4 }, + { data_util.mod_prefix .. "holmium-plate", 1 }, + {data_util.mod_prefix .. "quantum-phenomenon-data", 1}, + }, + requester_paste_multiplier = 1, + always_show_made_in = true, + enabled = false, + category="space-manufacturing" + }, + { + type = "recipe", + name = data_util.mod_prefix .. "dynamic-emitter", + result = data_util.mod_prefix .. "dynamic-emitter", + energy_required = 4, + ingredients = { + { data_util.mod_prefix .. "holmium-solenoid", 1 }, + { data_util.mod_prefix .. "quantum-processor", 1 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = true, + enabled = false, + category="space-manufacturing" + }, + + { + type = "recipe", + name = data_util.mod_prefix .. "naquium-cube", + result = data_util.mod_prefix .. "naquium-cube", + energy_required = 10, + ingredients = { + { type="fluid", name = data_util.mod_prefix .. "particle-stream", amount = 16 }, + { data_util.mod_prefix .. "naquium-plate", 16 }, + { data_util.mod_prefix .. "nanomaterial", 1 }, + { data_util.mod_prefix .. "vulcanite-block", 1 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = true, + enabled = false, + category = "space-materialisation", + }, + { + type = "recipe", + name = data_util.mod_prefix .. "naquium-tessaract", + main_product = data_util.mod_prefix .. "naquium-tessaract", + energy_required = 20, + ingredients = { + { data_util.mod_prefix .. "naquium-cube", 1 }, + { data_util.mod_prefix .. "naquium-plate", 16 }, + { data_util.mod_prefix .. "cryonite-rod", 4 }, + { name = data_util.mod_prefix .. "arcosphere-a", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-b", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-c", amount = 1}, + }, + results = { + { name = data_util.mod_prefix .. "naquium-tessaract", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-d", amount= 1 }, + { name = data_util.mod_prefix .. "arcosphere-e", amount= 1 }, + { name = data_util.mod_prefix .. "arcosphere-f", amount= 1 }, + { name = data_util.mod_prefix .. "arcosphere-g", amount= 0 }, + { name = data_util.mod_prefix .. "arcosphere-h", amount= 0 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = true, + enabled = false, + category = "arcosphere", + localised_description = {"space-exploration.arcosphere-random"} + }, + { + type = "recipe", + name = data_util.mod_prefix .. "naquium-tessaract-alt", + main_product = data_util.mod_prefix .. "naquium-tessaract", + energy_required = 20, + ingredients = { + { data_util.mod_prefix .. "naquium-cube", 1 }, + { data_util.mod_prefix .. "naquium-plate", 16 }, + { data_util.mod_prefix .. "cryonite-rod", 4 }, + { name = data_util.mod_prefix .. "arcosphere-a", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-b", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-c", amount = 1}, + }, + results = { + { name = data_util.mod_prefix .. "naquium-tessaract", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-d", amount= 0 }, + { name = data_util.mod_prefix .. "arcosphere-e", amount= 0 }, + { name = data_util.mod_prefix .. "arcosphere-f", amount= 1 }, + { name = data_util.mod_prefix .. "arcosphere-g", amount= 1 }, + { name = data_util.mod_prefix .. "arcosphere-h", amount= 1 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = true, + enabled = false, + category = "arcosphere", + localised_description = {"space-exploration.arcosphere-random"} + }, + { + type = "recipe", + name = data_util.mod_prefix .. "naquium-processor", + main_product = data_util.mod_prefix .. "naquium-processor", + energy_required = 30, + ingredients = { + { data_util.mod_prefix .. "quantum-processor", 1 }, + { data_util.mod_prefix .. "naquium-tessaract", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "neural-gel-2", amount = 4}, + { name = data_util.mod_prefix .. "arcosphere-c", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-d", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-e", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-f", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-g", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-h", amount = 1}, + }, + results = { + {name = data_util.mod_prefix .. "naquium-processor", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-a", amount = 5}, + { name = data_util.mod_prefix .. "arcosphere-b", amount = 1}, + }, + requester_paste_multiplier = 1, + always_show_made_in = true, + enabled = false, + category = "arcosphere", + localised_description = {"space-exploration.arcosphere-random"} + }, + { + type = "recipe", + name = data_util.mod_prefix .. "naquium-processor-alt", + main_product = data_util.mod_prefix .. "naquium-processor", + energy_required = 30, + ingredients = { + { data_util.mod_prefix .. "quantum-processor", 1 }, + { data_util.mod_prefix .. "naquium-tessaract", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "neural-gel-2", amount = 4}, + { name = data_util.mod_prefix .. "arcosphere-c", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-d", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-e", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-f", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-g", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-h", amount = 1}, + }, + results = { + {name = data_util.mod_prefix .. "naquium-processor", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-a", amount = 1}, + { name = data_util.mod_prefix .. "arcosphere-b", amount = 5}, + }, + requester_paste_multiplier = 1, + always_show_made_in = true, + enabled = false, + category = "arcosphere", + localised_description = {"space-exploration.arcosphere-random"} + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/recycling-facility.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/recycling-facility.lua new file mode 100644 index 0000000..4d82044 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/recycling-facility.lua @@ -0,0 +1,185 @@ +-- NOTE: fluids x100 + +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +make_recipe({ + name = data_util.mod_prefix .. "scrap-recycling", + ingredients = { + { data_util.mod_prefix .. "scrap", 1}, + }, + results = { + { name = "iron-ore", amount_min = 1, amount_max = 1, probability = 0.1}, + { name = "copper-ore", amount_min = 1, amount_max = 1, probability = 0.1}, + { name = "stone", amount_min = 1, amount_max = 1, probability = 0.1}, + { type = "fluid", name = "heavy-oil", amount_min = 1, amount_max = 1, probability = 0.1}, + }, + category = "hard-recycling", + subgroup = "space-recycling", + icons = data_util.transition_icons( + { + icon = data.raw.item[data_util.mod_prefix .. "scrap"].icon, + icon_size = data.raw.item[data_util.mod_prefix .. "scrap"].icon_size, scale = 0.5 + }, + { + {icon = data.raw.item["iron-ore"].icon, icon_size = data.raw.item["iron-ore"].icon_size, scale = 0.5}, + {icon = data.raw.item["copper-ore"].icon, icon_size = data.raw.item["copper-ore"].icon_size, scale = 0.5}, + {icon = data.raw.item["stone"].icon, icon_size = data.raw.item["stone"].icon_size, scale = 0.5}, + } + ), + energy_required = 1, + allow_as_intermediate = false, + enabled = false, + always_show_made_in = true, + allow_decomposition = false +}) + +make_recipe({ + name = data_util.mod_prefix .. "broken-data-scrapping", + ingredients = { + { data_util.mod_prefix .. "broken-data", 1} + }, + results = { + { data_util.mod_prefix .. "scrap", 5}, + }, + icon = "__space-exploration-graphics__/graphics/icons/scrap.png", + category = "hard-recycling", + subgroup = "space-recycling", + icons = data_util.transition_icons( + { + icon = data.raw.item[data_util.mod_prefix .. "broken-data"].icon, + icon_size = data.raw.item[data_util.mod_prefix .. "broken-data"].icon_size, scale = 0.5 + }, + { + icon = data.raw.item[data_util.mod_prefix .. "scrap"].icon, + icon_size = data.raw.item[data_util.mod_prefix .. "scrap"].icon_size, scale = 0.5 + } + ), + energy_required = 5, + allow_as_intermediate = false, + localised_name = {"recipe-name." .. data_util.mod_prefix .. "broken-data-scrapping"}, + enabled = false, + always_show_made_in = true, + allow_decomposition = false +}) + +make_recipe({ + name = data_util.mod_prefix .. "empty-barrel-scrapping", + ingredients = { + { "empty-barrel", 1} + }, + results = { + { data_util.mod_prefix .. "scrap", 2}, + }, + icon = "__space-exploration-graphics__/graphics/icons/scrap.png", + category = "hard-recycling", + subgroup = "space-recycling", + icons = data_util.transition_icons( + { + icon = data.raw.item["empty-barrel"].icon, + icon_size = data.raw.item["empty-barrel"].icon_size, scale = 0.5 + }, + { + icon = data.raw.item[data_util.mod_prefix .. "scrap"].icon, + icon_size = data.raw.item[data_util.mod_prefix .. "scrap"].icon_size, scale = 0.5 + } + ), + energy_required = 2, + allow_as_intermediate = false, + localised_name = {"recipe-name." .. data_util.mod_prefix .. "empty-barrel-scrapping"}, + enabled = false, + always_show_made_in = true, + allow_decomposition = false +}) + +make_recipe({ + name = data_util.mod_prefix .. "empty-barrel-reprocessing", + ingredients = { + { "empty-barrel", 1} + }, + results = { + { "steel-plate", 1}, + }, + icon = "__space-exploration-graphics__/graphics/icons/scrap.png", + category = "hard-recycling", + subgroup = "space-recycling", + icons = data_util.transition_icons( + { + icon = data.raw.item["empty-barrel"].icon, + icon_size = data.raw.item["empty-barrel"].icon_size, scale = 0.5 + }, + { + icon = data.raw.item["steel-plate"].icon, + icon_size = data.raw.item["steel-plate"].icon_size, scale = 0.5 + } + ), + energy_required = 2, + allow_as_intermediate = false, + localised_name = {"recipe-name." .. data_util.mod_prefix .. "empty-barrel-reprocessing"}, + enabled = false, + always_show_made_in = true, + allow_decomposition = false +}) + +make_recipe({ + name = data_util.mod_prefix .. "space-capsule-scrapping", + ingredients = { + { data_util.mod_prefix .. "space-capsule", 1} + }, + results = { + { "solar-panel", 45}, + { "accumulator", 45}, + { data_util.mod_prefix .. "heat-shielding", 90}, + { "low-density-structure", 90}, + { "rocket-control-unit", 90}, + { data_util.mod_prefix .. "scrap", 1000}, + }, + icon = "__space-exploration-graphics__/graphics/icons/scrap.png", + category = "hard-recycling", + subgroup = "space-recycling", + icons = data_util.transition_icons( + { + icon = data.raw.item[data_util.mod_prefix .. "space-capsule"].icon, + icon_size = data.raw.item[data_util.mod_prefix .. "space-capsule"].icon_size, scale = 0.5 + }, + { + icon = data.raw.item[data_util.mod_prefix .. "scrap"].icon, + icon_size = data.raw.item[data_util.mod_prefix .. "scrap"].icon_size, scale = 0.5 + } + ), + energy_required = 2, + allow_as_intermediate = false, + localised_name = {"recipe-name." .. data_util.mod_prefix .. "space-capsule-scrapping"}, + enabled = false, + always_show_made_in = true, + allow_decomposition = false +}) + +make_recipe({ + name = data_util.mod_prefix .. "cargo-pod-scrapping", + ingredients = { + { data_util.mod_prefix .. "cargo-rocket-cargo-pod", 1} + }, + results = { + { data_util.mod_prefix .. "scrap", 100}, + }, + icon = "__space-exploration-graphics__/graphics/icons/scrap.png", + category = "hard-recycling", + subgroup = "space-recycling", + icons = data_util.transition_icons( + { + icon = data.raw.item[data_util.mod_prefix .. "cargo-rocket-cargo-pod"].icon, + icon_size = data.raw.item[data_util.mod_prefix .. "cargo-rocket-cargo-pod"].icon_size, scale = 0.5 + }, + { + icon = data.raw.item[data_util.mod_prefix .. "scrap"].icon, + icon_size = data.raw.item[data_util.mod_prefix .. "scrap"].icon_size, scale = 0.5 + } + ), + energy_required = 2, + allow_as_intermediate = false, + localised_name = {"recipe-name." .. data_util.mod_prefix .. "cargo-pod-scrapping"}, + enabled = false, + always_show_made_in = true, + allow_decomposition = false +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/resources.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/resources.lua new file mode 100644 index 0000000..4e073bb --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/resources.lua @@ -0,0 +1,934 @@ +local data_util = require("data_util") + + +data:extend({ + -- pulverising + { + type = "recipe", + category = "pulverising", + name = data_util.mod_prefix .. "beryllium-ore-crushed", + results = { + {name = data_util.mod_prefix .. "beryllium-ore-crushed", amount = 1} -- 2 + }, + energy_required = 1, + ingredients = { + {name = data_util.mod_prefix .. "beryllium-ore", amount = 2} + }, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + category = "chemistry", + name = data_util.mod_prefix .. "beryllium-sulfate", + main_product = data_util.mod_prefix .. "beryllium-sulfate", + results = { + {name = data_util.mod_prefix .. "beryllium-sulfate", amount = 1}, -- 4 + {name = "sand", probability = 0.5, amount_min = 1, amount_max = 1,}, + {type = "fluid", name = "water", amount = 1, catalyst_amount = 1}, + }, + energy_required = 2, + ingredients = { + {type = "fluid", name="sulfuric-acid", amount = 2}, + {name = data_util.mod_prefix .. "beryllium-ore-crushed", amount = 2} + }, + enabled = false, + always_show_made_in = true, + crafting_machine_tint = { + primary = { + a = 1, + r = 0.338, + b = 0.482, + g = 0.965 + }, + quaternary = { + a = 1, + r = 0.191, + b = 0.763, + g = 0.939 + }, + secondary = { + a = 1, + r = 0.222, + b = 0.56, + g = 0.831 + }, + tertiary = { + a = 1, + r = 0.443, + b = 0.728, + g = 0.818, + } + }, + }, + { + type = "recipe", + category = "chemistry", + name = data_util.mod_prefix .. "beryllium-hydroxide", + main_product = data_util.mod_prefix .. "beryllium-hydroxide", + results = { + {type = "fluid", name = data_util.mod_prefix .. "beryllium-hydroxide", amount = 200}, --1 + }, + energy_required = 30, + ingredients = { + {name = data_util.mod_prefix .. "cryonite-rod", amount = 1}, + {type = "fluid", name="water", amount = 150, catalyst_amount = 150}, + {name = data_util.mod_prefix .. "beryllium-sulfate", amount = 50} + }, + subgroup = "fluid-recipes", + enabled = false, + always_show_made_in = true, + crafting_machine_tint = { + primary = { + a = 1, + r = 0.338, + b = 0.482, + g = 0.965 + }, + quaternary = { + a = 1, + r = 0.191, + b = 0.763, + g = 0.939 + }, + secondary = { + a = 1, + r = 0.222, + b = 0.56, + g = 0.831 + }, + tertiary = { + a = 1, + r = 0.443, + b = 0.728, + g = 0.818, + } + }, + }, + { + type = "recipe", + category = "chemistry", + name = data_util.mod_prefix .. "beryllium-powder", + main_product = data_util.mod_prefix .. "beryllium-powder", + results = { + {name = data_util.mod_prefix .. "beryllium-powder", amount = 1}, -- 2 + {type = "fluid", name = "water", amount = 1, catalyst_amount = 1}, + }, + energy_required = 1, + ingredients = { + {type = "fluid", name = data_util.mod_prefix .. "beryllium-hydroxide", amount = 2}, + }, + enabled = false, + always_show_made_in = true, + crafting_machine_tint = { + primary = { + a = 1, + r = 0.338, + b = 0.482, + g = 0.965 + }, + quaternary = { + a = 1, + r = 0.191, + b = 0.763, + g = 0.939 + }, + secondary = { + a = 1, + r = 0.222, + b = 0.56, + g = 0.831 + }, + tertiary = { + a = 1, + r = 0.443, + b = 0.728, + g = 0.818, + } + }, + }, + { + type = "recipe", + category = "smelting", + name = data_util.mod_prefix .. "beryllium-ingot", + results = { + {name = data_util.mod_prefix .. "beryllium-ingot", amount = 1}, -- 20 + }, + energy_required = 40, + ingredients = { + {name = data_util.mod_prefix .. "beryllium-powder", amount = 10}, + }, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + category = "crafting", + name = data_util.mod_prefix .. "beryllium-plate", + results = { + {name = data_util.mod_prefix .. "beryllium-plate", amount = 4}, -- 5 + }, + energy_required = 8, + ingredients = { + {name = data_util.mod_prefix .. "beryllium-ingot", amount = 1} + }, + enabled = false, + always_show_made_in = true, + }, + + + { + type = "recipe", + category = "pulverising", + name = data_util.mod_prefix .. "cryonite-crushed", + results = { + {name = data_util.mod_prefix .. "cryonite-crushed", amount = 1} + }, + energy_required = 0.5, + ingredients = { + {name = data_util.mod_prefix .. "cryonite", amount = 2} + }, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + category = "pressure-washing", + name = data_util.mod_prefix .. "cryonite-washed", + main_product = data_util.mod_prefix .. "cryonite-washed", + results = { + {name = data_util.mod_prefix .. "cryonite-washed", amount = 2}, + {name = "stone", amount_min = 1, amount_max = 1, probability = 0.25}, + {type = "fluid", name="water", amount = 4, catalyst_amount = 4}, + }, + energy_required = 1, + ingredients = { + {type = "fluid", name="water", amount = 6, catalyst_amount = 6}, + {name = data_util.mod_prefix .. "cryonite-crushed", amount = 2} + }, + enabled = false, + always_show_made_in = true, + crafting_machine_tint = { + primary = { + a = 1, + r = 0.338, + g = 0.482, + b = 0.965 + }, + quaternary = { + a = 1, + r = 0.191, + g = 0.763, + b = 0.939 + }, + secondary = { + a = 1, + r = 0.222, + g = 0.56, + b = 0.831 + }, + tertiary = { + a = 1, + r = 0.443, + g = 0.728, + b = 0.818, + } + }, + }, + { + type = "recipe", + category = "smelting", + name = data_util.mod_prefix .. "cryonite-rod", + results = { + {name = data_util.mod_prefix .. "cryonite-rod", amount = 1}, + }, + energy_required = 5, + ingredients = { + {name = data_util.mod_prefix .. "cryonite-washed", amount = 1} + }, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + category = "chemistry", + name = data_util.mod_prefix .. "cryonite-ion-exchange-beads", + results = { + {name = data_util.mod_prefix .. "cryonite-ion-exchange-beads", amount = 10}, + }, + energy_required = 10, + ingredients = { + {name = data_util.mod_prefix .. "cryonite-rod", amount = 1}, + {name = "plastic-bar", amount = 1}, + {type = "fluid", name = "sulfuric-acid", amount = 5}, + {type = "fluid", name = "steam", amount = 5}, + }, + crafting_machine_tint = { + primary = { + a = 1, + r = 0.338, + g = 0.482, + b = 0.965 + }, + quaternary = { + a = 1, + r = 0.191, + g = 0.763, + b = 0.939 + }, + secondary = { + a = 1, + r = 0.222, + g = 0.56, + b = 0.831 + }, + tertiary = { + a = 1, + r = 0.443, + g = 0.728, + b = 0.818, + } + }, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + category = "chemistry", + name = data_util.mod_prefix .. "cryonite-lubricant", + results = { + {type = "fluid", name = "lubricant", amount = 10}, + }, + energy_required = 5, + ingredients = { + {type = "fluid", name = data_util.mod_prefix .. "cryonite-slush", amount = 10}, + {type = "fluid", name = "heavy-oil", amount = 1}, + }, + subgroup = "fluid-recipes", + enabled = false, + always_show_made_in = true, + allow_as_intermediate = false + }, + { + type = "recipe", + category = "chemistry", + name = data_util.mod_prefix .. "cryonite-slush", + results = { + {type = "fluid", name = data_util.mod_prefix .. "cryonite-slush", amount = 10}, + }, + energy_required = 5, + ingredients = { + {name = data_util.mod_prefix .. "cryonite-rod", amount = 1}, + {type = "fluid", name = "sulfuric-acid", amount = 1}, + }, + subgroup = "fluid-recipes", + enabled = false, + always_show_made_in = true, + allow_as_intermediate = false + }, + { + type = "recipe", + category = "chemistry", + name = data_util.mod_prefix .. "cryonite-to-water-ice", + results = { + {name = data_util.mod_prefix .. "water-ice", amount = 1}, + }, + energy_required = 1, + ingredients = { + {type = "fluid", name = data_util.mod_prefix .. "cryonite-slush", amount = 1}, + {type = "fluid", name = "water", amount = 100}, + }, + subgroup = "fluid-recipes", + enabled = false, + always_show_made_in = true, + allow_as_intermediate = false + }, + { + type = "recipe", + category = "chemistry", + name = data_util.mod_prefix .. "steam-to-water", + results = { + {type = "fluid", name = "water", amount = 99}, + }, + energy_required = 0.5, + ingredients = { + {type = "fluid", name = "steam", amount = 100}, + }, + subgroup = "fluid-recipes", + enabled = false, + always_show_made_in = true, + allow_as_intermediate = false + }, + + { + type = "recipe", + category = "pulverising", + name = data_util.mod_prefix .. "holmium-ore-crushed", + results = { + {name = data_util.mod_prefix .. "holmium-ore-crushed", amount = 1} + }, + energy_required = 1, + ingredients = { + {name = data_util.mod_prefix .. "holmium-ore", amount = 2} + }, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + category = "pressure-washing", + name = data_util.mod_prefix .. "holmium-ore-washed", + main_product = data_util.mod_prefix .. "holmium-ore-washed", + results = { + {name = data_util.mod_prefix .. "holmium-ore-washed", amount = 2}, + {name = "stone", amount_min = 1, amount_max = 1, probability = 0.25}, + }, + energy_required = 1, + ingredients = { + {type = "fluid", name="water", amount = 2, catalyst_amount = 2}, + {name = data_util.mod_prefix .. "holmium-ore-crushed", amount = 2} + }, + enabled = false, + always_show_made_in = true, + crafting_machine_tint = { + primary = { + a = 1, + g = 0.338, + b = 0.482, + r = 0.965 + }, + quaternary = { + a = 1, + g = 0.191, + b = 0.763, + r = 0.939 + }, + secondary = { + a = 1, + g = 0.222, + b = 0.56, + r = 0.831 + }, + tertiary = { + a = 1, + g = 0.443, + b = 0.728, + r = 0.818, + } + }, + }, + { + type = "recipe", + category = "chemistry", + name = data_util.mod_prefix .. "holmium-powder", + main_product = data_util.mod_prefix .. "holmium-powder", + results = { + {name = data_util.mod_prefix .. "holmium-powder", probability = 0.5, amount_min = 1, amount_max = 1}, + {name = data_util.mod_prefix .. "vulcanite-ion-exchange-beads", probability = 0.5, amount_min = 1, amount_max = 1, catalyst_amount = 1}, + {name = data_util.mod_prefix .. "holmium-ore-washed", probability = 0.5, amount_min = 1, amount_max = 1, catalyst_amount = 1}, + {name = "sand", probability = 0.25, amount_min = 1, amount_max = 1, catalyst_amount = 1}, + }, + energy_required = 1, + ingredients = { + {type = "fluid", name="water", amount = 2, catalyst_amount = 2}, + {name = data_util.mod_prefix .. "vulcanite-ion-exchange-beads", amount = 1, catalyst_amount = 1,}, + {name = data_util.mod_prefix .. "holmium-ore-washed", amount = 1, catalyst_amount = 1,} + }, + enabled = false, + always_show_made_in = true, + crafting_machine_tint = { + primary = { + a = 1, + g = 0.338, + b = 0.482, + r = 0.965 + }, + quaternary = { + a = 1, + g = 0.191, + b = 0.763, + r = 0.939 + }, + secondary = { + a = 1, + g = 0.222, + b = 0.56, + r = 0.831 + }, + tertiary = { + a = 1, + g = 0.443, + b = 0.728, + r = 0.818, + } + }, + }, + { + type = "recipe", + category = "smelting", + name = data_util.mod_prefix .. "holmium-ingot", + results = { + {name = data_util.mod_prefix .. "holmium-ingot", amount = 1}, + }, + energy_required = 40, + ingredients = { + {name = data_util.mod_prefix .. "holmium-powder", amount = 10}, + }, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + category = "crafting", + name = data_util.mod_prefix .. "holmium-plate", + results = { + {name = data_util.mod_prefix .. "holmium-plate", amount = 4}, + }, + energy_required = 8, + ingredients = { + {name = data_util.mod_prefix .. "holmium-ingot", amount = 1} + }, + enabled = false, + always_show_made_in = true, + }, + + { + type = "recipe", + category = "pulverising", + name = data_util.mod_prefix .. "iridium-ore-crushed", -- 2 + results = { + {name = data_util.mod_prefix .. "iridium-ore-crushed", amount = 1} + }, + energy_required = 1, + ingredients = { + {name = data_util.mod_prefix .. "iridium-ore", amount = 2} + }, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + category = "pressure-washing", + name = data_util.mod_prefix .. "iridium-ore-washed", -- 2 + main_product = data_util.mod_prefix .. "iridium-ore-washed", + results = { + {name = data_util.mod_prefix .. "iridium-ore-washed", amount = 2}, + {name = "stone", amount_min = 1, amount_max = 1, probability = 0.25}, + }, + energy_required = 1, + ingredients = { + {type = "fluid", name="water", amount = 2, catalyst_amount = 2}, + {name = data_util.mod_prefix .. "iridium-ore-crushed", amount = 2} + }, + enabled = false, + always_show_made_in = true, + crafting_machine_tint = { + primary = { + a = 1, + b = 0.338, + r = 0.482, + g = 0.965 + }, + quaternary = { + a = 1, + b = 0.191, + r = 0.763, + g = 0.939 + }, + secondary = { + a = 1, + b = 0.222, + r = 0.56, + g = 0.831 + }, + tertiary = { + a = 1, + b = 0.443, + r = 0.728, + g = 0.818, + } + }, + }, + { + type = "recipe", + category = "chemistry", + name = data_util.mod_prefix .. "iridium-powder", -- 4 + main_product = data_util.mod_prefix .. "iridium-powder", + results = { + {name = data_util.mod_prefix .. "iridium-powder", probability = 0.5, amount_min = 1, amount_max = 1}, + {name = data_util.mod_prefix .. "cryonite-ion-exchange-beads", probability = 0.5, amount_min = 1, amount_max = 1, catalyst_amount = 1}, + {name = data_util.mod_prefix .. "iridium-ore-washed", probability = 0.5, amount_min = 1, amount_max = 1, catalyst_amount = 1}, + {name = "sand", probability = 0.25, amount_min = 1, amount_max = 1, catalyst_amount = 1}, + }, + energy_required = 1, + ingredients = { + {type = "fluid", name="water", amount = 2, catalyst_amount = 2}, + {name = data_util.mod_prefix .. "cryonite-ion-exchange-beads", amount = 1, catalyst_amount = 1,}, + {name = data_util.mod_prefix .. "iridium-ore-washed", amount = 1, catalyst_amount = 1,} + }, + enabled = false, + always_show_made_in = true, + crafting_machine_tint = { + primary = { + a = 1, + b = 0.338, + r = 0.482, + g = 0.965 + }, + quaternary = { + a = 1, + b = 0.191, + r = 0.763, + g = 0.939 + }, + secondary = { + a = 1, + b = 0.222, + r = 0.56, + g = 0.831 + }, + tertiary = { + a = 1, + b = 0.443, + r = 0.728, + g = 0.818, + } + }, + }, + { + type = "recipe", + category = "smelting", + name = data_util.mod_prefix .. "iridium-ingot", -- 40 + results = { + {name = data_util.mod_prefix .. "iridium-ingot", amount = 1}, + }, + energy_required = 40, + ingredients = { + {name = data_util.mod_prefix .. "iridium-powder", amount = 10}, + {name=data_util.mod_prefix .. "vulcanite-block", amount = 1}, + }, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + category = "crafting", + name = data_util.mod_prefix .. "iridium-plate", -- 10 + results = { + {name = data_util.mod_prefix .. "iridium-plate", amount = 4}, + }, + energy_required = 8, + ingredients = { + {name = data_util.mod_prefix .. "iridium-ingot", amount = 1} + }, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + category = "pulverising", + name = data_util.mod_prefix .. "naquium-ore-crushed", + results = { + {name = data_util.mod_prefix .. "naquium-ore-crushed", amount = 1} + }, + energy_required = 2, + ingredients = { + {name = data_util.mod_prefix .. "naquium-ore", amount = 4} + }, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + category = "pressure-washing", + name = data_util.mod_prefix .. "naquium-ore-washed", + main_product = data_util.mod_prefix .. "naquium-ore-washed", + results = { + {name = data_util.mod_prefix .. "naquium-ore-washed", amount = 2}, + {name = "stone", amount_min = 1, amount_max = 1, probability = 0.25}, + }, + energy_required = 2, + ingredients = { + {type = "fluid", name="water", amount = 4}, + {name = data_util.mod_prefix .. "naquium-ore-crushed", amount = 2} + }, + enabled = false, + always_show_made_in = true, + crafting_machine_tint = { + primary = { + a = 1, + g = 0.338, + r = 0.482, + b = 0.965 + }, + quaternary = { + a = 1, + g = 0.191, + r = 0.763, + b = 0.939 + }, + secondary = { + a = 1, + g = 0.222, + r = 0.56, + b = 0.831 + }, + tertiary = { + a = 1, + g = 0.443, + r = 0.728, + b = 0.818, + } + }, + }, + { + type = "recipe", + category = "pressure-washing", + name = data_util.mod_prefix .. "naquium-powder", + main_product = data_util.mod_prefix .. "naquium-powder", + results = { + {name = data_util.mod_prefix .. "naquium-powder", amount = 1}, + {name = "sand", probability = 0.5, amount_min = 1, amount_max = 1,}, + {type="fluid", name = "water", amount = 2}, + }, + energy_required = 20, + ingredients = { + {name=data_util.mod_prefix .. "vitalic-acid", amount = 4}, + {name = data_util.mod_prefix .. "naquium-ore-washed", amount = 2} + }, + enabled = false, + always_show_made_in = true, + crafting_machine_tint = { + primary = { + a = 1, + g = 0.338, + r = 0.482, + b = 0.965 + }, + quaternary = { + a = 1, + g = 0.191, + r = 0.763, + b = 0.939 + }, + secondary = { + a = 1, + g = 0.222, + r = 0.56, + b = 0.831 + }, + tertiary = { + a = 1, + g = 0.443, + r = 0.728, + b = 0.818, + } + }, + }, + { + type = "recipe", + category = "smelting", + name = data_util.mod_prefix .. "naquium-ingot", + results = { + {name = data_util.mod_prefix .. "naquium-ingot", amount = 1}, + }, + energy_required = 60, + ingredients = { + {name = data_util.mod_prefix .. "naquium-powder", amount = 10}, + {name=data_util.mod_prefix .. "vulcanite-block", amount = 1}, + }, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + category = "crafting", + name = data_util.mod_prefix .. "naquium-plate", + results = { + {name = data_util.mod_prefix .. "naquium-plate", amount = 4}, + }, + energy_required = 10, + ingredients = { + {name = data_util.mod_prefix .. "naquium-ingot", amount = 1} + }, + enabled = false, + always_show_made_in = true, + }, + + { + type = "recipe", + category = "pulverising", + name = data_util.mod_prefix .. "vitamelange-nugget", + results = { + {name = data_util.mod_prefix .. "vitamelange-nugget", amount = 2}, -- 0.5 + }, + energy_required = 1, + ingredients = { + {name = data_util.mod_prefix .. "vitamelange", amount = 1} + }, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + category = "smelting", + name = data_util.mod_prefix .. "vitamelange-roast", + results = { + {name = data_util.mod_prefix .. "vitamelange-roast", amount = 50} -- 1 + }, + energy_required = 100, + ingredients = { + {name=data_util.mod_prefix .. "vulcanite-block", amount = 1}, + {name = data_util.mod_prefix .. "vitamelange-nugget", amount = 100} + }, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + category = "crafting", + name = data_util.mod_prefix .. "vitamelange-spice", -- 2 + results = { + {name = data_util.mod_prefix .. "vitamelange-spice", amount_min=1, amount_max=1, probability=0.5}, + }, + energy_required = 1, + ingredients = { + {name = data_util.mod_prefix .. "vitamelange-roast", amount = 1} + }, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + category = "chemistry", + name = data_util.mod_prefix .. "vitamelange-extract", -- 4 + results = { + {name = data_util.mod_prefix .. "vitamelange-extract", amount_min=1, amount_max=1, probability=0.5}, + }, + energy_required = 1, + ingredients = { + {name = data_util.mod_prefix .. "vitamelange-spice", amount = 1} + }, + enabled = false, + always_show_made_in = true, + }, + + + { + type = "recipe", + category = "pulverising", + name = data_util.mod_prefix .. "vulcanite-crushed", + results = { + {name = data_util.mod_prefix .. "vulcanite-crushed", amount = 1} + }, + energy_required = 0.5, + ingredients = { + {name = data_util.mod_prefix .. "vulcanite", amount = 2} + }, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + category = "pressure-washing", + name = data_util.mod_prefix .. "vulcanite-washed", + main_product = data_util.mod_prefix .. "vulcanite-washed", + results = { + {name = data_util.mod_prefix .. "vulcanite-washed", amount = 2}, + {name = "stone", amount_min = 1, amount_max = 1, probability = 0.25}, + {type = "fluid", name="steam", amount = 2, temperature = 165}, + }, + energy_required = 1, + ingredients = { + {type = "fluid", name="water", amount = 4}, + {name = data_util.mod_prefix .. "vulcanite-crushed", amount = 2} + }, + enabled = false, + always_show_made_in = true, + crafting_machine_tint = { + primary = { + a = 1, + b = 0.338, + r = 0.482, + g = 0.965 + }, + quaternary = { + a = 1, + b = 0.191, + r = 0.763, + g = 0.939 + }, + secondary = { + a = 1, + b = 0.222, + r = 0.56, + g = 0.831 + }, + tertiary = { + a = 1, + b = 0.443, + r = 0.728, + g = 0.818, + } + }, + }, + { + type = "recipe", + category = "crafting", + name = data_util.mod_prefix .. "vulcanite-block", + results = { + {name = data_util.mod_prefix .. "vulcanite-block", amount = 1}, + }, + energy_required = 1, + ingredients = { + {name = data_util.mod_prefix .. "vulcanite-washed", amount = 1} + }, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + category = "chemistry", + name = data_util.mod_prefix .. "vulcanite-ion-exchange-beads", + results = { + {name = data_util.mod_prefix .. "vulcanite-ion-exchange-beads", amount = 10}, + }, + energy_required = 10, + ingredients = { + {name = data_util.mod_prefix .. "vulcanite-block", amount = 1}, + {name = "plastic-bar", amount = 1}, + {type = "fluid", name = "sulfuric-acid", amount = 5}, + {type = "fluid", name = "steam", amount = 5}, + }, + crafting_machine_tint = { + primary = { + a = 1, + b = 0.338, + r = 0.482, + g = 0.965 + }, + quaternary = { + a = 1, + b = 0.191, + r = 0.763, + g = 0.939 + }, + secondary = { + a = 1, + b = 0.222, + r = 0.56, + g = 0.831 + }, + tertiary = { + a = 1, + b = 0.443, + r = 0.728, + g = 0.818, + } + }, + enabled = false, + always_show_made_in = true, + }, + + +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/rocket-landing-pad.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/rocket-landing-pad.lua new file mode 100644 index 0000000..a564511 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/rocket-landing-pad.lua @@ -0,0 +1,32 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +data:extend({ + { + type = "recipe", + name = data_util.mod_prefix .. "rocket-landing-pad", + result = data_util.mod_prefix .. "rocket-landing-pad", + enabled = false, + energy_required = 20, + ingredients = { + { + "steel-plate", + 1000 + }, + { + "concrete", + 1000 + }, + { + "radar", + 10 + }, + { + "steel-chest", + 10 + }, + }, + requester_paste_multiplier = 1, + }, + always_show_made_in = true, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/rocket-launch-pad.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/rocket-launch-pad.lua new file mode 100644 index 0000000..12cabd7 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/rocket-launch-pad.lua @@ -0,0 +1,63 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +data:extend({ + { + -- the dummy recipe for ethe rcoket silo section, required for launch + -- the component is inserted then the launch pad has the required parts. + type = "recipe", + name = data_util.mod_prefix .. "rocket-launch-pad-silo-dummy-recipe", + result = data_util.mod_prefix .. "rocket-launch-pad-silo-dummy-result-item", + category = "rocket-building", + enabled = false, + energy_required = 0.01, + hidden = true, + ingredients = { + { data_util.mod_prefix .. "rocket-launch-pad-silo-dummy-ingredient-item", 1 } -- could be anything really + }, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "rocket-launch-pad", + result = data_util.mod_prefix .. "rocket-launch-pad", + enabled = false, + energy_required = 30, + ingredients = { + { + "steel-plate", + 1000 + }, + { + "concrete", + 1000 + }, + { + "pipe", + 100 + }, + { + "storage-tank", + 10 + }, + { + "radar", + 10 + }, + { + "steel-chest", + 10 + }, + { + "processing-unit", + 200 + }, + { + "electric-engine-unit", + 200 + } + }, + requester_paste_multiplier = 1, + }, + always_show_made_in = true, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/science-lab.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/science-lab.lua new file mode 100644 index 0000000..c63ed4c --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/science-lab.lua @@ -0,0 +1,33 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +data:extend({ + { + type = "recipe", + name = data_util.mod_prefix .. "space-science-lab", + category = "space-manufacturing", + enabled = false, + energy_required = 30, + ingredients = { + {"lab", 10}, + {"low-density-structure", 40}, + {"processing-unit", 20}, + {"electric-engine-unit", 10}, + {"battery", 10}, + }, + results= + { + {name=data_util.mod_prefix .. "space-science-lab", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/space-science-lab.png", + icon_size = 64, + crafting_machine_tint = + { + primary = {r = 0.290, g = 0.027, b = 0.000, a = 0.000}, -- #49060000 + secondary = {r = 0.722, g = 0.465, b = 0.190, a = 0.000}, -- #b8763000 + tertiary = {r = 0.870, g = 0.365, b = 0.000, a = 0.000}, -- #dd5d0000 + }, + requester_paste_multiplier = 3, + always_show_made_in = true, + } +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/science.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/science.lua new file mode 100644 index 0000000..ae39314 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/science.lua @@ -0,0 +1,601 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +data:extend({ + --[[{ + -- equivalent to 1 cargo rocket setion: (1/100) of a more expensive rocket + -- but gives 1/10 of a silo rocket launch, so around 2-5 times more efficient than silo rockets + type = "recipe", + name = "space-science-pack", + results = {{"space-science-pack", 100}}, + category = "space-manufacturing", + enabled = false, + energy_required = 20, + ingredients = { + { data_util.mod_prefix .. "heat-shielding", 10 }, + { "low-density-structure", 10 }, + { "rocket-control-unit", 10 }, + { data_util.mod_prefix .. "cargo-rocket-cargo-pod", 5 }, + { data_util.mod_prefix .. "cargo-rocket-fuel-tank", 1 } + }, + main_product = "space-science-pack", + requester_paste_multiplier = 1, + }, + { + -- this is much more efficient that rocket returns + type = "recipe", + name = "space-science-pack", + results = {{"space-science-pack", 4}}, + category = "space-crafting", + enabled = false, + energy_required = 20, + ingredients = { + { data_util.mod_prefix .. "heat-shielding", 1 }, + { "low-density-structure", 1 }, + { "battery", 5 }, + { "processing-unit", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "liquid-rocket-fuel", amount = 20 }, + }, + main_product = "space-science-pack", + requester_paste_multiplier = 1, + always_show_made_in = true, + },]]-- + { + type = "recipe", + name = data_util.mod_prefix .. "rocket-science-pack", + category = "space-manufacturing", + enabled = false, + energy_required = 100, + ingredients = { + { data_util.mod_prefix .. "satellite-telemetry", 1 }, + { "empty-barrel", 1}, + { "rocket-fuel", 1 }, + { data_util.mod_prefix .. "vulcanite-block", 1 }, + { data_util.mod_prefix .. "machine-learning-data", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "chemical-gel", amount = 2 }, + }, + results = { + {data_util.mod_prefix .. "rocket-science-pack", 10}, + { data_util.mod_prefix .."junk-data", 1}, + }, + icons = { + {icon = "__space-exploration-graphics__/graphics/icons/catalogue/deep-1.png", icon_size = 64}, + {icon = "__space-exploration-graphics__/graphics/icons/catalogue/mask-1.png", icon_size = 64}, + }, + icon_size = 64, + main_product = data_util.mod_prefix .. "rocket-science-pack", + requester_paste_multiplier = 1, + always_show_made_in = true, + subgroup = "science-pack", + }, + { + type = "recipe", + name = data_util.mod_prefix .. "astronomic-science-pack-1", + category = "space-manufacturing", + enabled = false, + energy_required = 30, + ingredients = { + { data_util.mod_prefix .. "astronomic-catalogue-1", 1 }, + { data_util.mod_prefix .. "beryllium-plate", 20 }, + { data_util.mod_prefix .. "astronomic-insight", 1 }, + { data_util.mod_prefix .. "significant-data", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 20}, + }, + results = { + { data_util.mod_prefix .. "astronomic-science-pack-1", 2}, + { data_util.mod_prefix .. "junk-data", 6}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 20}, + }, + icon_size = 64, + main_product = data_util.mod_prefix .. "astronomic-science-pack-1", + requester_paste_multiplier = 1, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "astronomic-science-pack-1-no-beryllium", + category = "space-manufacturing", + enabled = false, + energy_required = 30, + ingredients = { + { data_util.mod_prefix .. "astronomic-catalogue-1", 2 }, + { data_util.mod_prefix .. "astronomic-insight", 2 }, + { data_util.mod_prefix .. "significant-data", 2 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 20}, + }, + results = { + { data_util.mod_prefix .. "astronomic-science-pack-1", 1}, + { data_util.mod_prefix .. "junk-data", 12}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 20}, + }, + icon_size = 64, + main_product = data_util.mod_prefix .. "astronomic-science-pack-1", + requester_paste_multiplier = 1, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "astronomic-science-pack-2", + category = "space-manufacturing", + enabled = false, + energy_required = 30, + ingredients = { + { data_util.mod_prefix .. "astronomic-catalogue-2", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-1", 2 }, + { data_util.mod_prefix .. "aeroframe-pole", 20 }, + { data_util.mod_prefix .. "astronomic-insight", 1 }, + { data_util.mod_prefix .. "significant-data", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 20}, + }, + results = { + { data_util.mod_prefix .. "astronomic-science-pack-2", 4}, + { data_util.mod_prefix .. "junk-data", 6}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 20}, + }, + icon_size = 64, + main_product = data_util.mod_prefix .. "astronomic-science-pack-2", + requester_paste_multiplier = 1, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "astronomic-science-pack-3", + category = "space-manufacturing", + enabled = false, + energy_required = 30, + ingredients = { + { data_util.mod_prefix .. "astronomic-catalogue-3", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-2", 4 }, + { data_util.mod_prefix .. "aeroframe-scaffold", 10 }, + { data_util.mod_prefix .. "astronomic-insight", 1 }, + { data_util.mod_prefix .. "significant-data", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 20}, + }, + results = { + { data_util.mod_prefix .. "astronomic-science-pack-3", 6}, + { data_util.mod_prefix .. "junk-data", 6}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 20}, + }, + icon_size = 64, + main_product = data_util.mod_prefix .. "astronomic-science-pack-3", + requester_paste_multiplier = 1, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "astronomic-science-pack-4", + category = "space-manufacturing", + enabled = false, + energy_required = 30, + ingredients = { + { data_util.mod_prefix .. "astronomic-catalogue-4", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-3", 6 }, + { data_util.mod_prefix .. "aeroframe-bulkhead", 2 }, + { data_util.mod_prefix .. "astronomic-insight", 1 }, + { data_util.mod_prefix .. "significant-data", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 20}, + }, + results = { + { data_util.mod_prefix .. "astronomic-science-pack-4", 8}, + { data_util.mod_prefix .. "junk-data", 6}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 20}, + }, + icon_size = 64, + main_product = data_util.mod_prefix .. "astronomic-science-pack-4", + requester_paste_multiplier = 1, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "biological-science-pack-1", + category = "space-manufacturing", + enabled = false, + energy_required = 30, + ingredients = { + { data_util.mod_prefix .. "biological-catalogue-1", 1 }, + { data_util.mod_prefix .. "vitamelange-extract", 20 }, + { data_util.mod_prefix .. "biological-insight", 1 }, + { data_util.mod_prefix .. "significant-data", 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 20}, + }, + results = { + { data_util.mod_prefix .. "biological-science-pack-1", 2}, + { data_util.mod_prefix .. "junk-data", 6}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 20}, + }, + icon_size = 64, + main_product = data_util.mod_prefix .. "biological-science-pack-1", + requester_paste_multiplier = 1, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "biological-science-pack-2", + category = "space-manufacturing", + enabled = false, + energy_required = 30, + ingredients = { + { data_util.mod_prefix .. "biological-catalogue-2", 1 }, + { data_util.mod_prefix .. "biological-science-pack-1",2 }, + { data_util.mod_prefix .. "bioscrubber", 4 }, + { data_util.mod_prefix .. "biological-insight", 1 }, + { data_util.mod_prefix .. "significant-data", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 20}, + }, + results = { + { data_util.mod_prefix .. "biological-science-pack-2", 4}, + { data_util.mod_prefix .. "junk-data", 6}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 20}, + }, + icon_size = 64, + main_product = data_util.mod_prefix .. "biological-science-pack-2", + requester_paste_multiplier = 1, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "biological-science-pack-3", + category = "space-manufacturing", + enabled = false, + energy_required = 30, + ingredients = { + { data_util.mod_prefix .. "biological-catalogue-3", 1 }, + { data_util.mod_prefix .. "biological-science-pack-2", 4 }, + { data_util.mod_prefix .. "vitalic-reagent", 4 }, + { data_util.mod_prefix .. "biological-insight", 1 }, + { data_util.mod_prefix .. "significant-data", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 20}, + }, + results = { + { data_util.mod_prefix .. "biological-science-pack-3", 6}, + { data_util.mod_prefix .. "junk-data", 6}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 20}, + }, + icon_size = 64, + main_product = data_util.mod_prefix .. "biological-science-pack-3", + requester_paste_multiplier = 1, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "biological-science-pack-4", + category = "space-manufacturing", + enabled = false, + energy_required = 30, + ingredients = { + { data_util.mod_prefix .. "biological-catalogue-4", 1 }, + { data_util.mod_prefix .. "biological-science-pack-3", 6 }, + { data_util.mod_prefix .. "vitalic-epoxy", 2 }, + { data_util.mod_prefix .. "core-fragment-".. data_util.mod_prefix .."vitamelange", 1 }, + { data_util.mod_prefix .. "biological-insight", 1 }, + { data_util.mod_prefix .. "significant-data", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 20}, + }, + results = { + { data_util.mod_prefix .. "biological-science-pack-4", 8}, + { data_util.mod_prefix .. "junk-data", 6}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 20}, + }, + icon_size = 64, + main_product = data_util.mod_prefix .. "biological-science-pack-4", + requester_paste_multiplier = 1, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "material-science-pack-1", + category = "space-manufacturing", + enabled = false, + energy_required = 30, + ingredients = { + { data_util.mod_prefix .. "material-catalogue-1", 1 }, + { data_util.mod_prefix .. "iridium-plate", 20 }, + { data_util.mod_prefix .. "material-insight", 1 }, + { data_util.mod_prefix .. "significant-data", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 20}, + }, + results = { + { data_util.mod_prefix .. "material-science-pack-1", 2}, + { data_util.mod_prefix .. "junk-data", 6}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 20}, + }, + icon_size = 64, + main_product = data_util.mod_prefix .. "material-science-pack-1", + requester_paste_multiplier = 1, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "material-science-pack-2", + category = "space-manufacturing", + enabled = false, + energy_required = 30, + ingredients = { + { data_util.mod_prefix .. "material-catalogue-2", 1 }, + { data_util.mod_prefix .. "material-science-pack-1", 2 }, + { data_util.mod_prefix .. "heavy-girder", 10 }, + { data_util.mod_prefix .. "material-insight", 1 }, + { data_util.mod_prefix .. "significant-data", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 20}, + }, + results = { + { data_util.mod_prefix .. "material-science-pack-2", 4}, + { data_util.mod_prefix .. "junk-data", 6}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 20}, + }, + icon_size = 64, + main_product = data_util.mod_prefix .. "material-science-pack-2", + requester_paste_multiplier = 1, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "material-science-pack-3", + category = "space-manufacturing", + enabled = false, + energy_required = 30, + ingredients = { + { data_util.mod_prefix .. "material-catalogue-3", 1 }, + { data_util.mod_prefix .. "material-science-pack-2", 4 }, + { data_util.mod_prefix .. "heavy-bearing", 6 }, + { data_util.mod_prefix .. "material-insight", 1 }, + { data_util.mod_prefix .. "significant-data", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 20}, + }, + results = { + { data_util.mod_prefix .. "material-science-pack-3", 6}, + { data_util.mod_prefix .. "junk-data", 6}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 20}, + }, + icon_size = 64, + main_product = data_util.mod_prefix .. "material-science-pack-3", + requester_paste_multiplier = 1, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "material-science-pack-4", + category = "space-manufacturing", + enabled = false, + energy_required = 30, + ingredients = { + { data_util.mod_prefix .. "material-catalogue-4", 1 }, + { data_util.mod_prefix .. "material-science-pack-3", 6 }, + { data_util.mod_prefix .. "heavy-composite", 2 }, + { data_util.mod_prefix .. "material-insight", 1 }, + { data_util.mod_prefix .. "significant-data", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 20}, + }, + results = { + { data_util.mod_prefix .. "material-science-pack-4", 8}, + { data_util.mod_prefix .. "junk-data", 6}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 20}, + }, + icon_size = 64, + main_product = data_util.mod_prefix .. "material-science-pack-4", + requester_paste_multiplier = 1, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "energy-science-pack-1", + category = "space-manufacturing", + enabled = false, + energy_required = 30, + ingredients = { + { data_util.mod_prefix .. "energy-catalogue-1", 1 }, + { data_util.mod_prefix .. "holmium-plate", 20 }, + { data_util.mod_prefix .. "energy-insight", 1 }, + { data_util.mod_prefix .. "significant-data", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 20}, + }, + results = { + { data_util.mod_prefix .. "energy-science-pack-1", 2}, + { data_util.mod_prefix .. "junk-data", 6}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 20}, + }, + icon_size = 64, + main_product = data_util.mod_prefix .. "energy-science-pack-1", + requester_paste_multiplier = 1, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "energy-science-pack-2", + category = "space-manufacturing", + enabled = false, + energy_required = 30, + ingredients = { + { data_util.mod_prefix .. "energy-catalogue-2", 1 }, + { data_util.mod_prefix .. "energy-science-pack-1", 2 }, + { data_util.mod_prefix .. "holmium-cable", 25 }, + { data_util.mod_prefix .. "energy-insight", 1 }, + { data_util.mod_prefix .. "significant-data", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 20}, + }, + results = { + { data_util.mod_prefix .. "energy-science-pack-2", 4}, + { data_util.mod_prefix .. "junk-data", 6}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 20}, + }, + icon_size = 64, + main_product = data_util.mod_prefix .. "energy-science-pack-2", + requester_paste_multiplier = 1, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "energy-science-pack-3", + category = "space-manufacturing", + enabled = false, + energy_required = 30, + ingredients = { + { data_util.mod_prefix .. "energy-catalogue-3", 1 }, + { data_util.mod_prefix .. "energy-science-pack-2", 4 }, + { data_util.mod_prefix .. "holmium-solenoid", 10 }, + { data_util.mod_prefix .. "energy-insight", 1 }, + { data_util.mod_prefix .. "significant-data", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 20}, + }, + results = { + { data_util.mod_prefix .. "energy-science-pack-3", 6}, + { data_util.mod_prefix .. "junk-data", 6}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 20}, + }, + icon_size = 64, + main_product = data_util.mod_prefix .. "energy-science-pack-3", + requester_paste_multiplier = 1, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "energy-science-pack-4", + category = "space-manufacturing", + enabled = false, + energy_required = 30, + ingredients = { + { data_util.mod_prefix .. "energy-catalogue-4", 1 }, + { data_util.mod_prefix .. "energy-science-pack-3", 6 }, + { data_util.mod_prefix .. "quantum-processor", 1 }, + { data_util.mod_prefix .. "energy-insight", 1 }, + { data_util.mod_prefix .. "significant-data", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 20}, + }, + results = { + { data_util.mod_prefix .. "energy-science-pack-4", 8}, + { data_util.mod_prefix .. "junk-data", 6}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 20}, + }, + icon_size = 64, + main_product = data_util.mod_prefix .. "energy-science-pack-4", + requester_paste_multiplier = 1, + always_show_made_in = true, + }, + --[[{ + type = "recipe", + name = data_util.mod_prefix .. "space-science-pack", + category = "space-manufacturing", + enabled = false, + energy_required = 20, + ingredients = { + { data_util.mod_prefix .. "significant-data", 100 }, + { data_util.mod_prefix .. "lifesupport-canister", 1 }, + { data_util.mod_prefix .. "space-mirror", 1 }, + { data_util.mod_prefix .. "space-platform-scaffold", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 100}, + }, + results = { + { data_util.mod_prefix .. "space-science-pack", 5}, + { data_util.mod_prefix .. "junk-data", 100}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 100}, + }, + icon = data.raw.tool[data_util.mod_prefix .. "space-science-pack"].icon, + icon_size = 64, + main_product = data_util.mod_prefix .. "space-science-pack", + requester_paste_multiplier = 1, + },]]-- + { + type = "recipe", + name = data_util.mod_prefix .. "deep-space-science-pack-1", + category = "space-manufacturing", + enabled = false, + energy_required = 60, + ingredients = { + { data_util.mod_prefix .. "significant-data", 1 }, + { data_util.mod_prefix .. "deep-catalogue-1", 1 }, + { name = data_util.mod_prefix .. "naquium-plate", amount = 10}, + { type = "fluid", name = data_util.mod_prefix .. "neural-gel-2", amount = 5}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 100}, + }, + results = { + { data_util.mod_prefix .. "deep-space-science-pack-1", 2}, + { data_util.mod_prefix .. "junk-data", 4}, + { data_util.mod_prefix .. "broken-data", 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 100}, + }, + icon = data.raw.tool[data_util.mod_prefix .. "deep-space-science-pack-1"].icon, + icon_size = 64, + main_product = data_util.mod_prefix .. "deep-space-science-pack-1", + requester_paste_multiplier = 1, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "deep-space-science-pack-2", + category = "space-manufacturing", + enabled = false, + energy_required = 120, + ingredients = { + { data_util.mod_prefix .. "deep-space-science-pack-1", 2}, + { data_util.mod_prefix .. "significant-data", 1 }, + { data_util.mod_prefix .. "deep-catalogue-2", 1 }, + { name = data_util.mod_prefix .. "naquium-cube", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "neural-gel-2", amount = 5}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 200}, + }, + results = { + { data_util.mod_prefix .. "deep-space-science-pack-2", 4}, + { data_util.mod_prefix .. "junk-data", 4}, + { data_util.mod_prefix .. "broken-data", 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 200}, + }, + icon = data.raw.tool[data_util.mod_prefix .. "deep-space-science-pack-2"].icon, + icon_size = 64, + main_product = data_util.mod_prefix .. "deep-space-science-pack-2", + requester_paste_multiplier = 1, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "deep-space-science-pack-3", + category = "space-manufacturing", + enabled = false, + energy_required = 180, + ingredients = { + { data_util.mod_prefix .. "deep-space-science-pack-2", 4}, + { data_util.mod_prefix .. "significant-data", 1 }, + { data_util.mod_prefix .. "deep-catalogue-3", 1 }, + { name = data_util.mod_prefix .. "naquium-tessaract", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "neural-gel-2", amount = 5}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 200}, + }, + results = { + { data_util.mod_prefix .. "deep-space-science-pack-3", 6}, + { data_util.mod_prefix .. "junk-data", 4}, + { data_util.mod_prefix .. "broken-data", 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 200}, + }, + icon = data.raw.tool[data_util.mod_prefix .. "deep-space-science-pack-3"].icon, + icon_size = 64, + main_product = data_util.mod_prefix .. "deep-space-science-pack-3", + requester_paste_multiplier = 1, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "deep-space-science-pack-4", + category = "space-manufacturing", + enabled = false, + energy_required = 240, + ingredients = { + { data_util.mod_prefix .. "deep-space-science-pack-3", 6}, + { data_util.mod_prefix .. "significant-data", 1 }, + { data_util.mod_prefix .. "deep-catalogue-4", 1 }, + { name = data_util.mod_prefix .. "naquium-processor", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "neural-gel-2", amount = 5}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 200}, + }, + results = { + { data_util.mod_prefix .. "deep-space-science-pack-4", 8}, + { data_util.mod_prefix .. "junk-data", 4}, + { data_util.mod_prefix .. "broken-data", 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 200}, + }, + icon = data.raw.tool[data_util.mod_prefix .. "deep-space-science-pack-4"].icon, + icon_size = 64, + main_product = data_util.mod_prefix .. "deep-space-science-pack-4", + requester_paste_multiplier = 1, + always_show_made_in = true, + }, + +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/spaceship.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/spaceship.lua new file mode 100644 index 0000000..0c96ce9 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/spaceship.lua @@ -0,0 +1,242 @@ +local data_util = require("data_util") + +data:extend({ + { + type = "recipe", + name = data_util.mod_prefix .. "spaceship-console", + energy_required = 30, + category = "crafting", + ingredients = + { + {data_util.mod_prefix .. "aeroframe-pole", 20}, + {"glass", 20}, + {"low-density-structure", 20}, + {"processing-unit", 200}, + {data_util.mod_prefix .. "astronomic-catalogue-3", 1}, + }, + result = data_util.mod_prefix .. "spaceship-console", + result_count = 1, + enabled = false, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "spaceship-floor", + energy_required = 10, + category = "crafting", + ingredients = + { + {data_util.mod_prefix .. "aeroframe-bulkhead", 4}, + {data_util.mod_prefix .. "heat-shielding", 4} + }, + result = data_util.mod_prefix .. "spaceship-floor", + result_count = 1, + enabled = false, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "spaceship-wall", + energy_required = 10, + category = "crafting", + ingredients = + { + {data_util.mod_prefix .. "aeroframe-bulkhead", 2}, + {"glass", 8}, + {"low-density-structure", 4}, + {data_util.mod_prefix .. "heat-shielding", 4} + }, + result = data_util.mod_prefix .. "spaceship-wall", + result_count = 1, + enabled = false, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "spaceship-gate", + energy_required = 10, + category = "crafting", + ingredients = + { + {data_util.mod_prefix .. "spaceship-wall", 1}, + {"electric-engine-unit", 6}, + {data_util.mod_prefix .. "aeroframe-bulkhead", 1}, + {data_util.mod_prefix .. "heat-shielding", 1} + -- TODO: add forcefield projector here + }, + result = data_util.mod_prefix .. "spaceship-gate", + result_count = 1, + enabled = false, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "spaceship-rocket-engine", + energy_required = 20, + category = "crafting", + ingredients = + { + {data_util.mod_prefix .. "aeroframe-scaffold", 4}, + {"steel-plate", 20}, + {data_util.mod_prefix .. "heat-shielding", 20}, + {data_util.mod_prefix .. "space-pipe", 20}, + {"electric-engine-unit", 10}, + }, + result = data_util.mod_prefix .. "spaceship-rocket-engine", + result_count = 1, + enabled = false, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "spaceship-rocket-engine-burn", + icon = "__space-exploration-graphics__/graphics/icons/spaceship-rocket-engine.png", + icon_size = 64, + order = "a", + subgroup = "spaceship-process", + energy_required = 0.1, + category = "spaceship-rocket-engine", + ingredients = + { + {type="fluid", name=data_util.mod_prefix .. "liquid-rocket-fuel", amount=5}, + }, + results = {}, + flags = {"hidden"}, + hidden = true, + enabled = true, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "spaceship-rocket-booster-tank", + energy_required = 10, + category = "crafting", + ingredients = + { + {data_util.mod_prefix .. "aeroframe-scaffold", 4}, + {"steel-plate", 10}, + {"storage-tank", 10}, + {data_util.mod_prefix .. "heat-shielding", 10}, + {data_util.mod_prefix .. "space-pipe", 4}, + {"electric-engine-unit", 4}, + }, + result = data_util.mod_prefix .. "spaceship-rocket-booster-tank", + result_count = 1, + enabled = false, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "spaceship-ion-engine", + energy_required = 30, + category = "crafting", + ingredients = + { + {data_util.mod_prefix .. "spaceship-rocket-engine", 1}, + {"low-density-structure", 40}, + {data_util.mod_prefix .. "holmium-cable", 40}, + {data_util.mod_prefix .. "holmium-solenoid", 8}, + }, + result = data_util.mod_prefix .. "spaceship-ion-engine", + result_count = 1, + enabled = false, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "spaceship-ion-engine-burn", + icon = "__space-exploration-graphics__/graphics/icons/spaceship-ion-engine.png", + icon_size = 64, + order = "a", + subgroup = "spaceship-process", + energy_required = 0.5, + category = "spaceship-ion-engine", + ingredients = + { + {type="fluid", name=data_util.mod_prefix .. "ion-stream", amount=1}, + }, + results = {}, + flags = {"hidden"}, + hidden = true, + enabled = true, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "spaceship-ion-booster-tank", + energy_required = 30, + category = "crafting", + ingredients = + { + {"storage-tank", 1}, + {"electric-engine-unit", 4}, + {data_util.mod_prefix .. "holmium-solenoid", 8}, + {data_util.mod_prefix .. "beryllium-plate", 10}, + {data_util.mod_prefix .. "holmium-cable", 40}, + }, + result = data_util.mod_prefix .. "spaceship-ion-booster-tank", + result_count = 1, + enabled = false, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "spaceship-antimatter-engine", + energy_required = 30, + category = "crafting", + ingredients = + { + {data_util.mod_prefix .. "lattice-pressure-vessel", 10}, + {data_util.mod_prefix .. "nanomaterial", 10}, + {data_util.mod_prefix .. "spaceship-ion-engine", 1}, + {data_util.mod_prefix .. "heavy-assembly", 10}, + {data_util.mod_prefix .. "heat-shielding", 100}, + {data_util.mod_prefix .. "superconductive-cable", 100}, + {data_util.mod_prefix .. "naquium-cube", 4}, + }, + result = data_util.mod_prefix .. "spaceship-antimatter-engine", + result_count = 1, + enabled = false, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "spaceship-antimatter-engine-burn", + icon = "__space-exploration-graphics__/graphics/icons/spaceship-antimatter-engine.png", + icon_size = 64, + order = "a", + subgroup = "spaceship-process", + energy_required = 0.5, + category = "spaceship-antimatter-engine", + ingredients = + { + {type="fluid", name=data_util.mod_prefix .. "antimatter-stream", amount=1}, + -- 10x energy density, 5 burn would be the same thrust, 25 is 5x faster + }, + results = {}, + flags = {"hidden"}, + hidden = true, + enabled = true, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "spaceship-antimatter-booster-tank", + energy_required = 20, + category = "crafting", + ingredients = + { + {data_util.mod_prefix .. "lattice-pressure-vessel", 10}, + {data_util.mod_prefix .. "nanomaterial", 10}, + {data_util.mod_prefix .. "spaceship-rocket-booster-tank", 1}, + {"low-density-structure", 50}, + {data_util.mod_prefix .. "heat-shielding", 50}, + {data_util.mod_prefix .. "superconductive-cable", 100}, + {data_util.mod_prefix .. "naquium-cube", 1}, + }, + result = data_util.mod_prefix .. "spaceship-antimatter-booster-tank", + result_count = 1, + enabled = false, + always_show_made_in = false, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/spectrometry-facility.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/spectrometry-facility.lua new file mode 100644 index 0000000..abaf53e --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/spectrometry-facility.lua @@ -0,0 +1,36 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +make_recipe({ + name = data_util.mod_prefix .. "bio-spectral-data", + ingredients = { + { name = data_util.mod_prefix .. "specimen", amount = 1}, + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + }, + results = { + { name = data_util.mod_prefix .. "bio-spectral-data", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-bio-sludge", amount = 10}, + }, + energy_required = 20, + main_product = data_util.mod_prefix .. "bio-spectral-data", + category = "space-spectrometry", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "ion-spectrometry-data", + ingredients = { + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "ion-stream", amount = 40}, + }, + results = { + { name = data_util.mod_prefix .. "ion-spectrometry-data", amount_min = 1, amount_max = 1, probability = 0.5}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.49}, + }, + energy_required = 20, + main_product = data_util.mod_prefix .. "ion-spectrometry-data", + category = "space-spectrometry", + enabled = false, + always_show_made_in = true, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/structures.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/structures.lua new file mode 100644 index 0000000..4febdc9 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/structures.lua @@ -0,0 +1,1026 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +data:extend({ + { + type = "recipe", + name = data_util.mod_prefix .. "fuel-refinery", + result = data_util.mod_prefix .. "fuel-refinery", + enabled = false, + energy_required = 10, + ingredients = { + { "glass", 20 }, + { "steel-plate", 20 }, + { "stone-brick", 20 }, + { "pipe", 20 }, + { "iron-gear-wheel", 20 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "fluid-burner-generator", + result = data_util.mod_prefix .. "fluid-burner-generator", + enabled = false, + energy_required = 5, + ingredients = { + { "steel-plate", 10 }, + { "copper-plate", 30 }, + { "pipe", 30 }, + { "iron-gear-wheel", 20 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "antimatter-reactor", + result = data_util.mod_prefix .. "antimatter-reactor", + enabled = false, + energy_required = 30, + ingredients = { + { data_util.mod_prefix .. "energy-catalogue-4", 5 }, + { data_util.mod_prefix .. "heat-shielding", 500 }, + { "low-density-structure", 500 }, + { "processing-unit", 500 }, + { data_util.mod_prefix .. "superconductive-cable", 500 }, + { name = data_util.mod_prefix .. "naquium-cube", amount = 50}, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "naquium-heat-pipe", + result = data_util.mod_prefix .. "naquium-heat-pipe", + enabled = false, + energy_required = 5, + ingredients = { + { data_util.mod_prefix .. "superconductive-cable", 1 }, + { name = data_util.mod_prefix .. "naquium-plate", amount = 4}, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "dimensional-anchor", + result = data_util.mod_prefix .. "dimensional-anchor", + enabled = false, + energy_required = 30, + ingredients = { + { data_util.mod_prefix .. "deep-catalogue-3", 4 }, + { data_util.mod_prefix .. "heavy-assembly", 100 }, + { data_util.mod_prefix .. "lattice-pressure-vessel", 100 }, + { data_util.mod_prefix .. "superconductive-cable", 500 }, + { name = data_util.mod_prefix .. "naquium-tessaract", amount = 8}, + {data_util.mod_prefix .. "quantum-processor", 8}, + }, + requester_paste_multiplier = 1, + category = "space-manufacturing", + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "meteor-point-defence", + result = data_util.mod_prefix .. "meteor-point-defence", + enabled = false, + energy_required = 30, + ingredients = { + { "electronic-circuit", 40 }, + { "steel-plate", 40 }, + { "concrete", 40 }, + { "glass", 20 }, + { "iron-gear-wheel", 20 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "meteor-point-defence-ammo", + result = data_util.mod_prefix .. "meteor-point-defence-ammo", + enabled = false, + energy_required = 10, + ingredients = { + { "steel-plate", 8 }, + { "coal", 4 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "meteor-defence", + result = data_util.mod_prefix .. "meteor-defence", + enabled = false, + energy_required = 30, + ingredients = { + { "processing-unit", 100 }, + { "copper-cable", 100 }, + { "steel-plate", 100 }, + { "concrete", 100 }, + { "glass", 50 }, + { "battery", 50 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "meteor-defence-ammo", + result = data_util.mod_prefix .. "meteor-defence-ammo", + enabled = false, + energy_required = 10, + ingredients = { + { "steel-plate", 10 }, + { "electronic-circuit", 10 }, + { "battery", 10 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "pulveriser", + category = "crafting", + enabled = false, + energy_required = 30, + ingredients = { + {"steel-plate", 15}, + {"iron-plate", 15}, + {"pipe", 15}, + {"concrete", 15}, + }, + results= + { + {name = data_util.mod_prefix .. "pulveriser", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/pulveriser.png", + icon_size = 64, + order = "g-z[pulveriser]", + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "addon-power-pole", + category = "crafting", + enabled = false, + energy_required = 2, + ingredients = { + {data_util.mod_prefix .. "aeroframe-pole", 4}, + {data_util.mod_prefix .. "holmium-cable", 8}, + }, + results= + { + {name = data_util.mod_prefix .. "addon-power-pole", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/addon-power-pole.png", + icon_size = 64, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "pylon", + category = "crafting", + enabled = false, + energy_required = 10, + ingredients = { + {data_util.mod_prefix .. "beryllium-plate", 8}, + {data_util.mod_prefix .. "aeroframe-pole", 1}, + {data_util.mod_prefix .. "holmium-cable", 16}, + {"concrete", 16}, + }, + results= + { + {name = data_util.mod_prefix .. "pylon", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/pylon.png", + icon_size = 64, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "pylon-substation", + category = "crafting", + enabled = false, + energy_required = 10, + ingredients = { + {data_util.mod_prefix .. "pylon", 1}, + {data_util.mod_prefix .. "holmium-solenoid", 4}, + {"processing-unit", 16}, + {"battery", 16}, + }, + results= + { + {name = data_util.mod_prefix .. "pylon-substation", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/pylon-substation.png", + icon_size = 64, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "pylon-construction", + category = "crafting", + enabled = false, + energy_required = 10, + ingredients = { + {data_util.mod_prefix .. "pylon", 1}, + {data_util.mod_prefix .. "aeroframe-scaffold", 4}, + {data_util.mod_prefix .. "holmium-solenoid", 4}, + {data_util.mod_prefix .. "heavy-girder", 4}, + {"processing-unit", 16}, + {"battery", 16}, + }, + results= + { + {name = data_util.mod_prefix .. "pylon-construction", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/pylon-construction.png", + icon_size = 64, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "pylon-construction-radar", + category = "crafting", + enabled = false, + energy_required = 10, + ingredients = { + {"radar", 1}, + {data_util.mod_prefix .. "pylon-construction", 1}, + {data_util.mod_prefix .. "aeroframe-bulkhead", 4}, + {data_util.mod_prefix .. "heavy-bearing", 4}, + {data_util.mod_prefix .. "quantum-processor", 4}, + {"battery", 16}, + }, + results= + { + {name = data_util.mod_prefix .. "pylon-construction-radar", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/pylon-construction-radar.png", + icon_size = 64, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-assembling-machine", + category = "crafting", + enabled = false, + energy_required = 10, + ingredients = { + {data_util.mod_prefix .. "heat-shielding", 4}, + {"low-density-structure", 8}, + {"electric-engine-unit", 8}, + {"processing-unit", 4}, + }, + results= + { + {name = data_util.mod_prefix .. "space-assembling-machine", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/assembling-machine.png", + icon_size = 64, + enabled = false, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-astrometrics-laboratory", + category = "space-manufacturing", + enabled = false, + energy_required = 10, + ingredients = { + {data_util.mod_prefix .. "space-assembling-machine", 1}, + {"low-density-structure", 40}, + {"electric-engine-unit", 8}, + {"advanced-circuit", 40}, + {"processing-unit", 20}, + }, + results= + { + {name = data_util.mod_prefix .. "space-astrometrics-laboratory", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/astrometrics-laboratory.png", + icon_size = 64, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-biochemical-laboratory", + category = "space-manufacturing", + enabled = false, + energy_required = 10, + ingredients = { + {"chemical-plant", 3}, + {"low-density-structure", 60}, + {"glass", 100}, + {"pump", 4}, + {"electric-engine-unit", 6}, + }, + results= + { + {name = data_util.mod_prefix .. "space-biochemical-laboratory", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/biochemical-laboratory.png", + icon_size = 64, + requester_paste_multiplier = 1, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-decontamination-facility", + category = "space-crafting", + enabled = false, + energy_required = 10, + ingredients = { + {"chemical-plant", 1}, + {"low-density-structure", 40}, + {data_util.mod_prefix .. "space-pipe", 10}, + {"electric-engine-unit", 6}, + {data_util.mod_prefix .. "vulcanite-block", 1}, + }, + results= + { + {name = data_util.mod_prefix .. "space-decontamination-facility", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/decontamination-facility.png", + icon_size = 64, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-electromagnetics-laboratory", + category = "space-manufacturing", + enabled = false, + energy_required = 10, + ingredients = { + {data_util.mod_prefix .. "space-assembling-machine", 2}, + {"low-density-structure", 60}, + {"accumulator", 20}, + {"processing-unit", 20}, + }, + results= + { + {name = data_util.mod_prefix .. "space-electromagnetics-laboratory", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/electromagnetics-laboratory.png", + icon_size = 64, + requester_paste_multiplier = 1, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-genetics-laboratory", + category = "space-manufacturing", + enabled = false, + energy_required = 10, + ingredients = { + {data_util.mod_prefix .. "space-assembling-machine", 1}, + {"low-density-structure", 80}, + {"glass", 80}, + {"electric-engine-unit", 20}, + {"processing-unit", 20}, + {data_util.mod_prefix .. "nutrient-vat", 20}, + }, + results= + { + {name = data_util.mod_prefix .. "space-genetics-laboratory", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/genetics-laboratory.png", + icon_size = 64, + requester_paste_multiplier = 1, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-gravimetrics-laboratory", + category = "space-manufacturing", + enabled = false, + energy_required = 10, + ingredients = { + {data_util.mod_prefix .. "space-assembling-machine", 1}, + {"low-density-structure", 40}, + {"electric-engine-unit", 8}, + {data_util.mod_prefix .. "aeroframe-pole", 80}, + {"processing-unit", 20}, + }, + results= + { + {name = data_util.mod_prefix .. "space-gravimetrics-laboratory", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/gravimetrics-laboratory.png", + icon_size = 64, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-growth-facility", + category = "space-manufacturing", + enabled = false, + energy_required = 10, + ingredients = { + {data_util.mod_prefix .. "space-assembling-machine", 1}, + {"low-density-structure", 40}, + {"pump", 4}, + {"small-lamp", 100}, + {"glass", 400}, + }, + results= + { + {name = data_util.mod_prefix .. "space-growth-facility", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/growth-facility.png", + icon_size = 64, + requester_paste_multiplier = 1, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-hypercooler", + category = "space-manufacturing", + enabled = false, + energy_required = 10, + ingredients = { + {"storage-tank", 1}, + {"pump", 4}, + {"electric-engine-unit", 4}, + {"low-density-structure", 20}, + {data_util.mod_prefix .. "space-pipe", 10}, + }, + results= + { + {name = data_util.mod_prefix .. "space-hypercooler", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/hypercooler.png", + icon_size = 64, + requester_paste_multiplier = 1, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-laser-laboratory", + category = "space-manufacturing", + enabled = false, + energy_required = 10, + ingredients = { + {data_util.mod_prefix .. "space-assembling-machine", 1}, + {"low-density-structure", 60}, + {"glass", 80}, + {"accumulator", 20}, + {"processing-unit", 20}, + }, + results= + { + {name = data_util.mod_prefix .. "space-laser-laboratory", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/laser-laboratory.png", + icon_size = 64, + requester_paste_multiplier = 1, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "lifesupport-facility", + category = "crafting", + enabled = false, + energy_required = 10, + ingredients = { + {"assembling-machine-2", 1}, + {"low-density-structure", 40}, + {"pump", 1}, + {"pipe", 40}, + {"electric-engine-unit", 6}, + }, + results= + { + {name = data_util.mod_prefix .. "lifesupport-facility", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/lifesupport-facility.png", + icon_size = 64, + enabled = false, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-manufactory", + category = "space-crafting", + enabled = false, + energy_required = 10, + ingredients = { + {data_util.mod_prefix .. "space-assembling-machine", 4}, + {"fast-inserter", 8}, + {data_util.mod_prefix .. "heat-shielding", 8}, + {"electric-engine-unit", 32}, + {"low-density-structure", 80}, + {type = "fluid", name = data_util.mod_prefix .. "space-water", amount = 8}, + }, + results= + { + {name = data_util.mod_prefix .. "space-manufactory", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/manufactory.png", + icon_size = 64, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-mechanical-laboratory", + category = "space-manufacturing", + enabled = false, + energy_required = 10, + ingredients = { + {data_util.mod_prefix .. "space-assembling-machine", 4}, + {"low-density-structure", 60}, + {"steel-plate", 100}, + {"concrete", 100}, + {"electric-engine-unit", 40}, + {"gun-turret", 10}, + }, + results= + { + {name = data_util.mod_prefix .. "space-mechanical-laboratory", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/mechanical-laboratory.png", + icon_size = 64, + requester_paste_multiplier = 1, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-particle-accelerator", + category = "space-manufacturing", + enabled = false, + energy_required = 10, + ingredients = { + {data_util.mod_prefix .. "space-assembling-machine", 1}, + {"low-density-structure", 60}, + {"laser-turret", 6}, + {"accumulator", 20}, + {"processing-unit", 20}, + }, + results= + { + {name = data_util.mod_prefix .. "space-particle-accelerator", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/particle-accelerator.png", + icon_size = 64, + requester_paste_multiplier = 1, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-particle-collider", + category = "space-manufacturing", + enabled = false, + energy_required = 10, + ingredients = { + {data_util.mod_prefix .. "space-assembling-machine", 1}, + {"low-density-structure", 60}, + {"laser-turret", 6}, + {"accumulator", 20}, + {data_util.mod_prefix .. "heat-shielding", 20}, + {data_util.mod_prefix .. "holmium-cable", 100}, + }, + results= + { + {name = data_util.mod_prefix .. "space-particle-collider", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/particle-collider.png", + icon_size = 64, + requester_paste_multiplier = 1, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-plasma-generator", + category = "space-manufacturing", + enabled = false, + energy_required = 10, + ingredients = { + {"chemical-plant", 1}, + {"low-density-structure", 60}, + {"electric-furnace", 4}, + {data_util.mod_prefix .. "heat-shielding", 20}, + }, + results= + { + {name = data_util.mod_prefix .. "space-plasma-generator", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/plasma-generator.png", + icon_size = 64, + requester_paste_multiplier = 1, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-radiation-laboratory", + category = "space-manufacturing", + enabled = false, + energy_required = 10, + ingredients = { + {"uranium-fuel-cell", 4}, + {"chemical-plant", 4}, + {"low-density-structure", 60}, + {data_util.mod_prefix .. "heat-shielding", 20}, + {"steel-plate", 100}, + {"glass", 80}, + }, + results= + { + {name = data_util.mod_prefix .. "space-radiation-laboratory", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/radiation-laboratory.png", + icon_size = 64, + requester_paste_multiplier = 1, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-radiator", + category = "space-manufacturing", + enabled = false, + energy_required = 10, + ingredients = { + {"pump", 4}, + {"electric-engine-unit", 4}, + {"steel-plate", 20}, + {data_util.mod_prefix .. "space-pipe", 4}, + {"copper-cable", 200}, + }, + results= + { + {name = data_util.mod_prefix .. "space-radiator", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/radiator.png", + icon_size = 64, + requester_paste_multiplier = 1, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-radiator-2", + category = "space-manufacturing", + enabled = false, + energy_required = 10, + ingredients = { + {data_util.mod_prefix .. "space-radiator", 1}, + {data_util.mod_prefix .. "cryonite-rod", 16}, + {data_util.mod_prefix .. "beryllium-plate", 16}, + }, + results= + { + {name = data_util.mod_prefix .. "space-radiator-2", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/radiator-blue.png", + icon_size = 64, + requester_paste_multiplier = 1, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "recycling-facility", + category = "crafting", + enabled = false, + energy_required = 10, + ingredients = { + {"steel-plate", 20}, + {"advanced-circuit", 10}, + {"electric-engine-unit", 10}, + {"concrete", 20}, + {data_util.mod_prefix .. "heat-shielding", 10}, + }, + results= + { + {name = data_util.mod_prefix .. "recycling-facility", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/recycling-facility.png", + icon_size = 64, + enabled = false, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-material-fabricator", + category = "space-manufacturing", + enabled = false, + energy_required = 10, + ingredients = { + {data_util.mod_prefix .. "space-particle-collider", 1}, + {data_util.mod_prefix .. "space-manufactory", 1}, + {data_util.mod_prefix .. "space-thermodynamics-laboratory", 1}, + {"speed-module-6", 5}, + {"effectivity-module-6", 5}, + }, + results= + { + {name = data_util.mod_prefix .. "space-material-fabricator", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/material-fabricator.png", + icon_size = 64, + requester_paste_multiplier = 1, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-supercomputer-1", + category = "space-manufacturing", + enabled = false, + energy_required = 10, + ingredients = { + {data_util.mod_prefix .. "space-assembling-machine", 1}, + {"low-density-structure", 40}, + {"processing-unit", 100}, + }, + results= + { + {name = data_util.mod_prefix .. "space-supercomputer-1", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/supercomputer-1.png", + icon_size = 64, + requester_paste_multiplier = 1, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-supercomputer-2", + category = "space-manufacturing", + enabled = false, + energy_required = 20, + ingredients = { + {data_util.mod_prefix .. "space-supercomputer-1", 1}, + {"processing-unit", 500}, + {data_util.mod_prefix .. "quantum-processor", 50}, + }, + results= + { + {name = data_util.mod_prefix .. "space-supercomputer-2", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/supercomputer-2.png", + icon_size = 64, + requester_paste_multiplier = 2, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-supercomputer-3", + category = "space-manufacturing", + enabled = false, + energy_required = 30, + ingredients = { + {data_util.mod_prefix .. "space-supercomputer-2", 1}, + {"processing-unit", 1000}, + {data_util.mod_prefix .. "superconductive-cable", 100}, + {type = "fluid", name = data_util.mod_prefix .. "neural-gel-2", amount = 1000}, + {data_util.mod_prefix .. "bioelectrics-data", 100}, + }, + results= + { + {name = data_util.mod_prefix .. "space-supercomputer-3", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/supercomputer-3.png", + icon_size = 64, + requester_paste_multiplier = 3, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-supercomputer-4", + category = "space-manufacturing", + enabled = false, + energy_required = 40, + ingredients = { + {data_util.mod_prefix .. "space-supercomputer-3", 1}, + {type = "fluid", name = data_util.mod_prefix .. "neural-gel-2", amount = 1000}, + {data_util.mod_prefix .. "naquium-processor", 42}, + }, + results= + { + {name = data_util.mod_prefix .. "space-supercomputer-4", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/supercomputer-4.png", + icon_size = 64, + requester_paste_multiplier = 4, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-telescope", + category = "space-manufacturing", + enabled = false, + energy_required = 10, + ingredients = { + {data_util.mod_prefix .. "space-assembling-machine", 1}, + {data_util.mod_prefix .. "space-mirror", 2}, + {"low-density-structure", 40}, + {"glass", 40}, + }, + results= + { + {name = data_util.mod_prefix .. "space-telescope", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/telescope.png", + icon_size = 64, + requester_paste_multiplier = 1, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-telescope-radio", + category = "space-manufacturing", + enabled = false, + energy_required = 10, + ingredients = { + {data_util.mod_prefix .. "space-assembling-machine", 1}, + {"radar", 10}, + {data_util.mod_prefix .. "space-mirror", 10}, + {"low-density-structure", 120}, + {data_util.mod_prefix .. "aeroframe-scaffold", 120}, + }, + results= + { + {name = data_util.mod_prefix .. "space-telescope-radio", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/telescope-radio.png", + icon_size = 64, + requester_paste_multiplier = 1, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-telescope-microwave", + category = "space-manufacturing", + enabled = false, + energy_required = 10, + ingredients = { + {data_util.mod_prefix .. "space-assembling-machine", 1}, + {data_util.mod_prefix .. "space-mirror", 6}, + {"low-density-structure", 80}, + {"glass", 80}, + {data_util.mod_prefix .. "aeroframe-pole", 120}, + }, + results= + { + {name = data_util.mod_prefix .. "space-telescope-microwave", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/telescope-microwave.png", + icon_size = 64, + requester_paste_multiplier = 1, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-telescope-xray", + category = "space-manufacturing", + enabled = false, + energy_required = 10, + ingredients = { + {data_util.mod_prefix .. "space-assembling-machine", 1}, + {data_util.mod_prefix .. "space-mirror", 6}, + {data_util.mod_prefix .. "heat-shielding", 6}, + {"low-density-structure", 60}, + {data_util.mod_prefix .. "aeroframe-pole", 60}, + }, + results= + { + {name = data_util.mod_prefix .. "space-telescope-xray", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/telescope-xray.png", + icon_size = 64, + requester_paste_multiplier = 1, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-telescope-gammaray", + category = "space-manufacturing", + enabled = false, + energy_required = 10, + ingredients = { + {data_util.mod_prefix .. "space-assembling-machine", 1}, + {data_util.mod_prefix .. "heat-shielding", 6}, + {data_util.mod_prefix .. "space-mirror", 24}, + {"low-density-structure", 60}, + {data_util.mod_prefix .. "aeroframe-scaffold", 60}, + }, + results= + { + {name = data_util.mod_prefix .. "space-telescope-gammaray", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/telescope-gammaray.png", + icon_size = 64, + requester_paste_multiplier = 1, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "space-thermodynamics-laboratory", + category = "space-manufacturing", + enabled = false, + energy_required = 10, + ingredients = { + {data_util.mod_prefix .. "space-assembling-machine", 1}, + {"chemical-plant", 1}, + {"electric-furnace", 1}, + {"low-density-structure", 60}, + {data_util.mod_prefix .. "heat-shielding", 60}, + {"steel-plate", 100}, + {"storage-tank", 8}, + }, + results= + { + {name = data_util.mod_prefix .. "space-thermodynamics-laboratory", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/thermodynamics-laboratory.png", + icon_size = 64, + requester_paste_multiplier = 1, + enabled = false, + always_show_made_in = true, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "supercharger", + category = "crafting", + enabled = false, + energy_required = 10, + ingredients = { + {data_util.mod_prefix .. "aeroframe-scaffold", 4}, + {data_util.mod_prefix .. "heavy-girder", 4}, + {data_util.mod_prefix .. "holmium-solenoid", 16}, + {data_util.mod_prefix .. "holmium-cable", 16}, + {"battery", 16}, + }, + results= + { + {name = data_util.mod_prefix .. "supercharger", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/supercharger.png", + icon_size = 64, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "wide-beacon", + enabled = false, + energy_required = 10, + ingredients = { + {"beacon", 1}, + {data_util.mod_prefix .. "energy-catalogue-1", 1}, + {data_util.mod_prefix .. "holmium-solenoid", 2}, + {"low-density-structure", 60}, + {"processing-unit", 60}, + {data_util.mod_prefix .. "holmium-cable", 200}, + }, + results= + { + {name = data_util.mod_prefix .. "wide-beacon", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/wide-beacon.png", + icon_size = 64, + enabled = false, + always_show_made_in = false, + }, + { + type = "recipe", + name = data_util.mod_prefix .. "wide-beacon-2", + enabled = false, + energy_required = 10, + ingredients = { + {data_util.mod_prefix .. "wide-beacon", 1}, + {data_util.mod_prefix .. "deep-catalogue-1", 1}, + {data_util.mod_prefix .. "superconductive-cable", 10}, + {data_util.mod_prefix .. "dynamic-emitter", 10}, + {data_util.mod_prefix .. "naquium-tessaract", 10}, + }, + results= + { + {name = data_util.mod_prefix .. "wide-beacon-2", amount=1} + }, + icon = "__space-exploration-graphics__/graphics/icons/wide-beacon-2.png", + icon_size = 64, + enabled = false, + always_show_made_in = false, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/supercomputing.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/supercomputing.lua new file mode 100644 index 0000000..25cf737 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/supercomputing.lua @@ -0,0 +1,1325 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +-- formating (junk) +make_recipe({ + name = data_util.mod_prefix .. "formatting-1", + ingredients = { + { name = data_util.mod_prefix .. "junk-data", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-warm", amount = 1}, + }, + results = { + { name = data_util.mod_prefix .. "empty-data", amount_min = 1, amount_max = 1, probability = 0.7 }, + { name = data_util.mod_prefix .. "broken-data", amount_min = 1, amount_max = 1, probability = 0.29 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 1}, + }, + icons = { + { icon = "__space-exploration-graphics__/graphics/icons/data/junk.png", scale = 0.85, shift = {2, -4}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "space-supercomputer-1"].icon, scale = 0.5, shift = {-24, 24}, icon_size = 64 }, + }, + energy_required = 1.5, + subgroup = "data-generic", + category = "space-supercomputing-1", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "formatting-2", + ingredients = { + { name = data_util.mod_prefix .. "junk-data", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 1}, + }, + results = { + { name = data_util.mod_prefix .. "empty-data", amount_min = 1, amount_max = 1, probability = 0.8 }, + { name = data_util.mod_prefix .. "broken-data", amount_min = 1, amount_max = 1, probability = 0.19 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 1}, + }, + icons = { + { icon = "__space-exploration-graphics__/graphics/icons/data/junk.png", scale = 0.85, shift = {2, -4}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "space-supercomputer-2"].icon, scale = 0.5, shift = {-24, 24}, icon_size = 64 }, + }, + energy_required = 4, + subgroup = "data-generic", + category = "space-supercomputing-2", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "formatting-3", + ingredients = { + { name = data_util.mod_prefix .. "junk-data", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 1}, + }, + results = { + { name = data_util.mod_prefix .. "empty-data", amount_min = 1, amount_max = 1, probability = 0.9 }, + { name = data_util.mod_prefix .. "broken-data", amount_min = 1, amount_max = 1, probability = 0.09 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 1}, + }, + icons = { + { icon = "__space-exploration-graphics__/graphics/icons/data/junk.png", scale = 0.85, shift = {2, -4}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "space-supercomputer-3"].icon, scale = 0.5, shift = {-24, 24}, icon_size = 64 }, + }, + energy_required = 10, + subgroup = "data-generic", + category = "space-supercomputing-3", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "formatting-4", + ingredients = { + { name = data_util.mod_prefix .. "junk-data", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 1}, + { name = data_util.mod_prefix .. "cryonite-rod", amount = 1}, + }, + results = { + { name = data_util.mod_prefix .. "empty-data", amount_min = 1, amount_max = 1, probability = 0.95 }, + { name = data_util.mod_prefix .. "broken-data", amount_min = 1, amount_max = 1, probability = 0.05 }, + { name = data_util.mod_prefix .. "cryonite-rod", amount_min = 1, amount_max = 1, probability = 0.9}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 1}, + }, + icons = { + { icon = "__space-exploration-graphics__/graphics/icons/data/junk.png", scale = 0.85, shift = {2, -4}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "space-supercomputer-4"].icon, scale = 0.5, shift = {-12, 12}, icon_size = 64 }, + }, + energy_required = 16, + subgroup = "data-generic", + category = "space-supercomputing-4", + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "machine-learning-data", + ingredients = { + { name = data_util.mod_prefix .. "empty-data", amount = 1 }, + { name = "electronic-circuit", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-warm", amount = 5}, + }, + results = { + { name = data_util.mod_prefix .. "machine-learning-data", amount = 1 }, + { name = data_util.mod_prefix .. "scrap", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 5}, + }, + main_product = data_util.mod_prefix .. "machine-learning-data", + energy_required = 10, + subgroup = "data-generic", + category = "space-supercomputing-1", + always_show_made_in = true, +}) + +-- simulation +make_recipe({ + name = data_util.mod_prefix .. "simulation-a", + ingredients = { + { name = data_util.mod_prefix .. "astronomic-insight", amount = 36 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "significant-data", amount = 4 }, + { name = data_util.mod_prefix .. "empty-data", amount = 32 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + icons = { + { icon = "__space-exploration-graphics__/graphics/icons/data/significant.png", scale = 0.85, shift = {-2, 4}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "astronomic-insight"].icon, scale = 0.4/2, shift = {0, -12}, icon_size = 64 }, + }, + energy_required = 30, + subgroup = "data-significant", + allow_as_intermediate = false, + category = "space-supercomputing-1", + order = "sim1-a", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "simulation-s", + ingredients = { + { name = data_util.mod_prefix .. "energy-insight", amount = 36 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "significant-data", amount = 4 }, + { name = data_util.mod_prefix .. "empty-data", amount = 32 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + icons = { + { icon = "__space-exploration-graphics__/graphics/icons/data/significant.png", scale = 0.85, shift = {-2, 4}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "energy-insight"].icon, scale = 0.4/2, shift = {0, -12}, icon_size = 64 }, + }, + energy_required = 30, + subgroup = "data-significant", + allow_as_intermediate = false, + category = "space-supercomputing-1", + order = "sim1-b", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "simulation-b", + ingredients = { + { name = data_util.mod_prefix .. "biological-insight", amount = 36 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "significant-data", amount = 4 }, + { name = data_util.mod_prefix .. "empty-data", amount = 32 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + icons = { + { icon = "__space-exploration-graphics__/graphics/icons/data/significant.png", scale = 0.85, shift = {-2, 4}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "biological-insight"].icon, scale = 0.4/2, shift = {0, -12}, icon_size = 64 }, + }, + energy_required = 30, + subgroup = "data-significant", + allow_as_intermediate = false, + category = "space-supercomputing-1", + order = "sim1-c", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "simulation-m", + ingredients = { + { name = data_util.mod_prefix .. "material-insight", amount = 36 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "significant-data", amount = 4 }, + { name = data_util.mod_prefix .. "empty-data", amount = 32 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + icons = { + { icon = "__space-exploration-graphics__/graphics/icons/data/significant.png", scale = 0.85, shift = {-2, 4}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "material-insight"].icon, scale = 0.4/2, shift = {0, -12}, icon_size = 64 }, + }, + energy_required = 30, + subgroup = "data-significant", + allow_as_intermediate = false, + category = "space-supercomputing-1", + order = "sim1-d", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "simulation-as", + ingredients = { + { name = data_util.mod_prefix .. "astronomic-insight", amount = 18 }, + { name = data_util.mod_prefix .. "energy-insight", amount = 18 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "significant-data", amount = 6 }, + { name = data_util.mod_prefix .. "empty-data", amount = 30 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + icons = { + { icon = "__space-exploration-graphics__/graphics/icons/data/significant.png", scale = 0.85, shift = {-2, 4}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "astronomic-insight"].icon, scale = 0.4/2, shift = {-10, -12}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "energy-insight"].icon, scale = 0.4/2, shift = {10, -12}, icon_size = 64 }, + }, + energy_required = 60, + subgroup = "data-significant", + allow_as_intermediate = false, + category = "space-supercomputing-1", + order = "sim2-a", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "simulation-ab", + ingredients = { + { name = data_util.mod_prefix .. "astronomic-insight", amount = 18 }, + { name = data_util.mod_prefix .. "biological-insight", amount = 18 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "significant-data", amount = 6 }, + { name = data_util.mod_prefix .. "empty-data", amount = 30 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + icons = { + { icon = "__space-exploration-graphics__/graphics/icons/data/significant.png", scale = 0.85, shift = {-2, 4}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "astronomic-insight"].icon, scale = 0.4/2, shift = {-10, -12}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "biological-insight"].icon, scale = 0.4/2, shift = {10, -12}, icon_size = 64 }, + }, + energy_required = 60, + subgroup = "data-significant", + allow_as_intermediate = false, + category = "space-supercomputing-1", + order = "sim2-b", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "simulation-am", + ingredients = { + { name = data_util.mod_prefix .. "astronomic-insight", amount = 18 }, + { name = data_util.mod_prefix .. "material-insight", amount = 18 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "significant-data", amount = 6 }, + { name = data_util.mod_prefix .. "empty-data", amount = 30 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + icons = { + { icon = "__space-exploration-graphics__/graphics/icons/data/significant.png", scale = 0.85, shift = {-2, 4}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "astronomic-insight"].icon, scale = 0.4/2, shift = {-10, -12}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "material-insight"].icon, scale = 0.4/2, shift = {10, -12}, icon_size = 64 }, + }, + energy_required = 60, + subgroup = "data-significant", + allow_as_intermediate = false, + category = "space-supercomputing-1", + order = "sim2-c", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "simulation-sb", + ingredients = { + { name = data_util.mod_prefix .. "energy-insight", amount = 18 }, + { name = data_util.mod_prefix .. "biological-insight", amount = 18 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "significant-data", amount = 6 }, + { name = data_util.mod_prefix .. "empty-data", amount = 30 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + icons = { + { icon = "__space-exploration-graphics__/graphics/icons/data/significant.png", scale = 0.85, shift = {-2, 4}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "energy-insight"].icon, scale = 0.4/2, shift = {-10, -12}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "biological-insight"].icon, scale = 0.4/2, shift = {10, -12}, icon_size = 64 }, + }, + energy_required = 60, + subgroup = "data-significant", + allow_as_intermediate = false, + category = "space-supercomputing-1", + order = "sim2-d", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "simulation-sm", + ingredients = { + { name = data_util.mod_prefix .. "energy-insight", amount = 18 }, + { name = data_util.mod_prefix .. "material-insight", amount = 18 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "significant-data", amount = 6 }, + { name = data_util.mod_prefix .. "empty-data", amount = 30 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + icons = { + { icon = "__space-exploration-graphics__/graphics/icons/data/significant.png", scale = 0.85, shift = {-2, 4}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "energy-insight"].icon, scale = 0.4/2, shift = {-10, -12}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "material-insight"].icon, scale = 0.4/2, shift = {10, -12}, icon_size = 64 }, + }, + energy_required = 60, + subgroup = "data-significant", + allow_as_intermediate = false, + category = "space-supercomputing-1", + order = "sim2-e", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "simulation-bm", + ingredients = { + { name = data_util.mod_prefix .. "biological-insight", amount = 18 }, + { name = data_util.mod_prefix .. "material-insight", amount = 18 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "significant-data", amount = 6 }, + { name = data_util.mod_prefix .. "empty-data", amount = 30 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + icons = { + { icon = "__space-exploration-graphics__/graphics/icons/data/significant.png", scale = 0.85, shift = {-2, 4}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "biological-insight"].icon, scale = 0.4/2, shift = {-10, -12}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "material-insight"].icon, scale = 0.4/2, shift = {10, -12}, icon_size = 64 }, + }, + energy_required = 60, + subgroup = "data-significant", + allow_as_intermediate = false, + category = "space-supercomputing-1", + order = "sim2-f", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "simulation-asb", + ingredients = { + { name = data_util.mod_prefix .. "astronomic-insight", amount = 12 }, + { name = data_util.mod_prefix .. "energy-insight", amount = 12 }, + { name = data_util.mod_prefix .. "biological-insight", amount = 12 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "significant-data", amount = 8 }, + { name = data_util.mod_prefix .. "empty-data", amount = 28 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + icons = { + { icon = "__space-exploration-graphics__/graphics/icons/data/significant.png", scale = 0.85, shift = {-2, 4}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "astronomic-insight"].icon, scale = 0.4/2, shift = {-10, -12}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "energy-insight"].icon, scale = 0.4/2, shift = {0, -12}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "biological-insight"].icon, scale = 0.4/2, shift = {10, -12}, icon_size = 64 }, + }, + energy_required = 120, + subgroup = "data-significant", + allow_as_intermediate = false, + category = "space-supercomputing-1", + order = "sim3-a", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "simulation-asm", + ingredients = { + { name = data_util.mod_prefix .. "astronomic-insight", amount = 12 }, + { name = data_util.mod_prefix .. "energy-insight", amount = 12 }, + { name = data_util.mod_prefix .. "material-insight", amount = 12 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "significant-data", amount = 8 }, + { name = data_util.mod_prefix .. "empty-data", amount = 28 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + icons = { + { icon = "__space-exploration-graphics__/graphics/icons/data/significant.png", scale = 0.85, shift = {-2, 4}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "astronomic-insight"].icon, scale = 0.4/2, shift = {-10, -12}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "energy-insight"].icon, scale = 0.4/2, shift = {0, -12}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "material-insight"].icon, scale = 0.4/2, shift = {10, -12}, icon_size = 64 }, + }, + energy_required = 120, + subgroup = "data-significant", + allow_as_intermediate = false, + category = "space-supercomputing-1", + order = "sim3-b", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "simulation-abm", + ingredients = { + { name = data_util.mod_prefix .. "astronomic-insight", amount = 12 }, + { name = data_util.mod_prefix .. "biological-insight", amount = 12 }, + { name = data_util.mod_prefix .. "material-insight", amount = 12 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "significant-data", amount = 8 }, + { name = data_util.mod_prefix .. "empty-data", amount = 28 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + icons = { + { icon = "__space-exploration-graphics__/graphics/icons/data/significant.png", scale = 0.85, shift = {-2, 4}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "astronomic-insight"].icon, scale = 0.4/2, shift = {-10, -12}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "biological-insight"].icon, scale = 0.4/2, shift = {0, -12}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "material-insight"].icon, scale = 0.4/2, shift = {10, -12}, icon_size = 64 }, + }, + energy_required = 120, + subgroup = "data-significant", + allow_as_intermediate = false, + category = "space-supercomputing-1", + order = "sim3-c", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "simulation-sbm", + ingredients = { + { name = data_util.mod_prefix .. "energy-insight", amount = 12 }, + { name = data_util.mod_prefix .. "biological-insight", amount = 12 }, + { name = data_util.mod_prefix .. "material-insight", amount = 12 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "significant-data", amount = 8 }, + { name = data_util.mod_prefix .. "empty-data", amount = 28 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + icons = { + { icon = "__space-exploration-graphics__/graphics/icons/data/significant.png", scale = 0.85, shift = {-2, 4}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "energy-insight"].icon, scale = 0.4/2, shift = {-10, -12}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "biological-insight"].icon, scale = 0.4/2, shift = {0, -12}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "material-insight"].icon, scale = 0.4/2, shift = {10, -12}, icon_size = 64 }, + }, + energy_required = 120, + subgroup = "data-significant", + allow_as_intermediate = false, + category = "space-supercomputing-1", + order = "sim3-d", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "simulation-asbm", + ingredients = { + { name = data_util.mod_prefix .. "astronomic-insight", amount = 9 }, + { name = data_util.mod_prefix .. "energy-insight", amount = 9 }, + { name = data_util.mod_prefix .. "biological-insight", amount = 9 }, + { name = data_util.mod_prefix .. "material-insight", amount = 9 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "significant-data", amount = 10 }, + { name = data_util.mod_prefix .. "empty-data", amount = 26 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + icons = { + { icon = "__space-exploration-graphics__/graphics/icons/data/significant.png", scale = 0.85, shift = {-2, 4}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "astronomic-insight"].icon, scale = 0.4/2, shift = {-15, -12}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "energy-insight"].icon, scale = 0.4/2, shift = {-5, -12}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "biological-insight"].icon, scale = 0.4/2, shift = {5, -12}, icon_size = 64 }, + { icon = data.raw.item[data_util.mod_prefix .. "material-insight"].icon, scale = 0.4/2, shift = {15, -12}, icon_size = 64 }, + }, + energy_required = 240, + subgroup = "data-significant", + allow_as_intermediate = false, + category = "space-supercomputing-2", + order = "sim4-a", + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "astronomic-insight-1", + ingredients = { + { name = data_util.mod_prefix .. "astronomic-catalogue-1", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "astronomic-insight", amount = 2 }, + { name = data_util.mod_prefix .. "empty-data", amount = 2 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + icons = { + { icon = data.raw.item[data_util.mod_prefix .. "astronomic-catalogue-1"].icon, scale = 1, shift = {8, 0}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/catalogue/astronomic-insight.png", scale = 0.7, shift = {-16, 8}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/number/1.png", scale = 1, shift = {-20, -20}, icon_size = 20 }, + }, + energy_required = 10, + subgroup = "data-catalogue-astronomic", + allow_as_intermediate = false, + category = "space-supercomputing-1", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "energy-insight-1", + ingredients = { + { name = data_util.mod_prefix .. "energy-catalogue-1", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "energy-insight", amount = 2 }, + { name = data_util.mod_prefix .. "empty-data", amount = 2 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + icons = { + { icon = data.raw.item[data_util.mod_prefix .. "energy-catalogue-1"].icon, scale = 1, shift = {8, 0}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/catalogue/energy-insight.png", scale = 0.7, shift = {-16, 8}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/number/1.png", scale = 1, shift = {-20, -20}, icon_size = 20 }, + }, + energy_required = 10, + subgroup = "data-catalogue-energy", + allow_as_intermediate = false, + category = "space-supercomputing-1", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "biological-insight-1", + ingredients = { + { name = data_util.mod_prefix .. "biological-catalogue-1", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "biological-insight", amount = 2 }, + { name = data_util.mod_prefix .. "empty-data", amount = 2 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + icons = { + { icon = data.raw.item[data_util.mod_prefix .. "biological-catalogue-1"].icon, scale = 1, shift = {8, 0}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/catalogue/biological-insight.png", scale = 0.7, shift = {-16, 8}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/number/1.png", scale = 1, shift = {-20, -20}, icon_size = 20 }, + }, + energy_required = 10, + subgroup = "data-catalogue-biological", + allow_as_intermediate = false, + category = "space-supercomputing-1", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "material-insight-1", + ingredients = { + { name = data_util.mod_prefix .. "material-catalogue-1", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "material-insight", amount = 2 }, + { name = data_util.mod_prefix .. "empty-data", amount = 2 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + icons = { + { icon = data.raw.item[data_util.mod_prefix .. "material-catalogue-1"].icon, scale = 1, shift = {8, 0}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/catalogue/material-insight.png", scale = 0.7, shift = {-16, 8}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/number/1.png", scale = 1, shift = {-20, -20}, icon_size = 20 }, + }, + energy_required = 10, + subgroup = "data-catalogue-material", + allow_as_intermediate = false, + category = "space-supercomputing-1", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "astronomic-insight-2", + ingredients = { + { name = data_util.mod_prefix .. "astronomic-catalogue-1", amount = 1 }, + { name = data_util.mod_prefix .. "astronomic-catalogue-2", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "astronomic-insight", amount = 6 }, + { name = data_util.mod_prefix .. "empty-data", amount = 2 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + icons = { + { icon = data.raw.item[data_util.mod_prefix .. "astronomic-catalogue-2"].icon, scale = 1, shift = {8, 0}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/catalogue/astronomic-insight.png", scale = 0.7, shift = {-16, 8}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/number/2.png", scale = 1, shift = {-20, -20}, icon_size = 20 }, + }, + energy_required = 20, + subgroup = "data-catalogue-astronomic", + allow_as_intermediate = false, + category = "space-supercomputing-1", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "energy-insight-2", + ingredients = { + { name = data_util.mod_prefix .. "energy-catalogue-1", amount = 1 }, + { name = data_util.mod_prefix .. "energy-catalogue-2", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "energy-insight", amount = 6 }, + { name = data_util.mod_prefix .. "empty-data", amount = 2 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + icons = { + { icon = data.raw.item[data_util.mod_prefix .. "energy-catalogue-2"].icon, scale = 1, shift = {8, 0}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/catalogue/energy-insight.png", scale = 0.7, shift = {-16, 8}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/number/2.png", scale = 1, shift = {-20, -20}, icon_size = 20 }, + }, + energy_required = 20, + subgroup = "data-catalogue-energy", + allow_as_intermediate = false, + category = "space-supercomputing-1", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "biological-insight-2", + ingredients = { + { name = data_util.mod_prefix .. "biological-catalogue-1", amount = 1 }, + { name = data_util.mod_prefix .. "biological-catalogue-2", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "biological-insight", amount = 6 }, + { name = data_util.mod_prefix .. "empty-data", amount = 2 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + icons = { + { icon = data.raw.item[data_util.mod_prefix .. "biological-catalogue-2"].icon, scale = 1, shift = {8, 0}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/catalogue/biological-insight.png", scale = 0.7, shift = {-16, 8}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/number/2.png", scale = 1, shift = {-20, -20}, icon_size = 20 }, + }, + energy_required = 20, + subgroup = "data-catalogue-biological", + allow_as_intermediate = false, + category = "space-supercomputing-1", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "material-insight-2", + ingredients = { + { name = data_util.mod_prefix .. "material-catalogue-1", amount = 1 }, + { name = data_util.mod_prefix .. "material-catalogue-2", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "material-insight", amount = 6 }, + { name = data_util.mod_prefix .. "empty-data", amount = 2 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + icons = { + { icon = data.raw.item[data_util.mod_prefix .. "material-catalogue-2"].icon, scale = 1, shift = {8, 0}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/catalogue/material-insight.png", scale = 0.7, shift = {-16, 8}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/number/2.png", scale = 1, shift = {-20, -20}, icon_size = 20 }, + }, + energy_required = 20, + subgroup = "data-catalogue-material", + allow_as_intermediate = false, + category = "space-supercomputing-1", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "astronomic-insight-3", + ingredients = { + { name = data_util.mod_prefix .. "astronomic-catalogue-1", amount = 1 }, + { name = data_util.mod_prefix .. "astronomic-catalogue-2", amount = 1 }, + { name = data_util.mod_prefix .. "astronomic-catalogue-3", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "astronomic-insight", amount = 12 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + icons = { + { icon = data.raw.item[data_util.mod_prefix .. "astronomic-catalogue-3"].icon, scale = 1, shift = {8, 0}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/catalogue/astronomic-insight.png", scale = 0.7, shift = {-16, 8}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/number/3.png", scale = 1, shift = {-20, -20}, icon_size = 20 }, + }, + energy_required = 30, + subgroup = "data-catalogue-astronomic", + allow_as_intermediate = false, + category = "space-supercomputing-1", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "energy-insight-3", + ingredients = { + { name = data_util.mod_prefix .. "energy-catalogue-1", amount = 1 }, + { name = data_util.mod_prefix .. "energy-catalogue-2", amount = 1 }, + { name = data_util.mod_prefix .. "energy-catalogue-3", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "energy-insight", amount = 12 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + icons = { + { icon = data.raw.item[data_util.mod_prefix .. "energy-catalogue-3"].icon, scale = 1, shift = {8, 0}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/catalogue/energy-insight.png", scale = 0.7, shift = {-16, 8}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/number/3.png", scale = 1, shift = {-20, -20}, icon_size = 20 }, + }, + energy_required = 30, + subgroup = "data-catalogue-energy", + allow_as_intermediate = false, + category = "space-supercomputing-1", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "biological-insight-3", + ingredients = { + { name = data_util.mod_prefix .. "biological-catalogue-1", amount = 1 }, + { name = data_util.mod_prefix .. "biological-catalogue-2", amount = 1 }, + { name = data_util.mod_prefix .. "biological-catalogue-3", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "biological-insight", amount = 12 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + icons = { + { icon = data.raw.item[data_util.mod_prefix .. "biological-catalogue-3"].icon, scale = 1, shift = {8, 0}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/catalogue/biological-insight.png", scale = 0.7, shift = {-16, 8}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/number/3.png", scale = 1, shift = {-20, -20}, icon_size = 20 }, + }, + energy_required = 30, + subgroup = "data-catalogue-biological", + allow_as_intermediate = false, + category = "space-supercomputing-1", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "material-insight-3", + ingredients = { + { name = data_util.mod_prefix .. "material-catalogue-1", amount = 1 }, + { name = data_util.mod_prefix .. "material-catalogue-2", amount = 1 }, + { name = data_util.mod_prefix .. "material-catalogue-3", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "material-insight", amount = 12 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + icons = { + { icon = data.raw.item[data_util.mod_prefix .. "material-catalogue-3"].icon, scale = 1, shift = {8, 0}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/catalogue/material-insight.png", scale = 0.7, shift = {-16, 8}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/number/3.png", scale = 1, shift = {-20, -20}, icon_size = 20 }, + }, + energy_required = 30, + subgroup = "data-catalogue-material", + allow_as_intermediate = false, + category = "space-supercomputing-1", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "astronomic-insight-4", + ingredients = { + { name = data_util.mod_prefix .. "astronomic-catalogue-1", amount = 1 }, + { name = data_util.mod_prefix .. "astronomic-catalogue-2", amount = 1 }, + { name = data_util.mod_prefix .. "astronomic-catalogue-3", amount = 1 }, + { name = data_util.mod_prefix .. "astronomic-catalogue-4", amount = 1 }, + { name = data_util.mod_prefix .. "empty-data", amount = 6 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "astronomic-insight", amount = 22 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + icons = { + { icon = data.raw.item[data_util.mod_prefix .. "astronomic-catalogue-4"].icon, scale = 1, shift = {8, 0}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/catalogue/astronomic-insight.png", scale = 0.7, shift = {-16, 8}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/number/4.png", scale = 1, shift = {-20, -20}, icon_size = 20 }, + }, + energy_required = 40, + subgroup = "data-catalogue-astronomic", + allow_as_intermediate = false, + category = "space-supercomputing-2", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "energy-insight-4", + ingredients = { + { name = data_util.mod_prefix .. "energy-catalogue-1", amount = 1 }, + { name = data_util.mod_prefix .. "energy-catalogue-2", amount = 1 }, + { name = data_util.mod_prefix .. "energy-catalogue-3", amount = 1 }, + { name = data_util.mod_prefix .. "energy-catalogue-4", amount = 1 }, + { name = data_util.mod_prefix .. "empty-data", amount = 6 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "energy-insight", amount = 22 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + icons = { + { icon = data.raw.item[data_util.mod_prefix .. "energy-catalogue-4"].icon, scale = 1, shift = {8, 0}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/catalogue/energy-insight.png", scale = 0.7, shift = {-16, 8}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/number/4.png", scale = 1, shift = {-20, -20}, icon_size = 20 }, + }, + energy_required = 40, + subgroup = "data-catalogue-energy", + allow_as_intermediate = false, + category = "space-supercomputing-2", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "biological-insight-4", + ingredients = { + { name = data_util.mod_prefix .. "biological-catalogue-1", amount = 1 }, + { name = data_util.mod_prefix .. "biological-catalogue-2", amount = 1 }, + { name = data_util.mod_prefix .. "biological-catalogue-3", amount = 1 }, + { name = data_util.mod_prefix .. "biological-catalogue-4", amount = 1 }, + { name = data_util.mod_prefix .. "empty-data", amount = 6 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "biological-insight", amount = 22 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + icons = { + { icon = data.raw.item[data_util.mod_prefix .. "biological-catalogue-4"].icon,scale = 1, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/catalogue/biological-insight.png", scale = 0.7, shift = {-16, 8}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/number/4.png", scale = 1, shift = {-20, -20}, icon_size = 20 }, + }, + energy_required = 40, + subgroup = "data-catalogue-biological", + allow_as_intermediate = false, + category = "space-supercomputing-2", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "material-insight-4", + ingredients = { + { name = data_util.mod_prefix .. "material-catalogue-1", amount = 1 }, + { name = data_util.mod_prefix .. "material-catalogue-2", amount = 1 }, + { name = data_util.mod_prefix .. "material-catalogue-3", amount = 1 }, + { name = data_util.mod_prefix .. "material-catalogue-4", amount = 1 }, + { name = data_util.mod_prefix .. "empty-data", amount = 6 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "material-insight", amount = 22 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + icons = { + { icon = data.raw.item[data_util.mod_prefix .. "material-catalogue-4"].icon, scale = 1, shift = {8, 0}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/catalogue/material-insight.png", scale = 0.7, shift = {-16, 8}, icon_size = 64 }, + { icon = "__space-exploration-graphics__/graphics/icons/number/4.png", scale = 1, shift = {-20, -20}, icon_size = 20 }, + }, + energy_required = 40, + subgroup = "data-catalogue-material", + allow_as_intermediate = false, + category = "space-supercomputing-2", + always_show_made_in = true, +}) + + +make_recipe({ + name = data_util.mod_prefix .. "astronomic-catalogue-1", + ingredients = { + { name = data_util.mod_prefix .. "astrometric-data", amount = 1 }, + { name = data_util.mod_prefix .. "visible-observation-data", amount = 1 }, + { name = data_util.mod_prefix .. "infrared-observation-data", amount = 1 }, + { name = data_util.mod_prefix .. "uv-observation-data", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "astronomic-catalogue-1", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "astronomic-catalogue-1", + subgroup = "data-catalogue-astronomic", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/astronomic-catalogue-1.png", + icon_size = 64, + category = "space-supercomputing-1", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "astronomic-catalogue-2", + ingredients = { + { name = data_util.mod_prefix .. "microwave-observation-data", amount = 1 }, + { name = data_util.mod_prefix .. "xray-observation-data", amount = 1 }, + { name = data_util.mod_prefix .. "gravitational-lensing-data", amount = 1 }, + { name = data_util.mod_prefix .. "gravity-wave-data", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "astronomic-catalogue-2", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 20, + main_product = data_util.mod_prefix .. "astronomic-catalogue-2", + subgroup = "data-catalogue-astronomic", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/astronomic-catalogue-2.png", + icon_size = 64, + category = "space-supercomputing-1", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "astronomic-catalogue-3", + ingredients = { + { name = data_util.mod_prefix .. "radio-observation-data", amount = 1 }, + { name = data_util.mod_prefix .. "gammaray-observation-data", amount = 1 }, + { name = data_util.mod_prefix .. "darkmatter-data", amount = 1 }, + { name = data_util.mod_prefix .. "negative-pressure-data", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "astronomic-catalogue-3", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 30, + main_product = data_util.mod_prefix .. "astronomic-catalogue-3", + subgroup = "data-catalogue-astronomic", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/astronomic-catalogue-3.png", + icon_size = 64, + category = "space-supercomputing-1", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "astronomic-catalogue-4", + ingredients = { + { name = data_util.mod_prefix .. "dark-energy-data", amount = 1 }, + { name = data_util.mod_prefix .. "micro-black-hole-data", amount = 1 }, + { name = data_util.mod_prefix .. "zero-point-energy-data", amount = 1 }, + { name = data_util.mod_prefix .. "belt-probe-data", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "astronomic-catalogue-4", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 40, + main_product = data_util.mod_prefix .. "astronomic-catalogue-4", + subgroup = "data-catalogue-astronomic", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/astronomic-catalogue-4.png", + icon_size = 64, + category = "space-supercomputing-1", + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "energy-catalogue-1", + ingredients = { + { name = data_util.mod_prefix .. "polarisation-data", amount = 1 }, + { name = data_util.mod_prefix .. "conductivity-data", amount = 1 }, + { name = data_util.mod_prefix .. "radiation-data", amount = 1 }, + { name = data_util.mod_prefix .. "electromagnetic-field-data", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "energy-catalogue-1", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "energy-catalogue-1", + subgroup = "data-catalogue-energy", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/energy-catalogue-1.png", + icon_size = 64, + category = "space-supercomputing-1", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "energy-catalogue-2", + ingredients = { + { name = data_util.mod_prefix .. "atomic-data", amount = 1 }, + { name = data_util.mod_prefix .. "subatomic-data", amount = 1 }, + { name = data_util.mod_prefix .. "quantum-phenomenon-data", amount = 1 }, + { name = data_util.mod_prefix .. "forcefield-data", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "energy-catalogue-2", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 20, + main_product = data_util.mod_prefix .. "energy-catalogue-2", + subgroup = "data-catalogue-energy", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/energy-catalogue-2.png", + icon_size = 64, + category = "space-supercomputing-1", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "energy-catalogue-3", + ingredients = { + { name = data_util.mod_prefix .. "entanglement-data", amount = 1 }, + { name = data_util.mod_prefix .. "superconductivity-data", amount = 1 }, + { name = data_util.mod_prefix .. "quark-data", amount = 1 }, + { name = data_util.mod_prefix .. "lepton-data", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "energy-catalogue-3", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 30, + main_product = data_util.mod_prefix .. "energy-catalogue-3", + subgroup = "data-catalogue-energy", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/energy-catalogue-3.png", + icon_size = 64, + category = "space-supercomputing-1", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "energy-catalogue-4", + ingredients = { + { name = data_util.mod_prefix .. "boson-data", amount = 1 }, + { name = data_util.mod_prefix .. "fusion-test-data", amount = 1 }, + { name = data_util.mod_prefix .. "magnetic-monopole-data", amount = 1 }, + { name = data_util.mod_prefix .. "star-probe-data", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "energy-catalogue-4", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 40, + main_product = data_util.mod_prefix .. "energy-catalogue-4", + subgroup = "data-catalogue-energy", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/energy-catalogue-4.png", + icon_size = 64, + category = "space-supercomputing-1", + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "biological-catalogue-1", + ingredients = { + { name = data_util.mod_prefix .. "bio-combustion-data", amount = 1 }, + --{ name = data_util.mod_prefix .. "bio-spectral-data", amount = 1 }, + { name = data_util.mod_prefix .. "biomechanical-data", amount = 1 }, + { name = data_util.mod_prefix .. "biochemical-data", amount = 1 }, + { name = data_util.mod_prefix .. "genetic-data", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "biological-catalogue-1", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "biological-catalogue-1", + subgroup = "data-catalogue-biological", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/biological-catalogue-1.png", + icon_size = 64, + category = "space-supercomputing-1", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "biological-catalogue-2", + ingredients = { + { name = data_util.mod_prefix .. "bio-combustion-resistance-data", amount = 1 }, + { name = data_util.mod_prefix .. "experimental-genetic-data", amount = 1 }, + { name = data_util.mod_prefix .. "biochemical-resistance-data", amount = 1 }, + { name = data_util.mod_prefix .. "biomechanical-resistance-data", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "biological-catalogue-2", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 20, + main_product = data_util.mod_prefix .. "biological-catalogue-2", + subgroup = "data-catalogue-biological", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/biological-catalogue-2.png", + icon_size = 64, + category = "space-supercomputing-1", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "biological-catalogue-3", + ingredients = { + { name = data_util.mod_prefix .. "bioelectrics-data", amount = 1 }, + { name = data_util.mod_prefix .. "cryogenics-data", amount = 1 }, + { name = data_util.mod_prefix .. "decompression-data", amount = 1 }, + { name = data_util.mod_prefix .. "radiation-exposure-data", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "biological-catalogue-3", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 30, + main_product = data_util.mod_prefix .. "biological-catalogue-3", + subgroup = "data-catalogue-biological", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/biological-catalogue-3.png", + icon_size = 64, + category = "space-supercomputing-1", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "biological-catalogue-4", + ingredients = { + { name = data_util.mod_prefix .. "comparative-genetic-data", amount = 1 }, + { name = data_util.mod_prefix .. "decompression-resistance-data", amount = 1 }, + { name = data_util.mod_prefix .. "neural-anomaly-data", amount = 1 }, + { name = data_util.mod_prefix .. "radiation-exposure-resistance-data", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "biological-catalogue-4", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 40, + main_product = data_util.mod_prefix .. "biological-catalogue-4", + subgroup = "data-catalogue-biological", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/biological-catalogue-4.png", + icon_size = 64, + category = "space-supercomputing-1", + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "material-catalogue-1", + ingredients = { + { name = data_util.mod_prefix .. "cold-thermodynamics-data", amount = 1 }, + { name = data_util.mod_prefix .. "hot-thermodynamics-data", amount = 1 }, + { name = data_util.mod_prefix .. "tensile-strength-data", amount = 1 }, + { name = data_util.mod_prefix .. "compressive-strength-data", amount = 1 }, + --{ name = data_util.mod_prefix .. "shear-strength-data", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "material-catalogue-1", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "material-catalogue-1", + subgroup = "data-catalogue-material", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/material-catalogue-1.png", + icon_size = 64, + category = "space-supercomputing-1", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "material-catalogue-2", + ingredients = { + { name = data_util.mod_prefix .. "rigidity-data", amount = 1 }, + { name = data_util.mod_prefix .. "pressure-containment-data", amount = 1 }, + { name = data_util.mod_prefix .. "corrosion-resistance-data", amount = 1 }, + { name = data_util.mod_prefix .. "impact-shielding-data", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "material-catalogue-2", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 20, + main_product = data_util.mod_prefix .. "material-catalogue-2", + subgroup = "data-catalogue-material", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/material-catalogue-2.png", + icon_size = 64, + category = "space-supercomputing-1", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "material-catalogue-3", + ingredients = { + { name = data_util.mod_prefix .. "friction-data", amount = 1 }, + { name = data_util.mod_prefix .. "radiation-shielding-data", amount = 1 }, + { name = data_util.mod_prefix .. "explosion-shielding-data", amount = 1 }, + { name = data_util.mod_prefix .. "ballistic-shielding-data", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "material-catalogue-3", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 30, + main_product = data_util.mod_prefix .. "material-catalogue-3", + subgroup = "data-catalogue-material", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/material-catalogue-3.png", + icon_size = 64, + category = "space-supercomputing-1", + always_show_made_in = true, +}) +make_recipe({ + name = data_util.mod_prefix .. "material-catalogue-4", + ingredients = { + { name = data_util.mod_prefix .. "laser-shielding-data", amount = 1 }, + { name = data_util.mod_prefix .. "particle-beam-shielding-data", amount = 1 }, + { name = data_util.mod_prefix .. "electrical-shielding-data", amount = 1 }, + { name = data_util.mod_prefix .. "experimental-alloys-data", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "material-catalogue-4", amount = 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + energy_required = 40, + main_product = data_util.mod_prefix .. "material-catalogue-4", + subgroup = "data-catalogue-material", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/material-catalogue-4.png", + icon_size = 64, + category = "space-supercomputing-1", + always_show_made_in = true, +}) + +--[[ +make_recipe({ + name = data_util.mod_prefix .. "universal-catalogue", + ingredients = { + { data_util.mod_prefix .. "astronomic-catalogue-4", 1 }, + { data_util.mod_prefix .. "energy-catalogue-4", 1 }, + { data_util.mod_prefix .. "biological-catalogue-4", 1 }, + { data_util.mod_prefix .. "material-catalogue-4", 1 }, + { data_util.mod_prefix .. "deep-catalogue-4", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 100}, + }, + results = { + { name = data_util.mod_prefix .. "universal-catalogue", amount = 5 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 100}, + }, + energy_required = 50, + main_product = data_util.mod_prefix .. "universal-catalogue", + icon = "__space-exploration-graphics__/graphics/icons/catalogue/universal-catalogue.png", + icon_size = 64, + category = "space-supercomputing-4", + always_show_made_in = true, +}) +]] + +data:extend({ + + { + type = "recipe", + name = data_util.mod_prefix .. "deep-catalogue-1", + main_product = data_util.mod_prefix .. "deep-catalogue-1", + enabled = false, + energy_required = 60, + ingredients = { + { data_util.mod_prefix .. "void-probe-data", 1 }, + { data_util.mod_prefix .. "nano-engineering-data", 1 }, + { data_util.mod_prefix .. "naquium-structural-data", 1 }, + { data_util.mod_prefix .. "naquium-energy-data", 1 }, + { data_util.mod_prefix .. "cryonite-rod", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { data_util.mod_prefix .. "deep-catalogue-1", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 10}, + }, + requester_paste_multiplier = 1, + always_show_made_in = true, + category = "space-supercomputing-3", + }, + + { + type = "recipe", + name = data_util.mod_prefix .. "deep-catalogue-2", + main_product = data_util.mod_prefix .. "deep-catalogue-2", + enabled = false, + energy_required = 70, + ingredients = { + { data_util.mod_prefix .. "timespace-anomaly-data", 1 }, + { data_util.mod_prefix .. "singularity-data", 1 }, + { data_util.mod_prefix .. "hyperlattice-data", 1 }, + { data_util.mod_prefix .. "annihilation-data", 1 }, + { data_util.mod_prefix .. "cryonite-rod", 2 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 20}, + }, + results = { + { data_util.mod_prefix .. "deep-catalogue-2", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 20}, + }, + requester_paste_multiplier = 1, + always_show_made_in = true, + category = "space-supercomputing-3", + }, + { + type = "recipe", + name = data_util.mod_prefix .. "deep-catalogue-3", + main_product = data_util.mod_prefix .. "deep-catalogue-3", + enabled = false, + energy_required = 80, + ingredients = { + { data_util.mod_prefix .. "space-fold-data", 1 }, + { data_util.mod_prefix .. "space-warp-data", 1 }, + { data_util.mod_prefix .. "space-dialation-data", 1 }, + { data_util.mod_prefix .. "space-injection-data", 1 }, + { data_util.mod_prefix .. "cryonite-rod", 3 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 30}, + }, + results = { + { data_util.mod_prefix .. "deep-catalogue-3", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 30}, + }, + requester_paste_multiplier = 1, + always_show_made_in = true, + category = "space-supercomputing-3", + }, + { + type = "recipe", + name = data_util.mod_prefix .. "deep-catalogue-4", + main_product = data_util.mod_prefix .. "deep-catalogue-4", + enabled = false, + energy_required = 90, + ingredients = { + { data_util.mod_prefix .. "interstellar-data", 1 }, + { data_util.mod_prefix .. "teleportation-data", 1 }, + { data_util.mod_prefix .. "wormhole-data", 1 }, + { data_util.mod_prefix .. "rhga-data", 1 }, + { data_util.mod_prefix .. "cryonite-rod", 4 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 40}, + }, + results = { + { data_util.mod_prefix .. "deep-catalogue-4", 1 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 40}, + }, + requester_paste_multiplier = 1, + always_show_made_in = true, + category = "space-supercomputing-4", + }, + + { + type = "recipe", + name = data_util.mod_prefix .. "rhga-data", + main_product = data_util.mod_prefix .. "rhga-data", + enabled = false, + energy_required = 1000, + ingredients = { + { data_util.mod_prefix .. "empty-data", 50 }, + { data_util.mod_prefix .. "naquium-processor", 1 }, + { data_util.mod_prefix .. "cryonite-rod", 100 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 1000}, + }, + results = { + { data_util.mod_prefix .. "rhga-data", 50 }, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 1000}, + }, + requester_paste_multiplier = 1, + always_show_made_in = true, + category = "space-supercomputing-4", + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/thermodynamics-laboratory.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/thermodynamics-laboratory.lua new file mode 100644 index 0000000..0bec9d9 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/recipe/thermodynamics-laboratory.lua @@ -0,0 +1,206 @@ +local data_util = require("data_util") +local make_recipe = data_util.make_recipe + +local recipe_multiplier = 4 + +make_recipe({ + name = data_util.mod_prefix .. "thermodynamics-coal", + ingredients = { + { name = data_util.mod_prefix .. "experimental-specimen", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "plasma-stream", amount = 10}, + }, + results = { + { name = "coal", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-space-water", amount = 20}, + { name = data_util.mod_prefix .. "contaminated-scrap", amount = 1}, + }, + energy_required = 5 * recipe_multiplier, + subgroup = "space-components", + category = "space-thermodynamics", + allow_as_intermediate = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "bio-combustion-data", + ingredients = { + { name = data_util.mod_prefix .. "specimen", amount = 1}, + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "plasma-stream", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "bio-combustion-data", amount_min = 1, amount_max = 1, probability = 0.75}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.24}, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-bio-sludge", amount = 2}, + }, + energy_required = 5 * recipe_multiplier, + main_product = data_util.mod_prefix .. "bio-combustion-data", + category = "space-thermodynamics", + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "bio-combustion-resistance-data", + ingredients = { + { name = data_util.mod_prefix .. "experimental-specimen", amount = 1}, + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "plasma-stream", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "bio-combustion-resistance-data", amount = 1}, + { name = data_util.mod_prefix .. "experimental-specimen", amount_min = 1, amount_max = 1, probability = 0.5}, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-bio-sludge", amount = 7}, + }, + energy_required = 10 * recipe_multiplier, + main_product = data_util.mod_prefix .. "bio-combustion-resistance-data", + category = "space-thermodynamics", + always_show_made_in = true, +}) + +--[[ +-- removed +make_recipe({ + name = data_util.mod_prefix .. "bio-combustion-suppression-data", + ingredients = { + { name = data_util.mod_prefix .. "significant-specimen", amount = 1}, + { name = data_util.mod_prefix .. "experimental-material", amount = 1}, + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "plasma-stream", amount = 100}, + }, + results = { + { name = data_util.mod_prefix .. "bio-combustion-suppression-data", amount_min = 1, amount_max = 1, probability = 0.5}, + { name = data_util.mod_prefix .. "junk-data", amount_min = 1, amount_max = 1, probability = 0.49}, + { name = data_util.mod_prefix .. "contaminated-scrap", amount = 3}, + { type = "fluid", name = data_util.mod_prefix .. "contaminated-bio-sludge", amount = 100}, + }, + category = "space-thermodynamics", +}) +]]-- + +make_recipe({ + name = data_util.mod_prefix .. "cold-thermodynamics-data", + ingredients = { + { name = data_util.mod_prefix .. "material-testing-pack", amount = 4}, + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-cold", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "cold-thermodynamics-data", amount = 1}, + { name = data_util.mod_prefix .. "contaminated-scrap", amount = 8}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-hot", amount = 8}, + }, + energy_required = 10 * recipe_multiplier, + main_product = data_util.mod_prefix .. "cold-thermodynamics-data", + category = "space-thermodynamics", + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "hot-thermodynamics-data", + ingredients = { + { name = data_util.mod_prefix .. "material-testing-pack", amount = 4}, + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "plasma-stream", amount = 10}, + }, + results = { + { name = data_util.mod_prefix .. "hot-thermodynamics-data", amount = 1}, + { name = data_util.mod_prefix .. "contaminated-scrap", amount = 8}, + }, + energy_required = 10 * recipe_multiplier, + main_product = data_util.mod_prefix .. "hot-thermodynamics-data", + category = "space-thermodynamics", + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "pressure-containment-data", + ingredients = { + { name = data_util.mod_prefix .. "empty-data", amount = 3}, + { name = data_util.mod_prefix .. "heavy-girder", amount = 1}, + { name = "storage-tank", amount = 1}, + { type = "fluid", name = data_util.mod_prefix .. "space-water", amount = 1000}, + }, + results = { + { name = data_util.mod_prefix .. "pressure-containment-data", amount = 3}, + { name = data_util.mod_prefix .. "scrap", amount = 50}, + { type = "fluid", name = data_util.mod_prefix .. "space-water", amount = 990}, + }, + energy_required = 6 * recipe_multiplier, + main_product = data_util.mod_prefix .. "pressure-containment-data", + category = "space-thermodynamics", + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "explosion-shielding-data", + ingredients = { + { name = "explosives", amount = 20}, + { name = data_util.mod_prefix .. "material-testing-pack", amount = 4}, + { name = data_util.mod_prefix .. "heavy-girder", amount = 1}, + { name = data_util.mod_prefix .. "iridium-plate", amount = 1}, + { name = data_util.mod_prefix .. "empty-data", amount = 1}, + }, + results = { + { name = data_util.mod_prefix .. "explosion-shielding-data", amount = 1}, + { name = data_util.mod_prefix .. "heavy-girder", amount_min = 1, amount_max = 1, probability = 0.5}, + { name = data_util.mod_prefix .. "iridium-plate", amount_min = 1, amount_max = 1, probability = 0.5}, + { name = data_util.mod_prefix .. "scrap", amount = 10}, + }, + energy_required = 10, + main_product = data_util.mod_prefix .. "explosion-shielding-data", + category = "space-thermodynamics", + enabled = false, + always_show_made_in = true, +}) + +make_recipe({ + name = data_util.mod_prefix .. "experimental-alloys-data", + ingredients = { + { name = data_util.mod_prefix .. "iridium-plate", amount = 1}, + { name = data_util.mod_prefix .. "beryllium-plate", amount = 1}, + { name = data_util.mod_prefix .. "holmium-plate", amount = 1}, + { name = "iron-plate", amount = 1}, + { name = "copper-plate", amount = 1}, + { name = data_util.mod_prefix .. "empty-data", amount = 6}, + }, + results = { + { name = data_util.mod_prefix .. "experimental-alloys-data", amount = 6}, + { name = data_util.mod_prefix .. "scrap", amount = 5}, + }, + energy_required = 18, + main_product = data_util.mod_prefix .. "experimental-alloys-data", + category = "space-thermodynamics", + enabled = false, + always_show_made_in = true, +}) + +data_util.make_recipe({ + name = data_util.mod_prefix .. "cryogun", + ingredients = { + { data_util.mod_prefix .. "beryllium-plate", 10}, + { data_util.mod_prefix .. "aeroframe-pole", 10}, + { data_util.mod_prefix .. "cryonite-rod", 10}, + }, + results = { + { data_util.mod_prefix .. "cryogun", 1}, + }, + energy_required = 60, + category = "space-thermodynamics", + enabled = false, +}) + +data_util.make_recipe({ + name = data_util.mod_prefix .. "cryogun-ammo", + ingredients = { + { data_util.mod_prefix .. "beryllium-plate", 1}, + { data_util.mod_prefix .. "cryonite-rod", 10}, + { type = "fluid", name = data_util.mod_prefix .. "space-coolant-supercooled", amount = 10}, + }, + results = { + { data_util.mod_prefix .. "cryogun-ammo", 1}, + }, + energy_required = 10, + category = "space-thermodynamics", + enabled = false, + always_show_made_in = true, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/shortcut.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/shortcut.lua new file mode 100644 index 0000000..30571c9 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/shortcut.lua @@ -0,0 +1,109 @@ +local data_util = require("data_util") + +data:extend({ + { + type = "shortcut", + name = data_util.mod_prefix .. "remote-view", + localised_name = { "shortcut."..data_util.mod_prefix .. "remote-view"}, + order = "a", + action = "lua", + style = "blue", + icon = { + filename = "__space-exploration-graphics__/graphics/icons/uplink.png", + flags = { + "icon" + }, + priority = "extra-high-no-scale", + scale = 1, + size = 64 + }, + small_icon = { + filename = "__space-exploration-graphics__/graphics/icons/uplink.png", + flags = { + "icon" + }, + priority = "extra-high-no-scale", + scale = 1, + size = 64 + }, + disabled_small_icon = { + filename = "__space-exploration-graphics__/graphics/icons/shortcut-toolbar/remote-view-24-black.png", + flags = { + "icon" + }, + priority = "extra-high-no-scale", + scale = 1, + size = 24 + }, + }, + { + type = "shortcut", + name = data_util.mod_prefix .. "universe-explorer", + localised_name = { "shortcut."..data_util.mod_prefix .. "universe-explorer"}, + order = "a", + action = "lua", + style = "blue", + icon = { + filename = "__space-exploration-graphics__/graphics/icons/astronomic/planet-orbit.png", + flags = { + "icon" + }, + priority = "extra-high-no-scale", + scale = 1, + size = 64 + }, + small_icon = { + filename = "__space-exploration-graphics__/graphics/icons/astronomic/planet-orbit.png", + flags = { + "icon" + }, + priority = "extra-high-no-scale", + scale = 1, + size = 64 + }, + disabled_small_icon = { + filename = "__space-exploration-graphics__/graphics/icons/astronomic/planet-orbit.png", + flags = { + "icon" + }, + priority = "extra-high-no-scale", + scale = 1, + size = 64 + }, + }, + { + type = "shortcut", + name = data_util.mod_prefix .. "respawn", + localised_name = { "shortcut."..data_util.mod_prefix .. "respawn"}, + order = "a", + action = "lua", + style = "red", + icon = { + filename = "__space-exploration-graphics__/graphics/icons/scull.png", + flags = { + "icon" + }, + priority = "extra-high-no-scale", + scale = 1, + size = 64 + }, + small_icon = { + filename = "__space-exploration-graphics__/graphics/icons/scull.png", + flags = { + "icon" + }, + priority = "extra-high-no-scale", + scale = 1, + size = 64 + }, + disabled_small_icon = { + filename = "__space-exploration-graphics__/graphics/icons/shortcut-toolbar/respawn-24-black.png", + flags = { + "icon" + }, + priority = "extra-high-no-scale", + scale = 1, + size = 24 + }, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/signal.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/signal.lua new file mode 100644 index 0000000..2fef312 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/signal.lua @@ -0,0 +1,237 @@ +local data_util = require("data_util") + +-- utility sprites don't work right now so use hidden signals +data:extend({ + { + type = "virtual-signal", + name = "signal-speed", + icon = "__space-exploration-graphics__/graphics/icons/signal/signal-speed.png", + icon_size = 64, + subgroup = "virtual-signal-utility", + order = "aai-speed" + }, + { + type = "virtual-signal", + name = "signal-distance", + icon = "__space-exploration-graphics__/graphics/icons/signal/signal-distance.png", + icon_size = 64, + subgroup = "virtual-signal-utility", + order = "aai-distance" + }, + { + type = "virtual-signal", + name = data_util.mod_prefix .. "star", + icon = "__space-exploration-graphics__/graphics/icons/astronomic/star.png", + icon_size = 64, + subgroup = "virtual-signal-utility", + order = "z-a-a", + }, + { + type = "virtual-signal", + name = data_util.mod_prefix .. "planet", + icon = "__space-exploration-graphics__/graphics/icons/astronomic/planet-small.png", + icon_size = 64, + subgroup = "virtual-signal-utility", + order = "z-a-b", + }, + { + type = "virtual-signal", + name = data_util.mod_prefix .. "planet-orbit", + icon = "__space-exploration-graphics__/graphics/icons/astronomic/planet-orbit.png", + icon_size = 64, + subgroup = "virtual-signal-utility", + order = "z-a-b", + }, + { + type = "virtual-signal", + name = data_util.mod_prefix .. "moon", + icon = "__space-exploration-graphics__/graphics/icons/astronomic/moon-small.png", + icon_size = 64, + subgroup = "virtual-signal-utility", + order = "z-a-c", + }, + { + type = "virtual-signal", + name = data_util.mod_prefix .. "moon-orbit", + icon = "__space-exploration-graphics__/graphics/icons/astronomic/moon-orbit.png", + icon_size = 64, + subgroup = "virtual-signal-utility", + order = "z-a-c", + }, + { + type = "virtual-signal", + name = data_util.mod_prefix .. "asteroid-belt", + icon = "__space-exploration-graphics__/graphics/icons/astronomic/asteroid-belt.png", + icon_size = 64, + subgroup = "virtual-signal-utility", + order = "z-a-d", + }, + { + type = "virtual-signal", + name = data_util.mod_prefix .. "asteroid-field", + icon = "__space-exploration-graphics__/graphics/icons/astronomic/asteroid-field.png", + icon_size = 64, + subgroup = "virtual-signal-utility", + order = "z-a-e", + }, + { + type = "virtual-signal", + name = data_util.mod_prefix .. "anomaly", + icon = "__space-exploration-graphics__/graphics/icons/astronomic/anomaly.png", + icon_size = 64, + subgroup = "virtual-signal-utility", + order = "z-a-f", + }, + { + type = "virtual-signal", + name = data_util.mod_prefix .. "meteor", + icon = "__space-exploration-graphics__/graphics/icons/astronomic/meteor.png", + icon_size = 64, + subgroup = "virtual-signal-utility", + order = "z-a-g", + }, + { + type = "virtual-signal", + name = data_util.mod_prefix .. "cargo-rocket", + icon = "__space-exploration-graphics__/graphics/icons/cargo-rocket.png", + icon_size = 64, + subgroup = "virtual-signal-utility", + order = "z-a-g", + }, + { + type = "virtual-signal", + name = data_util.mod_prefix .. "spaceship", + icon = "__space-exploration-graphics__/graphics/icons/spaceship.png", + icon_size = 64, + subgroup = "virtual-signal-utility", + order = "z-a-g-b", + }, + { + type = "virtual-signal", + name = data_util.mod_prefix .. "spaceship-launch", + icon = "__space-exploration-graphics__/graphics/icons/spaceship-launch.png", + icon_size = 64, + subgroup = "virtual-signal-utility", + order = "z-a-g-b-a", + }, + { + type = "virtual-signal", + name = data_util.mod_prefix .. "anchor-using-left-clamp", + icon = "__space-exploration-graphics__/graphics/icons/anchor-using-left-clamp.png", + icon_size = 64, + subgroup = "virtual-signal-utility", + order = "z-a-g-b-b", + }, + { + type = "virtual-signal", + name = data_util.mod_prefix .. "anchor-using-right-clamp", + icon = "__space-exploration-graphics__/graphics/icons/anchor-using-right-clamp.png", + icon_size = 64, + subgroup = "virtual-signal-utility", + order = "z-a-g-b-c", + }, + { + type = "virtual-signal", + name = data_util.mod_prefix .. "anchor-to-left-clamp", + icon = "__space-exploration-graphics__/graphics/icons/anchor-to-left-clamp.png", + icon_size = 64, + subgroup = "virtual-signal-utility", + order = "z-a-g-b-d", + }, + { + type = "virtual-signal", + name = data_util.mod_prefix .. "anchor-to-right-clamp", + icon = "__space-exploration-graphics__/graphics/icons/anchor-to-right-clamp.png", + icon_size = 64, + subgroup = "virtual-signal-utility", + order = "z-a-g-b-e", + }, + { + type = "virtual-signal", + name = data_util.mod_prefix .. "remote-view", + icon = "__space-exploration-graphics__/graphics/icons/uplink.png", + icon_size = 64, + subgroup = "virtual-signal-utility", + order = "z-z-f", + }, + { + type = "virtual-signal", + name = data_util.mod_prefix .. "death", + icon = "__space-exploration-graphics__/graphics/icons/scull.png", + icon_size = 64, + subgroup = "virtual-signal-utility", + order = "z-z-g", + }, + { + type = "virtual-signal", + name = data_util.mod_prefix .. "character-corpse", + icon = "__space-exploration-graphics__/graphics/icons/character-corpse.png", + icon_size = 64, + subgroup = "virtual-signal-utility", + order = "z-z-h", + }, + { + type = "virtual-signal", + name = data_util.mod_prefix .. "ruin", + icon = "__space-exploration-graphics__/graphics/icons/ruin.png", + icon_size = 64, + subgroup = "virtual-signal-utility", + order = "z-z-h-b", + }, + { + type = "virtual-signal", + name = data_util.mod_prefix .. "accolade", + icon = "__space-exploration-graphics__/graphics/icons/accolade.png", + icon_size = 64, + subgroup = "virtual-signal-utility", + order = "z-z-i", + }, + { + type = "virtual-signal", + name = data_util.mod_prefix .. "pin", + icon = "__space-exploration-graphics__/graphics/icons/signal/pin.png", + icon_size = 64, + subgroup = "virtual-signal-utility", + order = "z-z-i-b", + }, + { + type = "virtual-signal", + name = data_util.mod_prefix .. "remove", + icon = "__space-exploration-graphics__/graphics/icons/remove.png", + icon_size = 64, + subgroup = "virtual-signal-utility", + order = "z-z-j", + }, + { + type = "virtual-signal", + name = data_util.mod_prefix .. "radius", + icon = "__space-exploration-graphics__/graphics/icons/radius.png", + icon_size = 64, + subgroup = "virtual-signal-utility", + order = "z-z-k", + }, + { + type = "virtual-signal", + name = data_util.mod_prefix .. "hierarchy", + icon = "__space-exploration-graphics__/graphics/icons/hierarchy.png", + icon_size = 64, + subgroup = "virtual-signal-utility", + order = "z-z-l", + }, + { + type = "virtual-signal", + name = data_util.mod_prefix .. "beacon-overload", + icon = "__space-exploration-graphics__/graphics/icons/alerts/beacon-overload.png", + icon_size = 64, + subgroup = "virtual-signal-utility", + order = "z-z-m", + }, + { + type = "virtual-signal", + name = data_util.mod_prefix .. "heat", + icon = "__space-exploration-graphics__/graphics/icons/heat.png", + icon_size = 64, + subgroup = "virtual-signal-utility", + order = "z-z-n", + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/sound.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/sound.lua new file mode 100644 index 0000000..af74a0c --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/sound.lua @@ -0,0 +1,113 @@ +local data_util = require("data_util") + +-- use projectile for sounds becuase they are can be positioned, moved, and removed at a specific time. +-- the entity MUST be removed otherwise it will loop forever +local function make_sound_continous(name, path, volume) + data:extend( { + { + type = "projectile", + name = data_util.mod_prefix .. "sound-continous-" .. name, + acceleration = 0, + animation = { + filename = "__space-exploration-graphics__/graphics/blank.png", + frame_count = 1, + height = 1, + line_length = 1, + priority = "high", + width = 1 + }, + flags = { "not-on-map" }, + working_sound = { + apparent_volume = volume or 1, + sound = { + { + filename = path, + volume = volume or 1 + } + } + } + } + }) +end + +-- use an explosion because it if fire and forget +local function make_sound(name, path, volume) + data:extend( { + { + type = "explosion", + name = data_util.mod_prefix .. "sound-" .. name, + animations = { { + filename = "__space-exploration-graphics__/graphics/blank.png", + frame_count = 1, + height = 1, + line_length = 1, + priority = "high", + width = 1 + }}, + flags = { "not-on-map" }, + sound = { + aggregation = { max_count = 1, remove = true }, + variations = { + { + filename = path, + volume = volume or 1 + }, + } + }, + } + }) +end + +make_sound("machine-close", "__base__/sound/machine-close.ogg", 1) +make_sound("machine-open", "__base__/sound/machine-open.ogg", 1) +make_sound("silo-clamps-off", "__base__/sound/silo-clamps-off.ogg", 1.5) +make_sound("silo-clamps-on", "__base__/sound/silo-clamps-on.ogg", 1.5) +make_sound("silo-doors", "__base__/sound/silo-doors.ogg", 1) +make_sound("silo-raise-rocket", "__base__/sound/silo-raise-rocket.ogg", 1) +make_sound("silo-rocket", "__base__/sound/silo-rocket.ogg", 1) +make_sound_continous("silo-rocket", "__base__/sound/silo-rocket.ogg", 1) +make_sound("train-breaks", "__base__/sound/train-breaks.ogg", 1) + +data:extend({ + { + type = "sound", + name = data_util.mod_prefix .. "meteor-woosh", + aggregation = { max_count = 1, remove = true }, + variations = { + { + filename = "__space-exploration__/sound/meteor-woosh.ogg", + volume = 1 + }, + } + }, + { + type = "sound", + name = data_util.mod_prefix .. "spaceship-woosh", + aggregation = { max_count = 1, remove = true }, + variations = { + { + filename = "__space-exploration__/sound/spaceship-woosh.ogg", + volume = 1 + }, + } + }, + { + type = "sound", + name = data_util.mod_prefix .. "game-lost", + aggregation = { max_count = 1, remove = true }, + variations = { + { + filename = "__core__/sound/game-lost.ogg", + volume = 1 + }, + } + } +}) + + +make_sound_continous("gate-turning", "__space-exploration__/sound/gate-turning.ogg", 1) +make_sound_continous("gate-power-on", "__space-exploration__/sound/gate-power-on.ogg", 1.2) +make_sound("gate-power-up", "__space-exploration__/sound/gate-power-up.ogg", 1) +make_sound("gate-power-down", "__space-exploration__/sound/gate-power-down.ogg", 0.9) +make_sound("gate-button", "__space-exploration__/sound/gate-button.ogg", 1) +make_sound("gate-lock", "__space-exploration__/sound/gate-lock.ogg", 1) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/styles.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/styles.lua new file mode 100644 index 0000000..b2827fb --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/styles.lua @@ -0,0 +1,605 @@ +local data_util = require("data_util") + +local ui_width = 300 +local margin_right = 20 +local space_for_button = 36 + + +data.raw["gui-style"]["default"]["space_platform_textfield"] = { + width = ui_width - margin_right, + type = "textbox_style", +} +data.raw["gui-style"]["default"]["space_platform_textfield_short"] = { + width = ui_width - margin_right - space_for_button, + type = "textbox_style", +} +data.raw["gui-style"]["default"]["space_platform_label"] = { + width = ui_width - margin_right, + parent= "label", + type = "label_style", + single_line = false, +} +data.raw["gui-style"]["default"]["space_platform_label_short"] = { + width = ui_width - margin_right - space_for_button, + parent= "label", + type = "label_style", + single_line = false, +} +data.raw["gui-style"]["default"]["space_platform_title"] = { + width = ui_width - margin_right, + parent= "label", + type = "label_style", + font = "default-large-semibold", + single_line = false, +} +data.raw["gui-style"]["default"]["space_platform_title_short"] = { + width = ui_width - margin_right - space_for_button, + parent= "label", + type = "label_style", + font = "default-large-semibold", + single_line = false, +} +data.raw["gui-style"]["default"]["space_platform_fieldset"] = { + width = ui_width - margin_right, + type = "frame_style", + parent = "frame", +} +data.raw["gui-style"]["default"]["space_platform_container"] = { + minimal_width = ui_width, + type = "frame_style", + parent = "frame", +} +data.raw["gui-style"]["default"]["space_platform_sprite_button"] = { + type = "button_style", + parent = "button", + width = 32, + height = 32, + top_padding = 1, + right_padding = 1, + bottom_padding = 1, + left_padding = 1, +} +data.raw["gui-style"]["default"]["space_platform_sprite_button_small"] = { + type = "button_style", + parent = "space_platform_sprite_button", + width = 20, + height = 20, +} +data.raw["gui-style"]["default"]["space_platform_button"] = { + type = "button_style", + parent = "button", +} +data.raw["gui-style"]["default"]["space_platform_progressbar_capsule"] = { + type = "progressbar_style", + parent = "progressbar", + color = { + r = 0/255, + g = 255/255, + b = 0/255 + } +} +data.raw["gui-style"]["default"]["space_platform_progressbar_sections"] = { + type = "progressbar_style", + parent = "progressbar", + color = { + r = 255/255, + g = 255/255, + b = 0/255 + } +} +data.raw["gui-style"]["default"]["space_platform_progressbar_fuel"] = { + type = "progressbar_style", + parent = "progressbar", + color = { + r = 233/255, + g = 93/255, + b = 0/255 + } +} +data.raw["gui-style"]["default"]["space_platform_progressbar_cargo"] = { + type = "progressbar_style", + parent = "progressbar", + color = { + r = 52/255, + g = 107/255, + b = 219/255 + } +} +data.raw["gui-style"]["default"]["space_platform_progressbar_integrity"] = { + type = "progressbar_style", + parent = "progressbar", + color = { + r = 233/255, + g = 0/255, + b = 0/255 + } +} +data.raw["gui-style"]["default"]["spaceship_progressbar_energy"] = { + type = "progressbar_style", + parent = "progressbar", + bar_width = 24, + color = { + r = 233/255, + g = 120/255, + b = 0/255 + } +} +data.raw["gui-style"]["default"]["spaceship_progressbar_streamline"] = { + type = "progressbar_style", + parent = "progressbar", + bar_width = 24, + color = { + r = 0/255, + g = 120/255, + b = 253/255 + } +} +data.raw["gui-style"]["default"]["spaceship_progressbar_integrity"] = { + type = "progressbar_style", + parent = "progressbar", + bar_width = 24, + color = { + r = 233/255, + g = 0/255, + b = 0/255 + } +} +yellow_button_glow_color = {150, 150, 90, 128} +yellow_arrow_tileset = {arrows_tileset = {192, 232}, composition_tileset = {34, 17}} +data.raw["gui-style"]["default"]["yellow_confirm_button"] = { + type = "button_style", + parent = "dialog_button", + horizontal_align = "right", + left_click_sound = {{ filename = "__core__/sound/gui-red-confirm.ogg", volume = 0.7 }}, + default_graphical_set = arrow_forward(yellow_arrow_tileset, arrow_idle_index, "shadow", default_dirt_color), + hovered_graphical_set = arrow_forward(yellow_arrow_tileset, arrow_disabled_index, "glow", yellow_button_glow_color), -- using disabled_index instead of the sensible index is required, because the sprites for the other indices don't exist for yellow + clicked_graphical_set = arrow_forward(yellow_arrow_tileset, arrow_disabled_index), + disabled_font_color = {0.5, 0.5, 0.5}, + disabled_graphical_set = arrow_forward(yellow_arrow_tileset, arrow_disabled_index, "glow", default_dirt_color) +} +data.raw["gui-style"]["default"]["view_zone_button"] = { + type = "button_style", + vertical_align = "center", + scale = 1, + scalable = false, + width = 300, + height = 32, + horizontally_stretchable = "off", + vertically_stretchable = "off", + horizontally_squashable = "off", + vertically_squashable = "off", + top_padding = 0, + bottom_padding = 0, + left_padding = 0, + right_padding = 0, + top_margin = 0, + bottom_margin = 0, + left_margin = 0, + right_margin = 0, +} +data.raw["gui-style"]["default"]["view_zone_button_flow"] = { + type = "horizontal_flow_style", + vertical_align = "center", + scale = 1, + scalable = false, + width = 300, + height = 32, + horizontally_stretchable = "off", + vertically_stretchable = "off", + horizontally_squashable = "off", + vertically_squashable = "off", + top_padding = 0, + bottom_padding = 0, + left_padding = 0, + right_padding = 0, + top_margin = 0, + bottom_margin = 0, + left_margin = 0, + right_margin = 0, +} +data.raw["gui-style"]["default"]["view_zone_button_label"] = { + type = "label_style", + scale = 1, + scalable = false, + width = 200, + height = 32, + horizontally_stretchable = "off", + vertically_stretchable = "off", + horizontally_squashable = "off", + vertically_squashable = "off", + top_padding = 0, + bottom_padding = 0, + left_padding = 0, + right_padding = 0, + top_margin = 0, + bottom_margin = 0, + left_margin = 0, + right_margin = 0, +} +data.raw["gui-style"]["default"]["view_zone_button_sprite"] = { + type = "button_style", + parent = "map_generator_preview_button", + icon_horizontal_align = "left", + width = 300 +} + +--icon_horizontal_align = "left", + +-- ZONELIST UI +data.raw["gui-style"]["default"]["zonelist_priority_textfield"] = { + type = "textbox_style", + default_background = { + base = { + center = { + position = {43,8}, + size = 1 + }, + corner_size = 8, + draw_type = "inner", + position = {34, 0} + }, + shadow = nil + }, + active_background = { + base = { + center = { + position = {60,26}, + size = 1 + }, + corner_size = 8, + draw_type = "inner", + position = {51, 17} + }, + } +} +data.raw["gui-style"]["default"]["zonelist_priority_button"] = { + default_graphical_set = { + base = { + corner_size = 8, + position = { + 247, + 17 + } + }, + --[[shadow = { + corner_size = 8, + draw_type = "outer", + position = { + 395, + 86 + } + }]]-- + }, + type = "button_style" +} + +data.raw["gui-style"]["default"]["zonelist_content_pane"] = { + type = "scroll_pane_style", + --extra_padding_when_activated = -4, + graphical_set = { + base = {}, + shadow = nil + }, + vertical_scrollbar_style = { + background_graphical_set = { + blend_mode = "multiplicative-with-alpha", + corner_size = 8, + opacity = 0.7, + position = { + 0, + 72 + } + }, + type = "vertical_scrollbar_style" + }, + vertically_stretchable = "on", + horizontally_squashable = "on", + padding = 12, +} + +data.raw["gui-style"]["default"]["zonelist_progressbar"] = { + type = "progressbar_style", + parent = "progressbar", + bar_width = 24, + color = { + r = 220/255, + g = 200/255, + b = 0/255 + } +} + +data.raw["gui-style"]["default"]["zonelist_rows_pane"] = { + type = "scroll_pane_style", + graphical_set = { + base = {}, + shadow = nil + }, + vertical_scrollbar_style = { + background_graphical_set = { + blend_mode = "multiplicative-with-alpha", + corner_size = 8, + opacity = 0.7, + position = { + 0, + 72 + } + }, + type = "vertical_scrollbar_style" + }, + vertically_stretchable = "on", + horizontally_squashable = "on", + padding = 0, + extra_padding_when_activated = 0, +} + + +data.raw["gui-style"]["default"]["zonelist_row_button"] = { + type = "button_style", + horizontally_stretchable = "on", + horizontally_squashable = "on", + bottom_margin = -3, + default_font_color = {250/255,250/255,250/255}, + hovered_font_color = { 0.0, 0.0, 0.0 }, + selected_clicked_font_color = { 0.97, 0.54, 0.15 }, + selected_font_color = { 0.97, 0.54, 0.15 }, + selected_hovered_font_color = { 0.97, 0.54, 0.15 }, + clicked_graphical_set = { + corner_size = 8, + position = { 51, 17 } + }, + default_graphical_set = { + corner_size = 8, + position = { 208, 17 } + }, + disabled_graphical_set = { + corner_size = 8, + position = { 17, 17 } + }, + hovered_graphical_set = { + base = { + corner_size = 8, + position = { 34, 17 } + } + } +} + +data.raw["gui-style"]["default"]["zonelist_row_button_selected"] = { + type = "button_style", + parent = "zonelist_row_button", + top_padding = 3, + left_padding = 11, + default_font_color = { 0.0, 0.0, 0.0 }, + hovered_font_color = { 0.0, 0.0, 0.0 }, + selected_clicked_font_color = { 0.0, 0.0, 0.0 }, + selected_font_color = { 0.0, 0.0, 0.0 }, + selected_hovered_font_color = { 0.0, 0.0, 0.0 }, + clicked_graphical_set = { + border = 1, + filename = "__core__/graphics/gui.png", + position = { 75, 108 }, + scale = 1, + size = 36 + }, + default_graphical_set = { + border = 1, + filename = "__core__/graphics/gui.png", + position = {75,108}, + scale = 1, + size = 36 + }, + hovered_graphical_set = { + border = 1, + filename = "__core__/graphics/gui.png", + position = {75,108}, + scale = 1, + size = 36 + }, +} + +data.raw["gui-style"]["default"]["se_frame_deep_slots_small"] = { + type = "frame_style", + parent = "slot_button_deep_frame", + background_graphical_set = { + position = {282, 17}, + corner_size = 8, + overall_tiling_vertical_size = 32, + overall_tiling_vertical_spacing = 8, + overall_tiling_vertical_padding = 4, + overall_tiling_horizontal_size = 32, + overall_tiling_horizontal_spacing = 8, + overall_tiling_horizontal_padding = 4 + } +} + +data.raw["gui-style"]["default"]["se_sprite-button_inset"] = { + type = "button_style", + size = 40, + padding = 0, + default_graphical_set = data.raw["gui-style"]["default"].textbox.default_background, + hovered_graphical_set = data.raw["gui-style"]["default"].rounded_button.clicked_graphical_set, + clicked_graphical_set = data.raw["gui-style"]["default"].textbox.active_background, + disabled_graphical_set = data.raw["gui-style"]["default"].rounded_button.disabled_graphical_set +} + +data.raw["gui-style"]["default"]["se_sprite-button_inset_tiny"] = { + type = "button_style", + parent = "se_sprite-button_inset", + size = 32 +} + +local graphic_set_down = { + default_graphical_set = { + base = { + center = { + position = {43,8}, + size = 1 + }, + corner_size = 8, + draw_type = "inner", + position = {34, 0} + }, + shadow = { + corner_size = 8, + draw_type = "outer", + position = { + 440, + 24 + } + } + }, +} +local graphic_set_active_a = { + default_font_color = { 0.0, 0.0, 0.0 }, + hovered_font_color = { 0.0, 0.0, 0.0 }, + selected_clicked_font_color = { 0.0, 0.0, 0.0 }, + selected_font_color = { 0.0, 0.0, 0.0 }, + selected_hovered_font_color = { 0.0, 0.0, 0.0 }, + default_graphical_set = { + base = { + corner_size = 8, + position = { + 369, + 17 + } + }, + shadow = { + corner_size = 8, + draw_type = "outer", + position = { + 440, + 24 + } + } + }, +} +data.raw["gui-style"]["default"]["se_button_discovery"] = { + type = "button_style", + parent = "se_generic_button", + width = 165, + height = 90, + top_padding = 20, + horizontal_align = "center", + vertical_align = "center" +} +data.raw["gui-style"]["default"]["se_button_discovery_down"] = { + type = "button_style", + parent = "se_generic_button_down", + width = 165, + height = 90, + top_padding = 20, + horizontal_align = "center", + vertical_align = "center" +} +data.raw["gui-style"]["default"]["se_button_discovery_active"] = { + type = "button_style", + parent = "se_generic_button_active", + width = 165, + height = 90, + top_padding = 20, + horizontal_align = "center", + vertical_align = "center" +} + +data.raw["gui-style"]["default"]["se_button_discovery_any"] = { + type = "button_style", + parent = "se_generic_button", + width = 340, + height = 70, + padding = 10, + horizontal_align = "center", + vertical_align = "center", + horizontally_stretchable = "on", + font="heading-2", +} +data.raw["gui-style"]["default"]["se_button_discovery_any_down"] = { + type = "button_style", + parent = "se_generic_button_down", + width = 340, + height = 70, + padding = 10, + horizontal_align = "center", + vertical_align = "center", + horizontally_stretchable = "on", + font="heading-2", +} +data.raw["gui-style"]["default"]["se_button_discovery_any_active"] = { + type = "button_style", + parent = "se_generic_button_active", + width = 340, + height = 70, + padding = 10, + horizontal_align = "center", + vertical_align = "center", + horizontally_stretchable = "on", + font="heading-2", +} + +local graphic_set_active_b = { + default_graphical_set = { + base = { + center = { + position = {43+17,8+17}, + size = 1 + }, + corner_size = 8, + draw_type = "inner", + position = {34+17, 0+17} + }, + shadow = { + corner_size = 8, + draw_type = "outer", + position = { + 440, + 24 + } + } + } +} + +data_util.extend_style("frame_button", "se_generic_button", { + padding = -4, + default_font_color = { 1,1,1 }, +}) +data_util.extend_style("se_generic_button", "se_generic_button_down", graphic_set_down) +data_util.extend_style("se_generic_button", "se_generic_button_active", graphic_set_active_a) + +local discovery_overrides = { + width = 165, + height = 90, + top_padding = 20, + horizontal_align = "center", + vertical_align = "center" +} +data_util.extend_style("se_generic_button", "se_button_discovery", discovery_overrides) +data_util.extend_style("se_generic_button_down", "se_button_discovery_down", discovery_overrides) +data_util.extend_style("se_generic_button_active", "se_button_discovery_active", discovery_overrides) + +local discovery_any_overrides = data_util.apply_styles(table.deepcopy(discovery_overrides), { + width = 340, + height = 70, + padding = 10, + horizontally_stretchable = "on", + font="heading-2", +}) +data_util.extend_style("se_generic_button", "se_button_discovery_any", discovery_any_overrides) +data_util.extend_style("se_generic_button_down", "se_button_discovery_any_down", discovery_any_overrides) +data_util.extend_style("se_generic_button_active", "se_button_discovery_any_active", discovery_any_overrides) + +data_util.extend_style("frame_button", "se_generic_square_button", { + size = 28, + top_padding = -2, + top_margin = -4, + default_font_color = { 1,1,1 }, +}) +data_util.extend_style("se_generic_square_button", "se_generic_square_button_down", graphic_set_down) +data_util.extend_style("se_generic_square_button", "se_generic_square_button_active", graphic_set_active_b) + +local zone_list_overrides = { + height = 28, + width = 28, + right_margin = 5, + top_margin = -2 +} + +data_util.extend_style("se_generic_square_button", "se_zone_list_filter", zone_list_overrides) +data_util.extend_style("se_generic_square_button_down", "se_zone_list_filter_down", zone_list_overrides) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/technology/bio-upgrades.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/technology/bio-upgrades.lua new file mode 100644 index 0000000..c09d224 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/technology/bio-upgrades.lua @@ -0,0 +1,46 @@ +local data_util = require("data_util") + +local upgrade_types = { + {name = "constitution", tint = {r = 1, g = 0, b = 0}, effects = {{type = "character-health-bonus", modifier = 50}}}, + {name = "strength", tint = {r = 1, g = 1, b = 0}, effects = {{type = "character-inventory-slots-bonus", modifier = 5}}}, + {name = "agility", tint = {r = 0, g = 1, b = 0}, effects = {{type = "character-running-speed", modifier = 0.1}}}, + {name = "dexterity", tint = {r = 0, g = 1, b = 1}, effects = {{type = "character-crafting-speed", modifier = 0.2}}}, + {name = "intelligence", tint = {r = 0, g = 0, b = 1}, effects = {{type = "laboratory-productivity", modifier = 0.05}}}, +} + +for _, upgrade_type in pairs(upgrade_types) do + for i = 1, 5 do + data:extend({ + { + type = "technology", + name = data_util.mod_prefix .. "bio-upgrade-"..upgrade_type.name.."-"..i, + effects = table.deepcopy(upgrade_type.effects), + icons = { + { icon = "__space-exploration-graphics__/graphics/technology/bio-upgrade-base.png", icon_size = 128 }, + { icon = "__space-exploration-graphics__/graphics/technology/bio-upgrade-flask.png", icon_size = 128 }, + { icon = "__space-exploration-graphics__/graphics/technology/bio-upgrade-mask.png", icon_size = 128, tint = upgrade_type.tint}, + }, + order = "e-g", + upgrade = true, + prerequisites = { + i == 5 and (data_util.mod_prefix .. "deep-space-science-pack-1") or (data_util.mod_prefix .. "biological-science-pack-"..math.min(4,i)), + i > 1 and (data_util.mod_prefix .. "bio-upgrade-"..upgrade_type.name.."-"..(i-1)) or nil, + }, + unit = { + count = 2^i*50, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "biological-science-pack-"..math.min(4,i), 1 }, + i == 5 and { data_util.mod_prefix .. "deep-space-science-pack-1", 1 } or nil, + } + }, + }, + }) + end +end + +data.raw.technology[data_util.mod_prefix .. "bio-upgrade-strength-5"].effects[1].modifier = 10 diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/technology/technology.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/technology/technology.lua new file mode 100644 index 0000000..ccfb4ec --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/technology/technology.lua @@ -0,0 +1,5623 @@ +local data_util = require("data_util") +local Shared = require("shared") + +if not data.raw.technology["sand-processing"] then + data:extend({{ + type = "technology", + name = "sand-processing", + effects = { + { type = "unlock-recipe", recipe = "sand-from-stone"}, + }, + icon = "__space-exploration-graphics__/graphics/technology/sand-processing.png", + icon_size = 128, + order = "a", + prerequisites = {}, -- if basic automation existed from AAI Industry then this would not fire anyway + unit = { + count = 10, + ingredients = { + {"automation-science-pack", 1}, + }, + time = 30 + }, + }}) +end + +if not data.raw.technology["glass-processing"] then + data:extend({{ + type = "technology", + name = "glass-processing", + effects = { + { type = "unlock-recipe", recipe = "glass-from-sand"}, + }, + icon = "__space-exploration-graphics__/graphics/technology/glass-processing.png", + icon_size = 128, + order = "a", + prerequisites = {"sand-processing"}, + unit = { + count = 40, + ingredients = { + {"automation-science-pack", 1}, + }, + time = 30 + }, + }}) +end + +data:extend({ + -- alphabetical + + { + type = "technology", + name = data_util.mod_prefix .. "rocket-science-pack", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "rocket-science-pack", }, + }, + icons = { + {icon = "__space-exploration-graphics__/graphics/technology/catalogue/deep-1.png", icon_size = 128}, + {icon = "__space-exploration-graphics__/graphics/technology/catalogue/mask-1.png", icon_size = 128}, + }, + order = "g-e-c", + prerequisites = { + data_util.mod_prefix .. "space-science-lab", + }, + unit = { + count = 500, + time = 30, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + } + }, + }, + { + type = "technology", + name = "energy-shield-mk3-equipment", + effects = { + { type = "unlock-recipe", recipe = "energy-shield-mk3-equipment", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/energy-shield-green.png", + icon_size = 128, + order = "g-e-c", + prerequisites = { + "energy-shield-mk2-equipment", + }, + unit = { + count = 1000, + time = 60, + ingredients = {} + }, + }, + { + type = "technology", + name = "energy-shield-mk4-equipment", + effects = { + { type = "unlock-recipe", recipe = "energy-shield-mk4-equipment", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/energy-shield-cyan.png", + icon_size = 128, + order = "g-e-d", + prerequisites = { + "energy-shield-mk3-equipment", + }, + unit = { + count = 2000, + time = 60, + ingredients = {} + }, + }, + { + type = "technology", + name = "energy-shield-mk5-equipment", + effects = { + { type = "unlock-recipe", recipe = "energy-shield-mk5-equipment", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/energy-shield-blue.png", + icon_size = 128, + order = "g-e-e", + prerequisites = { + data_util.mod_prefix.."nanomaterial", + "energy-shield-mk4-equipment", + }, + unit = { + count = 4000, + time = 60, + ingredients = {} + }, + }, + { + type = "technology", + name = "energy-shield-mk6-equipment", + effects = { + { type = "unlock-recipe", recipe = "energy-shield-mk6-equipment", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/energy-shield-magenta.png", + icon_size = 128, + order = "g-e-f", + prerequisites = { + "energy-shield-mk5-equipment", + }, + unit = { + count = 8000, + time = 60, + ingredients = {} + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "adaptive-armour-1", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "adaptive-armour-equipment-1", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/adaptive-armour-1.png", + icon_size = 128, + order = "e-g", + prerequisites = { + "modular-armor", + }, + unit = { + count = 100, + time = 30, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "adaptive-armour-2", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "adaptive-armour-equipment-2", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/adaptive-armour-2.png", + icon_size = 128, + order = "e-g", + prerequisites = { + "military-science-pack", + data_util.mod_prefix .. "adaptive-armour-1", + }, + unit = { + count = 200, + time = 30, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "military-science-pack", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "adaptive-armour-3", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "adaptive-armour-equipment-3", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/adaptive-armour-3.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "rocket-science-pack", + data_util.mod_prefix .. "adaptive-armour-2", + }, + unit = { + count = 300, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "military-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "adaptive-armour-4", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "adaptive-armour-equipment-4", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/adaptive-armour-4.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "material-science-pack-1", + data_util.mod_prefix .. "adaptive-armour-3", + }, + unit = { + count = 400, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "military-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "material-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "adaptive-armour-5", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "adaptive-armour-equipment-5", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/adaptive-armour-5.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "nanomaterial", + data_util.mod_prefix .. "material-science-pack-4", + data_util.mod_prefix .. "adaptive-armour-4", + }, + unit = { + count = 500, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "military-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-4", 1 }, + { data_util.mod_prefix .. "biological-science-pack-4", 1 }, + { data_util.mod_prefix .. "material-science-pack-4", 1 }, + { data_util.mod_prefix .. "energy-science-pack-4", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "aeroframe-pole", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "aeroframe-pole", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/aeroframe-pole.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "processing-beryllium", + data_util.mod_prefix .. "astronomic-science-pack-1", + }, + unit = { + count = 10, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "aeroframe-scaffold", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "aeroframe-scaffold", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "low-density-structure-beryllium"}, + }, + icon = "__space-exploration-graphics__/graphics/technology/aeroframe-scaffold.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "aeroframe-pole", + data_util.mod_prefix .. "astronomic-science-pack-2", + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-2", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "aeroframe-bulkhead", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "aeroframe-bulkhead", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/aeroframe-bulkhead.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "aeroframe-scaffold", + data_util.mod_prefix .. "astronomic-science-pack-3", + }, + unit = { + count = 200, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-3", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "antimatter-reactor", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "antimatter-reactor", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/antimatter-reactor.png", + icon_size = 128, + order = "e-g", + prerequisites = { + "nuclear-power", + data_util.mod_prefix .. "antimatter-production" + }, + unit = { + count = 1000, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "energy-science-pack-4", 1 }, + { data_util.mod_prefix .. "material-science-pack-4", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-4", 1 }, + { data_util.mod_prefix .. "deep-space-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "astronomic-science-pack-1", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "astronomic-science-pack-1", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "astronomic-science-pack-1-no-beryllium", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "cargo-rocket-section-beryllium", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/astronomic-1.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "processing-beryllium", + data_util.mod_prefix .. "space-catalogue-astronomic-1" + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "astronomic-science-pack-2", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "astronomic-science-pack-2", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/astronomic-2.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-catalogue-astronomic-2" + }, + unit = { + count = 100, + time = 60, + ingredients = { + { data_util.mod_prefix .. "astronomic-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "astronomic-science-pack-3", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "astronomic-science-pack-3", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/astronomic-3.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-catalogue-astronomic-3" + }, + unit = { + count = 200, + time = 60, + ingredients = { + { data_util.mod_prefix .. "astronomic-science-pack-1", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-2", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "astronomic-science-pack-4", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "astronomic-science-pack-4", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/astronomic-4.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-catalogue-astronomic-4" + }, + unit = { + count = 500, + time = 60, + ingredients = { + { data_util.mod_prefix .. "astronomic-science-pack-1", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-2", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-3", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "biological-science-pack-1", + effects = { + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "biological-science-pack-1", + }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/biological-1.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "processing-vitamelange", + data_util.mod_prefix .. "space-catalogue-biological-1" + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "biological-science-pack-2", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "biological-science-pack-2", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/biological-2.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-catalogue-biological-2", + data_util.mod_prefix .. "bioscrubber" + }, + unit = { + count = 100, + time = 60, + ingredients = { + { data_util.mod_prefix .. "biological-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "biological-science-pack-3", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "biological-science-pack-3", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/biological-3.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-catalogue-biological-3" + }, + unit = { + count = 200, + time = 60, + ingredients = { + { data_util.mod_prefix .. "biological-science-pack-1", 1 }, + { data_util.mod_prefix .. "biological-science-pack-2", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "biological-science-pack-4", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "biological-science-pack-4", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/biological-4.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-catalogue-biological-4" + }, + unit = { + count = 500, + time = 60, + ingredients = { + { data_util.mod_prefix .. "biological-science-pack-1", 1 }, + { data_util.mod_prefix .. "biological-science-pack-2", 1 }, + { data_util.mod_prefix .. "biological-science-pack-3", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "core-miner", + effects = { + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "core-miner", + }, + }, + icon = "__space-exploration-graphics__/graphics/technology/core-miner.png", + icon_size = 128, + order = "e-g", + prerequisites = { + "oil-processing", + data_util.mod_prefix .. "pulveriser", + "electric-mining" + }, + unit = { + count = 200, + time = 30, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + } + }, + }, + { + name = data_util.mod_prefix .. "cryogun", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "cryogun" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "cryogun-ammo" } + }, + icon = "__space-exploration-graphics__/graphics/technology/cryogun.png", + icon_size = 128, + order = "g-b-z", + prerequisites = { + "military-3", + data_util.mod_prefix .. "aeroframe-pole", + data_util.mod_prefix .. "processing-cryonite", + data_util.mod_prefix .. "space-thermodynamics-laboratory", + }, + type = "technology", + unit = { + count = 200, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-1", 1 }, + }, + time = 60 + } + }, + { + name = data_util.mod_prefix .. "meteor-point-defence", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .."meteor-point-defence" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .."meteor-point-defence-ammo" } + }, + icons = { + {icon="__space-exploration-graphics__/graphics/technology/meteor-point-defence-base.png", icon_size = 128}, + {icon="__space-exploration-graphics__/graphics/technology/meteor-point-defence-mask.png", icon_size = 128, tint = {r=255,g=0,b=0}} + }, + order = "g-b-z", + prerequisites = { + "steel-processing", + "concrete", + "electronics", + }, + type = "technology", + unit = { + count = 200, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + }, + time = 30 + } + }, + { + name = data_util.mod_prefix .. "meteor-defence", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .."meteor-defence" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .."meteor-defence-ammo" } + }, + icon = "__space-exploration-graphics__/graphics/technology/meteor-defence.png", + icon_size = 128, + order = "g-b-z", + prerequisites = { + "laser", + "advanced-electronics-2", + "battery", + data_util.mod_prefix .. "meteor-point-defence", + }, + type = "technology", + unit = { + count = 200, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + }, + time = 30 + } + }, + { + type = "technology", + name = data_util.mod_prefix .. "deep-catalogue-1", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "deep-catalogue-1", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "nano-engineering-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "naquium-structural-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "naquium-energy-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "void-probe" }, + }, + icons = { + {icon = "__space-exploration-graphics__/graphics/technology/catalogue/base-catalogue-1.png", icon_size = 128}, + {icon = "__space-exploration-graphics__/graphics/technology/catalogue/mask-catalogue-1.png", icon_size = 128}, + }, + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "processing-naquium", + data_util.mod_prefix .. "nanomaterial", + data_util.mod_prefix .. "energy-science-pack-4", + data_util.mod_prefix .. "biological-science-pack-4", + data_util.mod_prefix .. "space-supercomputer-3", + }, + unit = { + count = 1000, + time = 60, + ingredients = { + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-4", 1 }, + { data_util.mod_prefix .. "biological-science-pack-4", 1 }, + { data_util.mod_prefix .. "energy-science-pack-4", 1 }, + { data_util.mod_prefix .. "material-science-pack-4", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "deep-catalogue-2", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "deep-catalogue-2", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "singularity-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "hyperlattice-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "timespace-anomaly-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "annihilation-data" }, + }, + icons = { + {icon = "__space-exploration-graphics__/graphics/technology/catalogue/base-catalogue-2.png", icon_size = 128}, + {icon = "__space-exploration-graphics__/graphics/technology/catalogue/mask-catalogue-2.png", icon_size = 128}, + }, + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "antimatter-production", + data_util.mod_prefix .. "deep-space-science-pack-1", + }, + unit = { + count = 100, + time = 60, + ingredients = { + { data_util.mod_prefix .. "deep-space-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "deep-catalogue-3", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "deep-catalogue-3" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-fold-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-fold-data-alt" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-warp-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-warp-data-alt" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-dialation-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-dialation-data-alt" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-injection-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-injection-data-alt" }, + }, + icons = { + {icon = "__space-exploration-graphics__/graphics/technology/catalogue/base-catalogue-3.png", icon_size = 128}, + {icon = "__space-exploration-graphics__/graphics/technology/catalogue/mask-catalogue-3.png", icon_size = 128}, + }, + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "naquium-tessaract", + data_util.mod_prefix .. "deep-space-science-pack-2", + }, + unit = { + count = 100, + time = 60, + ingredients = { + { data_util.mod_prefix .. "deep-space-science-pack-1", 1 }, + { data_util.mod_prefix .. "deep-space-science-pack-2", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "deep-catalogue-4", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "deep-catalogue-4" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "interstellar-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "teleportation-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "wormhole-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "rhga-data" }, + }, + icons = { + {icon = "__space-exploration-graphics__/graphics/technology/catalogue/base-catalogue-4.png", icon_size = 128}, + {icon = "__space-exploration-graphics__/graphics/technology/catalogue/mask-catalogue-4.png", icon_size = 128}, + }, + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "nexus", + data_util.mod_prefix .. "deep-space-science-pack-3", + }, + unit = { + count = 5000, + time = 60, + ingredients = { + { data_util.mod_prefix .. "deep-space-science-pack-1", 1 }, + { data_util.mod_prefix .. "deep-space-science-pack-2", 1 }, + { data_util.mod_prefix .. "deep-space-science-pack-3", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "deep-space-science-pack-1", + effects = { + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "deep-space-science-pack-1", + }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/deep-1.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "deep-catalogue-1", + }, + unit = { + count = 2000, + time = 60, + ingredients = { + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-4", 1 }, + { data_util.mod_prefix .. "biological-science-pack-4", 1 }, + { data_util.mod_prefix .. "energy-science-pack-4", 1 }, + { data_util.mod_prefix .. "material-science-pack-4", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "deep-space-science-pack-2", + effects = { + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "deep-space-science-pack-2", + }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/deep-2.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "deep-catalogue-2", + }, + unit = { + count = 2000, + time = 60, + ingredients = { + { data_util.mod_prefix .. "deep-space-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "deep-space-science-pack-3", + effects = { + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "deep-space-science-pack-3", + }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/deep-3.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "deep-catalogue-3", + }, + unit = { + count = 2000, + time = 60, + ingredients = { + { data_util.mod_prefix .. "deep-space-science-pack-1", 1 }, + { data_util.mod_prefix .. "deep-space-science-pack-2", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "deep-space-science-pack-4", + effects = { + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "deep-space-science-pack-4", + }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/deep-4.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "deep-catalogue-4", + }, + unit = { + count = 2000, + time = 60, + ingredients = { + { data_util.mod_prefix .. "deep-space-science-pack-1", 1 }, + { data_util.mod_prefix .. "deep-space-science-pack-2", 1 }, + { data_util.mod_prefix .. "deep-space-science-pack-3", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "energy-science-pack-1", + effects = { + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "energy-science-pack-1", + }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/energy-1.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "processing-holmium", + data_util.mod_prefix .. "space-catalogue-energy-1" + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "energy-science-pack-2", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "energy-science-pack-2", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/energy-2.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-catalogue-energy-2" + }, + unit = { + count = 100, + time = 60, + ingredients = { + { data_util.mod_prefix .. "energy-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "energy-science-pack-3", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "energy-science-pack-3", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/energy-3.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-catalogue-energy-3" + }, + unit = { + count = 200, + time = 60, + ingredients = { + { data_util.mod_prefix .. "energy-science-pack-1", 1 }, + { data_util.mod_prefix .. "energy-science-pack-2", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "energy-science-pack-4", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "energy-science-pack-4", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/energy-4.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-catalogue-energy-4" + }, + unit = { + count = 500, + time = 60, + ingredients = { + { data_util.mod_prefix .. "energy-science-pack-1", 1 }, + { data_util.mod_prefix .. "energy-science-pack-2", 1 }, + { data_util.mod_prefix .. "energy-science-pack-3", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "fluid-burner-generator", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "fluid-burner-generator", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/fluid-burner-generator.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-radiator-1" + }, + unit = { + count = 200, + time = 30, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "fuel-refining", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "fuel-refinery", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/fuel-refinery.png", + icon_size = 128, + order = "e-g", + prerequisites = { + "oil-processing" + }, + unit = { + count = 100, + time = 30, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "heat-shielding", + effects = { + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "heat-shielding", + }, + }, + icon = "__space-exploration-graphics__/graphics/technology/heat-shielding.png", + icon_size = 128, + order = "e-g", + prerequisites = { + "chemical-science-pack", + "sulfur-processing" + }, + unit = { + count = 100, + time = 30, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "heavy-girder", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "heavy-girder", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/heavy-girder.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "processing-iridium", + data_util.mod_prefix .. "material-science-pack-1", + }, + unit = { + count = 10, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "material-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "heavy-bearing", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "heavy-bearing", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/heavy-bearing.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "heavy-girder", + data_util.mod_prefix .. "material-science-pack-2", + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "material-science-pack-2", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "heavy-composite", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "heavy-composite", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/heavy-composite.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "heavy-bearing", + data_util.mod_prefix .. "material-science-pack-3", + }, + unit = { + count = 200, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "material-science-pack-3", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "heavy-assembly", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "heavy-assembly", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/heavy-assembly.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "heavy-composite", + data_util.mod_prefix .. "material-science-pack-4", + }, + unit = { + count = 400, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "material-science-pack-4", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "holmium-cable", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "holmium-cable", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "processing-unit-holmium", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/holmium-cable.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "processing-holmium", + data_util.mod_prefix .. "energy-science-pack-1", + }, + unit = { + count = 10, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "energy-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "holmium-solenoid", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "holmium-solenoid", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/holmium-solenoid.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "holmium-cable", + data_util.mod_prefix .. "energy-science-pack-2", + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "energy-science-pack-2", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "ion-engine", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "spaceship-ion-engine" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "spaceship-ion-booster-tank" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/ion-engine.png", + icon_size = 256, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "spaceship", + data_util.mod_prefix .. "holmium-solenoid", + }, + unit = { + count = 1600, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .."astronomic-science-pack-3", 1 }, + { data_util.mod_prefix .."energy-science-pack-2", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "quantum-processor", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "quantum-processor", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/quantum-processor.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "holmium-solenoid", + data_util.mod_prefix .. "energy-science-pack-3", + }, + unit = { + count = 200, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "energy-science-pack-3", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "dynamic-emitter", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "dynamic-emitter", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/dynamic-emitter.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "quantum-processor", + data_util.mod_prefix .. "energy-science-pack-4", + }, + unit = { + count = 400, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "energy-science-pack-4", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "lattice-pressure-vessel", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "lattice-pressure-vessel", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/lattice-pressure-vessel.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "aeroframe-bulkhead", + data_util.mod_prefix .. "astronomic-science-pack-4", + }, + unit = { + count = 400, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-4", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "long-range-star-mapping", + effects = {}, + icon = "__space-exploration-graphics__/graphics/technology/long-range-star-mapping.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "deep-space-science-pack-2", + }, + max_level = "30", -- probably shouldn't go over 40 + unit = { + count_formula = "1.25^L*100", + time = 60, + ingredients = { + { data_util.mod_prefix .. "astronomic-science-pack-1", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-2", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-3", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-4", 1 }, + { data_util.mod_prefix .. "deep-space-science-pack-1", 1 }, + { data_util.mod_prefix .. "deep-space-science-pack-2", 1 }, + } + }, + enabled = false -- unlocked by building gate + }, + { + type = "technology", + name = data_util.mod_prefix .. "dimensional-anchor", + effects = { + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "dimensional-anchor", + }, + }, + icon = "__space-exploration-graphics__/graphics/technology/dimensional-anchor.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "naquium-tessaract", + }, + unit = { + count_formula = "1000", + time = 60, + ingredients = { + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-1", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-2", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-3", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-4", 1 }, + { data_util.mod_prefix .. "energy-science-pack-4", 1 }, + { data_util.mod_prefix .. "deep-space-science-pack-1", 1 }, + { data_util.mod_prefix .. "deep-space-science-pack-2", 1 }, + { data_util.mod_prefix .. "deep-space-science-pack-3", 1 }, + } + }, + enabled = false -- unlocked by building gate + }, + + { + type = "technology", + name = data_util.mod_prefix .. "material-science-pack-1", + effects = { + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "material-science-pack-1", + }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/material-1.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "processing-iridium", + data_util.mod_prefix .. "space-catalogue-material-1" + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "material-science-pack-2", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "material-science-pack-2", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/material-2.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-catalogue-material-2" + }, + unit = { + count = 100, + time = 60, + ingredients = { + { data_util.mod_prefix .. "material-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "material-science-pack-3", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "material-science-pack-3", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/material-3.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-catalogue-material-3" + }, + unit = { + count = 200, + time = 60, + ingredients = { + { data_util.mod_prefix .. "material-science-pack-1", 1 }, + { data_util.mod_prefix .. "material-science-pack-2", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "material-science-pack-4", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "material-science-pack-4", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/material-4.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-catalogue-material-4" + }, + unit = { + count = 500, + time = 60, + ingredients = { + { data_util.mod_prefix .. "material-science-pack-1", 1 }, + { data_util.mod_prefix .. "material-science-pack-2", 1 }, + { data_util.mod_prefix .. "material-science-pack-3", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "medpack", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "medpack", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/medpack-1.png", + icon_size = 128, + order = "a-a-a", + unit = { + count = 10, + time = 10, + ingredients = { + { "automation-science-pack", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "medpack-2", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "medpack-plastic", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "medpack-2", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/medpack-2.png", + icon_size = 128, + order = "a-a-b", + prerequisites = { + data_util.mod_prefix .. "lifesupport-facility", + data_util.mod_prefix .. "medpack" + }, + unit = { + count = 200, + time = 30, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "medpack-3", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "medpack-3", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/medpack-3.png", + icon_size = 128, + order = "a-b", + prerequisites = { + data_util.mod_prefix .. "biological-science-pack-1", + data_util.mod_prefix .. "medpack-2" + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "biological-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "medpack-4", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "medpack-4", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/medpack-4.png", + icon_size = 128, + order = "a-c", + prerequisites = { + data_util.mod_prefix .. "biological-science-pack-4", + data_util.mod_prefix .. "medpack-3" + }, + unit = { + count = 500, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "biological-science-pack-4", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "naquium-cube", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "naquium-cube", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/naquium-cube.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "deep-space-science-pack-1", + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-4", 1 }, + { data_util.mod_prefix .. "energy-science-pack-4", 1 }, + { data_util.mod_prefix .. "material-science-pack-4", 1 }, + { data_util.mod_prefix .. "deep-space-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "naquium-tessaract", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "naquium-tessaract", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "naquium-tessaract-alt", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/naquium-tessaract.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "arcosphere-folding", + }, + unit = { + count = 500, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-4", 1 }, + { data_util.mod_prefix .. "energy-science-pack-4", 1 }, + { data_util.mod_prefix .. "material-science-pack-4", 1 }, + { data_util.mod_prefix .. "deep-space-science-pack-2", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "naquium-processor", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "naquium-processor", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "naquium-processor-alt", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/naquium-processor.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "deep-space-science-pack-3", + }, + unit = { + count = 1000, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-4", 1 }, + { data_util.mod_prefix .. "energy-science-pack-4", 1 }, + { data_util.mod_prefix .. "material-science-pack-4", 1 }, + { data_util.mod_prefix .. "deep-space-science-pack-3", 1 }, + } + }, + }, + + { + name = data_util.mod_prefix .. "plague", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "plague-bomb" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/plague.png", + icon_size = 128, + order = "g-b-z", + prerequisites = { + "military-3", + "rocketry", + data_util.mod_prefix .. "biological-science-pack-4", + }, + type = "technology", + unit = { + count = 1000, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "biological-science-pack-4", 1 }, + }, + time = 60 + } + }, + + { + type = "technology", + name = data_util.mod_prefix .. "processing-beryllium", + effects = { + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "beryllium-ore-crushed"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "beryllium-sulfate"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "beryllium-hydroxide"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "beryllium-powder"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "beryllium-ingot"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "beryllium-plate"}, + }, + icon = "__space-exploration-graphics__/graphics/technology/beryllium-processing.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "processing-cryonite", + data_util.mod_prefix .. "rocket-science-pack", + }, + unit = { + count = 500, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "processing-cryonite", + effects = { + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "cryonite-crushed"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "cryonite-washed"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "cryonite-rod"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "cryonite-ion-exchange-beads"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "cryonite-slush"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "cryonite-lubricant"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "cryonite-to-water-ice"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "melting-water-ice"}, + }, + icon = "__space-exploration-graphics__/graphics/technology/cryonite-processing.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "pulveriser", + "industrial-furnace", + }, + unit = { + count = 500, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "processing-holmium", + effects = { + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "holmium-ore-crushed"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "holmium-ore-washed"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "holmium-powder"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "holmium-ingot"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "holmium-plate"}, + }, + icon = "__space-exploration-graphics__/graphics/technology/holmium-processing.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "processing-vulcanite", + data_util.mod_prefix .. "rocket-science-pack", + }, + unit = { + count = 500, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "processing-iridium", + effects = { + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "iridium-ore-crushed"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "iridium-ore-washed"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "iridium-powder"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "iridium-ingot"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "iridium-plate"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "heat-shielding-iridium"}, + }, + icon = "__space-exploration-graphics__/graphics/technology/iridium-processing.png", + icon_size = 128, + order = "e-g", + prerequisites = { + "area-mining-drill", + data_util.mod_prefix .. "processing-vulcanite", + data_util.mod_prefix .. "processing-cryonite", + data_util.mod_prefix .. "rocket-science-pack", + }, + unit = { + count = 500, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "processing-naquium", + effects = { + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "naquium-ore-crushed"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "naquium-ore-washed"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "naquium-powder"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "naquium-ingot"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "naquium-plate"}, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "naquium-heat-pipe", }, + --{ type = "unlock-recipe", recipe = data_util.mod_prefix .. "naquium-heat-pipe-long", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/naquium-processing.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "material-science-pack-4", + data_util.mod_prefix .. "astronomic-science-pack-4" + }, + unit = { + count = 500, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "material-science-pack-4", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-4", 1 }, + } + }, + }, + --[[{ + type = "technology", + name = data_util.mod_prefix .. "enriched-naquium", + effects = { + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "enriched-naquium"}, + }, + icon = "__space-exploration-graphics__/graphics/technology/naquium-processing.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "deep-space-science-pack-1" + }, + unit = { + count = 500, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "material-science-pack-4", 1 }, + } + }, + },]] + { + type = "technology", + name = data_util.mod_prefix .. "processing-vitamelange", + effects = { + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "vitamelange-nugget"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "vitamelange-roast"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "vitamelange-spice"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "vitamelange-extract"}, + }, + icon = "__space-exploration-graphics__/graphics/technology/vitamelange-processing.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "processing-vulcanite", + data_util.mod_prefix .. "rocket-science-pack", + }, + unit = { + count = 500, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "processing-vulcanite", + effects = { + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "vulcanite-crushed"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "vulcanite-washed"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "vulcanite-block"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "vulcanite-ion-exchange-beads"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "iron-smelting-vulcanite"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "copper-smelting-vulcanite"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "stone-brick-vulcanite"}, + {type = "unlock-recipe", recipe = data_util.mod_prefix .. "glass-vulcanite"}, + }, + icon = "__space-exploration-graphics__/graphics/technology/vulcanite-processing.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "core-miner", + "industrial-furnace", + }, + unit = { + count = 500, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + } + }, + }, + + + { + type = "technology", + name = data_util.mod_prefix .. "pulveriser", + effects = { + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "pulveriser", + }, + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "pulverised-sand" + } + }, + icon = "__space-exploration-graphics__/graphics/technology/pulveriser.png", + icon_size = 128, + order = "e-g", + prerequisites = { + "fluid-handling", + "concrete", + "steel-processing", + }, + unit = { + count = 150, + time = 30, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "addon-power-pole", + effects = { + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "addon-power-pole", + }, + }, + icon = "__space-exploration-graphics__/graphics/technology/addon-power-pole.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "aeroframe-pole", + data_util.mod_prefix .. "holmium-cable", + }, + unit = { + count = 50, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "energy-science-pack-1", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "pylon", + effects = { + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "pylon", + }, + }, + icon = "__space-exploration-graphics__/graphics/technology/pylon.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "aeroframe-pole", + data_util.mod_prefix .. "holmium-cable", + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "energy-science-pack-1", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "pylon-substation", + effects = { + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "pylon-substation", + }, + }, + icon = "__space-exploration-graphics__/graphics/technology/pylon-substation.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "pylon", + data_util.mod_prefix .. "holmium-solenoid", + }, + unit = { + count = 200, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "energy-science-pack-2", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "pylon-construction", + effects = { + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "pylon-construction", + }, + }, + icon = "__space-exploration-graphics__/graphics/technology/pylon-construction.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "pylon", + data_util.mod_prefix .. "holmium-solenoid", + data_util.mod_prefix .. "aeroframe-scaffold", + data_util.mod_prefix .. "heavy-girder", + data_util.mod_prefix .. "material-science-pack-2", + }, + unit = { + count = 200, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "energy-science-pack-2", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-2", 1 }, + { data_util.mod_prefix .. "material-science-pack-2", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "pylon-construction-radar", + effects = { + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "pylon-construction-radar", + }, + }, + icon = "__space-exploration-graphics__/graphics/technology/pylon-construction-radar.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "pylon-construction", + data_util.mod_prefix .. "quantum-processor", + data_util.mod_prefix .. "aeroframe-bulkhead", + data_util.mod_prefix .. "heavy-bearing", + data_util.mod_prefix .. "material-science-pack-3", + }, + unit = { + count = 300, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "energy-science-pack-3", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-3", 1 }, + { data_util.mod_prefix .. "material-science-pack-3", 1 }, + } + }, + }, + + { + name = data_util.mod_prefix .. "railgun", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "railgun" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "railgun-ammo" } + }, + icon = "__space-exploration-graphics__/graphics/technology/railgun.png", + icon_size = 128, + order = "g-b-z", + prerequisites = { + "military-3", + data_util.mod_prefix .. "space-electromagnetics-laboratory", + data_util.mod_prefix .. "material-science-pack-1", + data_util.mod_prefix .. "heavy-girder", + }, + type = "technology", + unit = { + count = 200, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "material-science-pack-1", 1 }, + }, + time = 60 + } + }, + + { + type = "technology", + name = data_util.mod_prefix .. "rocket-fuel-from-water", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "rocket-fuel-from-water-copper", } + }, + icon = "__base__/graphics/technology/rocket-fuel.png", + icon_size = 256, + order = "e-g", + prerequisites = { + "rocket-fuel" + }, + unit = { + count = 500, + time = 15, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + } + }, + }, + + + { + type = "technology", + name = data_util.mod_prefix .. "rocket-landing-pad", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "rocket-landing-pad", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "cargo-rocket-section-pack", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "cargo-rocket-section-unpack", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/rocket-landing-pad.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "rocket-launch-pad" + }, + unit = { + count = 500, + time = 15, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "rocket-launch-pad", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-capsule", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "cargo-rocket-section", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "cargo-rocket-cargo-pod", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "cargo-rocket-fuel-tank", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "rocket-launch-pad", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/rocket-launch-pad.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "thruster-suit", + "electric-engine", + "battery", + }, + unit = { + count = 500, + time = 15, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "rocket-cargo-safety-1", + effects = { }, + icon = "__space-exploration-graphics__/graphics/technology/rocket-cargo-safety.png", + icon_size = 128, + order = "e-g", + prerequisites = { data_util.mod_prefix .. "rocket-launch-pad" }, + unit = { + count = 100, + time = 30, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "rocket-cargo-safety-2", + effects = { }, + icon = "__space-exploration-graphics__/graphics/technology/rocket-cargo-safety.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "rocket-cargo-safety-1", + data_util.mod_prefix .. "rocket-science-pack" + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "rocket-cargo-safety-3", + effects = { }, + icon = "__space-exploration-graphics__/graphics/technology/rocket-cargo-safety.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "rocket-cargo-safety-2", + data_util.mod_prefix .. "astronomic-science-pack-1" + }, + max_level = "infinite", + unit = { + count_formula = "2^L", + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-1", 1 }, + } + }, + upgrade = true + }, + + { + type = "technology", + name = data_util.mod_prefix .. "rocket-reusability-1", + effects = { }, + icon = "__space-exploration-graphics__/graphics/technology/rocket-reusability.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "rocket-landing-pad" + }, + unit = { + count = 100, + time = 30, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "rocket-reusability-2", + effects = { }, + icon = "__space-exploration-graphics__/graphics/technology/rocket-reusability.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "rocket-reusability-1", + data_util.mod_prefix .. "rocket-science-pack" + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "rocket-reusability-3", + effects = { }, + icon = "__space-exploration-graphics__/graphics/technology/rocket-reusability.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "rocket-reusability-2", + data_util.mod_prefix .. "astronomic-science-pack-1" + }, + max_level = "20", + unit = { + count_formula = "2^L", + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-1", 1 }, + } + }, + upgrade = true + }, + + { + type = "technology", + name = data_util.mod_prefix .. "rocket-survivability-1", + effects = { }, + icon = "__space-exploration-graphics__/graphics/technology/rocket-survivability.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "rocket-landing-pad" + }, + unit = { + count = 100, + time = 30, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "rocket-survivability-2", + effects = { }, + icon = "__space-exploration-graphics__/graphics/technology/rocket-survivability.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "rocket-survivability-1", + data_util.mod_prefix .. "rocket-science-pack" + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "rocket-survivability-3", + effects = { }, + icon = "__space-exploration-graphics__/graphics/technology/rocket-survivability.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "rocket-survivability-2", + data_util.mod_prefix .. "astronomic-science-pack-1" + }, + max_level = "infinite", + unit = { + count_formula = "2^L", + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-1", 1 }, + } + }, + upgrade = true + }, + + { + name = data_util.mod_prefix .. "rtg-equipment", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .."rtg-equipment" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/rtg-equipment.png", + icon_size = 128, + order = "g-b-z", + prerequisites = { + "advanced-electronics-2", + "low-density-structure", + "solar-panel-equipment", + "uranium-processing", + }, + type = "technology", + unit = { + count = 200, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + }, + time = 30 + } + }, + { + name = data_util.mod_prefix .. "rtg-equipment-2", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .."rtg-equipment-2" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/rtg-equipment-2.png", + icon_size = 128, + order = "g-b-z", + prerequisites = { + data_util.mod_prefix .. "rtg-equipment", + data_util.mod_prefix .. "energy-science-pack-2", + data_util.mod_prefix .. "holmium-solenoid", + }, + type = "technology", + unit = { + count = 200, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "energy-science-pack-2", 1 } + }, + time = 60 + } + }, + + + { + name = data_util.mod_prefix .. "space-accumulator", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-accumulator" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/accumulator.png", + icon_size = 128, + order = "g-b-z", + prerequisites = { + "electric-energy-accumulators", + data_util.mod_prefix .. "holmium-cable", + data_util.mod_prefix .. "heavy-girder", + data_util.mod_prefix .. "material-science-pack-2" + }, + type = "technology", + unit = { + count = 200, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "material-science-pack-2", 1 }, + { data_util.mod_prefix .. "energy-science-pack-1", 1 } + }, + time = 60 + } + }, + { + name = data_util.mod_prefix .. "space-accumulator-2", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-accumulator-2" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/accumulator-2.png", + icon_size = 128, + order = "g-b-z", + prerequisites = { + data_util.mod_prefix .. "space-accumulator", + data_util.mod_prefix .. "superconductive-cable", + data_util.mod_prefix .. "naquium-cube", + }, + type = "technology", + unit = { + count = 200, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "material-science-pack-4", 1 }, + { data_util.mod_prefix .. "energy-science-pack-4", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-4", 1 }, + { data_util.mod_prefix .. "deep-space-science-pack-1", 1 }, + }, + time = 60 + }, + localised_name = {"technology-name."..data_util.mod_prefix .. "space-accumulator-2"}, + localised_description = {"technology-description."..data_util.mod_prefix .. "space-accumulator-2"} + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-astrometrics-laboratory", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-astrometrics-laboratory"}, + }, + icon = "__space-exploration-graphics__/graphics/technology/astrometrics-laboratory.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-telescope", + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-assembling", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-assembling-machine" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/space-assembling.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-platform-scaffold", + "automation-2" + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "condenser-turbine", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "condenser-turbine" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/condenser-turbine.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "rocket-science-pack", + "nuclear-power" + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-biochemical-laboratory", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-biochemical-laboratory" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "bio-sludge-from-wood" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "bio-sludge-from-fish" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "bio-sludge" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "bio-sludge-crude-oil" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "nutrient-gel" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "nutrient-gel-methane" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "nutrient-vat" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "melting-methane-ice" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/biochemical-laboratory.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "rocket-science-pack" + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + + + { + type = "technology", + name = data_util.mod_prefix .. "space-catalogue-astronomic-1", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "simulation-a" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "astronomic-insight-1" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "astronomic-catalogue-1" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "astrometric-analysis-multispectral-1" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "visible-observation-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "uv-observation-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "infrared-observation-data" }, + --{ type = "unlock-recipe", recipe = data_util.mod_prefix .. "doppler-shift-data" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/astronomic-catalogue-1.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-astrometrics-laboratory", + data_util.mod_prefix .. "space-laser-laboratory", + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-catalogue-astronomic-2", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "astronomic-insight-2" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "astronomic-catalogue-2" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "astrometric-analysis-multispectral-2" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "microwave-observation-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "xray-observation-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "gravitational-lensing-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "gravity-wave-data" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/astronomic-catalogue-2.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "astronomic-science-pack-1", + data_util.mod_prefix .. "space-telescope-xray", + data_util.mod_prefix .. "space-telescope-microwave", + data_util.mod_prefix .. "aeroframe-pole", + data_util.mod_prefix .. "space-gravimetrics-laboratory", + }, + unit = { + count = 10, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "space-catalogue-astronomic-3", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "astronomic-insight-3" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "astronomic-catalogue-3" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "astrometric-analysis-multispectral-3" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "radio-observation-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "gammaray-observation-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "negative-pressure-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "darkmatter-data" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/astronomic-catalogue-3.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "astronomic-science-pack-2", + data_util.mod_prefix .. "space-telescope-gammaray", + data_util.mod_prefix .. "space-telescope-radio", + data_util.mod_prefix .. "aeroframe-scaffold", + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-1", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-2", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "space-catalogue-astronomic-4", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "astronomic-insight-4" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "astronomic-catalogue-4" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "dark-energy-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "micro-black-hole-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "zero-point-energy-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "belt-probe" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/astronomic-catalogue-4.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "astronomic-science-pack-3", + data_util.mod_prefix .. "space-particle-collider", + data_util.mod_prefix .. "space-electromagnetics-laboratory", + data_util.mod_prefix .. "aeroframe-bulkhead", + data_util.mod_prefix .. "space-probe", + }, + unit = { + count = 500, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-1", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-2", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-3", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "space-catalogue-biological-1", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "simulation-b" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "biological-insight-1" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "biological-catalogue-1" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "bio-combustion-data" }, + --{ type = "unlock-recipe", recipe = data_util.mod_prefix .. "bio-spectral-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "biomechanical-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "biochemical-data" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/biological-catalogue-1.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-growth-facility", + data_util.mod_prefix .. "space-thermodynamics-laboratory", + data_util.mod_prefix .. "space-mechanical-laboratory", + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-catalogue-biological-2", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "biological-insight-2" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "biological-catalogue-2" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "experimental-genetic-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "biochemical-resistance-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "biomechanical-resistance-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "bio-combustion-resistance-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "experimental-specimen" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/biological-catalogue-2.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "biological-science-pack-1", + data_util.mod_prefix .. "vitalic-acid", + }, + unit = { + count = 10, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "biological-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "space-catalogue-biological-3", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "biological-insight-3" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "biological-catalogue-3" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "bioelectrics-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "decompression-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "cryogenics-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "radiation-exposure-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "neural-gel-2" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "significant-specimen" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/biological-catalogue-3.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "biological-science-pack-2", + data_util.mod_prefix .. "space-radiation-laboratory", + data_util.mod_prefix .. "vitalic-reagent", + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "biological-science-pack-1", 1 }, + { data_util.mod_prefix .. "biological-science-pack-2", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "space-catalogue-biological-4", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "biological-insight-4" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "biological-catalogue-4" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "comparative-genetic-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "decompression-resistance-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "neural-anomaly-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "radiation-exposure-resistance-data" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/biological-catalogue-4.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "biological-science-pack-3", + data_util.mod_prefix .. "vitalic-epoxy", + }, + unit = { + count = 500, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "biological-science-pack-1", 1 }, + { data_util.mod_prefix .. "biological-science-pack-2", 1 }, + { data_util.mod_prefix .. "biological-science-pack-3", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "space-catalogue-material-1", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "simulation-m" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "material-insight-1" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "material-catalogue-1" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "cold-thermodynamics-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "hot-thermodynamics-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "tensile-strength-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "compressive-strength-data" }, + --{ type = "unlock-recipe", recipe = data_util.mod_prefix .. "shear-strength-data" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/material-catalogue-1.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-thermodynamics-laboratory", + data_util.mod_prefix .. "space-mechanical-laboratory", + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-catalogue-material-2", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "material-insight-2" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "material-catalogue-2" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "rigidity-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "impact-shielding-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "pressure-containment-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "corrosion-resistance-data" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/material-catalogue-2.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "material-science-pack-1", + data_util.mod_prefix .. "space-biochemical-laboratory", + data_util.mod_prefix .. "heavy-girder", + }, + unit = { + count = 10, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "material-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "space-catalogue-material-3", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "material-insight-3" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "material-catalogue-3" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "friction-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "ballistic-shielding-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "explosion-shielding-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "radiation-shielding-data" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/material-catalogue-3.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "material-science-pack-2", + data_util.mod_prefix .. "space-radiation-laboratory", + data_util.mod_prefix .. "heavy-bearing", + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "material-science-pack-1", 1 }, + { data_util.mod_prefix .. "material-science-pack-2", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "space-catalogue-material-4", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "material-insight-4" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "material-catalogue-4" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "electrical-shielding-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "laser-shielding-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "particle-beam-shielding-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "experimental-alloys-data" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/material-catalogue-4.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "material-science-pack-3", + data_util.mod_prefix .. "space-electromagnetics-laboratory", + data_util.mod_prefix .. "space-laser-laboratory", + data_util.mod_prefix .. "space-particle-collider", + data_util.mod_prefix .. "heavy-composite", + }, + unit = { + count = 500, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "material-science-pack-1", 1 }, + { data_util.mod_prefix .. "material-science-pack-2", 1 }, + { data_util.mod_prefix .. "material-science-pack-3", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "space-catalogue-energy-1", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "simulation-s" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "energy-insight-1" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "energy-catalogue-1" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "conductivity-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "electromagnetic-field-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "polarisation-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "radiation-data" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/energy-catalogue-1.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-laser-laboratory", + data_util.mod_prefix .. "space-radiation-laboratory", + data_util.mod_prefix .. "space-electromagnetics-laboratory", + data_util.mod_prefix .. "space-particle-accelerator", + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-catalogue-energy-2", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "energy-insight-2" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "energy-catalogue-2" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "atomic-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "subatomic-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "quantum-phenomenon-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "forcefield-data" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/energy-catalogue-2.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "energy-science-pack-1", + data_util.mod_prefix .. "space-particle-collider", + }, + unit = { + count = 10, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "energy-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "space-catalogue-energy-3", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "energy-insight-3" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "energy-catalogue-3" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "superconductivity-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "entanglement-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "quark-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "lepton-data" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/energy-catalogue-3.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "energy-science-pack-2", + data_util.mod_prefix .. "holmium-solenoid", + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "energy-science-pack-1", 1 }, + { data_util.mod_prefix .. "energy-science-pack-2", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "space-catalogue-energy-4", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "energy-insight-4" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "energy-catalogue-4" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "boson-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "fusion-test-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "magnetic-monopole-data" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "star-probe" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/energy-catalogue-4.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "energy-science-pack-3", + data_util.mod_prefix .. "space-supercomputer-2", + data_util.mod_prefix .. "space-probe", + }, + unit = { + count = 500, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "energy-science-pack-1", 1 }, + { data_util.mod_prefix .. "energy-science-pack-2", 1 }, + { data_util.mod_prefix .. "energy-science-pack-3", 1 }, + } + }, + }, +--[[ + { + type = "technology", + name = data_util.mod_prefix .. "space-catalogue-universal", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "universal-catalogue" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/universal-catalogue.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-supercomputer-3", + data_util.mod_prefix .. "astronomic-science-pack-4", + data_util.mod_prefix .. "energy-science-pack-4", + data_util.mod_prefix .. "biological-science-pack-4", + data_util.mod_prefix .. "material-science-pack-4", + }, + unit = { + count = 500, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-4", 1 }, + { data_util.mod_prefix .. "material-science-pack-4", 1 }, + { data_util.mod_prefix .. "biological-science-pack-4", 1 }, + { data_util.mod_prefix .. "energy-science-pack-4", 1 }, + } + }, + }, + ]] + + { + type = "technology", + name = data_util.mod_prefix .. "space-data-card", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "data-storage-substrate" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "data-storage-substrate-cleaned" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "data-storage-substrate-cleaned-chemical" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "empty-data" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/data-card.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-manufactory", + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + } + }, + }, + + + { + type = "technology", + name = data_util.mod_prefix .. "space-decontamination-facility", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-decontamination-facility" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-water" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "bio-sludge-decontamination" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-water-decontamination" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "scrap-decontamination" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "used-lifesupport-canister-cleaning-space" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/decontamination-facility.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-assembling", + data_util.mod_prefix .. "processing-vulcanite" + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-electromagnetics-laboratory", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-electromagnetics-laboratory", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/electromagnetics-laboratory.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "rocket-science-pack" + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + + + { + type = "technology", + name = data_util.mod_prefix .. "space-genetics-laboratory", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-genetics-laboratory" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "experimental-bioculture" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "bioculture" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "genetic-data" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/genetics-laboratory.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-biochemical-laboratory" + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-gravimetrics-laboratory", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-gravimetrics-laboratory" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/gravimetrics-laboratory.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-astrometrics-laboratory", + data_util.mod_prefix .. "aeroframe-pole", + data_util.mod_prefix .. "astronomic-science-pack-1", + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-1", 1} + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-growth-facility", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-growth-facility" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "neural-gel" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "specimen" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "specimen-fish" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "specimen-wood" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "lifesupport-canister-specimen" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "bio-methane-to-crude-oil" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/growth-facility.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-genetics-laboratory" + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + + + + { + type = "technology", + name = data_util.mod_prefix .. "space-hypercooling-1", + effects = { + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "space-hypercooler", + }, + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "space-coolant-cold", + }, + }, + icon = "__space-exploration-graphics__/graphics/technology/hypercooler.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "rocket-science-pack" + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-hypercooling-2", + effects = { + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "space-coolant-supercooled", + }, + }, + icon = "__space-exploration-graphics__/graphics/technology/hypercooler.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-hypercooling-1" + }, + unit = { + count = 200, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-hypercooling-3", + effects = { + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "space-coolant-cold-cryonite", + }, + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "space-coolant-supercooled-cryonite", + }, + }, + icon = "__space-exploration-graphics__/graphics/technology/hypercooler.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-hypercooling-2", + data_util.mod_prefix .. "energy-science-pack-1", + data_util.mod_prefix .. "processing-cryonite", + }, + unit = { + count = 200, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "energy-science-pack-1", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-laser-laboratory", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-laser-laboratory" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/laser-laboratory.png", + icon_size = 128, + order = "e-g", + prerequisites = { + "laser", + data_util.mod_prefix .. "rocket-science-pack" + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "lifesupport-facility", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "lifesupport-facility" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "canister" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "empty-lifesupport-canister" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "lifesupport-canister-fish" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "lifesupport-canister-coal" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "used-lifesupport-canister-cleaning" }, + + }, + icon = "__space-exploration-graphics__/graphics/technology/lifesupport-facility.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "recycling-facility", + }, + unit = { + count = 100, + time = 30, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-manufactory", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-manufactory" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "chemical-gel" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-mirror" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-mirror-alternate" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "material-testing-pack" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/space-manufactory.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-decontamination-facility" + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-material-fabricator", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-material-fabricator" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "matter-fusion-dirty" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/material-fabricator.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "energy-science-pack-4", + data_util.mod_prefix .. "material-science-pack-2", + "speed-module-6", + "effectivity-module-6", + }, + unit = { + count = 250, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-2", 1 }, + { data_util.mod_prefix .. "energy-science-pack-4", 1 }, + { data_util.mod_prefix .. "material-science-pack-2", 1 }, + } + }, + }, + + + { + type = "technology", + name = data_util.mod_prefix .. "space-matter-fusion", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "matter-fusion-iron" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "matter-fusion-copper" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "matter-fusion-stone" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "matter-fusion-uranium" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "matter-fusion-beryllium" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "matter-fusion-holmium" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "matter-fusion-iridium" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "matter-fusion-vulcanite" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "matter-fusion-cryonite" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/material-fabricator.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-material-fabricator", + }, + unit = { + count = 500, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-2", 1 }, + { data_util.mod_prefix .. "energy-science-pack-4", 1 }, + { data_util.mod_prefix .. "material-science-pack-2", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "nanomaterial", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "nanomaterial" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/nanomaterial.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-material-fabricator", + data_util.mod_prefix .. "astronomic-science-pack-4", + data_util.mod_prefix .. "dynamic-emitter", + data_util.mod_prefix .. "material-science-pack-4", + data_util.mod_prefix .. "biological-science-pack-4", + }, + unit = { + count = 250, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-4", 1}, + { data_util.mod_prefix .. "energy-science-pack-4", 1 }, + { data_util.mod_prefix .. "material-science-pack-4", 1 }, + { data_util.mod_prefix .. "biological-science-pack-4", 1 } + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-mechanical-laboratory", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-mechanical-laboratory" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/mechanical-laboratory.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "rocket-science-pack" + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-rail", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-rail" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/space-rail.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "energy-science-pack-1" + }, + unit = { + count = 50, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "energy-science-pack-1", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-telescope", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-telescope" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "observation-frame-blank" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "observation-frame-blank-beryllium" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "observation-frame-visible" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "observation-frame-uv" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "observation-frame-infrared" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/telescope.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-hypercooling-1" + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-telescope-xray", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-telescope-xray" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "observation-frame-xray" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/telescope-xray.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-telescope", + data_util.mod_prefix .. "astronomic-science-pack-1", + data_util.mod_prefix .. "aeroframe-pole", + }, + unit = { + count = 20, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-1", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-telescope-microwave", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-telescope-microwave" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "observation-frame-microwave" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/telescope-microwave.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-telescope", + data_util.mod_prefix .. "astronomic-science-pack-1", + data_util.mod_prefix .. "aeroframe-pole", + }, + unit = { + count = 20, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-1", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-telescope-gammaray", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-telescope-gammaray" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "gammaray-detector" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "observation-frame-gammaray" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/telescope-gammaray.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-telescope-xray" + }, + unit = { + count = 50, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-2", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-telescope-radio", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-telescope-radio" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "observation-frame-radio" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/telescope-radio.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-telescope-microwave" + }, + unit = { + count = 50, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-2", 1 }, + } + }, + }, + + + { + type = "technology", + name = data_util.mod_prefix .. "space-particle-accelerator", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-particle-accelerator" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "ion-stream" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/particle-accelerator.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-plasma-generator", + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-particle-collider", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-particle-collider" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "proton-stream" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "particle-stream" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/particle-collider.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-particle-accelerator", + data_util.mod_prefix .."energy-science-pack-1", + data_util.mod_prefix .. "holmium-cable", + }, + unit = { + count = 10, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .."energy-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "antimatter-production", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "antimatter-stream" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "antimatter-canister" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "empty-antimatter-canister" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/material-fabricator.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "deep-space-science-pack-1", + data_util.mod_prefix .. "naquium-cube" + }, + unit = { + count = 1000, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .."astronomic-science-pack-4", 1 }, + { data_util.mod_prefix .."energy-science-pack-4", 1 }, + { data_util.mod_prefix .."material-science-pack-4", 1 }, + { data_util.mod_prefix .."deep-space-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "antimatter-engine", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "spaceship-antimatter-engine" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "spaceship-antimatter-booster-tank" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/antimatter-engine.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "ion-engine", + data_util.mod_prefix .. "lattice-pressure-vessel", + data_util.mod_prefix .. "antimatter-production", + data_util.mod_prefix .. "heavy-assembly" + }, + unit = { + count = 2000, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .."astronomic-science-pack-4", 1 }, + { data_util.mod_prefix .."energy-science-pack-4", 1 }, + { data_util.mod_prefix .."material-science-pack-4", 1 }, + { data_util.mod_prefix .."deep-space-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "teleportation", + effects = { + }, + icon = "__space-exploration-graphics__/graphics/technology/teleportation.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "deep-space-science-pack-4", + }, + unit = { + count = 10000, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "utility-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .."astronomic-science-pack-4", 1 }, + { data_util.mod_prefix .."energy-science-pack-4", 1 }, + { data_util.mod_prefix .."material-science-pack-4", 1 }, + { data_util.mod_prefix .."deep-space-science-pack--4", 1 }, + } + }, + enabled = true -- if a mod adds teleportation, enable this tech, add it as a prerequiste, and add "se-deep-space-science-pack-4" as an ingredient + }, + + + { + type = "technology", + name = data_util.mod_prefix .. "space-plasma-generator", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-plasma-generator" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "plasma-stream" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/plasma-generator.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "rocket-science-pack", + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + + + { + type = "technology", + name = data_util.mod_prefix .. "space-platform-plating", + effects = { + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "space-platform-plating", + }, + }, + icon = "__space-exploration-graphics__/graphics/technology/space-platform-plating.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "heavy-girder" + }, + unit = { + count = 50, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "material-science-pack-1", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-platform-scaffold", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-platform-scaffold", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-transport-belt", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-underground-belt", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-splitter", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-pipe", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-pipe-to-ground", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/space-platform-scaffold.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "rocket-launch-pad" + }, + unit = { + count = 500, + time = 30, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-radiation-laboratory", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-radiation-laboratory" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/radiation-laboratory.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "rocket-science-pack", + "uranium-processing", + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + + + + { + type = "technology", + name = data_util.mod_prefix .. "space-radiator-1", + effects = { + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "space-coolant", + }, + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "space-coolant-cryonite", + }, + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "space-radiator", + }, + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "radiating-space-coolant-normal", + }, + }, + icon = "__space-exploration-graphics__/graphics/technology/radiator-2.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-manufactory" + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-radiating-efficiency", + effects = { + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "radiating-space-coolant-slow", + }, + }, + icon = "__space-exploration-graphics__/graphics/technology/radiator-1.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "astronomic-science-pack-1" + }, + unit = { + count = 500, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-1", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-radiating-speed", + effects = { + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "radiating-space-coolant-fast", + }, + }, + icon = "__space-exploration-graphics__/graphics/technology/radiator-3.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "energy-science-pack-1" + }, + unit = { + count = 500, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "energy-science-pack-1", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-radiator-2", + effects = { + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "space-radiator-2", + }, + }, + icon = "__space-exploration-graphics__/graphics/technology/radiator-blue.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-radiator-1", + data_util.mod_prefix .. "astronomic-science-pack-1", + data_util.mod_prefix .. "processing-cryonite" + }, + unit = { + count = 500, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-1", 1 }, + } + }, + }, + + + { + type = "technology", + name = data_util.mod_prefix .. "recycling-facility", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "recycling-facility" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "scrap-recycling" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "broken-data-scrapping" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "empty-barrel-scrapping" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "empty-barrel-reprocessing" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-capsule-scrapping" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "cargo-pod-scrapping" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/recycling-facility.png", + icon_size = 128, + order = "e-g", + prerequisites = { + "advanced-material-processing-2", + }, + unit = { + count = 300, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + } + }, + }, + + -- Space Science + { + type = "technology", + name = data_util.mod_prefix .. "space-science-lab", + effects = { + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "space-science-lab", + }, + }, + icon = "__space-exploration-graphics__/graphics/technology/space-science-lab.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-manufactory", + data_util.mod_prefix .. "space-supercomputer-1", + }, + unit = { + count = 500, + time = 30, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + } + }, + }, + + + { + type = "technology", + name = data_util.mod_prefix .. "space-simulation-ab", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "simulation-ab" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/simulation-ab.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "astronomic-science-pack-1", + data_util.mod_prefix .. "biological-science-pack-1", + data_util.mod_prefix .. "space-hypercooling-2", + }, + unit = { + count = 10, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .."astronomic-science-pack-1", 1 }, + { data_util.mod_prefix .."biological-science-pack-1", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-simulation-as", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "simulation-as" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/simulation-as.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "astronomic-science-pack-1", + data_util.mod_prefix .. "energy-science-pack-1", + data_util.mod_prefix .. "space-hypercooling-2", + }, + unit = { + count = 10, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .."astronomic-science-pack-1", 1 }, + { data_util.mod_prefix .."energy-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "space-simulation-am", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "simulation-am" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/simulation-am.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "astronomic-science-pack-1", + data_util.mod_prefix .. "material-science-pack-1", + data_util.mod_prefix .. "space-hypercooling-2", + }, + unit = { + count = 10, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .."astronomic-science-pack-1", 1 }, + { data_util.mod_prefix .."material-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "space-simulation-bm", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "simulation-bm" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/simulation-bm.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "biological-science-pack-1", + data_util.mod_prefix .. "material-science-pack-1", + data_util.mod_prefix .. "space-hypercooling-2", + }, + unit = { + count = 10, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .."biological-science-pack-1", 1 }, + { data_util.mod_prefix .."material-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "space-simulation-sb", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "simulation-sb" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/simulation-sb.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "biological-science-pack-1", + data_util.mod_prefix .. "energy-science-pack-1", + data_util.mod_prefix .. "space-hypercooling-2", + }, + unit = { + count = 10, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .."biological-science-pack-1", 1 }, + { data_util.mod_prefix .."energy-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "space-simulation-sm", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "simulation-sm" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/simulation-sm.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "energy-science-pack-1", + data_util.mod_prefix .. "material-science-pack-1", + data_util.mod_prefix .. "space-hypercooling-2", + }, + unit = { + count = 10, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .."energy-science-pack-1", 1 }, + { data_util.mod_prefix .."material-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "space-simulation-abm", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "simulation-abm" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/simulation-abm.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-simulation-ab", + data_util.mod_prefix .. "space-simulation-am", + data_util.mod_prefix .. "space-simulation-bm", + }, + unit = { + count = 50, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .."astronomic-science-pack-1", 1 }, + { data_util.mod_prefix .."biological-science-pack-1", 1 }, + { data_util.mod_prefix .."material-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "space-simulation-asb", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "simulation-asb" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/simulation-asb.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-simulation-ab", + data_util.mod_prefix .. "space-simulation-as", + data_util.mod_prefix .. "space-simulation-sb", + }, + unit = { + count = 50, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .."astronomic-science-pack-1", 1 }, + { data_util.mod_prefix .."biological-science-pack-1", 1 }, + { data_util.mod_prefix .."energy-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "space-simulation-asm", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "simulation-asm" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/simulation-asm.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-simulation-am", + data_util.mod_prefix .. "space-simulation-as", + data_util.mod_prefix .. "space-simulation-sm", + }, + unit = { + count = 50, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .."astronomic-science-pack-1", 1 }, + { data_util.mod_prefix .."energy-science-pack-1", 1 }, + { data_util.mod_prefix .."material-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "space-simulation-sbm", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "simulation-sbm" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/simulation-sbm.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-simulation-bm", + data_util.mod_prefix .. "space-simulation-sb", + data_util.mod_prefix .. "space-simulation-sm", + }, + unit = { + count = 50, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .."biological-science-pack-1", 1 }, + { data_util.mod_prefix .."energy-science-pack-1", 1 }, + { data_util.mod_prefix .."material-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "space-simulation-asbm", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "simulation-asbm" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/catalogue/simulation-asbm.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-simulation-abm", + data_util.mod_prefix .. "space-simulation-asb", + data_util.mod_prefix .. "space-simulation-asm", + data_util.mod_prefix .. "space-simulation-sbm", + data_util.mod_prefix .. "space-supercomputer-2", + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .."astronomic-science-pack-1", 1 }, + { data_util.mod_prefix .."biological-science-pack-1", 1 }, + { data_util.mod_prefix .."energy-science-pack-1", 1 }, + { data_util.mod_prefix .."material-science-pack-1", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-solar-panel", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-solar-panel" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/solar-panel.png", + icon_size = 128, + order = "e-g", + prerequisites = { + "solar-energy", + data_util.mod_prefix .. "rocket-science-pack", + }, + unit = { + count = 500, + time = 30, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "space-solar-panel-2", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-solar-panel-2" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/solar-panel-2.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-solar-panel", + data_util.mod_prefix .. "holmium-cable", + }, + unit = { + count = 200, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "energy-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "space-solar-panel-3", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-solar-panel-3" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/solar-panel-3.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-solar-panel-2", + data_util.mod_prefix .. "deep-space-science-pack-1", + data_util.mod_prefix .. "naquium-cube", + }, + unit = { + count = 500, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-4", 1 }, + { data_util.mod_prefix .. "energy-science-pack-4", 1 }, + { data_util.mod_prefix .. "material-science-pack-4", 1 }, + { data_util.mod_prefix .. "deep-space-science-pack-1", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-supercomputer-1", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-supercomputer-1" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "formatting-1" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "machine-learning-data" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/supercomputer-1.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-data-card", + data_util.mod_prefix .. "space-radiator-1", + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-supercomputer-2", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-supercomputer-2" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "formatting-2" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/supercomputer-2.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "quantum-processor", + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "energy-science-pack-3", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-supercomputer-3", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-supercomputer-3" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "formatting-3" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/supercomputer-3.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-supercomputer-2", + data_util.mod_prefix .. "superconductive-cable", + data_util.mod_prefix .. "biological-science-pack-3", + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "energy-science-pack-3", 1 }, + { data_util.mod_prefix .. "material-science-pack-3", 1 }, + { data_util.mod_prefix .. "biological-science-pack-3", 1 }, + } + }, + }, + + { + type = "technology", + name = data_util.mod_prefix .. "space-supercomputer-4", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-supercomputer-4" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "formatting-4" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/supercomputer-4.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "naquium-processor", + }, + unit = { + count = 1000, + time = 60, + ingredients = { + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "energy-science-pack-4", 1 }, + { data_util.mod_prefix .. "biological-science-pack-4", 1}, + { data_util.mod_prefix .. "deep-space-science-pack-3", 1 }, + } + }, + }, + + + { + type = "technology", + name = data_util.mod_prefix .. "space-thermodynamics-laboratory", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-thermodynamics-laboratory" }, + --{ type = "unlock-recipe", recipe = data_util.mod_prefix .. "space-coolant" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "thermodynamics-coal" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/thermodynamics-laboratory.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "space-plasma-generator", + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + + { + name = data_util.mod_prefix .. "spaceship", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "spaceship-console" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "spaceship-floor" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "spaceship-wall" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "spaceship-gate" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "spaceship-rocket-engine" }, + --{ type = "unlock-recipe", recipe = data_util.mod_prefix .. "spaceship-rocket-engine-burn" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "spaceship-rocket-booster-tank" }, + { type = "nothing", effect_description={"spaceship-integrity300"} } + }, + icon = "__space-exploration-graphics__/graphics/technology/spaceship.png", + icon_size = 128, + order = "g-b-z", + prerequisites = { + data_util.mod_prefix .. "astronomic-science-pack-3", + data_util.mod_prefix .. "aeroframe-bulkhead", + }, + type = "technology", + unit = { + count = 200, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-3", 1 } + }, + time = 60 + } + }, + + { + name = data_util.mod_prefix .. "spaceship-integrity-1", + effects = { + { type = "nothing", effect_description={"spaceship-integrity100"} } + }, + icon = "__space-exploration-graphics__/graphics/technology/spaceship-integrity.png", + icon_size = 128, + order = "g-b-z", + prerequisites = { + data_util.mod_prefix .. "material-science-pack-1", + data_util.mod_prefix .. "spaceship", + }, + type = "technology", + unit = { + count_formula = "2^L*50", + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-3", 1 }, + { data_util.mod_prefix .. "material-science-pack-1", 1 } + }, + time = 60 + } + }, + { + name = data_util.mod_prefix .. "spaceship-integrity-2", + effects = { + { type = "nothing", effect_description={"spaceship-integrity100"} } + }, + icon = "__space-exploration-graphics__/graphics/technology/spaceship-integrity.png", + icon_size = 128, + order = "g-b-z", + prerequisites = { + data_util.mod_prefix .. "material-science-pack-2", + data_util.mod_prefix .. "spaceship-integrity-1", + }, + type = "technology", + unit = { + count_formula = "2^L*50", + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-3", 1 }, + { data_util.mod_prefix .. "material-science-pack-2", 1 } + }, + time = 60 + } + }, + { + name = data_util.mod_prefix .. "spaceship-integrity-3", + effects = { + { type = "nothing", effect_description={"spaceship-integrity100"} } + }, + icon = "__space-exploration-graphics__/graphics/technology/spaceship-integrity.png", + icon_size = 128, + order = "g-b-z", + prerequisites = { + data_util.mod_prefix .. "material-science-pack-3", + data_util.mod_prefix .. "spaceship-integrity-2", + }, + type = "technology", + unit = { + count_formula = "2^L*50", + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-3", 1 }, + { data_util.mod_prefix .. "material-science-pack-3", 1 } + }, + time = 60 + } + }, + { + name = data_util.mod_prefix .. "spaceship-integrity-4", + effects = { + { type = "nothing", effect_description={"spaceship-integrity100"} } + }, + icon = "__space-exploration-graphics__/graphics/technology/spaceship-integrity.png", + icon_size = 128, + order = "g-b-z", + prerequisites = { + data_util.mod_prefix .. "energy-science-pack-1", + data_util.mod_prefix .. "spaceship-integrity-3", + }, + type = "technology", + unit = { + count_formula = "2^L*50", + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-3", 1 }, + { data_util.mod_prefix .. "material-science-pack-3", 1 }, + { data_util.mod_prefix .. "energy-science-pack-1", 1 } + }, + time = 60 + } + }, + { + name = data_util.mod_prefix .. "spaceship-integrity-5", + effects = { + { type = "nothing", effect_description={"spaceship-integrity100"} } + }, + icon = "__space-exploration-graphics__/graphics/technology/spaceship-integrity.png", + icon_size = 128, + order = "g-b-z", + prerequisites = { + data_util.mod_prefix .. "energy-science-pack-2", + data_util.mod_prefix .. "spaceship-integrity-4", + }, + type = "technology", + unit = { + count_formula = "2^L*50", + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-3", 1 }, + { data_util.mod_prefix .. "material-science-pack-3", 1 }, + { data_util.mod_prefix .. "energy-science-pack-2", 1 }, + }, + time = 60 + } + }, + { + name = data_util.mod_prefix .. "spaceship-integrity-6", + effects = { + { type = "nothing", effect_description={"spaceship-integrity100"} } + }, + icon = "__space-exploration-graphics__/graphics/technology/spaceship-integrity.png", + icon_size = 128, + order = "g-b-z", + prerequisites = { + data_util.mod_prefix .. "energy-science-pack-3", + data_util.mod_prefix .. "spaceship-integrity-5", + }, + type = "technology", + unit = { + count_formula = "2^L*50", + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-3", 1 }, + { data_util.mod_prefix .. "material-science-pack-3", 1 }, + { data_util.mod_prefix .. "energy-science-pack-3", 1 }, + }, + time = 60 + } + }, + { + name = data_util.mod_prefix .. "spaceship-integrity-7", + effects = { + { type = "nothing", effect_description={"spaceship-integrity100"} } + }, + icon = "__space-exploration-graphics__/graphics/technology/spaceship-integrity.png", + icon_size = 128, + order = "g-b-z", + prerequisites = { + data_util.mod_prefix .. "astronomic-science-pack-4", + data_util.mod_prefix .. "spaceship-integrity-6", + }, + type = "technology", + unit = { + count_formula = "2^L*50", + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-4", 1 }, + { data_util.mod_prefix .. "material-science-pack-3", 1 }, + { data_util.mod_prefix .. "energy-science-pack-3", 1 }, + }, + time = 60 + } + }, + --[[{ + name = data_util.mod_prefix .. "spaceship-integrity-8", + effects = { + { type = "nothing", effect_description={"spaceship-integrity100"} } + }, + icon = "__space-exploration-graphics__/graphics/technology/spaceship-integrity.png", + icon_size = 128, + order = "g-b-z", + prerequisites = { + data_util.mod_prefix .. "material-science-pack-4", + data_util.mod_prefix .. "energy-science-pack-4", + data_util.mod_prefix .. "spaceship-integrity-7", + }, + type = "technology", + unit = { + count_formula = "2^L*50", + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-4", 1 }, + { data_util.mod_prefix .. "material-science-pack-3", 1 }, + { data_util.mod_prefix .. "energy-science-pack-4", 1 } + }, + time = 60 + } + },]]-- + { + name = data_util.mod_prefix .. "factory-spaceship-1", + effects = { + { type = "nothing", effect_description={"spaceship-integrity500"} } + }, + icon = "__space-exploration-graphics__/graphics/technology/spaceship-integrity.png", + icon_size = 128, + order = "g-b-z", + prerequisites = { + data_util.mod_prefix .. "deep-space-science-pack-1", + data_util.mod_prefix .. "spaceship-integrity-7", + }, + type = "technology", + unit = { + count_formula = "2^L*250", + time = 60, + ingredients = { + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-4", 1 }, + { data_util.mod_prefix .. "material-science-pack-4", 1 }, + { data_util.mod_prefix .. "energy-science-pack-4", 1 }, + { data_util.mod_prefix .. "deep-space-science-pack-1", 1 } + }, + }, + upgrade = false + }, + { + name = data_util.mod_prefix .. "factory-spaceship-2", + effects = { + { type = "nothing", effect_description={"spaceship-integrity500"} } + }, + icon = "__space-exploration-graphics__/graphics/technology/spaceship-integrity.png", + icon_size = 128, + order = "g-b-z", + prerequisites = { + data_util.mod_prefix .. "factory-spaceship-1", + }, + type = "technology", + unit = { + count_formula = "2^L*250", + time = 60, + ingredients = { + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-4", 1 }, + { data_util.mod_prefix .. "material-science-pack-4", 1 }, + { data_util.mod_prefix .. "energy-science-pack-4", 1 }, + { data_util.mod_prefix .. "deep-space-science-pack-1", 1 } + }, + }, + upgrade = false + }, + { + name = data_util.mod_prefix .. "factory-spaceship-3", + effects = { + { type = "nothing", effect_description={"spaceship-integrity500"} } + }, + icon = "__space-exploration-graphics__/graphics/technology/spaceship-integrity.png", + icon_size = 128, + order = "g-b-z", + prerequisites = { + data_util.mod_prefix .. "deep-space-science-pack-2", + data_util.mod_prefix .. "factory-spaceship-2", + }, + type = "technology", + unit = { + count_formula = "2^L*250", + time = 60, + ingredients = { + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-4", 1 }, + { data_util.mod_prefix .. "material-science-pack-4", 1 }, + { data_util.mod_prefix .. "energy-science-pack-4", 1 }, + { data_util.mod_prefix .. "deep-space-science-pack-2", 1 } + }, + }, + upgrade = false + }, + { + name = data_util.mod_prefix .. "factory-spaceship-4", + effects = { + { type = "nothing", effect_description={"spaceship-integrity500"} } + }, + icon = "__space-exploration-graphics__/graphics/technology/spaceship-integrity.png", + icon_size = 128, + order = "g-b-z", + prerequisites = { + data_util.mod_prefix .. "deep-space-science-pack-3", + data_util.mod_prefix .. "factory-spaceship-3", + }, + type = "technology", + unit = { + count_formula = "2^L*250", + time = 60, + ingredients = { + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-4", 1 }, + { data_util.mod_prefix .. "material-science-pack-4", 1 }, + { data_util.mod_prefix .. "energy-science-pack-4", 1 }, + { data_util.mod_prefix .. "deep-space-science-pack-3", 1 } + }, + }, + upgrade = false + }, + { + name = data_util.mod_prefix .. "factory-spaceship-5", + effects = { + { type = "nothing", effect_description={"spaceship-integrity500"} } + }, + icon = "__space-exploration-graphics__/graphics/technology/spaceship-integrity.png", + icon_size = 128, + order = "g-b-z", + prerequisites = { + data_util.mod_prefix .. "deep-space-science-pack-4", + data_util.mod_prefix .. "factory-spaceship-4", + }, + max_level = "infinite", + type = "technology", + unit = { + count_formula = "2^L*250", + time = 60, + ingredients = { + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-4", 1 }, + { data_util.mod_prefix .. "material-science-pack-4", 1 }, + { data_util.mod_prefix .. "energy-science-pack-4", 1 }, + { data_util.mod_prefix .. "deep-space-science-pack-4", 1 } + }, + }, + upgrade = false + }, + { + name = data_util.mod_prefix .. "spaceship-victory", + effects = { + { type = "nothing", effect_description={ + "unlock-spaceship-victory", + Shared.spaceship_victory_speed, + Shared.spaceship_victory_duration + } }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "distortion-drive" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/spaceship-victory.png", + icon_size = 128, + order = "zzzzzzz", + prerequisites = { + data_util.mod_prefix .. "deep-space-science-pack-4", + data_util.mod_prefix .. "antimatter-engine", + data_util.mod_prefix .. "factory-spaceship-3", + }, + type = "technology", + unit = { + count = 10000, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "utility-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-4", 1 }, + { data_util.mod_prefix .. "material-science-pack-4", 1 }, + { data_util.mod_prefix .. "energy-science-pack-4", 1 }, + { data_util.mod_prefix .. "biological-science-pack-4", 1 }, + { data_util.mod_prefix .. "deep-space-science-pack-4", 1 } + }, + time = 60 + }, + localised_description = { + "technology-description." .. data_util.mod_prefix .. "spaceship-victory", + Shared.spaceship_victory_speed, + Shared.spaceship_victory_duration + } + }, + + { + name = data_util.mod_prefix .. "superconductive-cable", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "superconductive-cable" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "magnetic-canister", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "plasma-canister" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "plasma-canister-empty" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/superconductive-cable.png", + icon_size = 128, + order = "g-b-z", + prerequisites = { + data_util.mod_prefix .. "material-science-pack-3", + data_util.mod_prefix .. "energy-science-pack-3", + }, + type = "technology", + unit = { + count = 200, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "material-science-pack-3", 1 }, + { data_util.mod_prefix .. "energy-science-pack-3", 1 } + }, + time = 60 + } + }, + { + name = data_util.mod_prefix .. "tesla-gun", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "tesla-gun" }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "tesla-ammo" } + }, + icon = "__space-exploration-graphics__/graphics/technology/tesla-gun.png", + icon_size = 128, + order = "g-b-z", + prerequisites = { + "military-3", + data_util.mod_prefix .. "holmium-cable", + }, + type = "technology", + unit = { + count = 200, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "energy-science-pack-1", 1 } + }, + time = 60 + } + }, + { + name = data_util.mod_prefix .. "thruster-suit", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "thruster-suit" } + }, + icon = "__space-exploration-graphics__/graphics/technology/thruster-suit-orange.png", + icon_size = 128, + order = "g-b-z", + prerequisites = { + "glass-processing", + "modular-armor", + "rocket-silo", + "jetpack-1", + --data_util.mod_prefix .. "lifesupport-facility", + data_util.mod_prefix .. "lifesupport-equipment-1" + }, + type = "technology", + unit = { + count = 200, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 } + }, + time = 30 + } + }, + { + name = data_util.mod_prefix .. "thruster-suit-2", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "thruster-suit-2" } + }, + icon = "__space-exploration-graphics__/graphics/technology/thruster-suit-red.png", + icon_size = 128, + order = "g-b-z", + prerequisites = { + data_util.mod_prefix .. "thruster-suit", + data_util.mod_prefix .. "material-science-pack-1", + }, + type = "technology", + unit = { + count = 50, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "material-science-pack-1", 1 }, + }, + time = 60 + } + }, + { + name = data_util.mod_prefix .. "thruster-suit-3", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "thruster-suit-3" } + }, + icon = "__space-exploration-graphics__/graphics/technology/thruster-suit-blue.png", + icon_size = 128, + order = "g-b-z", + prerequisites = { + data_util.mod_prefix .. "astronomic-science-pack-3", + data_util.mod_prefix .. "biological-science-pack-1", + data_util.mod_prefix .. "superconductive-cable", + data_util.mod_prefix .. "thruster-suit-2", + data_util.mod_prefix .. "aeroframe-bulkhead" + }, + type = "technology", + unit = { + count = 300, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "biological-science-pack-1", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-3", 1 }, + { data_util.mod_prefix .. "material-science-pack-3", 1 }, + { data_util.mod_prefix .. "energy-science-pack-3", 1 }, + }, + time = 60 + } + }, + { + name = data_util.mod_prefix .. "thruster-suit-4", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "thruster-suit-4" } + }, + icon = "__space-exploration-graphics__/graphics/technology/thruster-suit-black.png", + icon_size = 128, + order = "g-b-z", + prerequisites = { + data_util.mod_prefix .. "antimatter-production", + data_util.mod_prefix .. "nanomaterial", + data_util.mod_prefix .. "self-sealing-gel", + data_util.mod_prefix .. "thruster-suit-3", + data_util.mod_prefix .. "naquium-processor", + }, + type = "technology", + unit = { + count = 500, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "biological-science-pack-4", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-4", 1 }, + { data_util.mod_prefix .. "material-science-pack-4", 1 }, + { data_util.mod_prefix .. "energy-science-pack-4", 1 }, + { data_util.mod_prefix .. "deep-space-science-pack-3", 1 } + }, + time = 60 + } + }, + + { + type = "technology", + name = data_util.mod_prefix .. "vitalic-acid", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "vitalic-acid", }, + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "bio-sludge-from-vitamelange" }, + }, + icon = "__space-exploration-graphics__/graphics/technology/vitalic-acid.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "processing-vitamelange", + data_util.mod_prefix .. "biological-science-pack-1", + }, + unit = { + count = 10, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "biological-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "bioscrubber", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "bioscrubber", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/bioscrubber.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "vitalic-acid", + }, + unit = { + count = 20, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "biological-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "vitalic-reagent", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "vitalic-reagent", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/vitalic-reagent.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "biological-science-pack-2", + }, + unit = { + count = 100, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "biological-science-pack-2", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "vitalic-epoxy", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "vitalic-epoxy", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/vitalic-epoxy.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "vitalic-reagent", + data_util.mod_prefix .. "biological-science-pack-3", + }, + unit = { + count = 200, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "biological-science-pack-3", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "self-sealing-gel", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "self-sealing-gel", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/self-sealing-gel.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "vitalic-epoxy", + data_util.mod_prefix .. "biological-science-pack-4", + }, + unit = { + count = 400, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "biological-science-pack-4", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "supercharger", + effects = { + { + type = "unlock-recipe", + recipe = data_util.mod_prefix .. "supercharger", + }, + }, + icon = "__space-exploration-graphics__/graphics/technology/supercharger.png", + icon_size = 128, + order = "e-g", + prerequisites = { + "construction-robotics", + data_util.mod_prefix .. "aeroframe-scaffold", + data_util.mod_prefix .. "heavy-girder", + data_util.mod_prefix .. "holmium-solenoid", + data_util.mod_prefix .. "material-science-pack-2" + }, + unit = { + count = 500, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "energy-science-pack-2", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-2", 1 }, + { data_util.mod_prefix .. "material-science-pack-2", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "wide-beacon", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "wide-beacon", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/wide-beacon.png", + icon_size = 128, + order = "e-g", + prerequisites = { + "effect-transmission", + data_util.mod_prefix .. "holmium-solenoid", + }, + unit = { + count = 500, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "energy-science-pack-2", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "wide-beacon-2", + effects = { + { type = "unlock-recipe", recipe = data_util.mod_prefix .. "wide-beacon-2", }, + }, + icon = "__space-exploration-graphics__/graphics/technology/wide-beacon-2.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "wide-beacon", + data_util.mod_prefix .. "dynamic-emitter", + data_util.mod_prefix .. "naquium-tessaract", + }, + unit = { + count = 1000, + time = 60, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "energy-science-pack-4", 1 }, + { data_util.mod_prefix .. "deep-space-science-pack-2", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "zone-discovery-random", + effects = { + { type = "nothing", effect_description={data_util.mod_prefix .. "zone-discovery-random"} } + }, + icon = "__space-exploration-graphics__/graphics/technology/discovery.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .."astronomic-science-pack-1", + }, + max_level = "infinite", + unit = { + count_formula = "10+L", + time = 60, + ingredients = { + { data_util.mod_prefix .. "astronomic-science-pack-1", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "zone-discovery-targeted", + effects = { + { type = "nothing", effect_description={data_util.mod_prefix .. "zone-discovery-targeted"} } + }, + icon = "__space-exploration-graphics__/graphics/technology/discovery.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .."astronomic-science-pack-2", + }, + max_level = "infinite", + unit = { + count_formula = "20+L", + time = 60, + ingredients = { + { data_util.mod_prefix .. "astronomic-science-pack-1", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-2", 1 }, + } + }, + }, + { + type = "technology", + name = data_util.mod_prefix .. "zone-discovery-deep", + effects = { + { type = "nothing", effect_description={data_util.mod_prefix .. "zone-discovery-deep"} } + }, + icon = "__space-exploration-graphics__/graphics/technology/discovery.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .."astronomic-science-pack-3", + }, + max_level = "infinite", + unit = { + count_formula = "100+L*10", + time = 60, + ingredients = { + { data_util.mod_prefix .. "astronomic-science-pack-1", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-2", 1 }, + { data_util.mod_prefix .. "astronomic-science-pack-3", 1 }, + } + }, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/tile/asteroid.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/tile/asteroid.lua new file mode 100644 index 0000000..63b0a77 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/tile/asteroid.lua @@ -0,0 +1,293 @@ +local data_util = require("data_util") +local noise = require("noise") + + +data:extend( +{ + { + type = "tile", + name = data_util.mod_prefix.."asteroid", + collision_mask = {space_collision_layer}, -- nothing? + autoplace = { -- see final-noise-programs + }, + layer = 20, + variants = tile_variations_template( + "__space-exploration-graphics__/graphics/terrain/asteroid/asteroid.png", + "__base__/graphics/terrain/masks/transition-3.png", + "__space-exploration-graphics__/graphics/terrain/asteroid/hr-asteroid.png", + "__base__/graphics/terrain/masks/hr-transition-3.png", + { + max_size = 4, + [1] = { weights = {0.085, 0.085, 0.085, 0.085, 0.087, 0.085, 0.065, 0.085, 0.045, 0.045, 0.045, 0.045, 0.005, 0.025, 0.045, 0.045 } }, + [2] = { probability = 1, weights = {0.018, 0.020, 0.015, 0.025, 0.015, 0.020, 0.025, 0.015, 0.025, 0.025, 0.010, 0.025, 0.020, 0.025, 0.025, 0.010 }, }, + [4] = { probability = 0.1, weights = {0.018, 0.020, 0.015, 0.025, 0.015, 0.020, 0.025, 0.015, 0.025, 0.025, 0.010, 0.025, 0.020, 0.025, 0.025, 0.010 }, }, + --[8] = { probability = 1.00, weights = {0.090, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.025, 0.125, 0.005, 0.010, 0.100, 0.100, 0.010, 0.020, 0.020} }, + } + ), + walking_sound = table.deepcopy(data.raw.tile["dirt-1"].walking_sound), + map_color = {r = 80, g = 80, b = 80}, + ageing=0.0001, + walking_speed_modifier = 1, + vehicle_friction_modifier = 1, + transitions = { + { + to_tiles = { + "water", + "deepwater", + "water-green", + "deepwater-green", + "water-shallow", + "water-mud", + data_util.mod_prefix .. "space" + }, + transition_group = 1, + inner_corner = { + count = 5, + hr_version = { + count = 5, + line_length = 5, + picture = "__space-exploration-graphics__/graphics/terrain/asteroid/hr-asteroid-cliff.png", + scale = 0.5, + tall = true, + x = 0, + y = 0 + }, + line_length = 5, + picture = "__space-exploration-graphics__/graphics/terrain/asteroid/asteroid-cliff.png", + tall = true, + x = 0, + y = 0 + }, + inner_corner_background = { + count = 5, + hr_version = { + count = 5, + line_length = 5, + picture = "__space-exploration-graphics__/graphics/terrain/asteroid/hr-asteroid-cliff.png", + scale = 0.5, + tall = true, + x = 1088, + y = 0 + }, + line_length = 5, + picture = "__space-exploration-graphics__/graphics/terrain/asteroid/asteroid-cliff.png", + tall = true, + x = 544, + y = 0 + }, + inner_corner_mask = { + count = 5, + hr_version = { + count = 5, + line_length = 5, + picture = "__space-exploration-graphics__/graphics/terrain/asteroid/hr-asteroid-cliff.png", + scale = 0.5, + x = 2176, + y = 0 + }, + line_length = 5, + picture = "__space-exploration-graphics__/graphics/terrain/asteroid/asteroid-cliff.png", + x = 1088, + y = 0 + }, + o_transition = { + count = 4, + hr_version = { + count = 4, + line_length = 4, + picture = "__space-exploration-graphics__/graphics/terrain/asteroid/hr-asteroid-cliff.png", + scale = 0.5, + tall = false, + x = 0, + y = 2304 + }, + line_length = 4, + picture = "__space-exploration-graphics__/graphics/terrain/asteroid/asteroid-cliff.png", + tall = false, + x = 0, + y = 1152 + }, + o_transition_background = { + count = 4, + hr_version = { + count = 4, + line_length = 4, + picture = "__space-exploration-graphics__/graphics/terrain/asteroid/hr-asteroid-cliff.png", + scale = 0.5, + tall = false, + x = 1088, + y = 2304 + }, + line_length = 4, + picture = "__space-exploration-graphics__/graphics/terrain/asteroid/asteroid-cliff.png", + tall = false, + x = 544, + y = 1152 + }, + o_transition_mask = { + count = 4, + hr_version = { + count = 4, + line_length = 4, + picture = "__space-exploration-graphics__/graphics/terrain/asteroid/hr-asteroid-cliff.png", + scale = 0.5, + x = 2176, + y = 2304 + }, + line_length = 4, + picture = "__space-exploration-graphics__/graphics/terrain/asteroid/asteroid-cliff.png", + x = 1088, + y = 1152 + }, + outer_corner = { + count = 5, + hr_version = { + count = 5, + line_length = 5, + picture = "__space-exploration-graphics__/graphics/terrain/asteroid/hr-asteroid-cliff.png", + scale = 0.5, + tall = true, + x = 0, + y = 576 + }, + line_length = 5, + picture = "__space-exploration-graphics__/graphics/terrain/asteroid/asteroid-cliff.png", + tall = true, + x = 0, + y = 288 + }, + outer_corner_background = { + count = 5, + hr_version = { + count = 5, + line_length = 5, + picture = "__space-exploration-graphics__/graphics/terrain/asteroid/hr-asteroid-cliff.png", + scale = 0.5, + tall = true, + x = 1088, + y = 576 + }, + line_length = 5, + picture = "__space-exploration-graphics__/graphics/terrain/asteroid/asteroid-cliff.png", + tall = true, + x = 544, + y = 288 + }, + outer_corner_mask = { + count = 5, + hr_version = { + count = 5, + line_length = 5, + picture = "__space-exploration-graphics__/graphics/terrain/asteroid/hr-asteroid-cliff.png", + scale = 0.5, + x = 2176, + y = 576 + }, + line_length = 5, + picture = "__space-exploration-graphics__/graphics/terrain/asteroid/asteroid-cliff.png", + x = 1088, + y = 288 + }, + side = { + count = 5, + hr_version = { + count = 5, + line_length = 5, + picture = "__space-exploration-graphics__/graphics/terrain/asteroid/hr-asteroid-cliff.png", + scale = 0.5, + tall = true, + x = 0, + y = 1152 + }, + line_length = 5, + picture = "__space-exploration-graphics__/graphics/terrain/asteroid/asteroid-cliff.png", + tall = true, + x = 0, + y = 576 + }, + side_background = { + count = 5, + hr_version = { + count = 5, + line_length = 5, + picture = "__space-exploration-graphics__/graphics/terrain/asteroid/hr-asteroid-cliff.png", + scale = 0.5, + tall = true, + x = 1088, + y = 1152 + }, + line_length = 5, + picture = "__space-exploration-graphics__/graphics/terrain/asteroid/asteroid-cliff.png", + tall = true, + x = 544, + y = 576 + }, + side_mask = { + count = 5, + hr_version = { + count = 5, + line_length = 5, + picture = "__space-exploration-graphics__/graphics/terrain/asteroid/hr-asteroid-cliff.png", + scale = 0.5, + x = 2176, + y = 1152 + }, + line_length = 5, + picture = "__space-exploration-graphics__/graphics/terrain/asteroid/asteroid-cliff.png", + x = 1088, + y = 576 + }, + u_transition = { + count = 2, + hr_version = { + count = 2, + line_length = 2, + picture = "__space-exploration-graphics__/graphics/terrain/asteroid/hr-asteroid-cliff.png", + scale = 0.5, + tall = true, + x = 0, + y = 1728 + }, + line_length = 2, + picture = "__space-exploration-graphics__/graphics/terrain/asteroid/asteroid-cliff.png", + tall = true, + x = 0, + y = 864 + }, + u_transition_background = { + count = 2, + hr_version = { + count = 2, + line_length = 2, + picture = "__space-exploration-graphics__/graphics/terrain/asteroid/hr-asteroid-cliff.png", + scale = 0.5, + tall = true, + x = 1088, + y = 1728 + }, + line_length = 2, + picture = "__space-exploration-graphics__/graphics/terrain/asteroid/asteroid-cliff.png", + tall = true, + x = 544, + y = 864 + }, + u_transition_mask = { + count = 2, + hr_version = { + count = 2, + line_length = 2, + picture = "__space-exploration-graphics__/graphics/terrain/asteroid/hr-asteroid-cliff.png", + scale = 0.5, + x = 2176, + y = 1728 + }, + line_length = 2, + picture = "__space-exploration-graphics__/graphics/terrain/asteroid/asteroid-cliff.png", + x = 1088, + y = 864 + } + }, + } + }, +}) +table.insert(data.raw.tile[data_util.mod_prefix.."asteroid"].transitions[1].to_tiles, data_util.mod_prefix.."space") diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/tile/plating.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/tile/plating.lua new file mode 100644 index 0000000..3134384 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/tile/plating.lua @@ -0,0 +1,366 @@ +local data_util = require("data_util") +data:extend( +{ + { + type = "tile", + name = data_util.mod_prefix .. "space-platform-plating", + needs_correction = false, + minable = { mining_time = 0.2, result = data_util.mod_prefix .. "space-platform-plating"}, + mined_sound = { filename = "__base__/sound/deconstruct-bricks.ogg" }, + collision_mask = { + space_collision_layer, + --"resource-layer" + }, + walking_speed_modifier = 1.5, + layer = 208, + decorative_removal_probability = 1, + variants = + { + main = + { + { + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/tile1.png", + count = 12, + size = 1, + hr_version = + { + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/hr-tile1.png", + size = 1, + scale = 0.5 + } + } + }, + inner_corner = + { + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/tile-inner-corner.png", + count = 1, + hr_version = + { + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/hr-tile-inner-corner.png", + scale = 0.5 + } + }, + outer_corner = + { + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/tile-outer-corner.png", + count = 1, + hr_version = + { + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/hr-tile-outer-corner.png", + scale = 0.5 + } + }, + side = + { + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/tile-side.png", + count = 16, + hr_version = + { + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/hr-tile-side.png", + scale = 0.5 + } + }, + u_transition = + { + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/tile-u.png", + count = 1, + hr_version = + { + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/hr-tile-u.png", + scale = 0.5 + } + }, + o_transition = + { + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/tile-o.png", + count = 1, + hr_version = + { + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/hr-tile-o.png", + scale = 0.5 + } + } + }, + walking_sound = + { + { + filename = "__base__/sound/walking/concrete-01.ogg", + volume = 1.2 + }, + { + filename = "__base__/sound/walking/concrete-02.ogg", + volume = 1.2 + }, + { + filename = "__base__/sound/walking/concrete-03.ogg", + volume = 1.2 + }, + { + filename = "__base__/sound/walking/concrete-04.ogg", + volume = 1.2 + } + }, + map_color={r=100, g=100, b=100}, + ageing=0, + vehicle_friction_modifier = 100, + transitions = { + { + to_tiles = { + "water", + "deepwater", + "water-green", + "deepwater-green", + "water-shallow", + "water-mud", + data_util.mod_prefix .. "space" + }, + transition_group = 1, + inner_corner = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/hr-tile-transitions.png", + scale = 0.5, + tall = true, + x = 0, + y = 0 + }, + line_length = 8, + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/tile-transitions.png", + tall = true, + x = 0, + y = 0 + }, + inner_corner_background = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/hr-tile-transitions.png", + scale = 0.5, + tall = true, + x = 1088, + y = 0 + }, + line_length = 8, + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/tile-transitions.png", + tall = true, + x = 544, + y = 0 + }, + inner_corner_mask = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/hr-tile-transitions.png", + scale = 0.5, + x = 2176, + y = 0 + }, + line_length = 8, + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/tile-transitions.png", + x = 1088, + y = 0 + }, + o_transition = { + count = 4, + hr_version = { + count = 4, + line_length = 4, + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/hr-tile-transitions.png", + scale = 0.5, + tall = false, + x = 0, + y = 2304 + }, + line_length = 4, + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/tile-transitions.png", + tall = false, + x = 0, + y = 1152 + }, + o_transition_background = { + count = 4, + hr_version = { + count = 4, + line_length = 4, + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/hr-tile-transitions.png", + scale = 0.5, + tall = false, + x = 1088, + y = 2304 + }, + line_length = 4, + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/tile-transitions.png", + tall = false, + x = 544, + y = 1152 + }, + o_transition_mask = { + count = 4, + hr_version = { + count = 4, + line_length = 4, + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/hr-tile-transitions.png", + scale = 0.5, + x = 2176, + y = 2304 + }, + line_length = 4, + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/tile-transitions.png", + x = 1088, + y = 1152 + }, + outer_corner = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/hr-tile-transitions.png", + scale = 0.5, + tall = true, + x = 0, + y = 576 + }, + line_length = 8, + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/tile-transitions.png", + tall = true, + x = 0, + y = 288 + }, + outer_corner_background = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/hr-tile-transitions.png", + scale = 0.5, + tall = true, + x = 1088, + y = 576 + }, + line_length = 8, + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/tile-transitions.png", + tall = true, + x = 544, + y = 288 + }, + outer_corner_mask = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/hr-tile-transitions.png", + scale = 0.5, + x = 2176, + y = 576 + }, + line_length = 8, + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/tile-transitions.png", + x = 1088, + y = 288 + }, + side = { + count = 16, + hr_version = { + count = 16, + line_length = 16, + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/hr-tile-transitions.png", + scale = 0.5, + tall = true, + x = 0, + y = 1152 + }, + line_length = 16, + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/tile-transitions.png", + tall = true, + x = 0, + y = 576 + }, + side_background = { + count = 16, + hr_version = { + count = 16, + line_length = 16, + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/hr-tile-transitions.png", + scale = 0.5, + tall = true, + x = 1088, + y = 1152 + }, + line_length = 16, + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/tile-transitions.png", + tall = true, + x = 544, + y = 576 + }, + side_mask = { + count = 16, + hr_version = { + count = 16, + line_length = 16, + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/hr-tile-transitions.png", + scale = 0.5, + x = 2176, + y = 1152 + }, + line_length = 16, + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/tile-transitions.png", + x = 1088, + y = 576 + }, + u_transition = { + count = 2, + hr_version = { + count = 2, + line_length = 2, + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/hr-tile-transitions.png", + scale = 0.5, + tall = true, + x = 0, + y = 1728 + }, + line_length = 2, + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/tile-transitions.png", + tall = true, + x = 0, + y = 864 + }, + u_transition_background = { + count = 2, + hr_version = { + count = 2, + line_length = 2, + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/hr-tile-transitions.png", + scale = 0.5, + tall = true, + x = 1088, + y = 1728 + }, + line_length = 2, + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/tile-transitions.png", + tall = true, + x = 544, + y = 864 + }, + u_transition_mask = { + count = 2, + hr_version = { + count = 2, + line_length = 2, + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/hr-tile-transitions.png", + scale = 0.5, + x = 2176, + y = 1728 + }, + line_length = 2, + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-plating/tile-transitions.png", + x = 1088, + y = 864 + } + }, + } + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/tile/regolith.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/tile/regolith.lua new file mode 100644 index 0000000..86f5f85 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/tile/regolith.lua @@ -0,0 +1,37 @@ +local data_util = require("data_util") +local noise = require("noise") + +local transitions = require("tile-transitions-static") + + +data:extend( +{ + { + type = "tile", + name = data_util.mod_prefix.."regolith", + collision_mask = {space_collision_layer}, -- nothing? + autoplace = { -- see final-noise-programs + }, + layer = 206, + variants = tile_variations_template( + "__space-exploration-graphics__/graphics/terrain/asteroid/asteroid.png", + "__base__/graphics/terrain/masks/transition-3.png", + "__space-exploration-graphics__/graphics/terrain/asteroid/hr-asteroid.png", + "__base__/graphics/terrain/masks/hr-transition-3.png", + { + max_size = 4, + [1] = { weights = {0.085, 0.085, 0.085, 0.085, 0.087, 0.085, 0.065, 0.085, 0.045, 0.045, 0.045, 0.045, 0.005, 0.025, 0.045, 0.045 } }, + [2] = { probability = 1, weights = {0.018, 0.020, 0.015, 0.025, 0.015, 0.020, 0.025, 0.015, 0.025, 0.025, 0.010, 0.025, 0.020, 0.025, 0.025, 0.010 }, }, + [4] = { probability = 0.1, weights = {0.018, 0.020, 0.015, 0.025, 0.015, 0.020, 0.025, 0.015, 0.025, 0.025, 0.010, 0.025, 0.020, 0.025, 0.025, 0.010 }, }, + --[8] = { probability = 1.00, weights = {0.090, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.025, 0.125, 0.005, 0.010, 0.100, 0.100, 0.010, 0.020, 0.020} }, + } + ), + transitions = transitions.cliff_transitions(), + transitions_between_transitions = transitions.cliff_transitions_between_transitions(), + walking_sound = table.deepcopy(data.raw.tile["dirt-1"].walking_sound), + map_color = {r = 128, g = 128, b = 128}, + ageing=0.0001, + walking_speed_modifier = 1, + vehicle_friction_modifier = 1, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/tile/scaffold.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/tile/scaffold.lua new file mode 100644 index 0000000..b1693f5 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/tile/scaffold.lua @@ -0,0 +1,139 @@ +local data_util = require("data_util") +data:extend( +{ + { + type = "tile", + name = data_util.mod_prefix .. "space-platform-scaffold", + needs_correction = false, + minable = {mining_time = 0.1, result = data_util.mod_prefix .. "space-platform-scaffold"}, + mined_sound = { filename = "__base__/sound/deconstruct-bricks.ogg" }, + collision_mask = { + space_collision_layer, + --"resource-layer" + }, + walking_speed_modifier = 0.75, + layer = 207, + decorative_removal_probability = 0.75, + variants = + { + main = + { + { + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-scaffold/tile1.png", + count = 16, + size = 1, + hr_version = + { + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-scaffold/hr-tile1.png", + count = 16, + size = 1, + scale = 0.5 + } + }, + { + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-scaffold/tile2.png", + count = 5, + size = 2, + probability = 0.05, + hr_version = + { + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-scaffold/hr-tile2.png", + count = 5, + size = 2, + scale = 0.5 + } + }, + { + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-scaffold/tile4.png", + count = 1, + size = 4, + probability = 0.02, + hr_version = + { + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-scaffold/hr-tile4.png", + count = 1, + size = 4, + scale = 0.5 + } + }, + }, + inner_corner = + { + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-scaffold/tile-inner-corner.png", + count = 8, + hr_version = + { + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-scaffold/hr-tile-inner-corner.png", + count = 8, + scale = 0.5 + } + }, + outer_corner = + { + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-scaffold/tile-outer-corner.png", + count = 8, + hr_version = + { + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-scaffold/hr-tile-outer-corner.png", + count = 8, + scale = 0.5 + } + }, + side = + { + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-scaffold/tile-side.png", + count = 8, + hr_version = + { + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-scaffold/hr-tile-side.png", + count = 8, + scale = 0.5 + } + }, + u_transition = + { + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-scaffold/tile-u.png", + count = 1, + hr_version = + { + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-scaffold/hr-tile-u.png", + count = 1, + scale = 0.5 + } + }, + o_transition = + { + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-scaffold/tile-o.png", + count = 8, + hr_version = + { + picture = "__space-exploration-graphics__/graphics/terrain/space-platform-scaffold/hr-tile-o.png", + count = 8, + scale = 0.5 + } + } + }, + walking_sound = + { + { + filename = "__base__/sound/walking/concrete-01.ogg", + volume = 1.2 + }, + { + filename = "__base__/sound/walking/concrete-02.ogg", + volume = 1.2 + }, + { + filename = "__base__/sound/walking/concrete-03.ogg", + volume = 1.2 + }, + { + filename = "__base__/sound/walking/concrete-04.ogg", + volume = 1.2 + } + }, + map_color={r=50, g=50, b=50}, + ageing=0, + vehicle_friction_modifier = 100 + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/tile/space.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/tile/space.lua new file mode 100644 index 0000000..4b709ec --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/tile/space.lua @@ -0,0 +1,44 @@ +local data_util = require("data_util") + +local space = { + type = "tile", + name = data_util.mod_prefix.."space", + collision_mask = { + --"floor-layer", -- to prevent, belts + "object-layer", -- to prevent certain other structures + --"item-layer", -- to prevent structures + "resource-layer", -- to prevent resources + "doodad-layer", -- to prevent decoratives + space_collision_layer, -- to block vehicles and identify as "in space" + empty_space_collision_layer + }, + autoplace = {}, + draw_in_water_layer = true, + layer = 0, + variants = tile_variations_template( + "__space-exploration-graphics__/graphics/terrain/space/space.png", + "__base__/graphics/terrain/masks/transition-3.png", + "__space-exploration-graphics__/graphics/terrain/space/hr-space.png", + "__base__/graphics/terrain/masks/hr-transition-3.png", + { + max_size = 2, + [1] = { weights = { 0.185, 0.085, 0.085, 0.085, 0.087, 0.085, 0.065, 0.085, 0.045, 0.045, 0.045, 0.045, 0.005, 0.025, 0.045, 0.045 } }, + [2] = { probability = 0.1, weights = {0.018, 0.0010, 0.0015, 0.0025, 0.0015, 0.0010, 0.0025, 0.0015, 0.0010, 0.0025, 0.0010, 0.0025, 0.0020, 0.0025, 0.0025, 0.0010 }, }, + --[4] = { probability = 0.1, weights = {0.018, 0.020, 0.015, 0.025, 0.015, 0.020, 0.025, 0.015, 0.025, 0.025, 0.010, 0.025, 0.020, 0.025, 0.025, 0.010 }, }, + --[8] = { probability = 1.00, weights = {0.090, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.025, 0.125, 0.005, 0.010, 0.100, 0.100, 0.010, 0.020, 0.020} }, + } + ), + --transitions = biomes.transitions[biome.transition .. "_transitions"], + --transitions_between_transitions = biomes.transitions[biome.transition .. "_transitions_between_transitions"], + --walking_sound = {}, + map_color = {r=11, g=13, b=15}, + pollution_absorption_per_second=0.0001, + walking_speed_modifier = 0.1, + vehicle_friction_modifier = 10000, + decorative_removal_probability = 1, + needs_correction = false, +} + +-- fix tile_variations_template for only size 2 and below +space.variants.main[3] = nil +data:extend{space} diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/tile/spaceship.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/tile/spaceship.lua new file mode 100644 index 0000000..1b4b25f --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/tile/spaceship.lua @@ -0,0 +1,102 @@ +local data_util = require("data_util") +data:extend( +{ + { + type = "tile", + name = data_util.mod_prefix .. "spaceship-floor", + needs_correction = false, + minable = {mining_time = 0.2, result = data_util.mod_prefix .. "spaceship-floor"}, + mined_sound = { filename = "__base__/sound/deconstruct-bricks.ogg" }, + collision_mask = { + space_collision_layer, + spaceship_collision_layer, + "resource-layer" + }, + walking_speed_modifier = 1.2, + layer = 208, + decorative_removal_probability = 1, + variants = + { + main = + { + { + picture = "__space-exploration-graphics__/graphics/terrain/spaceship-floor/tile1.png", + count = 12, + size = 1, + hr_version = { + picture = "__space-exploration-graphics__/graphics/terrain/spaceship-floor/hr-tile1.png", + size = 1, + scale = 0.5 + } + } + }, + inner_corner = + { + picture = "__space-exploration-graphics__/graphics/terrain/spaceship-floor/tile-inner-corner.png", + count = 1, + hr_version = { + picture = "__space-exploration-graphics__/graphics/terrain/spaceship-floor/hr-tile-inner-corner.png", + scale = 0.5 + } + }, + outer_corner = + { + picture = "__space-exploration-graphics__/graphics/terrain/spaceship-floor/tile-outer-corner.png", + count = 1, + hr_version = { + picture = "__space-exploration-graphics__/graphics/terrain/spaceship-floor/hr-tile-outer-corner.png", + scale = 0.5 + } + }, + side = + { + picture = "__space-exploration-graphics__/graphics/terrain/spaceship-floor/tile-side.png", + count = 16, + hr_version = { + picture = "__space-exploration-graphics__/graphics/terrain/spaceship-floor/hr-tile-side.png", + scale = 0.5 + } + }, + u_transition = + { + picture = "__space-exploration-graphics__/graphics/terrain/spaceship-floor/tile-u.png", + count = 1, + hr_version = { + picture = "__space-exploration-graphics__/graphics/terrain/spaceship-floor/hr-tile-u.png", + scale = 0.5 + } + }, + o_transition = + { + picture = "__space-exploration-graphics__/graphics/terrain/spaceship-floor/tile-o.png", + count = 1, + hr_version = { + picture = "__space-exploration-graphics__/graphics/terrain/spaceship-floor/hr-tile-o.png", + scale = 0.5 + } + } + }, + walking_sound = + { + { + filename = "__base__/sound/walking/concrete-01.ogg", + volume = 1.2 + }, + { + filename = "__base__/sound/walking/concrete-02.ogg", + volume = 1.2 + }, + { + filename = "__base__/sound/walking/concrete-03.ogg", + volume = 1.2 + }, + { + filename = "__base__/sound/walking/concrete-04.ogg", + volume = 1.2 + } + }, + map_color={r=100, g=100, b=100}, + ageing=0, + vehicle_friction_modifier = 100 + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/tile/tile-transitions-static.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/tile/tile-transitions-static.lua new file mode 100644 index 0000000..fcca8b3 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/tile/tile-transitions-static.lua @@ -0,0 +1,996 @@ +local data_util = require("data_util") + +function space_exploration_cliff_transitions() + return { + { + inner_corner = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/hr/cliff.png", + scale = 0.5, + tall = true, + x = 0, + y = 0 + }, + line_length = 8, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/sr/cliff.png", + tall = true, + x = 0, + y = 0 + }, + inner_corner_background = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/hr/cliff.png", + scale = 0.5, + tall = true, + x = 1088, + y = 0 + }, + line_length = 8, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/sr/cliff.png", + tall = true, + x = 544, + y = 0 + }, + inner_corner_mask = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/hr/cliff.png", + scale = 0.5, + x = 2176, + y = 0 + }, + line_length = 8, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/sr/cliff.png", + x = 1088, + y = 0 + }, + o_transition = { + count = 4, + hr_version = { + count = 4, + line_length = 4, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/hr/cliff.png", + scale = 0.5, + tall = false, + x = 0, + y = 2304 + }, + line_length = 4, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/sr/cliff.png", + tall = false, + x = 0, + y = 1152 + }, + o_transition_background = { + count = 4, + hr_version = { + count = 4, + line_length = 4, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/hr/cliff.png", + scale = 0.5, + tall = false, + x = 1088, + y = 2304 + }, + line_length = 4, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/sr/cliff.png", + tall = false, + x = 544, + y = 1152 + }, + o_transition_mask = { + count = 4, + hr_version = { + count = 4, + line_length = 4, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/hr/cliff.png", + scale = 0.5, + x = 2176, + y = 2304 + }, + line_length = 4, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/sr/cliff.png", + x = 1088, + y = 1152 + }, + outer_corner = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/hr/cliff.png", + scale = 0.5, + tall = true, + x = 0, + y = 576 + }, + line_length = 8, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/sr/cliff.png", + tall = true, + x = 0, + y = 288 + }, + outer_corner_background = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/hr/cliff.png", + scale = 0.5, + tall = true, + x = 1088, + y = 576 + }, + line_length = 8, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/sr/cliff.png", + tall = true, + x = 544, + y = 288 + }, + outer_corner_mask = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/hr/cliff.png", + scale = 0.5, + x = 2176, + y = 576 + }, + line_length = 8, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/sr/cliff.png", + x = 1088, + y = 288 + }, + side = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/hr/cliff.png", + scale = 0.5, + tall = true, + x = 0, + y = 1152 + }, + line_length = 8, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/sr/cliff.png", + tall = true, + x = 0, + y = 576 + }, + side_background = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/hr/cliff.png", + scale = 0.5, + tall = true, + x = 1088, + y = 1152 + }, + line_length = 8, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/sr/cliff.png", + tall = true, + x = 544, + y = 576 + }, + side_mask = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/hr/cliff.png", + scale = 0.5, + x = 2176, + y = 1152 + }, + line_length = 8, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/sr/cliff.png", + x = 1088, + y = 576 + }, + to_tiles = { + "water", + "deepwater", + "water-green", + "deepwater-green", + "water-shallow", + "water-mud" + }, + transition_group = 1, + u_transition = { + count = 2, + hr_version = { + count = 2, + line_length = 2, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/hr/cliff.png", + scale = 0.5, + tall = true, + x = 0, + y = 1728 + }, + line_length = 2, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/sr/cliff.png", + tall = true, + x = 0, + y = 864 + }, + u_transition_background = { + count = 2, + hr_version = { + count = 2, + line_length = 2, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/hr/cliff.png", + scale = 0.5, + tall = true, + x = 1088, + y = 1728 + }, + line_length = 2, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/sr/cliff.png", + tall = true, + x = 544, + y = 864 + }, + u_transition_mask = { + count = 2, + hr_version = { + count = 2, + line_length = 2, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/hr/cliff.png", + scale = 0.5, + x = 2176, + y = 1728 + }, + line_length = 2, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/sr/cliff.png", + x = 1088, + y = 864 + } + }, + { + background_layer_group = "zero", + background_layer_offset = 1, + inner_corner_background = { + count = 4, + hr_version = { + count = 4, + line_length = 4, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 0 + }, + line_length = 4, + picture = "__base__/graphics/terrain/out-of-map-transition/out-of-map-transition.png", + tall = true, + x = 544, + y = 0 + }, + inner_corner_mask = { + count = 4, + hr_version = { + count = 4, + line_length = 4, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 0 + }, + line_length = 4, + picture = "__base__/graphics/terrain/out-of-map-transition/out-of-map-transition.png", + x = 1088, + y = 0 + }, + o_transition_background = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-out-of-map-transition.png", + scale = 0.5, + tall = false, + x = 1088, + y = 2304 + }, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/out-of-map-transition.png", + tall = false, + x = 544, + y = 1152 + }, + o_transition_mask = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 2304 + }, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/out-of-map-transition.png", + x = 1088, + y = 1152 + }, + offset_background_layer_by_tile_layer = true, + outer_corner_background = { + count = 4, + hr_version = { + count = 4, + line_length = 4, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 576 + }, + line_length = 4, + picture = "__base__/graphics/terrain/out-of-map-transition/out-of-map-transition.png", + tall = true, + x = 544, + y = 288 + }, + outer_corner_mask = { + count = 4, + hr_version = { + count = 4, + line_length = 4, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 576 + }, + line_length = 4, + picture = "__base__/graphics/terrain/out-of-map-transition/out-of-map-transition.png", + x = 1088, + y = 288 + }, + side_background = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 1152 + }, + line_length = 8, + picture = "__base__/graphics/terrain/out-of-map-transition/out-of-map-transition.png", + tall = true, + x = 544, + y = 576 + }, + side_mask = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 1152 + }, + line_length = 8, + picture = "__base__/graphics/terrain/out-of-map-transition/out-of-map-transition.png", + x = 1088, + y = 576 + }, + to_tiles = { + "out-of-map" + }, + transition_group = 2, + u_transition_background = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 1728 + }, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/out-of-map-transition.png", + tall = true, + x = 544, + y = 864 + }, + u_transition_mask = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 1728 + }, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/out-of-map-transition.png", + x = 1088, + y = 864 + } + } + } + +end + +function space_exploration_cliff_transitions_between_transitions() + return { + { + inner_corner = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/hr/cliff-transition.png", + scale = 0.5, + tall = true, + x = 0, + y = 0 + }, + line_length = 3, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/sr/cliff-transition.png", + tall = true, + x = 0, + y = 0 + }, + inner_corner_background = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/hr/cliff-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 0 + }, + line_length = 3, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/sr/cliff-transition.png", + tall = true, + x = 544, + y = 0 + }, + inner_corner_mask = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/hr/cliff-transition.png", + scale = 0.5, + x = 2176, + y = 0 + }, + line_length = 3, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/sr/cliff-transition.png", + x = 1088, + y = 0 + }, + outer_corner = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/hr/cliff-transition.png", + scale = 0.5, + tall = true, + x = 0, + y = 576 + }, + line_length = 3, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/sr/cliff-transition.png", + tall = true, + x = 0, + y = 288 + }, + outer_corner_background = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/hr/cliff-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 576 + }, + line_length = 3, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/sr/cliff-transition.png", + tall = true, + x = 544, + y = 288 + }, + outer_corner_mask = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/hr/cliff-transition.png", + scale = 0.5, + x = 2176, + y = 576 + }, + line_length = 3, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/sr/cliff-transition.png", + x = 1088, + y = 288 + }, + side = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/hr/cliff-transition.png", + scale = 0.5, + tall = true, + x = 0, + y = 1152 + }, + line_length = 3, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/sr/cliff-transition.png", + tall = true, + x = 0, + y = 576 + }, + side_background = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/hr/cliff-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 1152 + }, + line_length = 3, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/sr/cliff-transition.png", + tall = true, + x = 544, + y = 576 + }, + side_mask = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/hr/cliff-transition.png", + scale = 0.5, + x = 2176, + y = 1152 + }, + line_length = 3, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/sr/cliff-transition.png", + x = 1088, + y = 576 + }, + transition_group = 0, + transition_group1 = 0, + transition_group2 = 1, + u_transition = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/hr/cliff-transition.png", + scale = 0.5, + tall = true, + x = 0, + y = 1728 + }, + line_length = 1, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/sr/cliff-transition.png", + tall = true, + x = 0, + y = 864 + }, + u_transition_background = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/hr/cliff-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 1728 + }, + line_length = 1, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/sr/cliff-transition.png", + tall = true, + x = 544, + y = 864 + }, + u_transition_mask = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/hr/cliff-transition.png", + scale = 0.5, + x = 2176, + y = 1728 + }, + line_length = 1, + picture = "__space-exploration-graphics__/graphics/terrain/water-transitions/sr/cliff-transition.png", + x = 1088, + y = 864 + }, + water_patch = { + filename = "__base__/graphics/terrain/water-transitions/water-patch.png", + height = 32, + hr_version = { + filename = "__base__/graphics/terrain/water-transitions/hr-water-patch.png", + height = 64, + scale = 0.5, + width = 64 + }, + width = 32 + } + }, + { + background_layer_group = "zero", + background_layer_offset = 1, + inner_corner_background = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dirt-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 0 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/dirt-out-of-map-transition.png", + tall = true, + x = 544, + y = 0 + }, + inner_corner_mask = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dirt-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 0 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/dirt-out-of-map-transition.png", + x = 1088, + y = 0 + }, + offset_background_layer_by_tile_layer = true, + outer_corner_background = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dirt-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 576 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/dirt-out-of-map-transition.png", + tall = true, + x = 544, + y = 288 + }, + outer_corner_mask = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dirt-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 576 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/dirt-out-of-map-transition.png", + x = 1088, + y = 288 + }, + side_background = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dirt-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 1152 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/dirt-out-of-map-transition.png", + tall = true, + x = 544, + y = 576 + }, + side_mask = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dirt-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 1152 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/dirt-out-of-map-transition.png", + x = 1088, + y = 576 + }, + transition_group = 0, + transition_group1 = 0, + transition_group2 = 2, + u_transition_background = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dirt-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 1728 + }, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/dirt-out-of-map-transition.png", + tall = true, + x = 544, + y = 864 + }, + u_transition_mask = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dirt-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 1728 + }, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/dirt-out-of-map-transition.png", + x = 1088, + y = 864 + }, + water_patch = nil + }, + { + background_layer_group = "zero", + background_layer_offset = 1, + inner_corner = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dark-dirt-shore-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 0, + y = 0 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/dark-dirt-shore-out-of-map-transition.png", + tall = true, + x = 0, + y = 0 + }, + inner_corner_background = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dark-dirt-shore-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 0 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/dark-dirt-shore-out-of-map-transition.png", + tall = true, + x = 544, + y = 0 + }, + inner_corner_mask = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dark-dirt-shore-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 0 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/dark-dirt-shore-out-of-map-transition.png", + x = 1088, + y = 0 + }, + offset_background_layer_by_tile_layer = true, + outer_corner = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dark-dirt-shore-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 0, + y = 576 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/dark-dirt-shore-out-of-map-transition.png", + tall = true, + x = 0, + y = 288 + }, + outer_corner_background = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dark-dirt-shore-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 576 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/dark-dirt-shore-out-of-map-transition.png", + tall = true, + x = 544, + y = 288 + }, + outer_corner_mask = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dark-dirt-shore-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 576 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/dark-dirt-shore-out-of-map-transition.png", + x = 1088, + y = 288 + }, + side = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dark-dirt-shore-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 0, + y = 1152 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/dark-dirt-shore-out-of-map-transition.png", + tall = true, + x = 0, + y = 576 + }, + side_background = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dark-dirt-shore-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 1152 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/dark-dirt-shore-out-of-map-transition.png", + tall = true, + x = 544, + y = 576 + }, + side_mask = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dark-dirt-shore-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 1152 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/dark-dirt-shore-out-of-map-transition.png", + x = 1088, + y = 576 + }, + transition_group = 1, + transition_group1 = 1, + transition_group2 = 2, + u_transition = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dark-dirt-shore-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 0, + y = 1728 + }, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/dark-dirt-shore-out-of-map-transition.png", + tall = true, + x = 0, + y = 864 + }, + u_transition_background = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dark-dirt-shore-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 1728 + }, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/dark-dirt-shore-out-of-map-transition.png", + tall = true, + x = 544, + y = 864 + }, + u_transition_mask = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dark-dirt-shore-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 1728 + }, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/dark-dirt-shore-out-of-map-transition.png", + x = 1088, + y = 864 + }, + water_patch = nil + } + } +end + +return { + cliff_transitions = space_exploration_cliff_transitions, + cliff_transitions_between_transitions = space_exploration_cliff_transitions_between_transitions, +} diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-1/utility-sprites.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/utility-sprites.lua new file mode 100644 index 0000000..48ab2bb --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-1/utility-sprites.lua @@ -0,0 +1,22 @@ +local data_util = require("data_util") + +data:extend({ + { + type = "sprite", + name = data_util.mod_prefix .. "pin-add", + filename = "__space-exploration-graphics__/graphics/icons/signal/pin-add.png", + priority = "extra-high", + width = 64, + height = 64, + shift = {0,0} + }, + { + type = "sprite", + name = data_util.mod_prefix .. "pin-list", + filename = "__space-exploration-graphics__/graphics/icons/signal/pin-list.png", + priority = "extra-high", + width = 64, + height = 64, + shift = {0,0} + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-2/capsules.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-2/capsules.lua new file mode 100644 index 0000000..3a55a4b --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-2/capsules.lua @@ -0,0 +1,217 @@ +local data_util = require("data_util") +local mod_prefix = data_util.mod_prefix +local unit_settings = { + { + name="small-biter", + stack_size = 100, + cooldown = 10, + craft_time = 10, + prerequisites = {mod_prefix .. "vitalic-acid"}, + ingredients = { + { name = mod_prefix .. "specimen", amount = 1 }, + { name = mod_prefix .. "vitalic-acid", amount = 4 }, + { type = "fluid", name = mod_prefix .. "nutrient-gel", amount = 20 }, + }, + tech_unit = { count = 100, time = 60, ingredients = { { mod_prefix .. "biological-science-pack-1", 1 }, } } + }, + { + name="medium-biter", + stack_size = 75, + cooldown = 15, + craft_time = 20, + prerequisites = {mod_prefix.."capsule-small-biter", mod_prefix .. "vitalic-reagent"}, + ingredients = { + { name = mod_prefix .. "capsule-small-biter", amount = 1 }, + { name = mod_prefix .. "vitalic-reagent", amount = 4 }, + { type = "fluid", name = mod_prefix .. "nutrient-gel", amount = 40 }, + }, + tech_unit = { count = 200, time = 60, ingredients = { { mod_prefix .. "biological-science-pack-2", 1 }, } } + }, + { + name="big-biter", + stack_size = 50, + cooldown = 20, + craft_time = 30, + prerequisites = {mod_prefix.."capsule-medium-biter", mod_prefix .. "vitalic-epoxy"}, + ingredients = { + { name = mod_prefix .. "capsule-medium-biter", amount = 1 }, + { name = mod_prefix .. "vitalic-epoxy", amount = 4 }, + { type = "fluid", name = mod_prefix .. "nutrient-gel", amount = 60 }, + }, + tech_unit = { count = 300, time = 60, ingredients = { { mod_prefix .. "biological-science-pack-3", 1 }, } } + }, + { + name="behemoth-biter", + stack_size = 25, + cooldown = 25, + craft_time = 40, + prerequisites = {mod_prefix.."capsule-big-biter", mod_prefix .. "self-sealing-gel"}, + ingredients = { + { name = mod_prefix .. "capsule-big-biter", amount = 1 }, + { name = mod_prefix .. "self-sealing-gel", amount = 4 }, + { type = "fluid", name = mod_prefix .. "nutrient-gel", amount = 80 }, + }, + tech_unit = { count = 400, time = 60, ingredients = { { mod_prefix .. "biological-science-pack-4", 1 }, } } + }, + { + name="small-spitter", + stack_size = 100, + cooldown = 10, + craft_time = 10, + prerequisites = {mod_prefix .. "vitalic-acid"}, + ingredients = { + { name = mod_prefix .. "specimen", amount = 1 }, + { name = mod_prefix .. "vitalic-acid", amount = 4 }, + { type = "fluid", name = mod_prefix .. "nutrient-gel", amount = 20 }, + }, + tech_unit = { count = 100, time = 60, ingredients = { { mod_prefix .. "biological-science-pack-1", 1 }, } } + }, + { + name="medium-spitter", + stack_size = 75, + cooldown = 15, + craft_time = 20, + prerequisites = {mod_prefix.."capsule-small-spitter", mod_prefix .. "vitalic-reagent"}, + ingredients = { + { name = mod_prefix .. "capsule-small-spitter", amount = 1 }, + { name = mod_prefix .. "vitalic-reagent", amount = 4 }, + { type = "fluid", name = mod_prefix .. "nutrient-gel", amount = 40 }, + }, + tech_unit = { count = 200, time = 60, ingredients = { { mod_prefix .. "biological-science-pack-2", 1 }, } } + }, + { + name="big-spitter", + stack_size = 50, + cooldown = 20, + craft_time = 30, + prerequisites = {mod_prefix.."capsule-medium-spitter", mod_prefix .. "vitalic-epoxy"}, + ingredients = { + { name = mod_prefix .. "capsule-medium-spitter", amount = 1 }, + { name = mod_prefix .. "vitalic-epoxy", amount = 4 }, + { type = "fluid", name = mod_prefix .. "nutrient-gel", amount = 60 }, + }, + tech_unit = { count = 300, time = 60, ingredients = { { mod_prefix .. "biological-science-pack-3", 1 }, } } + }, + { + name="behemoth-spitter", + stack_size = 25, + cooldown = 25, + craft_time = 40, + prerequisites = {mod_prefix.."capsule-big-spitter", mod_prefix .. "self-sealing-gel"}, + ingredients = { + { name = mod_prefix .. "capsule-big-spitter", amount = 1 }, + { name = mod_prefix .. "self-sealing-gel", amount = 4 }, + { type = "fluid", name = mod_prefix .. "nutrient-gel", amount = 80 }, + }, + tech_unit = { count = 400, time = 60, ingredients = { { mod_prefix .. "biological-science-pack-4", 1 }, } } + }, +} + +for i, unit_setting in pairs(unit_settings) do + local name = mod_prefix .. "capsule-"..unit_setting.name + local base_entity = data.raw.unit[unit_setting.name] + data:extend({ + { + type = "capsule", + subgroup = "capsule", + name = name, + capsule_action = { + attack_parameters = { + ammo_category = "capsule", + ammo_type = { + action = { + action_delivery = { + projectile = name, + starting_speed = 0.3, + type = "projectile" + }, + type = "direct" + }, + category = "capsule", + target_type = "position" + }, + cooldown = unit_setting.cooldown, + projectile_creation_distance = 0.6, + range = 25, + type = "projectile" + }, + type = "throw" + }, + icons = { + {icon = "__space-exploration-graphics__/graphics/icons/vatling.png", icon_size = 64, shift = {-8, 0}}, + {icon = base_entity.icon, icon_size = base_entity.icon_size, shift = {2, 0}} + }, + order = "u[unit-capsule]-"..string.format("%02d", i), + stack_size = unit_setting.stack_size, + localised_name = {"space-exploration.unit-capsule", {"entity-name."..unit_setting.name}} + }, + { + type = "projectile", + name = name, + acceleration = 0.005, + action = { + action_delivery = { + target_effects = { + entity_name = unit_setting.name, + show_in_tooltip = true, + type = "create-entity" + }, + type = "instant" + }, + type = "direct" + }, + animation = { + filename = "__base__/graphics/entity/poison-capsule/poison-capsule.png", + frame_count = 1, + height = 32, + priority = "high", + width = 32 + }, + flags = { + "not-on-map" + }, + light = { + intensity = 0.5, + size = 4 + }, + shadow = { + filename = "__base__/graphics/entity/poison-capsule/poison-capsule-shadow.png", + frame_count = 1, + height = 32, + priority = "high", + width = 32 + }, + smoke = nil, + }, + { + type = "recipe", + name = name, + result = name, + enabled = false, + energy_required = unit_setting.craft_time, + ingredients = unit_setting.ingredients, + requester_paste_multiplier = 1, + always_show_made_in = true, + category = "space-growth" + }, + { + type = "technology", + name = name, + effects = { + { + type = "unlock-recipe", + recipe = name, + }, + }, + icons = { + {icon = "__space-exploration-graphics__/graphics/technology/vatling.png", icon_size = 128}, + {icon = base_entity.icon, icon_size = base_entity.icon_size, shift = {0, 8}} + }, + order = "e-g", + prerequisites = unit_setting.prerequisites, + unit = unit_setting.tech_unit, + localised_name = {"space-exploration.unit-capsule", {"entity-name."..unit_setting.name}}, + localised_description = {"technology-description.se-unit-capsule", {"entity-name."..unit_setting.name}} + }, + }) +end diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-2/compatibility/general.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-2/compatibility/general.lua new file mode 100644 index 0000000..f53efe2 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-2/compatibility/general.lua @@ -0,0 +1,47 @@ +local allow_in_space = function(type, name) + if data.raw[type][name] then + data.raw[type][name].se_allow_in_space = true + end +end + +local add_crafting_category = function(type, name, category) + if data.raw[type][name] then + table.insert( data.raw[type][name].crafting_categories, category) + end +end +-- by Bernd +allow_in_space("storage-tank", "angels-pressure-tank-1") + +-- by Walter +for name in pairs(data.raw["assembling-machine"]) do + if( string.match(name,'[.]*chemical.plant[.]*')) then + table.insert(data.raw["assembling-machine"][name].crafting_categories, "pressure-washing") + --add_crafting_category("assembling-machine", name, "pressure-washing") + end +end + + +local armor = data.raw.armor + +for _, damage_type in pairs({"radioactive", "radiation", "radioactivity"}) do + + if data.raw["damage-type"][damage_type] then + + local resistances = table.deepcopy(armor["se-thruster-suit"].resistances) + table.insert(resistances, {type = damage_type, decrease = 3, percent = 30}) + armor["se-thruster-suit"].resistances = resistances + + resistances = table.deepcopy(armor["se-thruster-suit-2"].resistances) + table.insert(resistances, {type = damage_type, decrease = 4, percent = 45}) + armor["se-thruster-suit-2"].resistances = resistances + + resistances = table.deepcopy(armor["se-thruster-suit-3"].resistances) + table.insert(resistances, {type = damage_type, decrease = 5, percent = 60}) + armor["se-thruster-suit-3"].resistances = resistances + + resistances = table.deepcopy(armor["se-thruster-suit-3"].resistances) + table.insert(resistances, {type = damage_type, decrease = 6, percent = 80}) + armor["se-thruster-suit-4"].resistances = resistances + + end +end diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-2/compatibility/krastorio2/krastorio2.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-2/compatibility/krastorio2/krastorio2.lua new file mode 100644 index 0000000..06b1a6e --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-2/compatibility/krastorio2/krastorio2.lua @@ -0,0 +1,25 @@ +local data_util = require("data_util") + +if mods["Krastorio2"] then + + require("prototypes/phase-2/compatibility/krastorio2/matter") + require("prototypes/phase-2/compatibility/krastorio2/resources") + require("prototypes/phase-2/compatibility/krastorio2/recipes") + + -- temporarilty remove space-science-pack from any non-k2 techs. + -- after the procedural stop later add it back again, if it is at a certain complexity + for _, tech in pairs(data.raw.technology) do + if tech.mod ~= "Krastorio2" then + data_util.tech_remove_ingredients(tech.name, {"space-science-pack"}) + data_util.tech_remove_prerequisites(tech.name, {"space-science-pack"}) + tech.space_science_pack_removed = true + end + end + + data.raw["assembling-machine"]["kr-quantum-computer"].se_allow_in_space = true + + if data.raw.beacon["kr-singularity-beacon"] then + data.raw.beacon["kr-singularity-beacon"].se_allow_in_space = true + end + +end diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-2/compatibility/krastorio2/matter.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-2/compatibility/krastorio2/matter.lua new file mode 100644 index 0000000..3388237 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-2/compatibility/krastorio2/matter.lua @@ -0,0 +1,133 @@ +local data_util = require("data_util") + +local value_multiplier = 2 + +local matter = require("__Krastorio2__/lib/public/data-stages/matter-util") +--[[matter_func.createMatterRecipe(args) { + item_name = a, -- (string) the name of raw product. + minimum_conversion_quantity = b, -- (integer) the quantity of item necessary to make one conversion, is also the returned quantity from one deconversion. + matter_value = c, -- (integer) how much matter is gained by conversion and necessary to create the item from matter(minimum_conversion_quantity corresponds to matter_value). + conversion_matter_value = d, -- (optional)(integer) Different value from the matter_value of the item, that specify the matter gained by converting this item to matter (used when wanted different values on conversions). + return_item = e, -- (optional)(string) if the return item from the decoversion(matter to item) is different from the first one. + unlocked_by_technology = f, -- (optional)(string) what technology(the name) unlock the recipes, if isn't setted will be the first that make access to matter conversions. + energy_required = g, -- (optional)(integer) how much time need the conversion. + only_conversion = h, -- (optional)(boolean) if this param is true will be added only the recipe to get matter from the item, but not the deconversion from matter. + only_deconversion = i, -- (optional)(boolean) if this param is true will be added only the recipe to get the item(or return_item) from matter, but not the conversion to matter. + need_stabilizer = l, (optional)(boolean) if the item need stabilizer to be deconverted from matter to the original item(or return_item). + allow_productivity = m, (optional)(boolean) if true, productivity modules can be used on de-conversion from matter (matter->item). +} +default values: + wood 2 + iron ore 5 + raw rare metals 8 + stone 3.5 + water 0.5 + uranium ore 8 + copper plate 7.5 + rare metals 14 + plastic bar 6.6 + matter cube 1000 +]] + +-- matter has a similar role to the fusion-based matter fabricator, +-- but K2 matter is better in almost every way so is the clear upgrade +-- material fabricator is lat energy tech +-- matter system should be deep space tech (deep space tech needs some nice new toys anyway) +-- matter system also shouldn't be too early as it makes the resource logistic challenge much easier. +-- matter system fits well conceptually with deep space theme. +data_util.tech_add_prerequisites("kr-matter-processing", {data_util.mod_prefix .. "space-matter-fusion", data_util.mod_prefix .. "deep-space-science-pack-1"}) + +local make_tech = function(name, tech_image, item_name) + data:extend({ + { + type = "technology", + name = data_util.mod_prefix .. "kr-matter-"..name.."-processing", + mod = "space-exploration", + icons = { + { icon = "__Krastorio2__/graphics/technologies/backgrounds/matter.png", icon_size = 256}, + { icon = "__space-exploration-graphics__/graphics/technology/"..tech_image..".png", icon_size = 128} + }, + effects = {}, + prerequisites = {"kr-matter-processing"}, + order = "g-e-e", + unit = + { + count = 500, + ingredients = + { + {"production-science-pack", 1}, + {"utility-science-pack", 1}, + {"matter-tech-card", 1} + }, + time = 60 + }, + localised_name = {"technology-name.k2-conversion", {"item-name."..item_name}} + } + }) +end + +-- add as sand sink +krastorio.matter_func.createMatterRecipe({ + item_name = "sand", + minimum_conversion_quantity = 10, + matter_value = 1.5, + conversion_matter_value = 1, + energy_required = 0.5, + need_stabilizer = false, + unlocked_by_technology = "kr-matter-stone-processing" +}) + +make_tech("vulcanite", "vulcanite-processing", "se-vulcanite") +krastorio.matter_func.createMatterRecipe({ + item_name = data_util.mod_prefix .. "vulcanite", + minimum_conversion_quantity = 10, + matter_value = value_multiplier * 4*8, -- x8 + conversion_matter_value = value_multiplier * 4, + energy_required = value_multiplier * 4, + need_stabilizer = true, + unlocked_by_technology = data_util.mod_prefix .. "kr-matter-vulcanite-processing" +}) + +make_tech("cryonite", "cryonite-processing", "se-cryonite") +krastorio.matter_func.createMatterRecipe({ + item_name = data_util.mod_prefix .. "cryonite", + minimum_conversion_quantity = 10, + matter_value = value_multiplier * 5*8, -- x8 + conversion_matter_value = value_multiplier * 5, + energy_required = value_multiplier * 5, + need_stabilizer = true, + unlocked_by_technology = data_util.mod_prefix .. "kr-matter-cryonite-processing" +}) + +make_tech("beryllium", "beryllium-processing", "se-beryllium-ore") +krastorio.matter_func.createMatterRecipe({ + item_name = data_util.mod_prefix .. "beryllium-ore", + minimum_conversion_quantity = 10, + matter_value = value_multiplier * 6*8, -- x8 + conversion_matter_value = value_multiplier * 6, + energy_required = value_multiplier * 6, + need_stabilizer = true, + unlocked_by_technology = data_util.mod_prefix .. "kr-matter-beryllium-processing" +}) + +make_tech("holmium", "holmium-processing", "se-holmium-ore") +krastorio.matter_func.createMatterRecipe({ + item_name = data_util.mod_prefix .. "holmium-ore", + minimum_conversion_quantity = 10, + matter_value = value_multiplier * 7*8, -- x8 + conversion_matter_value = value_multiplier * 7, + energy_required = value_multiplier * 7, + need_stabilizer = true, + unlocked_by_technology = data_util.mod_prefix .. "kr-matter-holmium-processing" +}) + +make_tech("iridium", "iridium-processing", "se-iridium-ore") +krastorio.matter_func.createMatterRecipe({ + item_name = data_util.mod_prefix .. "iridium-ore", + minimum_conversion_quantity = 10, + matter_value = value_multiplier * 8*8, -- x8 + conversion_matter_value = value_multiplier * 8, + energy_required = value_multiplier * 8, + need_stabilizer = true, + unlocked_by_technology = data_util.mod_prefix .. "kr-matter-iridium-processing" +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-2/compatibility/krastorio2/recipes.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-2/compatibility/krastorio2/recipes.lua new file mode 100644 index 0000000..1f1b327 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-2/compatibility/krastorio2/recipes.lua @@ -0,0 +1,93 @@ +local data_util = require("data_util") + +local recipe = data.raw.recipe +local tech = data.raw.technology + + --Add various K2 products to the delivery cannon. +se_delivery_cannon_recipes = se_delivery_cannon_recipes or {} + +se_delivery_cannon_recipes["mineral-water"] = {name="mineral-water-barrel"} +se_delivery_cannon_recipes["biomethanol"] = {name="biomethanol-barrel"} +se_delivery_cannon_recipes["chlorine"] = {name="chlorine-barrel"} +se_delivery_cannon_recipes["dirty-water"] = {name="dirty-water-barrel"} +se_delivery_cannon_recipes["heavy-water"] = {name="heavy-water-barrel"} +se_delivery_cannon_recipes["hydrogen-chloride"] = {name="hydrogen-chloride-barrel"} +se_delivery_cannon_recipes["nitric-acid"] = {name="nitric-acid-barrel"} + +se_delivery_cannon_recipes["raw-imersite"] = {name="raw-imersite"} +se_delivery_cannon_recipes["imersite-powder"] = {name="imersite-powder"} +se_delivery_cannon_recipes["imersium-plate"] = {name="imersium-plate"} +se_delivery_cannon_recipes["imersite-crystal"] = {name="imersite-crystal"} +se_delivery_cannon_recipes["coke"] = {name="coke"} +se_delivery_cannon_recipes["quartz"] = {name="quartz"} +se_delivery_cannon_recipes["silicon"] = {name="silicon"} +se_delivery_cannon_recipes["enriched-iron"] = {name="enriched-iron"} +se_delivery_cannon_recipes["enriched-copper"] = {name="enriched-copper"} +se_delivery_cannon_recipes["enriched-rare-metals"] = {name="enriched-rare-metals"} +se_delivery_cannon_recipes["raw-rare-metals"] = {name="raw-rare-metals"} +se_delivery_cannon_recipes["rare-metals"] = {name="rare-metals"} +se_delivery_cannon_recipes["lithium"] = {name="lithium"} +se_delivery_cannon_recipes["lithium-chloride"] = {name="lithium-chloride"} +se_delivery_cannon_recipes["tritium"] = {name="tritium"} +se_delivery_cannon_recipes["fuel"] = {name="fuel"} +se_delivery_cannon_recipes["bio-fuel"] = {name="bio-fuel"} +se_delivery_cannon_recipes["advanced-fuel"] = {name="advanced-fuel"} +se_delivery_cannon_recipes["fertilizer"] = {name="fertilizer"} + +table.insert(tech["se-processing-vulcanite"].prerequisites, "kr-enriched-ores") + +recipe["se-iron-smelting-vulcanite"].ingredients = { + {"enriched-iron", 8}, + {"se-vulcanite-block", 1} +} + +recipe["se-copper-smelting-vulcanite"].ingredients = { + {"enriched-copper", 8}, + {"se-vulcanite-block", 1} +} + +local rare_metals_vulcanite = table.deepcopy(recipe["se-copper-smelting-vulcanite"]) +rare_metals_vulcanite.name = "rare-metals-vulcanite" +rare_metals_vulcanite.ingredients = { + {"enriched-rare-metals", 8}, + {"se-vulcanite-block", 1} +} +rare_metals_vulcanite.icons = { + {icon = data.raw.item["rare-metals"].icon, icon_size = data.raw.item["rare-metals"].icon_size, scale = 32/data.raw.item["rare-metals"].icon_size}, + {icon = data.raw.item[data_util.mod_prefix .. "vulcanite-block"].icon, + icon_size = data.raw.item[data_util.mod_prefix .. "vulcanite-block"].icon_size, + scale = 0.5 * 32/data.raw.item[data_util.mod_prefix .. "vulcanite-block"].icon_size, + shift = {-10, -10} + }, +} +rare_metals_vulcanite.results = {{"rare-metals", 12}} +rare_metals_vulcanite.group = "resources" +rare_metals_vulcanite.subgroup = "raw-material" +recipe["rare-metals-vulcanite"] = rare_metals_vulcanite +table.insert(tech["se-processing-vulcanite"].effects, {type = "unlock-recipe", recipe = "rare-metals-vulcanite"}) + +local silicon_vulcanite = table.deepcopy(recipe["se-copper-smelting-vulcanite"]) +silicon_vulcanite.name = "silicon-vulcanite" +silicon_vulcanite.ingredients = { + {"quartz", 18}, + {"se-vulcanite-block", 1} +} +silicon_vulcanite.icons = { + {icon = data.raw.item["silicon"].icon, icon_size = data.raw.item["silicon"].icon_size, scale = 32/data.raw.item["silicon"].icon_size}, + {icon = data.raw.item[data_util.mod_prefix .. "vulcanite-block"].icon, + icon_size = data.raw.item[data_util.mod_prefix .. "vulcanite-block"].icon_size, + scale = 0.5 * 32/data.raw.item[data_util.mod_prefix .. "vulcanite-block"].icon_size, + shift = {-10, -10} + }, +} +silicon_vulcanite.results = {{"silicon", 18}} +recipe["silicon-vulcanite"] = silicon_vulcanite +table.insert(tech["se-processing-vulcanite"].effects, {type = "unlock-recipe", recipe = "silicon-vulcanite"}) + +recipe["se-stone-brick-vulcanite"].group = "resources" +recipe["se-stone-brick-vulcanite"].subgroup = "raw-material" + +data_util.allow_productivity({ + "rare-metals-vulcanite", + "silicon-vulcanite", +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-2/compatibility/krastorio2/resources.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-2/compatibility/krastorio2/resources.lua new file mode 100644 index 0000000..d1b8815 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-2/compatibility/krastorio2/resources.lua @@ -0,0 +1,43 @@ +local data_util = require("data_util") + +-- vanilla resource changed. Need more uranium. +se_resources["uranium-ore"] = se_resources["uranium-ore"] or { + order = "c-d", + has_starting_area_placement = false, + base_density = 5, + base_spots_per_km2 = 8, + random_spot_size_minimum = 5, + random_spot_size_maximum = 10 +} + +-- Krastorio 2 resources +se_resources["rare-metals"] = {order = "c-c", has_starting_area_placement = false, base_density = 8, starting_rq_factor_multiplier = 1.5} +se_resources["mineral-water"] = { + order = "e-b", + has_starting_area_placement = false, + base_density = 8, + base_spots_per_km2 = 2, + random_probability = 1/48, + random_spot_size_minimum = 1, + random_spot_size_maximum = 1, -- don't randomize spot size + additional_richness = 120000, -- this increases the total everywhere, so base_density needs to be decreased to compensate + regular_rq_factor_multiplier = 1, + starting_rq_factor_multiplier = 1 +} +se_resources["imersite"] = { + order = "e-c", + has_starting_area_placement = false, + base_density = 1, + base_spots_per_km2 = 0.05, + random_spot_size_minimum = 0.01, + random_spot_size_maximum = 0.1, + additional_richness = 250000, -- this increases the total everywhere, so base_density needs to be decreased to compensate + regular_rq_factor_multiplier = 1, + starting_rq_factor_multiplier = 1 +} + +se_core_fragment_resources["raw-imersite"] = { multiplier = 0.5, omni_multiplier = 0} +se_core_fragment_resources["mineral-water"] = { multiplier = 1, omni_multiplier = 0} + +-- more uranium in fragments +se_core_fragment_resources["uranium-ore"] = se_core_fragment_resources["uranium-ore"] or { multiplier = 0.5, omni_multiplier = 0.02} diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-2/generic-recycling.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-2/generic-recycling.lua new file mode 100644 index 0000000..2ff53d9 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-2/generic-recycling.lua @@ -0,0 +1,170 @@ +local data_util = require("data_util") + +local function scrapping_recipe(item_name, input_count, results) + local item = data.raw.item[item_name] + if not item then return end + -- return can be a number or a result list + if type(results) == "number" then + if results < 1 then + results = {{ name = data_util.mod_prefix .. "scrap", amount_min = 1, amount_max = 1, probability = results}} + else + results = {{ data_util.mod_prefix .. "scrap", results}} + end + end + + local recipe = { + type = "recipe", + name = data_util.mod_prefix .. "-scrapping-"..item_name, + ingredients = { + { item_name, input_count} + }, + results = results, + category = "hard-recycling", + subgroup = "space-recycling", + icons = data_util.transition_icons( + { + icon = item.icon, + icon_size = item.icon_size, scale = 0.5 + }, + { + icon = data.raw.item[data_util.mod_prefix .. "scrap"].icon, + icon_size = data.raw.item[data_util.mod_prefix .. "scrap"].icon_size, scale = 0.5 + } + ), + energy_required = 1, + allow_as_intermediate = false, + localised_name = {"recipe-name." .. data_util.mod_prefix .. "generic-scrapping", {"entity-name."..item_name}}, + enabled = false, + always_show_made_in = true, + allow_decomposition = false, + --hide_from_player_crafting = true, + } + data:extend({recipe}) + data_util.tech_lock_recipes(data_util.mod_prefix.."recycling-facility", {data_util.mod_prefix .. "-scrapping-"..item_name}) +end + +local function reverse_recipe(recipe_name, item_name) + local o_recipe = data.raw.recipe[recipe_name] + if not o_recipe then return end + if not item_name then item_name = recipe_name end + local item = data.raw.item[item_name] + if not item then return end + + + local recipe = { + type = "recipe", + name = data_util.mod_prefix .. "recycle-"..recipe_name, + category = "hard-recycling", + subgroup = "space-recycling", + icons = data_util.transition_icons( + { + icon = item.icon, + icon_size = item.icon_size, scale = 0.5 + }, + { + icon = data.raw.item[data_util.mod_prefix .. "scrap"].icon, + icon_size = data.raw.item[data_util.mod_prefix .. "scrap"].icon_size, scale = 0.5 + } + ), + energy_required = 1, + allow_as_intermediate = false, + localised_name = {"recipe-name." .. data_util.mod_prefix .. "generic-recycling", {"entity-name."..item_name}}, + enabled = false, + always_show_made_in = true, + allow_decomposition = false, + --hide_from_player_crafting = true, + } + recipe.ingredients = {{name=item_name, amount = 1}} + recipe.results = table.deepcopy(o_recipe.ingredients or o_recipe.normal.ingredients) + data_util.result_to_results(recipe.results) + + for k, result in pairs(recipe.results) do + local name = result.name or result[1] + local count = result.amount or (result[2] or 1) + local return_count = count*0.75 + if return_count < 1 then + recipe.results[k] = {name=name, amount_min = 1, amount_max = 1, probability = return_count} + else + recipe.results[k] = {name=name, amount = math.floor(return_count)} + end + end + data:extend({recipe}) + data_util.tech_lock_recipes(data_util.mod_prefix.."recycling-facility", {data_util.mod_prefix .. "recycle-"..recipe_name}) +end + +reverse_recipe("small-electric-pole") +reverse_recipe("small-iron-electric-pole") +reverse_recipe("medium-electric-pole") +reverse_recipe("big-electric-pole") +reverse_recipe("substation") +reverse_recipe("radar") +reverse_recipe("pistol") + +data:extend({ + { + type = "recipe", + name = "landfill", + energy_required = 1, + enabled = false, + category = "crafting", + ingredients = + { + {"stone", 50} + }, + result= "landfill", + result_count = 1, + order = "z-a-a" + }, + { + type = "recipe", + name = "landfill-sand", + energy_required = 1, + enabled = false, + category = "crafting", + icons = { + {icon = data.raw.item.landfill.icon, icon_size = data.raw.item.landfill.icon_size}, + {icon = data.raw.item.sand.icon, icon_size = data.raw.item.sand.icon_size, scale = 0.33*64/data.raw.item.sand.icon_size}, + }, + ingredients = + { + {"sand", 200} + }, + result= "landfill", + result_count = 1, + order = "z-a-b", + allow_decomposition = false, + } +}) +data_util.tech_lock_recipes("landfill", {"landfill-sand"}) + +local function landfil_recipe(item_name, count) + data:extend({ + { + type = "recipe", + name = "landfill-"..item_name, + energy_required = 1, + enabled = false, + category = "hard-recycling", + icons = { + {icon = data.raw.item.landfill.icon, icon_size = data.raw.item.landfill.icon_size}, + {icon = data.raw.item[item_name].icon, icon_size = data.raw.item[item_name].icon_size, scale = 0.33*64/data.raw.item[item_name].icon_size}, + }, + ingredients = + { + {item_name, count} + }, + result= "landfill", + result_count = 1, + order = "z-b-"..item_name, + allow_decomposition = false, + } + }) + data_util.tech_lock_recipes(data_util.mod_prefix.."recycling-facility", {"landfill-"..item_name}) +end + +landfil_recipe(data_util.mod_prefix.."scrap", 100) +landfil_recipe("iron-ore", 50) +landfil_recipe("copper-ore", 50) +landfil_recipe(data_util.mod_prefix.."iridium-ore", 25) +landfil_recipe(data_util.mod_prefix.."holmium-ore", 50) +landfil_recipe(data_util.mod_prefix.."beryllium-ore", 50) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-2/linked-containers-old.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-2/linked-containers-old.lua new file mode 100644 index 0000000..ca75e18 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-2/linked-containers-old.lua @@ -0,0 +1,90 @@ +local data_util = require("data_util") +local tech_effects = {} +if mods["aai-containers"] then + local base_models = { + "logistic-chest-passive-provider", + "aai-strongbox-passive-provider", + "aai-storehouse-passive-provider", + "aai-warehouse-passive-provider" + } + local inventory_sizes = {1, 4, 9, 25} + local arcosphere_cost = {2, 4, 7, 10} + local base_containers = {"steel-chest", "aai-strongbox", "aai-storehouse", "aai-warehouse"} + for i, base_model in pairs(base_models) do + local item = table.deepcopy(data.raw.item[base_model]) + local entity = table.deepcopy(data.raw["logistic-container"][base_model]) + + local name = data_util.replace(item.name, "passive-provider", "linked") + name = data_util.replace(name, "logistic-chest", "chest") + + item.name = name + item.place_result = name + item.icons[2].tint = {1,1,1} + item.order = "z" ..item.order + + local recipe = { + type = "recipe", + name = name, + ingredients = { + { base_containers[i], 1 }, + { name = data_util.mod_prefix .. "naquium-processor", amount = inventory_sizes[i]}, + { name = data_util.mod_prefix .. "arcosphere-a", amount = arcosphere_cost[i]}, + }, + result = name, + energy_required = 60 * i, + category = "space-manufacturing", + enabled = false, + always_show_made_in = true, + } + table.insert(tech_effects, { type = "unlock-recipe", recipe = name}) + + entity.type = "linked-container" + entity.name = name + entity.inventory_size = inventory_sizes[i] + entity.minable.result = name + entity.type = "linked-container" + entity.circuit_wire_connection_point = nil + entity.circuit_connector_sprites = nil + entity.circuit_wire_max_distance = nil + entity.gui_mode = "none" + entity.picture = entity.animation + entity.animation = nil + entity.picture.layers[3].tint = {1,1,1} + entity.picture.layers[3].hr_version.tint = {1,1,1} + data:extend({item, recipe, entity}) + end +end +data:extend({ + { + type = "technology", + name = data_util.mod_prefix .. "linked-containers", + effects = tech_effects, + icons = mods["aai-containers"] and { + { icon = "__aai-containers__/graphics/technology/container-6-base.png", icon_size = 128 }, + { icon = "__aai-containers__/graphics/technology/container-6-mask.png", icon_size = 128 } + } or nil, + icon = mods["aai-containers"] and nil or "__space-exploration-graphics__/graphics/technology/teleportation.png", + icon_size = 128, + order = "e-g", + prerequisites = { + data_util.mod_prefix .. "teleportation", + }, + unit = { + count = 5000, + time = 60, + ingredients = { + { "logistic-science-pack", 1 }, + { "utility-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .."astronomic-science-pack-4", 1 }, + { data_util.mod_prefix .."energy-science-pack-4", 1 }, + { data_util.mod_prefix .."deep-space-science-pack-4", 1 }, + } + }, + enabled = true + }, +}) +if not mods["aai-containers"] then + data.raw.technology[data_util.mod_prefix .. "linked-containers"].localised_description = {"technology-description."..data_util.mod_prefix .. "linked-containers-disabled"} +end diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-2/modules.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-2/modules.lua new file mode 100644 index 0000000..3148aa5 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-2/modules.lua @@ -0,0 +1,1331 @@ +local data_util = require("data_util") + +local modules_per_tier = 3 + +data.raw.technology["productivity-module"].icon = "__space-exploration-graphics__/graphics/technology/modules/productivity-1.png" +data.raw.technology["productivity-module"].icon_size = 128 +data.raw.technology["productivity-module-2"].icon = "__space-exploration-graphics__/graphics/technology/modules/productivity-2.png" +data.raw.technology["productivity-module-2"].icon_size = 128 +data.raw.technology["productivity-module-3"].icon = "__space-exploration-graphics__/graphics/technology/modules/productivity-3.png" +data.raw.technology["productivity-module-3"].icon_size = 128 + +data.raw.technology["speed-module"].icon = "__space-exploration-graphics__/graphics/technology/modules/speed-1.png" +data.raw.technology["speed-module"].icon_size = 128 +data.raw.technology["speed-module-2"].icon = "__space-exploration-graphics__/graphics/technology/modules/speed-2.png" +data.raw.technology["speed-module-2"].icon_size = 128 +data.raw.technology["speed-module-3"].icon = "__space-exploration-graphics__/graphics/technology/modules/speed-3.png" +data.raw.technology["speed-module-3"].icon_size = 128 + +data.raw.technology["effectivity-module"].icon = "__space-exploration-graphics__/graphics/technology/modules/effectivity-1.png" +data.raw.technology["effectivity-module"].icon_size = 128 +data.raw.technology["effectivity-module-2"].icon = "__space-exploration-graphics__/graphics/technology/modules/effectivity-2.png" +data.raw.technology["effectivity-module-2"].icon_size = 128 +data.raw.technology["effectivity-module-3"].icon = "__space-exploration-graphics__/graphics/technology/modules/effectivity-3.png" +data.raw.technology["effectivity-module-3"].icon_size = 128 + +data_util.tech_add_prerequisites("productivity-module-3", {"battery"}) +data_util.tech_add_prerequisites("speed-module-3", {"battery"}) +data_util.tech_add_prerequisites("effectivity-module-3", {"battery"}) + +data_util.replace_or_add_ingredient("productivity-module-2", "productivity-module", "productivity-module", modules_per_tier) +data_util.replace_or_add_ingredient("speed-module-2", "speed-module", "speed-module", modules_per_tier) +data_util.replace_or_add_ingredient("effectivity-module-2", "effectivity-module", "effectivity-module", modules_per_tier) + +data_util.replace_or_add_ingredient("productivity-module-3", "productivity-module-2", "productivity-module-2", modules_per_tier) +data_util.replace_or_add_ingredient("speed-module-3", "speed-module-2", "speed-module-2", modules_per_tier) +data_util.replace_or_add_ingredient("effectivity-module-3", "effectivity-module-2", "effectivity-module-2", modules_per_tier) + +data.raw.module["productivity-module"].icon = "__space-exploration-graphics__/graphics/icons/modules/productivity-1.png" +data.raw.module["productivity-module"].icon_size = 64 +data.raw.module["productivity-module"].icon_mipmaps = 1 +data.raw.module["productivity-module"].subgroup = "module-productivity" +data.raw.module["productivity-module"].effect = + { + productivity = {bonus = 0.04}, + consumption = {bonus = 0.5}, + pollution = {bonus = 0.05}, + speed = {bonus = -0.1} + } +data.raw.module["productivity-module-2"].icon = "__space-exploration-graphics__/graphics/icons/modules/productivity-2.png" +data.raw.module["productivity-module-2"].icon_size = 64 +data.raw.module["productivity-module-2"].icon_mipmaps = 1 +data.raw.module["productivity-module-2"].subgroup = "module-productivity" +data.raw.module["productivity-module-2"].effect = + { + productivity = {bonus = 0.06}, + consumption = {bonus = 0.6}, + pollution = {bonus = 0.06}, + speed = {bonus = -0.15} + } +data.raw.module["productivity-module-3"].icon = "__space-exploration-graphics__/graphics/icons/modules/productivity-3.png" +data.raw.module["productivity-module-3"].icon_size = 64 +data.raw.module["productivity-module-3"].icon_mipmaps = 1 +data.raw.module["productivity-module-3"].subgroup = "module-productivity" +data.raw.module["productivity-module-3"].effect = + { + productivity = {bonus = 0.08}, + consumption = {bonus = 0.8}, + pollution = {bonus = 0.08}, + speed = {bonus = -0.2} + } + +data.raw.module["speed-module"].icon = "__space-exploration-graphics__/graphics/icons/modules/speed-1.png" +data.raw.module["speed-module"].icon_size = 64 +data.raw.module["speed-module"].icon_mipmaps = 1 +data.raw.module["speed-module"].subgroup = "module-speed" +data.raw.module["speed-module"].effect = + { + consumption = {bonus = 0.5}, + pollution = {bonus = 0.04}, + speed = {bonus = 0.2} + } +data.raw.module["speed-module-2"].icon = "__space-exploration-graphics__/graphics/icons/modules/speed-2.png" +data.raw.module["speed-module-2"].icon_size = 64 +data.raw.module["speed-module-2"].icon_mipmaps = 1 +data.raw.module["speed-module-2"].subgroup = "module-speed" +data.raw.module["speed-module-2"].effect = + { + consumption = {bonus = 0.6}, + pollution = {bonus = 0.06}, + speed = {bonus = 0.3} + } +data.raw.module["speed-module-3"].icon = "__space-exploration-graphics__/graphics/icons/modules/speed-3.png" +data.raw.module["speed-module-3"].icon_size = 64 +data.raw.module["speed-module-3"].icon_mipmaps = 1 +data.raw.module["speed-module-3"].subgroup = "module-speed" +data.raw.module["speed-module-3"].effect = + { + consumption = {bonus = 0.8}, + pollution = {bonus = 0.08}, + speed = {bonus = 0.4} + } + +data.raw.module["effectivity-module"].icon = "__space-exploration-graphics__/graphics/icons/modules/effectivity-1.png" +data.raw.module["effectivity-module"].icon_size = 64 +data.raw.module["effectivity-module"].icon_mipmaps = 1 +data.raw.module["effectivity-module"].subgroup = "module-effectivity" +data.raw.module["effectivity-module"].effect = + { + consumption = {bonus = -0.4}, + pollution = {bonus = -0.1}, + } +data.raw.module["effectivity-module-2"].icon = "__space-exploration-graphics__/graphics/icons/modules/effectivity-2.png" +data.raw.module["effectivity-module-2"].icon_size = 64 +data.raw.module["effectivity-module-2"].icon_mipmaps = 1 +data.raw.module["effectivity-module-2"].subgroup = "module-effectivity" +data.raw.module["effectivity-module-2"].effect = + { + consumption = {bonus = -0.6}, + pollution = {bonus = -0.15}, + } +data.raw.module["effectivity-module-3"].icon = "__space-exploration-graphics__/graphics/icons/modules/effectivity-3.png" +data.raw.module["effectivity-module-3"].icon_size = 64 +data.raw.module["effectivity-module-3"].icon_mipmaps = 1 +data.raw.module["effectivity-module-3"].subgroup = "module-effectivity" +data.raw.module["effectivity-module-3"].effect = + { + consumption = {bonus = -1}, + pollution = {bonus = -0.2}, + } + +data:extend({ + + --productivity + { + type = "recipe", + name = "productivity-module", + ingredients = { + {name = "electronic-circuit", amount = 5}, + {name = "advanced-circuit", amount = 1}, + }, + energy_required = 2^1, + result = "productivity-module", + enabled = false, + always_show_products = true, + always_show_made_in = true, + }, + { + type = "recipe", + name = "productivity-module-2", + ingredients = { + {name = "productivity-module", amount = modules_per_tier}, + {name = "advanced-circuit", amount = 5}, + {name = "processing-unit", amount = 1}, + }, + energy_required = 2^2, + result = "productivity-module-2", + enabled = false, + always_show_products = true, + always_show_made_in = true, + }, + { + type = "recipe", + name = "productivity-module-3", + ingredients = { + {name = "productivity-module-2", amount = modules_per_tier}, + {name = "processing-unit", amount = 5}, + {name = "battery", amount = 1}, + }, + energy_required = 2^3, + result = "productivity-module-3", + enabled = false, + always_show_products = true, + always_show_made_in = true, + }, + { + type = "module", + name = "productivity-module-4", + icon = "__space-exploration-graphics__/graphics/icons/modules/productivity-4.png", + icon_size = 64, + subgroup = "module-productivity", + category = "productivity", + tier = 4, + order = "c[productivity]-d[productivity-module-4]", + stack_size = 50, + effect = + { + productivity = {bonus = 0.1}, + consumption = {bonus = 1}, + pollution = {bonus = 0.1}, + speed = {bonus = -0.25} + }, + limitation = productivity_module_limitation(), + limitation_message_key = "production-module-usable-only-on-intermediates" + }, + { + type = "recipe", + name = "productivity-module-4", + ingredients = { + {name = "productivity-module-3", amount = modules_per_tier}, + {name = "processing-unit", amount = 5}, + {name = data_util.mod_prefix .. "vulcanite-block", amount = 5}, + {name = data_util.mod_prefix .. "machine-learning-data", amount = 1}, + }, + energy_required = 2^4, + result = "productivity-module-4", + enabled = false, + always_show_products = true, + always_show_made_in = true, + }, + { + type = "technology", + name = "productivity-module-4", + effects = { + {type = "unlock-recipe", recipe = "productivity-module-4"} + }, + icon = "__space-exploration-graphics__/graphics/technology/modules/productivity-4.png", + icon_size = 128, + order = "i-e-a", + upgrade = true, + prerequisites = { + data_util.mod_prefix .. "rocket-science-pack", + "productivity-module-3" + }, + unit = { + count = 300, + time = 10, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + }, + { + type = "module", + name = "productivity-module-5", + icon = "__space-exploration-graphics__/graphics/icons/modules/productivity-5.png", + icon_size = 64, + subgroup = "module-productivity", + category = "productivity", + tier = 5, + order = "c[productivity]-e[productivity-module-5]", + stack_size = 50, + effect = + { + productivity = {bonus = 0.12}, + consumption = {bonus = 1.2}, + pollution = {bonus = 0.12}, + speed = {bonus = -0.3} + }, + limitation = productivity_module_limitation(), + limitation_message_key = "production-module-usable-only-on-intermediates" + }, + { + type = "recipe", + name = "productivity-module-5", + ingredients = { + {name = "productivity-module-4", amount = modules_per_tier}, + {name = "processing-unit", amount = 5}, + {name = data_util.mod_prefix .. "vitamelange-extract", amount = 10}, + {name = data_util.mod_prefix .. "biological-catalogue-1", amount = 1}, + }, + energy_required = 2^5, + result = "productivity-module-5", + enabled = false, + always_show_products = true, + always_show_made_in = true, + }, + { + type = "technology", + name = "productivity-module-5", + effects = { + {type = "unlock-recipe", recipe = "productivity-module-5"} + }, + icon = "__space-exploration-graphics__/graphics/technology/modules/productivity-5.png", + icon_size = 128, + order = "i-e-a", + upgrade = true, + prerequisites = { + data_util.mod_prefix .. "biological-science-pack-1", + "productivity-module-4", + }, + unit = { + count = 500, + time = 10, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "biological-science-pack-1", 1 }, + } + }, + }, + { + type = "module", + name = "productivity-module-6", + icon = "__space-exploration-graphics__/graphics/icons/modules/productivity-6.png", + icon_size = 64, + subgroup = "module-productivity", + category = "productivity", + tier = 6, + order = "c[productivity]-f[productivity-module-6]", + stack_size = 50, + effect = + { + productivity = {bonus = 0.14}, + consumption = {bonus = 1.4}, + pollution = {bonus = 0.14}, + speed = {bonus = -0.35} + }, + limitation = productivity_module_limitation(), + limitation_message_key = "production-module-usable-only-on-intermediates" + }, + { + type = "recipe", + name = "productivity-module-6", + ingredients = { + {name = "productivity-module-5", amount = modules_per_tier}, + {name = "processing-unit", amount = 5}, + {name = data_util.mod_prefix .. "biological-catalogue-2", amount = 1} + }, + energy_required = 2^6, + result = "productivity-module-6", + enabled = false, + always_show_products = true, + always_show_made_in = true, + }, + { + type = "technology", + name = "productivity-module-6", + effects = { + {type = "unlock-recipe", recipe = "productivity-module-6"} + }, + icon = "__space-exploration-graphics__/graphics/technology/modules/productivity-6.png", + icon_size = 128, + order = "i-e-a", + upgrade = true, + prerequisites = { + data_util.mod_prefix .. "biological-science-pack-2", + "productivity-module-5", + }, + unit = { + count = 200, + time = 10, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "biological-science-pack-2", 1 }, + } + }, + + }, + { + type = "module", + name = "productivity-module-7", + icon = "__space-exploration-graphics__/graphics/icons/modules/productivity-7.png", + icon_size = 64, + subgroup = "module-productivity", + category = "productivity", + tier = 7, + order = "c[productivity]-f[productivity-module-7]", + stack_size = 50, + effect = + { + productivity = {bonus = 0.16}, + consumption = {bonus = 1.6}, + pollution = {bonus = 0.16}, + speed = {bonus = -0.4} + }, + limitation = productivity_module_limitation(), + limitation_message_key = "production-module-usable-only-on-intermediates" + }, + { + type = "recipe", + name = "productivity-module-7", + ingredients = { + {name = "productivity-module-6", amount = modules_per_tier}, + {name = "processing-unit", amount = 5}, + {name = data_util.mod_prefix .. "biological-catalogue-3", amount = 1} + }, + energy_required = 2^7, + result = "productivity-module-7", + enabled = false, + always_show_products = true, + always_show_made_in = true, + }, + { + type = "technology", + name = "productivity-module-7", + effects = { + {type = "unlock-recipe", recipe = "productivity-module-7"} + }, + icon = "__space-exploration-graphics__/graphics/technology/modules/productivity-7.png", + icon_size = 128, + order = "i-e-a", + upgrade = true, + prerequisites = { + data_util.mod_prefix .. "biological-science-pack-3", + "productivity-module-6" + }, + unit = { + count = 500, + time = 10, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "biological-science-pack-3", 1 }, + } + }, + + }, + { + type = "module", + name = "productivity-module-8", + icon = "__space-exploration-graphics__/graphics/icons/modules/productivity-8.png", + icon_size = 64, + subgroup = "module-productivity", + category = "productivity", + tier = 8, + order = "c[productivity]-h[productivity-module-8]", + stack_size = 50, + effect = + { + productivity = {bonus = 0.18}, + consumption = {bonus = 1.8}, + pollution = {bonus = 0.18}, + speed = {bonus = -0.45} + }, + limitation = productivity_module_limitation(), + limitation_message_key = "production-module-usable-only-on-intermediates" + }, + { + type = "recipe", + name = "productivity-module-8", + ingredients = { + {name = "productivity-module-7", amount = modules_per_tier}, + {name = data_util.mod_prefix .. "neural-gel", amount = 10, type="fluid"}, + {name = data_util.mod_prefix .. "biological-catalogue-4", amount = 1} + }, + energy_required = 2^8, + category = "crafting-with-fluid", + result = "productivity-module-8", + enabled = false, + always_show_products = true, + always_show_made_in = true, + }, + { + type = "technology", + name = "productivity-module-8", + effects = { + {type = "unlock-recipe", recipe = "productivity-module-8"} + }, + icon = "__space-exploration-graphics__/graphics/technology/modules/productivity-8.png", + icon_size = 128, + order = "i-e-a", + upgrade = true, + prerequisites = { + data_util.mod_prefix .. "biological-science-pack-4", + "productivity-module-7" + }, + unit = { + count = 800, + time = 10, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "biological-science-pack-4", 1 }, + } + }, + + }, + { + type = "module", + name = "productivity-module-9", + icon = "__space-exploration-graphics__/graphics/icons/modules/productivity-9.png", + icon_size = 64, + subgroup = "module-productivity", + category = "productivity", + tier = 9, + order = "c[productivity]-i[productivity-module-9]", + stack_size = 50, + effect = + { + productivity = {bonus = 0.2}, + consumption = {bonus = 2}, + pollution = {bonus = 0.2}, + speed = {bonus = -0.5} + }, + limitation = productivity_module_limitation(), + limitation_message_key = "production-module-usable-only-on-intermediates" + }, + { + type = "recipe", + name = "productivity-module-9", + ingredients = { + {name = "productivity-module-8", amount = modules_per_tier}, + {name = data_util.mod_prefix .. "superconductive-cable", amount = 5}, + {name = data_util.mod_prefix .. "neural-gel-2", amount = 50, type="fluid"}, + {name = data_util.mod_prefix .. "biological-catalogue-4", amount = 1} + }, + energy_required = 2^9, + category = "crafting-with-fluid", + result = "productivity-module-9", + enabled = false, + always_show_products = true, + always_show_made_in = true, + }, + { + type = "technology", + name = "productivity-module-9", + effects = { + {type = "unlock-recipe", recipe = "productivity-module-9"} + }, + icon = "__space-exploration-graphics__/graphics/technology/modules/productivity-9.png", + icon_size = 128, + order = "i-e-a", + upgrade = true, + prerequisites = { + data_util.mod_prefix .. "deep-space-science-pack-1", + "productivity-module-8" + }, + unit = { + count = 1000, + time = 10, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "biological-science-pack-4", 1 }, + { data_util.mod_prefix .. "deep-space-science-pack-1", 1}, + } + }, + + }, + + --speed + { + type = "recipe", + name = "speed-module", + ingredients = { + {name = "electronic-circuit", amount = 5}, + {name = "advanced-circuit", amount = 1}, + }, + energy_required = 2^1, + result = "speed-module", + enabled = false, + always_show_products = true, + always_show_made_in = true, + }, + { + type = "recipe", + name = "speed-module-2", + ingredients = { + {name = "speed-module", amount = modules_per_tier}, + {name = "advanced-circuit", amount = 5}, + {name = "processing-unit", amount = 1}, + }, + energy_required = 2^2, + result = "speed-module-2", + enabled = false, + always_show_products = true, + always_show_made_in = true, + }, + { + type = "recipe", + name = "speed-module-3", + ingredients = { + {name = "speed-module-2", amount = modules_per_tier}, + {name = "processing-unit", amount = 5}, + {name = "battery", amount = 1}, + }, + energy_required = 2^3, + result = "speed-module-3", + enabled = false, + always_show_products = true, + always_show_made_in = true, + }, + { + type = "module", + name = "speed-module-4", + icon = "__space-exploration-graphics__/graphics/icons/modules/speed-4.png", + icon_size = 64, + subgroup = "module-speed", + category = "speed", + tier = 4, + order = "a[speed]-d[speed-module-4]", + stack_size = 50, + effect = { + speed = {bonus = 0.5}, + consumption = {bonus = 1.1}, + pollution = {bonus = 0.1} + } + }, + { + type = "recipe", + name = "speed-module-4", + ingredients = { + {name = "speed-module-3", amount = modules_per_tier}, + {name = "processing-unit", amount = 5}, + {name = data_util.mod_prefix .. "iridium-plate", amount = 5}, + {name = data_util.mod_prefix .. "machine-learning-data", amount = 1}, + }, + energy_required = 2^4, + result = "speed-module-4", + enabled = false, + always_show_products = true, + always_show_made_in = true, + }, + { + type = "technology", + name = "speed-module-4", + effects = { + {type = "unlock-recipe", recipe = "speed-module-4"} + }, + icon = "__space-exploration-graphics__/graphics/technology/modules/speed-4.png", + icon_size = 128, + order = "i-c-a", + upgrade = true, + prerequisites = { + data_util.mod_prefix .. "rocket-science-pack", + "speed-module-3" + }, + unit = { + count = 300, + time = 10, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + + }, + { + type = "module", + name = "speed-module-5", + icon = "__space-exploration-graphics__/graphics/icons/modules/speed-5.png", + icon_size = 64, + subgroup = "module-speed", + category = "speed", + tier = 5, + order = "a[speed]-e[speed-module-5]", + stack_size = 50, + effect = { + speed = {bonus = 0.6}, + consumption = {bonus = 1.5}, + pollution = {bonus = 0.12} + } + }, + { + type = "recipe", + name = "speed-module-5", + ingredients = { + {name = "speed-module-4", amount = modules_per_tier}, + {name = "processing-unit", amount = 5}, + {name = data_util.mod_prefix .. "material-catalogue-1", amount = 1} + }, + energy_required = 2^5, + result = "speed-module-5", + enabled = false, + always_show_products = true, + always_show_made_in = true, + }, + { + type = "technology", + name = "speed-module-5", + effects = { + {type = "unlock-recipe", recipe = "speed-module-5"} + }, + icon = "__space-exploration-graphics__/graphics/technology/modules/speed-5.png", + icon_size = 128, + order = "i-c-a", + upgrade = true, + prerequisites = { + data_util.mod_prefix .. "material-science-pack-1", + "speed-module-4" + }, + unit = { + count = 500, + time = 10, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "material-science-pack-1", 1 }, + } + }, + + }, + { + type = "module", + name = "speed-module-6", + icon = "__space-exploration-graphics__/graphics/icons/modules/speed-6.png", + icon_size = 64, + subgroup = "module-speed", + category = "speed", + tier = 6, + order = "a[speed]-f[speed-module-6]", + stack_size = 50, + effect = { + speed = {bonus = 0.7}, + consumption = {bonus = 2}, + pollution = {bonus = 0.14} + } + }, + { + type = "recipe", + name = "speed-module-6", + ingredients = { + {name = "speed-module-5", amount = modules_per_tier}, + {name = "processing-unit", amount = 5}, + {name = data_util.mod_prefix .. "material-catalogue-2", amount = 1} + }, + energy_required = 2^6, + result = "speed-module-6", + enabled = false, + always_show_products = true, + always_show_made_in = true, + }, + { + type = "technology", + name = "speed-module-6", + effects = { + {type = "unlock-recipe", recipe = "speed-module-6"} + }, + icon = "__space-exploration-graphics__/graphics/technology/modules/speed-6.png", + icon_size = 128, + order = "i-c-a", + upgrade = true, + prerequisites = { + data_util.mod_prefix .. "material-science-pack-2", + "speed-module-5" + }, + unit = { + count = 200, + time = 10, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "material-science-pack-2", 1 }, + } + }, + + }, + { + type = "module", + name = "speed-module-7", + icon = "__space-exploration-graphics__/graphics/icons/modules/speed-7.png", + icon_size = 64, + subgroup = "module-speed", + category = "speed", + tier = 7, + order = "a[speed]-g[speed-module-7]", + stack_size = 50, + effect = { + speed = {bonus = 0.8}, + consumption = {bonus = 2.6}, + pollution = {bonus = 0.16} + } + }, + { + type = "recipe", + name = "speed-module-7", + ingredients = { + {name = "speed-module-6", amount = modules_per_tier}, + {name = "processing-unit", amount = 5}, + {name = data_util.mod_prefix .. "material-catalogue-3", amount = 1} + }, + energy_required = 2^7, + result = "speed-module-7", + enabled = false, + always_show_products = true, + always_show_made_in = true, + }, + { + type = "technology", + name = "speed-module-7", + effects = { + {type = "unlock-recipe", recipe = "speed-module-7"} + }, + icon = "__space-exploration-graphics__/graphics/technology/modules/speed-7.png", + icon_size = 128, + order = "i-c-a", + upgrade = true, + prerequisites = { + data_util.mod_prefix .. "material-science-pack-3", + "speed-module-6" + }, + unit = { + count = 500, + time = 10, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "material-science-pack-3", 1 }, + } + }, + + }, + { + type = "module", + name = "speed-module-8", + icon = "__space-exploration-graphics__/graphics/icons/modules/speed-8.png", + icon_size = 64, + subgroup = "module-speed", + category = "speed", + tier = 8, + order = "a[speed]-h[speed-module-8]", + stack_size = 50, + effect = { + speed = {bonus = 0.9}, + consumption = {bonus = 3.3}, + pollution = {bonus = 0.18} + } + }, + { + type = "recipe", + name = "speed-module-8", + ingredients = { + {name = "speed-module-7", amount = modules_per_tier}, + {name = data_util.mod_prefix .. "superconductive-cable", amount = 5}, + {name = data_util.mod_prefix .. "material-catalogue-4", amount = 1} + }, + energy_required = 2^8, + result = "speed-module-8", + enabled = false, + always_show_products = true, + always_show_made_in = true, + }, + { + type = "technology", + name = "speed-module-8", + effects = { + {type = "unlock-recipe", recipe = "speed-module-8"} + }, + icon = "__space-exploration-graphics__/graphics/technology/modules/speed-8.png", + icon_size = 128, + order = "i-c-a", + upgrade = true, + prerequisites = { + data_util.mod_prefix .. "material-science-pack-4", + "speed-module-7" + }, + unit = { + count = 800, + time = 10, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "material-science-pack-4", 1 }, + } + }, + + }, + { + type = "module", + name = "speed-module-9", + icon = "__space-exploration-graphics__/graphics/icons/modules/speed-9.png", + icon_size = 64, + subgroup = "module-speed", + category = "speed", + tier = 9, + order = "a[speed]-i[speed-module-9]", + stack_size = 50, + effect = { + speed = {bonus = 1}, + consumption = {bonus = 4}, + pollution = {bonus = 0.2} + } + }, + { + type = "recipe", + name = "speed-module-9", + ingredients = { + {name = "speed-module-8", amount = modules_per_tier}, + {name = data_util.mod_prefix .. "superconductive-cable", amount = 5}, + {name = data_util.mod_prefix .. "nanomaterial", amount = 25}, + {name = data_util.mod_prefix .. "material-catalogue-4", amount = 1} + }, + energy_required = 2^9, + result = "speed-module-9", + enabled = false, + always_show_products = true, + always_show_made_in = true, + }, + { + type = "technology", + name = "speed-module-9", + effects = { + {type = "unlock-recipe", recipe = "speed-module-9"} + }, + icon = "__space-exploration-graphics__/graphics/technology/modules/speed-9.png", + icon_size = 128, + order = "i-c-a", + upgrade = true, + prerequisites = { + data_util.mod_prefix .. "deep-space-science-pack-1", + data_util.mod_prefix .. "nanomaterial", + "speed-module-8" + }, + unit = { + count = 1000, + time = 10, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "material-science-pack-4", 1 }, + { data_util.mod_prefix .. "deep-space-science-pack-1", 1 }, + } + }, + + }, + --efficiency + { + type = "recipe", + name = "effectivity-module", + ingredients = { + {name = "electronic-circuit", amount = 5}, + {name = "advanced-circuit", amount = 1}, + }, + energy_required = 2^1, + result = "effectivity-module", + enabled = false, + always_show_products = true, + always_show_made_in = true, + }, + { + type = "recipe", + name = "effectivity-module-2", + ingredients = { + {name = "effectivity-module", amount = modules_per_tier}, + {name = "advanced-circuit", amount = 5}, + {name = "processing-unit", amount = 1}, + }, + energy_required = 2^2, + result = "effectivity-module-2", + enabled = false, + always_show_products = true, + always_show_made_in = true, + }, + { + type = "recipe", + name = "effectivity-module-3", + ingredients = { + {name = "effectivity-module-2", amount = modules_per_tier}, + {name = "processing-unit", amount = 5}, + {name = "battery", amount = 1}, + }, + energy_required = 2^3, + result = "effectivity-module-3", + enabled = false, + always_show_products = true, + always_show_made_in = true, + }, + { + type = "module", + name = "effectivity-module-4", + icon = "__space-exploration-graphics__/graphics/icons/modules/effectivity-4.png", + icon_size = 64, + subgroup = "module-effectivity", + category = "effectivity", + tier = 4, + order = "c[effectivity]-d[effectivity-module-4]", + stack_size = 50, + effect = { + consumption = {bonus = -1.7}, + pollution = {bonus = -0.25}, + } + }, + { + type = "recipe", + name = "effectivity-module-4", + ingredients = { + {name = "effectivity-module-3", amount = modules_per_tier}, + {name = "processing-unit", amount = 5}, + {name = data_util.mod_prefix .. "holmium-plate", amount = 5}, + {name = data_util.mod_prefix .. "machine-learning-data", amount = 1} + }, + energy_required = 2^4, + result = "effectivity-module-4", + enabled = false, + always_show_products = true, + always_show_made_in = true, + }, + { + type = "technology", + name = "effectivity-module-4", + effects = { + {type = "unlock-recipe", recipe = "effectivity-module-4"} + }, + icon = "__space-exploration-graphics__/graphics/technology/modules/effectivity-4.png", + icon_size = 128, + order = "i-g-a", + upgrade = true, + prerequisites = { + data_util.mod_prefix .. "rocket-science-pack", + "effectivity-module-3" + }, + unit = { + count = 300, + time = 10, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + } + }, + + }, + { + type = "module", + name = "effectivity-module-5", + icon = "__space-exploration-graphics__/graphics/icons/modules/effectivity-5.png", + icon_size = 64, + subgroup = "module-effectivity", + category = "effectivity", + tier = 5, + order = "c[effectivity]-e[effectivity-module-5]", + stack_size = 50, + effect = { + consumption = {bonus = -2.7}, + pollution = {bonus = -0.3}, + } + }, + { + type = "recipe", + name = "effectivity-module-5", + ingredients = { + {name = "effectivity-module-4", amount = modules_per_tier}, + {name = "processing-unit", amount = 5}, + {name = data_util.mod_prefix .. "energy-catalogue-1", amount = 1} + }, + energy_required = 2^5, + result = "effectivity-module-5", + enabled = false, + always_show_products = true, + always_show_made_in = true, + }, + { + type = "technology", + name = "effectivity-module-5", + effects = { + {type = "unlock-recipe", recipe = "effectivity-module-5"} + }, + icon = "__space-exploration-graphics__/graphics/technology/modules/effectivity-5.png", + icon_size = 128, + order = "i-g-a", + upgrade = true, + prerequisites = { + data_util.mod_prefix .. "energy-science-pack-1", + "effectivity-module-4" + }, + unit = { + count = 500, + time = 10, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "energy-science-pack-1", 1 }, + } + }, + + }, + { + type = "module", + name = "effectivity-module-6", + icon = "__space-exploration-graphics__/graphics/icons/modules/effectivity-6.png", + icon_size = 64, + subgroup = "module-effectivity", + category = "effectivity", + tier = 6, + order = "c[effectivity]-f[effectivity-module-6]", + stack_size = 50, + effect = { + consumption = {bonus = -4}, + pollution = {bonus = -0.35}, + } + }, + { + type = "recipe", + name = "effectivity-module-6", + ingredients = { + {name = "effectivity-module-5", amount = modules_per_tier}, + {name = "processing-unit", amount = 5}, + {name = data_util.mod_prefix .. "energy-catalogue-2", amount = 1} + }, + energy_required = 2^6, + result = "effectivity-module-6", + enabled = false, + always_show_products = true, + always_show_made_in = true, + }, + { + type = "technology", + name = "effectivity-module-6", + effects = { + {type = "unlock-recipe", recipe = "effectivity-module-6"} + }, + icon = "__space-exploration-graphics__/graphics/technology/modules/effectivity-6.png", + icon_size = 128, + order = "i-g-a", + upgrade = true, + prerequisites = { + data_util.mod_prefix .. "energy-science-pack-2", + "effectivity-module-5" + }, + unit = { + count = 200, + time = 10, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "energy-science-pack-2", 1 }, + } + }, + + }, + { + type = "module", + name = "effectivity-module-7", + icon = "__space-exploration-graphics__/graphics/icons/modules/effectivity-7.png", + icon_size = 64, + subgroup = "module-effectivity", + category = "effectivity", + tier = 7, + order = "c[effectivity]-g[effectivity-module-7]", + stack_size = 50, + effect = { + consumption = {bonus = -5.6}, + pollution = {bonus = -0.4}, + } + }, + { + type = "recipe", + name = "effectivity-module-7", + ingredients = { + {name = "effectivity-module-6", amount = modules_per_tier}, + {name = "processing-unit", amount = 5}, + {name = data_util.mod_prefix .. "energy-catalogue-3", amount = 1} + }, + energy_required = 2^7, + result = "effectivity-module-7", + enabled = false, + always_show_products = true, + always_show_made_in = true, + }, + { + type = "technology", + name = "effectivity-module-7", + effects = { + {type = "unlock-recipe", recipe = "effectivity-module-7"} + }, + icon = "__space-exploration-graphics__/graphics/technology/modules/effectivity-7.png", + icon_size = 128, + order = "i-g-a", + upgrade = true, + prerequisites = { + data_util.mod_prefix .. "energy-science-pack-3", + "effectivity-module-6" + }, + unit = { + count = 500, + time = 10, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "energy-science-pack-3", 1 }, + } + }, + + }, + { + type = "module", + name = "effectivity-module-8", + icon = "__space-exploration-graphics__/graphics/icons/modules/effectivity-8.png", + icon_size = 64, + subgroup = "module-effectivity", + category = "effectivity", + tier = 8, + order = "c[effectivity]-h[effectivity-module-8]", + stack_size = 50, + effect = { + consumption = {bonus = -7.6}, + pollution = {bonus = -0.45} + } + }, + { + type = "recipe", + name = "effectivity-module-8", + ingredients = { + {name = "effectivity-module-7", amount = modules_per_tier}, + {name = data_util.mod_prefix .. "superconductive-cable", amount = 5}, + {name = data_util.mod_prefix .. "energy-catalogue-4", amount = 1} + }, + energy_required = 2^8, + result = "effectivity-module-8", + enabled = false, + always_show_products = true, + always_show_made_in = true, + }, + { + type = "technology", + name = "effectivity-module-8", + effects = { + {type = "unlock-recipe", recipe = "effectivity-module-8"} + }, + icon = "__space-exploration-graphics__/graphics/technology/modules/effectivity-8.png", + icon_size = 128, + order = "i-g-a", + upgrade = true, + prerequisites = { + data_util.mod_prefix .. "energy-science-pack-4", + "effectivity-module-7" + }, + unit = { + count = 800, + time = 10, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "energy-science-pack-4", 1 }, + } + }, + + }, + { + type = "module", + name = "effectivity-module-9", + icon = "__space-exploration-graphics__/graphics/icons/modules/effectivity-9.png", + icon_size = 64, + subgroup = "module-effectivity", + category = "effectivity", + tier = 9, + order = "c[effectivity]-i[effectivity-module-9]", + stack_size = 50, + effect = { + consumption = {bonus = -10}, + pollution = {bonus = -0.5} + } + }, + { + type = "recipe", + name = "effectivity-module-9", + ingredients = { + {name = "effectivity-module-8", amount = modules_per_tier}, + {name = data_util.mod_prefix .. "superconductive-cable", amount = 5}, + {name = data_util.mod_prefix .. "antimatter-canister", amount = 1}, + {name = data_util.mod_prefix .. "energy-catalogue-4", amount = 1} + }, + energy_required = 512, + result = "effectivity-module-9", + enabled = false, + always_show_products = true, + always_show_made_in = true, + }, + { + type = "technology", + name = "effectivity-module-9", + effects = { + {type = "unlock-recipe", recipe = "effectivity-module-9"} + }, + icon = "__space-exploration-graphics__/graphics/technology/modules/effectivity-9.png", + icon_size = 128, + order = "i-g-a", + upgrade = true, + prerequisites = { + data_util.mod_prefix .. "deep-space-science-pack-1", + "effectivity-module-8" + }, + unit = { + count = 1000, + time = 10, + ingredients = { + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "production-science-pack", 1 }, + { data_util.mod_prefix .. "rocket-science-pack", 1 }, + { data_util.mod_prefix .. "energy-science-pack-4", 1 }, + { data_util.mod_prefix .. "deep-space-science-pack-1", 1 }, + } + }, + + }, +} +) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-2/recipe-update.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-2/recipe-update.lua new file mode 100644 index 0000000..d31e6b6 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-2/recipe-update.lua @@ -0,0 +1,169 @@ +local data_util = require("data_util") + + +if data.raw.item['electric-motor'] then + data_util.replace_or_add_ingredient(data_util.mod_prefix .. "space-transport-belt", "iron-plate", 'electric-motor', 2) + data_util.replace_or_add_ingredient(data_util.mod_prefix .. "core-fragment-processor", "iron-plate", 'electric-motor', 15) + data_util.replace_or_add_ingredient(data_util.mod_prefix .. "meteor-point-defence", "iron-gear-wheel", 'electric-motor', 10) + + data_util.replace_or_add_ingredient(data_util.mod_prefix .. "fluid-burner-generator", "iron-gear-wheel", 'electric-motor', 10) + data_util.replace_or_add_ingredient(data_util.mod_prefix .. "fuel-refinery", "iron-gear-wheel", 'electric-motor', 20) +end + + +if data.raw.item["solid-sand"] and not data.raw.recipe["sand-to-solid-sand"]then -- angels sand + data:extend({{ + type = "recipe", + name = "sand-to-solid-sand", + category = "washing-plant", + normal = { + energy_required = 0.5, + enabled = false, + ingredients = { + {type="item", name="sand", amount=10}, + {type="fluid", name="water", amount=100}, + }, + results= { {type="item", name="solid-sand", amount=10} }, + }, + expensive = { + energy_required = 0.5, + enabled = false, + ingredients = { + {type="item", name="sand", amount=10}, + {type="fluid", name="water", amount=100}, + }, + results= { {type="item", name="solid-sand", amount=10} }, + }, + }}) +end + +data:extend({ + { + type = "recipe", + category = "smelting", + name = data_util.mod_prefix .. "iron-smelting-vulcanite", + results = { + {name = "iron-plate", amount = 12}, + }, + energy_required = 24, + ingredients = { + {name = "iron-ore", amount = 8}, + {name = data_util.mod_prefix .. "vulcanite-block", amount = 1}, + }, + icons = { + {icon = data.raw.item["iron-plate"].icon, icon_size = data.raw.item["iron-plate"].icon_size, scale = 32/data.raw.item["iron-plate"].icon_size}, + {icon = data.raw.item[data_util.mod_prefix .. "vulcanite-block"].icon, + icon_size = data.raw.item[data_util.mod_prefix .. "vulcanite-block"].icon_size, + scale = 0.5 * 32/data.raw.item[data_util.mod_prefix .. "vulcanite-block"].icon_size, + shift = {-10, -10} + }, + }, + enabled = false, + always_show_made_in = true, + allow_as_intermediate = false, + }, + { + type = "recipe", + category = "smelting", + name = data_util.mod_prefix .. "copper-smelting-vulcanite", + results = { + {name = "copper-plate", amount = 12}, + }, + energy_required = 24, + ingredients = { + {name = "copper-ore", amount = 8}, + {name = data_util.mod_prefix .. "vulcanite-block", amount = 1}, + }, + icons = { + {icon = data.raw.item["copper-plate"].icon, icon_size = data.raw.item["copper-plate"].icon_size, scale = 32/data.raw.item["copper-plate"].icon_size}, + {icon = data.raw.item[data_util.mod_prefix .. "vulcanite-block"].icon, + icon_size = data.raw.item[data_util.mod_prefix .. "vulcanite-block"].icon_size, + scale = 0.5 * 32/data.raw.item[data_util.mod_prefix .. "vulcanite-block"].icon_size, + shift = {-10, -10} + }, + }, + enabled = false, + always_show_made_in = true, + allow_as_intermediate = false, + }, + { + type = "recipe", + category = "smelting", + name = data_util.mod_prefix .. "stone-brick-vulcanite", + results = { + {name = "stone-brick", amount = 6}, + }, + energy_required = 24, + ingredients = { + {name = "stone", amount = 8}, + {name = data_util.mod_prefix .. "vulcanite-block", amount = 1}, + }, + icons = { + {icon = data.raw.item["stone-brick"].icon, icon_size = data.raw.item["stone-brick"].icon_size, scale = 32/data.raw.item["stone-brick"].icon_size}, + {icon = data.raw.item[data_util.mod_prefix .. "vulcanite-block"].icon, + icon_size = data.raw.item[data_util.mod_prefix .. "vulcanite-block"].icon_size, + scale = 0.5 * 32/data.raw.item[data_util.mod_prefix .. "vulcanite-block"].icon_size, + shift = {-10, -10} + }, + }, + enabled = false, + always_show_made_in = true, + allow_as_intermediate = false, + }, + { + type = "recipe", + category = "smelting", + name = data_util.mod_prefix .. "glass-vulcanite", + results = { + {name = "glass", amount = 6}, + }, + energy_required = 24, + ingredients = { + {name = "sand", amount = 16}, + {name = data_util.mod_prefix .. "vulcanite-block", amount = 1}, + }, + icons = { + {icon = data.raw.item["glass"].icon, icon_size = data.raw.item["glass"].icon_size, scale = 32/data.raw.item["glass"].icon_size}, + {icon = data.raw.item[data_util.mod_prefix .. "vulcanite-block"].icon, + icon_size = data.raw.item[data_util.mod_prefix .. "vulcanite-block"].icon_size, + scale = 0.5 * 32/data.raw.item[data_util.mod_prefix .. "vulcanite-block"].icon_size, + shift = {-10, -10} + }, + }, + enabled = false, + always_show_made_in = true, + allow_as_intermediate = false, + }, +}) + +data_util.replace_or_add_ingredient("small-lamp", "electronic-circuit", 'glass', 1) + +data_util.replace_or_add_ingredient("solar-panel", nil, 'glass', 5) +data_util.replace_or_add_ingredient("laser-turret", nil, 'glass', 20) + +data_util.replace_or_add_ingredient("electric-furnace", "stone-brick", data_util.mod_prefix .. "heat-shielding", 2) +data_util.replace_or_add_ingredient("electric-furnace", "concrete", data_util.mod_prefix .. "heat-shielding", 2) +data_util.replace_or_add_ingredient("industrial-furnace", nil, data_util.mod_prefix .. "heat-shielding", 4) + +data_util.replace_or_add_ingredient("fusion-reactor-equipment", nil, data_util.mod_prefix .. 'fusion-test-data', 50) +data_util.replace_or_add_ingredient("fusion-reactor-equipment", nil, data_util.mod_prefix .. 'superconductive-cable', 50) +data_util.replace_or_add_ingredient("fusion-reactor-equipment", nil, data_util.mod_prefix .. 'heat-shielding', 50) + +data_util.replace_or_add_ingredient("satellite", "glass", "glass", 50) +data_util.replace_or_add_ingredient("satellite", "processing-unit", "processing-unit", 50) +data_util.replace_or_add_ingredient("satellite", "low-density-structure", "low-density-structure", 50) +data_util.replace_or_add_ingredient("satellite", "solar-panel", "solar-panel", 10) +data_util.replace_or_add_ingredient("satellite", "accumulator", "accumulator", 10) +data_util.replace_or_add_ingredient("satellite", "radar", "radar", 1) + +data_util.replace_or_add_ingredient("atomic-bomb", "explosives", "explosives", 50) +data_util.replace_or_add_ingredient("atomic-bomb", "uranium-235", "uranium-235", 100) +data_util.replace_or_add_ingredient("atomic-bomb", "rocket-fuel", "rocket-fuel", 10) + +data_util.replace_or_add_ingredient("jetpack-2", nil, "low-density-structure", 10) -- space +data_util.replace_or_add_ingredient("jetpack-3", nil, data_util.mod_prefix .. "aeroframe-pole", 30) -- astro +data_util.replace_or_add_ingredient("jetpack-4", nil, data_util.mod_prefix .. "naquium-cube", 4) -- deep + +data_util.replace_or_add_ingredient("spidertron", "fusion-reactor-equipment", data_util.mod_prefix .. "rtg-equipment", 8) +data_util.replace_or_add_ingredient("spidertron", "raw-fish", data_util.mod_prefix .. "specimen", 1) +data_util.replace_or_add_ingredient("spidertron", "effectivity-module-3", data_util.mod_prefix .. "heavy-girder", 16) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-3/character.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/character.lua new file mode 100644 index 0000000..2d341eb --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/character.lua @@ -0,0 +1,9 @@ +local data_util = require("data_util") + +local characters = {"character", "character-jetpack"} +for _, character in pairs(characters) do + table.insert(data.raw.character[character]["crafting_categories"], "hand-hard-recycling") + + data.raw.character[character].collision_box = {{-0.15, -0.15},{0.15,0.15}} + data.raw.character[character].healing_per_tick = 0.001 +end diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-3/collision-common.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/collision-common.lua new file mode 100644 index 0000000..4411d16 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/collision-common.lua @@ -0,0 +1,52 @@ +-- Collisions shared between SE, combat mechanics overhaul & alien biomes + +local vehicle_layer = collision_mask_util_extended.get_make_named_collision_mask("vehicle-layer") + +for _, tile in pairs(data.raw.tile) do + if string.find(tile.name, "water") then + table.insert(tile.collision_mask, "item-layer") + end +end + +if data.raw.tile.water and collision_mask_util_extended.mask_contains_layer(data.raw.tile.water.collision_mask, "resource-layer") then + table.insert(data.raw.tile.landfill.collision_mask, "resource-layer") -- prevent regenerated ores from spawning on landfill +end + +for _, type in pairs({"car"}) do + for _, prototype in pairs(data.raw[type]) do + prototype.collision_mask = collision_mask_util_extended.get_mask(prototype) + if collision_mask_util_extended.mask_contains_layer(prototype.collision_mask, "player-layer") then + collision_mask_util_extended.add_layer(prototype.collision_mask, vehicle_layer) + end + end +end + +-- make trees collide with resources so they won't be placed on top +-- make trees collide with vehicles (train-layer) but not characters (player-layer) +for _, type in pairs({"tree"}) do + for _, prototype in pairs(data.raw[type]) do + if string.find(prototype.name, "tree", 1, true) then + prototype.collision_mask = collision_mask_util_extended.get_mask(prototype) + if collision_mask_util_extended.mask_contains_layer(prototype.collision_mask, "player-layer") then + collision_mask_util_extended.remove_layer(prototype.collision_mask, "player-layer") + collision_mask_util_extended.add_layer(prototype.collision_mask, vehicle_layer) + end + collision_mask_util_extended.add_layer(prototype.collision_mask, "resource-layer") + if prototype.collision_box + and ((prototype.collision_box[1][1] == -1/32 and prototype.collision_box[1][2] == -1/32 -- AB tree + and prototype.collision_box[2][1] == 1/32 and prototype.collision_box[2][2] == 1/32) + or (prototype.collision_box[1][1] == -0.080000000000000018 and prototype.collision_box[1][2] == -0.080000000000000018 -- squeak tree + and prototype.collision_box[2][1] == 0.080000000000000018 and prototype.collision_box[2][2] == 0.080000000000000018)) then + prototype.collision_box = {{-0.4, -0.4}, {0.4, 0.4}} + end + end + end +end + +for _, prototype in pairs(data.raw["spider-leg"]) do + prototype.collision_mask = collision_mask_util_extended.get_mask(prototype) + if collision_mask_util_extended.mask_contains_layer(prototype.collision_mask, "player-layer") then + collision_mask_util_extended.add_layer(prototype.collision_mask, "object-layer") + collision_mask_util_extended.add_layer(prototype.collision_mask, "water-tile") + end +end diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-3/compatibility/angels.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/compatibility/angels.lua new file mode 100644 index 0000000..10acfaa --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/compatibility/angels.lua @@ -0,0 +1,34 @@ +local data_util = require("data_util") + +if data.raw["recipe-category"]["ore-sorting-t1"] then + table.insert( data.raw["assembling-machine"][data_util.mod_prefix .. "space-mechanical-laboratory"].crafting_categories, "ore-sorting-t1") -- crushing +end + +if data.raw["recipe-category"]["ore-sorting"] then + table.insert( data.raw["assembling-machine"][data_util.mod_prefix .. "space-manufactory"].crafting_categories, "ore-sorting") +end + +if data.raw["fluid"]["gas-methane"] then + + data.raw.fluid[data_util.mod_prefix .. "methane-gas"].localised_name = {"fluid-name."..data_util.mod_prefix .."methane-gas-mixed"} + local results = { + { type = "fluid", name = "gas-methane", amount = 90}, + } + if data.raw["fluid"]["gas-natural-1"] then + table.insert(results, { type = "fluid", name = "gas-natural-1", amount = 10}) + end + data_util.make_recipe({ + name = data_util.mod_prefix .. "mixed-methane-gas-separation", + ingredients = { + { type = "fluid", name = data_util.mod_prefix .. "methane-gas", amount = 10}, + }, + results = results, + energy_required = 1, + subgroup = "space-fluids", + category = "chemistry", + always_show_made_in = true, + }) + data_util.tech_lock_recipes(data_util.mod_prefix .. "space-biochemical-laboratory", data_util.mod_prefix .. "mixed-methane-gas-separation") + + +end diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-3/compatibility/notnotmelon.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/compatibility/notnotmelon.lua new file mode 100644 index 0000000..8c4ea13 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/compatibility/notnotmelon.lua @@ -0,0 +1,5 @@ +local data_util = require("data_util") + +data_util.replace_or_add_ingredient("empty-memory-element", nil, data_util.mod_prefix .. "teleportation-data", 1) +data_util.tech_add_prerequisites("empty-memory-element", {data_util.mod_prefix .. "deep-space-science-pack-4"}) +data_util.tech_add_ingredients("empty-memory-element", {data_util.mod_prefix .. "deep-space-science-pack-4"}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-3/core-fragments.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/core-fragments.lua new file mode 100644 index 0000000..cc1174a --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/core-fragments.lua @@ -0,0 +1,332 @@ +local data_util = require("data_util") + +local resource_image = { + filename = "__space-exploration-graphics__/graphics/blank.png", + width = 1, + height = 1, + frame_count = 1, + line_length = 1, + shift = { 0, 0 }, + variation_count = 1, +} + +-- core fragments (cooled magma) +-- A generic mining recipe is used, the actual output item is chosen by script +-- default is 1, set 0 to exclude +se_core_fragment_resources = se_core_fragment_resources or {} +se_core_fragment_resources["water"] = se_core_fragment_resources["water"] or { multiplier = 0, omni_multiplier = 0.1} +se_core_fragment_resources["crude-oil"] = se_core_fragment_resources["crude-oil"] or { multiplier = 1, omni_multiplier = 0.1} +se_core_fragment_resources["stone"] = se_core_fragment_resources["stone"] or { multiplier = 1, omni_multiplier = 0.5} +se_core_fragment_resources["iron-ore"] = se_core_fragment_resources["iron-ore"] or { multiplier = 1.2, omni_multiplier = 0.6} +se_core_fragment_resources["copper-ore"] = se_core_fragment_resources["copper-ore"] or { multiplier = 1, omni_multiplier = 0.5} +se_core_fragment_resources["coal"] = se_core_fragment_resources["coal"] or { multiplier = 1, omni_multiplier = 0.5} +se_core_fragment_resources["uranium-ore"] = se_core_fragment_resources["uranium-ore"] or { multiplier = 0.2, omni_multiplier = 0.005} +se_core_fragment_resources[data_util.mod_prefix .. "vulcanite"] = se_core_fragment_resources[data_util.mod_prefix .. "vulcanite"] or { multiplier = 1, omni_multiplier = 0.2} + +se_core_fragment_resources[data_util.mod_prefix .. "beryllium-ore"] = se_core_fragment_resources[data_util.mod_prefix .. "beryllium-ore"] or { multiplier = 1, omni_multiplier = 0} +se_core_fragment_resources[data_util.mod_prefix .. "iridium-ore"] = se_core_fragment_resources[data_util.mod_prefix .. "iridium-ore"] or { multiplier = 1, omni_multiplier = 0} +se_core_fragment_resources[data_util.mod_prefix .. "holmium-ore"] = se_core_fragment_resources[data_util.mod_prefix .. "holmium-ore"] or { multiplier = 1, omni_multiplier = 0} +se_core_fragment_resources[data_util.mod_prefix .. "vitamelange"] = se_core_fragment_resources[data_util.mod_prefix .. "vitamelange"] or { multiplier = 1, omni_multiplier = 0} +se_core_fragment_resources[data_util.mod_prefix .. "cryonite"] = se_core_fragment_resources[data_util.mod_prefix .. "cryonite"] or { multiplier = 1, omni_multiplier = 0} + +se_core_fragment_resources[data_util.mod_prefix .. "water-ice"] = se_core_fragment_resources[data_util.mod_prefix .. "water-ice"] or { multiplier = 0, omni_multiplier = 0} +se_core_fragment_resources[data_util.mod_prefix .. "methane-ice"] = se_core_fragment_resources[data_util.mod_prefix .. "methane-ice"] or { multiplier = 0, omni_multiplier = 0} +se_core_fragment_resources[data_util.mod_prefix .. "naquium-ore"] = se_core_fragment_resources[data_util.mod_prefix .. "naquium-ore"] or { multiplier = 0, omni_multiplier = 0} + +local fragments = {} +local omni_name = data_util.mod_prefix .. "core-fragment-omni" +fragments[omni_name] = {name = omni_name, divisor = 1, products = {}} + +for _, resource in pairs(data.raw.resource) do + --log("add fragment resource " .. resource.name ) + if resource.autoplace then -- don't add removed resources? + local fragment = { + name = data_util.mod_prefix .. "core-fragment-" .. resource.name, + item_name = "entity-name."..resource.name + } + --log(resource.name) + local products = {} + if resource.minable.result and type(resource.minable.result) == "string" then + products[resource.minable.result] = {name = resource.minable.result, amount = 1} + elseif type(resource.minable.result) == "table" then + local product = data_util.collapse_product(resource.minable.result) + products[product.name] = product + elseif resource.minable.results and resource.minable.results.name then + products = {data_util.collapse_product(resource.minable.results)} + elseif resource.minable.results and resource.minable.results[1] and type(resource.minable.results[1]) == "table" then + for _, p in pairs(resource.minable.results) do + table.insert(products, data_util.collapse_product(p)) + end + elseif resource.minable.results then + products = data_util.collapse_product(resource.minable.results) + end + local valid_products = 0 + if table_size(products) > 0 then + fragment.products = products + for _, product in pairs(products) do + local amount = 0 + if product.amount then + amount = product.amount + elseif product.amount_min and product.amount_max then + amount = (product.amount_min + product.amount_max) / 2 + end + if product.probability then amount = amount * product.probability end + + product.amount = amount + if se_core_fragment_resources[product.name] and se_core_fragment_resources[product.name].multiplier then + product.amount = amount * se_core_fragment_resources[product.name].multiplier + end + + product.amount_min = nil + product.amount_max = nil + product.probability = 1 + + if product.amount == 0 then + products[product.name] = nil + else + valid_products = valid_products + 1 + end + + local omni_multiplier = 0.5 + if se_core_fragment_resources[product.name] and se_core_fragment_resources[product.name].omni_multiplier then + omni_multiplier = se_core_fragment_resources[product.name].omni_multiplier + end + if omni_multiplier > 0 then + fragments[omni_name].products[product.name] = fragments[omni_name].products[product.name] or {name = product.name, amount = 0, type = product.type} + fragments[omni_name].divisor = fragments[omni_name].divisor + 1 + fragments[omni_name].products[product.name].amount = fragments[omni_name].products[product.name].amount + amount * omni_multiplier + end + end + end + if valid_products > 0 then + fragments[fragment.name] = fragment + end + end +end + +-- water, can be hard to find on some planets, +-- adding water to the omni measn there's a small chance that +-- a different fragment type breaks down into something with water +if not fragments[omni_name].products["water"] then + fragments[omni_name].products.water = {name = "water", type = "fluid", amount = 5} +end + +-- TODO: test with high fluid resource modpack +local omni_fluids = 0 +for _, product in pairs(fragments[omni_name].products) do + if product.type == "fluid" then + omni_fluids = omni_fluids + 1 + end +end +if omni_fluids > 4 then -- water infinite anyway + fragments[omni_name].products.water = nil + omni_fluids = omni_fluids - 1 +end +if omni_fluids > 4 then -- crude-oil infinite anyway + fragments[omni_name].products["crude-oil"] = nil + omni_fluids = omni_fluids - 1 +end +if omni_fluids > 4 then + local safe_products = {} + omni_fluids = 0 + for _, product in pairs(fragments[omni_name].products) do + if product.type == "fluid" then + if omni_fluids < 4 then + safe_products[product.name] = product + omni_fluids = omni_fluids + 1 + end + else + safe_products[product.name] = product + end + end + fragments[omni_name].products = safe_products +end + + +local c = 0 +for _, fragment in pairs(fragments) do + c = c + 1 + local key_product = fragment.products[1] + local locale + if fragment.resource_name then + locale = "resource-name." .. fragment.resource_name + end + local item = + { + type = "item", + name = fragment.name, + icon_size = 64, + icons = { + {icon = "__space-exploration-graphics__/graphics/icons/core-fragment.png", scale = 0.5, icon_size = 64} + }, + subgroup = "core-fragments", + order = "a"..c, + stack_size = 100, + localised_name = {"item-name.core-fragment", {fragment.item_name}}, + pictures = { + { layers = { + {filename = "__space-exploration-graphics__/graphics/icons/core-fragment.png", + scale = 0.25, + size = 64 + }}}, + { layers = {{ + filename = "__space-exploration-graphics__/graphics/icons/core-fragment-1.png", + scale = 0.25, + size = 64 + }}}, + { layers = {{ + filename = "__space-exploration-graphics__/graphics/icons/core-fragment-2.png", + scale = 0.25, + size = 64 + }}}, + { layers = {{ + filename = "__space-exploration-graphics__/graphics/icons/core-fragment-3.png", + scale = 0.25, + size = 64 + }}}, + }, + } + if table_size(fragment.products) == 1 then + for _, product in pairs(fragment.products) do + if product.type == "fluid" and data.raw.fluid[product.name] and data.raw.fluid[product.name].icon then + table.insert(item.icons, { + icon = data.raw.fluid[product.name].icon, + icon_size = data.raw.fluid[product.name].icon_size, + scale = 32 / data.raw.fluid[product.name].icon_size, + tint = {r = 0.5, g = 0.5, b = 0.5, a = 0.5}, + }) + for _, variant in pairs(item.pictures) do + table.insert(variant.layers, { + filename = data.raw.fluid[product.name].icon, + size = data.raw.fluid[product.name].icon_size, + scale = 16 / data.raw.fluid[product.name].icon_size, + tint = {r = 0.5, g = 0.5, b = 0.5, a = 0.5}, + }) + end + elseif data.raw.item[product.name] and data.raw.item[product.name].icon then + table.insert(item.icons, { + icon = data.raw.item[product.name].icon, + icon_size = data.raw.item[product.name].icon_size, + scale = 32 / data.raw.item[product.name].icon_size, + tint = {r = 0.5, g = 0.5, b = 0.5, a = 0.5} + }) + + for i, variant in pairs(item.pictures) do + if data.raw.item[product.name].pictures and data.raw.item[product.name].pictures[i] then + local pic = table.deepcopy(data.raw.item[product.name].pictures[i]) + pic.tint = {r = 0.5, g = 0.5, b = 0.5, a = 0.5} + table.insert(variant.layers, pic) + else + table.insert(variant.layers, { + filename = data.raw.item[product.name].icon, + size = data.raw.item[product.name].icon_size, + scale = 16 / data.raw.item[product.name].icon_size, + tint = {r = 0.5, g = 0.5, b = 0.5, a = 0.5}, + }) + end + end + + end + end + end + local recipe_products = { } + if _ ~= omni_name then + table.insert(recipe_products, {name = omni_name, amount = 5}) + else + item.localised_name = nil + end + local has_stone = false + --local has_vulcanite = false + for _, product in pairs(fragment.products) do + if product.name == "stone" then has_stone = true end + --if product.name == data_util.mod_prefix.."vulcanite" then has_vulcanite = true end + local prod = {type = product.type, name = product.name} + if product.amount * 10 >= 1 then + prod.amount = product.amount * 10 + else + prod.amount = nil + prod.probability = product.amount * 10 + prod.amount_min = 1 + prod.amount_max = 1 + end + table.insert(recipe_products, prod) + end + if not has_stone then + table.insert(recipe_products, {name = "stone", amount = 1}) + end + --if not has_vulcanite then + -- table.insert(recipe_products, {name = data_util.mod_prefix.."vulcanite", amount = 1}) + --end + local recipe = { + type = "recipe", + name = fragment.name, + icon_size = 64, + icons = item.icons, + subgroup = "core-fragments", + category = "core-fragment-processing", + order = "a"..c, + flags = { + "goes-to-main-inventory" + }, + ingredients = {{name = item.name, amount = 16}}, + results = recipe_products, + allow_as_intermediate = false, -- prevent being sown as a base resource? + energy_required = 16, + enabled = false, + localised_name = {"recipe-name.core-fragment", {fragment.item_name}}, + always_show_made_in = true, + allow_decomposition = false + } + if _ == omni_name then + recipe.localised_name = nil + end + local core_resource_patch = { + type = "resource", + name = fragment.name, + category = data_util.mod_prefix.."core-mining", + collision_box = { { -1.4, -1.4 }, { 1.4, 1.4 } }, + selection_box = { { -1.4, -1.4 }, { 1.4, 1.4 } }, + selectable_in_game = false, + --collision_mask = {"not-colliding-with-itself"}, + flags = { "placeable-neutral" }, + highlight = false, + icon_size = 64, + icons = item.icons, + infinite = true, + infinite_depletion_amount = 0, + map_color = { b = 0, g = 0, r = 0, a = 0 }, + map_grid = false, + minable = { + mining_time = 12.5, + results = { + { + amount_max = 1, + amount_min = 1, + name = fragment.name, + probability = 1, + } + } + }, + minimum = 1, + normal = 1000000, + order = "a-b-a", + resource_patch_search_radius = 0, + stage_counts = { 0 }, + stages = { sheet = resource_image }, + localised_name = {"entity-name."..data_util.mod_prefix .. "core-fissure"} + } + data:extend({ + core_resource_patch, + item, + recipe + }) + table.insert( + data.raw.technology[data_util.mod_prefix .. "core-miner"].effects, + { + type = "unlock-recipe", + recipe = recipe.name, + } + ) + data_util.allow_productivity(fragment.name) + se_delivery_cannon_recipes[fragment.name] = {name=fragment.name, amount=50} +end diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-3/delivery-cannon.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/delivery-cannon.lua new file mode 100644 index 0000000..92503b1 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/delivery-cannon.lua @@ -0,0 +1,126 @@ +local data_util = require("data_util") + +for _, resource in pairs(se_delivery_cannon_recipes) do + local type = resource.type or "item" + if data.raw[type][resource.name] then + local base = data.raw[type][resource.name] + local amount = resource.amount + if not amount then + if type == "fluid" then + amount = 1000 + else + amount = base.stack_size or 1 + end + end + local order = "" + local o_subgroup = data.raw["item-subgroup"][base.subgroup] + local o_group = data.raw["item-group"][o_subgroup.group] + order = o_group.order .. "-|-"..o_subgroup.order.."-|-"..base.order + data:extend({ + { + type = "item", + name = data_util.mod_prefix .. "delivery-cannon-package-"..resource.name, + icon = "__space-exploration-graphics__/graphics/icons/delivery-cannon-capsule.png", + icon_size = 64, + order = order, + flags = {"hidden"}, + subgroup = base.subgroup or "delivery-cannon-capsules", + stack_size = 1, + localised_name = {"item-name.se-delivery-cannon-capsule-packed", base.localised_name or {type.."-name."..resource.name}} + }, + { + type = "recipe", + name = data_util.mod_prefix .. "delivery-cannon-pack-" .. resource.name, + icon = base.icon, + icon_size = base.icon_size, + icon_mipmaps = base.icon_mipmaps, + icons = base.icons, + result = data_util.mod_prefix .. "delivery-cannon-package-"..resource.name, + enabled = true, + energy_required = 5, + ingredients = { + { data_util.mod_prefix .. "delivery-cannon-capsule", 1 }, + { type = type, name = resource.name, amount = amount}, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + category = "delivery-cannon", + hide_from_player_crafting = true, + hide_from_stats = true, + localised_name = {"item-name.se-delivery-cannon-capsule-packed", base.localised_name or {type.."-name."..resource.name}}, + allow_decomposition = false + }, + }) + if is_debug_mode then + --log(serpent.block(data.raw.item[data_util.mod_prefix .. "delivery-cannon-package-"..resource.name])) + end + end +end + +-- ammo and capsules can't be ingredients. +-- the delivery cannon will need to assemble the item based on the original recipe +for _, dcar in pairs(se_delivery_cannon_ammo_recipes) do + local type = dcar.type or "ammo" -- could be "capsule" + if data.raw[type][dcar.name] then + local proto = data.raw[type][dcar.name] + local recipe_name = dcar.recipe_name or proto.name + if data.raw.recipe[recipe_name] then + local recipe = data.raw.recipe[recipe_name] + local ingredients = table.deepcopy(recipe.ingredients or recipe.expensive.ingredients or recipe.normal.ingredients) + local energy_required = recipe.energy_required or recipe.expensive.energy_required or recipe.normal.energy_required + table.insert(ingredients, { data_util.mod_prefix .. "delivery-cannon-weapon-capsule", 1 }) + local order = "" + local o_subgroup = data.raw["item-subgroup"][proto.subgroup] + local o_group = data.raw["item-group"][o_subgroup.group] + order = o_group.order .. "-|-"..o_subgroup.order.."-|-"..proto.order + local unlock_tech + for _, technology in pairs(data.raw.technology) do + if technology.effects then + for _, effect in pairs(technology.effects) do + if effect.recipe == recipe_name then + table.insert(technology.effects, { type = "unlock-recipe", recipe = data_util.mod_prefix .. "delivery-cannon-weapon-pack-" .. dcar.name}) + unlock_tech = technology + break + end + end + if unlock_tech then break end + end + end + data:extend({ + { + type = "item", + name = data_util.mod_prefix .. "delivery-cannon-weapon-package-"..proto.name, + icon = "__space-exploration-graphics__/graphics/icons/delivery-cannon-weapon-capsule.png", + icon_size = 64, + order = order, + flags = {"hidden"}, + subgroup = proto.subgroup or "delivery-cannon-capsules", + stack_size = 1, + localised_name = {"item-name.se-delivery-cannon-weapon-capsule-packed", proto.localised_name or {"item-name."..dcar.name}} + }, + { + type = "recipe", + name = data_util.mod_prefix .. "delivery-cannon-weapon-pack-" .. dcar.name, + icon = proto.icon, + icon_size = proto.icon_size, + icon_mipmaps = proto.icon_mipmaps, + icons = proto.icons, + result = data_util.mod_prefix .. "delivery-cannon-weapon-package-"..dcar.name, + enabled = unlock_tech == nil, + energy_required = energy_required, + ingredients = dcar.ingredients or ingredients, + requester_paste_multiplier = 1, + always_show_made_in = false, + category = "delivery-cannon-weapon", + hide_from_player_crafting = true, + localised_name = {"item-name.se-delivery-cannon-weapon-capsule-packed", proto.localised_name or {"item-name."..dcar.name}}, + allow_decomposition = false + }, + }) + + if is_debug_mode then + --log(serpent.block(data.raw.item[data_util.mod_prefix .. "delivery-cannon-weapon-package-"..proto.name])) + end + end + end +end diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-3/electric-boiling.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/electric-boiling.lua new file mode 100644 index 0000000..3c82e5d --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/electric-boiling.lua @@ -0,0 +1,99 @@ +local data_util = require("data_util") + +local heat_capacity = data_util.string_to_number(data.raw.fluid.steam.heat_capacity) +local boiler_power = 5000000 +local efficiency = 0.9 + +data:extend({ + { + type = "recipe", + name = data_util.mod_prefix .. "electric-boiling-void", + results = { + { type = "fluid", name = "steam", amount = 0, temperature = 100 }, + }, + enabled = false, + energy_required = (100-15) * 100 * heat_capacity / boiler_power / efficiency, + ingredients = { + { type = "fluid", name = "water", amount = 100 }, + }, + icons = { + {icon = data.raw.fluid.steam.icon }, + {icon = "__space-exploration-graphics__/graphics/icons/cross.png" }, + }, + icon_size = data.raw.fluid.steam.icon_size, + subgroup = "fluid-recipes", + requester_paste_multiplier = 1, + always_show_made_in = false, + category = data_util.mod_prefix .. "electric-boiling", + order = "a-a-a-a" + }, + { + type = "recipe", + name = data_util.mod_prefix .. "electric-boiling-steam-100", + results = { + { type = "fluid", name = "steam", amount = 100, temperature = 100 }, + }, + enabled = false, + energy_required = (100-15) * 100 * heat_capacity / boiler_power / efficiency, + ingredients = { + { type = "fluid", name = "water", amount = 100 }, + }, + subgroup = "fluid-recipes", + requester_paste_multiplier = 1, + always_show_made_in = false, + category = data_util.mod_prefix .. "electric-boiling", + order = "a-a-b-a" + }, + { + type = "recipe", + name = data_util.mod_prefix .. "electric-boiling-steam-165", + results = { + { type = "fluid", name = "steam", amount = 100, temperature = 165 }, + }, + enabled = false, + energy_required = (165-15) * 100 * heat_capacity / boiler_power / efficiency, + ingredients = { + { type = "fluid", name = "water", amount = 100 }, + }, + subgroup = "fluid-recipes", + requester_paste_multiplier = 1, + always_show_made_in = false, + category = data_util.mod_prefix .. "electric-boiling", + order = "a-a-b-b" + }, + { + type = "recipe", + name = data_util.mod_prefix .. "electric-boiling-steam-500", + results = { + { type = "fluid", name = "steam", amount = 100, temperature = 500 }, + }, + enabled = false, + energy_required = (500-15) * 100 * heat_capacity / boiler_power / efficiency, + ingredients = { + { type = "fluid", name = "water", amount = 100 }, + }, + subgroup = "fluid-recipes", + requester_paste_multiplier = 1, + always_show_made_in = false, + category = data_util.mod_prefix .. "electric-boiling", + order = "a-a-b-c" + }, + { + type = "recipe", + name = data_util.mod_prefix .. "electric-boiling-steam-5000", + results = { + { type = "fluid", name = "steam", amount = 100, temperature = 5000 }, + }, + enabled = false, + energy_required = (5000-15) * 100 * heat_capacity / boiler_power / efficiency, + ingredients = { + { type = "fluid", name = "water", amount = 100 }, + }, + subgroup = "fluid-recipes", + requester_paste_multiplier = 1, + always_show_made_in = false, + category = data_util.mod_prefix .. "electric-boiling", + order = "a-a-b-d" + } + +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-3/energy-shield-equipment.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/energy-shield-equipment.lua new file mode 100644 index 0000000..4d16102 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/energy-shield-equipment.lua @@ -0,0 +1,115 @@ +local data_util = require("data_util") + + +data_util.tech_add_prerequisites("energy-shield-equipment", { + data_util.mod_prefix .. "energy-science-pack-1" +}) +data_util.tech_add_ingredients("energy-shield-equipment", { + "automation-science-pack", "logistic-science-pack", "chemical-science-pack", data_util.mod_prefix .. "rocket-science-pack", data_util.mod_prefix .. "energy-science-pack-1"}, true) +data.raw.technology["energy-shield-equipment"].icon = "__space-exploration-graphics__/graphics/technology/energy-shield-red.png" +data.raw.item["energy-shield-equipment"].icon = "__space-exploration-graphics__/graphics/icons/energy-shield-red.png" +data.raw.item["energy-shield-equipment"].icon_size = 64 +data.raw.item["energy-shield-equipment"].icon_mipmaps = 1 +data.raw.item["energy-shield-equipment"].subgroup = "equipment" +data.raw.item["energy-shield-equipment"].order = "b[shield]-a[energy-shield]" +data.raw["energy-shield-equipment"]["energy-shield-equipment"].max_shield_value = 100 +data.raw["energy-shield-equipment"]["energy-shield-equipment"].energy_source.input_flow_limit = "1MW" +data.raw["energy-shield-equipment"]["energy-shield-equipment"].sprite.filename = "__space-exploration-graphics__/graphics/equipment/energy-shield-red.png" +data_util.replace_or_add_ingredient("energy-shield-equipment", nil, data_util.mod_prefix .. 'holmium-cable', 20) +data_util.replace_or_add_ingredient("energy-shield-equipment", nil, data_util.mod_prefix .. 'electromagnetic-field-data', 5) + +data_util.tech_add_prerequisites("energy-shield-mk2-equipment", { + data_util.mod_prefix .. "energy-science-pack-2", + data_util.mod_prefix .. "material-science-pack-1", + data_util.mod_prefix .. "holmium-solenoid" +}) +data_util.tech_add_ingredients("energy-shield-mk2-equipment", {data_util.mod_prefix .. "energy-science-pack-2", data_util.mod_prefix .. "material-science-pack-1"}, true) +data.raw.technology["energy-shield-mk2-equipment"].icon = "__space-exploration-graphics__/graphics/technology/energy-shield-yellow.png" +data.raw.item["energy-shield-mk2-equipment"].icon = "__space-exploration-graphics__/graphics/icons/energy-shield-yellow.png" +data.raw.item["energy-shield-mk2-equipment"].icon_size = 64 +data.raw.item["energy-shield-mk2-equipment"].icon_mipmaps = 1 +data.raw.item["energy-shield-mk2-equipment"].subgroup = "equipment" +data.raw.item["energy-shield-mk2-equipment"].order = "b[shield]-b[energy-shield]" +data.raw["energy-shield-equipment"]["energy-shield-mk2-equipment"].max_shield_value = 250 +data.raw["energy-shield-equipment"]["energy-shield-mk2-equipment"].energy_source.input_flow_limit = "3MW" +data.raw["energy-shield-equipment"]["energy-shield-mk2-equipment"].sprite.filename = "__space-exploration-graphics__/graphics/equipment/energy-shield-yellow.png" +data_util.replace_or_add_ingredient("energy-shield-mk2-equipment", "energy-shield-equipment", "energy-shield-equipment", 5) +data_util.replace_or_add_ingredient("energy-shield-mk2-equipment", nil, data_util.mod_prefix .. 'forcefield-data', 5) +data_util.replace_or_add_ingredient("energy-shield-mk2-equipment", nil, data_util.mod_prefix .. 'iridium-plate', 10) +data_util.replace_or_add_ingredient("energy-shield-mk2-equipment", nil, data_util.mod_prefix .. 'holmium-solenoid', 20) + +data_util.tech_add_prerequisites("energy-shield-mk3-equipment", { + data_util.mod_prefix .. "energy-science-pack-3", + data_util.mod_prefix .. 'quantum-processor' +}) +data_util.tech_add_ingredients("energy-shield-mk3-equipment", {data_util.mod_prefix .. "energy-science-pack-3", data_util.mod_prefix .. "material-science-pack-1"}, true) +data.raw.technology["energy-shield-mk3-equipment"].icon = "__space-exploration-graphics__/graphics/technology/energy-shield-green.png" +data.raw.item["energy-shield-mk3-equipment"].icon = "__space-exploration-graphics__/graphics/icons/energy-shield-green.png" +data.raw.item["energy-shield-mk3-equipment"].icon_size = 64 +data.raw.item["energy-shield-mk3-equipment"].icon_mipmaps = 1 +data.raw["energy-shield-equipment"]["energy-shield-mk3-equipment"].max_shield_value = 500 +data.raw["energy-shield-equipment"]["energy-shield-mk3-equipment"].energy_source.input_flow_limit = "7MW" +data.raw["energy-shield-equipment"]["energy-shield-mk3-equipment"].sprite.filename = "__space-exploration-graphics__/graphics/equipment/energy-shield-green.png" +data_util.replace_or_add_ingredient("energy-shield-mk3-equipment", nil, data_util.mod_prefix .. 'superconductivity-data', 10) +data_util.replace_or_add_ingredient("energy-shield-mk3-equipment", nil, data_util.mod_prefix .. 'quantum-processor', 10) + +data_util.tech_add_prerequisites("energy-shield-mk4-equipment", { + data_util.mod_prefix .. "superconductive-cable", + data_util.mod_prefix .. 'heavy-composite' +}) +data_util.tech_add_ingredients("energy-shield-mk4-equipment", {data_util.mod_prefix .. "energy-science-pack-4", data_util.mod_prefix .. "material-science-pack-3"}, true) +data.raw.technology["energy-shield-mk4-equipment"].icon = "__space-exploration-graphics__/graphics/technology/energy-shield-cyan.png" +data.raw.item["energy-shield-mk4-equipment"].icon = "__space-exploration-graphics__/graphics/icons/energy-shield-cyan.png" +data.raw.item["energy-shield-mk4-equipment"].icon_size = 64 +data.raw.item["energy-shield-mk4-equipment"].icon_mipmaps = 1 +data.raw["energy-shield-equipment"]["energy-shield-mk4-equipment"].max_shield_value = 1000 +data.raw["energy-shield-equipment"]["energy-shield-mk4-equipment"].energy_source.input_flow_limit = "15MW" +data.raw["energy-shield-equipment"]["energy-shield-mk4-equipment"].sprite.filename = "__space-exploration-graphics__/graphics/equipment/energy-shield-cyan.png" +data_util.replace_or_add_ingredient("energy-shield-mk4-equipment", nil, data_util.mod_prefix .. 'superconductive-cable', 50) +data_util.replace_or_add_ingredient("energy-shield-mk4-equipment", nil, data_util.mod_prefix .. 'heavy-composite', 50) + +data_util.tech_add_prerequisites("energy-shield-mk5-equipment", { + data_util.mod_prefix .. "energy-science-pack-4", + data_util.mod_prefix .. 'dynamic-emitter', + data_util.mod_prefix .. 'deep-space-science-pack-1' +}) +data_util.tech_add_ingredients("energy-shield-mk5-equipment", {data_util.mod_prefix .. "astronomic-science-pack-4", data_util.mod_prefix .. "material-science-pack-4", data_util.mod_prefix .. "deep-space-science-pack-1"}, true) +data_util.tech_add_prerequisites("energy-shield-mk5-equipment", { data_util.mod_prefix .. "material-science-pack-4"}) +data.raw.technology["energy-shield-mk5-equipment"].icon = "__space-exploration-graphics__/graphics/technology/energy-shield-blue.png" +data.raw.item["energy-shield-mk5-equipment"].icon = "__space-exploration-graphics__/graphics/icons/energy-shield-blue.png" +data.raw.item["energy-shield-mk5-equipment"].icon_size = 64 +data.raw.item["energy-shield-mk5-equipment"].icon_mipmaps = 1 +data.raw["energy-shield-equipment"]["energy-shield-mk5-equipment"].max_shield_value = 2000 +data.raw["energy-shield-equipment"]["energy-shield-mk5-equipment"].energy_source.input_flow_limit = "30MW" +data.raw["energy-shield-equipment"]["energy-shield-mk5-equipment"].sprite.filename = "__space-exploration-graphics__/graphics/equipment/energy-shield-blue.png" +data_util.replace_or_add_ingredient("energy-shield-mk5-equipment", nil, data_util.mod_prefix .. 'nanomaterial', 50) +data_util.replace_or_add_ingredient("energy-shield-mk5-equipment", nil, data_util.mod_prefix .. 'magnetic-monopole-data', 50) +data_util.replace_or_add_ingredient("energy-shield-mk5-equipment", nil, data_util.mod_prefix .. 'dynamic-emitter', 50) + +data_util.tech_add_prerequisites("energy-shield-mk6-equipment", { + data_util.mod_prefix .. "antimatter-production", + data_util.mod_prefix .. 'naquium-processor', + data_util.mod_prefix .. 'deep-space-science-pack-3' +}) +data_util.tech_add_ingredients("energy-shield-mk6-equipment", { data_util.mod_prefix .. "deep-space-science-pack-3"}, true) +data.raw.technology["energy-shield-mk6-equipment"].icon = "__space-exploration-graphics__/graphics/technology/energy-shield-magenta.png" +data.raw.item["energy-shield-mk6-equipment"].icon = "__space-exploration-graphics__/graphics/icons/energy-shield-magenta.png" +data.raw.item["energy-shield-mk6-equipment"].icon_size = 64 +data.raw.item["energy-shield-mk6-equipment"].icon_mipmaps = 1 +data.raw["energy-shield-equipment"]["energy-shield-mk6-equipment"].max_shield_value = 4000 +data.raw["energy-shield-equipment"]["energy-shield-mk6-equipment"].energy_source.input_flow_limit = "60MW" +data.raw["energy-shield-equipment"]["energy-shield-mk6-equipment"].sprite.filename = "__space-exploration-graphics__/graphics/equipment/energy-shield-magenta.png" +data_util.replace_or_add_ingredient("energy-shield-mk6-equipment", nil, data_util.mod_prefix .. 'antimatter-canister', 50) +data_util.replace_or_add_ingredient("energy-shield-mk6-equipment", nil, data_util.mod_prefix .. 'naquium-cube', 50) +data_util.replace_or_add_ingredient("energy-shield-mk6-equipment", nil, data_util.mod_prefix .. 'naquium-processor', 20) + +for _, proto in pairs(data.raw["energy-shield-equipment"]) do + if not string.find(proto.name, "adaptive-armour", 1, true) then + local max_shield = proto.max_shield_value + proto.energy_per_shield = (25 + max_shield / 150) .. "kJ" + local input_flow = data_util.string_to_number(proto.energy_source.input_flow_limit) + local drain = (input_flow / 100) + proto.energy_source.drain = drain.."W" + end +end +--log( serpent.block( data.raw["energy-shield-equipment"], {comment = false, numformat = '%1.8g' } ) ) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-3/incompatibility.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/incompatibility.lua new file mode 100644 index 0000000..cddfda7 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/incompatibility.lua @@ -0,0 +1,22 @@ +local data_util = require("data_util") +--[[ +mods are incompatible if they: +Break Surfaces +Teleport Items +Are incompatible with the tech tree +Reduce resource variety +Have conflicting game mechanics. +]]-- + +-- if a mod in this list any item teleportation mechanics when this mod is enabled it can be removed from the list +local incompatible_mod_keywords = { + "teleport", +} -- can add a white list if these cause problems +for mod_name, version in pairs(mods) do + local mod_name_format = string.lower(data_util.replace(mod_name, "_", "-")) + for _, keyword in pairs(incompatible_mod_keywords) do + if string.find(mod_name_format, keyword, 1, true) and mod_name ~= "Teleporters" then + error("Incompatibe mod: " .. mod_name) -- this should not happen unless a teleportation mod has been missed from the incompatability list + end + end +end diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-3/interior-divider.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/interior-divider.lua new file mode 100644 index 0000000..7de1e5a --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/interior-divider.lua @@ -0,0 +1,14 @@ +local data_util = require("data_util") +local noise = require("noise") + +local tile = table.deepcopy(data.raw.tile["mineral-black-dirt-1"]) +tile.name = "interior-divider" +tile.layer = 0 +table.insert(tile.collision_mask, spaceship_collision_layer) -- prevents nukes from removing +table.insert(tile.collision_mask, flying_collision_layer) +tile.autoplace = nil + +data:extend( +{ + tile +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-3/noise-programs.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/noise-programs.lua new file mode 100644 index 0000000..153d76b --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/noise-programs.lua @@ -0,0 +1,248 @@ +local noise = require("noise") +local util = require("util") +local tne = noise.to_noise_expression +local data_util = require("data_util") + +local function scaled_noise_layer_expression(scale) + return noise.function_application("factorio-multioctave-noise", + { + x = noise.var("x") / scale, + y = noise.var("y") / scale, + persistence = 0.7, + seed0 = noise.var("map_seed"), + seed1 = 1, + input_scale = noise.fraction(1, 6), + output_scale = 1, + octaves = 4, + } + ) +end + +local function make_basis_noise_function(seed0,seed1,outscale0,inscale0) + outscale0 = outscale0 or 1 + inscale0 = inscale0 or 1/outscale0 + return function(x,y,inscale,outscale) + return tne + { + type = "function-application", + function_name = "factorio-basis-noise", + arguments = + { + x = tne(x), + y = tne(y), + seed0 = tne(seed0), + seed1 = tne(seed1), + input_scale = tne((inscale or 1) * inscale0), + output_scale = tne((outscale or 1) * outscale0) + } + } + end +end + +local function make_multioctave_noise_function(seed0,seed1,octaves,octave_output_scale_multiplier,octave_input_scale_multiplier,output_scale0,input_scale0) + octave_output_scale_multiplier = octave_output_scale_multiplier or 2 + octave_input_scale_multiplier = octave_input_scale_multiplier or 1 / octave_output_scale_multiplier + return function(x,y,inscale,outscale) + return tne{ + type = "function-application", + function_name = "factorio-multioctave-noise", + arguments = { + x = tne(x), + y = tne(y), + seed0 = tne(seed0), + seed1 = tne(seed1), + input_scale = tne((inscale or 1) * (input_scale0 or 1)), + output_scale = tne((outscale or 1) * (output_scale0 or 1)), + octaves = tne(octaves), + octave_output_scale_multiplier = tne(octave_output_scale_multiplier), + octave_input_scale_multiplier = tne(octave_input_scale_multiplier), + } + } + end +end + +local function make_split_multioctave_noise_function(seed0,seed1,octaveses,octave_output_scale_multiplier,octave_input_scale_multiplier,output_scale0,input_scale0) + output_scale0 = output_scale0 or 1 + input_scale0 = input_scale0 or 1 + octave_output_scale_multiplier = octave_output_scale_multiplier or 1 + octave_input_scale_multiplier = octave_input_scale_multiplier or 1 + local funx = {} + for i=1,#octaveses do + funx[i] = make_multioctave_noise_function(seed0,seed1,octaveses[i],octave_output_scale_multiplier,octave_input_scale_multiplier,output_scale0,input_scale0) + output_scale0 = output_scale0 * octave_output_scale_multiplier ^ octaveses[i] + input_scale0 = input_scale0 * octave_input_scale_multiplier ^ octaveses[i] + end + return funx +end + +local function peak_to_noise_expression(variable, optimal, range) + local distance_from_optimal = noise.ridge(variable - optimal, 0, math.huge) + -- Idea is to have a plateau in the center of the rectangle, + -- edges that taper off at a consistent slope for all rectangles (so that interactions between rectangles are predictable), + return range - distance_from_optimal +end + +local function rectangle_peak_to_noise_expression(variable, optimal, range) + -- Clamp rectangle-based peaks so that large rectangles don't become + -- super powerful at their centers, because we want to be able to override + -- them e.g. with beach peaks or whatever + return noise.min(peak_to_noise_expression(variable, optimal, range) * 20, 1) +end + +-- restrict planet size by placing out-of-map tiles at a certain radius from the center. +-- elevation is not required, put the expression on out-of-map + +data:extend({ + { + type = "autoplace-control", + name = "planet-size", + order = "z-z", + category = "terrain", + richness = true, + }, + { + type = "noise-expression", + name = "control-setting:planet-size:frequency:multiplier", + expression = noise.to_noise_expression(1) + }, + { + type = "noise-expression", + name = "control-setting:planet-size:size:multiplier", + expression = noise.to_noise_expression(1) + }, + { + type = "noise-expression", + name = "vault-land-probability", + expression = 2 + noise.max(0, 20 - noise.var("distance")) - noise.var("distance")/30 - noise.absolute_value(scaled_noise_layer_expression(2)) + }, + { + type = "autoplace-control", + name = data_util.mod_prefix.."cryonite", + order = "r-c-a", + category = "resource", + richness = true, + hidden = true, + enabled = false + }, + { + type = "autoplace-control", + name = data_util.mod_prefix.."vulcanite", + order = "r-c-b", + category = "resource", + richness = true, + hidden = true, + enabled = false + }, + { + type = "autoplace-control", + name = data_util.mod_prefix.."vitamelange", + order = "r-c-c", + category = "resource", + richness = true, + hidden = true, + enabled = false + }, + { + type = "autoplace-control", + name = data_util.mod_prefix.."beryllium-ore", + order = "r-c-d", + category = "resource", + richness = true, + hidden = true, + enabled = false + }, + { + type = "autoplace-control", + name = data_util.mod_prefix.."holmium-ore", + order = "r-c-e", + category = "resource", + richness = true, + hidden = true, + enabled = false + }, + { + type = "autoplace-control", + name = data_util.mod_prefix.."iridium-ore", + order = "r-c-f", + category = "resource", + richness = true, + hidden = true, + enabled = false + }, + { + type = "autoplace-control", + name = data_util.mod_prefix.."water-ice", + order = "r-s-a", + category = "resource", + richness = true, + hidden = true, + enabled = false + }, + { + type = "autoplace-control", + name = data_util.mod_prefix.."methane-ice", + order = "r-s-b", + category = "resource", + richness = true, + hidden = true, + enabled = false + }, + { + type = "autoplace-control", + name = data_util.mod_prefix.."naquium-ore", + order = "r-s-c", + category = "resource", + richness = true, + hidden = true, + enabled = false + }, +}) + +-- biggest planet size is 10000 at max(600%) +-- planet_radius = 10000 / 6 * (6 + log(1/planet_frequency/6, 2)) +-- planet_frequency = 1 / 6 / 2 ^ (planet_radius * 6 / 10000 - 6) +data.raw.tile["out-of-map"].autoplace = { + probability_expression = 10000 * (noise.distance_from( + noise.var("x"), + noise.var("y"), + --noise.make_point_list({{0,0}})) - 10000 / 6 / noise.var("control-setting:planet-size:frequency:multiplier")) + -- increase number, decrease multiplier, smaller planet + -- smaller scale should have mneat bigger frequency, so smaller planet + -- that worked, so if it actually frequency. + + noise.make_point_list({{0,0}})) - 10000 / 6 * (6 + noise.log2(1/noise.var("control-setting:planet-size:frequency:multiplier")/6))) +} + +-- add the fallback land +data.raw.tile[data_util.mod_prefix.."regolith"].autoplace = { + probability_expression = noise.to_noise_expression(-10000) +} + +-- space in space: --(1000 - 100) * 10000 = 9,000,00 +-- otherwise -100 * 10000 = -1,000,00 +data.raw.tile[data_util.mod_prefix.."space"].autoplace = { + probability_expression = (1 / noise.var("control-setting:planet-size:frequency:multiplier") - 100) * 1000 +} + +-- asteroids are mainly in asteroid belts and asteroid fields +-- asteroid belts have a band around X +-- asteroid fields are all over +--[[ +noise.get_control_setting("planet-size").size_multiplier sets the width of the asteroid belt +asteroid field = 10000 width +asteroid belt = 200 width +planet ring is zone.parent.radius / 200 +Sun is 50 +spaceship is 1 <- this need to not be here +]]-- +data.raw.tile[data_util.mod_prefix.."asteroid"].autoplace = { + probability_expression = (1 / noise.var("control-setting:planet-size:frequency:multiplier") - 100) * 1000 + - 1 + + noise.max(-25, noise.min(0, noise.get_control_setting("planet-size").size_multiplier - 25)) -- Anything below 25 starts to disappear + + (noise.min(noise.var("y") / noise.get_control_setting("planet-size").size_multiplier, 0 - noise.var("y") / noise.get_control_setting("planet-size").size_multiplier) -- this is the ridge + --+ 0.25 * rectangle_peak_to_noise_expression(noise.var("y"), tne(0), noise.get_control_setting("planet-size").size_multiplier) + + noise.max(scaled_noise_layer_expression(5), 0 -scaled_noise_layer_expression(5))) -- billows +} + +-- we do need noise for asteroid spawning in space +-- unless that is all scripted diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-3/recipe.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/recipe.lua new file mode 100644 index 0000000..8db310d --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/recipe.lua @@ -0,0 +1,218 @@ +local data_util = require("data_util") + + +local washlist = {"chemical-plant", data_util.mod_prefix.."space-decontamination-facility"} +for _, name in pairs(washlist) do + if data.raw["assembling-machine"][name] then + table.insert(data.raw["assembling-machine"][name].crafting_categories, "pressure-washing") + end +end + +data_util.replace_or_add_ingredient("low-density-structure", "steel-plate", "steel-plate", 5) +data_util.replace_or_add_ingredient("low-density-structure", "copper-plate", "copper-plate", 10) +if data.raw.item.glass then + data_util.replace_or_add_ingredient("low-density-structure", nil, "glass", 10) +else + data_util.replace_or_add_ingredient("low-density-structure", nil, "stone", 10) +end +data_util.replace_or_add_ingredient("low-density-structure", "plastic-bar", "plastic-bar", 10) + +data_util.replace_or_add_ingredient("rocket-control-unit", nil, "iron-plate", 5) +data_util.replace_or_add_ingredient("rocket-control-unit", nil, "glass", 5) +data_util.replace_or_add_ingredient("rocket-control-unit", "speed-module", "battery", 5) +data_util.replace_or_add_ingredient("rocket-control-unit", "advanced-circuit", "advanced-circuit", 5) +data_util.replace_or_add_ingredient("rocket-control-unit", "processing-unit", "processing-unit", 1) + +data_util.replace_or_add_ingredient("rocket-part", "low-density-structure", "low-density-structure", 5) +data_util.replace_or_add_ingredient("rocket-part", "rocket-control-unit", "rocket-control-unit", 5) +data_util.replace_or_add_ingredient("rocket-part", nil, data_util.mod_prefix .. "heat-shielding", 5) +data.raw["rocket-silo"]["rocket-silo"].rocket_parts_required = 50 +data.raw["rocket-silo"]["rocket-silo"].rocket_result_inventory_size = 20 -- needed for 50x20 = 1000 data returned + +data.raw.recipe["solid-fuel-from-heavy-oil"].category = "fuel-refining" +data.raw.recipe["solid-fuel-from-heavy-oil"].energy_required = 0.5 +data.raw.recipe["solid-fuel-from-light-oil"].category = "fuel-refining" +data.raw.recipe["solid-fuel-from-light-oil"].energy_required = 0.5 +data.raw.recipe["solid-fuel-from-petroleum-gas"].category = "fuel-refining" +data.raw.recipe["solid-fuel-from-petroleum-gas"].energy_required = 0.5 + +data.raw.recipe["rocket-fuel"].crafting_machine_tint = +{ + primary = {r = 0.290, g = 0.027, b = 0.000, a = 0.000}, -- #49060000 + secondary = {r = 0.722, g = 0.465, b = 0.190, a = 0.000}, -- #b8763000 + tertiary = {r = 0.870, g = 0.365, b = 0.000, a = 0.000}, -- #dd5d0000 +} +data.raw.recipe["rocket-fuel"].category = "fuel-refining" +data.raw.recipe["rocket-fuel"].subgroup = "processed-fuel" +data.raw.recipe["rocket-fuel"].order = "p" +data.raw.recipe["rocket-fuel"].energy_required = 1 + +data:extend({ + { + type = "recipe", + name = data_util.mod_prefix .. "liquid-rocket-fuel", + ingredients = { + { name = "rocket-fuel", amount = 1 }, + }, + results = { + {name = data_util.mod_prefix.."liquid-rocket-fuel", type="fluid", amount=data_util.liquid_rocket_fuel_per_solid} + }, + energy_required = 1, + enabled = false, + category = "fuel-refining", + subgroup = "processed-fuel", + order = "p", + crafting_machine_tint = + { + primary = {r = 0.290, g = 0.027, b = 0.000, a = 0.000}, -- #49060000 + secondary = {r = 0.722, g = 0.465, b = 0.190, a = 0.000}, -- #b8763000 + tertiary = {r = 0.870, g = 0.365, b = 0.000, a = 0.000}, -- #dd5d0000 + } + }, + { + type = "recipe", + name = data_util.mod_prefix .. "vulcanite-rocket-fuel", + ingredients = { + { name = data_util.mod_prefix .. "vulcanite-block", amount = 8 }, + }, + results = { + { name = "rocket-fuel", amount= 1 } + }, + energy_required = 1, + enabled = false, + category = "fuel-refining", + subgroup = "processed-fuel", + order = "p", + crafting_machine_tint = + { + primary = {r = 0.290, g = 0.027, b = 0.000, a = 0.000}, -- #49060000 + secondary = {r = 0.722, g = 0.465, b = 0.190, a = 0.000}, -- #b8763000 + tertiary = {r = 0.870, g = 0.365, b = 0.000, a = 0.000}, -- #dd5d0000 + }, + allow_as_intermediate = false, + allow_decomposition = false + }, +}) + +data:extend({ + { + type = "recipe", + name = data_util.mod_prefix .. "rocket-fuel-from-water-copper", + ingredients = { + { type = "fluid", name = "water", amount = 1000 }, + { name = "copper-plate", amount = 1 }, + }, + results = { + {name = "rocket-fuel", amount = 1 }, + {name = data_util.mod_prefix .. "scrap", probability = 0.1, amount_min = 1, amount_max = 1 }, + }, + icons = data_util.transition_icons( + { + icon = data.raw.fluid["water"].icon, + icon_size = data.raw.fluid["water"].icon_size, scale = 0.5 + }, + { + icon = data.raw.item["rocket-fuel"].icon, + icon_size = data.raw.item["rocket-fuel"].icon_size, scale = 0.5 + } + ), + energy_required = 500, + enabled = false, + category = "fuel-refining", + subgroup = "processed-fuel", + order = "p", + crafting_machine_tint = + { + primary = {r = 0.290, g = 0.027, b = 0.000, a = 0.000}, -- #49060000 + secondary = {r = 0.722, g = 0.465, b = 0.190, a = 0.000}, -- #b8763000 + tertiary = {r = 0.870, g = 0.365, b = 0.000, a = 0.000}, -- #dd5d0000 + }, + allow_decomposition = false + }, +}) +data_util.allow_productivity(data_util.mod_prefix .. "liquid-rocket-fuel") +data_util.allow_productivity(data_util.mod_prefix .. "rocket-fuel-from-water-copper") +data_util.allow_productivity("sand-from-stone") +data_util.allow_productivity("glass-from-sand") +data_util.allow_productivity("sand-to-solid-sand") +data_util.allow_productivity(data_util.mod_prefix .. "heat-shielding") +--data_util.allow_productivity(data_util.mod_prefix .. "rocket-science-pack") +data_util.allow_productivity(data_util.mod_prefix .. "data-storage-substrate") +data_util.allow_productivity(data_util.mod_prefix .. "material-testing-pack") + +data_util.disallow_productivity("empty-barrel") +data.raw.recipe["empty-barrel"].normal = nil +data.raw.recipe["empty-barrel"].expensive = nil +data.raw.recipe["empty-barrel"].result = nil +data.raw.recipe["empty-barrel"].ingredients = { { name = "steel-plate", amount = 1 } } +data.raw.recipe["empty-barrel"].results = { { name = "empty-barrel", amount = 1 } } + +data_util.allow_productivity({ + data_util.mod_prefix .. "cargo-rocket-section", + data_util.mod_prefix .. "cargo-rocket-section-beryllium", + data_util.mod_prefix .. "cargo-rocket-cargo-pod", + data_util.mod_prefix .. "cargo-rocket-fuel-tank", + data_util.mod_prefix .. "cryonite-crushed", + data_util.mod_prefix .. "cryonite-washed", + data_util.mod_prefix .. "cryonite-rod", + data_util.mod_prefix .. "cryonite-slush", + data_util.mod_prefix .. "cryonite-ion-exchange-beads", + data_util.mod_prefix .. "beryllium-ore-crushed", + data_util.mod_prefix .. "beryllium-ore-washed", + data_util.mod_prefix .. "beryllium-sulfate", + data_util.mod_prefix .. "beryllium-hydroxide", + data_util.mod_prefix .. "beryllium-powder", + data_util.mod_prefix .. "beryllium-ingot", + data_util.mod_prefix .. "beryllium-plate", + data_util.mod_prefix .. "holmium-ore-crushed", + data_util.mod_prefix .. "holmium-ore-washed", + data_util.mod_prefix .. "holmium-powder", + data_util.mod_prefix .. "holmium-ingot", + data_util.mod_prefix .. "holmium-plate", + data_util.mod_prefix .. "iridium-ore-crushed", + data_util.mod_prefix .. "iridium-ore-washed", + data_util.mod_prefix .. "iridium-powder", + data_util.mod_prefix .. "iridium-ingot", + data_util.mod_prefix .. "iridium-plate", + data_util.mod_prefix .. "naquium-ore-crushed", + data_util.mod_prefix .. "naquium-ore-washed", + data_util.mod_prefix .. "naquium-powder", + data_util.mod_prefix .. "naquium-ingot", + data_util.mod_prefix .. "naquium-plate", + data_util.mod_prefix .. "vitamelange-nugget", + data_util.mod_prefix .. "vitamelange-roast", + data_util.mod_prefix .. "vitamelange-spice", + data_util.mod_prefix .. "vitamelange-extract", + data_util.mod_prefix .. "vulcanite-crushed", + data_util.mod_prefix .. "vulcanite-washed", + data_util.mod_prefix .. "vulcanite-block", + data_util.mod_prefix .. "vulcanite-ion-exchange-beads", + data_util.mod_prefix .. "vulcanite-rocket-fuel", + data_util.mod_prefix .. "aeroframe-pole", + data_util.mod_prefix .. "aeroframe-scaffold", + data_util.mod_prefix .. "aeroframe-bulkhead", + data_util.mod_prefix .. "lattice-pressure-vessel", + data_util.mod_prefix .. "heavy-girder", + data_util.mod_prefix .. "heavy-bearing", + data_util.mod_prefix .. "heavy-composite", + data_util.mod_prefix .. "heavy-assembly", + data_util.mod_prefix .. "vitalic-acid", + data_util.mod_prefix .. "bioscrubber", + data_util.mod_prefix .. "vitalic-reagent", + data_util.mod_prefix .. "vitalic-epoxy", + data_util.mod_prefix .. "self-sealing-gel", + data_util.mod_prefix .. "holmium-cable", + data_util.mod_prefix .. "holmium-solenoid", + data_util.mod_prefix .. "quantum-processor", + data_util.mod_prefix .. "dynamic-emitter", + data_util.mod_prefix .. "iron-smelting-vulcanite", + data_util.mod_prefix .. "copper-smelting-vulcanite", + data_util.mod_prefix .. "stone-brick-vulcanite", + data_util.mod_prefix .. "glass-vulcanite", + data_util.mod_prefix .. "cryonite-lubricant", + data_util.mod_prefix .. "heat-shielding-iridium", + data_util.mod_prefix .. "pulverised-sand", + data_util.mod_prefix .. "low-density-structure-beryllium", + data_util.mod_prefix .. "processing-unit-holmium", + data_util.mod_prefix .. "space-probe-rocket", +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-3/resources.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/resources.lua new file mode 100644 index 0000000..31b728a --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/resources.lua @@ -0,0 +1,102 @@ +local data_util = require("data_util") +local Shared = require("shared") +local noise = require("noise"); +local tne = noise.to_noise_expression; +resource_autoplace = require("prototypes/resource_autoplace_overrides") -- make sure there were not changed + +local resource_controls = {} + +table.insert(data.raw["mining-drill"]["area-mining-drill"].resource_categories, "hard-resource") + +for _, resource in pairs(data.raw.resource) do + + -- no infinte versions of otherwise existing resources + if string.find(resource.name, "infinite", 1, true) + or string.find(resource.name, "unlimited", 1, true) + or string.find(resource.name, "endless", 1, true) + then + log("Resource detected as infinite: " .. resource.name) + resource.autoplace = nil + end + + -- no resources without controls + if resource.autoplace == nil or not resource.autoplace.control then + log("Resource has no control: " .. resource.name) + resource.autoplace = nil + else + log("Resource has control: " .. resource.name .. ": " .. resource.autoplace.control) + end + + if resource.autoplace and not data_util.table_contains(Shared.resources_with_shared_controls, resource.name) then + if resource_controls[resource.autoplace.control] then + -- resources MUST have thier own control - critical for surface resource difference + -- actually in cases where there are multiple sub-types of a resource sharing the same control is acceptable, example: ground water and lithia water. + -- it would not be useful to have a planet with just ground water as a resource + resource.autoplace = nil + log("Resource control already occupied: " .. resource.name) + else + resource_controls[resource.autoplace.control] = "taken" + end + end + + if resource.autoplace == nil then + log("Resource cannot place: " .. resource.name) + else + log("Resource can place: " .. resource.name) + end + + --[[if not (resource.category == "basic-fluid" and resource.minable and resource.minable.results + and #resource.minable.results == 1 and resource.minable.results[1] and resource.minable.results[1].type == "fluid") then + -- no endless non-fluids + resource.infinite = false + resource.minimum = nil + resource.normal = nil + resource.maximum = nil + end]]-- + + if resource.minable and resource.minable.results then + for _, result in ipairs(resource.minable.results) do + if result and result.type ~= "fluid" then + -- no endless non-fluids + resource.infinite = false + resource.minimum = nil + resource.normal = nil + resource.maximum = nil + end + end + end + + -- the prevent overlapping (blocks a differnet resource or makes weird halos) + if resource.autoplace then + local tile_restriction = resource.autoplace.tile_restriction + local resource_setting = se_resources[resource.name] or {} + resource_setting.name = resource.name + + -- apply defaults + resource_setting.order = resource_setting.order or "z-"..resource.name + if resource_setting.has_starting_area_placement == nil then resource_setting.has_starting_area_placement = true end + resource_setting.base_density = resource_setting.base_density or 5 + resource_setting.regular_rq_factor_multiplier = resource_setting.regular_rq_factor_multiplier or 1.1 + resource_setting.starting_rq_factor_multiplier = resource_setting.starting_rq_factor_multiplier or 1 + + if resource.collision_box[1][1] < -0.5 then + -- based on crude oil + resource_setting.base_spots_per_km2 = resource_setting.base_spots_per_km2 or 1.8 + if not resource_setting.random_probability then + resource_setting.random_probability = 1/48 + resource_setting.random_spot_size_minimum = resource_setting.random_spot_size_minimum or 1 + resource_setting.random_spot_size_maximum = resource_setting.random_spot_size_maximum or 1 -- don't randomize spot size + resource_setting.additional_richness = resource_setting.additional_richness or 220000 -- this increases the total everywhere, so base_density needs to be decreased to compensate + end + if resource_setting.has_starting_area_placement == nil then resource_setting.has_starting_area_placement = false end + else + if resource_setting.has_starting_area_placement == nil then resource_setting.has_starting_area_placement = true end + end + + resource.autoplace = resource_autoplace.resource_autoplace_settings(resource_setting) + + resource.autoplace.tile_restriction = tile_restriction + end + +end +data.raw.resource["crude-oil"].resource_patch_search_radius = 32 -- was 12 diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-3/ruin-remnants.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/ruin-remnants.lua new file mode 100644 index 0000000..e07ff06 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/ruin-remnants.lua @@ -0,0 +1,180 @@ +local data_util = require("data_util") + +local base_remnants = { + --"small-scorchmark", + + "1x2-remnants", + "small-remnants", + "small-generic-remnants", + "medium-small-remnants", + "medium-remnants", + "big-remnants", + + "wooden-chest-remnants", + "iron-chest-remnants", + "active-provider-chest-remnants", + "buffer-chest-remnants", + "passive-provider-chest-remnants", + "requester-chest-remnants", + "steel-chest-remnants", + "storage-chest-remnants", + + "arithmetic-combinator-remnants", + "constant-combinator-remnants", + "decider-combinator-remnants", + "programmable-speaker-remnants", + + "big-electric-pole-remnants", + "medium-electric-pole-remnants", + "small-electric-pole-remnants", + "substation-remnants", + + "accumulator-remnants", + "artillery-turret-remnants", + "boiler-remnants", + "burner-mining-drill-remnants", + "centrifuge-remnants", + "chemical-plant-remnants", + "electric-furnace-remnants", + "heat-exchanger-remnants", + "heat-pipe-remnants", + "lab-remnants", + "nuclear-reactor-remnants", + "oil-refinery-remnants", + "pumpjack-remnants", + "radar-remnants", + "roboport-remnants", + "rocket-silo-generic-remnants", + "solar-panel-remnants", + "steam-engine-remnants", + "steam-turbine-remnants", + "steel-furnace-remnants", + "stone-furnace-remnants", + + "train-stop-remnants", + "rail-chain-signal-remnants", + "rail-signal-remnants", + + "transport-belt-remnants", + "underground-belt-remnants", + "splitter-remnants", + "express-splitter-remnants", + "express-transport-belt-remnants", + "express-underground-belt-remnants", + "fast-splitter-remnants", + "fast-transport-belt-remnants", + "fast-underground-belt-remnants", + + "pipe-remnants", + "pipe-to-ground-remnants", + "pump-remnants", + "storage-tank-remnants", + + "wall-remnants", + "gate-remnants", + "gun-turret-remnants", + "flamethrower-turret-remnants", + "laser-turret-remnants", + + "artillery-wagon-remqnants", + "car-remnants", + "tank-remnants", + "cargo-wagon-remnants", + "fluid-wagon-remnants", + "locomotive-remnants", + + "burner-inserter-remnants", + "fast-inserter-remnants", + "filter-inserter-remnants", + "inserter-remnants", + "long-handed-inserter-remnants", + "stack-filter-inserter-remnants", + "stack-inserter-remnants", +} +-- remnants and corpses tha can be used for ruins decoration. +for _, corpse_name in pairs(base_remnants) do + local corpse = data.raw.corpse[corpse_name] + if corpse then + local ruin = table.deepcopy(corpse) + ruin.name = "ruin-"..corpse.name + ruin.localised_name = corpse.localised_name or {"entity-name."..corpse.name} + ruin.type = "simple-entity-with-force" + ruin.time_before_removed = nil + ruin.animations = corpse.animation + ruin.collision_mask = {"object-layer", "player-layer"} + ruin.minable = { + mining_time = 0.1, + results={ + {name=data_util.mod_prefix .. "scrap", amount = 1}, + } + } + ruin.order = "r[ruin]-" .. (corpse.order or "") + ruin.collision_box = corpse.collision_box or {{-0.45,-0.45},{0.45,0.45}} + ruin.selectable_in_game = true + ruin.flags = ruin.flags or {} + data_util.remove_from_table(ruin.flags, "placeable-neutral") + if not data_util.table_contains(ruin.flags, "placeable-player") then + table.insert(ruin.flags, "placeable-player") + end + if not data_util.table_contains(ruin.flags, "player-creation") then + table.insert(ruin.flags, "player-creation") + end + data:extend({ + { + type = "item", + name = ruin.name, + icon = ruin.icon, + icons = ruin.icons, + icon_size = ruin.icon_size, + order = ruin.order, + stack_size = 50, + subgroup = "ruins", + place_result = ruin.name, + flags = { "hidden" }, + localised_name = ruin.localised_name + }, + ruin + }) + end +end + +--[[ +-- TODO: corpses that don't time out +local base_corpses = { + "behemoth-biter-corpse", "behemoth-spitter-corpse", "behemoth-worm-corpse", + "big-biter-corpse", "big-spitter-corpse", "big-worm-corpse", + "medium-biter-corpse", "medium-spitter-corpse", "medium-worm-corpse", + "small-biter-corpse", "small-spitter-corpse", "small-worm-corpse", + "biter-spawner-corpse", "spiter-spawner-corpse" +}]]-- + +data:extend({ + { + type = "item", + name = data_util.mod_prefix .. "blueprint-registration-point", + icon = "__space-exploration-graphics__/graphics/icons/circle-x.png", + icon_size = 64, + stack_size = 50, + subgroup = "ruins", + order = "a", + flags = { "hidden" }, + place_result = data_util.mod_prefix .. "blueprint-registration-point", + }, + { + type = "simple-entity-with-force", + name = data_util.mod_prefix .. "blueprint-registration-point", + collision_box = {{-0.45,-0.45}, {0.45,0.45}}, + collision_mask = {"not-colliding-with-itself"}, + selection_box = {{-0.45,-0.45}, {0.45,0.45}}, + selection_priority = 200, + icon = "__space-exploration-graphics__/graphics/icons/circle-x.png", + icon_size = 64, + animations = { + filename = "__space-exploration-graphics__/graphics/icons/circle-x.png", + width = 32, + height = 32, + }, + flags = { "hidden" }, + minable = {mining_time = 0.2, result = data_util.mod_prefix .. "blueprint-registration-point"}, + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-3/ruins.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/ruins.lua new file mode 100644 index 0000000..3441c14 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/ruins.lua @@ -0,0 +1,312 @@ +local data_util = require("data_util") + +-- Versions of normal items but can't be mined, maybe have higher health. +for _, wall_name in pairs({"stone-wall", "concrete-wall", "steel-wall"}) do + local wall = table.deepcopy(data.raw.wall[wall_name]) + wall.name = wall_name .. "-ruin" + wall.localised_name = {"space-exploration.suffix_ruin", {"entity-name."..wall_name}} + wall.minable = nil + wall.next_upgrade = nil + wall.fast_replaceable_group = nil + wall.placeable_by = {item=wall_name, count = math.ceil((1000 + wall.max_health) / wall.max_health)} -- needed for ruin blueprinting + wall.max_health = 1000 + wall.max_health + table.insert(wall.flags, "not-deconstructable") + table.insert(wall.flags, "hidden") + data:extend({wall}) +end + +-- convert decals to ruins bits +for _, decal_name in pairs({"sand-decal", "sand-decal-black", "sand-decal-tan", "sand-decal-white", "sand-decal-black", "light-mud-decal", "dark-mud-decal", "puberty-decal", "red-desert-decal", "shroom-decal", "lichen-decal", "enemy-decal"}) do + data:extend({{ + type = "simple-entity", + name = decal_name.."-ruin", + icon = "__space-exploration-graphics__/graphics/icons/stone-rubble.png", + icon_size = 64, + flags = {"placeable-neutral", "not-on-map", "placeable-off-grid"}, + order = "a-b-a", + collision_mask = {}, + selection_box = {{-0.45, -0.45}, {0.45, 0.45}}, + max_health = 50, + selection_priority = 1, + selectable_in_game = false, + render_layer = "decals", + pictures = data.raw["optimized-decorative"][decal_name].pictures, + }}) +end + +data:extend({ + { + type = "container", + name = "iron-wood-chest", + icon = "__space-exploration-graphics__/graphics/icons/iron-wood-chest.png", + icon_size = 64, icon_mipmaps = 4, + flags = {"placeable-neutral", "player-creation", "not-deconstructable"}, + placeable_by = {item="iron-chest", count = 1}, -- blueprintable + max_health = 1000, + corpse = "iron-wood-chest-remnants", + dying_explosion = "iron-chest-explosion", + open_sound = { filename = "__base__/sound/metallic-chest-open.ogg", volume=0.43 }, + close_sound = { filename = "__base__/sound/metallic-chest-close.ogg", volume = 0.43 }, + resistances = + { + { + type = "fire", + percent = 80 + }, + { + type = "impact", + percent = 30 + } + }, + collision_box = {{-0.35, -0.35}, {0.35, 0.35}}, + selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, + damaged_trigger_effect = table.deepcopy(data.raw.container["wooden-chest"].damaged_trigger_effect), + inventory_size = 20, + vehicle_impact_sound = table.deepcopy(data.raw.container["wooden-chest"].vehicle_impact_sound), + picture = + { + layers = + { + { + filename = "__space-exploration-graphics__/graphics/entity/ruins/sr/iron-wood-chest.png", + priority = "extra-high", + width = 33, + height = 38, + shift = util.by_pixel(0, -0.5), + hr_version = + { + filename = "__space-exploration-graphics__/graphics/entity/ruins/hr/iron-wood-chest.png", + priority = "extra-high", + width = 66, + height = 76, + shift = util.by_pixel(-0.5, -0.5), + scale = 0.5 + } + }, + { + filename = "__base__/graphics/entity/iron-chest/iron-chest-shadow.png", + priority = "extra-high", + width = 56, + height = 26, + shift = util.by_pixel(10, 6.5), + draw_as_shadow = true, + hr_version = + { + filename = "__base__/graphics/entity/iron-chest/hr-iron-chest-shadow.png", + priority = "extra-high", + width = 110, + height = 50, + shift = util.by_pixel(10.5, 6), + draw_as_shadow = true, + scale = 0.5 + } + } + } + }, + }, + { + type = "simple-entity", + name = "iron-wood-chest-remnants", + icon = "__space-exploration-graphics__/graphics/icons/iron-wood-chest.png", + icon_size = 64, icon_mipmaps = 4, + flags = {"placeable-neutral", "not-on-map"}, + placeable_by = {item="iron-chest", count = 1}, -- blueprintable + subgroup = "storage-remnants", + order = "a-b-a", + collision_mask = {"floor-layer", "object-layer"}, + collision_box = {{-0.45, -0.45}, {0.45, 0.45}}, + selection_box = {{-0.45, -0.45}, {0.45, 0.45}}, + selectable_in_game = is_debug_mode, + final_render_layer = "remnants", + picture = data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/ruins/hr/iron-wood-chest-remnant.png", + line_length = 1, + width = 126, + height = 78, + frame_count = 1, + direction_count = 1, + shift = util.by_pixel(12, 0), + scale = 0.5, + }), + }, + { + type = "simple-entity", + name = "wood-half-chest-left", + icon = "__base__/graphics/icons/wooden-chest.png", + icon_size = 64, icon_mipmaps = 4, + flags = {"placeable-neutral", "not-on-map", "placeable-off-grid"}, + placeable_by = {item="wooden-chest", count = 1}, -- blueprintable + subgroup = "storage-remnants", + order = "a-b-a", + collision_mask = {"floor-layer", "object-layer"}, + collision_box = {{-0.45, -0.45}, {0.45, 0.45}}, + selection_box = {{-0.45, -0.45}, {0.45, 0.45}}, + selectable_in_game = is_debug_mode, + final_render_layer = "remnants", + picture = data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/ruins/hr/wood-half-chest-left.png", + line_length = 1, + width = 110, + height = 73, + frame_count = 1, + direction_count = 1, + shift = util.by_pixel(12, 0), + scale = 0.5, + }), + }, + { + type = "simple-entity", + name = "wood-half-chest-right", + icon = "__base__/graphics/icons/wooden-chest.png", + icon_size = 64, icon_mipmaps = 4, + flags = {"placeable-neutral", "not-on-map", "placeable-off-grid"}, + placeable_by = {item="wooden-chest", count = 1}, -- blueprintable + subgroup = "storage-remnants", + order = "a-b-a", + collision_mask = {"floor-layer", "object-layer"}, + collision_box = {{-0.45, -0.45}, {0.45, 0.45}}, + selection_box = {{-0.45, -0.45}, {0.45, 0.45}}, + selectable_in_game = is_debug_mode, + final_render_layer = "remnants", + picture = data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/ruins/hr/wood-half-chest-right.png", + line_length = 1, + width = 110, + height = 73, + frame_count = 1, + direction_count = 1, + shift = util.by_pixel(12, 0), + scale = 0.5, + }), + }, + { + type = "simple-entity", + name = "vase", + icon = "__space-exploration-graphics__/graphics/icons/vase.png", + icon_size = 64, icon_mipmaps = 4, + flags = {"placeable-neutral", "not-on-map", "placeable-off-grid"}, + placeable_by = {item="wood", count = 1}, -- blueprintable + subgroup = "storage-remnants", + order = "a-b-a", + collision_mask = {"floor-layer", "object-layer"}, + collision_box = {{-0.1, -0.1}, {0.1, 0.1}}, + selection_box = {{-0.1, -0.1}, {0.1, 0.1}}, + max_health = 10, + selectable_in_game = is_debug_mode, + final_render_layer = "remnants", + picture = data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/ruins/hr/vase.png", + line_length = 1, + width = 32, + height = 68, + frame_count = 1, + direction_count = 1, + shift = util.by_pixel(0, -10), + scale = 0.5, + }), + }, + { + type = "simple-entity", + name = "wooden-barrel", + icon = "__space-exploration-graphics__/graphics/icons/wooden-barrel.png", + icon_size = 64, icon_mipmaps = 4, + flags = {"placeable-neutral", "not-on-map", "placeable-off-grid"}, + placeable_by = {item="wood", count = 1}, -- blueprintable + subgroup = "storage-remnants", + order = "a-b-a", + collision_mask = {"floor-layer", "object-layer"}, + collision_box = {{-0.2, -0.2}, {0.2, 0.2}}, + selection_box = {{-0.2, -0.2}, {0.2, 0.2}}, + max_health = 20, + selectable_in_game = is_debug_mode, + final_render_layer = "remnants", + picture = data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/ruins/hr/wooden-barrel.png", + line_length = 1, + width = 52, + height = 86, + frame_count = 1, + direction_count = 1, + shift = util.by_pixel(0, -10), + scale = 0.5, + }), + }, + { + type = "simple-entity", + name = "furnace-ruin", + icon = "__space-exploration-graphics__/graphics/icons/ruin.png", + icon_size = 64, icon_mipmaps = 4, + flags = {"placeable-neutral", "not-on-map"}, + placeable_by = {item="stone-furnace", count = 1}, -- blueprintable + subgroup = "storage-remnants", + order = "a-b-a", + collision_box = data_util.auto_box(1.5, 1.5, 0.1), + selection_box = data_util.auto_box(1.5, 1.5), + selectable_in_game = is_debug_mode, + max_health = 200, + final_render_layer = "remnants", + picture = data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/ruins/hr/furnace-ruin.png", + line_length = 1, + width = 128, + height = 128, + frame_count = 1, + direction_count = 1, + shift = util.by_pixel(0, -6), + scale = 0.5, + }), + }, + { + type = "simple-entity", + name = "workshop-ruin", + icon = "__space-exploration-graphics__/graphics/icons/workshop.png", + icon_size = 64, icon_mipmaps = 4, + flags = {"placeable-neutral", "not-on-map"}, + placeable_by = {item="assembling-machine-1", count = 1}, -- blueprintable + subgroup = "storage-remnants", + order = "a-b-a", + collision_mask = {"floor-layer"}, + collision_box = {{-1.45, -1.45}, {1.45, 1.45}}, + selection_box = {{-1.45, -1.45}, {1.45, 1.45}}, + selectable_in_game = is_debug_mode, + max_health = 200, + final_render_layer = "remnants", + picture = data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/ruins/hr/workshop.png", + line_length = 1, + width = 255, + height = 228, + frame_count = 1, + direction_count = 1, + shift = util.by_pixel(6, 3), + scale = 0.5, + }), + }, + { + type = "simple-entity", + name = "stone-rubble", + icon = "__space-exploration-graphics__/graphics/icons/stone-rubble.png", + icon_size = 64, icon_mipmaps = 4, + flags = {"placeable-neutral", "not-on-map", "placeable-off-grid"}, + placeable_by = {item="stone-wall", count = 1}, -- blueprintable + subgroup = "storage-remnants", + order = "a-b-a", + collision_mask = {"floor-layer", "object-layer"}, + collision_box = {{-0.45, -0.45}, {0.45, 0.45}}, + selection_box = {{-0.45, -0.45}, {0.45, 0.45}}, + max_health = 50, + selectable_in_game = is_debug_mode, + final_render_layer = "remnants", + pictures = data_util.auto_sr_hr({ + filename = "__space-exploration-graphics__/graphics/entity/ruins/hr/stone-rubble.png", + line_length = 1, + width = 118, + height = 912/8, + frame_count = 1, + direction_count = 1, + shift = util.by_pixel(0, 0), + scale = 0.5, + variation_count = 8 + }), + }, +}) diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-3/space-collision.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/space-collision.lua new file mode 100644 index 0000000..c132f5f --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/space-collision.lua @@ -0,0 +1,233 @@ +local data_util = require("data_util") + +local block_from_space = { + "beacon", + "assembling-machine", -- chemical planets, etc + "furnace", + "unit-spawner", + "lab", + "market", + "offshore-pump", + "pipe", + "pipe-to-ground", + "curved-rail", + "straight-rail", + "storage-tank", + "splitter", + "transport-belt", + "underground-belt", + "tree", + "turret", + "fluid-turret", +} + + +-- make vehicles collide with trees and pipes (train-layer) +-- stop characters colliding with pipes (player-layer) +for _, type in pairs({"pipe", "pipe-to-ground"}) do + for _, prototype in pairs(data.raw[type]) do + prototype.collision_mask = collision_mask_util_extended.get_mask(prototype) + collision_mask_util_extended.remove_layer(prototype.collision_mask, "player-layer") + collision_mask_util_extended.add_layer(prototype.collision_mask, collision_mask_util_extended.get_make_named_collision_mask("vehicle-layer")) + end +end + + +-- disable paving over space and other space platform +for _, item in pairs(data.raw.item) do + + -- space + if item.name ~= data_util.mod_prefix.."space-platform-scaffold" + and item.name ~= data_util.mod_prefix.."space-platform-plating" + and item.name ~= data_util.mod_prefix.."spaceship-floor" then + if item.place_as_tile then + if not item.place_as_tile.condition then + item.place_as_tile.condition = {space_collision_layer} + item.place_as_tile.condition_size = 1 + else + table.insert(item.place_as_tile.condition, space_collision_layer) + item.place_as_tile.condition_size = math.max(item.place_as_tile.condition_size or 1) + end + end + end + if item.place_as_tile then + if item.localised_description then + item.localised_description = {"space-exploration.simple-a-b-break", item.localised_description, {"space-exploration.tile_warning"}} + elseif item.name == data_util.mod_prefix.."space-platform-scaffold" + or item.name == data_util.mod_prefix.."space-platform-plating" + or item.name == data_util.mod_prefix.."spaceship-floor" then + -- flooring with description + item.localised_description = {"space-exploration.simple-a-b-break", {"item-description."..item.name}, {"space-exploration.tile_warning"}} + else -- assumed without description + item.localised_description = {"space-exploration.tile_warning"} + end + end +end + +for _, prototype in pairs(data.raw["rocket-silo"]) do + prototype.collision_mask = collision_mask_util_extended.get_mask(prototype) + collision_mask_util_extended.add_layer(prototype.collision_mask, spaceship_collision_layer) -- block from spaceship + data_util.collision_description(prototype) +end + +for _, prototype in pairs(data.raw["mining-drill"]) do + local type = "mining-drill" + if prototype.resource_categories and prototype.resource_categories[1] == "basic-solid" then + -- allow in space + else + prototype.collision_mask = collision_mask_util_extended.get_mask(prototype) + collision_mask_util_extended.add_layer(prototype.collision_mask, space_collision_layer) + end +end + +for _, type in pairs(block_from_space) do + for _, prototype in pairs(data.raw[type]) do + + prototype.collision_mask = collision_mask_util_extended.get_mask(prototype) + + if (not prototype.se_allow_in_space) + and (not se_allow_in_space[prototype.name]) -- see data.lua for how to allow your entity in space + and string.sub(prototype.name, 1, 8) ~= "se-space" + and string.sub(prototype.name, 1, 13) ~= "se-deep-space" + and (not string.find( prototype.name, "storage-tank", 1, true)) + and (not string.find( prototype.name, "valve", 1, true)) + and ( + type == "offshore-pump" + or + not ( + string.find( prototype.name, "pump", 1, true) + --and not string.find( prototype.name, "water", 1, true) + ) + ) -- not water pump + and (not string.find(prototype.name, data_util.mod_prefix.."rocket-", 1, true)) + and prototype.name ~= data_util.mod_prefix.."big-turbine" + and prototype.name ~= data_util.mod_prefix.."condenser-turbine" + and prototype.name ~= data_util.mod_prefix.."meteor-defence-charger" + and prototype.name ~= data_util.mod_prefix.."meteor-point-defence-charger" + and prototype.name ~= data_util.mod_prefix.."meteor-point-defence-charger-overcharged" + --and prototype.name ~= data_util.mod_prefix.."fuel-refinery" + and prototype.name ~= data_util.mod_prefix .. "space-straight-rail" + and prototype.name ~= data_util.mod_prefix .. "space-curved-rail" + and prototype.name ~= data_util.mod_prefix .. "gate-tank-input" + and prototype.name ~= data_util.mod_prefix .. "gate-tank-output" + and prototype.name ~= data_util.mod_prefix .. "gate-platform-scaffold" + and prototype.name ~= data_util.mod_prefix .. "wide-beacon" + and prototype.name ~= "realistic-reactor-eccs" + --and prototype.name ~= "barreling-pump" -- angels + then + --log("space-collide: " .. prototype.name) + collision_mask_util_extended.add_layer(prototype.collision_mask, space_collision_layer) + else + -- is alloweed + if prototype.allowed_effects and data_util.table_contains(prototype.allowed_effects, "productivity") then + local spaced = table.deepcopy(prototype) + spaced.name = spaced.name .. "-spaced" + spaced.localised_name = {"space-exploration.structure_name_spaced", prototype.localised_name or {"entity-name."..prototype.name}} + spaced.localised_description = {"space-exploration.structure_description_spaced", prototype.localised_description or {"entity-description."..prototype.name}} + spaced.flags = spaced.flags or {} + if not data_util.table_contains(spaced.flags, "hidden") then + table.insert(spaced.flags, "hidden") + end + if not spaced.placeable_by then + for _, item in pairs(data.raw.item) do + if item.place_result == prototype.name then + spaced.placeable_by = spaced.placeable_by or {item = item.name, count=1} + break + end + end + end + local allowed_effects = {} + for _, effect in pairs(prototype.allowed_effects) do + if effect ~= "productivity" then + table.insert(allowed_effects, effect) + end + end + spaced.allowed_effects = allowed_effects + data:extend({spaced}) + end + end + if prototype.name ~= data_util.mod_prefix.."dimensional-anchor" + and type ~= "tree" + and type ~= "turret" + and type ~= "unit-spawner" then + data_util.collision_description(prototype) + end + if prototype.crafting_categories and (not data_util.table_contains(prototype.collision_mask, spaceship_collision_layer)) then + local has_space_recipe = false + for _, category in pairs(prototype.crafting_categories) do + if string.sub(category, 1, 6) == "space-" then + has_space_recipe = true + break + end + end + if has_space_recipe then + local grounded = table.deepcopy(prototype) + grounded.name = grounded.name .. "-grounded" + grounded.localised_name = {"space-exploration.structure_name_grounded", prototype.localised_name or {"entity-name."..prototype.name}} + grounded.localised_description = {"space-exploration.structure_description_grounded", prototype.localised_description or {"entity-description."..prototype.name}} + grounded.flags = grounded.flags or {} + if not data_util.table_contains(grounded.flags, "hidden") then + table.insert(grounded.flags, "hidden") + end + grounded.crafting_categories = {} + for _, category in pairs(prototype.crafting_categories) do + if string.sub(category, 1, 6) ~= "space-" then + table.insert(grounded.crafting_categories, category) + end + end + if #grounded.crafting_categories == 0 then + grounded.crafting_categories = {"no-category"} + end + if not grounded.placeable_by then + for _, item in pairs(data.raw.item) do + if item.place_result == prototype.name then + grounded.placeable_by = grounded.placeable_by or {item = item.name, count=1} + break + end + end + end + data:extend({grounded}) + end + end + end +end + +for _, type in pairs({"accumulator"}) do + for _, prototype in pairs(data.raw[type]) do + data_util.collision_description(prototype) + end +end + +for _, container in pairs({"container", "logistic-container"}) do + for _, prototype in pairs(data.raw[container]) do + if (not prototype.se_allow_in_space) + and string.sub(prototype.name, 1, 8) ~= "se-space" + and prototype.name ~= data_util.mod_prefix .. "cargo-rocket-cargo-pod" + and prototype.name ~= data_util.mod_prefix.."meteor-defence-container" + and prototype.name ~= data_util.mod_prefix.."meteor-point-defence-container" + and (not string.find(prototype.name, data_util.mod_prefix.."rocket-", 1, true)) + and (not string.find(prototype.name, "silo", 1, true)) + and (not string.find(prototype.name, "chest", 1, true)) + and (not string.find(prototype.name, "warehouse", 1, true)) + and (not string.find(prototype.name, "storehouse", 1, true)) then + --log(prototype.name) + prototype.collision_mask = collision_mask_util_extended.get_mask(prototype) + collision_mask_util_extended.add_layer(prototype.collision_mask, space_collision_layer) + end + end +end + +--[[ -- this prevents cars from driving over belts +for _, prototype in pairs(data.raw.car) do + if prototype.name ~= "se-space-capsule-_-vehicle" then + prototype.collision_mask = prototype.collision_mask or {"player-layer", "train-layer"} + table.insert(prototype.collision_mask, space_collision_layer) + end +end +]]-- +for _, prototype in pairs(data.raw.fish) do + if not string.find(prototype.name, "space", 1, true) then + prototype.collision_mask = collision_mask_util_extended.get_mask(prototype) + collision_mask_util_extended.add_layer(prototype.collision_mask, space_collision_layer) + end +end diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-3/technology-procedural.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/technology-procedural.lua new file mode 100644 index 0000000..29b5406 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/technology-procedural.lua @@ -0,0 +1,176 @@ +local data_util = require("data_util") + +-- Procedural tech +debug_log("Procedural tech") + +local function update_tech_unit_counts(complexity, multiplier) + if not (complexity and complexity.unit) then return end + if complexity.unit.count then + complexity.unit.original_count = complexity.unit.original_count or complexity.unit.count + complexity.unit.count = math.ceil(complexity.unit.original_count * multiplier) + end + if complexity.unit.count_formula then + complexity.unit.original_count_formula = complexity.unit.original_count_formula or complexity.unit.count_formula + complexity.unit.count_formula = multiplier.."*("..complexity.unit.original_count_formula..")" + end +end + +local function update_tech_for_complexity(tech, complexity, space_flavour) + local multiplier = 1 + if complexity >= 4 then -- would be at complexity 3 except for military + data_util.tech_add_ingredients_with_prerequisites(tech.name, {"chemical-science-pack" }) + end + if complexity >= 5 then + data_util.tech_add_ingredients_with_prerequisites(tech.name, {data_util.mod_prefix .. "rocket-science-pack" }) + end + if complexity == 6 then + data_util.tech_add_ingredients_with_prerequisites(tech.name, { space_flavour.."-1" }) + multiplier = 0.6 + elseif complexity == 7 then + data_util.tech_add_ingredients_with_prerequisites(tech.name, { space_flavour.."-2" }) + multiplier = 0.5 + elseif complexity == 8 then + data_util.tech_add_ingredients_with_prerequisites(tech.name, { space_flavour.."-3" }) + multiplier = 0.4 + elseif complexity >= 9 then + data_util.tech_add_ingredients_with_prerequisites(tech.name, { space_flavour.."-4" }) + multiplier = 0.3 + end + if complexity >= 10 then + data_util.tech_add_ingredients_with_prerequisites(tech.name, { data_util.mod_prefix .. "deep-space-science-pack-1" }) + multiplier = 0.2 + end + if complexity >= 11 then + data_util.tech_add_ingredients_with_prerequisites(tech.name, { data_util.mod_prefix .. "deep-space-science-pack-2" }) + multiplier = 0.15 + end + if complexity >= 12 then + data_util.tech_add_ingredients_with_prerequisites(tech.name, { data_util.mod_prefix .. "deep-space-science-pack-3" }) + multiplier = 0.12 + end + if complexity >= 13 then + data_util.tech_add_ingredients_with_prerequisites(tech.name, { data_util.mod_prefix .. "deep-space-science-pack-4" }) + multiplier = 0.1 + end + if complexity >= 14 then + data_util.tech_add_ingredients_with_prerequisites(tech.name, { "space-science-pack" }) + end + + update_tech_unit_counts(tech, multiplier) + update_tech_unit_counts(tech.normal, multiplier) + update_tech_unit_counts(tech.expensive, multiplier) + +end +local techs_static = {} +for _, tech in pairs(data.raw.technology) do + table.insert(techs_static, tech.name) +end + +for _, tech_name in pairs(techs_static) do + local tech = data.raw.technology[tech_name] + if tech and string.sub(tech.name, 1, 3) ~= "se-" then + --debug_log("consider tech: " .. tech.name) + local exclude = false + if mods["NPUtilsTech"] and string.len(tech.name) == 3 and string.sub(tech.name, 1, 1) == "n" then + exclude = true + end + if not exclude then + for _, exclusion in pairs(se_prodecural_tech_exclusions) do + if string.find(tech.name, exclusion, 1, true) then + exclude = true + break + end + end + end + if not exclude then + -- if it already needs space science then starting complexity is 1 (space) + -- otherwise if it requires utility/production then it is -1 + -- otherwise if it requires chemical it is -2, + -- otherwise if it requires logistic it is -3 + -- otherwise if it requires automation it is -4 + local this_level = data_util.string_to_simple_int(tech.name, true) + local max_level = tech.max_level + if this_level or max_level then + this_level = this_level or 1 + max_level = max_level or this_level + --debug_log("tech (" .. tech.name..") level: " .. this_level) + --debug_log("tech (" .. tech.name..") max level: " .. max_level) + local min_complexity = 4 -- pre-space + if data_util.tech_has_ingredient (tech.name, "deep-science-pack") then + exclude = true -- already done + elseif data_util.tech_has_ingredient (tech.name, data_util.mod_prefix .. "astronomic-science-pack-4") + or data_util.tech_has_ingredient (tech.name, data_util.mod_prefix .. "biological-science-pack-4") + or data_util.tech_has_ingredient (tech.name, data_util.mod_prefix .. "energy-science-pack-4") + or data_util.tech_has_ingredient (tech.name, data_util.mod_prefix .. "material-science-pack-4") then + min_complexity = 9 + elseif data_util.tech_has_ingredient (tech.name, data_util.mod_prefix .. "astronomic-science-pack-3") + or data_util.tech_has_ingredient (tech.name, data_util.mod_prefix .. "biological-science-pack-3") + or data_util.tech_has_ingredient (tech.name, data_util.mod_prefix .. "energy-science-pack-3") + or data_util.tech_has_ingredient (tech.name, data_util.mod_prefix .. "material-science-pack-3") then + min_complexity = 8 + elseif data_util.tech_has_ingredient (tech.name, data_util.mod_prefix .. "astronomic-science-pack-2") + or data_util.tech_has_ingredient (tech.name, data_util.mod_prefix .. "biological-science-pack-2") + or data_util.tech_has_ingredient (tech.name, data_util.mod_prefix .. "energy-science-pack-2") + or data_util.tech_has_ingredient (tech.name, data_util.mod_prefix .. "material-science-pack-2") then + min_complexity = 7 + elseif data_util.tech_has_ingredient (tech.name, data_util.mod_prefix .. "astronomic-science-pack-1") + or data_util.tech_has_ingredient (tech.name, data_util.mod_prefix .. "biological-science-pack-1") + or data_util.tech_has_ingredient (tech.name, data_util.mod_prefix .. "energy-science-pack-1") + or data_util.tech_has_ingredient (tech.name, data_util.mod_prefix .. "material-science-pack-1") then + min_complexity = 6 + elseif data_util.tech_has_ingredient (tech.name, data_util.mod_prefix .. "rocket-science-pack") then + min_complexity = 5 + elseif data_util.tech_has_ingredient (tech.name, "utility-science-pack") + or data_util.tech_has_ingredient (tech.name, "production-science-pack") then + min_complexity = 4 + elseif data_util.tech_has_ingredient (tech.name, "chemical-science-pack") then + min_complexity = 3 + elseif data_util.tech_has_ingredient (tech.name, "logistic-science-pack") then + min_complexity = 2 + elseif data_util.tech_has_ingredient (tech.name, "automation-science-pack") then + min_complexity = 1 + end + if not exclude then + local complexity = math.max(this_level, min_complexity) + local complexity_adjust = complexity - this_level + --debug_log("tech (" .. tech.name..") complexity_adjust: " .. complexity_adjust) + local max_complexity = 10 + local level_of_max_complexity = max_complexity - complexity_adjust + --debug_log("tech (" .. tech.name..") level_of_max_complexity: " .. level_of_max_complexity) + local max_level_to_make = level_of_max_complexity + if max_level ~= "infinite" then + max_level_to_make = math.min(max_level_to_make, max_level) + end + --debug_log("tech (" .. tech.name..") max_level_to_make: " .. max_level_to_make) + local space_flavour = data_util.mod_prefix .. "material-science-pack" + if string.find(tech.name, "laser", 1, true) + or string.find(tech.name, "energy", 1, true) + or string.find(tech.name, "robots-speed", 1, true) then + space_flavour = data_util.mod_prefix .. "energy-science-pack" + end + --debug_log("tech (" .. tech.name..") space_flavour: " .. space_flavour) + -- Update packs for this + update_tech_for_complexity(tech, complexity, space_flavour) + -- make new levels as required + if max_level_to_make > this_level then + local raw_name = data_util.remove_number_suffix(tech.name) + --debug_log("tech (" .. tech.name..") raw_name: " .. raw_name) + for i = this_level+1, max_level_to_make do + --debug_log("tech (" .. tech.name..") try to make tech for level: " .. i.."("..raw_name.."-"..i..")") + local new_tech = data_util.tech_split_at_level(raw_name, i) + if new_tech then + update_tech_for_complexity(new_tech, i+complexity_adjust, space_flavour) + --debug_log("new tech level created: " .. new_tech.name.."") + else + --debug_log("tech (" .. tech.name..") create tech failed") + end + end + else + --debug_log("tech (" .. tech.name..") no new levels needed") + end + + end + end + end + end +end diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-3/technology.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/technology.lua new file mode 100644 index 0000000..67d84cb --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-3/technology.lua @@ -0,0 +1,184 @@ +local data_util = require("data_util") + +data_util.tech_lock_recipes("rocket-fuel", {data_util.mod_prefix .."liquid-rocket-fuel", data_util.mod_prefix .. "vulcanite-rocket-fuel"}) + +local function auto() return {"automation-science-pack", 1} end +local function logi() return {"logistic-science-pack", 1} end +local function chem() return {"chemical-science-pack", 1} end +local function mili() return {"military-science-pack", 1} end +local function util() return {"utility-science-pack", 1} end +local function prod() return {"production-science-pack", 1} end +local function rock() return {data_util.mod_prefix .. "rocket-science-pack", 1} end +local function spac() return {"space-science-pack", 1} end +local function deep() return {data_util.mod_prefix .."deep-space-science-pack-1", 1} end + +--[[ +data.raw.technology["logistic-science-pack"].icon = "__space-exploration-graphics__/graphics/technology/beaker/teal.png" +data.raw.technology["chemical-science-pack"].icon = "__space-exploration-graphics__/graphics/technology/beaker/cyan.png" +data.raw.technology["military-science-pack"].icon = "__space-exploration-graphics__/graphics/technology/beaker/grey.png" +data.raw.technology["production-science-pack"].icon = "__space-exploration-graphics__/graphics/technology/beaker/purple.png" +data.raw.technology["utility-science-pack"].icon = "__space-exploration-graphics__/graphics/technology/beaker/yellow.png" +data.raw.technology["space-science-pack"].icon = "__space-exploration-graphics__/graphics/technology/beaker/white.png" + +data.raw.tool["automation-science-pack"].icon = "__space-exploration-graphics__/graphics/icons/beaker/red.png" +data.raw.tool["automation-science-pack"].icon_size = 64 +data.raw.tool["automation-science-pack"].icon_mipmaps = 1 +data.raw.tool["logistic-science-pack"].icon = "__space-exploration-graphics__/graphics/icons/beaker/teal.png" +data.raw.tool["logistic-science-pack"].icon_size = 64 +data.raw.tool["logistic-science-pack"].icon_mipmaps = 1 +data.raw.tool["chemical-science-pack"].icon = "__space-exploration-graphics__/graphics/icons/beaker/cyan.png" +data.raw.tool["chemical-science-pack"].icon_size = 64 +data.raw.tool["chemical-science-pack"].icon_mipmaps = 1 +data.raw.tool["military-science-pack"].icon = "__space-exploration-graphics__/graphics/icons/beaker/grey.png" +data.raw.tool["military-science-pack"].icon_size = 64 +data.raw.tool["military-science-pack"].icon_mipmaps = 1 +data.raw.tool["production-science-pack"].icon = "__space-exploration-graphics__/graphics/icons/beaker/purple.png" +data.raw.tool["production-science-pack"].icon_size = 64 +data.raw.tool["production-science-pack"].icon_mipmaps = 1 +data.raw.tool["utility-science-pack"].icon = "__space-exploration-graphics__/graphics/icons/beaker/yellow.png" +data.raw.tool["utility-science-pack"].icon_size = 64 +data.raw.tool["utility-science-pack"].icon_mipmaps = 1 +data.raw.tool["space-science-pack"].icon = "__space-exploration-graphics__/graphics/icons/beaker/white.png" +data.raw.tool["space-science-pack"].icon_size = 64 +data.raw.tool["space-science-pack"].icon_mipmaps = 1 +]]-- + +--data_util.tech_remove_prerequisites("space-science-pack", {"rocket-silo"}) +--data_util.tech_add_prerequisites("space-science-pack", {data_util.mod_prefix .."space-science-lab"}) +--data.raw.technology["space-science-pack"].prerequisites = {"production-science-pack", data_util.mod_prefix .. "processing-cryonite"} +--data.raw.technology["space-science-pack"].unit.ingredients = {auto(), logi(), chem(), prod()} +data_util.tech_lock_recipes("space-science-pack", {"space-science-pack"}) +data_util.tech_remove_ingredients("space-science-pack", {"utility-science-pack"}) + +data_util.tech_add_prerequisites("rocket-fuel", {"chemical-science-pack"}) +data_util.tech_add_prerequisites("rocket-fuel", {data_util.mod_prefix .. "fuel-refining"}) +data.raw.technology["rocket-fuel"].unit.ingredients = {auto(), logi(), chem()} +data_util.tech_lock_recipes("rocket-fuel", {data_util.mod_prefix .."liquid-rocket-fuel"}) + +data.raw.technology["rocket-silo"].unit.count = 500 +data.raw.technology["rocket-silo"].unit.time = 30 +data.raw.technology["rocket-silo"].unit.ingredients = {auto(), logi(), chem()} +data_util.tech_lock_recipes("rocket-silo", {"satellite"}) +data.raw.technology['rocket-silo'].prerequisites = {"concrete", "electric-engine", "low-density-structure", "rocket-control-unit", "rocket-fuel", "solar-energy", data_util.mod_prefix .. "heat-shielding"} +if data.raw.technology['radar'] then + data_util.tech_add_prerequisites('rocket-silo', {'radar'}) + data.raw.technology['radar'].enabled = true + data_util.tech_lock_recipes("radar", {"radar"}) +end + + +data.raw.technology["rocket-control-unit"].unit.ingredients = {auto(), logi(), chem()} +data_util.tech_remove_prerequisites("rocket-control-unit", {"utility-science-pack", "speed-module", "speed-module-1"}) +data_util.tech_add_prerequisites("rocket-control-unit", {"advanced-electronics-2", "battery"}) + +data_util.tech_add_prerequisites("basic-optics", {"glass-processing"}) + +data_util.tech_add_prerequisites("chemical-science-pack", {"optics"}) + +data_util.tech_remove_prerequisites("advanced-material-processing-2", {"chemical-science-pack"}) +data_util.tech_add_prerequisites("advanced-material-processing-2", {data_util.mod_prefix .. "heat-shielding"}) + +--data_util.tech_add_prerequisites("logistic-robotics", {"utility-science-pack"}) +--data_util.tech_add_ingredients("logistic-robotics", { "chemical-science-pack", "utility-science-pack"}, true) +data_util.tech_add_ingredients("logistic-robotics", { "chemical-science-pack"}, true) + +--data_util.tech_remove_prerequisites("logistic-system", {"utility-science-pack"}) + +data_util.tech_add_ingredients_with_prerequisites("worker-robots-storage-1", {"utility-science-pack", "space-science-pack"}) +data_util.tech_add_ingredients_with_prerequisites("worker-robots-storage-2", {data_util.mod_prefix .. "material-science-pack-1"}) + + +data_util.tech_remove_prerequisites("worker-robots-speed-3", {"utility-science-pack"}) +data_util.tech_remove_ingredients_recursive ("worker-robots-speed-5", {"utility-science-pack"}) -- forces prereq at later step + +data_util.tech_add_ingredients_with_prerequisites("worker-robots-speed-3", {"production-science-pack", "space-science-pack"}) +data_util.tech_add_ingredients_with_prerequisites("worker-robots-speed-4", {data_util.mod_prefix .. "rocket-science-pack"}) +data_util.tech_add_ingredients_with_prerequisites("worker-robots-speed-5", {"utility-science-pack", data_util.mod_prefix .. "energy-science-pack-1"}) + +--data_util.tech_add_ingredients_with_prerequisites("speed-module-2", {"production-science-pack"}) +--data_util.tech_add_ingredients_with_prerequisites("productivity-module-2", {"production-science-pack"}) +--data_util.tech_add_ingredients_with_prerequisites("effectivity-module-2", {"production-science-pack"}) + +--data_util.tech_remove_prerequisites("speed-module-3", {"production-science-pack"}) +--data_util.tech_add_prerequisites("speed-module-3", {"space-science-pack", data_util.mod_prefix .. "material-science-pack-1"}) +--data_util.tech_add_ingredients("speed-module-3", { "space-science-pack", data_util.mod_prefix .. "material-science-pack-1" }, true) + +--data_util.tech_remove_prerequisites("productivity-module-3", {"production-science-pack"}) +--data_util.tech_add_prerequisites("productivity-module-3", {"space-science-pack", data_util.mod_prefix .. "biological-science-pack-1"}) +--data_util.tech_add_ingredients("productivity-module-3", { "space-science-pack", data_util.mod_prefix .. "biological-science-pack-1" }, true) + +--data_util.tech_remove_prerequisites("effectivity-module-3", {"production-science-pack"}) +--data_util.tech_add_prerequisites("effectivity-module-3", {"space-science-pack", data_util.mod_prefix .. "energy-science-pack-1"}) +--data_util.tech_add_ingredients("effectivity-module-3", { "space-science-pack", data_util.mod_prefix .. "energy-science-pack-1" }, true) + +--data_util.tech_add_prerequisites("effect-transmission", { "utility-science-pack", data_util.mod_prefix .. "energy-science-pack-1"}) +--data_util.tech_add_ingredients("effect-transmission", { "utility-science-pack", "space-science-pack", data_util.mod_prefix .. "energy-science-pack-1"}, true) +data_util.tech_add_prerequisites("effect-transmission", { "production-science-pack"}) +data_util.tech_add_ingredients("effect-transmission", { "production-science-pack"}, true) + +--data_util.tech_add_ingredients_with_prerequisites("modular-armor", {"chemical-science-pack"}) +--data_util.tech_add_ingredients_with_prerequisites("power-armor", {"utility-science-pack"}) +--data_util.tech_add_prerequisites("power-armor-mk2", {data_util.mod_prefix.."processing-iridium"}) +--data_util.tech_add_ingredients("power-armor-mk2", { "space-science-pack"}, true) + +data_util.tech_add_ingredients_with_prerequisites("battery-mk2-equipment", { "space-science-pack"}) + +--data_util.tech_add_ingredients_with_prerequisites("personal-roboport-equipment", {"utility-science-pack"}) +--data_util.tech_remove_prerequisites("personal-roboport-mk2-equipment", {"utility-science-pack"}) +data_util.tech_add_ingredients_with_prerequisites("personal-roboport-mk2-equipment", {data_util.mod_prefix .. "material-science-pack-1"}) + +data_util.tech_add_prerequisites("fusion-reactor-equipment", { data_util.mod_prefix .. "deep-space-science-pack-1", data_util.mod_prefix .. "rtg-equipment-2",}) + + +data_util.tech_lock_recipes(data_util.mod_prefix.."fuel-refining", {"solid-fuel-from-heavy-oil", "solid-fuel-from-light-oil", "solid-fuel-from-petroleum-gas"}) + +--data_util.tech_split_at_levels("artillery-shell-range", {3, 5}) +--data_util.tech_add_ingredients_with_prerequisites("artillery-shell-range-3", { data_util.mod_prefix .. "material-science-pack-1"}) +--data_util.tech_split_at_levels("artillery-shell-speed", {3, 5}) +--data_util.tech_add_ingredients_with_prerequisites("artillery-shell-speed-3", { data_util.mod_prefix .. "material-science-pack-1"}) + +data_util.tech_remove_prerequisites("spidertron", {"fusion-reactor-equipment", "effectivity-module-3"}) +data_util.tech_add_prerequisites("spidertron", { + data_util.mod_prefix .. "biological-science-pack-1", + data_util.mod_prefix .. "heavy-girder", + data_util.mod_prefix .. "rtg-equipment"}) +data_util.tech_add_ingredients("spidertron", { data_util.mod_prefix .. "rocket-science-pack", data_util.mod_prefix .. "biological-science-pack-1", data_util.mod_prefix .. "material-science-pack-1"}, true) +data_util.tech_remove_ingredients("spidertron", { "production-science-pack"}) +if data.raw.technology.spidertron then + data.raw.technology.spidertron.unit.count = 1000 +end + +data_util.tech_remove_ingredients("mining-productivity-3", {"utility-science-pack"}) +data_util.tech_remove_ingredients("mining-productivity-4", {"utility-science-pack"}) +data_util.tech_split_at_levels("mining-productivity", {4, 5, 6, 7, 8, 9, 10, 11, 12, 13}) +data_util.tech_add_ingredients_with_prerequisites("mining-productivity-3", {"production-science-pack"}) +data_util.tech_add_ingredients_with_prerequisites("mining-productivity-4", {"utility-science-pack", "space-science-pack"}) +data_util.tech_add_ingredients_with_prerequisites("mining-productivity-5", {data_util.mod_prefix .. "rocket-science-pack"}) +data_util.tech_add_ingredients_with_prerequisites("mining-productivity-6", {data_util.mod_prefix .. "biological-science-pack-1"}) +data_util.tech_add_ingredients_with_prerequisites("mining-productivity-7", {data_util.mod_prefix .. "biological-science-pack-2"}) +data_util.tech_add_ingredients_with_prerequisites("mining-productivity-8", {data_util.mod_prefix .. "biological-science-pack-3"}) +data_util.tech_add_ingredients_with_prerequisites("mining-productivity-9", {data_util.mod_prefix .. "biological-science-pack-4"}) +data_util.tech_add_ingredients("mining-productivity-10", { data_util.mod_prefix .. "biological-science-pack-4" }, true) +data_util.tech_add_ingredients("mining-productivity-11", { data_util.mod_prefix .. "biological-science-pack-4" }, true) +data_util.tech_add_ingredients("mining-productivity-12", { data_util.mod_prefix .. "biological-science-pack-4" }, true) +data_util.tech_add_ingredients("mining-productivity-13", { data_util.mod_prefix .. "biological-science-pack-4" }, true) +data_util.tech_add_ingredients_with_prerequisites("mining-productivity-10", {data_util.mod_prefix .. "deep-space-science-pack-1"}) +data_util.tech_add_ingredients_with_prerequisites("mining-productivity-11", {data_util.mod_prefix .. "deep-space-science-pack-2"}) +data_util.tech_add_ingredients_with_prerequisites("mining-productivity-12", {data_util.mod_prefix .. "deep-space-science-pack-3"}) +data_util.tech_add_ingredients_with_prerequisites("mining-productivity-13", {data_util.mod_prefix .. "deep-space-science-pack-4"}) + +data_util.tech_add_prerequisites("jetpack-2", { data_util.mod_prefix .. "rocket-science-pack"}) +data_util.tech_add_prerequisites("jetpack-3", { data_util.mod_prefix .. "aeroframe-pole"}) +data_util.tech_add_prerequisites("jetpack-4", { data_util.mod_prefix .. "naquium-cube"}) +data_util.tech_add_ingredients_with_prerequisites("jetpack-2", {data_util.mod_prefix .. "rocket-science-pack"}) +data_util.tech_add_ingredients_with_prerequisites("jetpack-3", {data_util.mod_prefix .. "astronomic-science-pack-1"}) +data_util.tech_add_ingredients_with_prerequisites("jetpack-4", {data_util.mod_prefix .. "deep-space-science-pack-1"}) + +if not data.raw.technology["industrial-furnace"] then error("Mod conflict, industrial-furnace tech is missing.") end +data_util.tech_remove_ingredients_recursive("industrial-furnace", {"production-science-pack"}) +data_util.tech_remove_prerequisites("industrial-furnace", {"production-science-pack"}) +data_util.tech_add_prerequisites("industrial-furnace", { "advanced-material-processing-2"}) + +if data.raw.technology["electric-mining"] and not data.raw.technology["electric-mining"].enabled == false then + data_util.tech_add_prerequisites(data_util.mod_prefix .. "core-miner", {"electric-mining"}) +end diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-multi/item-group-assign.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-multi/item-group-assign.lua new file mode 100644 index 0000000..4da5056 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-multi/item-group-assign.lua @@ -0,0 +1,110 @@ +local data_util = require("data_util") +local types = {"item", "item-with-entity-data", "rail-planner", "capsule"} + +local function change_group (name, group, order) + if data.raw["item-subgroup"][name] then + data.raw["item-subgroup"][name].group = group + if order then + data.raw["item-subgroup"][name].order = order + end + end +end + +change_group("fluid-recipes", "resources") +change_group("fuel-processing", "resources") +change_group("fill-barrel", "resources") +change_group("empty-barrel", "resources") +change_group("raw-resource", "resources") +change_group("raw-material", "resources") +change_group("science-pack", "science", "a") +change_group("tool", "combat", "a-a") +change_group("gun", "combat", "a-b") + +local function change_subgroup (name, subgroup, order) + for _, type in pairs(types) do + if data.raw[type][name] then + data.raw[type][name].subgroup = subgroup + if order then + data.raw[type][name].order = order + end + end + end +end + +if mods["aai-containers"] then + change_subgroup("logistic-chest-active-provider", "container-1") + change_subgroup("logistic-chest-passive-provider", "container-1") + change_subgroup("logistic-chest-storage", "container-1") + change_subgroup("logistic-chest-buffer", "container-1") + change_subgroup("logistic-chest-requester", "container-1") +else + change_subgroup("logistic-chest-active-provider", "storage") + change_subgroup("logistic-chest-passive-provider", "storage") + change_subgroup("logistic-chest-storage", "storage") + change_subgroup("logistic-chest-buffer", "storage") + change_subgroup("logistic-chest-requester", "storage") +end + +change_subgroup("transport-belt", "transport-belt") +change_subgroup("fast-transport-belt", "transport-belt") +change_subgroup("express-transport-belt", "transport-belt") + +change_subgroup("underground-belt", "underground-belt") +change_subgroup("fast-underground-belt", "underground-belt") +change_subgroup("express-underground-belt", "underground-belt") + +change_subgroup("splitter", "splitter") +change_subgroup("fast-splitter", "splitter") +change_subgroup("express-splitter", "splitter") + +change_subgroup("pipe", "pipe") +change_subgroup("pipe-to-ground", "pipe") +change_subgroup("pump", "pipe") +change_subgroup("storage-tank", "pipe") + +change_subgroup("rail", "rail") +change_subgroup("train-stop", "rail") +change_subgroup("rail-signal", "rail") +change_subgroup("rail-chain-signal", "rail") +change_subgroup("locomotive", "rail") +change_subgroup("cargo-wagon", "rail") +change_subgroup("fluid-wagon", "rail") +change_subgroup("artillery-wagon", "rail") + +change_subgroup("burner-lab", "lab") +change_subgroup("lab", "lab") + +change_subgroup("solar-panel", "solar") +change_subgroup("accumulator", "solar") + +change_subgroup("chemical-plant", "chemistry") +change_subgroup("oil-refinery", "chemistry") +change_subgroup("fuel-processor", "chemistry") + +change_subgroup("burner-assembling-machine", "assembling") +change_subgroup("assembling-machine-1", "assembling") +change_subgroup("assembling-machine-2", "assembling") +change_subgroup("assembling-machine-3", "assembling") + +change_subgroup("centrifuge", "radiation") + +change_subgroup("processed-fuel", "processed-fuel") +change_subgroup("rocket-fuel", "processed-fuel") +change_subgroup("nuclear-fuel", "processed-fuel") + +change_subgroup("sand", "pulverised") +change_subgroup("glass", "plates") +change_subgroup("iron-plate", "plates") +change_subgroup("copper-plate", "plates") +change_subgroup("steel-plate", "plates") +change_subgroup("plastic-bar", "plates") +change_subgroup("stone-tablet", "plates") + +change_subgroup("battery", "intermediate-product") +change_subgroup("explosives", "intermediate-product") + +change_subgroup("cliff-explosives", "capsule") + +if data.raw.item["logistic-train-stop"] then data.raw.item["logistic-train-stop"].subgroup = "rail" end +if data.raw["item-subgroup"]["angels-warehouses"] then data.raw["item-subgroup"]["angels-warehouses"].order = "a1-"..data.raw["item-subgroup"]["angels-warehouses"].order end +if data.raw.item["angels-pressure-tank-1"] then data.raw.item["angels-pressure-tank-1"].subgroup = "pipe" end diff --git a/space-exploration_0.5.80/space-exploration/prototypes/phase-multi/no-recycle.lua b/space-exploration_0.5.80/space-exploration/prototypes/phase-multi/no-recycle.lua new file mode 100644 index 0000000..3a435fa --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/phase-multi/no-recycle.lua @@ -0,0 +1,48 @@ + +-- reverse factory +--table.insert(rf.norecycle_items, "example-recipe") +rf = rf or {} +rf.norecycle_categories = rf.norecycle_categories or {} +rf.norecycle_items = rf.norecycle_items or {} + +local function norecycle_category(category) + if rf and rf.norecycle_categories then + table.insert(rf.norecycle_categories, category) + end +end + +local function norecycle_recipe(recipe) + if rf and rf.norecycle_items then + table.insert(rf.norecycle_items, recipe) + end +end + + +norecycle_recipe("se-micro-black-hole-data") + +norecycle_category("condenser-turbine") +norecycle_category("core-mining") +norecycle_category("space-accelerator") +norecycle_category("space-astrometrics") +norecycle_category("space-collider") +norecycle_category("space-materialisation") +norecycle_category("space-genetics") +norecycle_category("space-gravimetrics") +norecycle_category("space-growth") +norecycle_category("space-hypercooling") +norecycle_category("space-mechanical") +norecycle_category("space-observation-gammaray") +norecycle_category("space-observation-xray") +norecycle_category("space-observation-uv") +norecycle_category("space-observation-visible") +norecycle_category("space-observation-infrared") +norecycle_category("space-observation-microwave") +norecycle_category("space-observation-radio") +norecycle_category("space-radiator") +norecycle_category("space-radiation") +norecycle_category("space-research") +norecycle_category("space-supercomputing-1") +norecycle_category("space-supercomputing-2") +norecycle_category("space-supercomputing-3") +norecycle_category("space-antimatter-engine") +norecycle_category("space-rocket-engine") diff --git a/space-exploration_0.5.80/space-exploration/prototypes/resource_autoplace_overrides.lua b/space-exploration_0.5.80/space-exploration/prototypes/resource_autoplace_overrides.lua new file mode 100644 index 0000000..0305565 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/prototypes/resource_autoplace_overrides.lua @@ -0,0 +1,476 @@ +local noise = require("noise") +local expression_to_ascii_math = require("noise.expression-to-ascii-math") +local tne = noise.to_noise_expression +local litexp = noise.literal_expression + +local function get_patch_metaset_patch_set_index(patch_metaset, patch_set_name) + if patch_metaset.patch_set_indexes[patch_set_name] == nil then + patch_metaset.patch_set_indexes[patch_set_name] = patch_metaset.next_patch_set_index + patch_metaset.next_patch_set_index = patch_metaset.next_patch_set_index + 1 + data.raw["noise-expression"][patch_metaset.count_expression_name].expression = tne(patch_metaset.next_patch_set_index) + end + return patch_metaset.patch_set_indexes[patch_set_name] +end + +local function new_patch_metaset(params) + data.raw["noise-expression"][params.count_expression_name] = + { + type = "noise-expression", + name = params.count_expression_name, + expression = tne(0) + } + + return + { + count_expression_name = params.count_expression_name, + next_patch_set_index = 0, + patch_set_indexes = {}, + get_patch_set_index = get_patch_metaset_patch_set_index + } +end + +-- This has to be global so that all calls into this library +-- use the same object and get unique patchset indexes. +-- It is not indended to be used directly from outside of this library. +if not resource_autoplace__patch_metasets then + resource_autoplace__patch_metasets = + { + regular = new_patch_metaset{ count_expression_name = "regular-resource-patch-set-count" }, + starting = new_patch_metaset{ count_expression_name = "starting-resource-patch-set-count" }, + } +end + +local regular_patch_metaset = resource_autoplace__patch_metasets.regular +local starting_patch_metaset = resource_autoplace__patch_metasets.starting + +-- Indicate that a patch set exists and optionally that it also needs a separate starting patch set. +-- Call this to initialize patch sets' indexes in a more deterministic order +-- (see demo-resources.lua for an example) before calling resource_autoplace_settings. +local function initialize_patch_set(patch_set_name, has_starting_area_placement) + regular_patch_metaset:get_patch_set_index(patch_set_name) + if has_starting_area_placement then + starting_patch_metaset:get_patch_set_index(patch_set_name) + end +end + +local pointillist_mode = false +local patch_blobbiness_enabled = true + +local function dump_expression(name, expr) + log(name..":\n"..tostring(expression_to_ascii_math(expr))) +end + +local onethird = tne(1)/3 -- Looks nicer in output than 0.333333 + +--- Creates and returns an AutoplaceSpecification that will generate spot-based ore patches. +-- Required parameters: +-- - name - name for the type, used as the default autoplace control name and patch set name +-- (each of which can be overridden separately) +-- - base_density - amount of stuff, on average, to be placed per tile +-- Optional parameters: +-- - patch_set_name - name of the patch set; patches sets of the same name and seed1 will overlap; default: name +-- - autoplace_control_name - name of the corresponding autoplace control; default: name +-- - random_probability - probability of placement at any given tile within a patch; default: 1 +-- - base_spots_per_km2 - number of patches per square kilometer near the starting area +-- - has_starting_area_placement - true|false|nil - yes, no, and there is no special starting area, respectively +-- - seed1 - random seed to use when generating patch positions; default: 100 +-- More obscure parameters can be read about in the inline comments. +local function resource_autoplace_settings(params) + + local function setting_scale(value) + --return value + --return value * value + return (value ^ 0.8) + end + + local name = params.name + local order = params.order or "d" + + local patch_set_name = params.patch_set_name or name + local autoplace_control_name = params.autoplace_control_name or name + + -- How much of this stuff (probability * richness) should occur per tile on average near the starting area? + local base_density = params.base_density + -- Random probability that this stuff is placed when probability is otherwise positive + -- This IS automatically compensated for by richness, so you don't need to adjust base_density + local random_probability = params.random_probability or 1 + local base_spots_per_km2 = params.base_spots_per_km2 or 2.5 + local random_spot_size_minimum = params.random_spot_size_minimum or 0.25 + local random_spot_size_maximum = params.random_spot_size_maximum or 2.00 + -- Amplitude of spot 'blob noise' relative to typical spot amplitude + local regular_blob_amplitude_multiplier = 1/8 * (params.regular_blob_amplitude_multiplier or 1) + local starting_blob_amplitude_multiplier = 1/8 * (params.starting_blob_amplitude_multiplier or 1) + + local control_setting = noise.get_control_setting(autoplace_control_name) + local frequency_multiplier = setting_scale(control_setting.frequency_multiplier) + local size_multiplier = setting_scale(control_setting.size_multiplier) + local size_boost = 4 + local density_multiplier = frequency_multiplier * size_multiplier + + local planet_control_setting = noise.get_control_setting("planet-size") + + -- The following are more dangerous, since they'll throw total quantities off if you don't compensate for them: + + -- additional_richness will be added to richness but does not affect probability of anything being placed at all. + -- This is NOT automatically compensated for, because that would be difficult to calculate. + -- The caller will need to compensate for any additional_richness by adjusting base_density. + local additional_richness = params.additional_richness or 0 + -- richness will be clamped to minimum_richness at the low end anywhere the stuff is otherwise placed + -- Not automatically compensated for. + local minimum_richness = params.minimum_richness or 0 + -- 'post' as in multiplied after everything else is calculated, including additional_richness + -- and minimum_richness. + local richness_post_multiplier = (params.richness_post_multiplier or 1) * setting_scale(control_setting.richness_multiplier) + + local seed1 = params.seed1 or 100 + + -- rq_factor is the ratio of the radius of a patch to the cube root of its quantity, + -- i.e. radius of a quantity=1 patch; higher values = fatter, shallower patches + -- Watch out! Shallower patches are more heavily thrown off by noise, + -- so adjust noise amplitude accordingly! + -- (this is automatically done -- se *_blob_amplitude, below) + local regular_rq_factor = (params.regular_rq_factor_multiplier or 1) * 1 / 10 + local starting_rq_factor = (params.starting_rq_factor_multiplier or 1) * 1 / 8 + + local elevation = noise.var("elevation") + + + -- vanilla placement rules don't work well for most planets. + -- they don't work at all well for asteroid fields. + -- remove resource size and richness change over distance for space zones + -- space zones are defined by ____? + local distance_affects_resources = tne(0) -- 0 to 1, 1 is where distance is a full factor + local distance_affects_resources = noise.clamp(planet_control_setting.richness_multiplier, 0, 1) -- 0 to 1, 1 is where distance is a full factor + -- note: Set planet-size richness to 0 for all non-homeworld zones. + + --local distance = noise.var("distance") + local base_distance = 5000 -- (effective assumed if real distance is not used) + local distance = noise.clamp(base_distance + distance_affects_resources * (noise.var("distance") - base_distance), 0, base_distance) -- treat as permenant 5000 + + -- > I just realized because of the new rule of "keep ores outside the + -- > starting area", the starting area size setting should not affect ore + -- > placement. The ore's starting area should be it's own fixed value + -- > that ignores the setting. + -- Twinsen, August 2018 + local starting_resource_placement_radius = 140 --120 + local regular_modulation + -- has_starting_area_placement values: + -- - true - place in starting area and outside starting area independently + -- - false - place outside starting area but not inside + -- - nil - place everywhere as if there is no starting area + + local regular_patch_fade_in_distance = 320--300 + local regular_ns_multiplier_at + if params.has_starting_area_placement == nil then + regular_ns_multiplier_at = function(dist) return 1 end + else + regular_ns_multiplier_at = function(dist) + return noise.clamp((dist - starting_resource_placement_radius) / regular_patch_fade_in_distance, 0, 1) + end + end + + -- local double_density_distance = 1300 -- distance at which patches have twice as much stuff in them + local double_density_distance = base_distance -- distance at which patches have twice as much stuff in them + + -- Maximum distance at which blob amplitude should keep increasing along with spot height + local regular_blob_amplitude_maximum_distance = double_density_distance + local spot_enlargement_maximum_distance = regular_blob_amplitude_maximum_distance + + -- Get distance for purposes of calculating regular ore density, patch size, and richness + local function size_effective_distance_at(dist) + if params.has_starting_area_placement == nil then + return dist + else + -- If there's a starting area measure from the edge of the fade-in radius + return dist - regular_patch_fade_in_distance + end + end + + local function regular_density_at(dist) + -- Don't increase density beyond spot_enlargement_maximum_distance + -- because large spots get unwieldy. We'll increase richness after that, instead. + effective_distance = noise.clamp(size_effective_distance_at(dist), 0, spot_enlargement_maximum_distance) + local distance_density_multiplier = 1 + effective_distance / double_density_distance + return base_density * density_multiplier * distance_density_multiplier * regular_ns_multiplier_at(dist) + end + local spots_per_km2_near_start = base_spots_per_km2 * frequency_multiplier + local candidate_spot_count = params.candidate_spot_count or 21 + + if pointillist_mode then + -- Split ore into lots and lots and lots of little patches + -- so that we can get a better idea of the underlying distribution + candidate_spot_count = 10000 -- hardcoded max so we don't melt the player's CPU + spots_per_km2_near_start = candidate_spot_count + end + + -- Regular spot quantity without randomization added + local function regular_spot_quantity_base_at(dist) + return regular_density_at(dist) * 1000000 / spots_per_km2_near_start + end + -- Regular spot quantity averaging over randomization + local function regular_spot_quantity_typical_at(dist) + local average_random_size_multiplier = (random_spot_size_minimum + random_spot_size_maximum) / 2 + return average_random_size_multiplier * regular_spot_quantity_base_at(dist) + end + local function regular_spot_height_typical_at(dist) + return regular_spot_quantity_typical_at(dist)^(onethird) / ((math.pi/3) * regular_rq_factor^2) + end + + local regular_density_expression = regular_density_at(distance) + local regular_spot_quantity_expression = noise.random_between(random_spot_size_minimum, random_spot_size_maximum) * regular_spot_quantity_base_at(distance) + local regular_spot_radius_expression = noise.min(32, regular_rq_factor * regular_spot_quantity_expression ^ (onethird)) + + if params.has_starting_area_placement ~= nil then + regular_blob_amplitude_maximum_distance = regular_blob_amplitude_maximum_distance + regular_patch_fade_in_distance + end + local function regular_blob_amplitude_at(dist) + return regular_blob_amplitude_multiplier * noise.min( + regular_spot_height_typical_at(regular_blob_amplitude_maximum_distance), + regular_spot_height_typical_at(dist) + ) + end + local regular_blob_amplitude_maximum = regular_blob_amplitude_at(regular_blob_amplitude_maximum_distance) + local regular_blob_amplitude_expression = regular_blob_amplitude_at(distance) + + -- Values for starting spots. + -- Simpler calculations than for regular spots because they are only placed + -- in one place and therefore there are fewer variables! + + -- reduce the influence of the frequency slider over the amount of ore in the starting area. + -- note that starting_spot_count is still set to frequency_multiplier below, so we still split the ore to a fairly high amount of patches. + local starting_frequency_multiplier = ((frequency_multiplier - 1) * 0.25) + 1 + --local starting_amount = 40000 * base_density * starting_frequency_multiplier * size_multiplier + local starting_amount = 100000 * base_density * starting_frequency_multiplier * size_multiplier + --local starting_amount = 1000000 -- nicer for testing - just check that all spots have ~1.0M + local starting_area_sharpness = tne(math.huge) + local starting_resource_placement_area = math.pi*starting_resource_placement_radius*starting_resource_placement_radius + local starting_density = starting_amount / starting_resource_placement_area + -- Goes < 0 outside of starting area and at negative elevations + local starting_modulation = + noise.clamp((starting_resource_placement_radius - distance) * starting_area_sharpness, 0, 1) + local starting_feasibility = + noise.clamp((elevation - 1) / 10, 0, 1) * starting_modulation + -- Allow resources at lower elevations for starting + + -- Set minimum_favorability_for_full_placement to lower numbers to decrease the likelihood that the starting patches get split. + -- Quantity will automatically be clamped by the spot noise function + -- and radius will be automatically adjusted, too, + -- so it's fine for the spot quantity to be more than the region target quantity. + local minimum_favorability_for_full_placement = 1/4--1/2 + local starting_spot_count = frequency_multiplier + local starting_area_spot_quantity = starting_amount / minimum_favorability_for_full_placement / starting_spot_count + local starting_spot_height = starting_area_spot_quantity ^ (1/3) / ((math.pi/3) * starting_rq_factor^2) + local starting_blob_amplitude = starting_blob_amplitude_multiplier * starting_spot_height + + -- since starting and regular spots get maxed together, + -- the basement value should be the lower of the two. + -- This value needs to be low enough that any noise added to it is still below zero + -- so that we don't get bits of ores sticking out between spot noise spots. + -- It also needs to be constant because that's how the spot noise op works. + -- Simply using -infinity would work, but calculating it based on blob amplitude: + -- a) looks nicer if you render the value on a map preview + -- b) acts as a check on our blob_amplitude calculations + local basement_value = noise.min(-6 * regular_blob_amplitude_maximum, + -6 * starting_blob_amplitude) + + local regular_spots = tne{ + type = "function-application", + function_name = "spot-noise", + arguments = + { + x = noise.var("x"), + y = noise.var("y"), + seed0 = noise.var("map_seed"), + seed1 = tne(seed1), + region_size = tne(1024), + candidate_spot_count = tne(candidate_spot_count), + suggested_minimum_candidate_point_spacing = tne(128),--tne(45.254833995939045), -- Magic number to match 0.17.50 spot placement, when candidate_point_count was always 128 + skip_span = noise.var("regular-resource-patch-set-count"), + skip_offset = tne(regular_patch_metaset:get_patch_set_index(patch_set_name)), + density_expression = litexp(regular_density_expression), -- low-frequency noise evaluate for an entire region + spot_quantity_expression = litexp(regular_spot_quantity_expression), -- used to figure out where spots go + hard_region_target_quantity = tne(false), -- it's fine for large spots to push region quantity past the target + spot_radius_expression = litexp(size_boost + regular_spot_radius_expression), + spot_favorability_expression = litexp(1), + basement_value = basement_value, + maximum_spot_basement_radius = tne(128) + } + } + + -- Don't want to distrurb starting_patch_metaset unless we actually need to. + local starting_patch_set_index = 0 + if params.has_starting_area_placement == true then + starting_patch_set_index = tne(starting_patch_metaset:get_patch_set_index(patch_set_name)) + end + + -- If you change starting area region size, + -- also change the default starting area position in MapGenSettings + local starting_spots = tne{ + type = "function-application", + function_name = "spot-noise", + arguments = + { + x = noise.var("x"), + y = noise.var("y"), + seed0 = noise.var("map_seed"), + seed1 = tne(seed1+1), + skip_span = noise.var("starting-resource-patch-set-count"), + skip_offset = starting_patch_set_index, + region_size = tne(starting_resource_placement_radius * 2), + candidate_spot_count = tne(64),--tne(32), + suggested_minimum_candidate_point_spacing = tne(128), -- unset in vanilla + minimum_candidate_point_spacing = tne(32), + density_expression = litexp(starting_density * starting_modulation), + spot_quantity_expression = litexp(starting_area_spot_quantity), + hard_region_target_quantity = tne(true), -- Since there's [usually] only one spot, clamp its quantity to the target quantity + spot_radius_expression = litexp(size_boost/2 + starting_rq_factor * starting_area_spot_quantity ^ (onethird)), + spot_favorability_expression = litexp(1), --[[litexp( -- this seems to make the resources cluster a lot + starting_feasibility * 2 - + 1 * distance / starting_resource_placement_radius + + noise.random(0.5) + ),]] + basement_value = basement_value, + maximum_spot_basement_radius = tne(64) -- does making this huge make a difference? + } + } + + if pointillist_mode or not patch_blobbiness_enabled then + regular_blob_amplitude_expression = 0 + end + if not patch_blobbiness_enabled then + starting_blob_amplitude = 0 + end + + -- Add some blobbiness + local blobs0 = tne{ + type = "function-application", + function_name = "factorio-basis-noise", + arguments = + { + x = noise.var("x"), + y = noise.var("y"), + seed0 = noise.var("map_seed"), + seed1 = tne(seed1), + input_scale = tne(1/8), + output_scale = tne(1) + } + } + tne{ + type = "function-application", + function_name = "factorio-basis-noise", + arguments = + { + x = noise.var("x"), + y = noise.var("y"), + seed0 = noise.var("map_seed"), + seed1 = tne(seed1), + input_scale = tne(1/24), + output_scale = tne(1) + } + } + local blobs0f = blobs0 - 1/4 + + local blobs1 = blobs0 + tne{ + type = "function-application", + function_name = "factorio-basis-noise", + arguments = + { + x = noise.var("x"), + y = noise.var("y"), + seed0 = noise.var("map_seed"), + seed1 = tne(seed1), + input_scale = tne(1/64), + output_scale = tne(1.5) + } + } + local blobs1f = blobs1 - onethird -- attempt to remove positive bias + + local vein = 1 - 10 * noise.absolute_value(noise.function_application("factorio-multioctave-noise", + { + x = noise.var("x"), + y = noise.var("y"), + persistence = 0.5, + seed0 = noise.var("map_seed"), + seed1 = tne(seed1), + input_scale = noise.fraction(1, 4), -- smaller 2nd value means smaller frequency + output_scale = 1, + octaves = 6, + } + )) + local start_vein = 1 - 10 * noise.absolute_value(noise.function_application("factorio-multioctave-noise", + { + x = noise.var("x"), + y = noise.var("y"), + persistence = 0.5, + seed0 = noise.var("map_seed"), + seed1 = tne(seed1), + input_scale = noise.fraction(1, 1), -- smaller 2nd value means smaller frequency + output_scale = 1, + octaves = 6, + } + )) + + --local regular_patches = regular_spots + ( 1 * blobs1f + 1.1 * vein * random_probability) * regular_blob_amplitude_expression + local regular_patches = regular_spots + ( 1 * blobs1f + 0.8 * vein * random_probability) * regular_blob_amplitude_expression + local starting_patches = starting_spots + ( 0.4 * blobs0f + 0.2 * start_vein * random_probability) * starting_blob_amplitude + + local all_patches + if params.has_starting_area_placement == true then + all_patches = noise.max(starting_patches, regular_patches) + elseif params.has_starting_area_placement == false then + all_patches = regular_patches + else -- nil or unspecified means just make it uniform everywhere + all_patches = regular_patches + end + + local richness_expression = noise.delimit_procedure(all_patches) -- Re-use all that stuff between richness/probability! + local probability_expression = noise.clamp(richness_expression, 0, 1) + if random_probability < 1 then + richness_expression = richness_expression / random_probability + probability_expression = probability_expression * tne{ + type = "function-application", + function_name = "random-penalty", + arguments = + { + source = tne(1), + x = noise.var("x"), + y = noise.var("y"), + amplitude = tne(1/random_probability) -- put random_probability points with probability < 0 + } + } + end + if additional_richness > 0 then + richness_expression = richness_expression + additional_richness + end + if minimum_richness > 0 then + richness_expression = noise.max(richness_expression, minimum_richness) + end + + -- sed = size-effective distance + local function post_semd_richness_distance_multiplier_at(sed) + local ddd = double_density_distance + local semd = spot_enlargement_maximum_distance + -- density = pre-richness-mutliplied density * richness_distance_multiplier. + -- Since pre-richness-multiplied density plateaus at semd, + -- richness needs to increase at that point, and by this much: + return (ddd + sed)/(ddd + semd) + end + local richness_distance_multiplier = noise.max(1, post_semd_richness_distance_multiplier_at(size_effective_distance_at(distance))) + + richness_expression = richness_expression * richness_distance_multiplier * richness_post_multiplier + + local ret = + { + order = order, + control = autoplace_control_name, + probability_expression = probability_expression, + richness_expression = richness_expression + } + + return ret +end + +return +{ + initialize_patch_set = initialize_patch_set, + resource_autoplace_settings = resource_autoplace_settings +} diff --git a/space-exploration_0.5.80/space-exploration/scripts/ancient.lua b/space-exploration_0.5.80/space-exploration/scripts/ancient.lua new file mode 100644 index 0000000..3c73aa0 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/ancient.lua @@ -0,0 +1,2487 @@ +local Ancient = {} + +--[[ +IMPORTANT + +The pyramids and anomaly gate puzzle in-game is supposed to be the crowning achievement of completing Space Exploration. +Please don't try to reverse engineer this code to figure out a solution to the puzzle, it will spoil it for you and for others. + +]]-- + +-- STATIC +if true then + -- rectangles + Ancient.name_tech_coordinates = mod_prefix .. "long-range-star-mapping" + Ancient.name_tech_anchor = mod_prefix .. "dimensional-anchor" + Ancient.name_gate_tryplace = mod_prefix .. "gate-tryplace" + Ancient.name_gate_blocker = mod_prefix .. "gate-blocker" + Ancient.name_gate_blocker_void = mod_prefix .. "gate-blocker-void" + Ancient.name_gate_void_sprite = mod_prefix.."gate-void-sprite" + Ancient.name_gate_glyph_prefix = mod_prefix.."glyph-a-energy-" + Ancient.name_gate_glyph_locked_suffix = "-locked" + Ancient.name_gate_light = mod_prefix .. "gate-light" + Ancient.name_gate_light_middle = mod_prefix .. "gate-light-middle" + Ancient.name_gate_lock_combinator = mod_prefix .. "gate-lock-combinator" + Ancient.name_gate_lock_switch = mod_prefix .. "gate-lock-switch" + Ancient.name_gate_fluid_input = mod_prefix .. "gate-tank-input" + Ancient.name_gate_fluid_output = mod_prefix .. "gate-tank-output" + Ancient.name_button_player_track_glyphs = "player_track_glyphs" + + Ancient.name_gate_cloud = mod_prefix .. "gate-cloud" + Ancient.name_gate_spec_white = mod_prefix .. "gate-spec-white" + Ancient.name_gate_spec_cyan = mod_prefix .. "gate-spec-cyan" + + Ancient.name_sound_gate_turning = mod_prefix .. "sound-continous-gate-turning" + Ancient.name_sound_gate_power_on = mod_prefix .. "sound-continous-gate-power-on" + Ancient.name_sound_gate_power_up = mod_prefix .. "sound-gate-power-up" + Ancient.name_sound_gate_power_down = mod_prefix .. "sound-gate-power-down" + Ancient.name_sound_gate_button = mod_prefix .. "sound-gate-button" + Ancient.name_sound_gate_lock = mod_prefix .. "sound-gate-lock" + + Ancient.timer_power_up_complete = 395 -- based on audio + Ancient.timer_power_up_ghyph_light_interval = 3 + Ancient.timer_power_down_complete = 283 + Ancient.timer_shunt_step = 0.03 + Ancient.timer_shunt_glyph_lock = 1.09 + Ancient.timer_shunt_complete = 3.5 + + Ancient.unit_power_draw = 10000000000/60 + + Ancient.gate_temperature_resting = 25 + Ancient.gate_temperature_partial = -200 -- required for glyph lock + Ancient.gate_temperature_required = -250 -- required for gate activation + Ancient.gate_temperature_zero = -273.15 + Ancient.gate_temperature_per_coolant_max = 1 + Ancient.gate_temperature_per_coolant_min = 0.001 -- lerp between resting and zero + Ancient.gate_temperature_return_per_tick = 0.00001 -- multiplied by -temp + Ancient.gate_temperature_while_powered = 0.001 + Ancient.gate_temperature_while_turning = 0.01 + Ancient.gate_temperature_while_locked = 0.1 + Ancient.gate_temperature_while_portal = 1 + + Ancient.gate_cloud_tint_1 = {r = 0.2, g = 0.6, b = 1} + Ancient.gate_cloud_tint_2 = {r = 0.2, g = 0.2, b = 1} + + Ancient.vault_entrance_structures = { -- also used in zone deletion + mod_prefix .. "pyramid-a", + mod_prefix .. "pyramid-b", + mod_prefix .. "pyramid-c", + } + + Ancient.gate_default_position = {x =0, y = -128} + Ancient.galaxy_ship_default_position = {x = 100, y = -400} + + -- rows + Ancient.gate_blockers_phase_1 = { + [-26] = {{-8,9}}, + [-25] = {{-15,5}}, + [-24] = {{-16,5}}, + [-23] = {{-18,5}}, + [-22] = {{-20,5}}, + [-21] = {{-22,-9}}, + [-20] = {{-24,-13}, {23,25}}, + [-19] = {{-25,-16}}, + [-18] = {{-27,-18}}, + [-17] = {{-28,-20}, {21,23}}, + [-16] = {{-29,-21}, {22,23}}, + [-15] = {{-30,-22}}, + [-14] = {{-31,-24}}, + [-13] = {{-32,-25}}, + [-12] = {{-34,-26}}, + [-11] = {{-34,-27}}, + [-10] = {{-34,-27}}, + [-9] = {{-34,-28}}, + [-8] = {{-34,-28}, {29,31}}, + [-7] = {{-34,-29}, {30,31}}, + [-6] = {{-35,-29}, {30,31}, {35,36}}, + [-5] = {{-35,-30}, {35,36}}, + [-4] = {{-35,-30}}, + [-3] = {{-35,-30}}, + [-2] = {{-35,-30}}, + [-1] = {{-35,-30}}, + [0] = {{-35,-30}}, + [1] = {{-35,-30}}, + [2] = {{-35,-30}}, + [3] = {{-35,-30}, {35,36}}, + [4] = {{-35,-30}, {35,36}}, + [5] = {{-34,-29}}, + [6] = {{-34,-29}}, + [7] = {{-34,-28}}, + [8] = {{-34,-28}}, + [9] = {{-34,-27}}, + [10] = {{-34,-26}, {27,28}}, + [11] = {{-32,-28}, {26,28}}, + [12] = {{-31,-28}, {25,28}}, + [13] = {{-30,-28}, {29,31}}, + [14] = {{-29,-28}, {29,30}}, + [15] = {{21,23}}, + [16] = {{-20,-19}}, + [17] = {{-25,-23}, {18,19}, {25,26}}, + [18] = {{-24,-23}}, + [20] = {{8,9}}, + [24] = {{-8,-7}}, + [25] = {{-5,6}}, + [26] = {{-4,5}}, + } + Ancient.gate_blockers_void_phase_1 = { + [-21] = {{-9,5}}, + [-20] = {{-13,5}}, + [-19] = {{-16,5}}, + [-18] = {{-18,5}}, + [-17] = {{-20,21}}, + [-16] = {{-21,22}}, + [-15] = {{-22,23}}, + [-14] = {{-24,23}}, + [-13] = {{-25,23}}, + [-12] = {{-26,23}}, + [-11] = {{-27,23}}, + [-10] = {{-27,23}}, + [-9] = {{-28,23}}, + [-8] = {{-28,29}}, + [-7] = {{-29,30}}, + [-6] = {{-29,30}}, + [-5] = {{-30,31}}, + [-4] = {{-30,31}}, + [-3] = {{-30,31}}, + [-2] = {{-30,31}}, + [-1] = {{-30,31}}, + [0] = {{-30,31}}, + [1] = {{-30,31}}, + [2] = {{-30,31}}, + [3] = {{-30,28}}, + [4] = {{-30,28}}, + [5] = {{-29,28}}, + [6] = {{-29,28}}, + [7] = {{-28,28}}, + [8] = {{-28,28}}, + [9] = {{-27,28}}, + [10] = {{-26,27}}, + [11] = {{-20,26}}, + [12] = {{-20,25}}, + [13] = {{-20,23}}, + [14] = {{-20,23}}, + [15] = {{-20,21}}, + [16] = {{-19,19}}, + [17] = {{-7,18}}, + [18] = {{-7,9}}, + [19] = {{-7,9}}, + [20] = {{-7,8}}, + } + Ancient.gate_blockers_phase_2 = { + [-25] = {{5,16}}, + [-24] = {{5,17}}, + [-23] = {{5,19}}, + [-22] = {{5,21}}, + [-21] = {{10,23}}, + [-20] = {{14,23}}, + [-19] = {{17,26}}, + [-18] = {{19,28}}, + [-17] = {{23,29}}, + [-16] = {{23,30}}, + [-15] = {{23,31}}, + [-14] = {{25,32}}, + [-13] = {{26,33}}, + [-12] = {{27,35}}, + [-11] = {{28,35}}, + [-10] = {{28,35}}, + [-9] = {{29,35}}, + [-8] = {{31,35}}, + [-7] = {{31,35}}, + [-6] = {{31,35}}, + [-5] = {{31,35}}, + [-4] = {{31,36}}, + [-3] = {{31,36}}, + [-2] = {{31,36}}, + [-1] = {{31,36}}, + [0] = {{31,36}}, + [1] = {{31,36}}, + [2] = {{31,36}}, + [3] = {{31,35}}, + [4] = {{31,35}}, + [5] = {{30,35}}, + [6] = {{30,35}}, + [7] = {{29,35}}, + [8] = {{29,35}}, + [9] = {{28,35}}, + [10] = {{28,35}}, + [11] = {{-28,-25}, {28,33}}, + [12] = {{-28,-24}, {28,32}}, + [13] = {{-28,-23}, {24,29}}, + [14] = {{-28,-22}, {23,29}}, + [15] = {{-28,-20}, {23,29}}, + [16] = {{-27,-20}, {20,28}}, + [17] = {{-23,-17}, {19,25}}, + [18] = {{-23,-15}, {16,25}}, + [19] = {{-22,-10}, {11,23}}, + [20] = {{-20,-7}, {9,21}}, + [21] = {{-18,19}}, + [22] = {{-16,17}}, + [23] = {{-15,16}}, + [24] = {{-7,9}}, + } + Ancient.gate_blockers_void_phase_2 = { + [-21] = {{5,10}}, + [-20] = {{5,14}}, + [-19] = {{5,17}}, + [-18] = {{5,19}}, + [-14] = {{23,25}}, + [-13] = {{23,26}}, + [-12] = {{23,27}}, + [-11] = {{23,28}}, + [-10] = {{23,28}}, + [-9] = {{23,29}}, + [3] = {{28,31}}, + [4] = {{28,31}}, + [5] = {{28,30}}, + [6] = {{28,30}}, + [7] = {{28,29}}, + [8] = {{28,29}}, + [11] = {{-25,-20}}, + [12] = {{-24,-20}}, + [13] = {{-23,-20}, {23,24}}, + [14] = {{-22,-20}}, + [16] = {{19,20}}, + [17] = {{-17,-7}}, + [18] = {{-15,-7}, {9,16}}, + [19] = {{-10,-7}, {9,11}}, + } + Ancient.gate_fragments = { + [mod_prefix .. "gate-fragment-1"] = {placeable = true, position = {x = 28, y = -10}, required_position = {14,23}}, + [mod_prefix .. "gate-fragment-2"] = {placeable = true, position = {x = 39, y = -3}, required_position = {1,22}}, + [mod_prefix .. "gate-fragment-3"] = {placeable = true, position = {x = 38, y = 9.5}, required_position = {-13,20.5}}, + [mod_prefix .. "gate-fragment-4"] = {placeable = true, position = {x = 41, y = 19}, required_position = {-24,14}}, + [mod_prefix .. "gate-fragment-5"] = {placeable = true, position = {x = 40, y = 28}, required_position = {24,18}}, + [mod_prefix .. "gate-fragment-6"] = {placeable = true, position = {x = 0, y = 24}, required_position = {21,17}}, + [mod_prefix .. "gate-fragment-7"] = {placeable = true, position = {x = -23, y = 15}, required_position = {26,15}}, + [mod_prefix .. "gate-fragment-8"] = {placeable = true, position = {x = 27.5, y = 26}, required_position = {31.5,8}}, + [mod_prefix .. "gate-fragment-9"] = {placeable = true, position = {x = 52.5, y = 28.5}, required_position = {33.5,0.5}}, + [mod_prefix .. "gate-fragment-10"] = {placeable = true, position = {x = 12, y = -19}, required_position = {32,-5}}, + [mod_prefix .. "gate-fragment-11"] = {placeable = true, position = {x = 24, y = -18}, required_position = {34,-7}}, + [mod_prefix .. "gate-fragment-12"] = {placeable = true, position = {x = 16, y = 24.5}, required_position = {30,-12.5}}, + [mod_prefix .. "gate-fragment-13"] = {placeable = true, position = {x = -17, y = 21}, required_position = {14,-23}}, + [mod_prefix .. "gate-fragment-14-a"] = {placeable = false, position = {x = -28, y = -4}}, + [mod_prefix .. "gate-fragment-14-b"] = {placeable = false, position = {x = -8.5, y = -24}}, + } + Ancient.gate_parts_main = { + [mod_prefix .. "gate-main-e"] = {32,0}, + [mod_prefix .. "gate-main-en"] = {28.5,-15.5}, + [mod_prefix .. "gate-main-es"] = {28.5,15}, + [mod_prefix .. "gate-main-n"] = {0.5,-23}, + [mod_prefix .. "gate-main-ne"] = {17.5,-20.5}, + [mod_prefix .. "gate-main-nw"] = {-16.5,-20.5}, + [mod_prefix .. "gate-main-s"] = {0.5,22.5}, + [mod_prefix .. "gate-main-se"] = {16.5,19.5}, + [mod_prefix .. "gate-main-sw"] = {-15.5,19.5}, + [mod_prefix .. "gate-main-w"] = {-31,0}, + [mod_prefix .. "gate-main-wn"] = {-27.5,-15.5}, + [mod_prefix .. "gate-main-ws"] = {-27.5,15}, + } + Ancient.gate_parts_main_shadow = { + [mod_prefix .. "gate-main-e-shadow"] = {35.5,0}, + [mod_prefix .. "gate-main-en-shadow"] = {30.0,-14.5}, + [mod_prefix .. "gate-main-es-shadow"] = {28.5,15}, + [mod_prefix .. "gate-main-ne-shadow"] = {16.0,-20.5}, + [mod_prefix .. "gate-main-s-shadow"] = {0.5,24.0}, + [mod_prefix .. "gate-main-se-shadow"] = {16.5,21.5}, + [mod_prefix .. "gate-main-sw-shadow"] = {-15.5,21.5}, + [mod_prefix .. "gate-main-w-shadow"] = {-34,0}, + [mod_prefix .. "gate-main-ws-shadow"] = {-27.5,15}, + } + Ancient.gate_parts_underlay = { + [mod_prefix .. "gate-underlay-e"] = {32.5,-1}, + [mod_prefix .. "gate-underlay-en"] = {28,-15}, + [mod_prefix .. "gate-underlay-es"] = {27.5,12.5}, + [mod_prefix .. "gate-underlay-n"] = {0.5,-23.5}, + [mod_prefix .. "gate-underlay-ne"] = {19,-20}, + [mod_prefix .. "gate-underlay-nw"] = {-18,-20}, + [mod_prefix .. "gate-underlay-s"] = {0.5,22}, + [mod_prefix .. "gate-underlay-se"] = {19.5,19}, + [mod_prefix .. "gate-underlay-sw"] = {-18.5,19}, + [mod_prefix .. "gate-underlay-w"] = {-31.5,-1}, + [mod_prefix .. "gate-underlay-wn"] = {-27,-15}, + [mod_prefix .. "gate-underlay-ws"] = {-26.5,12.5}, + } + Ancient.gate_parts_rails = { + [mod_prefix .. "gate-rails-1"] = {-12.5,21}, + [mod_prefix .. "gate-rails-2"] = {-30.5,8}, + [mod_prefix .. "gate-rails-3"] = {-30.5,-10}, + [mod_prefix .. "gate-rails-4"] = {-12.5,-23}, + [mod_prefix .. "gate-rails-5"] = {13.5,-23}, + [mod_prefix .. "gate-rails-6"] = {31.5,-10}, + [mod_prefix .. "gate-rails-7"] = {31.5,8}, + [mod_prefix .. "gate-rails-8"] = {13.5,21}, + } + Ancient.gate_parts_shunts = { + [1] = {name = mod_prefix .. "gate-shunt-1", position = {-13,21.5}, lock_offset = {0.45,-0.8}}, + [2] = {name = mod_prefix .. "gate-shunt-2", position = {-31,8.5}, lock_offset = {1.1,-0.4}}, + [3] = {name = mod_prefix .. "gate-shunt-3", position = {-31,-10.5}, lock_offset = {1.1,0.4}}, + [4] = {name = mod_prefix .. "gate-shunt-4", position = {-13,-23.5}, lock_offset = {0.45,0.8}}, + [5] = {name = mod_prefix .. "gate-shunt-5", position = {14,-23.5}, lock_offset = {-0.45,0.8}}, + [6] = {name = mod_prefix .. "gate-shunt-6", position = {32,-10.5}, lock_offset = {-1.1,0.4}}, + [7] = {name = mod_prefix .. "gate-shunt-7", position = {32,8.5}, lock_offset = {-1.1,-0.4}}, + [8] = {name = mod_prefix .. "gate-shunt-8", position = {14,21.5}, lock_offset = {-0.45,-0.8}}, + } + Ancient.gate_parts_addons = { + [mod_prefix .. "gate-addon-1"] = {-13,22}, + [mod_prefix .. "gate-addon-2"] = {-32,9}, + [mod_prefix .. "gate-addon-3"] = {-32,-10}, + [mod_prefix .. "gate-addon-4"] = {-13,-23}, + [mod_prefix .. "gate-addon-5"] = {14,-23}, + [mod_prefix .. "gate-addon-6"] = {33,-10}, + [mod_prefix .. "gate-addon-7"] = {33,9}, + [mod_prefix .. "gate-addon-8"] = {14,22}, + } + Ancient.gate_parts_lock_combinators = { + [1] = {direction = defines.direction.south, position = {-13.062, 23.543}}, + [2] = {direction = defines.direction.west, position = {-33.644, 8.933}}, + [3] = {direction = defines.direction.west, position = {-33.625, -9.476}}, + [4] = {direction = defines.direction.north, position = {-12.968, -24.746}}, + [5] = {direction = defines.direction.north, position = {13.675, -24.753}}, + [6] = {direction = defines.direction.east, position = {34.468, -10.558}}, + [7] = {direction = defines.direction.east, position = {34.582, 8.433}}, + [8] = {direction = defines.direction.south, position = {13.96, 23.519}}, + } + Ancient.gate_parts_lock_fluid_inputs = { + [1] = {direction = defines.direction.south, position = {-14.5, 23.5}}, + [2] = {direction = defines.direction.west, position = {-33.5, 7.5}}, + [3] = {direction = defines.direction.west, position = {-33.5, -11.5}}, + [4] = {direction = defines.direction.north, position = {-11.5, -24.5}}, + [5] = {direction = defines.direction.north, position = {15.5, -24.5}}, + [6] = {direction = defines.direction.east, position = {34.5, -8.5}}, + [7] = {direction = defines.direction.east, position = {34.5, 10.5}}, + [8] = {direction = defines.direction.south, position = {12.5, 23.5}}, + } + Ancient.gate_parts_lock_fluid_outputs = { + [1] = {direction = defines.direction.south, position = {-11.5, 23.5}}, + [2] = {direction = defines.direction.west, position = {-33.5, 10.5}}, + [3] = {direction = defines.direction.west, position = {-33.5, -8.5}}, + [4] = {direction = defines.direction.north, position = {-14.5, -24.5}}, + [5] = {direction = defines.direction.north, position = {12.5, -24.5}}, + [6] = {direction = defines.direction.east, position = {34.5, -11.5}}, + [7] = {direction = defines.direction.east, position = {34.5, 7.5}}, + [8] = {direction = defines.direction.south, position = {15.5, 23.5}}, + } + Ancient.gate_parts_platform = { + name = mod_prefix .. "gate-platform", + name_scaffold = mod_prefix .. "gate-platform-scaffold", + position = {0.5,25}, + energy_interface = { + name = mod_prefix .. "gate-energy-interface", + position = {0.5,25} + }, + buttons = { + name_switch = mod_prefix .. "gate-platform-button-switch", + left = {name = mod_prefix .. "gate-platform-button-left", position = {2.5234,26.04}, switch_position = {2.5234,26.04}}, + middle = {name = mod_prefix .. "gate-platform-button-middle", position = {3.37,26.04}, switch_position = {3.37,26.04}}, + right = {name = mod_prefix .. "gate-platform-button-right", position = {4.19,26.04}, switch_position = {4.19,26.04}}, + }, + indicators = { + names = { + [1] = mod_prefix .. "gate-platform-indicator-red", + [2] = mod_prefix .. "gate-platform-indicator-yellow", + [3] = mod_prefix .. "gate-platform-indicator-green", + }, + x_start = -2.789, + x_spacing = 7/32, + anchor_y = 24.859, + temperature_y = 25.421, + lock_y = 25.984, + }, + combinator = { + name = mod_prefix .. "gate-platform-combinator", + position = {4.55, 26.2} + } + } + Ancient.gate_sound_positions = { + [1] = {-13,21.5}, + [2] = {-31,8.5}, + [3] = {-31,-10.5}, + [4] = {-13,-23.5}, + [5] = {14,-23.5}, + [6] = {32,-10.5}, + [7] = {32,8.5}, + [8] = {14,21.5}, + [9] = {0.5,25}, -- platform + } + + + Ancient.gate_glyphs_x = 0.5 + Ancient.gate_glyphs_x_mult = 33.4 + Ancient.gate_glyphs_y = -0.9 + Ancient.gate_glyphs_y_mult = 23.55 + + Ancient.gate_parts_locked_glyphs = { + [1] = {-11.75,19.91}, + [2] = {-29.09,7.64}, + [3] = {-29.09,-9.66}, + [4] = {-11.75,-21.91}, + [5] = {12.75,-21.91}, + [6] = {30.09,-9.66}, + [7] = {30.09,7.64}, + [8] = {12.75,19.91}, + } + + Ancient.gate_acceleration = 0.002 + Ancient.gate_decceleration = 0.02 + Ancient.gate_max_speed = 0.1 + + Ancient.pyramid_width = 9*2 + Ancient.pyramid_height = 7*2 + Ancient.cartouche_path_width = 4 + Ancient.cartouche_path_wall_width = 12 + Ancient.cartouche_path_start = 0 + Ancient.cartouche_path_wall_start = 30 + Ancient.cartouche_path_end = 40 + Ancient.cartouche_path_wall_end= 100 +end + +local crypto = 0 +local cryptl = 1 +local cryptf = 5 +local cryptc = 8 +local crypte = 11 +local crypti = 60 +local cryptr = cryptl+math.sqrt(cryptf) +local cryptg = (cryptr)/2 +local crypta = (cryptl+cryptr)/3 +local cryptb = (cryptr)/6 + +local cryptx = { +cryptl,cryptg,crypto,cryptl,-cryptg,crypto,-cryptl,cryptg,crypto,-cryptl, +-cryptg,crypto,cryptg,crypto,cryptl,cryptg,crypto,-cryptl,-cryptg,crypto, +cryptl,-cryptg,crypto,-cryptl,crypto,cryptl,cryptg,crypto,cryptl,-cryptg, +crypto,-cryptl,cryptg,crypto,-cryptl,-cryptg,cryptl,cryptl,cryptl,cryptl, +cryptl,-cryptl,cryptl,-cryptl,cryptl,cryptl,-cryptl,-cryptl,-cryptl,cryptl, +cryptl,-cryptl,cryptl,-cryptl,-cryptl,-cryptl,cryptl,-cryptl,-cryptl,-cryptl, +crypta,cryptb,crypto,crypta,-cryptb,crypto,-crypta,cryptb,crypto,-crypta, +-cryptb,crypto,cryptb,crypto,crypta,cryptb,crypto,-crypta,-cryptb,crypto, +crypta,-cryptb,crypto,-crypta,crypto,crypta,cryptb,crypto,crypta,-cryptb, +crypto,-crypta,cryptb,crypto,-crypta,-cryptb} + +local cryptv = { 1,29,30,1,30,14,1,14,21,1,21,13,1,13,29,2,32,31,2,31,15,2,15, +22,2,22,16,2,16,32,3,30,29,3,29,17,3,17,23,3,23,18,3,18,30,4,31,32,4,32,20,4,20, +24,4,24,19,4,19,31,5,21,22,5,22,15,5,15,25,5,25,13,5,13,21,6,22,21,6,21,14,6,14, +26,6,26,16,6,16,22,7,24,23,7,23,17,7,17,27,7,27,19,7,19,24,8,23,24,8,24,20,8,20, +28,8,28,18,8,18,23,9,25,27,9,27,17,9,17,29,9,29,13,9,13,25,10,28,26,10,26,14,10, +14,30,10,30,18,10,18,28,11,27,25,11,25,15,11,15,31,11,31,19,11,19,27,12,26,28, +12,28,20,12,20,32,12,32,16,12,16,26 } + +local cryptn = { 2,5,11,15,49,48,3,4,44,43,12,3,1,48,47,28,27,4,5,11,15,49,4,2, +27,26,21,25,5,1,48,47,28,5,3,25,24,45,44,1,2,27,26,21,1,4,44,43,12,11,2,3,25,24, +45,7,10,16,20,54,53,8,9,59,58,17,8,6,53,52,23,22,9,10,16,20,54,9,7,22,21,26,30, +10,6,53,52,23,10,8,30,29,60,59,6,7,22,21,26,6,9,59,58,17,16,7,8,30,29,60,12,15, +1,5,44,43,13,14,49,48,2,13,11,43,42,33,32,14,15,1,5,44,14,12,32,31,36,40,15,11, +43,42,33,15,13,40,39,50,49,11,12,32,31,36,11,14,49,48,2,1,12,13,40,39,50,17,20, +6,10,59,58,18,19,54,53,7,18,16,58,57,38,37,19,20,6,10,59,19,17,37,36,31,35,20 +,16,58,57,38,20,18,35,34,55,54,16,17,37,36,31,16,19,54,53,7,6,17,18,35,34,55,22, +25,26,30,9,8,23,24,4,3,27,23,21,8,7,53,52,24,25,26,30,9,24,22,52,51,41,45,25,21, +8,7,53,25,23,45,44,5,4,21,22,52,51,41,21,24,4,3,27,26,22,23,45,44,5,27,30,21,25, +4,3,28,29,9,8,22,28,26,3,2,48,47,29,30,21,25,4,29,27,47,46,56,60,30,26,3,2,48, +30,28,60,59,10,9,26,27,47,46,56,26,29,9,8,22,21,27,28,60,59,10,32,35,36,40,14, +13,33,34,19,18,37,33,31,13,12,43,42,34,35,36,40,14,34,32,42,41,51,55,35,31,13, +12,43,35,33,55,54,20,19,31,32,42,41,51,31,34,19,18,37,36,32,33,55,54,20,37,40, +31,35,19,18,38,39,14,13,32,38,36,18,17,58,57,39,40,31,35,19,39,37,57,56,46,50, +40,36,18,17,58,40,38,50,49,15,14,36,37,57,56,46,36,39,14,13,32,31,37,38,50,49, +15,42,45,51,55,34,33,43,44,24,23,52,43,41,33,32,13,12,44,45,51,55,34,44,42,12, +11,1,5,45,41,33,32,13,45,43,5,4,25,24,41,42,12,11,1,41,44,24,23,52,51,42,43,5,4, +25,47,50,56,60,29,28,48,49,39,38,57,48,46,28,27,3,2,49,50,56,60,29,49,47,2,1,11, +15,50,46,28,27,3,50,48,15,14,40,39,46,47,2,1,11,46,49,39,38,57,56,47,48,15,14, +40,52,55,41,45,24,23,53,54,34,33,42,53,51,23,22,8,7,54,55,41,45,24,54,52,7,6,16, +20,55,51,23,22,8,55,53,20,19,35,34,51,52,7,6,16,51,54,34,33,42,41,52,53,20,19, +35,57,60,46,50,39,38,58,59,29,28,47,58,56,38,37,18,17,59,60,46,50,39,59,57,17, +16,6,10,60,56,38,37,18,60,58,10,9,30,29,56,57,17,16,6,56,59,29,28,47,46,57,58, +10,9,30 } + +local crypts = {3,4,5,6,1,7,8,2,9,10,11} + +local cryptt = { 7,0,0,-1,-1,3,6,1,0,-4,3,6,6,0,0,1,4,2,6,0,1,3,-2,8,5,2,0,-9,6, +11,5,1,0,2,7,5,5,1,1,6,8,13,5,0,1,4,9,7,5,0,2,8,-5,15,4,3,0,-16,11,18,4,2,0,5, +12,10,4,2,1,11,13,20,4,1,1,7,14,12,4,1,2,13,15,22,4,0,2,9,16,14,4,0,3,15,-10,24, +3,4,0,-25,18,27,3,3,0,10,19,17,3,3,1,18,20,29,3,2,1,12,21,19,3,2,2,20,22,31,3,1, +2,14,23,21,3,1,3,22,24,33,3,0,3,16,25,23,3,0,4,24,-17,35,2,5,0,-36,27,38,2,4,0, +17,28,26,2,4,1,27,29,40,2,3,1,19,30,28,2,3,2,29,31,42,2,2,2,21,32,30,2,2,3,31, +33,44,2,1,3,23,34,32,2,1,4,33,35,46,2,0,4,25,36,34,2,0,5,35,-26,48,1,6,0,-49,38, +51,1,5,0,26,39,37,1,5,1,38,40,53,1,4,1,28,41,39,1,4,2,40,42,55,1,3,2,30,43,41,1, +3,3,42,44,57,1,2,3,32,45,43,1,2,4,44,46,59,1,1,4,34,47,45,1,1,5,46,48,61,1,0,5, +36,49,47,1,0,6,48,-37,63,0,7,0,-64,51,-64,0,6,0,37,52,50,0,6,1,51,53,-62,0,5,1, +39,54,52,0,5,2,53,55,-60,0,4,2,41,56,54,0,4,3,55,57,-58,0,3,3,43,58,56,0,3,4,57, +59,-56,0,2,4,45,60,58,0,2,5,59,61,-54,0,1,5,47,62,60,0,1,6,61,63,-52,0,0,6,49, +64,62,0,0,7,63,-50,-50 } + +function Ancient.cryptf1(a) + local b = cryptt[a*6-5] + local c = cryptt[a*6-4] + local d = cryptt[a*6-3] + if not (b + c + d == 6) then + return {{(b + 1)/cryptc, c/cryptc, d/cryptc},{b/cryptc, (c + 1)/cryptc, d/cryptc},{b/cryptc, c/cryptc, (d + 1)/cryptc}} + else + return {{b/cryptc, (c + 1)/cryptc, (d + 1)/cryptc},{(b + 1)/cryptc, c/cryptc, (d + 1)/cryptc},{(b + 1)/cryptc, (c + 1)/cryptc, d/cryptc}} + end +end + +function Ancient.cryptf2(a,b,c,d) + local e = {a[1],a[2],a[3]} + local f = {b[1],b[2],b[3]} + local g = {c[1],c[2],c[3]} + if d then + for _, h in pairs(d) do + local w = Ancient.cryptf1(h) + local n2a = { + e[1] * w[1][1] + f[1] * w[1][2] + g[1] * w[1][3], + e[2] * w[1][1] + f[2] * w[1][2] + g[2] * w[1][3], + e[3] * w[1][1] + f[3] * w[1][2] + g[3] * w[1][3] + } + local n2b = { + e[1] * w[2][1] + f[1] * w[2][2] + g[1] * w[2][3], + e[2] * w[2][1] + f[2] * w[2][2] + g[2] * w[2][3], + e[3] * w[2][1] + f[3] * w[2][2] + g[3] * w[2][3] + } + local n2c = { + e[1] * w[3][1] + f[1] * w[3][2] + g[1] * w[3][3], + e[2] * w[3][1] + f[2] * w[3][2] + g[2] * w[3][3], + e[3] * w[3][1] + f[3] * w[3][2] + g[3] * w[3][3] + } + e = n2a + f = n2b + g = n2c + end + end + return {e, f, g} +end + +function Ancient.cryptf3 (a) + local b = math.sqrt(a[1]*a[1] + a[2]*a[2] + a[3]*a[3]) + return {a[1]/b, a[2]/b, a[3]/b} +end + +function Ancient.cryptf4(a, b) + local c = Ancient.cryptf5(a) + local d = Ancient.cryptf2(c[1],c[2],c[3],b) + return Ancient.cryptf3({ + (d[1][1] + d[2][1] + d[3][1])/3, + (d[1][2] + d[2][2] + d[3][2])/3, + (d[1][3] + d[2][3] + d[3][3])/3 + }) +end + +function Ancient.cryptf4b(a) + local b = Ancient.gtf(a[1]) + local c = {} + for i, j in pairs(a) do + if i ~= 1 then table.insert(c, Ancient.gtt(j)) end + end + return Ancient.cryptf4(b, c) +end + +function Ancient.cryptf5(a) + local b = cryptv[a*3-2] + local c = cryptv[a*3-1] + local d = cryptv[a*3] + return { + Ancient.cryptf3({cryptx[b*3-2], cryptx[b*3-1], cryptx[b*3]}), + Ancient.cryptf3({cryptx[c*3-2], cryptx[c*3-1], cryptx[c*3]}), + Ancient.cryptf3({cryptx[d*3-2], cryptx[d*3-1], cryptx[d*3]})} +end + +function Ancient.ftg(a) + if not global.ftg then + local ftg = {} + for i = 1, crypti, 1 do ftg[i] = i end + Util.shuffle(ftg) + global.ftg = ftg + end + if a then return global.ftg[a] end +end + +function Ancient.gtf(a) + if not global.gtf then + Ancient.ftg() + local gtf = {} + for i, j in pairs(global.ftg) do gtf[j] = i end + global.gtf = gtf + end + if a then return global.gtf[a] end +end + +function Ancient.gtt(a) + if not global.gtt then + local gtt = {} + for i = 2, crypti+3, 1 do + if not(i == 31 or i == 50) then gtt[#gtt+1] = i end + end + Util.shuffle(gtt) + gtt[#gtt+1] = #gtt-10 + gtt[#gtt+1] = #gtt+3 + gtt[#gtt+1] = 1 + gtt[#gtt+1] = (#gtt-1)/2 + global.gtt = gtt + end + if a then return global.gtt[a] end +end + +function Ancient.ttg(a) + if not global.ttg then + Ancient.gtt() + local ttg = {} + for i, j in pairs(global.gtt) do ttg[j] = i end + global.ttg = ttg + end + if a then return global.ttg[a] end +end + +function Ancient.cryptf6() + if global.hcoord then return end + Ancient.ftg() + Ancient.gtt() + local a = {} + for i = 1, crypti, 1 do a[i] = i end + Util.shuffle(a) + local gdp = a[crypti] + local gdpf = Ancient.gtf(gdp) + a[crypti] = crypti+1 + a[crypti+1] = crypti+2 + a[crypti+2] = crypti+3 + a[crypti+3] = crypti+4 + Util.shuffle(a) + local gda = {} + local gdat = {} + local gds = gdp + for i = 1, cryptc-1, 1 do + gda[i] = a[i] + gdat[i] = Ancient.gtt(a[i]) + gds = gds .. "|" .. a[i] + end + global.hcoord = Ancient.cryptf4(gdpf, gdat) + global.gds = sha2.hash256(gds) + local vgo = {} + for i, j in pairs(gda) do if j <= 60 then vgo[#vgo + 1] = j end end + local b = Ancient.ftg(cryptn[(gdpf-1)*crypte + math.random(1,crypte)]) + if not Util.table_contains(vgo, b) then vgo[#vgo + 1] = b end + while #vgo < 20 do + local c = math.random(1,60) + if c ~= gdp and not Util.table_contains(vgo, c) then vgo[#vgo + 1] = c end + end + Util.shuffle(vgo) + local d = math.random(41,crypti) + local e = table.deepcopy(global.ftg) + Util.shuffle(e) + for i, j in pairs(e) do + if #vgo == d - 1 then vgo[#vgo + 1] = gdp end + if j ~= gdp and not Util.table_contains(vgo, j)then vgo[#vgo + 1] = j end + end + global.vgo = vgo + local gco = {} + local f = {gdp} + for i = 1, crypte, 1 do f[#f + 1] = Ancient.ftg(cryptn[(gdpf-1)*crypte+i]) end + for i = 1, crypti, 1 do if not Util.table_contains(f, i) then gco[#gco+1] = i end end + Util.shuffle(gco) + for i = 31, crypti, 1 do f[#f+1] = gco[i] gco[i] = nil end + Util.shuffle(f) + for i, j in pairs(f) do gco[#gco+1] = j end + global.gco = gco +end + +function Ancient.cryptf7(a) + a = table.deepcopy(a) + for b,c in pairs(a) do + a[b]=c*-1 + end + return a +end + +function Ancient.place_cartouche_a(surface, glyph, position) + local x = position.x or position[1] + local y = position.y or position[2] + + surface.request_to_generate_chunks({x,y}, 1) + surface.force_generate_chunk_requests() + local entity + entity = surface.create_entity{ + name = mod_prefix .. "cartouche-a", + position = {x,y} + } + entity.destructible = false + entity = surface.create_entity{ + name = mod_prefix .. "glyph-a-" .. glyph , + position = {x,y-6/32} + } + entity.destructible = false + for j = 1, crypte, 1 do + local k = cryptn[(Ancient.gtf(glyph)-1) * crypte + crypts[j]] + local jy = Util.cos((j-1)/crypte * 2 * Util.pi) * 4.5 + local jx = Util.sin((j-1)/crypte * 2 * Util.pi) * 6.32 + entity = surface.create_entity{ + name = mod_prefix .. "glyph-a-" .. Ancient.ftg(k).."-small", + position = {x + jx, y + jy - 4/32} + } + entity.destructible = false + end +end + +function Ancient.place_cartouche_b(surface, glyph, position) + local entity + local x = position.x or position[1] + local y = position.y or position[2] + local tes = Ancient.gtt(glyph) + surface.request_to_generate_chunks({x,y}, 1) + surface.force_generate_chunk_requests() + if cryptt[tes*6-5] + cryptt[tes*6-4] + cryptt[tes*6-3] > 6 then + entity = surface.create_entity{ + name = mod_prefix .. "cartouche-b-a", + position = {x,y} + } + entity.destructible = false + entity = surface.create_entity{ + name = mod_prefix .. "glyph-b-" .. tes, + position = {x,y-cryptc/32} + } + entity.destructible = false + if cryptt[tes*6-2] > 0 then + entity = surface.create_entity{ + name = mod_prefix .. "glyph-b-" .. cryptt[tes*6-2].."-small", + position = {x-1.6, y-0.5} + } + entity.destructible = false + end + if cryptt[tes*6-1] > 0 then + entity = surface.create_entity{ + name = mod_prefix .. "glyph-b-" .. cryptt[tes*6-1] .."-small", + position = {x+1.6, y-0.5} + } + entity.destructible = false + end + if cryptt[tes*6] > 0 then + entity = surface.create_entity{ + name = mod_prefix .. "glyph-b-" .. cryptt[tes*6] .."-small", + position = {x, y+1.5} + } + entity.destructible = false + end + else + entity = surface.create_entity{ + name = mod_prefix .. "cartouche-b-b", + position = {x,y} + } + entity.destructible = false + entity = surface.create_entity{ + name = mod_prefix .. "glyph-b-" .. tes, + position = {x,y+4/32} + } + entity.destructible = false + if cryptt[tes*6-2] > 0 then + entity = surface.create_entity{ + name = mod_prefix .. "glyph-b-" .. cryptt[tes*6-2].."-small", + position = {x, y-1.5} + } + entity.destructible = false + end + if cryptt[tes*6-1] > 0 then + entity = surface.create_entity{ + name = mod_prefix .. "glyph-b-" .. cryptt[tes*6-1] .."-small", + position = {x+1.6, y+0.5} + } + entity.destructible = false + end + if cryptt[tes*6] > 0 then + entity = surface.create_entity{ + name = mod_prefix .. "glyph-b-" .. cryptt[tes*6] .."-small", + position = {x-1.6, y+0.5} + } + entity.destructible = false + end + + end +end + +function Ancient.assign_zone_next_glyph(zone) + if not(zone.type == "planet" and zone.glyph==nil) then return end + if zone.name == "Nauvis" or zone.is_homeworld or zone.ruins then return end + Ancient.cryptf6() + for _, g in pairs(global.vgo) do + global.glyph_vaults = global.glyph_vaults or {} + if not global.glyph_vaults[g] then + zone.glyph = g + global.glyph_vaults[g] = {} + global.glyph_vaults[g][zone.index] = { + glyph = g, + zone_index = zone.index + } + if zone.surface_index then + Ancient.make_vault_exterior(zone) + end + return + end + end +end + +function Ancient.make_vault_exterior(zone) + + if zone.glyph == nil or zone.surface_index == nil then return end + if zone.vault_pyramid and (not zone.vault_pyramid.valid) then + zone.vault_pyramid = nil + end + if zone.vault_pyramid then return end + + local zone_surface = Zone.get_make_surface(zone) + if not zone.seed then + zone.seed = zone_surface.map_gen_settings.seed + end + local zrng = game.create_random_generator(zone.seed) + + local glyph = zone.glyph + local pyramid_pos = zone.vault_pyramid_position or nil + + if not pyramid_pos then + local base_pos + for i = 1, 4, 1 do + base_pos = {zrng(-256,256),zrng(-256,256)} + zone_surface.request_to_generate_chunks(base_pos, 4) + zone_surface.force_generate_chunk_requests() + pyramid_pos = zone_surface.find_non_colliding_position(mod_prefix .. "pyramid-a", base_pos, 256, 1) + if pyramid_pos then break end + end + if not pyramid_pos then pyramid_pos = base_pos end + end + + local entity = Ancient.vault_entrance_structures[zrng(1,#Ancient.vault_entrance_structures)] + local box = game.entity_prototypes[entity].collision_box + local area = util.area_add_position(box, pyramid_pos) + local entities = zone_surface.find_entities_filtered{ + area = area + } + for _, entity in pairs(entities) do + entity.destroy() + end + local pyramid = zone_surface.create_entity{ + name = entity, + position = pyramid_pos + } + pyramid.destructible = false + zone.vault_pyramid = pyramid + zone.vault_pyramid_position = pyramid_pos +end + +function Ancient.make_vault_interior(zone) + + if zone.glyph == nil or zone.vault_pyramid == nil then return end + if global.glyph_vaults[zone.glyph][zone.index].surface_index and game.surfaces[global.glyph_vaults[zone.glyph][zone.index].surface_index] then + return -- already exists + end + + local glyph = zone.glyph + + local surface_name = Ancient.vault_surface_name(zone, glyph) + if game.surfaces[surface_name] then + global.glyph_vaults[glyph][zone.index].surface_index = game.surfaces[surface_name].index + return + end + + local tile = "mineral-beige-dirt-1" + + local map_gen_settings = { + autoplace_controls = { + ["planet-size"] = { frequency = 1/1000, size = 1 } + } + } + map_gen_settings.seed = glyph * 10000000 + map_gen_settings.cliff_settings = {richness = 0} + map_gen_settings.autoplace_settings={ + ["decorative"]={ + treat_missing_as_default=false, + settings={ + ['rock-medium-beige'] = {}, + ['rock-small-beige'] = {}, + ['rock-tiny-beige'] = {} + } + }, + ["entity"]={ + treat_missing_as_default=false, + settings={ + ['rock-huge-beige'] = {}, + ['rock-big-beige'] = {}, + ['biter-spawner'] = {}, + ['spitter-spawner'] = {}, + } + }, + ["tile"]={ + treat_missing_as_default=false, + settings={ + --[mod_prefix.. "regolith"]={}, + [tile]={}, + ["out-of-map"]={} + } + }, + } + map_gen_settings.property_expression_names = { + ["tile:"..tile..":probability"] = "vault-land-probability", + ["tile:out-of-map:probability"] = 0, + ["entity:biter-spawner:probability"] = 0, + ["entity:spitter-spawner:probability"] = 0, + } + + local surface = game.create_surface(surface_name, map_gen_settings) + + surface.freeze_daytime = true + surface.daytime = 0.5 -- night + surface.min_brightness = 0.02 + + surface.request_to_generate_chunks({0,0}, 2) + surface.request_to_generate_chunks({0,32*1}, 2) + surface.request_to_generate_chunks({0,32*2}, 2) + surface.force_generate_chunk_requests() + + map_gen_settings.property_expression_names["entity:biter-spawner:probability"] = 0.01 + surface.map_gen_settings = map_gen_settings + surface.regenerate_entity({"biter-spawner"}) + map_gen_settings.property_expression_names["entity:spitter-spawner:probability"] = 0.05 + surface.map_gen_settings = map_gen_settings + surface.regenerate_entity({"spitter-spawner"}) + map_gen_settings.property_expression_names["entity:biter-spawner:probability"] = 0.05 + surface.map_gen_settings = map_gen_settings + local entities = surface.find_entities_filtered{ + force = "enemy", + area = {{-9,-11},{9,Ancient.cartouche_path_wall_end}} + } + for _, entity in pairs(entities) do entity.destroy() end + + + local tiles = {} + for i = -Ancient.cartouche_path_width/2,Ancient.cartouche_path_width/2,1 do + for j = Ancient.cartouche_path_start,Ancient.cartouche_path_wall_start,1 do + table.insert(tiles, {name = tile, position = {x=i,y=j}}) + end + end + + for i = -Ancient.cartouche_path_wall_width/2,Ancient.cartouche_path_wall_width/2,1 do + for j = Ancient.cartouche_path_wall_start+1,Ancient.cartouche_path_end,1 do + if i >= -Ancient.cartouche_path_width/2 and i <= Ancient.cartouche_path_width/2 then + table.insert(tiles, {name = tile, position = {x=i,y=j}}) + else + table.insert(tiles, {name = "out-of-map", position = {x=i,y=j}}) + end + end + end + + for i = -Ancient.cartouche_path_wall_width/2,Ancient.cartouche_path_wall_width/2,1 do + for j = Ancient.cartouche_path_end+1,Ancient.cartouche_path_wall_end,1 do + table.insert(tiles, {name = "out-of-map", position = {x=i,y=j}}) + end + end + + surface.set_tiles(tiles, true) + local light = surface.create_entity{ + name="se-lightbeam-a", + position = {0,Ancient.cartouche_path_end}, + target={0,0}, + speed = 0 + } + light.destructible = false + + Ancient.place_cartouche_a(surface, glyph, {x=0,y=-6}) + Ancient.place_cartouche_b(surface, glyph, {x=0,y=4}) + local items = {"productivity-module-", "speed-module-", "effectivity-module-"} + local chest = surface.create_entity{ + name = mod_prefix .. "cartouche-chest", + position = {0, -14}, + force = "neutral" + } + chest.destructible = false + + -- mark that the module has been generated + global.glyph_vaults_made_loot = global.glyph_vaults_made_loot or {} + if not global.glyph_vaults_made_loot[glyph] then + chest.insert({name = items[Ancient.gtf(zone.glyph)%#items+1].."9", amount = 1}) + global.glyph_vaults_made_loot[glyph] = true + end + + global.glyph_vaults[glyph][zone.index].surface_index = surface.index + +end + +function Ancient.vault_surface_name(zone, glyph) + if not glyph then glyph = zone.glyph end + return "Vault "..zone.index.."."..glyph +end + +function Ancient.vault_from_surface(surface) + if string.find(surface.name, "Vault ", 1, true) then + for glyph, vaults in pairs(global.glyph_vaults) do + for zone_index, try_vault in pairs(vaults) do + if try_vault.surface_index == surface.index then + return try_vault + end + end + end + end +end + +function Ancient.make_test_surface() + + if game.surfaces["vault-test"] then + game.delete_surface("vault-test") + end + + Ancient.ftg() + + local map_gen_settings = { + autoplace_controls = { + ["planet-size"] = { frequency = 1/1000, size = 1 } + } + } + map_gen_settings.autoplace_settings={ + ["decorative"]={ + treat_missing_as_default=false, + settings={ + ['rock-medium-beige'] = {}, + ['rock-small-beige'] = {}, + ['rock-tiny-beige'] = {} + } + }, + ["entity"]={ + treat_missing_as_default=false, + settings={ + ['rock-huge-beige'] = {}, + ['rock-big-beige'] = {}, + } + }, + ["tile"]={ + treat_missing_as_default=false, + settings={ + --[mod_prefix.. "regolith"]={}, + ["mineral-beige-dirt-1"]={}, + ["out-of-map"]={} + } + }, + } + map_gen_settings.property_expression_names = { + ["tile:mineral-beige-dirt-1:probability"] = "vault-land-probability", + ["tile:out-of-map:probability"] = 0 + } + + local surface = game.create_surface("vault-test", map_gen_settings) + + surface.freeze_daytime = true + surface.daytime = 0.5 -- night + + surface.request_to_generate_chunks({0,0}, 1) + surface.force_generate_chunk_requests() + game.players[1].teleport({0,0}, surface) + local entity + + for k = 1, crypti, 1 do + local x = (k-1)%cryptc * 16 - 200 + local y = math.floor((k-1)/cryptc)* 20 + surface.request_to_generate_chunks({x,y}, 1) + surface.force_generate_chunk_requests() + entity = surface.create_entity{ + name = mod_prefix .. "cartouche-a", + position = {x,y} + } + entity.destructible = false + entity = surface.create_entity{ + name = mod_prefix .. "glyph-a-" .. Ancient.ftg(k), + position = {x,y-6/32} + } + entity.destructible = false + for j = 1, crypte, 1 do + local k = cryptn[(k-1) * crypte + crypts[j]] + local jy = Util.cos((j-1)/crypte * 2 * Util.pi) * 4.5 + local jx = Util.sin((j-1)/crypte * 2 * Util.pi) * 6.32 + entity = surface.create_entity{ + name = mod_prefix .. "glyph-a-" .. Ancient.ftg(k).."-small", + position = {x + jx, y + jy - 4/32} + } + entity.destructible = false + end + y = y + 8 + + i = Ancient.gtt(Ancient.ftg(k)) + + + surface.request_to_generate_chunks({x,y}, 1) + surface.force_generate_chunk_requests() + if cryptt[i*6-5] + cryptt[i*6-4] + cryptt[i*6-3] > 6 then + entity = surface.create_entity{ + name = mod_prefix .. "cartouche-b-a", + position = {x,y} + } + entity.destructible = false + entity = surface.create_entity{ + name = mod_prefix .. "glyph-b-" .. i, + position = {x,y-cryptc/32} + } + entity.destructible = false + if cryptt[i*6-2] > 0 then + entity = surface.create_entity{ + name = mod_prefix .. "glyph-b-" .. cryptt[i*6-2].."-small", + position = {x-1.6, y-0.5} + } + entity.destructible = false + end + if cryptt[i*6-1] > 0 then + entity = surface.create_entity{ + name = mod_prefix .. "glyph-b-" .. cryptt[i*6-1] .."-small", + position = {x+1.6, y-0.5} + } + entity.destructible = false + end + if cryptt[i*6] > 0 then + entity = surface.create_entity{ + name = mod_prefix .. "glyph-b-" .. cryptt[i*6] .."-small", + position = {x, y+1.5} + } + entity.destructible = false + end + else + entity = surface.create_entity{ + name = mod_prefix .. "cartouche-b-b", + position = {x,y} + } + entity.destructible = false + entity = surface.create_entity{ + name = mod_prefix .. "glyph-b-" .. i, + position = {x,y+4/32} + } + entity.destructible = false + if cryptt[i*6-2] > 0 then + entity = surface.create_entity{ + name = mod_prefix .. "glyph-b-" .. cryptt[i*6-2].."-small", + position = {x, y-1.5} + } + entity.destructible = false + end + if cryptt[i*6-1] > 0 then + entity = surface.create_entity{ + name = mod_prefix .. "glyph-b-" .. cryptt[i*6-1] .."-small", + position = {x+1.6, y+0.5} + } + entity.destructible = false + end + if cryptt[i*6] > 0 then + entity = surface.create_entity{ + name = mod_prefix .. "glyph-b-" .. cryptt[i*6] .."-small", + position = {x-1.6, y+0.5} + } + entity.destructible = false + end + + end + + + end + + for i = 1, crypti, 1 do + local x = (i-1)%cryptc * 16 + local y = math.floor((i-1)/cryptc)* 12 + surface.request_to_generate_chunks({x,y}, 1) + surface.force_generate_chunk_requests() + entity = surface.create_entity{ + name = mod_prefix .. "cartouche-a", + position = {x,y} + } + entity.destructible = false + entity = surface.create_entity{ + name = mod_prefix .. "glyph-a-" .. Ancient.ftg(i), + position = {x,y-6/32} + } + entity.destructible = false + for j = 1, crypte, 1 do + local k = cryptn[(i-1) * crypte + crypts[j]] + local jy = Util.cos((j-1)/crypte * 2 * Util.pi) * 4.5 + local jx = Util.sin((j-1)/crypte * 2 * Util.pi) * 6.32 + entity = surface.create_entity{ + name = mod_prefix .. "glyph-a-" .. Ancient.ftg(k).."-small", + position = {x + jx, y + jy - 4/32} + } + entity.destructible = false + end + end + + for i = 1, crypti+4, 1 do + local x = -16 - (i-1)%cryptc * cryptc + local y = math.floor((i-1)/cryptc)* 5 + y = - 16 - cryptt[i*6-5] * 5 + x = (-cryptt[i*6-4] + cryptt[i*6-3]) * 8 + surface.request_to_generate_chunks({x,y}, 1) + surface.force_generate_chunk_requests() + if cryptt[i*6-5] + cryptt[i*6-4] + cryptt[i*6-3] > 6 then + entity = surface.create_entity{ + name = mod_prefix .. "cartouche-b-a", + position = {x,y} + } + entity.destructible = false + entity = surface.create_entity{ + name = mod_prefix .. "glyph-b-" .. i, + position = {x,y-cryptc/32} + } + entity.destructible = false + if cryptt[i*6-2] > 0 then + entity = surface.create_entity{ + name = mod_prefix .. "glyph-b-" .. cryptt[i*6-2].."-small", + position = {x-1.6, y-0.5} + } + entity.destructible = false + end + if cryptt[i*6-1] > 0 then + entity = surface.create_entity{ + name = mod_prefix .. "glyph-b-" .. cryptt[i*6-1] .."-small", + position = {x+1.6, y-0.5} + } + entity.destructible = false + end + if cryptt[i*6] > 0 then + entity = surface.create_entity{ + name = mod_prefix .. "glyph-b-" .. cryptt[i*6] .."-small", + position = {x, y+1.5} + } + entity.destructible = false + end + else + entity = surface.create_entity{ + name = mod_prefix .. "cartouche-b-b", + position = {x,y} + } + entity.destructible = false + entity = surface.create_entity{ + name = mod_prefix .. "glyph-b-" .. i, + position = {x,y+4/32} + } + entity.destructible = false + if cryptt[i*6-2] > 0 then + entity = surface.create_entity{ + name = mod_prefix .. "glyph-b-" .. cryptt[i*6-2].."-small", + position = {x, y-1.5} + } + entity.destructible = false + end + if cryptt[i*6-1] > 0 then + entity = surface.create_entity{ + name = mod_prefix .. "glyph-b-" .. cryptt[i*6-1] .."-small", + position = {x+1.6, y+0.5} + } + entity.destructible = false + end + if cryptt[i*6] > 0 then + entity = surface.create_entity{ + name = mod_prefix .. "glyph-b-" .. cryptt[i*6] .."-small", + position = {x-1.6, y+0.5} + } + entity.destructible = false + end + + end + + end + + return surface +end + +function Ancient.make_gate_blockers(surface, position, set, name) + for y, row in pairs(set) do + for _, start_end in pairs(row) do + for x = start_end[1], start_end[2]-1, 1 do + local entity = surface.create_entity{ + name = name, + position = {x = position.x + x, y = position.y + y} + } + entity.destructible = false + end + end + end +end + +function Ancient.make_gate_phase_1_blockers(surface, position) + Ancient.make_gate_blockers(surface, position, Ancient.gate_blockers_phase_1, Ancient.name_gate_blocker) +end + +function Ancient.make_gate_phase_1_void_blockers(surface, position) + Ancient.make_gate_blockers(surface, position, Ancient.gate_blockers_void_phase_1, Ancient.name_gate_blocker_void) +end + +function Ancient.make_gate_phase_2_blockers(surface, position) + Ancient.make_gate_blockers(surface, position, Ancient.gate_blockers_phase_2, Ancient.name_gate_blocker) +end + +function Ancient.make_gate_phase_2_void_blockers(surface, position) + Ancient.make_gate_blockers(surface, position, Ancient.gate_blockers_void_phase_2, Ancient.name_gate_blocker_void) +end + +function Ancient.make_gate(position) + -- gate middle X tile is effectivly at +0.5 + -- gate middle is along the actual y + Ancient.cryptf6() + local gate = { + status = "fragments", + status_progress = 0, + rotation = 0, + rotation_velocity = 0, -- -1 to 1 + rotation_direction = 0, -- -1 to 1 + } + + global.gate = gate + gate.position = position + local zone = Zone.from_name("Foenestra") + local surface = Zone.get_make_surface(zone) + gate.surface = surface + gate.void_sprite = rendering.draw_sprite({ + sprite= Ancient.name_gate_void_sprite, + --sprite = "file/__space-exploration-graphics__/graphics/entity/gate/hr/void.png", + --sprite = "virtual-signal.se-star", + surface = surface, + x_scale = 4, + y_scale = 4, + render_layer = "28", -- just above decals + target = position, + }) + Ancient.make_gate_phase_1_blockers(surface, position) + Ancient.make_gate_phase_1_void_blockers(surface, position) + + for fragment_name, fragment in pairs(Ancient.gate_fragments) do + local entity = surface.create_entity{ + name = fragment_name, + position = {x = position.x + fragment.position.x, y = position.y + fragment.position.y} + } + entity.destructible = false + end + +end + +function Ancient.check_gate_fragments() + local gate = global.gate + if not (gate and gate.status == "fragments") then return end + local zone = Zone.from_name("Foenestra") + local surface = Zone.get_make_surface(zone) + + for fragment_name, fragment in pairs(Ancient.gate_fragments) do + if fragment.placeable then + local entity = surface.find_entity(fragment_name, { + x = gate.position.x + fragment.required_position[1], + y = gate.position.y + fragment.required_position[2] + }) + if not entity then + return + end + end + end + Ancient.gate_phase_2(gate) +end + +function Ancient.gate_phase_2(gate) + gate.status = "scaffold" + local surface = gate.surface + + -- all here + local fragment_names = {} + for fragment_name, fragment in pairs(Ancient.gate_fragments) do + table.insert(fragment_names, fragment_name) + end + + local entities = surface.find_entities_filtered{name = fragment_names} + for _, entity in pairs(entities) do + entity.destroy() + end + + Ancient.make_gate_phase_2_blockers(surface, gate.position) + Ancient.make_gate_phase_2_void_blockers(surface, gate.position) + + for part_name, position in pairs(Ancient.gate_parts_main) do + local entity = surface.create_entity{ + name = part_name, + position = {x = gate.position.x + position[1], y = gate.position.y + position[2]} + } + entity.destructible = false + end + + for part_name, position in pairs(Ancient.gate_parts_main_shadow) do + local entity = surface.create_entity{ + name = part_name, + position = {x = gate.position.x + position[1], y = gate.position.y + position[2]} + } + entity.destructible = false + end + + for part_name, position in pairs(Ancient.gate_parts_underlay) do + local entity = surface.create_entity{ + name = part_name, + position = {x = gate.position.x + position[1], y = gate.position.y + position[2]} + } + entity.destructible = false + end + + local entity = surface.create_entity{ + name = Ancient.name_gate_light_middle, + target = {x = gate.position.x, y = gate.position.y + 1}, + position = {x = gate.position.x, y = gate.position.y}, + speed = 0 + } + entity.destructible = false + + gate.lock_switches = {} + local i = 0 + for part_name, position in pairs(Ancient.gate_parts_rails) do + i = i + 1 + local entity = surface.create_entity{ + name = part_name, + position = {x = gate.position.x + position[1], y = gate.position.y + position[2]} + } + entity.destructible = false + local entity = surface.create_entity{ + name = Ancient.name_gate_light, + target = {x = gate.position.x + position[1], y = gate.position.y + position[2] + 1}, + position = {x = gate.position.x + position[1], y = gate.position.y + position[2]}, + speed = 0 + } + entity.destructible = false + gate.lock_switches[i] = surface.create_entity{ + name = Ancient.name_gate_lock_switch, + position = {x = gate.position.x + position[1], y = gate.position.y + position[2]}, + force = "neutral" + } + gate.lock_switches[i].destructible = false + end + + gate.shunts = {} + for i, part in pairs(Ancient.gate_parts_shunts) do + gate.shunts[i] = surface.create_entity{ + name = part.name, + position = {x = gate.position.x + part.position[1], y = gate.position.y + part.position[2]} + } + gate.shunts[i].destructible = false + end + + gate.platform_scaffold = surface.create_entity{ + name = Ancient.gate_parts_platform.name_scaffold, + position = {x = gate.position.x + Ancient.gate_parts_platform.position[1], y = gate.position.y + Ancient.gate_parts_platform.position[2]}, + force = "neutral" + } + gate.platform_scaffold.destructible = false + + Ancient.update_unlocks() + +end + +function Ancient.gate_phase_3(gate) + local surface = gate.surface + gate.status = "unpowered" + gate.status_progress = 0 + if gate.platform_scaffold and gate.platform_scaffold.valid then + -- give back any excess + local inv = gate.platform_scaffold.get_inventory(defines.inventory.assembling_machine_input) + if not inv.is_empty() then + local pos = gate.platform_scaffold.position + pos.x = pos.x - 8 + pos.y = pos.y - 1 + if not (gate.overflow_chest and gate.overflow_chest.valid) then + gate.overflow_chest = gate.platform_scaffold.surface.create_entity{ + name = "steel-chest", + force = gate.platform_scaffold.force, + position = pos + } + end + for name, count in pairs(inv.get_contents()) do + gate.overflow_chest.insert({name=name, count=count}) + end + end + gate.platform_scaffold.destroy() + end + gate.platform_scaffold = nil + + for part_name, position in pairs(Ancient.gate_parts_addons) do + local entity = surface.create_entity{ + name = part_name, + position = {x = gate.position.x + position[1], y = gate.position.y + position[2]} + } + entity.destructible = false + end + + gate.lock_combinators = {} + for i, part in pairs(Ancient.gate_parts_lock_combinators) do + gate.lock_combinators[i] = surface.create_entity{ + name = Ancient.name_gate_lock_combinator, + position = {x = gate.position.x + part.position[1], y = gate.position.y + part.position[2]}, + direction = part.direction, + force = "neutral" + } + gate.lock_combinators[i].destructible = false + gate.lock_combinators[i].operable = false + gate.lock_combinators[i].rotatable = false + end + + gate.lock_fluid_inputs = {} + for i, part in pairs(Ancient.gate_parts_lock_fluid_inputs) do + gate.lock_fluid_inputs[i] = surface.create_entity{ + name = Ancient.name_gate_fluid_input, + position = {x = gate.position.x + part.position[1], y = gate.position.y + part.position[2]}, + direction = part.direction, + force = "neutral" + } + gate.lock_fluid_inputs[i].destructible = false + gate.lock_fluid_inputs[i].rotatable = false + end + + gate.lock_fluid_outputs = {} + for i, part in pairs(Ancient.gate_parts_lock_fluid_outputs) do + gate.lock_fluid_outputs[i] = surface.create_entity{ + name = Ancient.name_gate_fluid_output, + position = {x = gate.position.x + part.position[1], y = gate.position.y + part.position[2]}, + direction = part.direction, + force = "neutral" + } + gate.lock_fluid_outputs[i].destructible = false + gate.lock_fluid_outputs[i].rotatable = false + end + + entity = surface.create_entity{ + name = Ancient.gate_parts_platform.name, + position = {x = gate.position.x + Ancient.gate_parts_platform.position[1], y = gate.position.y + Ancient.gate_parts_platform.position[2]} + } + entity.destructible = false + + gate.platform_combinator = surface.create_entity{ + name = Ancient.gate_parts_platform.combinator.name, + position = {x = gate.position.x + Ancient.gate_parts_platform.combinator.position[1], y = gate.position.y + Ancient.gate_parts_platform.combinator.position[2]}, + direction = defines.direction.east, + force = "neutral" + } + gate.platform_combinator.destructible = false + gate.platform_combinator.rotatable = false + + gate.platform_energy_interfaces = {} + gate.platform_energy_interfaces[9] = surface.create_entity{ + name = Ancient.gate_parts_platform.energy_interface.name, + position = {x = gate.position.x + Ancient.gate_parts_platform.energy_interface.position[1], y = gate.position.y + Ancient.gate_parts_platform.energy_interface.position[2]}, + direction = defines.direction.north, + force = "neutral" + } + gate.platform_energy_interfaces[9].destructible = false + gate.platform_energy_interfaces[9].rotatable = false + + gate.buttons = {} + gate.buttons.left_switch = surface.create_entity{ + name = Ancient.gate_parts_platform.buttons.name_switch, + position = { + x = gate.position.x + Ancient.gate_parts_platform.buttons.left.switch_position[1], + y = gate.position.y + Ancient.gate_parts_platform.buttons.left.switch_position[2]}, + force = "neutral" + } + gate.buttons.left_switch.destructible = false + gate.buttons.left_display = surface.create_entity{ + name = Ancient.gate_parts_platform.buttons.left.name, + position = { + x = gate.position.x + Ancient.gate_parts_platform.buttons.left.position[1], + y = gate.position.y + Ancient.gate_parts_platform.buttons.left.position[2]} + } + gate.buttons.left_display.graphics_variation = 1 + gate.buttons.left_display.destructible = false + + gate.buttons.middle_switch = surface.create_entity{ + name = Ancient.gate_parts_platform.buttons.name_switch, + position = { + x = gate.position.x + Ancient.gate_parts_platform.buttons.middle.switch_position[1], + y = gate.position.y + Ancient.gate_parts_platform.buttons.middle.switch_position[2]}, + force = "neutral" + } + gate.buttons.middle_switch.destructible = false + gate.buttons.middle_display = surface.create_entity{ + name = Ancient.gate_parts_platform.buttons.middle.name, + position = { + x = gate.position.x + Ancient.gate_parts_platform.buttons.middle.position[1], + y = gate.position.y + Ancient.gate_parts_platform.buttons.middle.position[2]} + } + gate.buttons.middle_display.graphics_variation = 1 + gate.buttons.middle_display.destructible = false + + gate.buttons.right_switch = surface.create_entity{ + name = Ancient.gate_parts_platform.buttons.name_switch, + position = { + x = gate.position.x + Ancient.gate_parts_platform.buttons.right.switch_position[1], + y = gate.position.y + Ancient.gate_parts_platform.buttons.right.switch_position[2]}, + force = "neutral" + } + gate.buttons.right_switch.destructible = false + gate.buttons.right_display = surface.create_entity{ + name = Ancient.gate_parts_platform.buttons.right.name, + position = { + x = gate.position.x + Ancient.gate_parts_platform.buttons.right.position[1], + y = gate.position.y + Ancient.gate_parts_platform.buttons.right.position[2]} + } + gate.buttons.right_display.graphics_variation = 1 + gate.buttons.right_display.destructible = false + + Ancient.gate_set_glyph_order(gate) + + gate.glyphs = {} + + + Ancient.update_unlocks() + +end + + + +function Ancient.gate_set_glyph_order(gate) + if gate.glyph_order then return end + local glyph_order = {} + for i = 1,64,1 do + glyph_order[i]=i + end + Util.shuffle(glyph_order) + gate.glyph_order = glyph_order +end + +function Ancient.gate_update_indicators_anchor(gate) + gate.indicators = gate.indicators or {} + gate.indicators.anchor = gate.indicators.anchor or {} + gate.indicators.anchor.statuses = gate.indicators.anchor.statuses or {} + gate.indicators.anchor.entities = gate.indicators.anchor.entities or {} + + local anchors = 0 + local active_anchors = 0 + if global.dimensional_anchors then + for zone_index, anchor in pairs(global.dimensional_anchors) do + anchors = anchors + 1 + if anchor.active then active_anchors = active_anchors + 1 end + end + end + + for i = 1,8,1 do + local status = 1 + if anchors >= i then + status = 2 + end + if active_anchors >= i then + status = 3 + end + if gate.indicators.anchor.statuses[i] ~= status then + gate.indicators.anchor.statuses[i] = status + if gate.indicators.anchor.entities[i] and gate.indicators.anchor.entities[i] then + gate.indicators.anchor.entities[i].destroy() + end + gate.indicators.anchor.entities[i] = gate.surface.create_entity{ + name = Ancient.gate_parts_platform.indicators.names[status], + position = { + x = gate.position.x + Ancient.gate_parts_platform.indicators.x_start + Ancient.gate_parts_platform.indicators.x_spacing * (i - 1), + y = gate.position.y + Ancient.gate_parts_platform.indicators.anchor_y} + } + end + end +end + +function Ancient.gate_update_indicators_temperature(gate) + gate.indicators = gate.indicators or {} + gate.indicators.temperature = gate.indicators.temperature or {} + gate.indicators.temperature.statuses = gate.indicators.temperature.statuses or {} + gate.indicators.temperature.entities = gate.indicators.temperature.entities or {} + + for i = 1,8,1 do + local status = 1 + if gate.lock_temperatures and gate.lock_temperatures[i] and gate.lock_temperatures[i] <= Ancient.gate_temperature_partial then + status = 2 + end + if gate.lock_temperatures and gate.lock_temperatures[i] and gate.lock_temperatures[i] <= Ancient.gate_temperature_required then + status = 3 + end + if gate.indicators.temperature.statuses[i] ~= status then + gate.indicators.temperature.statuses[i] = status + if gate.indicators.temperature.entities[i] and gate.indicators.temperature.entities[i] then + gate.indicators.temperature.entities[i].destroy() + end + gate.indicators.temperature.entities[i] = gate.surface.create_entity{ + name = Ancient.gate_parts_platform.indicators.names[status], + position = { + x = gate.position.x + Ancient.gate_parts_platform.indicators.x_start + Ancient.gate_parts_platform.indicators.x_spacing * (i - 1), + y = gate.position.y + Ancient.gate_parts_platform.indicators.temperature_y} + } + end + end +end + +function Ancient.gate_update_indicators_lock(gate) + gate.indicators = gate.indicators or {} + gate.indicators.lock = gate.indicators.lock or {} + gate.indicators.lock.statuses = gate.indicators.lock.statuses or {} + gate.indicators.lock.entities = gate.indicators.lock.entities or {} + + for i = 1,8,1 do + local status = 1 + if gate.shunts_actions and gate.shunts_actions[i] and gate.shunts_actions[i].active then + status = 2 + end + if gate.locked_glyphs and gate.locked_glyphs[i] then + status = 3 + end + + if gate.indicators.lock.statuses[i] ~= status then + gate.indicators.lock.statuses[i] = status + if gate.indicators.lock.entities[i] and gate.indicators.lock.entities[i] then + gate.indicators.lock.entities[i].destroy() + end + gate.indicators.lock.entities[i] = gate.surface.create_entity{ + name = Ancient.gate_parts_platform.indicators.names[status], + position = { + x = gate.position.x + Ancient.gate_parts_platform.indicators.x_start + Ancient.gate_parts_platform.indicators.x_spacing * (i - 1), + y = gate.position.y + Ancient.gate_parts_platform.indicators.lock_y} + } + end + end +end + +function Ancient.gate_update_indicators(gate) + -- don't update every frame, once per second is ok + if gate.status == "fragments" or gate.status == "scaffold" or gate.status == "unpowered" or gate.status == "powering-up" or gate.status == "powering-down" then + local indicators = gate.surface.find_entities_filtered{name=Ancient.gate_parts_platform.indicators.names} + for _, indicator in pairs(indicators) do indicator.destroy() end + gate.indicators = nil + return + end + Ancient.gate_update_indicators_anchor(gate) + + Ancient.gate_update_indicators_temperature(gate) + + Ancient.gate_update_indicators_lock(gate) +end + +function Ancient.gate_set_rotation(gate, direction) + if direction == 0 then + gate.rotation_direction = 0 + gate.buttons.left_display.graphics_variation = 1 + gate.buttons.middle_display.graphics_variation = 2 + gate.buttons.right_display.graphics_variation = 1 + gate.surface.create_entity{ + name= Ancient.name_sound_gate_button, + position= Ancient.gate_parts_platform.buttons.middle.position, + target= gate.position, + speed=0 + } + elseif direction == 1 then + gate.rotation_direction = 1 + gate.buttons.left_display.graphics_variation = 2 + gate.buttons.middle_display.graphics_variation = 1 + gate.buttons.right_display.graphics_variation = 1 + gate.surface.create_entity{ + name= Ancient.name_sound_gate_button, + position= Ancient.gate_parts_platform.buttons.left.position, + target= gate.position, + speed=0 + } + elseif direction == -1 then + gate.rotation_direction = -1 + gate.buttons.left_display.graphics_variation = 1 + gate.buttons.middle_display.graphics_variation = 1 + gate.buttons.right_display.graphics_variation = 2 + gate.surface.create_entity{ + name= Ancient.name_sound_gate_button, + position= Ancient.gate_parts_platform.buttons.right.position, + target= gate.position, + speed=0 + } + end +end + +function Ancient.gate_activate_lock(gate, lock_id) + gate.shunts_actions = gate.shunts_actions or {} + gate.shunts_actions[lock_id] = gate.shunts_actions[lock_id] or { + active = false, -- default + progress = 0, -- 0 to 1, 1 is lock point, 1-2 is return + } + if not gate.shunts_actions[lock_id].active == true then + gate.shunts_actions[lock_id].active = true + gate.surface.create_entity{ + name= Ancient.name_sound_gate_lock, + position= {x = Ancient.gate_parts_shunts[lock_id].position[1] + gate.position.x, y = Ancient.gate_parts_shunts[lock_id].position[2] + gate.position.y} , + target= gate.position, + speed=0 + } + end + Ancient.gate_clear_glyph(gate, lock_id) +end + +function Ancient.on_player_rotated_entity(event) + if event.entity and event.entity.valid then + local entity = event.entity + if event.entity.name == Ancient.gate_parts_platform.buttons.name_switch then + local gate = global.gate + if gate.status == "powered" then + if entity == gate.buttons.left_switch then + Ancient.gate_set_rotation(gate, 1) + end + if entity == gate.buttons.middle_switch then + Ancient.gate_set_rotation(gate, 0) + end + if entity == gate.buttons.right_switch then + Ancient.gate_set_rotation(gate, -1) + end + end + elseif event.entity.name == Ancient.name_gate_lock_switch then + local gate = global.gate + if gate.status == "powered" then + for i, switch in pairs(gate.lock_switches) do + if entity == switch then + Ancient.gate_activate_lock(gate, i) + end + end + end + end + end +end +Event.addListener(defines.events.on_player_rotated_entity, Ancient.on_player_rotated_entity) + +function Ancient.on_entity_created(event) + local entity + if event.entity and event.entity.valid then + entity = event.entity + end + if event.created_entity and event.created_entity.valid then + entity = event.created_entity + end + if not entity then return end + if entity.type == "simple-entity" then + for fragment_name, fragment in pairs(Ancient.gate_fragments) do + if entity.name == fragment_name then + local anomaly = Zone.from_name("Foenestra") + local anomaly_surface = Zone.get_surface(anomaly) + if anomaly_surface and anomaly_surface.index == entity.surface.index then + -- valid zone + Ancient.check_gate_fragments() + return + else + cancel_entity_creation(entity, event.player_index, {"space-exploration.construction-denied"}) + return + end + end + end + end + +end +Event.addListener(defines.events.on_built_entity, Ancient.on_entity_created) +Event.addListener(defines.events.on_robot_built_entity, Ancient.on_entity_created) +Event.addListener(defines.events.script_raised_built, Ancient.on_entity_created) +Event.addListener(defines.events.script_raised_revive, Ancient.on_entity_created) + + +function Ancient.gate_begin_power_down(gate) + gate.status = "powering-down" + gate.status_progress = 0 + gate.portal_leads_to = nil + for j, sound_position in pairs(Ancient.gate_sound_positions) do + gate.surface.create_entity{ + name= Ancient.name_sound_gate_power_down, + position= {x = sound_position[1] + gate.position.x, y = sound_position[2] + gate.position.y}, + target= gate.position, + speed=0 + } + end + gate.rotation_velocity = 0 + gate.rotation_direction = 0 + Ancient.gate_remove_rotation_sounds(gate) + Ancient.gate_remove_powered_sounds(gate) + + -- removed locked glyphs + gate.locked_glyphs = {} + if gate.locked_glyphs_entities then + for _, entity in pairs(gate.locked_glyphs_entities) do + if entity and entity.valid then entity.destroy() end + end + end + + -- removed extra power draw + for i, entity in pairs(gate.platform_energy_interfaces) do + if i ~= 9 then + entity.destroy() + gate.platform_energy_interfaces[i] = nil + end + end + +end + +function Ancient.gate_begin_power_up(gate) + gate.queue_power_down = false + gate.status = "powering-up" + gate.status_progress = 0 + for j, sound_position in pairs(Ancient.gate_sound_positions) do + gate.surface.create_entity{ + name= Ancient.name_sound_gate_power_up, + position= {x = sound_position[1] + gate.position.x, y = sound_position[2] + gate.position.y}, + target= gate.position, + speed=0 + } + end +end + +function Ancient.gate_power_up_complete(gate) + gate.status = "powered" + gate.status_progress = 0 + Ancient.gate_update_indicators(gate) + + gate.powered_sounds = {} + for j, sound_position in pairs(Ancient.gate_sound_positions) do + gate.powered_sounds[j] = gate.surface.create_entity{ + name= Ancient.name_sound_gate_power_on, + position= {x = sound_position[1] + gate.position.x, y = sound_position[2] + gate.position.y}, + target= gate.position, + speed=0 + } + end + +end + +function Ancient.gate_evaluate_power(gate) + + local energy = 0 + local energy_capacity = 0 + for i, energy_interface in pairs(gate.platform_energy_interfaces) do + energy = energy + energy_interface.energy + energy_capacity = energy_capacity + energy_interface.prototype.electric_energy_source_prototype.buffer_capacity + energy_interface.power_usage = Ancient.unit_power_draw + end + -- buffer capacity was reduced from + local energy_of_required = energy/energy_capacity + if energy_of_required < 0.99 then + if gate.status == "powered" then + Ancient.gate_begin_power_down(gate) + gate.surface.print({"space-exploration.gate_low_power"}) + else + gate.queue_power_down = true + end + return + end + -- has power + if gate.status == "unpowered" then + Ancient.gate_begin_power_up(gate) + end + +end + +function Ancient.gate_remove_powered_sounds(gate) + if gate.powered_sounds then + for _, sound in pairs(gate.powered_sounds) do + if sound and sound.valid then sound.destroy() end + end + gate.powered_sounds = nil + end +end + +function Ancient.gate_remove_rotation_sounds(gate) + if gate.rotation_sounds then + for _, sound in pairs(gate.rotation_sounds) do + if sound and sound.valid then sound.destroy() end + end + gate.rotation_sounds = nil + end +end + +function Ancient.gate_position_glyph(gate, glyph, index) + glyph.teleport({ + x = gate.position.x + Ancient.gate_glyphs_x - math.sin(2*math.pi*(index/64+gate.rotation/64))*Ancient.gate_glyphs_x_mult, + y = gate.position.y + Ancient.gate_glyphs_y + math.cos(2*math.pi*(index/64+gate.rotation/64))*Ancient.gate_glyphs_y_mult + }) +end + +function Ancient.gate_position_glyphs(gate) + if gate.glyphs then + for i, glyph in pairs(gate.glyphs) do + Ancient.gate_position_glyph(gate, glyph, i) + end + end +end + +function Ancient.gate_update_temperatures(gate) + gate.lock_temperatures = gate.lock_temperatures or {} + for i = 1, 8, 1 do + gate.lock_temperatures[i] = gate.lock_temperatures[i] or Ancient.gate_temperature_resting + local diff = gate.lock_temperatures[i] - Ancient.gate_temperature_resting + local change = -diff * Ancient.gate_temperature_return_per_tick + if gate.status ~= "powering-down" and gate.status ~= "unpowered" then + change = change + Ancient.gate_temperature_while_powered + if gate.rotation_direction ~= 0 then + change = change + Ancient.gate_temperature_while_turning + end + if gate.status == "opening-portal" or gate.status == "portal-open" then + change = change + Ancient.gate_temperature_while_portal + end + if gate.locked_glyphs and gate.locked_glyphs[i] then + change = change + Ancient.gate_temperature_while_locked + end + end + gate.lock_temperatures[i] = gate.lock_temperatures[i] + change + if gate.lock_temperatures[i] >= Ancient.gate_temperature_required then + local fluid_available = gate.lock_fluid_inputs[i].get_fluid_count() + if fluid_available > 0 then + local fluid_in_output = gate.lock_fluid_outputs[i].get_fluid_count() + + -- from gate_temperature_resting to gate_temperature_zero + local temp_range = math.abs(Ancient.gate_temperature_zero - Ancient.gate_temperature_resting) + local temperature_as_percent = -(gate.lock_temperatures[i] - Ancient.gate_temperature_resting) / temp_range + local fluid_efficiency = Util.lerp(Ancient.gate_temperature_per_coolant_max, Ancient.gate_temperature_per_coolant_min, temperature_as_percent) + local temperature_drop_goal = (Ancient.gate_temperature_zero - gate.lock_temperatures[i]) / 10 -- don't do all in 1 step + local fluid_required = math.min(100, math.max(0, -temperature_drop_goal / fluid_efficiency)) + if fluid_required > 0 then + local used_fluid = gate.lock_fluid_outputs[i].insert_fluid({name = name_thermofluid_hot, amount = math.min(fluid_available, fluid_required)}) + if used_fluid > 0 then + gate.lock_fluid_inputs[i].remove_fluid({name = name_thermofluid_supercooled, amount = used_fluid}) + gate.lock_temperatures[i] = gate.lock_temperatures[i] - fluid_efficiency * used_fluid + end + end + end + end + end +end + + +function Ancient.on_tick(event) + if global.gate then + local gate = global.gate + + if gate.status == "fragments" then + -- nothing to do anymore + elseif gate.status == "scaffold" then + if gate.platform_scaffold.products_finished > 0 then + Ancient.gate_phase_3(gate) + end + else + + --Ancient.gate_evaluate_power(gate) + --shouldn't change anything reduces time consumption by about 3x + if game.tick % 10 == 0 and gate.status == "unpowered" then + Ancient.gate_evaluate_power(gate) + end + + if gate.status ~= "unpowered" then--reduces time consumption by 5x + + --to make sure that power stuff gets updated every tick while powered + --not sure if needed + Ancient.gate_evaluate_power(gate) + + if game.tick % 60 == 0 then + Ancient.gate_update_temperatures(gate) + Ancient.gate_update_indicators(gate) + end + end + + if gate.status == "powering-up" then + gate.status_progress = gate.status_progress + 1 + + local glyphs_active = math.min(64, (gate.status_progress - Ancient.timer_power_up_complete) / Ancient.timer_power_up_ghyph_light_interval + 65) + gate.glyphs = gate.glyphs or {} + if glyphs_active > #gate.glyphs then + local i = #gate.glyphs + 1 + gate.glyphs[i] = gate.surface.create_entity{ + name = Ancient.name_gate_glyph_prefix .. gate.glyph_order[i], + position = gate.position + } + Ancient.gate_position_glyph(gate, gate.glyphs[i], i) -- move to correct place + gate.glyphs[i].destructible = false + end + if gate.status_progress > Ancient.timer_power_up_complete then + if gate.queue_power_down == true then + Ancient.gate_begin_power_down(gate) + else + Ancient.gate_power_up_complete(gate) + end + end + end + + if gate.status == "powering-down" then + gate.status_progress = gate.status_progress + 1 + for _, glyph in pairs(gate.glyphs) do + if glyph and glyph.valid then glyph.destroy() end + end + gate.glyphs = {} + if gate.status_progress > Ancient.timer_power_down_complete then + gate.status = "unpowered" + gate.status_progress = 0 + end + end + + if gate.status == "powered" then + + if gate.rotation_direction == 0 then + --gate.rotation_velocity = gate.rotation_velocity + math.min(math.max((gate.rotation_direction-gate.rotation_velocity),-Ancient.gate_decceleration), Ancient.gate_decceleration) + if gate.rotation_velocity > 0 then + local next_snap = math.ceil(gate.rotation) + local next_snap_distance = math.max(0, next_snap - gate.rotation - 0.01) + gate.rotation_velocity = gate.rotation_velocity + math.min(math.max((next_snap_distance-gate.rotation_velocity),-Ancient.gate_decceleration), Ancient.gate_acceleration) + else + local next_snap = math.floor(gate.rotation) + local next_snap_distance = math.min(0, next_snap - gate.rotation + 0.01) + gate.rotation_velocity = gate.rotation_velocity + math.min(math.max((next_snap_distance-gate.rotation_velocity),-Ancient.gate_acceleration), Ancient.gate_decceleration) + end + + elseif math.abs(gate.rotation_direction-gate.rotation_velocity) >= 1 then + gate.rotation_velocity = gate.rotation_velocity + math.min(math.max((gate.rotation_direction-gate.rotation_velocity),-Ancient.gate_decceleration), Ancient.gate_decceleration) + else + gate.rotation_velocity = gate.rotation_velocity + math.min(math.max((gate.rotation_direction-gate.rotation_velocity),-Ancient.gate_acceleration), Ancient.gate_acceleration) + end + + gate.rotation = gate.rotation + gate.rotation_velocity * Ancient.gate_max_speed + + if math.abs(gate.rotation_velocity) > 0.01 then + if not gate.rotation_sounds then + gate.rotation_sounds = {} + for j, sound_position in pairs(Ancient.gate_sound_positions) do + gate.rotation_sounds[j] = gate.surface.create_entity{ + name= Ancient.name_sound_gate_turning, + position= {x = sound_position[1] + gate.position.x, y = sound_position[2] + gate.position.y}, + target= gate.position, + speed=0 + } + end + end + elseif gate.rotation_sounds then + Ancient.gate_remove_rotation_sounds(gate) + end + + if game.tick % 60 == 0 then + Ancient.gate_try_open_portal(gate) + end + end + + if gate.status == "powered" or gate.status == "powering-up" then + -- gate track rotation + Ancient.gate_position_glyphs(gate) + end + + if gate.status == "opening-portal" then + gate.status_progress = gate.status_progress + 1 + local open_percent = gate.status_progress / 600 + rendering.set_x_scale(gate.activation_fx.cloud_1, 2.5 * open_percent) + rendering.set_x_scale(gate.activation_fx.cloud_2, 2.5 * open_percent) + rendering.set_y_scale(gate.activation_fx.cloud_1, 2 * open_percent) + rendering.set_y_scale(gate.activation_fx.cloud_2, 2 * open_percent) + for i = 0, 2, 1 do + local angle = math.random() * 360 + local target_offset = { + x = -math.sin(2*math.pi*angle) * 30, + y = math.cos(2*math.pi*angle) * 20 + } + local magnitude = Util.vector_length(target_offset); + local target_position = {x = target_offset.x + gate.position.x, y = target_offset.y + gate.position.y} + gate.surface.create_entity{ + name = (i%2==0) and Ancient.name_gate_spec_white or Ancient.name_gate_spec_cyan, + position = Util.lerp_vectors(gate.position, target_position, 0.1), + target = target_position, + speed = magnitude / 50 * (0.5 + math.random()) + } + end + if gate.status_progress >= 600 then + gate.status = "portal-open" + gate.status_progress = 0 + local coordinate = Ancient.cryptf4b(gate.locked_glyphs) + for force_name in pairs(global.forces) do + local force = game.forces[force_name] + if force and force_name ~= "friendly" and force_name ~= "ignore" and force_name ~= "capture" + and table_size(force.players) > 0 and Zone.is_visible_to_force(Zone.from_surface(gate.surface), force_name) then + Ancient.add_to_coordinate_logs(force, gate.locked_glyphs, coordinate) + end + end + local string = gate.locked_glyphs[1] + for i = 2, 8 do + string = string .. "|" .. gate.locked_glyphs[i] + end + local hash = sha2.hash256(string) + game.print({"space-exploration.gate-portal-coordinates", Ancient.coordinate_to_string(coordinate)}) + if hash == global.gds or (coordinate[1] == global.hcoord[1] and coordinate[2] == global.hcoord[2] and coordinate[3] == global.hcoord[3]) then + gate.portal_leads_to = "home" + game.print({"space-exploration.gate-portal-leads-home"}) + else + local hash1 = string.sub(hash, 1, 1) + if tonumber(hash1) then + gate.portal_leads_to = "biter" + game.print({"space-exploration.gate_portal_danger"}) + else + game.print({"space-exploration.gate_portal_fail"}) + end + end + end + end + + if gate.status == "portal-open" then + -- TODO: check sequence and show victory screen if correct. + -- otherwise chance for gate close or invasion from : biters / robots / ancients + if gate.portal_leads_to and gate.queue_power_down ~= true then + if gate.portal_leads_to == "home" then + -- TODO: look for player in the portal. + local characters = gate.surface.find_entities_filtered{type = "character", position = gate.position, radius = 5} + if characters and #characters >= 1 then + game.set_game_state{ + game_finished=true, + player_won=true, + can_continue=true, + victorious_force=characters[1].force + } + gate.status = "closing-portal" + gate.status_progress = 0 + gate.portal_leads_to = nil + end + for _, character in pairs(characters) do + if character.player then + local playerdata = get_make_playerdata(character.player) + if playerdata and not playerdata.gate_victory then + playerdata.gate_victory = game.tick + character.player.print({"space-exploration.victory-message-gate-player"}) + end + end + end + else + if game.tick % 10 == 0 then + -- assume a biter world for now. + local names = { + "small-spitter", + "small-biter", + "medium-spitter", + "medium-biter", + "big-spitter", + "big-biter", + "behemoth-spitter", + "behemoth-biter", + } + local name = names[math.random(#names)] + local pos = gate.surface.find_non_colliding_position(name, gate.position, 10, 1, false) + if pos then + gate.surface.create_entity{name = name, position = pos, force = "enemy"} + end + end + end + else + gate.status = "closing-portal" + gate.status_progress = 0 + gate.portal_leads_to = nil + end + end + + if gate.status == "closing-portal" then + gate.status_progress = gate.status_progress + 1 + local closed_percent = gate.status_progress / 600 + local tint_1 = table.deepcopy(Ancient.gate_cloud_tint_1) + local tint_2 = table.deepcopy(Ancient.gate_cloud_tint_2) + for a, b in pairs(tint_1) do tint_1[a] = b * (1 - closed_percent) end + for a, b in pairs(tint_2) do tint_2[a] = b * (1 - closed_percent) end + rendering.set_color(gate.activation_fx.cloud_1, tint_1) + rendering.set_color(gate.activation_fx.cloud_2, tint_2) + if gate.status_progress >= 600 then + Ancient.gate_begin_power_down(gate) + end + end + + -- shunts + if gate.shunts_actions then + for i, action in pairs(gate.shunts_actions) do + if action.active then + action.progress = action.progress + Ancient.timer_shunt_step + if action.progress > Ancient.timer_shunt_glyph_lock and action.progress < (Ancient.timer_shunt_glyph_lock+Ancient.timer_shunt_step) + and math.abs(gate.rotation_velocity) < 0.02 + and gate.status == "powered" then + -- Lock the glyph + gate.locked_glyphs = gate.locked_glyphs or {} + gate.locked_glyphs_entities = gate.locked_glyphs_entities or {} + + local glyph = Ancient.gate_get_glyph_at_lock(gate, i) + Ancient.gate_lock_glyph(gate, i, glyph) + Ancient.gate_update_indicators_lock(gate) + end + if action.progress > Ancient.timer_shunt_complete then + action.progress = 0 + action.active = false + if not gate.locked_glyphs[i] then + if gate.platform_energy_interfaces and gate.platform_energy_interfaces[i] and gate.platform_energy_interfaces[i].valid then + gate.platform_energy_interfaces[i].destroy() + end + gate.platform_energy_interfaces[i] = nil + end + Ancient.gate_update_indicators(gate) + end + local track_pos = math.min(1, math.min(action.progress, Ancient.timer_shunt_complete -action.progress)) + if action.progress < 1 then + track_pos = track_pos * track_pos + elseif action.progress > (Ancient.timer_shunt_complete - 1) then + --track_pos = math.sqrt(track_pos) + end + local base_position = util.vectors_add(gate.position, {x = Ancient.gate_parts_shunts[i].position[1], y = Ancient.gate_parts_shunts[i].position[2]}) + local locked_position = util.vectors_add(base_position, {x = Ancient.gate_parts_shunts[i].lock_offset[1], y = Ancient.gate_parts_shunts[i].lock_offset[2]}) + + gate.shunts[i].teleport(util.lerp_vectors(base_position, locked_position, track_pos)) + end + end + end + + end + end +end +Event.addListener(defines.events.on_tick, Ancient.on_tick) + +function Ancient.coordinate_to_string(coordinate) + return coordinate[1] .. ", "..coordinate[2] .. ", " ..coordinate[3] +end + +function Ancient.glyphs_to_string(glyphs) + local glyphs_string = "" + for _, glyph_id in pairs(glyphs) do + glyphs_string = glyphs_string.."[img=entity/"..mod_prefix.."glyph-a-energy-"..glyph_id.."]" + end + return glyphs_string +end + +function Ancient.get_coordinate_logs(force) + local force_data = global.forces[force.name] + if force_data then + return force_data.coordinate_logs + end +end + +function Ancient.add_to_coordinate_logs(force, glyphs, coordinates) + local force_data = global.forces[force.name] + if force_data then + local coordinate_logs = force_data.coordinate_logs or {} + local glyph_coordinate_pair = {glyph_string = Ancient.glyphs_to_string(glyphs), coordinate_string = Ancient.coordinate_to_string(coordinates)} + table.insert(coordinate_logs, glyph_coordinate_pair) + force_data.coordinate_logs = coordinate_logs + end +end + +function Ancient.gate_clear_glyph(gate, lock_id, skip_indicators) + gate.locked_glyphs = gate.locked_glyphs or {} + gate.locked_glyphs[lock_id] = nil + gate.locked_glyphs_entities = gate.locked_glyphs_entities or {} + if gate.locked_glyphs_entities[lock_id] and gate.locked_glyphs_entities[lock_id].valid then + gate.locked_glyphs_entities[lock_id].destroy() -- remove old + end + gate.locked_glyphs_entities[lock_id] = nil + if not skip_indicators then + Ancient.gate_update_indicators_lock(gate) + end +end + +function Ancient.gate_lock_glyph(gate, lock_id, glyph) -- real glyph id + Ancient.gate_clear_glyph(gate, lock_id, true) + if glyph and (lock_id > 1 or Ancient.gtf(glyph)) then + gate.locked_glyphs[lock_id] = glyph + gate.locked_glyphs_entities[lock_id] = gate.shunts[lock_id].surface.create_entity{ + name = Ancient.name_gate_glyph_prefix .. glyph .. Ancient.name_gate_glyph_locked_suffix, -- suffix changes render layer + position = { + x = gate.position.x + Ancient.gate_parts_locked_glyphs[lock_id][1], + y = gate.position.y + Ancient.gate_parts_locked_glyphs[lock_id][2] + } + } + gate.locked_glyphs_entities[lock_id].destructible = false + end + + if not (gate.platform_energy_interfaces[lock_id] and gate.platform_energy_interfaces[lock_id].valid) then + gate.platform_energy_interfaces[lock_id] = gate.shunts[lock_id].surface.create_entity{ + name = Ancient.gate_parts_platform.energy_interface.name, + position = {x = gate.position.x + Ancient.gate_parts_platform.energy_interface.position[1], y = gate.position.y + Ancient.gate_parts_platform.energy_interface.position[2]}, + direction = defines.direction.north, + force = "neutral" + } + gate.platform_energy_interfaces[lock_id].destructible = false + gate.platform_energy_interfaces[lock_id].rotatable = false + gate.platform_energy_interfaces[lock_id].energy = 1000000000000 -- max out to start + end + Ancient.gate_update_indicators_lock(gate) +end + +function Ancient.gate_try_open_portal(gate) + if not (gate.locked_glyphs and gate.lock_temperatures and global.dimensional_anchors) then return end + local n_locked = 0 + for i = 1, 8, 1 do + if not gate.locked_glyphs[i] then return end + if not (gate.lock_temperatures[i] and gate.lock_temperatures[i] <= Ancient.gate_temperature_required) then return end + end + local active_anchors = 0 + for zone_index, anchor in pairs(global.dimensional_anchors) do + if anchor.active then active_anchors = active_anchors + 1 end + end + if active_anchors < 8 then return end + + -- still going, all good + gate.status = "opening-portal" + gate.status_progress = 0 + gate.activation_fx = gate.activation_fx or {} + for _, fx in pairs(gate.activation_fx) do + rendering.destroy(fx) + end + gate.activation_fx.cloud_1 = rendering.draw_animation{ + animation=Ancient.name_gate_cloud, + target=gate.position, + surface=gate.surface, + x_scale = 2.5 / 100, + y_scale = 2 / 100, + tint = Ancient.gate_cloud_tint_1, + animation_speed = -1 + } + gate.activation_fx.cloud_2 = rendering.draw_animation{ + animation=Ancient.name_gate_cloud, + target=gate.position, + surface=gate.surface, + x_scale = 2.5 / 100, + y_scale = 2 / 100, + tint = Ancient.gate_cloud_tint_2, + animation_speed = 0.5, + orientation = 0.5 + } +end + + +function Ancient.gate_get_glyph_at_lock(gate, lock_id) + local lock_rotation = (lock_id-0.5)/8*64 + local effective_rotation = (lock_rotation - gate.rotation) + local snapped_rotation = math.floor(effective_rotation +0.5) % 64 + if snapped_rotation <= 0 then snapped_rotation = snapped_rotation + 64 end + local glyph = gate.glyph_order[snapped_rotation] + return glyph +end + + +function Ancient.on_research_finished(event) + + local force = event.research.force + Ancient.update_force_unlocks(force.name) + + if event.research.name == Ancient.name_tech_coordinates then + local force_data = global.forces[force.name] + if force_data then + if force.technologies[Ancient.name_tech_coordinates].enabled then + local level = force.technologies[Ancient.name_tech_coordinates].level - 1 + if force.technologies[Ancient.name_tech_coordinates].researched then + level = level + 1 + end + if level >= 1 then + if not force_data.coordinates_discovered then + force_data.coordinates_discovered = {} + end + while level > #force_data.coordinates_discovered do + local glyph_id = global.gco[#force_data.coordinates_discovered+1] + table.insert(force_data.coordinates_discovered, glyph_id) + local coordinate = Ancient.cryptf4b({glyph_id}) + force.print({"space-exploration.starmapping-found-constellation", "[img=entity/"..mod_prefix .. "glyph-a-energy-"..glyph_id.."]"}) + end + end + end + end + end +end +Event.addListener(defines.events.on_research_finished, Ancient.on_research_finished) + +function Ancient.update_force_unlocks(force_name) + local force = game.forces[force_name] + if global.gate and global.gate.status ~= "fragments" then + if not force.technologies[Ancient.name_tech_coordinates].enabled then + force.technologies[Ancient.name_tech_coordinates].enabled = true + force.print({"space-exploration.technology-unlocked", "[img=technology."..Ancient.name_tech_coordinates.."]",{"technology-name."..Ancient.name_tech_coordinates}}) + end + if not force.technologies[Ancient.name_tech_anchor].enabled then + force.print({"space-exploration.technology-unlocked", "[img=technology."..Ancient.name_tech_anchor.."]",{"technology-name."..Ancient.name_tech_anchor}}) + force.technologies[Ancient.name_tech_anchor].enabled = true + end + else + force.technologies[Ancient.name_tech_coordinates].enabled = false + force.technologies[Ancient.name_tech_anchor].enabled = false + end +end + +function Ancient.update_unlocks() + for force_name, forcedata in pairs(global.forces) do -- only player forces + Ancient.update_force_unlocks(force_name) + end +end + +return Ancient diff --git a/space-exploration_0.5.80/space-exploration/scripts/arco.lua b/space-exploration_0.5.80/space-exploration/scripts/arco.lua new file mode 100644 index 0000000..d30c042 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/arco.lua @@ -0,0 +1,161 @@ +local Arco = {} + +Arco.name_gravimetrics_lab = mod_prefix.."space-gravimetrics-laboratory" +Arco.name_arcosphere_collector = mod_prefix.."arcosphere-collector" +Arco.name_arcosphere = mod_prefix.."arcosphere" +Arco.collection_global = 0.8 +Arco.collection_local = 0.2 -- there are 44 space zones so this needs to be low, 0.2 means 8.8x the number of spheres are available. + +function Arco.collector_get_orbs(force_name, zone_index) + local forcedata = global.forces[force_name] + + -- global factor + forcedata.arcosphere_collectors_launched = forcedata.arcosphere_collectors_launched or 0 + forcedata.arcospheres_collected = forcedata.arcospheres_collected or 0 + + local launched_global = forcedata.arcosphere_collectors_launched + local collected_next_global = math.ceil(Arco.collection_global * (math.log(launched_global+1+10)*50-math.log(10)*50)) + local collect_global = math.max(0, collected_next_global - forcedata.arcospheres_collected) + + -- local factor + forcedata.zone_arcospheres = forcedata.zone_arcospheres or {} + forcedata.zone_arcospheres[zone_index] = forcedata.zone_arcospheres[zone_index] or {} + forcedata.zone_arcospheres[zone_index].arcosphere_collectors_launched = forcedata.zone_arcospheres[zone_index].arcosphere_collectors_launched or 0 + forcedata.zone_arcospheres[zone_index].arcospheres_collected = forcedata.zone_arcospheres[zone_index].arcospheres_collected or 0 + + local launched_local = forcedata.zone_arcospheres[zone_index].arcosphere_collectors_launched + local collected_next_local = math.ceil(Arco.collection_local * (math.log(launched_local+1+10)*50-math.log(10)*50)) + local collect_local = math.max(0, collected_next_local - forcedata.zone_arcospheres[zone_index].arcospheres_collected) + + Log.trace("launched global "..launched_global.." local "..launched_local) + Log.trace("collect global "..collect_global.." local "..collect_local) + return collect_global, collect_local -- returns 2 values +end + +function Arco.collector_increment(force_name, zone_index) + local forcedata = global.forces[force_name] + + forcedata.arcosphere_collectors_launched = (forcedata.arcosphere_collectors_launched or 0) + 1 + + forcedata.zone_arcospheres = forcedata.zone_arcospheres or {} + forcedata.zone_arcospheres[zone_index] = forcedata.zone_arcospheres[zone_index] or {} + forcedata.zone_arcospheres[zone_index].arcosphere_collectors_launched = (forcedata.zone_arcospheres[zone_index].arcosphere_collectors_launched or 0) + 1 +end + +function Arco.on_rocket_launched(event) + if event.rocket and event.rocket.valid then + local zone = Zone.from_surface(event.rocket.surface) + if event.rocket.get_item_count(Arco.name_arcosphere_collector) > 0 then + if zone and zone.type == "asteroid-field" then + local inv = event.rocket_silo.get_inventory(defines.inventory.rocket_silo_result) + local empty = inv.count_empty_stacks(true) + local forcedata = global.forces[event.rocket.force.name] + local inserted = 0 + local spheres_global, spheres_local = Arco.collector_get_orbs(event.rocket.force.name, zone.index) -- gets 2 values + Log.trace("on_rocket_launched empty slots: " .. empty) + if empty > 0 then + if spheres_global + spheres_local > 0 then + inserted = inserted + inv.insert({name=Arco.name_arcosphere, count= spheres_global + spheres_local}) + end + if inserted > 1 then + event.rocket.force.item_production_statistics.on_flow(Arco.name_arcosphere, inserted) + end + end + local inserted_global = math.min(spheres_global, inserted) -- remove from global pool first + local inserted_local = inserted - inserted_global + if inserted_global > 0 then + forcedata.arcospheres_collected = (forcedata.arcospheres_collected or 0) + inserted_global + end + if inserted_local > 0 then + forcedata.zone_arcospheres[zone.index].arcospheres_collected = (forcedata.zone_arcospheres[zone.index].arcospheres_collected or 0) + inserted_local + end + Arco.collector_increment(event.rocket.force.name, zone.index) + end + end + end +end +Event.addListener(defines.events.on_rocket_launched, Arco.on_rocket_launched) + +function Arco.on_rocket_launch_ordered(event) + if event.rocket and event.rocket.valid then + local zone = Zone.from_surface(event.rocket.surface) + if event.rocket.get_item_count(Arco.name_arcosphere_collector) > 0 then + if not (zone and zone.type == "asteroid-field") then + -- launch location is invalid. + local tick_task = new_tick_task("force-message") + tick_task.force_name = event.rocket.force.name + tick_task.message = {"space-exploration.arcosphere_collector_invalid_launch"} + tick_task.delay_until = game.tick + 750 --5s + event.rocket.remove_item({name=Arco.name_arcosphere_collector, count=1}) + end + end + end +end +Event.addListener(defines.events.on_rocket_launch_ordered, Arco.on_rocket_launch_ordered) + +function Arco.on_entity_created(event) + + local entity + if event.entity and event.entity.valid then entity = event.entity end + if event.created_entity and event.created_entity.valid then entity = event.created_entity end + if not entity then return end + + if entity.name == Arco.name_gravimetrics_lab then + global.gravimetrics_labs = global.gravimetrics_labs or {} + global.gravimetrics_labs[entity.unit_number] = { + unit_unber = entity.unit_number, + force_name = entity.force.name, + entity = entity, + products_finished = 0 + } + end +end +Event.addListener(defines.events.on_built_entity, Arco.on_entity_created) +Event.addListener(defines.events.on_robot_built_entity, Arco.on_entity_created) +Event.addListener(defines.events.script_raised_built, Arco.on_entity_created) +Event.addListener(defines.events.script_raised_revive, Arco.on_entity_created) + +function Arco.reset_surface(surface) + for _, entity in pairs(surface.find_entities_filtered{name = Arco.name_gravimetrics_lab}) do + Arco.on_entity_created({entity = entity}) + end +end + +function Arco.swap_recipe(lab) + local recipe = lab.entity.get_recipe() + local set_recipe + if recipe then + if string.find(recipe.name, "-alt", 1, true) then + set_recipe = Util.replace(recipe.name, "-alt", "") + else + if game.recipe_prototypes[recipe.name.."-alt"] then + set_recipe = recipe.name.."-alt" + end + end + end + if set_recipe then + local crafting_progress = lab.entity.crafting_progress + lab.entity.set_recipe(set_recipe) + lab.entity.crafting_progress = crafting_progress + end +end + +function Arco.on_nth_tick_600() + if global.gravimetrics_labs then + for unit_number, lab in pairs(global.gravimetrics_labs) do + if lab.entity and lab.entity.valid then + if lab.entity.products_finished ~= lab.products_finished then + lab.products_finished = lab.entity.products_finished + if math.random() < 0.314 then + Arco.swap_recipe(lab) + end + end + else + global.gravimetrics_labs[unit_number] = nil + end + end + end +end +Event.addListener("on_nth_tick_60", Arco.on_nth_tick_600) -- 10 seconds + +return Arco diff --git a/space-exploration_0.5.80/space-exploration/scripts/beacon.lua b/space-exploration_0.5.80/space-exploration/scripts/beacon.lua new file mode 100644 index 0000000..98d6200 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/beacon.lua @@ -0,0 +1,194 @@ +local Beacon = {} + +-- Note: supply_area_distance -- extends from edge of collision box +Beacon.affected_types = {"assembling-machine", "furnace", "lab", "mining-drill", "rocket-silo"} + +function Beacon.get_beacon_prototypes() + if not Beacon.list_beacon_prototypes then + Beacon.list_beacon_prototypes = {} + for name, prototype in pairs(game.entity_prototypes) do + if prototype.type == "beacon" and prototype.supply_area_distance then + table.insert(Beacon.list_beacon_prototypes, prototype) + end + end + end + return Beacon.list_beacon_prototypes +end + +function Beacon.get_max_beacon_range() + if not Beacon.max_beacon_range then + Beacon.max_beacon_range = 0 + for _, prototype in pairs(Beacon.list_beacon_prototypes()) do + if prototype.supply_area_distance > Beacon.max_beacon_range then + Beacon.max_beacon_range = prototype.supply_area_distance + end + end + end + return Beacon.max_beacon_range +end + +function Beacon.count_affecting_beacons(entity) + local count = 0 + + for _, prototype in pairs(Beacon.get_beacon_prototypes()) do + local area = util.area_extend(entity.bounding_box, prototype.supply_area_distance) + count = count + entity.surface.count_entities_filtered{type="beacon", name=prototype.name, area=area} + end + + return count +end + +function Beacon.set_overload_state(entity) + if entity.active == true then + entity.active = false + entity.surface.create_entity{ + name = "flying-text", + position = entity.position, + text = {"space-exploration.beacon-overload"} + } + global.beacon_overloaded_entities = global.beacon_overloaded_entities or {} + global.beacon_overloaded_entities[entity.unit_number] = entity + + global.beacon_overloaded_shapes = global.beacon_overloaded_shapes or {} + local shape_id = global.beacon_overloaded_shapes[entity.unit_number] + if shape_id and rendering.is_valid(shape_id) then rendering.destroy(shape_id) end -- shouldn't happen but best to check if other mods broke something + shape_id = rendering.draw_sprite{ + sprite = "virtual-signal/"..mod_prefix.."beacon-overload", + surface = entity.surface, + target = entity, + x_scale = 1, + y_scale = 1, + target_offset = entity.prototype.alert_icon_shift + } + global.beacon_overloaded_shapes[entity.unit_number] = shape_id + end + + -- Regardless of whether entity is active, issue a beacon overload alert to all + -- players on the entity's force. Alert is only issued if the reason for inactivation + -- was beacon overload + if global.beacon_overloaded_entities[entity.unit_number] then + for _, player in pairs(entity.force.players) do + player.add_custom_alert(entity, + {type="virtual", name=mod_prefix.."beacon-overload"}, + {"space-exploration.beacon-overload-alert", "[img=virtual-signal/" .. mod_prefix .. "beacon-overload]", "[img=entity/" .. entity.name .. "]"}, + true) + end + end +end + +function Beacon.unset_overload_state(entity) + if not entity.active then + -- Before reactivating entity, make sure it is present in the overloaded entities list + -- Otherwise it was probably deactivated for a different reason altogether and should + -- not be reactivated by this function + global.beacon_overloaded_entities = global.beacon_overloaded_entities or {} + if global.beacon_overloaded_entities[entity.unit_number] then + entity.active = true + entity.surface.create_entity{ + name = "flying-text", + position = entity.position, + text = {"space-exploration.beacon-overload-ended"} + } + global.beacon_overloaded_entities[entity.unit_number] = nil + + for interface, functions in pairs(remote.interfaces) do -- allow other mods to deactivate after + if interface ~= "space-exploration" and functions["on_entity_activated"] then + remote.call(interface, "on_entity_activated", {entity=entity, mod="space-exploration"}) + end + end + end + + -- Remove associated overload shapes if they exist. + global.beacon_overloaded_shapes = global.beacon_overloaded_shapes or {} + if global.beacon_overloaded_shapes[entity.unit_number] then + local shape_id = global.beacon_overloaded_shapes[entity.unit_number] + if rendering.is_valid(shape_id) then rendering.destroy(shape_id) end + global.beacon_overloaded_shapes[entity.unit_number] = nil + end + end +end + +function Beacon.validate_entity(entity, ignore_count) + -- make sure not affected by more than 1 beacon + if (not entity.prototype.allowed_effects) or table_size(entity.prototype.allowed_effects) == 0 + or (not entity.prototype.module_inventory_size) or entity.prototype.module_inventory_size == 0 then return end + + local ignore_count = ignore_count or 0 + local beacons = Beacon.count_affecting_beacons(entity) + + if beacons > 1 + ignore_count then + Beacon.set_overload_state(entity) + else + -- TODO: add hook here so other things can cancel + Beacon.unset_overload_state(entity) + end +end + +function Beacon.validate_beacon(entity, is_deconstructing) + local prototype = entity.prototype + local area = util.area_extend(entity.bounding_box, prototype.supply_area_distance) + local structures = entity.surface.find_entities_filtered{type = Beacon.affected_types, area = area} + local ignore_count = is_deconstructing and 1 or 0 + + for _, structure in pairs(structures) do + Beacon.validate_entity(structure, ignore_count) + end +end + +function Beacon.on_entity_created(event) + local entity + if event.entity and event.entity.valid then + entity = event.entity + end + if event.created_entity and event.created_entity.valid then + entity = event.created_entity + end + if not entity then return end + if entity.type == "beacon" then + Beacon.validate_beacon(entity) + elseif util.table_contains(Beacon.affected_types, entity.type) then + Beacon.validate_entity(entity) + end +end +Event.addListener(defines.events.on_built_entity, Beacon.on_entity_created) +Event.addListener(defines.events.on_robot_built_entity, Beacon.on_entity_created) +Event.addListener(defines.events.script_raised_built, Beacon.on_entity_created) +Event.addListener(defines.events.script_raised_revive, Beacon.on_entity_created) + +function Beacon.on_entity_removed(event) + if event.entity and event.entity.valid then + if event.entity.type == "beacon" then + -- do validation but counting 1 beacon fewer + Beacon.validate_beacon(event.entity, true) + end + end +end + +Event.addListener(defines.events.on_player_mined_entity, Beacon.on_entity_removed) +Event.addListener(defines.events.on_robot_mined_entity, Beacon.on_entity_removed) +Event.addListener(defines.events.on_entity_died, Beacon.on_entity_removed) +Event.addListener(defines.events.script_raised_destroy, Beacon.on_entity_removed) + +function Beacon.validate_overloaded_entities() + -- Cleanup function to be run every 10 seconds, re-evaluating overload status + -- to determine if it's still appropriate, removing references to no-longer-valid + -- entities, and re-issuing alerts if necessary + global.beacon_overloaded_entities = global.beacon_overloaded_entities or {} + global.beacon_overloaded_shapes = global.beacon_overloaded_shapes or {} + + for entity_number, entity in pairs(global.beacon_overloaded_entities) do + if entity.valid then + -- If entity is still valid, re-evaluate whether it is still correctly in overload + -- in case the causative beacon was removed without firing an event + Beacon.validate_entity(entity) + else + -- Remove references to these entities as they no longer exist + global.beacon_overloaded_entities[entity_number] = nil + global.beacon_overloaded_shapes[entity_number] = nil + end + end +end + +Event.addListener("on_nth_tick_600", Beacon.validate_overloaded_entities) + +return Beacon diff --git a/space-exploration_0.5.80/space-exploration/scripts/big-turbine.lua b/space-exploration_0.5.80/space-exploration/scripts/big-turbine.lua new file mode 100644 index 0000000..6ffe517 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/big-turbine.lua @@ -0,0 +1,99 @@ +local BigTurbine = {} + +BigTurbine.name_big_turbine = mod_prefix.."big-turbine" +BigTurbine.name_big_turbine_generator = mod_prefix.."big-turbine-generator" +BigTurbine.name_big_turbine_tank = mod_prefix.."big-turbine-tank" +BigTurbine.big_turbine_tank_offset = 4.5 + +function BigTurbine.on_entity_created(event) + local entity + if event.entity and event.entity.valid then + entity = event.entity + end + if event.created_entity and event.created_entity.valid then + entity = event.created_entity + end + if not entity then return end + if entity.name == BigTurbine.name_big_turbine then + local direction_vector = Util.vector_multiply(Util.direction_to_vector(entity.direction), -1) + local tank_position_offset = Util.vector_multiply(direction_vector, BigTurbine.big_turbine_tank_offset) + local tank_position = Util.vectors_add(entity.position, tank_position_offset) + + local generator = entity.surface.create_entity{ + name = BigTurbine.name_big_turbine_generator, + position = entity.position, + direction = entity.direction, + force = entity.force + } + generator.destructible = false + local tank = entity.surface.create_entity{ + name = BigTurbine.name_big_turbine_tank, + position = tank_position, + direction = entity.direction, + force = entity.force + } + if tank then + tank.destructible = false + else + game.print("big-turbine-tank error") + end + end +end +Event.addListener(defines.events.on_built_entity, BigTurbine.on_entity_created) +Event.addListener(defines.events.on_robot_built_entity, BigTurbine.on_entity_created) +Event.addListener(defines.events.script_raised_built, BigTurbine.on_entity_created) +Event.addListener(defines.events.script_raised_revive, BigTurbine.on_entity_created) + + +function BigTurbine.on_removed_entity(event) + if event.entity and event.entity.valid and event.entity.surface + and event.entity.name == BigTurbine.name_big_turbine then + local entity = event.entity + + local direction_vector = Util.vector_multiply(Util.direction_to_vector(entity.direction), -1) + local tank_position_offset = Util.vector_multiply(direction_vector, BigTurbine.big_turbine_tank_offset) + local tank_position = Util.vectors_add(entity.position, tank_position_offset) + + local generator = entity.surface.find_entity(BigTurbine.name_big_turbine_generator, entity.position) + if generator then generator.destroy() end + + local tank = entity.surface.find_entity(BigTurbine.name_big_turbine_tank, tank_position) + if tank then tank.destroy() end + + end +end +Event.addListener(defines.events.on_entity_died, BigTurbine.on_removed_entity) +Event.addListener(defines.events.on_robot_mined_entity, BigTurbine.on_removed_entity) +Event.addListener(defines.events.on_player_mined_entity, BigTurbine.on_removed_entity) +Event.addListener(defines.events.script_raised_destroy, BigTurbine.on_removed_entity) + +function BigTurbine.on_player_rotated_entity(event) + if event.entity and event.entity.valid and event.entity.surface + and event.entity.name == BigTurbine.name_big_turbine then + local entity = event.entity + + local direction_vector = Util.vector_multiply(Util.direction_to_vector(entity.direction), -1) + local tank_position_offset = Util.vector_multiply(direction_vector, BigTurbine.big_turbine_tank_offset) + local tank_position = Util.vectors_add(entity.position, tank_position_offset) + + local tank = entity.surface.find_entity(BigTurbine.name_big_turbine_tank, tank_position) + if tank then + local direction_vector = Util.direction_to_vector(entity.direction) + local tank_position_offset = Util.vector_multiply(direction_vector, BigTurbine.big_turbine_tank_offset) + local tank_position = Util.vectors_add(entity.position, tank_position_offset) + tank.teleport(tank_position) + tank.rotate() + tank.rotate() + end + + end +end +Event.addListener(defines.events.on_player_rotated_entity, BigTurbine.on_player_rotated_entity) + +function BigTurbine.reset_surface(surface) + for _, entity in pairs(surface.find_entities_filtered{name = BigTurbine.name_big_turbine_tank }) do + entity.direction = entity.direction + end +end + +return BigTurbine diff --git a/space-exploration_0.5.80/space-exploration/scripts/capsule.lua b/space-exploration_0.5.80/space-exploration/scripts/capsule.lua new file mode 100644 index 0000000..da338dc --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/capsule.lua @@ -0,0 +1,311 @@ +Capsule = {} + +-- constants +Capsule.name_space_capsule_gui_root = mod_prefix.."space-capsule-gui" +Capsule.name_space_capsule = mod_prefix.."space-capsule" +Capsule.name_space_capsule_vehicle = mod_prefix.."space-capsule-_-vehicle" +Capsule.name_space_capsule_vehicle_shadow = mod_prefix.."space-capsule-_-vehicle-shadow" +Capsule.name_space_capsule_vehicle_light = mod_prefix.."light-space-capsule" +Capsule.name_space_capsule_vehicle_light_launch = mod_prefix.."light-space-capsule-launch" + +function Capsule.launch(vehicle) + + local current_zone = Zone.from_surface(vehicle.surface) + if current_zone and Zone.is_space(current_zone) then + + local shadow = vehicle.surface.find_entities_filtered{ area=util.position_to_area(vehicle.position, 1), name=Capsule.name_space_capsule_vehicle_shadow}[1] + local light = vehicle.surface.find_entities_filtered{ area=util.position_to_area(vehicle.position, 1), name=Capsule.name_space_capsule_vehicle_light}[1] + if light then light.destroy() end + light = vehicle.surface.create_entity{name = Capsule.name_space_capsule_vehicle_light_launch, position = vehicle.position, target=vehicle, speed = 0} + + local passengers = {} -- characters not players + if vehicle.get_driver() then + table.insert(passengers, vehicle.get_driver()) + end + if vehicle.get_passenger() then + table.insert(passengers, vehicle.get_passenger()) + end + + for _, passenger in pairs(passengers) do + if passenger.valid then passenger.destructible = false end + if remote.interfaces["jetpack"] and remote.interfaces["jetpack"]["block_jetpack"] then + remote.call("jetpack", "block_jetpack", {character=passenger}) + end + if passenger.player then + close_own_guis(passenger.player) + end + end + + local target_zone = Zone.find_nearest_solid_zone_from_zone(current_zone) + Zone.get_make_surface(target_zone) + + local zone_assets = Zone.get_force_assets(vehicle.force.name, target_zone.index) + + local landing_pads = {} + if zone_assets.rocket_landing_pad_names then + for name, pads in pairs(zone_assets.rocket_landing_pad_names) do + for _, pad in pairs(pads) do + table.insert(landing_pads, pad) + end + end + end + + local destination_position + if #landing_pads > 0 then + local pad = landing_pads[math.random(#landing_pads)] + if pad and pad.container and pad.container.valid then + local surface = Zone.get_make_surface(target_zone) + destination_position = surface.find_non_colliding_position(Capsule.name_space_capsule_vehicle, pad.container.position, 32, 1) or pad.container.position + end + end + if not destination_position then + destination_position = Zone.find_zone_landing_position(target_zone) + end + + global.space_capsule_launches = global.space_capsule_launches or {} + global.space_capsule_launches[vehicle.unit_number] = { + force_name = vehicle.force.name, + unit_number = vehicle.unit_number, + vehicle = vehicle, + shadow = shadow, + light = light, + start_position = vehicle.position, + launch_progress = 1, + destination_zone = target_zone, + destination_position = destination_position, + passengers = passengers, + } + + else -- invalid + if vehicle.get_driver() and vehicle.get_driver().player then + vehicle.get_driver().player.print({"space-exploration.capsule_invalid_launch_location"}) + end + if vehicle.get_passenger() and vehicle.get_passenger().player then + vehicle.get_driver().player.print({"space-exploration.capsule_invalid_launch_location"}) + end + end + +end + +function Capsule.gui_close (player) + if player.gui.left[Capsule.name_space_capsule_gui_root] then + player.gui.left[Capsule.name_space_capsule_gui_root].destroy() + end +end + +function Capsule.gui_open(player) + + local gui = player.gui.left + close_own_guis(player) + + local container = gui.add{ type = "frame", name = Capsule.name_space_capsule_gui_root, style="space_platform_container", direction="vertical"} + + local zone = Zone.from_surface(player.surface) + + local title = container.add{ type="label", name="title", caption={"space-exploration.space-capsule"}, style="space_platform_title"} + if not zone then + container.add{ type="label", name="status", caption={"space-exploration.capsule_status_invalid_launch_location"}} + container.add{ type="label", name="info", caption={"space-exploration.capsule_info"}} + elseif Zone.is_solid(zone) then + container.add{ type="label", name="status", caption={"space-exploration.capsule_not_enough_thrust", zone.type, zone.name}} + container.add{ type="label", name="info", caption={"space-exploration.capsule_info"}} + else + local destination = Zone.find_nearest_solid_zone_from_zone(zone) + container.add{ type="label", name="info", caption={"space-exploration.capsule_info"}} + if destination then + container.add{ type="label", name="status", caption={"space-exploration.capsule_status_ready"}} + container.add{ type="label", name="destination", caption={"space-exploration.capsule_destination", destination.name}} + local launch_button = container.add{ type="button", name="launch", caption={"space-exploration.button-launch"}, style="confirm_button"} + launch_button.style.top_margin = 10 + launch_button.style.horizontally_stretchable = true + launch_button.style.horizontal_align = "left" + else + container.add{ type="label", name="status", caption={"space-exploration.capsule_status_invalid_launch_location"}} + end + end + +end + + +function Capsule.on_gui_click(event) + if event.element and event.element.valid and event.element.name == "launch" then + local element = event.element + local root = gui_element_or_parent(element, Capsule.name_space_capsule_gui_root) + if root then + local player = game.players[event.player_index] + local vehicle = player.vehicle + if vehicle then + Capsule.launch(vehicle) + end + end + end + +end +Event.addListener(defines.events.on_gui_click, Capsule.on_gui_click) + + +function Capsule.on_tick() + + if global.space_capsule_launches then + for _, space_capsule in pairs(global.space_capsule_launches) do + if not(space_capsule.vehicle and space_capsule.vehicle.valid) then + global.space_capsule_launches[space_capsule.unit_number] = nil + if space_capsule.rocket_sound and space_capsule.rocket_sound.valid then + space_capsule.rocket_sound.destroy() + end + if space_capsule.light and space_capsule.light.valid then + space_capsule.light.destroy() + end + if space_capsule.shadow and space_capsule.shadow.valid then + space_capsule.shadow.destroy() + end + else + space_capsule.launch_progress = space_capsule.launch_progress + 1 + local animation_speed = 1/3 + local animation_move_frame = 19 + local target_surface = Zone.get_make_surface(space_capsule.destination_zone) + + space_capsule.vehicle.destructible = false + + if space_capsule.launch_progress < animation_move_frame / animation_speed + 60 * 5 then + local animation_frames = 24 + local animation_frame = math.max(math.min(math.floor(space_capsule.launch_progress * animation_speed), animation_frames), 1) + + if animation_frame == 1 and not space_capsule.sounds_frame_1 then + space_capsule.sounds_frame_1 = true + space_capsule.rocket_sound = space_capsule.vehicle.surface.create_entity{ + name=mod_prefix.."sound-continous-silo-rocket", position=space_capsule.vehicle.position, target=space_capsule.vehicle, speed=0} + space_capsule.vehicle.surface.create_entity{ + name=mod_prefix.."sound-silo-clamps-on", position=space_capsule.vehicle.position, target=space_capsule.vehicle, speed=0} + space_capsule.vehicle.surface.create_entity{ + name=mod_prefix.."sound-machine-close", position=space_capsule.vehicle.position, target=space_capsule.vehicle, speed=0} + + end + if animation_frame == 19 and not space_capsule.sounds_frame_19 then + space_capsule.sounds_frame_19 = true + space_capsule.vehicle.surface.create_entity{ + name=mod_prefix.."sound-train-breaks", position=space_capsule.vehicle.position, target=space_capsule.vehicle, speed=0} + end + + local move_progress = math.max( 0, space_capsule.launch_progress - (animation_move_frame / animation_speed)) + local move_y = math.pow( math.max(0, move_progress), 1.5) / 100 + local position = { + x = space_capsule.start_position.x, + y = space_capsule.start_position.y - move_y + } + + if space_capsule.light then + space_capsule.light.teleport({x = position.x, y = position.y + 1}) + end + if space_capsule.rocket_sound and space_capsule.rocket_sound.valid then + space_capsule.rocket_sound.teleport(position) + end + space_capsule.vehicle.teleport(position) + space_capsule.vehicle.orientation = (animation_frame - 1) / animation_frames + if space_capsule.shadow then + space_capsule.shadow.graphics_variation = animation_frame + space_capsule.shadow.teleport({ + x = space_capsule.start_position.x + move_y, + y = space_capsule.start_position.y + }) + end + for _, passenger in pairs(space_capsule.passengers) do + if passenger.valid then + passenger.teleport({x = position.x, y = position.y - 0.5}) -- behind graphic + end + end + else + -- done + global.space_capsule_launches[space_capsule.unit_number] = nil + if space_capsule.rocket_sound and space_capsule.rocket_sound.valid then space_capsule.rocket_sound.destroy() end + if space_capsule.light and space_capsule.light.valid then space_capsule.light.destroy() end + if space_capsule.shadow and space_capsule.shadow.valid then space_capsule.shadow.destroy() end + + local safe_pos = target_surface.find_non_colliding_position(Capsule.name_space_capsule_vehicle, space_capsule.destination_position, 32, 1) + safe_pos = safe_pos or space_capsule.destination_position + target_surface.request_to_generate_chunks(safe_pos, 1) + target_surface.force_generate_chunk_requests() + local vehicle_2 = target_surface.create_entity{ + name = space_capsule.vehicle.name, + position = safe_pos, + force = space_capsule.vehicle.force + } + + local inv_a = space_capsule.vehicle.get_inventory(defines.inventory.car_trunk) + local inv_b = vehicle_2.get_inventory(defines.inventory.car_trunk) + Util.copy_inventory(inv_a, inv_b) + + space_capsule.vehicle.destroy() + space_capsule.vehicle = vehicle_2 + space_capsule.vehicle.orientation = 0 + space_capsule.shadow = target_surface.create_entity{name = Capsule.name_space_capsule_vehicle_shadow, position=safe_pos, force = "neutral"} + space_capsule.shadow.graphics_variation = 1 + space_capsule.light = target_surface.create_entity{name = Capsule.name_space_capsule_vehicle_light, position = space_capsule.vehicle.position, speed = 0, target = space_capsule.vehicle} + + for _, passenger in pairs(space_capsule.passengers) do + if passenger.valid then + passenger.destructible = true + if remote.interfaces["jetpack"] and remote.interfaces["jetpack"]["unblock_jetpack"] then + remote.call("jetpack", "unblock_jetpack", {character=passenger}) + end + teleport_character_to_surface(passenger, target_surface, safe_pos) + end + end + end + end + end + end + +end +-- TODO: only register this if that are any +Event.addListener(defines.events.on_tick, Capsule.on_tick) + +function Capsule.on_entity_removed(event) + local entity = event.entity + if entity and entity.valid then + if entity.name == Capsule.name_space_capsule_vehicle then + local shadow = entity.surface.find_entities_filtered{ area=util.position_to_area(entity.position, 1), name=Capsule.name_space_capsule_vehicle_shadow}[1] + local light = entity.surface.find_entities_filtered{ area=util.position_to_area(entity.position, 1), name=Capsule.name_space_capsule_vehicle_light}[1] + if shadow then shadow.destroy() end + if light then light.destroy() end + end + end +end +Event.addListener(defines.events.on_entity_died, Capsule.on_entity_removed) +Event.addListener(defines.events.on_robot_mined_entity, Capsule.on_entity_removed) +Event.addListener(defines.events.on_player_mined_entity, Capsule.on_entity_removed) +Event.addListener(defines.events.script_raised_destroy, Capsule.on_entity_removed) + +function Capsule.on_player_driving_changed_state(event) + local player = game.players[event.player_index] + if player then + if player.vehicle and player.vehicle.name == Capsule.name_space_capsule_vehicle then + Capsule.gui_open(player) + elseif player.gui.left[Capsule.name_space_capsule_gui_root] then + player.gui.left[Capsule.name_space_capsule_gui_root].destroy() + end + end +end +Event.addListener(defines.events.on_player_driving_changed_state, Capsule.on_player_driving_changed_state) + +function Capsule.on_entity_created(event) + local entity + if event.entity and event.entity.valid then + entity = event.entity + end + if event.created_entity and event.created_entity.valid then + entity = event.created_entity + end + if not entity then return end + if entity.name == Capsule.name_space_capsule_vehicle then + entity.orientation = 0 + entity.surface.create_entity{name = Capsule.name_space_capsule_vehicle_shadow, position = entity.position, force="neutral"} + entity.surface.create_entity{name = Capsule.name_space_capsule_vehicle_light, position = entity.position, speed = 0, target = entity} + end +end +Event.addListener(defines.events.on_built_entity, Capsule.on_entity_created) +Event.addListener(defines.events.on_robot_built_entity, Capsule.on_entity_created) +Event.addListener(defines.events.script_raised_built, Capsule.on_entity_created) +Event.addListener(defines.events.script_raised_revive, Capsule.on_entity_created) + +return Capsule diff --git a/space-exploration_0.5.80/space-exploration/scripts/compatibility/abandoned-ruins.lua b/space-exploration_0.5.80/space-exploration/scripts/compatibility/abandoned-ruins.lua new file mode 100644 index 0000000..72016ac --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/compatibility/abandoned-ruins.lua @@ -0,0 +1,14 @@ +local AbandonedRuins = {} +function AbandonedRuins.exclude_surfaces() + if remote.interfaces["AbandonedRuins"] and remote.interfaces["AbandonedRuins"]["exclude_surface"] then + remote.call("AbandonedRuins", "exclude_surface", "Vault") + remote.call("AbandonedRuins", "exclude_surface", "spaceship") + remote.call("AbandonedRuins", "exclude_surface", "Asteroid") + remote.call("AbandonedRuins", "exclude_surface", "Orbit") + remote.call("AbandonedRuins", "exclude_surface", "Foenestra") -- Note orbits, asteroid fields, etc should already be handled. + for _, space_zone in pairs(UniverseRaw.universe.space_zones) do + remote.call("AbandonedRuins", "exclude_surface", space_zone.name) + end + end +end +return AbandonedRuins diff --git a/space-exploration_0.5.80/space-exploration/scripts/compatibility/entity-move.lua b/space-exploration_0.5.80/space-exploration/scripts/compatibility/entity-move.lua new file mode 100644 index 0000000..c81a67d --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/compatibility/entity-move.lua @@ -0,0 +1,126 @@ +local EntityMove = {} + +-- whitelist is MUCH easier +EntityMove.whitelist_exact = { + "se-linked-container", + "se-pylon", + "se-pylon-substation", + "se-space-curved-rail", + "se-space-stright-rail", + "se-supercharger", + "se-delivery-cannon-chest", + "se-space-probe-rocket-silo", + "se-fluid-burner-generator", + +} +EntityMove.whitelist_find = { -- include grunded/spaced version, colour variants, etc + "se-linked-container", + "se-space-pipe", + "se-deep-space-transport-belt", + "se-deep-space-underground-belt", + "se-deep-space-splitter", + "se-addon-power-pole", + "se-naquium-heat-pipe", + "se-space-thermodynamics-laboratory", + "se-recycling-facility", + "se-space-mechanical-laboratory", + "se-pulveriser", + "se-space-assembling-machine", + "se-space-manufactory", + "se-lifesupport-facility", + "se-space-biochemical-laboratory", + "se-space-decontamination-facility", + "se-space-genetics-laboratory", + "se-space-growth-facility", + "se-fuel-refinery", + "se-space-radiation-laboratory", + "se-space-electromagnetics-laboratory", + "se-space-laser-laboratory", + "se-space-material-fabricator", + "se-space-laser-laboratory", + "se-space-particle-accelerator", + "se-space-particle-collider", + "se-space-plasma-generator", + "se-space-hypercooler", + "se-space-radiator", + "se-space-astrometrics-laboratory", + "se-space-gravimetrics-laboratory", + "se-space-supercomputer", + "se-space-laser-laboratory", + "se-space-telescope", + "se-space-science-lab", + "se-cargo-rocket-cargo-pod", + "se-space-laser-laboratory", + "se-big-heat-exchanger", + "se-antimatter-reactor", + "se-electric-boiler", + "se-space-solar-panel", + "se-space-accumulator", + "se-wide-beacon", +} + +function EntityMove.on_dolly_moved(event) + if event.moved_entity and event.moved_entity.valid then + local entity = event.moved_entity + if event.moved_entity.type == "beacon" then + local prototype = entity.prototype + local area = util.area_extend(entity.bounding_box, prototype.supply_area_distance) + local structures = entity.surface.find_entities_filtered{type = Beacon.affected_types, area = area} + for _, structure in pairs(structures) do + Beacon.validate_entity(structure, 0) + end + local start_area = Util.area_add_position(area, Util.vectors_delta(entity.position, event.start_pos)) + structures = entity.surface.find_entities_filtered{type = Beacon.affected_types, area = start_area} + for _, structure in pairs(structures) do + Beacon.validate_entity(structure, 0) + end + else + Beacon.validate_entity(entity, 0) + end + end +end + +function EntityMove.allow_move() + if remote.interfaces["PickerDollies"] and remote.interfaces["PickerDollies"]["add_blacklist_name"] then + for prototype_name, prototype in pairs(game.entity_prototypes) do + if string.starts(prototype_name, mod_prefix) then + local allowed = false + for _, name in pairs(EntityMove.whitelist_find) do + if string.find(prototype_name, name, 1, true) then + allowed = true + end + end + for _, name in pairs(EntityMove.whitelist_exact) do + if prototype_name == name then + allowed = true + end + end + if not allowed then + remote.call("PickerDollies", "add_blacklist_name", prototype_name) + end + end + end + end +end + +function EntityMove.on_load() + if remote.interfaces["PickerDollies"] and remote.interfaces["PickerDollies"]["dolly_moved_entity_id"] then + script.on_event(remote.call("PickerDollies", "dolly_moved_entity_id"), EntityMove.on_dolly_moved) + end +end +Event.addListener("on_load", EntityMove.on_load, true) + +function EntityMove.on_init() + if remote.interfaces["PickerDollies"] and remote.interfaces["PickerDollies"]["dolly_moved_entity_id"] then + script.on_event(remote.call("PickerDollies", "dolly_moved_entity_id"), EntityMove.on_dolly_moved) + end + EntityMove.allow_move() +end +Event.addListener("on_init", EntityMove.on_init, true) + +function EntityMove.on_configuration_changed() + EntityMove.allow_move() +end +Event.addListener("on_configuration_changed", EntityMove.on_configuration_changed, true) + +return EntityMove diff --git a/space-exploration_0.5.80/space-exploration/scripts/compatibility/miniloaders.lua b/space-exploration_0.5.80/space-exploration/scripts/compatibility/miniloaders.lua new file mode 100644 index 0000000..f5c9792 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/compatibility/miniloaders.lua @@ -0,0 +1,41 @@ +-- NOTE: Always use the Event object for events otherwise it replaces other event handlers. +if script.active_mods["miniloader"] then + local miniloader_util = require("__miniloader__/lualib/util.lua") + + local function miniloader_on_area_cloned(ev) + local miniloaders = miniloader_util.find_miniloaders{ + surface = ev.destination_surface, + area = ev.destination_area, + } + for _, loader in ipairs(miniloaders) do + miniloader_util.update_inserters(loader) + end + end + Event.addListener(defines.events.on_area_cloned, miniloader_on_area_cloned) + + local function miniloader_on_brush_cloned(ev) + local xmin = nil + local xmax = nil + local ymin = nil + local ymax = nil + for _, source_position in pairs(ev.source_positions) do + local x = source_position.x + local y = source_position.y + if xmin == nil or x < xmin then xmin = x end + if xmax == nil or x > xmax then xmax = x end + if ymin == nil or y < ymin then ymin = y end + if ymax == nil or y > ymax then ymax = y end + end + xmin = xmin + ev.destination_offset.x + xmax = xmax + 1 + ev.destination_offset.x + ymin = ymin + ev.destination_offset.y + ymax = ymax + 1 + ev.destination_offset.y + local ev2 = { + destination_surface = ev.destination_surface, + destination_area = {left_top={xmin,ymin},right_bottom={xmax,ymax}} + } + miniloader_on_area_cloned(ev2) + end + Event.addListener(defines.events.on_brush_cloned, miniloader_on_brush_cloned) + +end diff --git a/space-exploration_0.5.80/space-exploration/scripts/composites.lua b/space-exploration_0.5.80/space-exploration/scripts/composites.lua new file mode 100644 index 0000000..79389ab --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/composites.lua @@ -0,0 +1,98 @@ +local Composites = {} + +-- Simple composite_entites + +Composites.entities = { + ["pylon-construction"] = { + set = { + { name = mod_prefix.."pylon-construction"}, + { name = mod_prefix.."pylon-construction-roboport", destructible=false }, + } + }, + ["pylon-construction-radar"] = { + set = { + { name = mod_prefix.."pylon-construction-radar" }, + { name = mod_prefix.."pylon-construction-radar-radar", destructible=false }, + { name = mod_prefix.."pylon-construction-radar-roboport", destructible=false }, + } + } +} + +function Composites.on_entity_created(event) + local entity + if event.entity and event.entity.valid then + entity = event.entity + end + if event.created_entity and event.created_entity.valid then + entity = event.created_entity + end + if not entity then return end + for _, ce in pairs(Composites.entities) do + for i, struct in pairs(ce.set) do + if entity.name == struct.name then + for j, struct in pairs(ce.set) do + local e + if i == j then + e = entity + else + -- look for ghost or current + e = entity.surface.find_entity(struct.name, entity.position) + if not e then + local e_ghost = entity.surface.find_entities_filtered{ + ghost_name = struct.name, + position = entity.position + } + if e_ghost[1] then + local collides = nil + collides, e = e_ghost[1].silent_revive({return_item_request_proxy =false,raise_revive=false}) + end + end + if not e then + e = entity.surface.create_entity{ + name=struct.name, + position=entity.position, + direction=entity.direction, + force=entity.force + } + end + end + e.destructible = struct.destructible == nil and true or struct.destructible + end + return + end + end + end +end +Event.addListener(defines.events.on_built_entity, Composites.on_entity_created) +Event.addListener(defines.events.on_robot_built_entity, Composites.on_entity_created) +Event.addListener(defines.events.script_raised_built, Composites.on_entity_created) +Event.addListener(defines.events.script_raised_revive, Composites.on_entity_created) + + +function Composites.on_removed_entity(event) + if event.entity and event.entity.valid and event.entity.surface then + local entity = event.entity + for _, ce in pairs(Composites.entities) do + for i, struct in pairs(ce.set) do + if entity.name == struct.name then + for j, struct in pairs(ce.set) do + if j ~= i then + local e = entity.surface.find_entity(struct.name, entity.position) + if e then e.destroy() end + end + end + end + end + end + end +end +Event.addListener(defines.events.on_entity_died, Composites.on_removed_entity) +Event.addListener(defines.events.on_robot_mined_entity, Composites.on_removed_entity) +Event.addListener(defines.events.on_player_mined_entity, Composites.on_removed_entity) +Event.addListener(defines.events.script_raised_destroy, Composites.on_removed_entity) + +--function Composites.on_player_rotated_entity(event) +--end +--Event.addListener(defines.events.on_player_rotated_entity, Composites.on_player_rotated_entity) + +return Composites diff --git a/space-exploration_0.5.80/space-exploration/scripts/condenser-turbine.lua b/space-exploration_0.5.80/space-exploration/scripts/condenser-turbine.lua new file mode 100644 index 0000000..6c819bb --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/condenser-turbine.lua @@ -0,0 +1,105 @@ +local CondenserTurbine = {} + +CondenserTurbine.name_condenser_turbine = mod_prefix.."condenser-turbine" +CondenserTurbine.name_condenser_turbine_generator = mod_prefix.."condenser-turbine-generator" +CondenserTurbine.name_condenser_turbine_tank = mod_prefix.."condenser-turbine-tank" +CondenserTurbine.condenser_turbine_tank_offset = 2 + +function CondenserTurbine.on_entity_created(event) + local entity + if event.entity and event.entity.valid then + entity = event.entity + end + if event.created_entity and event.created_entity.valid then + entity = event.created_entity + end + if not entity then return end + if entity.name == CondenserTurbine.name_condenser_turbine then + local direction_vector = Util.vector_multiply(Util.direction_to_vector(entity.direction), -1) + local tank_position_offset = Util.vector_multiply(direction_vector, CondenserTurbine.condenser_turbine_tank_offset) + local tank_position = Util.vectors_add(entity.position, tank_position_offset) + + local generator = entity.surface.create_entity{ + name = CondenserTurbine.name_condenser_turbine_generator, + position = entity.position, + direction = entity.direction, + force = entity.force + } + generator.destructible = false + local tank = entity.surface.create_entity{ + name = CondenserTurbine.name_condenser_turbine_tank, + position = tank_position, + direction = entity.direction, + force = entity.force + } + if tank then + tank.destructible = false + else + game.print("condenser-turbine-tank error") + end + end +end +Event.addListener(defines.events.on_built_entity, CondenserTurbine.on_entity_created) +Event.addListener(defines.events.on_robot_built_entity, CondenserTurbine.on_entity_created) +Event.addListener(defines.events.script_raised_built, CondenserTurbine.on_entity_created) +Event.addListener(defines.events.script_raised_revive, CondenserTurbine.on_entity_created) + + +function CondenserTurbine.on_removed_entity(event) + if event.entity and event.entity.valid and event.entity.surface + and event.entity.name == CondenserTurbine.name_condenser_turbine then + local entity = event.entity + + local direction_vector = Util.vector_multiply(Util.direction_to_vector(entity.direction), -1) + local tank_position_offset = Util.vector_multiply(direction_vector, CondenserTurbine.condenser_turbine_tank_offset) + local tank_position = Util.vectors_add(entity.position, tank_position_offset) + + local generator = entity.surface.find_entity(CondenserTurbine.name_condenser_turbine_generator, entity.position) + if generator then generator.destroy() end + + local tank = entity.surface.find_entity(CondenserTurbine.name_condenser_turbine_tank, tank_position) + if tank then tank.destroy() end + + end +end +Event.addListener(defines.events.on_entity_died, CondenserTurbine.on_removed_entity) +Event.addListener(defines.events.on_robot_mined_entity, CondenserTurbine.on_removed_entity) +Event.addListener(defines.events.on_player_mined_entity, CondenserTurbine.on_removed_entity) +Event.addListener(defines.events.script_raised_destroy, CondenserTurbine.on_removed_entity) + +function CondenserTurbine.on_player_rotated_entity(event) + if event.entity and event.entity.valid and event.entity.surface + and event.entity.name == CondenserTurbine.name_condenser_turbine then + local entity = event.entity + + local direction_vector = Util.vector_multiply(Util.direction_to_vector(entity.direction), -1) + local tank_position_offset = Util.vector_multiply(direction_vector, CondenserTurbine.condenser_turbine_tank_offset) + local tank_position = Util.vectors_add(entity.position, tank_position_offset) + + local tank = entity.surface.find_entity(CondenserTurbine.name_condenser_turbine_tank, tank_position) + if tank then + local direction_vector = Util.direction_to_vector(entity.direction) + local tank_position_offset = Util.vector_multiply(direction_vector, CondenserTurbine.condenser_turbine_tank_offset) + local tank_position = Util.vectors_add(entity.position, tank_position_offset) + tank.teleport(tank_position) + tank.rotate() + tank.rotate() + end + + end +end +Event.addListener(defines.events.on_player_rotated_entity, CondenserTurbine.on_player_rotated_entity) + +--- Ensures that all turbines in an area on a surface are valid +---@param surface any +---@param area any +function CondenserTurbine.reset_surface(surface, area) + for _, entity in pairs(surface.find_entities_filtered{ + name = CondenserTurbine.name_condenser_turbine_tank, + area = area + }) do + entity.direction = entity.direction + end +end + +return CondenserTurbine diff --git a/space-exploration_0.5.80/space-exploration/scripts/core-miner.lua b/space-exploration_0.5.80/space-exploration/scripts/core-miner.lua new file mode 100644 index 0000000..be3b078 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/core-miner.lua @@ -0,0 +1,199 @@ +Coreminer = {} + +-- constants +Coreminer.name_core_miner = mod_prefix.."core-miner" +Coreminer.name_core_miner_drill = mod_prefix.."core-miner-drill" +Coreminer.name_core_mining_recipe = mod_prefix.."core-mining" +Coreminer.resource_normal = 1000000 + +function Coreminer.resource_to_fragment_name(resource_name) + local try_name = util.mod_prefix .. "core-fragment-" .. resource_name + if game.item_prototypes[try_name] then + return try_name + end + -- otherwise there is no fragment +end + +function Coreminer.variation_to_direction(var) + if var == 1 then + return defines.direction.south + elseif var == 2 then + return defines.direction.west + elseif var == 3 then + return defines.direction.north + else + return defines.direction.east + end +end + +function Coreminer.direction_to_variation(dir) + if dir == defines.direction.south then + return 1 + elseif dir == defines.direction.west then + return 2 + elseif dir == defines.direction.north then + return 3 + else + return 4 + end +end + +function Coreminer.default_fragment_name(zone) + if not zone.fragment_name then + zone.fragment_name = Coreminer.resource_to_fragment_name(zone.primary_resource) + if not zone.fragment_name then + -- maybe choose something at random? + error("Primary resource has no core fragment: " .. zone.name ) + zone.fragment_name = util.mod_prefix .. "core-fragment-omni" + end + end +end + +function Coreminer.equalise(zone, surface) + if not zone then + zone = Zone.from_surface(surface) + end + if not (zone and surface) then return end + Coreminer.default_fragment_name(zone) + + local resources = surface.find_entities_filtered{ + type = "resource", + name = zone.fragment_name + } + --local zone_efficiency = zone.type == "planet" and 0.5 or 0.25 + local zone_efficiency = zone.radius / 6000 + local efficiency = math.sqrt(#resources) / #resources + for _, resource in pairs(resources) do + local new_amount = Coreminer.resource_normal * zone_efficiency * efficiency + if resource.amount ~= new_amount then + resource.amount = new_amount + surface.create_entity{ + name = "flying-text", + position = resource.position, + text = string.format("%.2f", efficiency * 100).."% effective", + } + end + end +end + +function Coreminer.equalise_all() + if global.zone_index then + for _, zone in pairs(global.zone_index) do + if zone.surface_index and Zone.is_solid(zone) then + Coreminer.equalise(zone, Zone.get_surface(zone)) + end + end + end +end + +function Coreminer.on_entity_created(event) + local entity + if event.entity and event.entity.valid then + entity = event.entity + end + if event.created_entity and event.created_entity.valid then + entity = event.created_entity + end + if not entity then return end + if entity.name == Coreminer.name_core_miner or entity.name == Coreminer.name_core_miner_drill then + local zone = Zone.from_surface(entity.surface) + if zone and Zone.is_solid(zone) then + Coreminer.default_fragment_name(zone) + if not zone.fragment_name then + game.print("[color=red]Error: This surface is missing a core fragment setting. Please report the issue.[/color]") + cancel_entity_creation(entity, event.player_index, "Error") + else + local resource = entity.surface.create_entity{ + name = zone.fragment_name, + position = entity.position, + direction = entity.direction, + amount = 1, + } + + if entity.name ~= Coreminer.name_core_miner_drill then + local drill = entity.surface.create_entity{ + name = Coreminer.name_core_miner_drill, + position = {x = entity.position.x, y = entity.position.y + 1/32}, + direction = entity.direction, + --direction = defines.direction.south, + --direction = Coreminer.variation_to_direction(entity.graphics_variation), + force = entity.force + } + -- drill is selectable so make that the one that takes damage + --drill.destructible = false + entity.destructible = false + end + Coreminer.equalise(zone, entity.surface) + end + else + cancel_entity_creation(entity, event.player_index, {"space-exploration.construction-denied-solid-only"}) + return + end + end + +end +Event.addListener(defines.events.on_built_entity, Coreminer.on_entity_created) +Event.addListener(defines.events.on_robot_built_entity, Coreminer.on_entity_created) +Event.addListener(defines.events.script_raised_built, Coreminer.on_entity_created) +Event.addListener(defines.events.script_raised_revive, Coreminer.on_entity_created) + +function Coreminer.on_entity_removed(event) + if event.entity and event.entity.valid then + local surface = event.entity.surface + if event.entity.name == Coreminer.name_core_miner then + local e = event.entity.surface.find_entity(Coreminer.name_core_miner_drill, event.entity.position) + if e then e.destroy() end + local resources = event.entity.surface.find_entities_filtered{ type="resource", area = Util.position_to_area(event.entity.position, 1)} + for _, resource in pairs(resources) do + resource.destroy() + end + Coreminer.equalise(nil, surface) + elseif event.entity.name == Coreminer.name_core_miner_drill then + local e = event.entity.surface.find_entity(Coreminer.name_core_miner, event.entity.position) + if e then e.destroy() end + local resources = event.entity.surface.find_entities_filtered{ type="resource", area = Util.position_to_area(event.entity.position, 1)} + for _, resource in pairs(resources) do + resource.destroy() + end + Coreminer.equalise(nil, surface) + end + end +end +Event.addListener(defines.events.on_player_mined_entity, Coreminer.on_entity_removed) +Event.addListener(defines.events.on_robot_mined_entity, Coreminer.on_entity_removed) +Event.addListener(defines.events.on_entity_died, Coreminer.on_entity_removed) +Event.addListener(defines.events.script_raised_destroy, Coreminer.on_entity_removed) + +-- simple entity does not support rotation, bake into graphics variation +function Coreminer.on_player_rotated_entity(event) + if event.entity and event.entity.valid then + local surface = event.entity.surface + if event.entity.name == Coreminer.name_core_miner_drill then + local e = event.entity.surface.find_entity(Coreminer.name_core_miner, event.entity.position) + --if e then e.graphics_variation = Coreminer.direction_to_variation(event.entity.direction) end + if e then e.direction = event.entity.direction end + end + end +end +Event.addListener(defines.events.on_player_rotated_entity, Coreminer.on_player_rotated_entity) + +function Coreminer.update_zone_fragment_resources(zone) + local surface = Zone.get_surface(zone) + if surface then + for _, entity in pairs(surface.find_entities_filtered{name = mod_prefix.."core-miner"}) do + local resources = surface.find_entities_filtered{type = "resource", area = Util.position_to_area(entity.position, 2)} + for _, resource in pairs(resources) do + resource.destroy() + end + local resource = entity.surface.create_entity{ + name = zone.fragment_name, + position = entity.position, + direction = entity.direction, + amount = 1, + } + end + Coreminer.equalise(zone, surface) + end +end + +return Coreminer diff --git a/space-exploration_0.5.80/space-exploration/scripts/delivery-cannon-gui.lua b/space-exploration_0.5.80/space-exploration/scripts/delivery-cannon-gui.lua new file mode 100644 index 0000000..336a3d5 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/delivery-cannon-gui.lua @@ -0,0 +1,385 @@ +local DeliveryCannonGUI = {} + +DeliveryCannonGUI.name_delivery_cannon_gui_root = mod_prefix.."delivery-cannon" + +--- Create the delivery cannon gui for a player +---@param player any +---@param delivery_cannon any +function DeliveryCannonGUI.gui_open(player, delivery_cannon) + DeliveryCannonGUI.gui_close(player) + if not delivery_cannon then Log.trace('DeliveryCannonGUI.gui_open delivery_cannon not found') return end + + local gui = player.gui.relative + local playerdata = get_make_playerdata(player) + + local anchor = {gui=defines.relative_gui_type.assembling_machine_gui, position=defines.relative_gui_position.right} + local container = gui.add{ + type = "frame", + name = DeliveryCannonGUI.name_delivery_cannon_gui_root, + style="space_platform_container", + direction="vertical", + anchor = anchor, + -- use gui element tags to store a reference to what delivery cannon this gui is displaying/controls + tags = { + unit_number = delivery_cannon.unit_number + } + } + container.style.vertically_stretchable = "stretch_and_expand" + + local title_flow = container.add{type = "flow", "cannon-title-flow", direction = "horizontal"} + title_flow.add{type = "label", name = "cannon-title-label", style = "frame_title", caption = {"space-exploration.relative-window-settings"}, ignored_by_interaction = true} + local title_empty = title_flow.add { + type = "empty-widget", + style = "draggable_space", + ignored_by_interaction = true + } + title_empty.style.horizontally_stretchable = "on" + title_empty.style.left_margin = 4 + title_empty.style.right_margin = 0 + title_empty.style.height = 24 + local title_informatron = title_flow.add { + type="sprite-button", + name="goto_informatron_delivery_cannons", + sprite = "virtual-signal/informatron", + style="informatron_close_button", + tooltip={"space-exploration.informatron-open-help"} + } + title_informatron.style.width = 28 + title_informatron.style.height = 28 + + local bar + + container.add{ type="label", name="energy", caption="Energy: "} + bar = container.add{ type="progressbar", name="energy_progress", size = 300, value=0, style="space_platform_progressbar_capsule"} + bar.style.horizontally_stretchable = true + + container.add{ type="label", name="payload", caption="Payload: "} + + local active_container = container.add{ type="flow", name="active_container", direction="horizontal"} + active_container.style.vertical_align = "center" + + local switch = active_container.add{type="switch", name="off_switch", left_label_caption={"space-exploration.off"}, right_label_caption={"space-exploration.on"}, switch_state = delivery_cannon.is_off and "left" or "right"} + + container.add{ type="line", name="line"} + + container.add{ type="label", name="destination-label", caption="Destination:"} + container.add{type="checkbox", name="list-zones-alphabetical", caption={"space-exploration.list-destinations-alphabetically"}, state=playerdata.zones_alphabetical and true or false} + + local filter_container = container.add{ type="flow", name="filter_flow", direction="horizontal"} + local filter_field = filter_container.add{ type="textfield", name="filter_list"} + filter_field.style.width = 275 + local filter_button = filter_container.add{ type = "sprite-button", name="clear_filter", sprite="utility/search_icon", + tooltip={"space-exploration.clear-filter"},} + filter_button.style.left_margin = 5 + filter_button.style.width = 28 + filter_button.style.height = 28 + + local destination_zone = delivery_cannon.destination.zone + + local list, selected_index, values + if delivery_cannon.zone.type == "anomaly" or (delivery_cannon.zone.space_distortion and delivery_cannon.zone.space_distortion > 0) then -- only target none or self + list = {"None", Zone.dropdown_name_from_zone(delivery_cannon.zone)} + values = { {type = "none"}, {type = delivery_cannon.zone.type == "spaceship" and "spaceship" or "zone", index = delivery_cannon.zone.index}} + selected_index = destination_zone and 2 or 1 + else + local star = Zone.find_parent_star(delivery_cannon.zone) or Zone.find_nearest_star(delivery_cannon.zone.stellar_position) + list, selected_index, values = Zone.dropdown_list_zone_destinations( + delivery_cannon.force_name, + destination_zone, + playerdata.zones_alphabetical, + nil, + {list = "None", value = {type = "none"}}, -- wildcard + star + ) + if selected_index == 1 then selected_index = 2 end + end + local zones_dropdown = container.add{ type="drop-down", name="delivery-cannon-list-zones", items=list, selected_index=selected_index or 2} + zones_dropdown.style.horizontally_stretchable = true + player_set_dropdown_values(player, "delivery-cannon-list-zones", values) + + container.add{ type="label", name="destination-location-label", caption={"space-exploration.label_destination_position", ""}} + + local destination_location_table = container.add{type="table", name="destination_location_table", column_count=3, draw_horizontal_lines=false} + destination_location_table.style.horizontally_stretchable = true + destination_location_table.style.column_alignments[1] = "left" -- title, search, zone list table + destination_location_table.style.column_alignments[2] = "right" -- starmap, close, selected zone info + + destination_location_table.add{ type="sprite-button", name="destination_location_button", + sprite="item/artillery-targeting-remote", tooltip = {"space-exploration.choose_coordinates"}} + destination_location_table.destination_location_button.style.right_margin = 10 + destination_location_table.add{ type="label", name="destination_location_coordinates", caption=""} + destination_location_table.style.bottom_margin = 10 + + if delivery_cannon.variant == "weapon" then + local auto_switch = container.add{type="switch", name="auto_switch", left_label_caption={"space-exploration.wdc_auto_off"}, right_label_caption={"space-exploration.wdc_auto_on"}, switch_state = delivery_cannon.auto_select_targets and "right" or "left"} + end + + if settings.get_player_settings(player)["se-show-zone-preview"].value then + container.add{ type="label", name="destination-location-preview-label", caption={"space-exploration.destination_preview"}} + local preview_frame = container.add{type="frame", name="destination-location-preview-frame", style="informatron_inside_deep_frame"} + preview_frame.style.horizontally_stretchable = true + preview_frame.style.vertically_stretchable = true + preview_frame.style.top_margin = 10 + preview_frame.style.minimal_height = 200 + end + DeliveryCannonGUI.gui_update(player) +end + +function DeliveryCannonGUI.preview_frame_update(preview_frame, delivery_cannon) + local valid_location = false + local surface = nil + if DeliveryCannon.has_destination(delivery_cannon) then + surface = Zone.get_surface(delivery_cannon.destination.zone) + if surface then + valid_location = true + end + end + preview_frame.clear() + if valid_location then + local camera = preview_frame.add{type="camera", name="preview_camera", position=delivery_cannon.destination.coordinate, zoom=0.5, surface_index=surface.index} + camera.style.vertically_stretchable = true + camera.style.horizontally_stretchable = true + end +end + +function DeliveryCannonGUI.gui_update(player) + local root = player.gui.relative[DeliveryCannonGUI.name_delivery_cannon_gui_root] + if (root and root.tags) then + local delivery_cannon = DeliveryCannon.from_unit_number(root.tags.unit_number) + if delivery_cannon then + local valid = DeliveryCannon.is_valid(delivery_cannon) + if valid then + local format_energy = function(energy) + return string.format("%.2f",energy/1000000) .. "MJ" + end + if root["energy"] then + root["energy"].caption={ + "space-exploration.delivery_cannon_label_energy", + format_energy(delivery_cannon.energy_interface.energy) .. " / " .. (delivery_cannon.required_energy and format_energy(delivery_cannon.required_energy) or "?") + } + root["energy_progress"].value = delivery_cannon.required_energy and ((delivery_cannon.energy or 0) / delivery_cannon.required_energy) or 0 + end + + if root["payload"] then + root["payload"].caption={ + "space-exploration.delivery_cannon_label_payload", + delivery_cannon.payload_name and (game.item_prototypes[delivery_cannon.payload_name].localised_name) or {"space-exploration.empty"} + } + end + + if root.destination_location_table and root.destination_location_table.destination_location_coordinates then + local coordinate = DeliveryCannon.get_coordinate(delivery_cannon) + if coordinate then + root.destination_location_table.destination_location_coordinates.caption = {"space-exploration.delivery-cannon-valid-coordinates", coordinate.x, coordinate.y} + else + root.destination_location_table.destination_location_coordinates.caption = {"space-exploration.delivery-cannon-invalid-coordinates"} + end + end + + if root["auto_switch"] then + root["auto_switch"].switch_state = delivery_cannon.auto_select_targets and "right" or "left" + end + + if root["off_switch"] then + root["off_switch"].switch_state = delivery_cannon.is_off and "left" or "right" + end + + if root["destination-location-preview-frame"] then + DeliveryCannonGUI.preview_frame_update(root["destination-location-preview-frame"], delivery_cannon) + end + end + end + end +end + +function DeliveryCannonGUI.gui_update_destinations_list(player) + local playerdata = get_make_playerdata(player) + local root = player.gui.relative[DeliveryCannonGUI.name_delivery_cannon_gui_root] + if root and root.tags then + local delivery_cannon = DeliveryCannon.from_unit_number(root.tags.unit_number) + if not delivery_cannon then return end + + local filter = nil + if root.filter_flow and root.filter_flow.filter_list then + filter = string.trim(root.filter_flow.filter_list.text) + if filter == "" then + filter = nil + end + end + + -- update the list + local destination_zone = delivery_cannon.destination.zone + + if delivery_cannon.zone.type == "anomaly" or (delivery_cannon.zone.space_distortion and delivery_cannon.zone.space_distortion > 0) then -- only target none or self + list = {"None", Zone.dropdown_name_from_zone(delivery_cannon.zone)} + values = { {type = "none"}, {type = delivery_cannon.zone.type == "spaceship" and "spaceship" or "zone", index = delivery_cannon.zone.index}} + selected_index = destination_zone and 2 or 1 + else + local star = Zone.find_parent_star(delivery_cannon.zone) or Zone.find_nearest_star(delivery_cannon.zone.stellar_position) + list, selected_index, values = Zone.dropdown_list_zone_destinations( + delivery_cannon.force_name, + destination_zone, + playerdata.zones_alphabetical, + filter, + {list = "None", value = {type = "none"}}, -- wildcard + star + ) + if selected_index == 1 then selected_index = 2 end + end + root["delivery-cannon-list-zones"].items = list + root["delivery-cannon-list-zones"].selected_index = selected_index or 2 + player_set_dropdown_values(player, "delivery-cannon-list-zones", values) + end +end + +function DeliveryCannonGUI.on_gui_click(event) + if not (event.element and event.element.valid) then return end + local element = event.element + local player = game.players[event.player_index] + local root = gui_element_or_parent(element, DeliveryCannonGUI.name_delivery_cannon_gui_root) + if not (root and root.tags) then return end + local delivery_cannon = DeliveryCannon.from_unit_number(root.tags.unit_number) + if not delivery_cannon then return end + if element.name == "delivery-cannon-list-zones" then + + local value = player_get_dropdown_value(player, element.name, element.selected_index) + if type(value) == "table" then + if value.type == "zone" then + local zone_index = value.index + local zone = Zone.from_zone_index(zone_index) + if zone then + if delivery_cannon.destination.zone ~= zone then + delivery_cannon.destination.zone = zone + delivery_cannon.destination.coordinate = nil + end + delivery_cannon.required_energy = DeliveryCannon.variants[delivery_cannon.variant].energy_per_delta_v * DeliveryCannon.get_delta_v(delivery_cannon.zone, delivery_cannon.destination.zone) + Log.trace("set destination to location: " .. zone.name ) + else + delivery_cannon.destination.zone = nil + delivery_cannon.required_energy = nil + end + else + delivery_cannon.destination.zone = nil + delivery_cannon.required_energy = nil + end + DeliveryCannonGUI.gui_update(player) + else + DeliveryCannonGUI.gui_close(player) + Log.trace("Error: Non-table value ") + end + elseif element.name == "clear_filter" then + element.parent.filter_list.text = "" + DeliveryCannonGUI.gui_update_destinations_list(player) + elseif element.name == "destination_location_button" then + local playerdata = get_make_playerdata(player) + local player_zone = Zone.from_surface(player.surface) + -- if the player is not already in nav mode, put them in nav mode on their current surface to make the history nice + RemoteView.start(player) + RemoteView.start(player, delivery_cannon.destination.zone) + -- only change the player's position to that of the delivery cannon if its on a different surface + -- this lets the player keep updating the position of the delivery cannon as long as they stay in nav + -- view on the targeted surface + if delivery_cannon.destination.coordinate and (not player.character) and player_zone ~= delivery_cannon.destination.zone then + player.teleport(DeliveryCannon.get_coordinate(delivery_cannon)) + end + playerdata.remote_view_activity = { + type = DeliveryCannon.name_target_activity_type, + delivery_cannon = delivery_cannon + } + player.cursor_stack.set_stack({name = DeliveryCannon.name_delivery_cannon_targeter, count = 1}) + player.opened = nil + RemoteView.gui_make_entity_back_button (player, delivery_cannon.main) + elseif element.name == "goto_informatron_delivery_cannons" then + remote.call("informatron", "informatron_open_to_page", { + player_index = event.player_index, + interface = "space-exploration", + page_name = "delivery_cannons" + }) + end +end +Event.addListener(defines.events.on_gui_click, DeliveryCannonGUI.on_gui_click) +Event.addListener(defines.events.on_gui_selection_state_changed, DeliveryCannonGUI.on_gui_click) + +function DeliveryCannonGUI.on_gui_switch_state_changed(event) + if not (event.element and event.element.valid) then return end + local element = event.element + local player = game.players[event.player_index] + local root = gui_element_or_parent(element, DeliveryCannonGUI.name_delivery_cannon_gui_root) + if not (root and root.tags) then return end + local delivery_cannon = DeliveryCannon.from_unit_number(root.tags.unit_number) + if not delivery_cannon then return end + if element.name == "off_switch" then + delivery_cannon.is_off = element.switch_state == "left" + elseif element.name == "auto_switch" then + delivery_cannon.auto_select_targets = element.switch_state == "right" + end +end +Event.addListener(defines.events.on_gui_switch_state_changed, DeliveryCannonGUI.on_gui_switch_state_changed) + +function DeliveryCannonGUI.on_gui_checked_state_changed(event) + if not (event.element and event.element.valid) then return end + local element = event.element + local player = game.players[event.player_index] + local root = gui_element_or_parent(element, DeliveryCannonGUI.name_delivery_cannon_gui_root) + if not (root and root.tags) then return end + local delivery_cannon = DeliveryCannon.from_unit_number(root.tags.unit_number) + if not delivery_cannon then return end + if element.name == "list-zones-alphabetical" then + local playerdata = get_make_playerdata(player) + playerdata.zones_alphabetical = element.state + DeliveryCannonGUI.gui_update_destinations_list(player) + end +end +Event.addListener(defines.events.on_gui_checked_state_changed, DeliveryCannonGUI.on_gui_checked_state_changed) + +function DeliveryCannonGUI.on_gui_text_changed(event) + if not (event.element and event.element.valid) then return end + local element = event.element + local player = game.players[event.player_index] + local root = gui_element_or_parent(element, DeliveryCannonGUI.name_delivery_cannon_gui_root) + if root then -- remote view + if element.name == "filter_list" then + DeliveryCannonGUI.gui_update_destinations_list(player) + end + end +end +Event.addListener(defines.events.on_gui_text_changed, DeliveryCannonGUI.on_gui_text_changed) + +--- Close the delivery cannon gui for a player +---@param player any +function DeliveryCannonGUI.gui_close (player) + if player.gui.relative[DeliveryCannonGUI.name_delivery_cannon_gui_root] then + player.gui.relative[DeliveryCannonGUI.name_delivery_cannon_gui_root].destroy() + end +end + +--- Respond to the main entity GUI being closed by destroying the relative GUI +---@param event any +function DeliveryCannonGUI.on_gui_closed(event) + local player = game.players[event.player_index] + if player and event.entity and (event.entity.name == DeliveryCannon.variants["logistic"].name or event.entity.name == DeliveryCannon.variants["weapon"].name) then + DeliveryCannonGUI.gui_close(player) + end +end +Event.addListener(defines.events.on_gui_closed, DeliveryCannonGUI.on_gui_closed) + +--- Opens the delivery cannon gui when a delivery cannon is clicked +--- Closes the delivery cannon gui when another gui is opened +---@param event any +function DeliveryCannonGUI.on_gui_opened(event) + local player = game.players[event.player_index] + if event.entity and event.entity.valid and + (event.entity.name == DeliveryCannon.variants["logistic"].name or event.entity.name == DeliveryCannon.variants["weapon"].name) then + if RemoteView.is_unlocked(player) then + DeliveryCannonGUI.gui_open(player, DeliveryCannon.from_entity(event.entity)) + else + player.print({"space-exploration.remote-view-requires-satellite"}) + end + else + DeliveryCannonGUI.gui_close(player) + end +end +Event.addListener(defines.events.on_gui_opened, DeliveryCannonGUI.on_gui_opened) + + +return DeliveryCannonGUI diff --git a/space-exploration_0.5.80/space-exploration/scripts/delivery-cannon.lua b/space-exploration_0.5.80/space-exploration/scripts/delivery-cannon.lua new file mode 100644 index 0000000..ab8d471 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/delivery-cannon.lua @@ -0,0 +1,555 @@ +local DeliveryCannon = {} + +DeliveryCannon.variants = { + ["logistic"] = { + name = mod_prefix.."delivery-cannon", + name_energy_interface = mod_prefix.."delivery-cannon-energy-interface", + name_beam = mod_prefix.."delivery-cannon-beam", + beam_offset = {x = -0.5, y = -5}, + name_capsule = mod_prefix.."delivery-cannon-capsule", + name_capsule_projectile = mod_prefix.."delivery-cannon-capsule-projectile", + energy_per_delta_v = 50000, + }, + ["weapon"] = { + name = mod_prefix.."delivery-cannon-weapon", + name_energy_interface = mod_prefix.."delivery-cannon-weapon-energy-interface", + name_beam = mod_prefix.."delivery-cannon-weapon-beam", + beam_offset = {x = -1, y = -5}, + name_capsule = mod_prefix.."delivery-cannon-weapon-capsule", + name_capsule_projectile = mod_prefix.."delivery-cannon-weapon-capsule-projectile", + energy_per_delta_v = 500000, + } +} + +DeliveryCannon.name_delivery_cannon_chest = mod_prefix.."delivery-cannon-chest" + +DeliveryCannon.name_delivery_cannon_capsule_shadow = mod_prefix.."delivery-cannon-capsule-shadow" +DeliveryCannon.name_delivery_cannon_capsule_explosion = mod_prefix.."delivery-cannon-capsule-explosion" + +DeliveryCannon.name_delivery_cannon_targeter = mod_prefix.."delivery-cannon-targeter" +DeliveryCannon.name_target_activity_type = "delivery-cannon-target" + +DeliveryCannon.capsule_fall_altitude = 100 +DeliveryCannon.capsule_fall_time = 2 * 60 + +DeliveryCannon.name_event_copy_entity_settings = mod_prefix.."copy-entity-settings" + +---@class DeliveryCannon All data necessary to maintain the state of a delivery cannon + +--- Gets the DeliveryCannon for this unit_number +---@param unit_number number +function DeliveryCannon.from_unit_number (unit_number) + if not unit_number then Log.trace("DeliveryCannon.from_unit_number: invalid unit_number: nil") return end + unit_number = tonumber(unit_number) + -- NOTE: only supports container as the entity + if global.delivery_cannons[unit_number] then + return global.delivery_cannons[unit_number] + else + Log.trace("DeliveryCannon.from_unit_number: invalid unit_number: " .. unit_number) + end +end + +--- Gets the DeliveryCannon for this entity +---@param entity LuaEntity +function DeliveryCannon.from_entity (entity) + if not(entity and entity.valid) then + Log.trace("DeliveryCannon.from_entity: invalid entity") + return + end + -- NOTE: only supports container as the entity + return DeliveryCannon.from_unit_number(entity.unit_number) +end + +--- Computes the cost to launch a delivery cannon +---@param origin Zone launch zone +---@param destination Zone destination zone +function DeliveryCannon.get_delta_v(origin, destination) + if origin and destination then + return Zone.get_launch_delta_v(origin) + Zone.get_travel_delta_v(origin, destination) + end +end + +--- Get the coordinate the delivery cannon is targetting +---@param delivery_cannon DeliveryCannon delivery cannon data +function DeliveryCannon.get_coordinate(delivery_cannon) + if delivery_cannon.destination and delivery_cannon.destination.coordinate then + return delivery_cannon.destination.coordinate + end + return nil +end + +--- Does the delivery cannon have a destination set +---@param delivery_cannon DeliveryCannon delivery cannon data +function DeliveryCannon.has_destination(delivery_cannon) + return delivery_cannon and delivery_cannon.destination and delivery_cannon.destination.coordinate and delivery_cannon.destination.zone +end + +--- Returns if this delivery cannon is valid +---@param delivery_cannon DeliveryCannon delivery cannon data +function DeliveryCannon.is_valid(delivery_cannon) + return delivery_cannon and delivery_cannon.main and delivery_cannon.main.valid + and delivery_cannon.energy_interface and delivery_cannon.energy_interface.valid +end + +--- Returns if this delivery cannon can fire +---@param delivery_cannon DeliveryCannon delivery cannon data +function DeliveryCannon.can_fire(delivery_cannon) + return delivery_cannon and (not delivery_cannon.is_off) + and delivery_cannon.energy and delivery_cannon.required_energy + and delivery_cannon.energy >= delivery_cannon.required_energy +end + +--- Gets the stack that this delivery cannon is ready to fire +---@param delivery_cannon any +function DeliveryCannon.get_stack(delivery_cannon) + if not delivery_cannon then return end + local recipe = delivery_cannon.main.get_recipe() + if not recipe then return end + if string.find(recipe.name, "se-delivery-cannon-weapon-pack-", 1, true) then + local ammo_name = Util.replace(recipe.name, "se-delivery-cannon-weapon-pack-", "") + local ammo = game.item_prototypes[ammo_name] + if ammo then + return {name = ammo_name, count = 1} + end + else + for _, ingredient in pairs(recipe.ingredients) do + if ingredient.name ~= DeliveryCannon.variants[delivery_cannon.variant].name_capsule then + local stack = ingredient + stack.count = stack.amount or stack.count + return stack + end + end + end +end + +--- Displays a message that the delivery cannon projectile was destroyed by an opposing force +---@param delivery_cannon DeliveryCannon delivery cannon data +---@param defence_data any info about the destruction +---@param target_zone Zone the zone the delivery cannon was firing at +function DeliveryCannon.display_destroyed_projectile_message(delivery_cannon, defence_data, target_zone) + game.forces[delivery_cannon.force_name].print({"space-exploration.delivery_cannon_canister_destroyed_by", delivery_cannon.zone.name, target_zone.name}) + for force_name, shots_fired in pairs(defence_data) do + game.forces[force_name].print({"space-exploration.delivery_cannon_defended_canister", target_zone.name, shots_fired.defence_shots, shots_fired.point_defence_shots}) + end +end + +--- Displays a message that the delivery cannon projectile was not destroyed by an opposing force +---@param delivery_cannon DeliveryCannon delivery cannon data +---@param defence_data any info about the (failed) destruction +---@param target_zone Zone the zone the delivery cannon was firing at +function DeliveryCannon.display_not_destroyed_projectile_message(delivery_cannon, defence_data, target_zone) + for force_name, shots_fired in pairs(defence_data) do + game.forces[force_name].print({"space-exploration.delivery_cannon_defended_canister_failed", target_zone.name, shots_fired.defence_shots, shots_fired.point_defence_shots}) + end +end + +--- Picks a new target for a delivery cannon +---@param delivery_cannon DeliveryCannon delivery cannon data +---@param target_zone Zone the zone to pick a target from +---@param target_surface LuaSurface the surface to pick a target from +function DeliveryCannon.pick_new_target(delivery_cannon, target_zone, target_surface) + local random_chunk = target_surface.get_random_chunk() + local position = {x = (random_chunk.x + math.random()) * 32, y = (random_chunk.y + math.random()) * 32} + if target_zone.radius and Util.vector_length(position) > target_zone.radius then + position = Util.vector_set_length(position, target_zone.radius * math.random()) + end + if math.random() < 0.99 then + local enemy = find_enemy(game.forces[delivery_cannon.force_name], target_surface, position) + if enemy then + position = enemy.position + end + end + delivery_cannon.destination.coordinate = position +end + +--- Adds a delivery cannon to the zone assets +---@param delivery_cannon DeliveryCannon delivery cannon data +function DeliveryCannon.add_delivery_cannon_to_table(delivery_cannon) + local type_table = DeliveryCannon.get_delivery_cannon_type_table(delivery_cannon) + type_table[delivery_cannon.unit_number] = delivery_cannon +end + +--- Gets the delivery cannon zone assets +---@param delivery_cannon DeliveryCannon delivery cannon data +function DeliveryCannon.get_delivery_cannon_type_table(delivery_cannon) + local zone_assets = Zone.get_force_assets(delivery_cannon.force_name, delivery_cannon.zone.index) + zone_assets.delivery_cannons = zone_assets.delivery_cannons or {} + return zone_assets.delivery_cannons +end + +--- Removes a delivery cannon from the zone assets +---@param delivery_cannon DeliveryCannon delivery cannon data +function DeliveryCannon.remove_delivery_cannon_from_table(delivery_cannon) + local type_table = DeliveryCannon.get_delivery_cannon_type_table(delivery_cannon) + if not type_table[delivery_cannon.unit_number] then return end + type_table[delivery_cannon.unit_number] = nil +end + +--- Fires a delivery cannon if it's ready to fire +---@param delivery_cannon DeliveryCannon delivery cannon data +function DeliveryCannon.attempt_fire(delivery_cannon) + -- only fire cannons that are valid, have a valid destination, and have enough energy to fire at that destination + if not DeliveryCannon.is_valid(delivery_cannon) then DeliveryCannon.destroy(delivery_cannon) return end + if not DeliveryCannon.has_destination(delivery_cannon) then return end + delivery_cannon.energy = delivery_cannon.energy_interface.energy + if not delivery_cannon.required_energy then + delivery_cannon.required_energy = DeliveryCannon.variants[delivery_cannon.variant].energy_per_delta_v * DeliveryCannon.get_delta_v(delivery_cannon.zone, delivery_cannon.destination.zone) + end + if not DeliveryCannon.can_fire(delivery_cannon) then return end + + -- only fire cannons with a valid payload ready + local cannon_inv = delivery_cannon.main.get_output_inventory() + delivery_cannon.payload_name = nil + delivery_cannon.payload_count = 0 + for name, count in pairs(cannon_inv.get_contents()) do -- should only be 1 + delivery_cannon.payload_name = name + delivery_cannon.payload_count = count + end + if not (delivery_cannon.payload_count > 0) then return end + + -- fire the cannon + local target_zone = delivery_cannon.destination.zone + local target_surface = Zone.get_make_surface(target_zone) + local target_position = DeliveryCannon.get_coordinate(delivery_cannon) + if delivery_cannon.force_name then game.forces[delivery_cannon.force_name].chart(target_surface, Util.position_to_area(target_position, 64)) end + local stack = DeliveryCannon.get_stack(delivery_cannon) + if not stack then error("Delivery Cannon tried to fire invalid stack") return end + cannon_inv.remove({name=delivery_cannon.payload_name, count=1}) + delivery_cannon.energy_interface.energy = delivery_cannon.energy_interface.energy - delivery_cannon.required_energy + delivery_cannon.main.surface.create_entity{ + name = DeliveryCannon.variants[delivery_cannon.variant].name_beam, + position = Util.vectors_add(delivery_cannon.main.position, DeliveryCannon.variants[delivery_cannon.variant].beam_offset ), + target = Util.vectors_add(delivery_cannon.main.position, {x = 0, y = -100}) + } + + -- give opposing force's meteor defence a chance to destroy the projectile + local payload = { + variant = delivery_cannon.variant, + stack = stack, + target_zone = target_zone, + target_position = target_position, + force_name = delivery_cannon.force_name, + eta = game.tick + DeliveryCannon.capsule_fall_time, + health = 1 + } + local defence_data = Meteor.defence_vs_projectile(payload) + if payload.health <= 0 then DeliveryCannon.display_destroyed_projectile_message(delivery_cannon, defence_data, target_zone) return end + + -- the projectile went through + DeliveryCannon.display_not_destroyed_projectile_message(delivery_cannon, defence_data, target_zone) + global.delivery_cannon_payloads = global.delivery_cannon_payloads or {} + table.insert(global.delivery_cannon_payloads, payload) + + local projectile_start_position = Util.vectors_add(target_position, {x = 0, y = -DeliveryCannon.capsule_fall_altitude}) + local shadow_start_position = Util.vectors_add(target_position, {x = DeliveryCannon.capsule_fall_altitude, y = 0}) + target_surface.create_entity{ + name = DeliveryCannon.variants[delivery_cannon.variant].name_capsule_projectile, + position = projectile_start_position, + target = target_position, + force = delivery_cannon.force_name, + speed = DeliveryCannon.capsule_fall_altitude/DeliveryCannon.capsule_fall_time + } + target_surface.create_entity{ + name = DeliveryCannon.name_delivery_cannon_capsule_shadow, + position = shadow_start_position, + target = target_position, + force = delivery_cannon.force_name, + speed = DeliveryCannon.capsule_fall_altitude/DeliveryCannon.capsule_fall_time + } + target_surface.request_to_generate_chunks(projectile_start_position) + target_surface.request_to_generate_chunks(shadow_start_position) + target_surface.request_to_generate_chunks(target_position) + + -- select a new target if it automatic mode + if delivery_cannon.auto_select_targets then + DeliveryCannon.pick_new_target(delivery_cannon, target_zone, target_surface) + end +end + +--- Performs the effect of a payload landing +--- If there is a delivery chest at the landing location, try to insert the payload item, +--- otherwise causes an explosion at the target and spills the items on the ground +---@param payload any the payload that is landing +function DeliveryCannon.do_payload_effect(payload) + local surface = Zone.get_make_surface(payload.target_zone) + local spill = payload.stack.count + local chest = surface.find_entity(DeliveryCannon.name_delivery_cannon_chest, payload.target_position) + if chest then + spill = spill - chest.insert(payload.stack) + end + if spill > 0 then + + surface.create_entity{ + name = DeliveryCannon.name_delivery_cannon_capsule_explosion, + position = payload.target_position, + force = payload.force_name + } + if payload.stack.name == "explosives" then -- double damage + surface.create_entity{ + name = DeliveryCannon.name_delivery_cannon_capsule_explosion, + position = payload.target_position, + force = payload.force_name + } + end + + local proto = game.item_prototypes[payload.stack.name] + local projectiles = {} + if proto.type == "ammo" then + local ammo_type = proto.get_ammo_type() + for _, action in pairs(ammo_type.action) do + for _, action_delivery in pairs(action.action_delivery) do + if action_delivery.type == "projectile" or action_delivery.type == "artillery" then + projectiles[action_delivery.projectile] = (projectiles[action_delivery.projectile] or 0) + 1 + end + end + end + end + if proto.type == "capsule" then + local ammo_type = proto.capsule_action.attack_parameters.ammo_type + for _, action in pairs(ammo_type.action) do + for _, action_delivery in pairs(action.action_delivery) do + if action_delivery.type == "projectile" or action_delivery.type == "artillery" then + projectiles[action_delivery.projectile] = (projectiles[action_delivery.projectile] or 0) + 1 + end + end + end + end + local no_items = false + for projectile_name, projectile_count in pairs(projectiles) do + no_items = true + surface.create_entity{ + name = projectile_name, + position = payload.target_position, + target = payload.target_position, + speed = 0.1, + force = payload.force_name + } + end + if not no_items then + local spill_stack = table.deepcopy(payload.stack) + spill_stack.count = math.ceil(spill/4) + surface.spill_item_stack(payload.target_position, spill_stack, true, payload.force_name, true) + end + end +end + +--- Updates all delivery cannons, potentially firing them or updating their guis +--- Checks are done infrequently, but still frequently enough that the cannon will never +--- get backed up while assembling at full speed +--- Updates all delivery cannons payloads, causing their effect when they hit +---@param delivery_cannon DeliveryCannon delivery cannon data +function DeliveryCannon.on_tick() + -- fire cannons + for _, delivery_cannon in pairs(global.delivery_cannons) do + if (game.tick + delivery_cannon.unit_number) % 60 == 0 then + DeliveryCannon.attempt_fire(delivery_cannon) + end + end + + -- update guis + if game.tick % 60 == 0 then + for _, player in pairs(game.connected_players) do + DeliveryCannonGUI.gui_update(player) + end + end + + -- process payloads + if global.delivery_cannon_payloads then + for i = #global.delivery_cannon_payloads, 1, -1 do + local payload = global.delivery_cannon_payloads[i] + if payload then + if game.tick >= payload.eta then + DeliveryCannon.do_payload_effect(payload) + table.remove(global.delivery_cannon_payloads, i) + end + end + end + end +end +Event.addListener(defines.events.on_tick, DeliveryCannon.on_tick) + +--- When the player selects an area using the targeter, set the delivery cannon to target that location +---@param event any +function DeliveryCannon.on_player_selected_area(event) + if (event.item == DeliveryCannon.name_delivery_cannon_targeter) then + local player = game.players[event.player_index] + local playerdata = get_make_playerdata(player) + if playerdata.remote_view_activity and playerdata.remote_view_activity.type == DeliveryCannon.name_target_activity_type then + local delivery_cannon = playerdata.remote_view_activity.delivery_cannon + if delivery_cannon.main and delivery_cannon.main.valid then + delivery_cannon.destination.coordinate = { + x = (event.area.left_top.x + event.area.right_bottom.x) / 2, + y = (event.area.left_top.y + event.area.right_bottom.y) / 2 + } + delivery_cannon.destination.zone = Zone.from_surface(player.surface) + player.print({"space-exploration.delivery-cannon-coordinates-set", math.floor(delivery_cannon.destination.coordinate.x), math.floor(delivery_cannon.destination.coordinate.y)}) + end + end + end +end +Event.addListener(defines.events.on_player_selected_area, DeliveryCannon.on_player_selected_area) + +function DeliveryCannon.on_entity_created(event) + local entity = util.get_entity_from_event(event) + + if not entity then return end + if entity.name == DeliveryCannon.variants["logistic"].name or entity.name == DeliveryCannon.variants["weapon"].name then + if not RemoteView.is_unlocked_force(entity.force.name) then + return cancel_entity_creation(entity, event.player_index, {"space-exploration.generic-requires-satellite"}) + end + local force_name = entity.force.name + + local zone = Zone.from_surface(entity.surface) + + if not zone then + return cancel_entity_creation(entity, event.player_index, {"space-exploration.invalid_launch_location"}) + end + + local delivery_cannon = { + type = entity.name, + variant = entity.name == DeliveryCannon.variants["logistic"].name and "logistic" or "weapon", + valid = true, + force_name = force_name, + unit_number = entity.unit_number, + main = entity, + zone = zone, + is_off = true, + destination = { + zone = nil + }, + launch_status = -1 + } + + global.delivery_cannons[entity.unit_number] = delivery_cannon + Log.trace("DeliveryCannon: delivery_cannon added") + + DeliveryCannon.add_delivery_cannon_to_table(delivery_cannon) -- assigns to zone_assets + + -- spawn energy interface + delivery_cannon.energy_interface = util.find_entity_or_revive_ghost(entity.surface, DeliveryCannon.variants[delivery_cannon.variant].name_energy_interface, entity.position) + if not delivery_cannon.energy_interface then + delivery_cannon. energy_interface = entity.surface.create_entity{ + name = DeliveryCannon.variants[delivery_cannon.variant].name_energy_interface, + force = entity.force, + position = {entity.position.x, entity.position.y} + } + end + delivery_cannon.energy_interface.destructible = false + + -- set settings + local tags = util.get_tags_from_event(event, DeliveryCannon.serialize) + if tags then + DeliveryCannon.deserialize(entity, tags) + end + + if event.player_index and game.players[event.player_index] and game.players[event.player_index].connected then + DeliveryCannonGUI.gui_open(game.players[event.player_index], delivery_cannon) + end + end +end +Event.addListener(defines.events.on_entity_cloned, DeliveryCannon.on_entity_created) +Event.addListener(defines.events.on_built_entity, DeliveryCannon.on_entity_created) +Event.addListener(defines.events.on_robot_built_entity, DeliveryCannon.on_entity_created) +Event.addListener(defines.events.script_raised_built, DeliveryCannon.on_entity_created) +Event.addListener(defines.events.script_raised_revive, DeliveryCannon.on_entity_created) + +function DeliveryCannon.destroy_sub(delivery_cannon, key) + if delivery_cannon[key] and delivery_cannon[key].valid then + delivery_cannon[key].destroy() + delivery_cannon[key] = nil + end +end + +function DeliveryCannon.destroy(delivery_cannon, player_index) + if not delivery_cannon then + Log.trace("delivery_cannon_destroy: no delivery_cannon") + return + end + + delivery_cannon.valid = false + + DeliveryCannon.destroy_sub(delivery_cannon, 'main') + DeliveryCannon.destroy_sub(delivery_cannon, 'energy_interface') + + DeliveryCannon.remove_delivery_cannon_from_table(delivery_cannon) + global.delivery_cannons[delivery_cannon.unit_number] = nil + + -- if a player has this gui open then close it + local gui_name = DeliveryCannonGUI.name_delivery_cannon_gui_root + for _, player in pairs(game.connected_players) do + local root = player.gui.relative[gui_name] + if root and root.tags and root.tags.unit_number == delivery_cannon.unit_number then + root.destroy() + end + end +end + +function DeliveryCannon.on_entity_removed(event) + local entity = event.entity + if entity and entity.valid and + (entity.name == DeliveryCannon.variants["logistic"].name or entity.name == DeliveryCannon.variants["weapon"].name) then + DeliveryCannon.destroy(DeliveryCannon.from_entity(entity), event.player_index ) + end +end +Event.addListener(defines.events.on_entity_died, DeliveryCannon.on_entity_removed) +Event.addListener(defines.events.on_robot_mined_entity, DeliveryCannon.on_entity_removed) +Event.addListener(defines.events.on_player_mined_entity, DeliveryCannon.on_entity_removed) +Event.addListener(defines.events.script_raised_destroy, DeliveryCannon.on_entity_removed) + +function DeliveryCannon.serialize(entity) + local delivery_cannon = DeliveryCannon.from_entity(entity) + if delivery_cannon then + local tags = {} + if delivery_cannon.destination then + tags.destination = { + coordinate = delivery_cannon.destination.coordinate, + zone_name = delivery_cannon.destination.zone and delivery_cannon.destination.zone.name + } + end + tags.is_off = delivery_cannon.is_off + tags.auto_select_targets = delivery_cannon.auto_select_targets + return tags + end +end + +function DeliveryCannon.deserialize(entity, tags) + local delivery_cannon = DeliveryCannon.from_entity(entity) + if delivery_cannon then + if tags.destination then + delivery_cannon.destination = { + coordinate = table.deepcopy(tags.destination.coordinate), + zone = Zone.from_name(tags.destination.zone_name) + } + end + delivery_cannon.is_off = tags.is_off + delivery_cannon.auto_select_targets = tags.auto_select_targets + end +end + +--- Handles the player creating a blueprint by setting tags to store the state of delivery cannons +---@param event any +function DeliveryCannon.on_player_setup_blueprint(event) + util.setup_blueprint(event, {DeliveryCannon.variants["logistic"].name, DeliveryCannon.variants["weapon"].name}, DeliveryCannon.serialize) +end +Event.addListener(defines.events.on_player_setup_blueprint, DeliveryCannon.on_player_setup_blueprint) + +--- Handles the player copy/pasting settings between delivery cannons +---@param event any +function DeliveryCannon.on_entity_settings_pasted(event) + util.settings_pasted(event, {DeliveryCannon.variants["logistic"].name, DeliveryCannon.variants["weapon"].name}, DeliveryCannon.serialize, DeliveryCannon.deserialize, + function(entity, player_index) + local delivery_cannon = DeliveryCannon.from_entity(entity) + local player = game.players[player_index] + if delivery_cannon and delivery_cannon.destination and delivery_cannon.destination.coordinate then + player.print({"space-exploration.delivery-cannon-coordinates-pasted", math.floor(delivery_cannon.destination.coordinate.x), math.floor(delivery_cannon.destination.coordinate.y)}) + end + end) +end +Event.addListener(defines.events.on_entity_settings_pasted, DeliveryCannon.on_entity_settings_pasted) + +function DeliveryCannon.on_init(event) + global.delivery_cannons = {} +end +Event.addListener("on_init", DeliveryCannon.on_init, true) + +return DeliveryCannon diff --git a/space-exploration_0.5.80/space-exploration/scripts/dimensional-anchor.lua b/space-exploration_0.5.80/space-exploration/scripts/dimensional-anchor.lua new file mode 100644 index 0000000..aa9a3ad --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/dimensional-anchor.lua @@ -0,0 +1,112 @@ +DAnchor = {} + +-- constants +DAnchor.name_structure = mod_prefix.."dimensional-anchor" +DAnchor.name_effects = mod_prefix.."dimensional-anchor-fx" +DAnchor.check_interval = 60 +DAnchor.energy_per_tick = 1000000000 -- match the charge speed + +function DAnchor.on_entity_created(event) + local entity + if event.entity and event.entity.valid then + entity = event.entity + end + if event.created_entity and event.created_entity.valid then + entity = event.created_entity + end + if not entity then return end + if entity.name == DAnchor.name_structure then + local zone = Zone.from_surface(entity.surface) + if zone.parent and zone.parent.type == "star" then + if entity.surface.count_entities_filtered{name = DAnchor.name_structure} > 1 then + cancel_entity_creation(entity, event.player_index, {"space-exploration.dimensional_anchor_limit_1"}) + return + end + global.dimensional_anchors = global.dimensional_anchors or {} + global.dimensional_anchors[zone.index] = { + zone_index = zone.index, + structure = entity, + effects = nil, + active = false, + low_power_icon = nil + } + global.dimensional_anchors[zone.index].low_power_icon = rendering.draw_sprite{ + sprite = "utility/recharge_icon", + surface = entity.surface, + target = entity, + x_scale = 0.5, + y_scale = 0.5, + } + else + cancel_entity_creation(entity, event.player_index, {"space-exploration.dimensional_anchor_place_on_star"}) + return + end + end + +end +Event.addListener(defines.events.on_built_entity, DAnchor.on_entity_created) +Event.addListener(defines.events.on_robot_built_entity, DAnchor.on_entity_created) +Event.addListener(defines.events.script_raised_built, DAnchor.on_entity_created) +Event.addListener(defines.events.script_raised_revive, DAnchor.on_entity_created) + +function DAnchor.on_entity_removed(event) + if event.entity and event.entity.valid then + if event.entity.name == DAnchor.name_structure and global.dimensional_anchors then + for zone_index, anchor in pairs(global.dimensional_anchors) do + if anchor.structure == event.entity then + if anchor.effects and anchor.effects.valid then + anchor.effects.destroy() + anchor.effects = nil + end + global.dimensional_anchors[zone_index] = nil + end + end + end + end +end +Event.addListener(defines.events.on_player_mined_entity, DAnchor.on_entity_removed) +Event.addListener(defines.events.on_robot_mined_entity, DAnchor.on_entity_removed) +Event.addListener(defines.events.on_entity_died, DAnchor.on_entity_removed) +Event.addListener(defines.events.script_raised_destroy, DAnchor.on_entity_removed) + +function DAnchor.on_tick(event) + if game.tick % DAnchor.check_interval == 0 and global.dimensional_anchors then + for zone_index, anchor in pairs(global.dimensional_anchors) do + if anchor.structure and anchor.structure.valid then + if anchor.structure.energy > DAnchor.check_interval * DAnchor.energy_per_tick then + anchor.structure.energy = anchor.structure.energy - DAnchor.check_interval * DAnchor.energy_per_tick + if not anchor.active then + anchor.active = true + anchor.effects = anchor.structure.surface.create_entity{ + name = DAnchor.name_effects, + position = anchor.structure.position, + target = {x = anchor.structure.position.x, y = anchor.structure.position.y - 1}, + speed = 0} + rendering.destroy(anchor.low_power_icon) + end + else + if anchor.effects and anchor.effects.valid then + anchor.effects.destroy() + anchor.effects = nil + end + if anchor.active ~= false then + anchor.active = false + anchor.low_power_icon = rendering.draw_sprite{ + sprite = "utility/recharge_icon", + surface = anchor.structure.surface, + target = anchor.structure, + x_scale = 0.5, + y_scale = 0.5, + } + end + end + else + -- missing entity + end + end + end +end + +Event.addListener(defines.events.on_tick, DAnchor.on_tick) + +return DAnchor diff --git a/space-exploration_0.5.80/space-exploration/scripts/energy-beam-defence.lua b/space-exploration_0.5.80/space-exploration/scripts/energy-beam-defence.lua new file mode 100644 index 0000000..374d9bb --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/energy-beam-defence.lua @@ -0,0 +1,232 @@ +local EnergyBeamDefence = {} + +--[[ +The defence has a base power use. +It starts with full charge. +When under attack energy usage is increased based on the attack strength. +If the buffer has not recoverd sufficently between ticks then the structure is not providing defence. + + +Make a list of defences per zone +When an attack comes in, disrtibute the load of the attack on all enemy defences weighted by the defences current energy vs energy max. +Update once per second? + +zone.energy_beams = {} +zone.energy_beam_defences = {} +beam.stress_factores = {beams} +Apply a share of the load (energy) + +]] +EnergyBeamDefence.name_energy_beam_defence = mod_prefix.."energy-beam-defence" +EnergyBeamDefence.name_energy_beam_defence_glow = mod_prefix.."energy-beam-defence-glow" +EnergyBeamDefence.beam_defence_passive_draw = 10000000 --10MW +EnergyBeamDefence.beam_defence_buffer = 1000000000 --1GJ +EnergyBeamDefence.beam_defence_efficiency = 10 -- takes 1/10th the power of the emitter +EnergyBeamDefence.beam_defence_peak_flare_power = 2000000000 -- 2GW +EnergyBeamDefence.beam_defence_required = 0.5 -- + +function EnergyBeamDefence.zone_is_defended(zone, pressure_force_name) + -- force == nil == neutral + for force_name, forcedata in pairs(global.forces) do + local force = game.forces[force_name] + if pressure_force_name == nil or ((force_name ~= pressure_force_name) and (not (force.get_friend(pressure_force_name) or force.get_cease_fire(pressure_force_name)))) then + local zone_assets = Zone.get_force_assets(force_name, zone.index) + if zone_assets and zone_assets.energy_beam_defence then + for unit_number, defence in pairs(zone_assets.energy_beam_defence) do + --Log.trace(defence.entity.energy) + if defence.operational then + --Log.trace("defended") + return true + end + end + end + end + end + --Log.trace("not defended") + return false +end + +function EnergyBeamDefence.zone_add_pressure(zone, pressure) + + global.energy_beam_target_zones = global.energy_beam_target_zones or {} + global.energy_beam_target_zones[zone.index] = zone + zone.energy_beam_pressures = zone.energy_beam_pressures or { + solar = {}, + emitters = {}, + } + + if pressure.type == "solar-flare" then + if not zone.energy_beam_pressures.solar[pressure.id] then + --TODO: print message to defenecs + zone.energy_beam_pressures.solar[pressure.id] = pressure + EnergyBeamDefence.defences_apply_pressure(zone) + end + else --if pressure.type == "energy-beam-emitter-tree" then -- restore later, legacy test is missing this property + if not zone.energy_beam_pressures.emitters[pressure.unit_number] then + --TODO: print message to defenecs + zone.energy_beam_pressures.emitters[pressure.unit_number] = pressure + EnergyBeamDefence.defences_apply_pressure(zone) + end + end + + +end + +function EnergyBeamDefence.defences_apply_pressure(zone) + -- validate + if not zone.energy_beam_pressures then + global.energy_beam_target_zones[zone.index] = nil + return + end + + -- gather and validate + local pressures_count = 0 + local force_emitter_pressures = {} + + for id, tick_task in pairs(zone.energy_beam_pressures.solar) do + if tick_task.valid then + pressures_count = pressures_count + 1 + if not force_emitter_pressures["-"] then + force_emitter_pressures["-"] = 0 + end + force_emitter_pressures["-"] = force_emitter_pressures["-"] + (0.1 + 0.9 * (tick_task.age_peak or 0.0001)) * EnergyBeamDefence.beam_defence_peak_flare_power * tick_task.power_multiplier + else + zone.energy_beam_pressures.solar[id] = nil + end + end + --Log.trace(table_size(zone.energy_beam_pressures.emitters)) + for unit_number, emitter_tree in pairs(zone.energy_beam_pressures.emitters) do + --Log.trace(emitter_tree.last_temperature) + if emitter_tree.destination and emitter_tree.destination.zone and emitter_tree.destination.zone.index == zone.index and emitter_tree.emitter.valid and (emitter_tree.mode == "glaive" or emitter_tree.mode == "auto-glaive") then + pressures_count = pressures_count + 1 + if not force_emitter_pressures[emitter_tree.force_name] then + force_emitter_pressures[emitter_tree.force_name] = 0 + end + force_emitter_pressures[emitter_tree.force_name] = force_emitter_pressures[emitter_tree.force_name] + + emitter_tree.last_temperature * emitter_tree.last_efficiency * EnergyBeam.specific_heat / EnergyBeamDefence.beam_defence_efficiency + else + zone.energy_beam_pressures.emitters[unit_number] = nil + end + end + + for force_name, forcedata in pairs(global.forces) do + local zone_assets = Zone.get_force_assets(force_name, zone.index) + if zone_assets and zone_assets.energy_beam_defence then + for unit_number, defence in pairs(zone_assets.energy_beam_defence) do + if defence.entity and defence.entity.valid then + defence.pressure = 0 + defence.operational = true + defence.entity.power_usage = EnergyBeamDefence.beam_defence_passive_draw/60 + if defence.glow_id and rendering.is_valid(defence.glow_id) then + rendering.destroy(defence.glow_id) + defence.glow_id = nil + end + else + zone_assets.energy_beam_defence[unit_number] = nil + end + end + end + end + + if pressures_count == 0 then + zone.energy_beam_pressures = nil + return + end + + -- equalise + for pressure_force_name, pressure in pairs(force_emitter_pressures) do + + local defences = {} + local defences_total_energy = 0 + for force_name, forcedata in pairs(global.forces) do + local force = game.forces[force_name] + if pressure_force_name == "-" or ((force_name ~= pressure_force_name) and (not (force.get_friend(pressure_force_name) or force.get_cease_fire(pressure_force_name)))) then + local zone_assets = Zone.get_force_assets(force_name, zone.index) + if zone_assets and zone_assets.energy_beam_defence then + for unit_number, defence in pairs(zone_assets.energy_beam_defence) do + table.insert(defences, defence) + defences_total_energy = defences_total_energy + defence.entity.energy + end + end + end + end + for _, defence in pairs(defences) do + local defence_share = defences_total_energy > 0 and (defence.entity.energy / defences_total_energy) or 0.01 + defence.pressure = defence.pressure + pressure * defence_share + end + end + + for force_name, forcedata in pairs(global.forces) do + local force = game.forces[force_name] + local zone_assets = Zone.get_force_assets(force_name, zone.index) + if zone_assets and zone_assets.energy_beam_defence then + for unit_number, defence in pairs(zone_assets.energy_beam_defence) do + defence.entity.power_usage = (EnergyBeamDefence.beam_defence_passive_draw + defence.pressure)/60 + defence.operational = defence.entity.energy / EnergyBeamDefence.beam_defence_buffer > EnergyBeamDefence.beam_defence_required + if defence.pressure > 0.001 then + defence.glow_id = rendering.draw_sprite{ + sprite = EnergyBeamDefence.name_energy_beam_defence_glow, + target = defence.entity, + surface = defence.entity.surface + } + end + end + end + end + +end + +function EnergyBeamDefence.on_entity_created(event) + local entity + if event.entity and event.entity.valid then + entity = event.entity + end + if event.created_entity and event.created_entity.valid then + entity = event.created_entity + end + if not entity then return end + if entity.name == EnergyBeamDefence.name_energy_beam_defence then + local zone = Zone.from_surface(entity.surface) + if not zone then + return cancel_entity_creation(entity, event.player_index, {"space-exploration.construction-denied"}) + end + local force = entity.force + local force_name = force.name + local force_data = global.forces[force.name] + if force_data then + local zone_assets = Zone.get_force_assets(force_name, zone.index) + zone_assets.energy_beam_defence = zone_assets.energy_beam_defence or {} + local defence = { + type = "energy-beam-defence", + unit_number = entity.unit_number, + force_name = force_name, + entity = entity, + zone_index = zone.index, + pressures = { + solar = {}, + emitters = {}, + }, + operational = false + } + zone_assets.energy_beam_defence[defence.unit_number] = defence + + entity.power_usage = EnergyBeamDefence.beam_defence_passive_draw/60 + entity.electric_buffer_size = EnergyBeamDefence.beam_defence_buffer + end + end +end +Event.addListener(defines.events.on_built_entity, EnergyBeamDefence.on_entity_created) +Event.addListener(defines.events.on_robot_built_entity, EnergyBeamDefence.on_entity_created) +Event.addListener(defines.events.script_raised_built, EnergyBeamDefence.on_entity_created) +Event.addListener(defines.events.script_raised_revive, EnergyBeamDefence.on_entity_created) + +function EnergyBeamDefence.on_nth_tick_60() + if global.energy_beam_target_zones then + for zone_index, zone in pairs(global.energy_beam_target_zones) do + EnergyBeamDefence.defences_apply_pressure(zone) + end + end +end +Event.addListener("on_nth_tick_60", EnergyBeamDefence.on_nth_tick_60) -- 1 minute + +return EnergyBeamDefence diff --git a/space-exploration_0.5.80/space-exploration/scripts/energy-beam-gui.lua b/space-exploration_0.5.80/space-exploration/scripts/energy-beam-gui.lua new file mode 100644 index 0000000..bf19489 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/energy-beam-gui.lua @@ -0,0 +1,402 @@ +local EnergyBeamGUI = {} + +EnergyBeamGUI.name_transmitter_gui_root = "energy_transmitter" +EnergyBeamGUI.dropdown_options = { + {caption={"space-exploration.energy_transmitter_label_off"},tooltip={"space-exploration.energy_transmitter_tooltip_off"}}, + {caption={"space-exploration.energy_transmitter_label_energise"},tooltip={"space-exploration.energy_transmitter_tooltip_energise"}}, + {caption={"space-exploration.energy_transmitter_label_glaive"},tooltip={"space-exploration.energy_transmitter_tooltip_glaive"}}, + {caption={"space-exploration.energy_transmitter_label_auto_glaive"},tooltip={"space-exploration.energy_transmitter_tooltip_auto_glaive"}} +} +EnergyBeamGUI.dropdown_idxs = { + "off", + "energise", + "glaive", + "auto-glaive" +} + +--- Creates the energy beamer gui for a player +---@param player any +---@param tree any +function EnergyBeamGUI.gui_open(player, tree) + EnergyBeamGUI.gui_close(player) + if not tree then + Log.trace('EnergyBeamGUI.gui_open tree not found') + return + end + + local gui = player.gui.relative + local playerdata = get_make_playerdata(player) + + local anchor = {gui=defines.relative_gui_type.assembling_machine_gui, position=defines.relative_gui_position.right} + local container = gui.add{ + type = "frame", + name = EnergyBeamGUI.name_transmitter_gui_root, + direction="vertical", + anchor = anchor, + -- use gui element tags to store a reference to what energy beam transmitter thhis gui is displaying/controls + tags = { + unit_number = tree.unit_number + } + } + container.style.vertically_stretchable = "stretch_and_expand" + + local title_flow = container.add{type = "flow", "energy-beam-title-flow", direction = "horizontal"} + title_flow.add{type = "label", name = "energy-beam-title-label", style = "frame_title", caption = {"space-exploration.relative-window-settings"}, ignored_by_interaction = true} + local title_empty = title_flow.add { + type = "empty-widget", + style = "draggable_space", + ignored_by_interaction = true + } + title_empty.style.horizontally_stretchable = "on" + title_empty.style.left_margin = 4 + title_empty.style.right_margin = 0 + title_empty.style.height = 24 + local title_informatron = title_flow.add { + type="sprite-button", + name="goto_informatron_energy_beams", + sprite = "virtual-signal/informatron", + style="informatron_close_button", + tooltip={"space-exploration.informatron-open-help"} + } + title_informatron.style.width = 28 + title_informatron.style.height = 28 + + container.add{ type="label", name="energy", caption={"space-exploration.label_energy", ""}} + container.add{ type="label", name="efficiency", caption={"space-exploration.label_efficiency", ""}} + + local active_container = container.add{ type="flow", name="active_container", direction="horizontal"} + active_container.style.vertical_align = "center" + + local dropdown_tooltip_merged = {} + for _, option in pairs(EnergyBeamGUI.dropdown_options) do + local option_tooltip = {"space-exploration.simple-a-b-space", {"space-exploration.simple-bold", option.caption}, option.tooltip} + if #dropdown_tooltip_merged == 0 then + dropdown_tooltip_merged = option_tooltip + else + dropdown_tooltip_merged = {"space-exploration.simple-a-b-break", dropdown_tooltip_merged, option_tooltip} + end + end + + local dropdown = active_container.add{ + type = "drop-down", + tooltip=dropdown_tooltip_merged, + name = EnergyBeamGUI.name_transmitter_gui_root.."_dropdown", + items = { + {"space-exploration.energy_transmitter_label_off"}, + {"space-exploration.energy_transmitter_label_energise"}, + {"space-exploration.energy_transmitter_label_glaive"}, + {"space-exploration.energy_transmitter_label_auto_glaive"} + }, + selected_index = 1 -- start with off selected + } + + container.add{ type="line", name="line"} + + container.add{ type="label", name="destination-label", caption={"space-exploration.label_destination", ""}} + container.add{type="checkbox", name="list-zones-alphabetical", caption={"space-exploration.list-destinations-alphabetically"}, state=playerdata.zones_alphabetical and true or false} + + local filter_container = container.add{ type="flow", name="filter_flow", direction="horizontal"} + local filter_field = filter_container.add{ type="textfield", name="filter_list"} + filter_field.style.width = 275 + local filter_button = filter_container.add{ type = "sprite-button", name="clear_filter", sprite="utility/search_icon", + tooltip={"space-exploration.clear-filter"},} + filter_button.style.left_margin = 5 + filter_button.style.width = 28 + filter_button.style.height = 28 + + local destination_zone = tree.destination and tree.destination.zone + + local list, selected_index, values = Zone.dropdown_list_zone_destinations( + tree.force_name, + destination_zone, + playerdata.zones_alphabetical, + nil, + {list = "None", value = {type = "none"}} -- wildcard + ) + if selected_index == 1 then selected_index = 2 end + local zones_dropdown = container.add{ type="drop-down", name="energy-transmitter-list-zones", items=list, selected_index=selected_index or 2} + zones_dropdown.style.horizontally_stretchable = true + player_set_dropdown_values(player, "energy-transmitter-list-zones", values) + + container.add{ type="label", name="destination-location-label", caption={"space-exploration.label_destination_position", ""}} + + local destination_location_table = container.add{type="table", name="destination_location_table", column_count=2, draw_horizontal_lines=false} + destination_location_table.style.horizontally_stretchable = true + destination_location_table.style.column_alignments[1] = "left" -- title, search, zone list table + destination_location_table.style.column_alignments[2] = "right" -- starmap, close, selected zone info + + destination_location_table.add{ type="sprite-button", name="destination_location_button", + sprite="item/artillery-targeting-remote", tooltip = {"space-exploration.choose_coordinates"}} + destination_location_table.destination_location_button.style.right_margin = 10 + destination_location_table.add{ type="label", name="destination_location_coordinates", caption=""} + + if settings.get_player_settings(player)["se-show-zone-preview"].value then + container.add{ type="label", name="destination-location-preview-label", caption={"space-exploration.destination_preview"}} + local preview_frame = container.add{type="frame", name="destination-location-preview-frame", style="informatron_inside_deep_frame"} + preview_frame.style.horizontally_stretchable = true + preview_frame.style.vertically_stretchable = true + preview_frame.style.top_margin = 10 + preview_frame.style.minimal_height = 200 + end + + EnergyBeamGUI.gui_update(player) +end + +function EnergyBeamGUI.preview_frame_update(preview_frame, tree) + local valid_location = false + local surface = nil + if EnergyBeam.has_destination(tree) then + surface = Zone.get_surface(tree.destination.zone) + if surface then + valid_location = true + end + end + preview_frame.clear() + if valid_location then + local camera + if tree.glaive_beam and tree.glaive_beam.valid then + camera = preview_frame.add{type="camera", name="preview_camera", position=tree.destination.coordinate, zoom=0.5, surface_index=surface.index} + camera.entity = tree.glaive_beam + else + camera = preview_frame.add{type="camera", name="preview_camera", position=tree.destination.coordinate, zoom=0.5, surface_index=surface.index} + end + camera.style.vertically_stretchable = true + camera.style.horizontally_stretchable = true + end +end + +function EnergyBeamGUI.gui_update(player) + local root = player.gui.relative[EnergyBeamGUI.name_transmitter_gui_root] + if root and root.tags and root.tags.unit_number then + local tree = EnergyBeam.from_unit_number(root.tags.unit_number) + if tree then + local transfer_per_tick = (tree.last_temperature or 0) / EnergyBeam.transfer_interval + local energy_per_tick = transfer_per_tick * EnergyBeam.specific_heat + local format_energy = function(energy) + return string.format("%.2f",energy*60/1000000000) .. "GW" + end + if root["energy"] then + root["energy"].caption={ + "space-exploration.energy_transmitter_label_transfer", + format_energy(energy_per_tick) + } + end + if root["efficiency"] then + if Zone.is_solid(tree.zone) then + root["efficiency"].caption={ + "space-exploration.energy_transmitter_label_efficiency_atmo", + string.format("%.2f", (tree.last_efficiency or 0) * 100).."%" + } + else + root["efficiency"].caption={ + "space-exploration.energy_transmitter_label_efficiency", + string.format("%.2f", (tree.last_efficiency or 0) * 100).."%" + } + end + end + + local mode = tree.mode or "off" + if root["active_container"] then + local dropdown = root["active_container"][EnergyBeamGUI.name_transmitter_gui_root.."_dropdown"] + if dropdown then + for idx, item in pairs(EnergyBeamGUI.dropdown_idxs) do + if mode == item then + dropdown.selected_index = idx + end + end + end + end + + if root.destination_location_table and root.destination_location_table.destination_location_coordinates then + local coordinate = EnergyBeam.get_coordinate(tree) + if coordinate then + root.destination_location_table.destination_location_coordinates.caption = "X:"..string.format("%.0f", coordinate.x) .. " Y:"..string.format("%.0f", coordinate.y) + else + root.destination_location_table.destination_location_coordinates.caption = {"space-exploration.no-coordinates-set"} + end + end + + if root["destination-location-preview-frame"] then + EnergyBeamGUI.preview_frame_update(root["destination-location-preview-frame"], tree) + end + end + end +end + + +function EnergyBeamGUI.on_gui_click(event) + if not (event.element and event.element.valid) then return end + local element = event.element + local player = game.players[event.player_index] + local root = gui_element_or_parent(element, EnergyBeamGUI.name_transmitter_gui_root) + if not (root and root.tags and root.tags.unit_number) then return end + local tree = EnergyBeam.from_unit_number(root.tags.unit_number) + if not tree then return end + if element.name == "energy-transmitter-list-zones" then + + local value = player_get_dropdown_value(player, element.name, element.selected_index) + if type(value) == "table" then + if value.type == "zone" then + local zone_index = value.index + local zone = Zone.from_zone_index(zone_index) + if zone then + tree.destination.zone = zone + tree.destination.coordinate = nil + Log.trace("set destination to location: " .. zone.name ) + else + tree.destination.zone = nil + end + else + tree.destination.zone = nil + end + EnergyBeamGUI.gui_update(player) + else + EnergyBeamGUI.gui_close(player) + Log.trace("Error: Non-table value ") + end + elseif element.name == "clear_filter" then + element.parent.filter_list.text = "" + EnergyBeamGUI.gui_update_destinations_list(player) + elseif element.name == "destination_location_button" then + if RemoteView.is_unlocked(player) then + if not player.cursor_stack then + player.print("Error, invalid player control mode. Cannot set player.cursor_stack") + else + local playerdata = get_make_playerdata(player) + local player_zone = Zone.from_surface(player.surface) + -- if the player is not already in nav mode, put them in nav mode on their current surface to make the history nice + RemoteView.start(player) + RemoteView.start(player, tree.destination and tree.destination.zone) + -- only change the player's position to that of the energy emitter if its on a different surface + -- this lets the player keep updating the position of the energy emitter as long as they stay in nav + -- view on the targeted surface + local coordinate = EnergyBeam.get_coordinate(tree) + if coordinate and (not player.character) and player_zone ~= tree.destination.zone then + player.teleport(EnergyBeam.get_coordinate(tree)) + end + playerdata.remote_view_activity = { + type = EnergyBeam.name_target_activity_type, + tree = tree + } + player.cursor_stack.set_stack({name = EnergyBeam.name_transmitter_targeter, count = 1}) + player.opened = nil + RemoteView.gui_make_entity_back_button (player, tree.emitter) + end + else + player.print({"space-exploration.satellite-required"}) + end + elseif element.name == EnergyBeamGUI.name_transmitter_gui_root.."_dropdown" then + tree.mode = EnergyBeamGUI.dropdown_idxs[element.selected_index] + EnergyBeamGUI.gui_update(player) + Log.trace(tree.mode) + elseif element.name == "goto_informatron_energy_beams" then + remote.call("informatron", "informatron_open_to_page", { + player_index = event.player_index, + interface = "space-exploration", + page_name = "energy_beams" + }) + end +end +Event.addListener(defines.events.on_gui_click, EnergyBeamGUI.on_gui_click) +Event.addListener(defines.events.on_gui_selection_state_changed, EnergyBeamGUI.on_gui_click) + +function EnergyBeamGUI.gui_update_destinations_list(player) + local playerdata = get_make_playerdata(player) + local root = player.gui.relative[EnergyBeamGUI.name_transmitter_gui_root] + if root then + + local filter = nil + if root.filter_flow and root.filter_flow.filter_list then + filter = string.trim(root.filter_flow.filter_list.text) + if filter == "" then + filter = nil + end + end + + -- update the list + local unit_number = root and root.tags and root.tags.unit_number + local tree = EnergyBeam.from_unit_number(unit_number) + if not tree then + EnergyBeamGUI.gui_close(player) + return + end + local destination_zone + if tree then destination_zone = tree.destination.zone end + + local list, selected_index, values = Zone.dropdown_list_zone_destinations( + tree.force_name, + destination_zone, + playerdata.zones_alphabetical, + filter, + {list = "None", value = {type = "none"}} -- wildcard + ) + if selected_index == 1 then selected_index = 2 end + root["energy-transmitter-list-zones"].items = list + root["energy-transmitter-list-zones"].selected_index = selected_index or 2 + player_set_dropdown_values(player, "energy-transmitter-list-zones", values) + + end +end + +function EnergyBeamGUI.on_gui_checked_state_changed(event) + if not (event.element and event.element.valid) then return end + local element = event.element + local player = game.players[event.player_index] + local root = gui_element_or_parent(element, EnergyBeamGUI.name_transmitter_gui_root) + if not (root and root.tags and root.tags.unit_number) then return end + local tree = EnergyBeam.from_unit_number(root.tags.unit_number) + if not tree then return end + if element.name == "list-zones-alphabetical" then + local playerdata = get_make_playerdata(player) + playerdata.zones_alphabetical = element.state + EnergyBeamGUI.gui_update_destinations_list(player) + end +end +Event.addListener(defines.events.on_gui_checked_state_changed, EnergyBeamGUI.on_gui_checked_state_changed) + +function EnergyBeamGUI.on_gui_text_changed(event) + if not (event.element and event.element.valid) then return end + local element = event.element + local player = game.players[event.player_index] + local root = gui_element_or_parent(element, EnergyBeamGUI.name_transmitter_gui_root) + if root then -- remote view + if element.name == "filter_list" then + EnergyBeamGUI.gui_update_destinations_list(player) + end + end +end +Event.addListener(defines.events.on_gui_text_changed, EnergyBeamGUI.on_gui_text_changed) + +--- Close the energy beamer gui for a player +---@param player any +function EnergyBeamGUI.gui_close (player) + if player.gui.relative[EnergyBeamGUI.name_transmitter_gui_root] then + player.gui.relative[EnergyBeamGUI.name_transmitter_gui_root].destroy() + end +end + +--- Respond to the main entity GUI being closed by destroying the relative GUI +---@param event any +function EnergyBeamGUI.on_gui_closed(event) + local player = game.players[event.player_index] + if player and event.entity and event.entity.name == EnergyBeam.name_emitter then + EnergyBeamGUI.gui_close(player) + end +end +Event.addListener(defines.events.on_gui_closed, EnergyBeamGUI.on_gui_closed) + +--- Opens the energy beamer gui when an energy beamer is clicked +--- Closes the energy beamer gui when another gui is opened +---@param event any +function EnergyBeamGUI.on_gui_opened(event) + local player = game.players[event.player_index] + if event.entity and event.entity.valid and event.entity.name == EnergyBeam.name_emitter then + EnergyBeamGUI.gui_open(player, EnergyBeam.from_entity(event.entity)) + else + EnergyBeamGUI.gui_close(player) + end +end +Event.addListener(defines.events.on_gui_opened, EnergyBeamGUI.on_gui_opened) + + +return EnergyBeamGUI diff --git a/space-exploration_0.5.80/space-exploration/scripts/energy-beam.lua b/space-exploration_0.5.80/space-exploration/scripts/energy-beam.lua new file mode 100644 index 0000000..e8bef1b --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/energy-beam.lua @@ -0,0 +1,945 @@ +-- Used for energy transmission and cross-surface energy beam weapons. +local EnergyBeam = {} + +EnergyBeam.name_emitter = mod_prefix.."energy-transmitter-emitter" +EnergyBeam.name_chamber = mod_prefix.."energy-transmitter-chamber" +EnergyBeam.name_injector = mod_prefix.."energy-transmitter-injector" +EnergyBeam.name_injector_reactor = mod_prefix.."energy-transmitter-injector-reactor" +EnergyBeam.name_receiver = mod_prefix.."energy-receiver" +EnergyBeam.name_receiver_beam = mod_prefix.."energy-receiver-beam" -- projectile +EnergyBeam.name_glaive_beam = mod_prefix.."energy-glaive-beam" -- projectile +EnergyBeam.name_glaive_beam_sprite = mod_prefix.."energy-glaive-beam-sprite" -- sprite +EnergyBeam.name_glaive_path_fx = mod_prefix.."energy-glaive-path-fx" +EnergyBeam.name_glaive_damage_projectile = mod_prefix.."energy-glaive-damage-projectile" +EnergyBeam.name_glaive_damage_aoe = mod_prefix.."energy-glaive-damage-aoe" +EnergyBeam.name_glaive_damage_aoe_large = mod_prefix.."energy-glaive-damage-aoe-large" +EnergyBeam.name_glaive_damage_aoe_large_10 = mod_prefix.."energy-glaive-damage-aoe-large-10" + +EnergyBeam.emitter_width = 10 +EnergyBeam.chamber_box = {x=8, y=4} +EnergyBeam.injector_length = 5 + +EnergyBeam.name_transmitter_targeter = mod_prefix .. "energy-transmitter-targeter" +EnergyBeam.name_target_activity_type = "energy-transmitter-target" +EnergyBeam.name_transmitter_effect = mod_prefix .. "energy-transmitter-beam" +EnergyBeam.transfer_interval = 60 +EnergyBeam.specific_heat = 1000000000 -- 1GJ +EnergyBeam.injector_donate_rate = 0.05 +EnergyBeam.injector_waste_rate = 0.005 +EnergyBeam.beam_speed_base = 0.05 +EnergyBeam.beam_speed_temperature_multiplier = 0.06 +EnergyBeam.beam_speed_temperature_exponent = 0.7 +EnergyBeam.large_aoe_heat = 100 + +EnergyBeam.glaive_cost_aoe = 0.5 +EnergyBeam.glaive_cost_aoe_large = 1.2 +EnergyBeam.glaive_cost_aoe_large_10 = 12 + +--- Gets the EnergyBeam for this unit_number +---@param unit_number number +function EnergyBeam.from_unit_number (unit_number) + if not unit_number then Log.trace("EnergyBeam.from_unit_number: invalid unit_number: nil") return end + unit_number = tonumber(unit_number) + if global.energy_transmitters[unit_number] then + return global.energy_transmitters[unit_number] + else + Log.trace("EnergyBeam.from_unit_number: invalid unit_number: " .. unit_number) + end +end + +--- Gets the EnergyBeam for this entity +---@param entity LuaEntity +function EnergyBeam.from_entity (entity) + if not(entity and entity.valid) then + Log.trace("EnergyBeam.from_entity: invalid entity") + return + end + return EnergyBeam.from_unit_number(entity.unit_number) +end + +--- Does the enery beamer have a destination set +---@param tree any +function EnergyBeam.has_destination(tree) + return tree and tree.destination and tree.destination.coordinate and tree.destination.zone +end + +function EnergyBeam.get_transmission_efficiency(origin, destination) + if origin and destination then + local delta_v = Zone.get_launch_delta_v(origin) + Zone.get_travel_delta_v(origin, destination) + local efficiency = 1- delta_v/(delta_v+10000) + + local origin_stellar_position = Zone.get_stellar_position(origin) + local destination_stellar_position = Zone.get_stellar_position(destination) + + if destination.type == "anomaly" or origin.type == "anomaly" then + efficiency = efficiency * 0.01 + else + if origin_stellar_position and destination_stellar_position then -- interstellar less effective + if Util.vectors_delta_length(origin_stellar_position, destination_stellar_position) > 0.001 then + efficiency = efficiency * 0.5 + end + else + efficiency = efficiency * 0.5 + end + end + + if Zone.is_solid(origin) then + efficiency = efficiency * 0.5 + end + return efficiency + end +end + + +function EnergyBeam.get_coordinate(tree) + if tree.destination and tree.destination.coordinate then + return tree.destination.coordinate + end + --return tree.emitter.position -- return nil +end + +function EnergyBeam.clear_end_beam(tree) + if tree.receiver_beam and tree.receiver_beam.valid then + tree.receiver_beam.destroy() + tree.receiver_beam = nil + end + if tree.glaive_beam and tree.glaive_beam.valid then + tree.glaive_beam.destroy() + tree.glaive_beam = nil + end + EnergyBeam.remove_markers(tree) +end + +function EnergyBeam.collect_heat(tree, waste) + local temperature = 0 + for _, injector_reactor in pairs(tree.injector_reactors) do + if injector_reactor.valid then + local heat = (injector_reactor.temperature - 15) * EnergyBeam.injector_donate_rate + if heat > 1 then heat = math.pow(heat, 0.5) end -- reduce overload charge efficiency + local remove = (injector_reactor.temperature - 15) * (waste and EnergyBeam.injector_waste_rate or EnergyBeam.injector_donate_rate) + injector_reactor.temperature = injector_reactor.temperature - remove + temperature = temperature + heat + end + end + return temperature +end + +function EnergyBeam.beam_step_idle(tree) + EnergyBeam.clear_end_beam(tree) + if tree.emitter_beam and tree.emitter_beam.valid then + tree.emitter_beam.destroy() + end + + local temperature = EnergyBeam.collect_heat(tree, true) -- waste + tree.last_temperature = temperature + + if tree.destination and tree.destination.zone then + local efficiency = EnergyBeam.get_transmission_efficiency(tree.zone, tree.destination.zone) + tree.last_efficiency = efficiency + else + tree.last_efficiency = 0 + end +end + +function EnergyBeam.find_enemy(tree) + local destination_surface = Zone.get_make_surface(tree.destination.zone) + local position = tree.destination.coordinate or {x = 0, y = 0} + local force = game.forces[tree.force_name] + local enemy = find_enemy(force, destination_surface, position) + + if enemy then + tree.destination.coordinate = enemy.position + tree.destination.enemy = enemy + force.chart(destination_surface, Util.position_to_area(enemy.position, 32)) + return + end + -- nothing found + game.forces[tree.force_name].print({ + "space-exploration.energy-transmitter-no-enemies-found", + "[gps="..math.floor(tree.emitter.position.x)..","..math.floor(tree.emitter.position.y)..","..destination_surface.name.."]" + }) + tree.mode = "off" +end + +function EnergyBeam.scale_glaive_sprite(tree) + local position = EnergyBeam.get_coordinate(tree) + if not position then + if not (tree.glaive_beam and tree.glaive_beam.valid) then return end + position = tree.glaive_beam.position + end + + if not (tree.glaive_beam and tree.glaive_beam.valid) then + local destination_surface = Zone.get_make_surface(tree.destination.zone) + tree.glaive_beam = destination_surface.create_entity{ + name = EnergyBeam.name_glaive_beam, + position = position, + target = Util.vectors_add(position, {x=0,y=-1}), + speed = 0, + force = tree.force_name + } + end + if not (tree.glaive_beam_sprite_id and rendering.is_valid(tree.glaive_beam_sprite_id)) then + tree.glaive_beam_sprite_id = rendering.draw_sprite{ + target = tree.glaive_beam, + sprite = EnergyBeam.name_glaive_beam_sprite, + surface = tree.glaive_beam.surface, + } + end + rendering.set_y_scale(tree.glaive_beam_sprite_id, 0.5 + 1.5 * math.min(1, tree.last_temperature / 100)) + rendering.set_x_scale(tree.glaive_beam_sprite_id, 0.4 + 2 * math.min(1, tree.last_temperature / 100)) + rendering.set_color(tree.glaive_beam_sprite_id, { + r = 1, + g = 0.5 + 0.5 * math.min(1, tree.last_temperature / 100), + b = 0.5 + 0.5 * math.min(1, tree.last_temperature / 100) }) + +end + +function EnergyBeam.remove_markers(tree) + if tree.markers then + for _, marker in pairs(tree.markers) do + if marker and marker.valid then + marker.destroy() + end + end + end + tree.markers = nil +end + +function EnergyBeam.add_markers(tree) + EnergyBeam.remove_markers(tree) + if tree.glaive_beam and tree.glaive_beam.valid then + tree.markers = {} + for force_name, forcedata in pairs(global.forces) do + if force_name ~= "friendly" and force_name ~= "ignore" and force_name ~= "capture" then + tree.markers[force_name] = game.forces[force_name].add_chart_tag(tree.glaive_beam.surface, { + icon = {type = "virtual", name = mod_prefix.."heat"}, + position = tree.glaive_beam.position, + text = "Energy Glaive" + }) + end + end + end +end + +function EnergyBeam.beam_step(tree) + local mode = tree.mode or "off" + local position = EnergyBeam.get_coordinate(tree) + if position == nil and mode == "auto-glaive" then + EnergyBeam.find_enemy(tree) + position = EnergyBeam.get_coordinate(tree) + end + + if mode == "off" or (not position) or not (tree.destination and tree.destination.zone) then + EnergyBeam.beam_step_idle(tree) + else + + local zone = tree.zone + local efficiency = EnergyBeam.get_transmission_efficiency(zone, tree.destination.zone) + tree.last_efficiency = efficiency + local destination_surface = Zone.get_make_surface(tree.destination.zone) + local emitter_beam = false + + if mode == "energise" then + local receiver = destination_surface.find_entity(EnergyBeam.name_receiver, position) + if receiver then + local temperature = EnergyBeam.collect_heat(tree) + tree.last_temperature = temperature + if temperature > 0.1 then + emitter_beam = true + if tree.glaive_beam then EnergyBeam.clear_end_beam(tree) end + receiver.temperature = receiver.temperature + temperature * efficiency + if not (tree.receiver_beam and tree.receiver_beam.valid) then + tree.receiver_beam = destination_surface.create_entity{ + name = EnergyBeam.name_receiver_beam, + position = receiver.position, + target = Util.vectors_add(receiver.position, {x=0,y=-1}), + speed = 0 + } + end + end + else + EnergyBeam.beam_step_idle(tree) + end + if emitter_beam == false then EnergyBeam.clear_end_beam(tree) end + + elseif mode == "glaive" or mode == "auto-glaive" then + + local temperature = EnergyBeam.collect_heat(tree) + tree.last_temperature = temperature + if temperature > 0.1 then + EnergyBeamDefence.zone_add_pressure(tree.destination.zone, tree) + + if tree.receiver_beam then EnergyBeam.clear_end_beam(tree) end + tree.glaive_energy = (tree.glaive_energy or 0) + temperature * efficiency + if EnergyBeamDefence.zone_is_defended(tree.destination.zone, tree.force_name) then + -- the beam is blocked but pressure is being applied + if tree.glaive_beam and tree.glaive_beam.valid then + tree.glaive_beam.destroy() + tree.glaive_beam = nil + end + tree.glaive_energy = 0 + emitter_beam = true + else + if tree.glaive_energy > 0.1 then + emitter_beam = true + end + if emitter_beam == false then + EnergyBeam.beam_move(tree) -- removes? + else + EnergyBeam.scale_glaive_sprite(tree) + if mode == "auto-glaive" then + -- find target + if tree.destination.coordinate == nil or Util.vectors_delta_length(tree.destination.coordinate, tree.glaive_beam.position) < 0.1 then + EnergyBeam.find_enemy(tree) + end + end + tree.glaive_beam.surface.create_entity{ + name = "fire-flame-on-tree", + position = tree.glaive_beam.position, + force = tree.force_name + } + + EnergyBeam.add_markers(tree) + + end + end + end + end + + if emitter_beam then + if not (tree.emitter_beam and tree.emitter_beam.valid) then + tree.emitter_beam = tree.emitter.surface.create_entity{ + name = EnergyBeam.name_transmitter_effect, + position = tree.emitter.position, + target = {x = tree.emitter.position.x, y = tree.emitter.position.y - 1}, + speed = 0} + end + else + if tree.emitter_beam and tree.emitter_beam.valid then + tree.emitter_beam.destroy() + end + end + + end + +end + +function EnergyBeam.beam_move(tree) + if not tree.destination.zone then + tree.mode = "off" + EnergyBeam.beam_step_idle(tree) + return + end + local position = EnergyBeam.get_coordinate(tree) + if not position then + if not (tree.glaive_beam and tree.glaive_beam.valid) then return end + position = tree.glaive_beam.position + end + + EnergyBeam.scale_glaive_sprite(tree) + local curent_position = tree.glaive_beam.position + + local move_speed = EnergyBeam.beam_speed_base * (1 + math.pow(EnergyBeam.beam_speed_temperature_multiplier * tree.last_temperature, EnergyBeam.beam_speed_temperature_exponent)) + local new_position = util.move_to(curent_position, position, move_speed, false) + tree.glaive_beam.teleport(new_position) + + -- update the target position to a potentially moving enemy + local target_valid = tree.destination.enemy and tree.destination.enemy.valid and tree.destination.enemy.destructible + if target_valid then + tree.destination.coordinate = tree.destination.enemy.position + end + + -- find a new enemy if we are at the destination and the enemy is not still alive + if Util.vectors_delta_length(new_position, position) < 0.1 and tree.mode == "auto-glaive" and not target_valid then + EnergyBeam.find_enemy(tree) + end + + tree.glaive_energy_2 = tree.glaive_energy_2 or 0 + if tree.glaive_energy_2 < tree.glaive_energy then + tree.glaive_energy_2 = tree.glaive_energy_2 + tree.glaive_energy / 600 + tree.glaive_energy = tree.glaive_energy - tree.glaive_energy / 600 + end + + local energy_to_use = tree.glaive_energy_2 / 100 + local energy_used = 0 + --local cost_projectile = 0.05 + + if new_position.x ~= curent_position.x and new_position.y ~= curent_position.y and math.random() < 0.1 then + tree.glaive_beam.surface.create_entity{ + name = "fire-flame-on-tree", + position = tree.glaive_beam.position, + force = tree.force_name + } + tree.glaive_beam.surface.create_entity{ + name = EnergyBeam.name_glaive_path_fx, + position = tree.glaive_beam.position, + force = tree.force_name + } + end + + while energy_used + EnergyBeam.glaive_cost_aoe_large <= energy_to_use do + if tree.last_temperature > EnergyBeam.large_aoe_heat then + if energy_used + EnergyBeam.glaive_cost_aoe_large_10 <= energy_to_use then + energy_used = energy_used + EnergyBeam.glaive_cost_aoe_large_10 + tree.glaive_beam.surface.create_entity{ + name = EnergyBeam.name_glaive_damage_aoe_large_10, + position = tree.glaive_beam.position, + force = tree.force_name + } + else + energy_used = energy_used + EnergyBeam.glaive_cost_aoe_large + tree.glaive_beam.surface.create_entity{ + name = EnergyBeam.name_glaive_damage_aoe_large, + position = tree.glaive_beam.position, + force = tree.force_name + } + end + else + local r = math.random() + if r < tree.last_temperature/EnergyBeam.large_aoe_heat then -- transition the damage to lower direct dps but larger area as it gets towards 100 GW + energy_used = energy_used + EnergyBeam.glaive_cost_aoe_large + tree.glaive_beam.surface.create_entity{ + name = EnergyBeam.name_glaive_damage_aoe_large, + position = tree.glaive_beam.position, + force = tree.force_name + } + else + energy_used = energy_used + EnergyBeam.glaive_cost_aoe + tree.glaive_beam.surface.create_entity{ + name = EnergyBeam.name_glaive_damage_aoe, + position = tree.glaive_beam.position, + force = tree.force_name + } + end + end + --[[else + energy_used = energy_used + cost_projectile + tree.glaive_beam.surface.create_entity{ + name = EnergyBeam.name_glaive_damage_projectile, + position = tree.glaive_beam.position, + target = Util.vectors_add(tree.glaive_beam.position, Util.orientation_to_vector(math.random(), 5)), + speed = 1, + max_range = 5, + force = tree.force_name + } + end]] + end + tree.glaive_energy_2 = tree.glaive_energy_2 - energy_used +end + +function EnergyBeam.destroy(tree) + if not tree then + Log.trace("tree_destroy: no tree") + return + end + + tree.valid = false + EnergyBeam.clear_end_beam(tree) + if tree.emitter_beam and tree.emitter_beam.valid then + tree.emitter_beam.destroy() + end + global.energy_transmitters[tree.unit_number] = nil + + -- if a player has this gui open then close item-layer + local gui_name = EnergyBeamGUI.name_transmitter_gui_root + for _, player in pairs(game.connected_players) do + local root = player.gui.relative[gui_name] + if root and root.tags and root.tags.unit_number == tree.unit_number then + root.destroy() + end + end +end + +function EnergyBeam.on_tick(tree) + if global.energy_transmitters then + -- beam update + for _, tree in pairs(global.energy_transmitters) do + if (game.tick + tree.unit_number) % 60 == 0 then + EnergyBeam.beam_step(tree) + elseif tree.glaive_beam then + EnergyBeam.beam_move(tree) + end + end + + -- gui update + if game.tick % 60 == 0 then + for _, player in pairs(game.connected_players) do + EnergyBeamGUI.gui_update(player) + end + end + end +end +Event.addListener(defines.events.on_tick, EnergyBeam.on_tick) + +function EnergyBeam.on_player_selected_area(event) + if (event.item == EnergyBeam.name_transmitter_targeter) then + local player = game.players[event.player_index] + local playerdata = get_make_playerdata(player) + if playerdata.remote_view_activity and playerdata.remote_view_activity.type == EnergyBeam.name_target_activity_type then + local tree = playerdata.remote_view_activity.tree + if tree.emitter and tree.emitter.valid then + tree.destination.coordinate = { + x = (event.area.left_top.x + event.area.right_bottom.x) / 2, + y = (event.area.left_top.y + event.area.right_bottom.y) / 2 + } + tree.destination.zone = Zone.from_surface(player.surface) + player.print({"space-exploration.energy-transmitter-coordinates-set", math.floor(tree.destination.coordinate.x), math.floor(tree.destination.coordinate.y)}) + if tree.mode == "energise" then + EnergyBeam.clear_end_beam(tree) + end + end + end + end +end +Event.addListener(defines.events.on_player_selected_area, EnergyBeam.on_player_selected_area) + +function EnergyBeam.on_init(event) + global.energy_transmitters = {} +end +Event.addListener("on_init", EnergyBeam.on_init, true) + +function EnergyBeam.chamber_connections(entity, update_neighbours) + local surface = entity.surface + local is_horizontal = entity.direction == defines.direction.east or entity.direction == defines.direction.west + local x = (is_horizontal and EnergyBeam.chamber_box.x or EnergyBeam.chamber_box.y)/2 + local y = (is_horizontal and EnergyBeam.chamber_box.y or EnergyBeam.chamber_box.x)/2 + + local north = surface.find_entity(EnergyBeam.name_chamber, Util.vectors_add(entity.position, {x=0, y= -y -1})) + if north and north.position.x == entity.position.x then + if north.position.y == entity.position.y - y - EnergyBeam.chamber_box.y / 2 then -- north is connected by side + --Log.trace("north is connected by side") + if not is_horizontal then + surface.create_entity{ + name=mod_prefix .. "energy-transmitter-chamber-addon-bottom", + position= Util.vectors_add(north.position, {x=0, y=1}), + surface=surface, + } + end + elseif north.position.y == entity.position.y - y - EnergyBeam.chamber_box.x / 2 then -- north is connected by end + --Log.trace("north is connected by end") + if is_horizontal then + surface.create_entity{ + name=mod_prefix .. "energy-transmitter-chamber-addon-top", + position= Util.vectors_add(entity.position, {x=0, y=0.5}), + surface=surface, + } + end + end + end + local south = surface.find_entity(EnergyBeam.name_chamber, Util.vectors_add(entity.position, {x=0, y= y +1})) + if south and south.position.x == south.position.x then + if south.position.y == entity.position.y + y + EnergyBeam.chamber_box.y / 2 then -- south is connected by side + --Log.trace("south is connected by side") + if not is_horizontal then + surface.create_entity{ + name=mod_prefix .. "energy-transmitter-chamber-addon-top", + position= Util.vectors_add(south.position, {x=0, y=0.5}), + surface=surface, + } + end + elseif south.position.y == entity.position.y + y + EnergyBeam.chamber_box.x / 2 then -- south is connected by end + --Log.trace("south is connected by end") + if is_horizontal then + surface.create_entity{ + name=mod_prefix .. "energy-transmitter-chamber-addon-bottom", + position= Util.vectors_add(entity.position, {x=0, y=1}), + surface=surface, + } + end + end + end + local east = surface.find_entity(EnergyBeam.name_chamber, Util.vectors_add(entity.position, {x=x+1, y=0})) + if east and east.position.y == entity.position.y then + if east.position.x == entity.position.x + x + EnergyBeam.chamber_box.y / 2 then -- east is connected by side + --Log.trace("east is connected by side") + if is_horizontal then + surface.create_entity{ + name=mod_prefix .. "energy-transmitter-chamber-addon-left", + position= Util.vectors_add(east.position, {x=-1, y=0.01}), + surface=surface, + } + end + elseif east.position.x == entity.position.x + x + EnergyBeam.chamber_box.x / 2 then -- east is connected by end + --Log.trace("east is connected by end") + if not is_horizontal then + surface.create_entity{ + name=mod_prefix .. "energy-transmitter-chamber-addon-right", + position= Util.vectors_add(entity.position, {x=1, y=0}), + surface=surface, + } + end + end + end + local west = surface.find_entity(EnergyBeam.name_chamber, Util.vectors_add(entity.position, {x=-x-1, y=0})) + if west and west.position.y == entity.position.y then + if west.position.x == entity.position.x - x - EnergyBeam.chamber_box.y / 2 then -- west is connected by side + --Log.trace("west is connected by side") + if is_horizontal then + surface.create_entity{ + name=mod_prefix .. "energy-transmitter-chamber-addon-right", + position= Util.vectors_add(west.position, {x=1, y=0}), + surface=surface, + } + end + elseif west.position.x == entity.position.x - x - EnergyBeam.chamber_box.x / 2 then -- west is connected by end + --Log.trace("west is connected by end") + if not is_horizontal then + surface.create_entity{ + name=mod_prefix .. "energy-transmitter-chamber-addon-left", + position= Util.vectors_add(entity.position, {x=-1, y=0.01}), + surface=surface, + } + end + end + end + + -- injector connections + local leaves + if is_horizontal then + leaves = surface.find_entities_filtered{ + name = EnergyBeam.name_injector, + area = Util.area_add_position({{-EnergyBeam.chamber_box.x / 2 + 1, -EnergyBeam.chamber_box.y / 2 - 1}, {EnergyBeam.chamber_box.x / 2 - 1, EnergyBeam.chamber_box.y / 2 + 1}}, entity.position) + } + else + leaves = surface.find_entities_filtered{ + name = EnergyBeam.name_injector, + area = Util.area_add_position({{-EnergyBeam.chamber_box.y / 2 - 1, -EnergyBeam.chamber_box.x / 2 + 1}, {EnergyBeam.chamber_box.y / 2 + 1, EnergyBeam.chamber_box.x / 2 - 1}}, entity.position) + } + end + for _, injector in pairs(leaves) do + -- update + EnergyBeam.remove_injector_connections(injector) + EnergyBeam.injector_connections(injector) + end + +end + +function EnergyBeam.remove_chamber_connections(entity) + local surface = entity.surface + local is_horizontal = entity.direction == defines.direction.east or entity.direction == defines.direction.west + local x = is_horizontal and (EnergyBeam.chamber_box.x / 2 + 1) or (EnergyBeam.chamber_box.y / 2) + local y = is_horizontal and (EnergyBeam.chamber_box.y / 2) or (EnergyBeam.chamber_box.x / 2 + 1) + local addons = surface.find_entities_filtered{ + name = { + mod_prefix .. "energy-transmitter-chamber-addon-top", + mod_prefix .. "energy-transmitter-chamber-addon-bottom", + mod_prefix .. "energy-transmitter-chamber-addon-left", + mod_prefix .. "energy-transmitter-chamber-addon-right", + }, + area = {{entity.position.x-x, entity.position.y-y}, {entity.position.x+x,entity.position.y+y+1.5}} + } + for _, addon in pairs(addons) do + addon.destroy() + end +end + +function EnergyBeam.injector_connections(entity) + local surface = entity.surface + local direction = entity.direction + local is_horizontal = direction == defines.direction.east or direction == defines.direction.west + local vector = Util.direction_to_vector(direction) + + local chamber = surface.find_entity(EnergyBeam.name_chamber, Util.vectors_add(entity.position, Util.vector_multiply(vector, (EnergyBeam.injector_length + 1)/2))) + if chamber then + local chamber_is_horizontal = chamber.direction == defines.direction.east or chamber.direction == defines.direction.west + if is_horizontal ~= chamber_is_horizontal then + local addon = surface.create_entity{ + name = mod_prefix .. "energy-transmitter-injector-addon", + position = Util.vectors_add(entity.position, Util.vector_multiply(vector, (EnergyBeam.injector_length)/2)) + } + addon.graphics_variation = (direction + 2) / 2 + end + end +end + +function EnergyBeam.remove_injector_connections(entity) + local surface = entity.surface + local direction = entity.direction + local addons + if entity.name == EnergyBeam.name_injector then + local vector = Util.direction_to_vector(direction) + addons = {surface.find_entity(mod_prefix .. "energy-transmitter-injector-addon", Util.vectors_add(entity.position, Util.vector_multiply(vector, (EnergyBeam.injector_length)/2)))} + elseif entity.name == EnergyBeam.name_chamber then + local is_horizontal = direction == defines.direction.east or direction == defines.direction.west + local x = (is_horizontal and EnergyBeam.chamber_box.x or EnergyBeam.chamber_box.y)/2+0.5 + local y = (is_horizontal and EnergyBeam.chamber_box.y or EnergyBeam.chamber_box.x)/2+0.5 + addons = surface.find_entities_filtered{ + name = mod_prefix .. "energy-transmitter-injector-addon", + area = Util.area_add_position({{-x,-y},{x,y}}, entity.position) + } + end + if addons then + for _, addon in pairs(addons) do + addon.destroy() + end + end +end + +function EnergyBeam.rebuild_trees(zone, immediate) + + -- remove old tick tasks + if global.tick_tasks then + for _, tick_task in pairs(global.tick_tasks) do + if tick_task.type == "grow_energy_tree" and tick_task.zone == zone then + tick_task.valid = false + global.tick_tasks[tick_task.id] = nil + end + end + end + + if zone then + local tick_task = new_tick_task("grow_energy_tree") + tick_task.zone = zone + + if immediate then + EnergyBeam.grow_energy_tree(tick_task) + end + end +end + +function EnergyBeam.grow_energy_tree(tick_task) + local zone = tick_task.zone + local surface = Zone.get_make_surface(zone) + + if not tick_task.emitters then + -- init + zone.energy_transmitters = zone.energy_transmitters or {} + global.energy_transmitters = global.energy_transmitters or {} + for unit_number, tree in pairs(zone.energy_transmitters) do + if not tree.emitter.valid then + -- remove invalid trees + zone.energy_transmitters[unit_number] = nil + global.energy_transmitters[unit_number] = nil + + else + tree.chamberes = {} + tree.leaves = {} + tree.injector_reactors = {} + tree.open = {tree.emitter} + end + end + + tick_task.emitters = surface.find_entities_filtered{name = EnergyBeam.name_emitter} + for _, emitter in pairs(tick_task.emitters) do + if not zone.energy_transmitters[emitter.unit_number] then + zone.energy_transmitters[emitter.unit_number] = { + type = "energy-beam-emitter-tree", + unit_number = emitter.unit_number, + valid = true, + zone = zone, + force_name = emitter.force.name, + emitter = emitter, + chamberes = {}, + leaves = {}, + injector_reactors = {}, + open = {emitter}, + destination = {type = "zone", zone = zone} + } + global.energy_transmitters[emitter.unit_number] = zone.energy_transmitters[emitter.unit_number] + end + end + -- chamberes are moreved from the list as they are assigned to trees + tick_task.chamberes = surface.find_entities_filtered{name = EnergyBeam.name_chamber} + + -- when a chamber is added to a tree, trach the tree for the chamber (so leaves can find the tree by finding the chamber) + tick_task.chamber_trees = {} + end + + tick_task.valid = false -- end unless chamberes are found + + for _, tree in pairs(zone.energy_transmitters) do + local open = tree.open + tree.open = {} + for _, entity in pairs(open) do + if entity.name == EnergyBeam.name_emitter then + -- find chamberes connected end-on + local extent = (EnergyBeam.emitter_width + EnergyBeam.chamber_box.x)/2 + for i, chamber in pairs(tick_task.chamberes) do + if (chamber.position.x == entity.position.x and (chamber.position.y == entity.position.y + extent or chamber.position.y == entity.position.y - extent)) + or (chamber.position.y == entity.position.y and (chamber.position.x == entity.position.x + extent or chamber.position.x == entity.position.x - extent)) then + tree.chamberes[chamber.unit_number] = chamber + tree.open[chamber.unit_number] = chamber + tick_task.chamber_trees[chamber.unit_number] = tree + tick_task.chamberes[i] = nil + tick_task.valid = true + end + end + elseif entity.name == EnergyBeam.name_chamber then + -- find chamberes connected + local extent_short = (EnergyBeam.chamber_box.x + EnergyBeam.chamber_box.y) / 2 + local extent_long = (EnergyBeam.chamber_box.x + EnergyBeam.chamber_box.x) / 2 + local is_horizontal = entity.direction == defines.direction.east or entity.direction == defines.direction.west + for i, chamber in pairs(tick_task.chamberes) do + local chamber_is_horizontal = chamber.direction == defines.direction.east or chamber.direction == defines.direction.west + if (is_horizontal ~= chamber_is_horizontal and ((chamber.position.x == entity.position.x and (chamber.position.y == entity.position.y + extent_short or chamber.position.y == entity.position.y - extent_short)) + or (chamber.position.y == entity.position.y and (chamber.position.x == entity.position.x + extent_short or chamber.position.x == entity.position.x - extent_short)))) + or (is_horizontal == chamber_is_horizontal and ((chamber.position.x == entity.position.x and (chamber.position.y == entity.position.y + extent_long or chamber.position.y == entity.position.y - extent_long)) + or (chamber.position.y == entity.position.y and (chamber.position.x == entity.position.x + extent_long or chamber.position.x == entity.position.x - extent_long)))) then + tree.chamberes[chamber.unit_number] = chamber + tick_task.chamber_trees[chamber.unit_number] = tree + tree.open[chamber.unit_number] = chamber + tick_task.chamberes[i] = nil + tick_task.valid = true + end + end + end + end + end + + if not tick_task.valid then -- finished the chamberes, add the leaves + for _, entity in pairs(surface.find_entities_filtered{name = EnergyBeam.name_injector}) do + local direction = entity.direction + local is_horizontal = direction == defines.direction.east or direction == defines.direction.west + local vector = Util.direction_to_vector(direction) + + local chamber = surface.find_entity(EnergyBeam.name_chamber, Util.vectors_add(entity.position, Util.vector_multiply(vector, (EnergyBeam.injector_length + 1)/2))) + if chamber then + local chamber_is_horizontal = chamber.direction == defines.direction.east or chamber.direction == defines.direction.west + if is_horizontal ~= chamber_is_horizontal then + -- if the chamber is part of a tree + if tick_task.chamber_trees[chamber.unit_number] then + -- add the injector to the tree + local injector_reactor = surface.find_entity(EnergyBeam.name_injector_reactor, entity.position) + if injector_reactor then + tick_task.chamber_trees[chamber.unit_number].leaves[entity.unit_number] = entity + tick_task.chamber_trees[chamber.unit_number].injector_reactors[injector_reactor.unit_number] = injector_reactor + end + end + end + end + end + for _, tree in pairs(zone.energy_transmitters) do + Log.trace(table_size(tree.leaves)) + end + end + +end + + +function EnergyBeam.on_entity_created(event) + local entity = util.get_entity_from_event(event) + + if not entity then return end + if entity.name == EnergyBeam.name_chamber or entity.name == EnergyBeam.name_injector or entity.name == EnergyBeam.name_emitter then + local zone = Zone.from_surface(entity.surface) + if zone and zone.type ~= "spaceship" then + if entity.name == EnergyBeam.name_chamber then + -- check connections + EnergyBeam.chamber_connections(entity, true) + elseif entity.name == EnergyBeam.name_injector then + -- check connections + EnergyBeam.injector_connections(entity, true) + local reactor = entity.surface.create_entity{ name = EnergyBeam.name_injector_reactor, position = entity.position, force = entity.force} + reactor.destructible = false + end + EnergyBeam.rebuild_trees(zone, true) + local tree = global.energy_transmitters[entity.unit_number] + + -- set settings + local tags = util.get_tags_from_event(event, EnergyBeam.serialize) + if tags then + EnergyBeam.deserialize(entity, tags) + end + + if tree and entity.name == EnergyBeam.name_emitter and event.player_index and game.players[event.player_index] and game.players[event.player_index].connected then + EnergyBeamGUI.gui_open(game.players[event.player_index], tree) + end + else + cancel_entity_creation(entity, event.player_index, {"space-explortion.construction-denied"}) + return + end + end + +end +Event.addListener(defines.events.on_entity_cloned, EnergyBeam.on_entity_created) +Event.addListener(defines.events.on_built_entity, EnergyBeam.on_entity_created) +Event.addListener(defines.events.on_robot_built_entity, EnergyBeam.on_entity_created) +Event.addListener(defines.events.script_raised_built, EnergyBeam.on_entity_created) +Event.addListener(defines.events.script_raised_revive, EnergyBeam.on_entity_created) + + +function EnergyBeam.on_entity_removed(event) + local entity + if event.entity and event.entity.valid then + entity = event.entity + end + if event.created_entity and event.created_entity.valid then + entity = event.created_entity + end + if not entity then return end + if entity.name == EnergyBeam.name_chamber then + EnergyBeam.remove_chamber_connections(entity, true) + EnergyBeam.remove_injector_connections(entity, true) + EnergyBeam.rebuild_trees(Zone.from_surface(entity.surface)) + elseif entity.name == EnergyBeam.name_injector then + EnergyBeam.remove_injector_connections(entity, true) + EnergyBeam.rebuild_trees(Zone.from_surface(entity.surface)) + local reactor = entity.surface.find_entity(EnergyBeam.name_injector_reactor, entity.position) + if reactor then reactor.destroy() end + elseif entity.name == EnergyBeam.name_emitter then + EnergyBeam.rebuild_trees(Zone.from_surface(entity.surface)) + local tree = EnergyBeam.from_entity(entity) + if tree then + EnergyBeam.destroy(tree) + end + elseif entity.name == EnergyBeam.name_receiver then + local beam = entity.surface.find_entity(EnergyBeam.name_receiver_beam, entity.position) + if beam then beam.destroy() end + end + +end +Event.addListener(defines.events.on_player_mined_entity, EnergyBeam.on_entity_removed) +Event.addListener(defines.events.on_robot_mined_entity, EnergyBeam.on_entity_removed) +Event.addListener(defines.events.on_entity_died, EnergyBeam.on_entity_removed) +Event.addListener(defines.events.script_raised_destroy, EnergyBeam.on_entity_removed) + +function EnergyBeam.serialize(entity) + local tree = EnergyBeam.from_entity(entity) + if tree then + local tags = {} + if tree.destination then + tags.destination = { + coordinate = tree.destination.coordinate, + zone_name = tree.destination.zone and tree.destination.zone.name + } + end + tags.mode = tree.mode + return tags + end +end + +function EnergyBeam.deserialize(entity, tags) + local tree = EnergyBeam.from_entity(entity) + if tree then + if tags.destination then + tree.destination = { + coordinate = table.deepcopy(tags.destination.coordinate), + zone = Zone.from_name(tags.destination.zone_name) + } + end + tree.mode = tags.mode + end +end + +--- Handles the player creating a blueprint by setting tags to store the state of energy emitters +---@param event any +function EnergyBeam.on_player_setup_blueprint(event) + util.setup_blueprint(event, EnergyBeam.name_emitter, EnergyBeam.serialize) +end +Event.addListener(defines.events.on_player_setup_blueprint, EnergyBeam.on_player_setup_blueprint) + +--- Handles the player copy/pasting settings between energy emitters +---@param event any +function EnergyBeam.on_entity_settings_pasted(event) + util.settings_pasted(event, EnergyBeam.name_emitter, EnergyBeam.serialize, EnergyBeam.deserialize, + function(entity, player_index) + local tree = EnergyBeam.from_entity(entity) + local player = game.players[player_index] + if tree and tree.destination and tree.destination.coordinate then + player.print({"space-exploration.energy-transmitter-coordinates-pasted", math.floor(tree.destination.coordinate.x), math.floor(tree.destination.coordinate.y)}) + end + end) +end +Event.addListener(defines.events.on_entity_settings_pasted, EnergyBeam.on_entity_settings_pasted) + +return EnergyBeam diff --git a/space-exploration_0.5.80/space-exploration/scripts/essential.lua b/space-exploration_0.5.80/space-exploration/scripts/essential.lua new file mode 100644 index 0000000..1730a45 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/essential.lua @@ -0,0 +1,262 @@ +local Essential = {} + +mod_prefix = util.mod_prefix + +function Essential.enable_critical_techs() + + for _, force in pairs(game.forces) do + if not is_system_force(force.name) then + force.technologies["se-medpack"].enabled = true + force.technologies["se-medpack-2"].enabled = true + force.technologies["se-medpack-3"].enabled = true + force.technologies["se-medpack-4"].enabled = true + force.technologies["se-energy-beam-defence"].enabled = true + force.technologies["se-adaptive-armour-1"].enabled = true + force.technologies["se-adaptive-armour-2"].enabled = true + force.technologies["se-adaptive-armour-3"].enabled = true + force.technologies["se-adaptive-armour-4"].enabled = true + force.technologies["se-adaptive-armour-5"].enabled = true + force.technologies["se-addon-power-pole"].enabled = true + force.technologies["se-aeroframe-bulkhead"].enabled = true + force.technologies["se-aeroframe-pole"].enabled = true + force.technologies["se-aeroframe-scaffold"].enabled = true + force.technologies["se-antimatter-engine"].enabled = true + force.technologies["se-antimatter-production"].enabled = true + force.technologies["se-antimatter-reactor"].enabled = true + force.technologies["se-arcosphere"].enabled = true + force.technologies["se-arcosphere-folding"].enabled = true + force.technologies["se-astronomic-science-pack-1"].enabled = true + force.technologies["se-astronomic-science-pack-2"].enabled = true + force.technologies["se-astronomic-science-pack-3"].enabled = true + force.technologies["se-astronomic-science-pack-4"].enabled = true + force.technologies["se-big-heat-exchanger"].enabled = true + force.technologies["se-big-turbine"].enabled = true + force.technologies["se-bio-upgrade-agility-1"].enabled = true + force.technologies["se-bio-upgrade-agility-2"].enabled = true + force.technologies["se-bio-upgrade-agility-3"].enabled = true + force.technologies["se-bio-upgrade-agility-4"].enabled = true + force.technologies["se-bio-upgrade-agility-5"].enabled = true + force.technologies["se-bio-upgrade-constitution-1"].enabled = true + force.technologies["se-bio-upgrade-constitution-2"].enabled = true + force.technologies["se-bio-upgrade-constitution-3"].enabled = true + force.technologies["se-bio-upgrade-constitution-4"].enabled = true + force.technologies["se-bio-upgrade-constitution-5"].enabled = true + force.technologies["se-bio-upgrade-dexterity-1"].enabled = true + force.technologies["se-bio-upgrade-dexterity-2"].enabled = true + force.technologies["se-bio-upgrade-dexterity-3"].enabled = true + force.technologies["se-bio-upgrade-dexterity-4"].enabled = true + force.technologies["se-bio-upgrade-dexterity-5"].enabled = true + force.technologies["se-bio-upgrade-intelligence-1"].enabled = true + force.technologies["se-bio-upgrade-intelligence-2"].enabled = true + force.technologies["se-bio-upgrade-intelligence-3"].enabled = true + force.technologies["se-bio-upgrade-intelligence-4"].enabled = true + force.technologies["se-bio-upgrade-intelligence-5"].enabled = true + force.technologies["se-bio-upgrade-strength-1"].enabled = true + force.technologies["se-bio-upgrade-strength-2"].enabled = true + force.technologies["se-bio-upgrade-strength-3"].enabled = true + force.technologies["se-bio-upgrade-strength-4"].enabled = true + force.technologies["se-bio-upgrade-strength-5"].enabled = true + force.technologies["se-biogun"].enabled = true + force.technologies["se-biological-science-pack-1"].enabled = true + force.technologies["se-biological-science-pack-2"].enabled = true + force.technologies["se-biological-science-pack-3"].enabled = true + force.technologies["se-biological-science-pack-4"].enabled = true + force.technologies["se-bioscrubber"].enabled = true + force.technologies["se-capsule-behemoth-biter"].enabled = true + force.technologies["se-capsule-behemoth-spitter"].enabled = true + force.technologies["se-capsule-big-biter"].enabled = true + force.technologies["se-capsule-big-spitter"].enabled = true + force.technologies["se-capsule-medium-biter"].enabled = true + force.technologies["se-capsule-medium-spitter"].enabled = true + force.technologies["se-capsule-small-biter"].enabled = true + force.technologies["se-capsule-small-spitter"].enabled = true + force.technologies["se-condenser-turbine"].enabled = true + force.technologies["se-core-miner"].enabled = true + force.technologies["se-deep-catalogue-1"].enabled = true + force.technologies["se-deep-catalogue-2"].enabled = true + force.technologies["se-deep-catalogue-3"].enabled = true + force.technologies["se-deep-catalogue-4"].enabled = true + force.technologies["se-deep-space-science-pack-1"].enabled = true + force.technologies["se-deep-space-science-pack-2"].enabled = true + force.technologies["se-deep-space-science-pack-3"].enabled = true + force.technologies["se-deep-space-science-pack-4"].enabled = true + force.technologies["se-deep-space-transport-belt"].enabled = true + force.technologies["se-delivery-cannon"].enabled = true + force.technologies["se-delivery-cannon-weapon"].enabled = true + --force.technologies["se-dimensional-anchor"].enabled = true + force.technologies["se-dynamic-emitter"].enabled = true + force.technologies["se-electric-boiler"].enabled = true + force.technologies["se-energy-beaming"].enabled = true + force.technologies["se-energy-science-pack-1"].enabled = true + force.technologies["se-energy-science-pack-2"].enabled = true + force.technologies["se-energy-science-pack-3"].enabled = true + force.technologies["se-energy-science-pack-4"].enabled = true + force.technologies["se-fluid-burner-generator"].enabled = true + --force.technologies["se-fuel-refining"].enabled = true + force.technologies["se-heat-shielding"].enabled = true + force.technologies["se-heavy-assembly"].enabled = true + force.technologies["se-heavy-bearing"].enabled = true + force.technologies["se-heavy-composite"].enabled = true + force.technologies["se-heavy-girder"].enabled = true + force.technologies["se-holmium-cable"].enabled = true + force.technologies["se-holmium-solenoid"].enabled = true + force.technologies["se-lattice-pressure-vessel"].enabled = true + force.technologies["se-lifesupport-equipment-1"].enabled = true + force.technologies["se-lifesupport-equipment-2"].enabled = true + force.technologies["se-lifesupport-equipment-3"].enabled = true + force.technologies["se-lifesupport-equipment-4"].enabled = true + force.technologies["se-lifesupport-facility"].enabled = true + force.technologies["se-linked-container"].enabled = true + --force.technologies["se-long-range-star-mapping"].enabled = true + force.technologies["se-material-science-pack-1"].enabled = true + force.technologies["se-material-science-pack-2"].enabled = true + force.technologies["se-material-science-pack-3"].enabled = true + force.technologies["se-material-science-pack-4"].enabled = true + force.technologies["se-nanomaterial"].enabled = true + force.technologies["se-naquium-cube"].enabled = true + force.technologies["se-naquium-processor"].enabled = true + force.technologies["se-naquium-tessaract"].enabled = true + force.technologies["se-nexus"].enabled = true + force.technologies["se-processing-beryllium"].enabled = true + force.technologies["se-processing-cryonite"].enabled = true + force.technologies["se-processing-holmium"].enabled = true + force.technologies["se-processing-iridium"].enabled = true + force.technologies["se-processing-naquium"].enabled = true + force.technologies["se-processing-vitamelange"].enabled = true + force.technologies["se-processing-vulcanite"].enabled = true + force.technologies["se-pulveriser"].enabled = true + force.technologies["se-pylon"].enabled = true + force.technologies["se-pylon-construction"].enabled = true + force.technologies["se-pylon-construction-radar"].enabled = true + force.technologies["se-pylon-substation"].enabled = true + force.technologies["se-quantum-processor"].enabled = true + force.technologies["se-recycling-facility"].enabled = true + force.technologies["se-rocket-cargo-safety-1"].enabled = true + force.technologies["se-rocket-cargo-safety-2"].enabled = true + force.technologies["se-rocket-cargo-safety-3"].enabled = true + --force.technologies["se-rocket-fuel-from-water"].enabled = true + force.technologies["se-rocket-landing-pad"].enabled = true + force.technologies["se-rocket-launch-pad"].enabled = true + force.technologies["se-rocket-reusability-1"].enabled = true + force.technologies["se-rocket-reusability-2"].enabled = true + force.technologies["se-rocket-reusability-3"].enabled = true + force.technologies["se-rocket-survivability-1"].enabled = true + force.technologies["se-rocket-survivability-2"].enabled = true + force.technologies["se-rocket-survivability-3"].enabled = true + force.technologies["se-self-sealing-gel"].enabled = true + force.technologies["shield-projector"].enabled = true + force.technologies["se-space-assembling"].enabled = true + force.technologies["se-space-astrometrics-laboratory"].enabled = true + force.technologies["se-space-biochemical-laboratory"].enabled = true + force.technologies["se-space-catalogue-astronomic-1"].enabled = true + force.technologies["se-space-catalogue-astronomic-2"].enabled = true + force.technologies["se-space-catalogue-astronomic-3"].enabled = true + force.technologies["se-space-catalogue-astronomic-4"].enabled = true + force.technologies["se-space-catalogue-biological-1"].enabled = true + force.technologies["se-space-catalogue-biological-2"].enabled = true + force.technologies["se-space-catalogue-biological-3"].enabled = true + force.technologies["se-space-catalogue-biological-4"].enabled = true + force.technologies["se-space-catalogue-energy-1"].enabled = true + force.technologies["se-space-catalogue-energy-2"].enabled = true + force.technologies["se-space-catalogue-energy-3"].enabled = true + force.technologies["se-space-catalogue-energy-4"].enabled = true + force.technologies["se-space-catalogue-material-1"].enabled = true + force.technologies["se-space-catalogue-material-2"].enabled = true + force.technologies["se-space-catalogue-material-3"].enabled = true + force.technologies["se-space-catalogue-material-4"].enabled = true + force.technologies["se-space-data-card"].enabled = true + force.technologies["se-space-decontamination-facility"].enabled = true + force.technologies["se-space-electromagnetics-laboratory"].enabled = true + force.technologies["se-space-genetics-laboratory"].enabled = true + force.technologies["se-space-gravimetrics-laboratory"].enabled = true + force.technologies["se-space-growth-facility"].enabled = true + force.technologies["se-space-hypercooling-1"].enabled = true + force.technologies["se-space-hypercooling-2"].enabled = true + force.technologies["se-space-hypercooling-3"].enabled = true + force.technologies["se-space-laser-laboratory"].enabled = true + force.technologies["se-space-manufactory"].enabled = true + force.technologies["se-space-material-fabricator"].enabled = true + force.technologies["se-space-matter-fusion"].enabled = true + force.technologies["se-space-mechanical-laboratory"].enabled = true + force.technologies["se-space-particle-accelerator"].enabled = true + force.technologies["se-space-particle-collider"].enabled = true + force.technologies["se-space-plasma-generator"].enabled = true + force.technologies["se-space-platform-plating"].enabled = true + force.technologies["se-space-platform-scaffold"].enabled = true + force.technologies["se-space-probe"].enabled = true + force.technologies["se-space-radiating-efficiency"].enabled = true + force.technologies["se-space-radiating-speed"].enabled = true + force.technologies["se-space-radiation-laboratory"].enabled = true + force.technologies["se-space-radiator-1"].enabled = true + force.technologies["se-space-radiator-2"].enabled = true + force.technologies["se-space-rail"].enabled = true + force.technologies["se-space-science-lab"].enabled = true + force.technologies["se-space-simulation-ab"].enabled = true + force.technologies["se-space-simulation-abm"].enabled = true + force.technologies["se-space-simulation-am"].enabled = true + force.technologies["se-space-simulation-as"].enabled = true + force.technologies["se-space-simulation-asb"].enabled = true + force.technologies["se-space-simulation-asbm"].enabled = true + force.technologies["se-space-simulation-asm"].enabled = true + force.technologies["se-space-simulation-bm"].enabled = true + force.technologies["se-space-simulation-sb"].enabled = true + force.technologies["se-space-simulation-sbm"].enabled = true + force.technologies["se-space-simulation-sm"].enabled = true + force.technologies["se-space-solar-panel"].enabled = true + force.technologies["se-space-solar-panel-2"].enabled = true + force.technologies["se-space-solar-panel-3"].enabled = true + force.technologies["se-space-supercomputer-1"].enabled = true + force.technologies["se-space-supercomputer-2"].enabled = true + force.technologies["se-space-supercomputer-3"].enabled = true + force.technologies["se-space-supercomputer-4"].enabled = true + force.technologies["se-space-telescope"].enabled = true + force.technologies["se-space-telescope-gammaray"].enabled = true + force.technologies["se-space-telescope-microwave"].enabled = true + force.technologies["se-space-telescope-radio"].enabled = true + force.technologies["se-space-telescope-xray"].enabled = true + force.technologies["se-space-thermodynamics-laboratory"].enabled = true + force.technologies["se-spaceship-clamps"].enabled = true + force.technologies["se-supercharger"].enabled = true + force.technologies["se-teleportation"].enabled = true + force.technologies["se-vitalic-acid"].enabled = true + force.technologies["se-vitalic-epoxy"].enabled = true + force.technologies["se-vitalic-reagent"].enabled = true + force.technologies["se-wide-beacon"].enabled = true + force.technologies["se-wide-beacon-2"].enabled = true + force.technologies["se-zone-discovery-deep"].enabled = true + force.technologies["se-zone-discovery-random"].enabled = true + force.technologies["se-zone-discovery-targeted"].enabled = true + force.technologies["se-cryogun"].enabled = true + force.technologies["se-factory-spaceship-1"].enabled = true + force.technologies["se-factory-spaceship-2"].enabled = true + force.technologies["se-factory-spaceship-3"].enabled = true + force.technologies["se-factory-spaceship-4"].enabled = true + force.technologies["se-factory-spaceship-5"].enabled = true + force.technologies["se-meteor-defence"].enabled = true + force.technologies["se-meteor-point-defence"].enabled = true + force.technologies["se-plague"].enabled = true + force.technologies["se-railgun"].enabled = true + force.technologies["se-rtg-equipment"].enabled = true + force.technologies["se-rtg-equipment-2"].enabled = true + force.technologies["se-space-accumulator"].enabled = true + force.technologies["se-space-accumulator-2"].enabled = true + force.technologies["se-spaceship"].enabled = true + force.technologies["se-spaceship-integrity-1"].enabled = true + force.technologies["se-spaceship-integrity-2"].enabled = true + force.technologies["se-spaceship-integrity-3"].enabled = true + force.technologies["se-spaceship-integrity-4"].enabled = true + force.technologies["se-spaceship-integrity-5"].enabled = true + force.technologies["se-spaceship-integrity-6"].enabled = true + force.technologies["se-spaceship-integrity-7"].enabled = true + force.technologies["se-superconductive-cable"].enabled = true + force.technologies["se-tesla-gun"].enabled = true + force.technologies["se-thruster-suit"].enabled = true + force.technologies["se-thruster-suit-2"].enabled = true + force.technologies["se-thruster-suit-3"].enabled = true + force.technologies["se-thruster-suit-4"].enabled = true + force.technologies["se-rocket-science-pack"].enabled = true + force.technologies["se-spaceship-victory"].enabled = true + end + end +end +return Essential diff --git a/space-exploration_0.5.80/space-exploration/scripts/event.lua b/space-exploration_0.5.80/space-exploration/scripts/event.lua new file mode 100644 index 0000000..67ad778 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/event.lua @@ -0,0 +1,58 @@ +Event = { listeners = {} } + +-- can add multiple listeners to the same event. +-- event_key can be a uint of native events (defines.events) +-- event_key can be a string for custom input of virtual events +-- if a virtual event is added, set virtual = true + -- on_init, on_load, on_configuration_changed get triggered automatically as virtual events + -- can also do on_nth_tick_#, e.g. on_nth_tick_60 or on_nth_tick_600 +Event.addListener = function(event_key, add_callback, virtual) + if not Event.listeners[event_key] then + Event.listeners[event_key] = {} + Event.listeners[event_key].callbacks = {} + Event.listeners[event_key].sequence = function (event) + for _, callback in pairs(Event.listeners[event_key].callbacks) do + callback(event) + end + end + if string.find(event_key, "on_nth_tick_", 1, true) then + local freq = tonumber(Util.replace(event_key, "on_nth_tick_", "")) + script.on_nth_tick(freq, Event.listeners[event_key].sequence) + table.insert(Event.listeners[event_key].callbacks, add_callback) + else + if not virtual then -- custom input eventsm only works after on_init + script.on_event(event_key, Event.listeners[event_key].sequence) + end + table.insert(Event.listeners[event_key].callbacks, add_callback) + end + else + for _, callback in pairs(Event.listeners[event_key].callbacks) do + if callback == add_callback then return end + end + if not exists then + table.insert(Event.listeners[event_key].callbacks, add_callback) + end + end +end + +-- can add multiple listneers to the same event. +Event.removeListener = function(event_key, remove_callback) + if not Event.listeners[event_key] then return end + for _, callback in pairs(Event.listeners[event_key].callbacks) do + if callback == remove_callback then + Event.listeners[event_key].callbacks[_] = nil + end + end +end + +Event.trigger = function(event_key, event_data) + if Event.listeners[event_key] then + Event.listeners[event_key].sequence(event_data) + end +end + +script.on_init(function(event) Event.trigger("on_init", event) end) +script.on_load(function(event) Event.trigger("on_load", event) end) +script.on_configuration_changed(function(event) Event.trigger("on_configuration_changed", event) end) + +return Event diff --git a/space-exploration_0.5.80/space-exploration/scripts/informatron.lua b/space-exploration_0.5.80/space-exploration/scripts/informatron.lua new file mode 100644 index 0000000..dd35d17 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/informatron.lua @@ -0,0 +1,391 @@ +local Informatron = {} -- informatron pages implementation. + +function Informatron.menu(player_index) + local player = game.players[player_index] + local playerdata = get_make_playerdata(player) + local force = player.force + local menu = { + meteor_defence = 1, + coremining = 1, + beacons = 1, + launching_satellites = 1, + pinned_locations = 1, + zone_discovery = 1, + cargo_rockets = 1, + delivery_cannons = 1, + steam_power = 1, + lifesupport = 1, + space_sciences = 1, + energy_beams = 1, + spaceships = 1, + arcospheres = 1, + exploration_journal = 1, + } + if playerdata.track_glyphs then + menu["archeology"] = 1 -- shhh + end + if force.technologies[Ancient.name_tech_coordinates].enabled then + menu["starmapping"] = 1 -- shhh + end + if global.forces[force.name] and global.forces[force.name].coordinate_logs then + menu["coordinate_logs"] = 1 -- shhh + end + return menu +end + +function Informatron.set_warnings(warnings, force) + warnings.clear() + for force_name, forcedata in pairs(global.forces) do + if forcedata.solar_flare then + if Zone.is_visible_to_force(forcedata.solar_flare.zone, force.name) then + local warning = warnings.add{type="label", name="warning_"..force_name, caption={ + "space-exploration.page_energy_beam_warning_text", + forcedata.solar_flare.zone.name, + Util.seconds_to_clock((forcedata.solar_flare.tick - game.tick)/60, true), + string.format("%.2f", SolarFlare.base_power / 1000000000 * SolarFlare.default_flare_power(forcedata.solar_flare.zone) ), + math.floor(160 * SolarFlare.default_flare_power(forcedata.solar_flare.zone)) + } + } + warning.style.bottom_margin = 20 + warning.style.single_line = false + end + end + end +end + +function Informatron.page_content_update(page_name, player_index, element) + if page_name == "energy_beams" then + local player = game.players[player_index] + local force = player.force + local force_data = global.forces[force.name] + if element.warnings then + Informatron.set_warnings(element.warnings, force) + end + end +end + +function Informatron.page_content(page_name, player_index, element) + local player = game.players[player_index] + local player_data = get_make_playerdata(player) + + local force = player.force + local force_data = global.forces[force.name] + if page_name == "space-exploration" then + element.add{type="label", name="text_1", caption={"space-exploration.page_space_exploration_text_1"}} + + elseif page_name == "meteor_defence" then + element.add{type="label", name="text_1", caption={"space-exploration.page_meteor_defence_text_1"}} + + elseif page_name == "coremining" then + element.add{type="label", name="text_1", caption={"space-exploration.page_coremining_text_1"}} + + elseif page_name == "beacons" then + element.add{type="label", name="text_1", caption={"space-exploration.page_beacons_text_1"}} + + elseif page_name == "launching_satellites" then + element.add{type="label", name="text_1", caption={"space-exploration.page_launching_satellites_text_1", force_data.satellites_launched or 0}} + + elseif page_name == "pinned_locations" then + element.add{type="label", name="text_1", caption={"space-exploration.page_pinned_locations_text_1"}} + + elseif page_name == "zone_discovery" then + element.add{type="label", name="text_1", caption={"space-exploration.page_zone_discovery_text_1"}} + + local any_button_table = element.add{type="table", name="any_button_table", column_count=5, draw_horizontal_lines=false} + any_button_table.style.horizontally_stretchable = true + any_button_table.style.column_alignments[1] = "middle-center" + any_button_table.style.column_alignments[2] = "middle-center" + any_button_table.style.column_alignments[3] = "middle-center" + any_button_table.style.top_margin = 30 + any_button_table.add{type = "flow", name="cell_left"} + local any_button = any_button_table.add{type="button", name="any_resource", + caption="No preference", + style=force_data.search_for_resource == nil and "se_button_discovery_any_active" or "se_button_discovery_any" + } + any_button_table.add{type = "flow", name="cell_right"} + + local r_table = element.add{type="table", name="discover_resource_table", column_count=5, draw_horizontal_lines=false} + r_table.style.horizontally_stretchable = true + r_table.style.column_alignments[1] = "middle-center" + r_table.style.column_alignments[2] = "middle-center" + r_table.style.column_alignments[3] = "middle-center" + r_table.style.column_alignments[4] = "middle-center" + r_table.style.column_alignments[5] = "middle-center" + r_table.style.horizontal_spacing = 10 + r_table.style.vertical_spacing = 30 + r_table.style.top_margin = 30 + + local resources_settings = global.resources_and_controls.resource_settings + for _, resource in pairs(resources_settings) do + if resource.name ~= mod_prefix.."naquium-ore" then + local button = r_table.add{type="button", name=resource.name, + style=force_data.search_for_resource == resource.name and "se_button_discovery_active" or "se_button_discovery" + } + + local l = button.add{type = "label", name = "l", + caption={"space-exploration.discovery_look_for_resource_caption", "[img=entity/"..resource.name.."]", {"entity-name."..resource.name} }, + tooltip={"space-exploration.discovery_look_for_resource_tooltip", {"entity-name."..resource.name}} + } + --button.style.horizontally_stretchable = true + --button.style.width = 165 + --button.style.height = 90 + --button.style.top_padding = 20 + --button.style.bottom_padding = 20 + --button.style.horizontal_align = "center" + --button.style.vertical_align = "center" + --l.style.horizontally_stretchable = true + --l.style.vertically_stretchable = true + l.ignored_by_interaction = true + l.style.single_line = false + l.style.width = 155 + l.style.horizontal_align = "center" + l.style.vertical_align = "center" + l.style.font="heading-2" + end + end + + elseif page_name == "cargo_rockets" then + element.add{type="label", name="text_1", caption={ + "space-exploration.page_cargo_rockets_text_1", + force_data.cargo_rockets_launched or 0, + string.format("%.2f",100-100*Launchpad.get_force_cargo_loss_modifier(force)), + string.format("%.2f",100-100*Launchpad.get_force_survivability_loss_modifier(force)), + 100 * Launchpad.get_reusability(force), + }} + + elseif page_name == "delivery_cannons" then + element.add{type="label", name="text_1", caption={"space-exploration.page_delivery_cannons_text_1"}} + + elseif page_name == "steam_power" then + element.add{type="label", name="text_1", caption={"space-exploration.page_steam_power_text_1"}} + + elseif page_name == "lifesupport" then + element.add{type="label", name="text_1", caption={"space-exploration.page_lifesupport_text_1"}} + + elseif page_name == "space_sciences" then + element.add{type="label", name="text_1", caption={"space-exploration.page_space_sciences_text_1"}} + + elseif page_name == "energy_beams" then + element.add{type="label", name="text_1", caption={"space-exploration.page_energy_beams_text_1"}} + element.text_1.style.bottom_margin = 20 + + local warnings = element.add{type = "flow", name="warnings", direction = "vertical"} + Informatron.set_warnings(element.warnings, force) + element.add{type="label", name="text_2", caption={"space-exploration.page_energy_beams_text_2"}} + + elseif page_name == "spaceships" then + element.add{type="label", name="text_1", caption={"space-exploration.page_spaceships_text_1"}} + + elseif page_name == "arcospheres" then + element.add{type="label", name="text_1", caption={"space-exploration.page_arcospheres_text_1"}} + element.add{type="label", name="text_arco_deep", caption={"space-exploration.page_arcospheres_text_deep", force_data.arcospheres_collected or 0, force_data.arcosphere_collectors_launched or 0}} + if force_data.zone_arcospheres then + for zone_index, zone_stats in pairs(force_data.zone_arcospheres) do + local zone = Zone.from_zone_index(zone_index) + element.add{type="label", name="text_arco_zone_"..zone_index, caption={"space-exploration.page_arcospheres_text_zone", zone.name, zone_stats.arcospheres_collected or 0, zone_stats.arcosphere_collectors_launched or 0}} + end + end + elseif page_name == "exploration_journal" then + local text + element.add{type="label", name="page_journal_title_backstory", caption={"space-exploration.page_journal_title_backstory"}, style="heading_2_label"} + text = element.add{type="label", name="page_journal_text_backstory", caption={"space-exploration.page_journal_text_backstory"}} + text.style.bottom_margin = 20 + + if force_data.satellites_launched and force_data.satellites_launched > 0 then + element.add{type="label", name="page_journal_title_satellite_launch", caption={"space-exploration.page_journal_title_satellite_launch"}, style="heading_2_label"} + text = element.add{type="label", name="page_journal_text_satellite_launch", caption={"space-exploration.page_journal_text_satellite_launch"}} + text.style.bottom_margin = 20 + end + + if force_data.cargo_rockets_launched and force_data.cargo_rockets_launched > 0 then + element.add{type="label", name="page_journal_title_cargo_launch", caption={"space-exploration.page_journal_title_cargo_launch"}, style="heading_2_label"} + text = element.add{type="label", name="page_journal_text_cargo_launch", caption={"space-exploration.page_journal_text_cargo_launch"}} + text.style.bottom_margin = 20 + end + + if player_data.first_entered_vault then + element.add{type="label", name="page_journal_title_entered_vault", caption={"space-exploration.page_journal_title_entered_vault"}, style="heading_2_label"} + text = element.add{type="label", name="page_journal_text_entered_vault", caption={"space-exploration.page_journal_text_entered_vault", player_data.first_entered_vault.name}} + text.style.bottom_margin = 20 + + if not player_data.track_glyphs then + local button = element.add{type = "button", name=Ancient.name_button_player_track_glyphs, caption={"space-exploration.player_track_glyphs"}} + button.style.bottom_margin = 20 + end + end + + local anomaly = Zone.from_name("Foenestra") + if force_data.zones_discovered[anomaly.index] then + element.add{type="label", name="page_journal_title_found_gate", caption={"space-exploration.page_journal_title_found_gate"}, style="heading_2_label"} + text = element.add{type="label", name="page_journal_text_found_gate", caption={"space-exploration.page_journal_text_found_gate"}} + text.style.bottom_margin = 20 + end + if global.gate then + Ancient.cryptf6() + + if player_data.has_entered_anomaly then + element.add{type="label", name="page_journal_title_found_gate_ship", caption={"space-exploration.page_journal_title_found_gate_ship"}, style="heading_2_label"} + text = element.add{type="label", name="page_journal_text_found_gate_ship", caption={"space-exploration.page_journal_text_found_gate_ship"}} + text.style.bottom_margin = 20 + + element.add{type="label", name="page_journal_title_found_gate_ship_authenticated", caption={"space-exploration.page_journal_title_found_gate_ship_authenticated"}, style="heading_2_label"} + text = element.add{type="label", name="page_journal_text_found_gate_ship_authenticated", caption={"space-exploration.page_journal_text_found_gate_ship_authenticated"}} + text.style.bottom_margin = 20 + + --local player_name = player.name or "Engineer" + --local id = 2236067977 - player.index * 13 + --local sub_id = 5 + player.index + local player_name = game.players[1].name or "Engineer" + local id = 2236067964 + local sub_id = 5 + 1 + local fcoord = Ancient.cryptf7(global.hcoord) + + element.add{type="label", name="page_journal_title_found_gate_ship_log", caption={"space-exploration.page_journal_title_found_gate_ship_log"}, style="heading_2_label"} + local text_found_gate_ship_log_intro = element.add{type="label", name="page_journal_text_found_gate_ship_log_intro", caption={"space-exploration.page_journal_text_found_gate_ship_log_intro"}} + local log_frame = element.add{type="frame", name="log_frame", style="a_inner_frame"} + log_frame.style.vertically_stretchable = true + local text_found_gate_ship_log = log_frame.add{ + type="label", + name="page_journal_text_found_gate_ship_log", + caption={"space-exploration.page_journal_text_found_gate_ship_log", + id .. "."..sub_id.." (".. player_name.."_"..sub_id..")", + Ancient.coordinate_to_string(fcoord) + } + } + text_found_gate_ship_log.style.single_line = false + text_found_gate_ship_log.style.font_color = {r=0.6,g=0.7,b=0.8} + log_frame.style.bottom_margin = 20 + end + end + + if player_data.gate_victory then + element.add{type="label", name="page_journal_title_gate_victory", caption={"space-exploration.page_journal_title_gate_victory"}, style="heading_2_label"} + text = element.add{type="label", name="page_journal_gate_victory", caption={"space-exploration.page_journal_gate_victory"}} + text.style.bottom_margin = 20 + end + + if player_data.spaceship_victory then + element.add{type="label", name="page_journal_title_spaceship_victory", caption={"space-exploration.page_journal_title_spaceship_victory"}, style="heading_2_label"} + text = element.add{type="label", name="page_journal_spaceship_victory", caption={"space-exploration.page_journal_spaceship_victory"}} + text.style.bottom_margin = 20 + end + + elseif page_name == "archeology" then + + local count = 0 + local text_1 = element.add{type="label", name="text_1", caption={"space-exploration.page_archeology_text_1", count}} + text_1.style.bottom_margin = 20 + for _, zone in pairs(global.zone_index) do + if zone.glyph and (force_data.zones_discovered[zone.index] or global.debug_view_all_zones) then + count = count + 1 + local item = element.add{type="label", name="link_vault_"..zone.index, caption={"space-exploration.page_archeology_pyramid_link", "[img="..Zone.get_icon(zone).."]", zone.name} } + item.style.bottom_margin = 20 + end + end + text_1.caption={"space-exploration.page_archeology_text_1", count} + local text_2 = element.add{type="label", name="text_2", caption={"space-exploration.page_archeology_text_2", count}} + text_2.style.bottom_margin = 20 + text_2.style.top_margin = 20 + + + elseif page_name == "starmapping" then + local text_1 = element.add{type="label", name="text_1", caption={"space-exploration.page_starmapping_text_1", 0}, } + if force_data.coordinates_discovered then + local count = 0 + for i, glyph_id in pairs(force_data.coordinates_discovered) do + count = count + 1 + coordinate = Ancient.cryptf4b({glyph_id}) + local label = element.add{type="label", name="glyph_"..glyph_id, + caption={"space-exploration.starmapping-found-constellation-informatron", "[img=entity/"..mod_prefix .. "glyph-a-energy-"..glyph_id.."]", Ancient.coordinate_to_string(coordinate)} + } + label.style.height = 32 + end + text_1.caption = {"space-exploration.page_starmapping_text_1", count} + text_1.style.bottom_margin = 20 + text_1.style.vertical_align = "center" + end + + elseif page_name == "coordinate_logs" then + log_description = element.add{type="label", name="text_1", caption={"space-exploration.page_coordinate_logs_text_1"}} + log_description.style.bottom_margin = 16 + local log_list + + if force_data.coordinate_logs then + if #force_data.coordinate_logs == 0 then + log_empty = element.add{type="label", name="log_empty", caption={"space-exploration.page_coordinate_logs_text_empty"}} + log_empty.style.font_color = {r=1,g=1} + else + log_list = element.add{type = "flow", name="log_list", direction = "vertical"} + log_list.style.bottom_margin = 30 + local log_entry + local glyph_entry + local coordinate_entry + for i = #force_data.coordinate_logs, 1, -1 do + log_entry = log_list.add{type = "flow", name="log_entry"..i, direction = "horizontal"} + glyph_entry = log_entry.add{type="label", name="glyph_entry_"..i, caption={"space-exploration.page_coordinate_logs_glyph_entry", force_data.coordinate_logs[i].glyph_string}} + coordinate_entry = log_entry.add{type="text-box", name="coordinate_entry_"..i, text=force_data.coordinate_logs[i].coordinate_string} + log_entry.style.height = 32 + glyph_entry.style.top_margin = 5 + coordinate_entry.read_only = true + coordinate_entry.style.horizontally_stretchable = true + coordinate_entry.style.minimal_width = 450 + end + local clear_button = element.add{type="button", name="log_clear", style="red_button", mouse_button_filter={"left"}, caption={"space-exploration.page_coordinate_logs_button_clear_caption"}} + end + end + end + +end + + +function Informatron.on_gui_click (event) + if not (event.element and event.element.valid) then return end + local element = event.element + local player = game.players[event.player_index] + + root = gui_element_or_parent(element, "informatron_main") + if root then -- informatron + if element.name == Ancient.name_button_player_track_glyphs then + local player_data = get_make_playerdata(player) + player_data.track_glyphs = true + remote.call("informatron", "informatron_open_to_page", {player_index = player.index, interface="space-exploration", page_name="archeology"}) + elseif string.find(element.name, "link_vault_", 1, true) then + local zone_index = util.string_to_number(util.replace(element.name, "link_vault_", "")) + local zone = Zone.from_zone_index(zone_index) + if zone and zone.glyph then + local surface = Zone.get_make_surface(zone) + RemoteView.start(player, zone) + if zone.vault_pyramid and zone.vault_pyramid.valid then + player.teleport(zone.vault_pyramid.position) + player.gui.center.clear() + end + end + elseif element.parent.name == "discover_resource_table" then + local force_data = global.forces[player.force.name] + force_data.search_for_resource = element.name + for _, child in pairs(util.find_first_descendant_by_name(root, "discover_resource_table").children) do + child.style = "se_button_discovery" + end + element.style = "se_button_discovery_active" + local any_button = util.find_first_descendant_by_name(root, "any_resource") + any_button.style = "se_button_discovery_any" + elseif element.name == "any_resource" then + local force_data = global.forces[player.force.name] + force_data.search_for_resource = nil + element.style = "se_button_discovery_any_active" + for _, child in pairs(util.find_first_descendant_by_name(root, "discover_resource_table").children) do + child.style = "se_button_discovery" + end + elseif element.name == "log_clear" then + local force_data = global.forces[player.force.name] + force_data.coordinate_logs = {} + log_list = util.find_first_descendant_by_name(root, "log_list") + if log_list then log_list.destroy() end + end + return + end +end +Event.addListener(defines.events.on_gui_click, Informatron.on_gui_click) + + +return Informatron diff --git a/space-exploration_0.5.80/space-exploration/scripts/interburbulator.lua b/space-exploration_0.5.80/space-exploration/scripts/interburbulator.lua new file mode 100644 index 0000000..e0efeba --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/interburbulator.lua @@ -0,0 +1,830 @@ +local Interburbulator = {} +--[[ +-- have 4 shield projectors. +-- have 1 laser turet. +-- have n input addon? +A group of 3 bots are on a planet. +Antikythera / Aigilia / Eunomia +Tritan Aurum 1.6180339 +Tritan Argent 2.41421356 +Tritan Brontion 3.3027756 +Plectrum Princeps 2.4450076 +Plectrum Aurum 0.6180339 +Plectrum Argent 1.41421356 +Plectrum Brontion 2.3027756 + +Brontion Burble 33027756 +The bots ask for numbers. +The bots move into a triangle and project a hololographic grid. + +Interburbulator bots move to intersection points. + +Hovering an Interburbulator makes them say their numbers. + +-- The grid resolution is controlled by A coordinate interface. +-- need an associated ruin. +]] +Interburbulator.display_width_tiles = 16 + +Interburbulator.threshold = 0.000000000000001 +Interburbulator.name_interburbulator_gui_root = mod_prefix.."interburbulator-control" +Interburbulator.robot_color = {r=1, g=1, b=1, a=0.1} +Interburbulator.attempts_locked_timeout = 60*15 -- 15 seconds, claimed to reset after 20s but assume lower UPS + +Interburbulator.challenges = { + { -- 1 + grid = 3, + target = {2,2}, + set = { {1,0,0}, {1,1,0}, {1,0,1}}, + prize = {name = "raw-fish", count = 1}, + attempts = 7, + success_text_prize = {"space-exploration.interburbulator_success_prize_1"} + }, + { -- 2 + grid = 4, + target = {2,3}, + set = { {1,0,0}, {0,1,0}, {0,0,1}}, + prize = {name = mod_prefix.."machine-learning-data", count = 100}, + attempts = 6, + success_text_prize = {"space-exploration.interburbulator_success_prize_2"} + }, + { -- 3 + grid = 5, + target = {3,1}, + set = { {1,1,1}, {0,1,0}, {0,0,1}}, + prize = {name = mod_prefix.."significant-data", count = 100}, + attempts = 6, + success_text_prize = {"space-exploration.interburbulator_success_prize_3"} + }, + { -- 4 + grid = 6, + target = {4,4}, + set = { {-1,0,0}, {0,1,0}, {0,0,1}}, + prize = {name = "spidertron", count = 1}, + attempts = 5, + success_text_prize = {"space-exploration.interburbulator_success_prize_4"} + }, + { -- 5 + grid = 7, + target = {2,4}, + set = { {1,0,0}, {0,2,0}, {0,0,7}}, + attempts = 5, + prize = {name = "effectivity-module-9", count = 1}, + success_text_prize = {"space-exploration.interburbulator_success_prize_5"} + }, + { -- 6 + grid = 8, + target = {7,7}, + set = { {1,6,1}, {8,0,3}, {3,9,8}}, + prize = {name = "speed-module-9", count = 1}, + attempts = 4, + success_text_prize = {"space-exploration.interburbulator_success_prize_6"} + }, + { -- 7 + grid = 10, + target = {3,6}, + set = { {0.1,0.6,0.1}, {0.8,-0.1,0.3}, {0.3,0.9,0.8}}, + prize = {name = "productivity-module-9", count = 1}, + attempts = 4, + success_text_prize = {"space-exploration.interburbulator_success_prize_7"} + }, + { -- 8 + grid = 15, + target = {13,15}, + set = { {0.87,0.49,0.89}, {0.48,0.48,0.2}, {0.45,0.86,0.83}}, + prize = {name = mod_prefix.."wide-beacon-2", count = 4}, + attempts = 3, + success_text_prize = {"space-exploration.interburbulator_success_prize_8"} + }, + { -- 9 + grid = 20, + target = {17,2}, + set = { {-436,563,-811}, {772,30,917}, {980,576,286}}, + prize = {name = mod_prefix.."naquium-processor", count = 8}, + attempts = 3, + success_text_prize = {"space-exploration.interburbulator_success_prize_9"} + }, + { -- 10 + grid = 50, + target = {33,44}, + set = { {1.618033,0.9887498,0.48204586}, {2.414213,0.5623730,0.9504880}, {3.302775,0.6377319,0.9464655}}, + prize = {name = mod_prefix.."arcosphere", count = 10}, + attempts = 2, + success_text_prize = {"space-exploration.interburbulator_success_prize_10"} + }, +} +Interburbulator.success_freeplay = {} +for i = 1, 5 do + table.insert(Interburbulator.success_freeplay, "interburbulator_success_freeplay_"..i) +end +Interburbulator.success_repeat = {} +for i = 1, 6 do + table.insert(Interburbulator.success_repeat, "interburbulator_success_repeat_"..i) +end +Interburbulator.fail_text = {} +Interburbulator.fail_bad_text = {} +for i = 1, 39 do + table.insert(Interburbulator.fail_text, "interburbulator_fail_easy_"..i) +end +for i = 1, 10 do + table.insert(Interburbulator.fail_bad_text, "interburbulator_fail_offgrid_"..i) +end +for i = 1, 9 do + table.insert(Interburbulator.fail_text, "interburbulator_fail_mixed_"..i) + table.insert(Interburbulator.fail_bad_text, "interburbulator_fail_mixed_"..i) +end +Interburbulator.locked_text = {} +for i = 1, 6 do + table.insert(Interburbulator.locked_text, "interburbulator_challenge_locked_"..i) +end + +function Interburbulator.message(player, text) + player.print({"space-exploration.interburbulator_speak", text}) +end + +function Interburbulator.make_interburbulator(zone, position) + if global.interburbulator then return end -- don't make 2 + global.interburbulator = { + zone = zone, + position = position or {x=0, y=0}, + challenge_index = 1, + challenge_set = nil, -- only used when you set a custom/random challenge. + challenge_grid_size = nil, -- only used when you set a custom/random challenge. + challenge_cell = nil, -- only used when you set a custom/random challenge. + guessed_vector = nil, -- shown after a guess + guessed_position = nil, -- shown after a guess + guessed_cell = nil, -- shown after a guess + guessed_player_index = nil, + shape_ids = {}, + prizes_won = {}, -- could be indexed by player-challenge but for now just challenge + freeplay_unlocked = false + } + zone.interburbulator = global.interburbulator + Interburbulator.build_platform() +end + +function Interburbulator.build_platform() + if global.interburbulator.robot and global.interburbulator.robot.valid and global.interburbulator.interface and global.interburbulator.interface.valid then return end + local surface = Zone.get_surface(global.interburbulator.zone) + if surface then + surface.request_to_generate_chunks(global.interburbulator.position) + surface.force_generate_chunk_requests() + Ruin.build({ruin_name = "interburbulator-platform", surface_index = surface.index, position = global.interburbulator.position}) + global.interburbulator.light = rendering.draw_light{ + sprite = mod_prefix.."interburbulator-light", + surface = surface, + target = global.interburbulator.position, + intesity = 2, + } + global.interburbulator.grid = rendering.draw_sprite{ + sprite = mod_prefix.."interburbulator-grid", + surface = surface, + target = global.interburbulator.position, + tint = {r=0.5,b=0.5,g=0.5}, + draw_on_ground = true, + alignment = "center" + } + global.interburbulator.robot = surface.find_entities_filtered{name=mod_prefix.."burbulator"}[1] + global.interburbulator.interface = surface.find_entities_filtered{name=mod_prefix.."interburbulator-control"}[1] + global.interburbulator.robot.color = Interburbulator.robot_color + global.interburbulator.robot_text = rendering.draw_text{ + surface = surface, + target = global.interburbulator.robot, + text = {"space-exploration.interburbulator_robot_name"}, + color = {r=0.6,g=0,b=0}, + alignment = "center", + target_offset = {0, -3.5} + } + game.print({"space-exploration.interburbulator_speak", {"space-exploration.interburbulator_greeting", global.interburbulator.zone.name, Zone.get_star_from_child( global.interburbulator.zone).name}}) + end +end + +function Interburbulator.on_nth_tick_300() + if global.interburbulator and global.interburbulator.robot and global.interburbulator.robot.valid then + local orientation = Util.orientation_from_to(global.interburbulator.position, global.interburbulator.robot.position) + 0.25 -- why is this 0.25 off? + if orientation > 0.5 then orientation = orientation - 1 end -- -0.5 to 0.5 + orientation = orientation * 0.8 - 0.2 + 0.4 * math.random() + local pos = Util.orientation_to_vector(orientation, math.random(12,15)) + global.interburbulator.robot.autopilot_destination = Util.vectors_add(global.interburbulator.position, pos) + if math.random() < 0.1 then + global.interburbulator.robot.autopilot_destination = Util.vectors_add(global.interburbulator.position, {x = 0, y = -10}) + end + global.interburbulator.robot.insert({name="rocket", count = 10}) + global.interburbulator.robot.color = Interburbulator.robot_color + end +end +Event.addListener("on_nth_tick_300", Interburbulator.on_nth_tick_300) -- 5s + +function Interburbulator.clear_display() + if global.interburbulator.shape_ids then + for _, shape_id in pairs(global.interburbulator.shape_ids) do + if rendering.is_valid(shape_id) then rendering.destroy(shape_id) end + end + end + global.interburbulator.shape_ids = {} +end + +function Interburbulator.get_attempts(challenge_index) + global.interburbulator.challenge_attempts = global.interburbulator.challenge_attempts or {} + global.interburbulator.challenge_attempts[challenge_index] = global.interburbulator.challenge_attempts[challenge_index] or { + attempts = 0, + tick = game.tick + } + -- reset + if global.interburbulator.challenge_attempts[challenge_index].attempts >= Interburbulator.challenges[challenge_index].attempts and game.tick > global.interburbulator.challenge_attempts[challenge_index].tick + Interburbulator.attempts_locked_timeout then + global.interburbulator.challenge_attempts[challenge_index].attempts = 0 + global.interburbulator.challenge_attempts[challenge_index].tick = game.tick + end + return global.interburbulator.challenge_attempts[challenge_index] +end + +function Interburbulator.increase_attempts(challenge_index) + Interburbulator.get_attempts(challenge_index) + global.interburbulator.challenge_attempts[challenge_index].attempts = + global.interburbulator.challenge_attempts[challenge_index].attempts + 1 + global.interburbulator.challenge_attempts[challenge_index].tick = game.tick +end + +function Interburbulator.update(player) + if not global.interburbulator then return end + Interburbulator.clear_display() + local surface = Zone.get_surface(global.interburbulator.zone) + if not surface then return end + + local vs_abc = global.interburbulator.challenge_set -- vector set: points a, b, and c. Point d is inferred to complete the square + local cells_w = global.interburbulator.challenge_grid_size + local target_cell = global.interburbulator.challenge_cell + local width + if global.interburbulator.challenge_index then + vs_abc = Interburbulator.challenges[global.interburbulator.challenge_index].set + cells_w = Interburbulator.challenges[global.interburbulator.challenge_index].grid + target_cell = Interburbulator.challenges[global.interburbulator.challenge_index].target + end + + if cells_w then + Interburbulator.draw_grid(surface, cells_w) + width = Interburbulator.display_width_tiles * cells_w/(cells_w+2) + if target_cell then + local box = { + {(target_cell[1]-1)/cells_w, (target_cell[2]-1)/cells_w}, + {target_cell[1]/cells_w, target_cell[2]/cells_w} + } + table.insert(global.interburbulator.shape_ids, rendering.draw_rectangle{ + surface = surface, + color = {r=0.4,b=0,g=0,a=0.4}, + filled = true, + left_top = { x = global.interburbulator.position.x -width/2 + box[1][1] * width, y = global.interburbulator.position.y -width/2 + box[1][2] * width }, + right_bottom = { x = global.interburbulator.position.x -width/2 + box[2][1] * width, y = global.interburbulator.position.y -width/2 + box[2][2] * width }, + draw_on_ground = true, + }) + end + else + return + end + + local v_e = global.interburbulator.guessed_vector + if v_e and v_e[1] == 0 and v_e[2] == 0 and v_e[3] == 0 then + v_e = nil + end + if not (vs_abc and v_e) then return end + + local v_a2b = {} -- a to b + local v_a2c = {} -- a to c + local n_e = Util.nvector_normalise(v_e) -- the normal of point e + + local v_bc = {} -- the bc midpoint + local v_abc = {} -- the abc midpoint + for i = 1, #v_e do + v_bc[i] = (vs_abc[2][i]+vs_abc[3][i])/2 + v_a2b[i] = vs_abc[2][i]-vs_abc[1][i] + v_a2c[i] = vs_abc[3][i]-vs_abc[1][i] + v_abc[i] = (vs_abc[1][i] + vs_abc[2][i] + vs_abc[3][i]) / 3 + end + + local n_abc = Util.nvector_normalise(v_abc) -- the normal of the abc mid point + + local n_abc_cross = Util.vector_cross(v_a2b, v_a2c) + local n_abc_cross = {n_abc_cross.x, n_abc_cross.y, n_abc_cross.z} + + -- m_i: the magnitude multiplier for vector e where it would intersect with the abc plane + local m_i = Util.nvector_dot(n_abc_cross, Util.nvector_multiply(vs_abc[1], -1)) / Util.nvector_dot(Util.nvector_multiply(v_e, -1), n_abc_cross) + + local v_i = Util.nvector_multiply(v_e, m_i) -- i, the point on the abc plane where e intersects + + local v_a2i = {} -- bc_mid to a + local v_bc2a = {} -- bc_mid to a + local v_bc2b = {} -- bc_mid to b (to c is negative this vector) + local v_bc2i = {} -- bc_mid to the i intersection + for i = 1, #v_e do + v_a2i[i] = v_i[i]-vs_abc[1][i] + v_bc2a[i] = vs_abc[1][i]-v_bc[i] + v_bc2b[i] = vs_abc[2][i]-v_bc[i] + v_bc2i[i] = v_i[i]-v_bc[i] + end + + -- need to de-skew the space + local sets = {{1,2},{1,3},{2,3}} + local mi_a2b + local mi_a2c + for _, set in pairs(sets) do + local u = set[1] + local v = set[2] + if mi_a2b == nil or tostring(mi_a2b) == "nan" then + mi_a2b = (v_a2i[v]*v_a2c[u]-v_a2i[u]*v_a2c[v])/(v_a2c[u]*v_a2b[v]-v_a2c[v]*v_a2b[u]) + end + if mi_a2c == nil or tostring(mi_a2c) == "nan" then + mi_a2c = (v_a2i[v]*v_a2b[u]-v_a2i[u]*v_a2b[v])/(v_a2b[u]*v_a2c[v]-v_a2b[v]*v_a2c[u]) + end + end + + local cursor_point_2d = { + mi_a2b, + mi_a2c, + } + -- handle innacuracy + if cursor_point_2d[1] < 0 and cursor_point_2d[1] > -Interburbulator.threshold then + cursor_point_2d[1] = 0 + end + if cursor_point_2d[2] < 0 and cursor_point_2d[2] > -Interburbulator.threshold then + cursor_point_2d[2] = 0 + end + + local best_box + local best_cell + for k = 0, cells_w do + for j = 0, cells_w do + local box + if not best_box then + box = {{k/cells_w, j/cells_w}, {(k+1)/cells_w, (j+1)/cells_w}} + if cursor_point_2d[1] >= box[1][1] + and cursor_point_2d[1] <= box[2][1] + and cursor_point_2d[2] >= box[1][2] + and cursor_point_2d[2] <= box[2][2] then + best_box = box + best_cell = {k+1, j+1} + end + end + end + end + + local challenge_index = global.interburbulator.challenge_index + local attempts = 0 + local allow = true + if challenge_index then + attempts = Interburbulator.get_attempts(challenge_index).attempts + if attempts >= Interburbulator.challenges[challenge_index].attempts then + allow = false + if player then + Interburbulator.message(player, {"space-exploration."..Interburbulator.locked_text[math.random(#Interburbulator.locked_text)]}) + end + end + end + if allow then + if cursor_point_2d and cursor_point_2d[1] > -0.1 and cursor_point_2d[1] < 1.1 + and cursor_point_2d[2] > -0.1 and cursor_point_2d[2] < 1.1 then + table.insert(global.interburbulator.shape_ids, rendering.draw_circle{ + surface = surface, + color = {r=1,b=0,g=1}, + filled = true, + radius = 0.2, + target = {x = global.interburbulator.position.x -width/2 + width * cursor_point_2d[1], y = global.interburbulator.position.y -width/2 + width * cursor_point_2d[2]}, + draw_on_ground = true, + }) + end + if best_box then + table.insert(global.interburbulator.shape_ids, rendering.draw_rectangle{ + surface = surface, + color = {r=0.4,b=0,g=0.4,a=0.4}, + filled = true, + left_top = { x = global.interburbulator.position.x -width/2 + best_box[1][1] * width, y = global.interburbulator.position.y -width/2 + best_box[1][2] * width }, + right_bottom = { x = global.interburbulator.position.x -width/2 + best_box[2][1] * width, y = global.interburbulator.position.y -width/2 + best_box[2][2] * width }, + draw_on_ground = true, + }) + table.insert(global.interburbulator.shape_ids, rendering.draw_rectangle{ + surface = surface, + color = {r=1,b=0,g=1,a=0.4}, + filled = false, + left_top = { x = global.interburbulator.position.x -width/2 + best_box[1][1] * width, y = global.interburbulator.position.y -width/2 + best_box[1][2] * width }, + right_bottom = { x = global.interburbulator.position.x -width/2 + best_box[2][1] * width, y = global.interburbulator.position.y -width/2 + best_box[2][2] * width }, + draw_on_ground = true, + }) + end + if player and global.interburbulator.challenge_index then + if best_cell and target_cell and best_cell[1] == target_cell[1] and best_cell[2] == target_cell[2] then + global.interburbulator.prizes_won = global.interburbulator.prizes_won or {} + if not global.interburbulator.prizes_won[global.interburbulator.challenge_index] then + global.interburbulator.prizes_won[global.interburbulator.challenge_index] = player.index + local prize = Interburbulator.challenges[global.interburbulator.challenge_index].prize + local inserted = 0 + if player.character and player.character.surface == surface then + inserted = player.insert(prize) + end + local remain = (prize.count or 1) - inserted + if remain > 0 then + surface.spill_item_stack( + Util.vectors_add({x=0,y=2.25}, global.interburbulator.interface.position), + {name = prize.name, count = remain}, + true, + player.force, + false) + end + Interburbulator.message(player, { + "space-exploration.simple-a-b-space", + Interburbulator.challenges[global.interburbulator.challenge_index].success_text_prize or Interburbulator.success_text_prize, + {"space-exploration.simple-a-b-space", (prize.count or 1) .." [img=item/"..prize.name.."] ", {"item-name."..prize.name}} + }) + else + Interburbulator.message(player, {"space-exploration."..Interburbulator.success_repeat[math.random(#Interburbulator.success_repeat)]}) + end + if table_size(global.interburbulator.prizes_won) >= 5 and not global.interburbulator.freeplay_unlocked then + global.interburbulator.freeplay_unlocked = true + Interburbulator.message(player, {"space-exploration.interburbulator_freeplay_unlocked"}) + end + else + Interburbulator.increase_attempts(global.interburbulator.challenge_index) + if best_box then + Interburbulator.message(player, {"space-exploration."..Interburbulator.fail_text[math.random(#Interburbulator.fail_text)]}) + else + Interburbulator.message(player, {"space-exploration."..Interburbulator.fail_bad_text[math.random(#Interburbulator.fail_bad_text)]}) + end + + if player and challenge_index then + attempts = Interburbulator.get_attempts(challenge_index).attempts + if attempts >= Interburbulator.challenges[challenge_index].attempts then + Interburbulator.message(player, {"space-exploration."..Interburbulator.locked_text[math.random(#Interburbulator.locked_text)]}) + end + end + + end + end + end +end + +function Interburbulator.draw_grid(surface, cells_w) + local pos = global.interburbulator.position + local width = Interburbulator.display_width_tiles * cells_w/(cells_w+2) + for i = 1, cells_w+1 do + local p = (i-1)/(cells_w) + table.insert(global.interburbulator.shape_ids, rendering.draw_line{ + surface = surface, + from = {x = pos.x - width/2, y = pos.y - width/2 + p * width}, + to = {x = pos.x + width/2, y = pos.y - width/2 + p * width}, + color = {r=0.5,b=0,g=0,a=0.5}, + width = 1, + draw_on_ground = true + }) + table.insert(global.interburbulator.shape_ids, rendering.draw_line{ + surface = surface, + from = {x = pos.x - width/2 + p * width, y = pos.y - width/2}, + to = {x = pos.x - width/2 + p * width, y = pos.y + width/2}, + color = {r=0.5,b=0,g=0,a=0.5}, + width = 1, + draw_on_ground = true + }) + end +end + +function Interburbulator.gui_close(player) + local gui = player.gui.screen + local root = gui[Interburbulator.name_interburbulator_gui_root] + if root then root.destroy() end +end + +function Interburbulator.gui_update(player) + local root = player.gui.screen[Interburbulator.name_interburbulator_gui_root] + if not root then return end + + local vs_abc = global.interburbulator.challenge_set + local cells_w = global.interburbulator.challenge_grid_size + local target_cell = global.interburbulator.challenge_cell + if global.interburbulator.challenge_index then + vs_abc = Interburbulator.challenges[global.interburbulator.challenge_index].set + cells_w = Interburbulator.challenges[global.interburbulator.challenge_index].grid + target_cell = Interburbulator.challenges[global.interburbulator.challenge_index].target + end + if target_cell then + target_cell = target_cell[1]..","..target_cell[2] + end + + local challenge = util.find_first_descendant_by_name(root, "challenges") + local active_name + --if global.interburbulator.challenge_set then active_name = "challenge_random" end -- need to be able to click multiple times + if global.interburbulator.challenge_index then active_name = "challenge_"..global.interburbulator.challenge_index end + for _, button in pairs(challenge.children) do + button.enabled = true + if button.name == active_name then + button.enabled = false + end + end + + if cells_w then util.find_first_descendant_by_name(root, "grid_textbox").text = ""..cells_w end + if target_cell then util.find_first_descendant_by_name(root, "target_textbox").text = ""..target_cell end + local prize_lab = util.find_first_descendant_by_name(root, "prize_lab") + if prize_lab then + if global.interburbulator.challenge_index then + local prize = Interburbulator.challenges[global.interburbulator.challenge_index].prize + local claimed = global.interburbulator.prizes_won and global.interburbulator.prizes_won[global.interburbulator.challenge_index] + local caption = { + "space-exploration.interburbulator_caption_prize", + (prize.count or 1), + "[img=item/"..prize.name.."]", + {"item-name."..prize.name}, + claimed and {"space-exploration.interburbulator_caption_claimed"} or "" + } + prize_lab.caption = caption + else + prize_lab.caption = "" + end + end + + if vs_abc then + local top_left = util.find_first_descendant_by_name(root, "top_left") + top_left.x.textbox.text = ""..vs_abc[1][1] + top_left.y.textbox.text = ""..vs_abc[1][2] + top_left.z.textbox.text = ""..vs_abc[1][3] + + local top_right = util.find_first_descendant_by_name(root, "top_right") + top_right.x.textbox.text = ""..vs_abc[2][1] + top_right.y.textbox.text = ""..vs_abc[2][2] + top_right.z.textbox.text = ""..vs_abc[2][3] + + local bottom_left = util.find_first_descendant_by_name(root, "bottom_left") + bottom_left.x.textbox.text = ""..vs_abc[3][1] + bottom_left.y.textbox.text = ""..vs_abc[3][2] + bottom_left.z.textbox.text = ""..vs_abc[3][3] + end + + if global.interburbulator.challenge_index then + local attempts = Interburbulator.get_attempts(global.interburbulator.challenge_index).attempts + local attempts_max = Interburbulator.challenges[global.interburbulator.challenge_index].attempts + if attempts < attempts_max then + util.find_first_descendant_by_name(root, "attempt").caption = {"space-exploration.interburbulator_attempt_limited", attempts, attempts_max } + else + util.find_first_descendant_by_name(root, "attempt").caption = {"space-exploration.interburbulator_attempt_locked"} + end + else + util.find_first_descendant_by_name(root, "attempt").caption = {"space-exploration.interburbulator_attempt"} + end + + if global.interburbulator.guessed_vector then + local attempt = util.find_first_descendant_by_name(root, "attempt") + if attempt.x.textbox.text == "" then attempt.x.textbox.text = ""..global.interburbulator.guessed_vector[1] end + if attempt.y.textbox.text == "" then attempt.y.textbox.text = ""..global.interburbulator.guessed_vector[2] end + if attempt.z.textbox.text == "" then attempt.z.textbox.text = ""..global.interburbulator.guessed_vector[3] end + end + + local challenge_random = util.find_first_descendant_by_name(root, "challenge_random") + if challenge_random then + challenge_random.caption = {global.interburbulator.freeplay_unlocked and "space-exploration.interburbulator_freeplay" or "space-exploration.interburbulator_random"} + end + +end + +function Interburbulator.enable_textfields(element, enabled) + if element.type == "textfield" then + element.enabled = enabled + else + for _, child in pairs(element.children) do + if child.name ~= "attempt" then + Interburbulator.enable_textfields(child, enabled) + end + end + end +end + +function Interburbulator.gui_open(player) + Interburbulator.gui_close(player) + local gui = player.gui.screen + + local container = gui.add{ type = "frame", name = Interburbulator.name_interburbulator_gui_root, direction="vertical"} + player.opened = container + + local title_flow = container.add{ type="flow", name="unit_number", direction="horizontal"} + local title = title_flow.add{ type="label", name="title", caption={"space-exploration.interburbulator_game_title"}, style="heading_1_label"} + title.ignored_by_interaction = true + if gui_name == "screen" then title_flow.drag_target = container end + + -- Trying to make the fancy "Drag me" vertical bars... + local drag_handle = title_flow.add{type = "empty-widget", style = "draggable_space_header", direction="horizontal"} + drag_handle.drag_target = container + drag_handle.style.minimal_width = 20 + drag_handle.style.horizontally_stretchable = true + drag_handle.style.vertically_stretchable = true + + local close = title_flow.add{type="sprite-button", name=mod_prefix .. "-interburbulator-close", sprite = "utility/close_white", style="informatron_close_button"} + close.style.width = 28 + close.style.height = 28 + close.style.top_margin = 0 + + local intro = container.add{type="label", name="intro", caption={"space-exploration.interburbulator_introduction"}} + intro.style.single_line = false + intro.style.width = 500 + intro.style.top_margin = 10 + intro.style.bottom_margin = 10 + + local challenges = container.add{type="flow", name="challenges", direction="horizontal"} + challenges.style.bottom_margin = 10 + for i = 1, 10 do + local button = challenges.add{type = "button", name = "challenge_"..i, caption = i} + button.style.minimal_width = 32 + end + local button = challenges.add{type = "button", name = "challenge_random", caption = { + global.interburbulator.freeplay_unlocked and "space-exploration.interburbulator_freeplay" or "space-exploration.interburbulator_random" + }} + + local grid = container.add{type="flow", name="grid_target", direction="horizontal"} + grid.style.vertical_align = "center" + local grid_lab = grid.add{type="label", name="grid_lab", caption={"space-exploration.interburbulator_grid_size"}} + local grid_textbox = grid.add{type="textfield", name="grid_textbox", numeric = true, allow_decimal = false, allow_negative = false} + grid_textbox.style.width = 100 + local target_lab = grid.add{type="label", name="target_lab", caption={"space-exploration.interburbulator_target_cell"}} + target_lab.style.left_margin = 10 + local target_textbox = grid.add{type="textfield", name="target_textbox"} + target_textbox.style.width = 100 + + local settings_flow1 = container.add{type = "flow", name="settings_flow1", direction = "horizontal"} settings_flow1.style.top_margin = 10 + local settings_flow2 = container.add{type = "flow", name="settings_flow2", direction = "horizontal"} + + local top_left = settings_flow1.add{type = "frame", name="top_left", direction="vertical", caption = {"space-exploration.interburbulator_top_left"}} top_left.style.width = 250 + local top_right = settings_flow1.add{type = "frame", name="top_right", direction="vertical", caption = {"space-exploration.interburbulator_top_right"}} top_right.style.width = 250 + local bottom_left = settings_flow2.add{type = "frame", name="bottom_left", direction="vertical", caption = {"space-exploration.interburbulator_bottom_left"}} bottom_left.style.width = 250 + local attempt = settings_flow2.add{type = "frame", name="attempt", direction="vertical", caption = {"space-exploration.interburbulator_attempt"}} attempt.style.width = 250 + + for _, frame in pairs({top_left, top_right, bottom_left, attempt}) do + local x = frame.add{type="flow", name="x", direction="horizontal"} x.add{type="label", name="lab", caption="X: "} x.add{type="textfield", name="textbox", numeric = true, allow_decimal = true, allow_negative = true} + local y = frame.add{type="flow", name="y", direction="horizontal"} y.add{type="label", name="lab", caption="Y: "} y.add{type="textfield", name="textbox", numeric = true, allow_decimal = true, allow_negative = true} + local z = frame.add{type="flow", name="z", direction="horizontal"} z.add{type="label", name="lab", caption="Z: "} z.add{type="textfield", name="textbox", numeric = true, allow_decimal = true, allow_negative = true} + end + + local bottom_table = container.add{ type="table", name="bottom_table", column_count=2, draw_horizontal_lines=false} + bottom_table.style.horizontally_stretchable = true + bottom_table.style.vertical_align = "bottom" + bottom_table.style.column_alignments[1] = "left" -- title, search, zone list table + bottom_table.style.column_alignments[2] = "right" -- starmap, close, selected zone info + + local prize_lab = bottom_table.add{type="label", name="prize_lab"} + prize_lab.style.horizontally_stretchable = true + + local submit = bottom_table.add{type="button", name=mod_prefix .. "-interburbulator-submit", style="confirm_button", caption={"space-exploration.interburbulator_submit"}} + submit.style.top_margin = 10 + + --Interburbulator.enable_textfields(container, false) + Interburbulator.gui_update(player) + + --container.force_auto_center() +end + +function Interburbulator.submit(player, skip_warnings) + local root = player.gui.screen[Interburbulator.name_interburbulator_gui_root] + if not root then return end + + if global.interburbulator.freeplay_unlocked and not global.interburbulator.challenge_index then + Interburbulator.challenge_from_gui(player) + end + + local attempt = util.find_first_descendant_by_name(root, "attempt") + local attempt_x = tonumber(attempt.x.textbox.text) + local attempt_y = tonumber(attempt.y.textbox.text) + local attempt_z = tonumber(attempt.z.textbox.text) + if attempt_x and attempt_y and attempt_z and not(attempt_x==0 and attempt_y==0 and attempt_z==0) then + global.interburbulator.guessed_vector = {attempt_x,attempt_y,attempt_z} -- shown after a guess + else + if not skip_warnings then + Interburbulator.message(player, "Invalid attempt vector") + end + end + global.interburbulator.guessed_player_index = player.index + + Interburbulator.update(player) + Interburbulator.gui_update(player) +end + +function Interburbulator.activate_challenge(challenge_index, player) + global.interburbulator.guessed_vector = nil + global.interburbulator.guessed_position = nil + global.interburbulator.guessed_cell = nil + global.interburbulator.guessed_player_index = nil + if Interburbulator.challenges[challenge_index] then + global.interburbulator.challenge_index = challenge_index + global.interburbulator.challenge_set = nil + global.interburbulator.challenge_grid_size = nil + global.interburbulator.challenge_cell = nil + else -- assume random + global.interburbulator.challenge_index = nil + global.interburbulator.challenge_grid_size = math.random(5,50) + global.interburbulator.challenge_cell = {math.random(2,global.interburbulator.challenge_grid_size-1), math.random(2,global.interburbulator.challenge_grid_size-1)} + + local multiplier = 1 + if math.random() < 0.23 then + multiplier = math.random() * 1000 + end + global.interburbulator.challenge_set = { + {(-1+math.random()*2) *multiplier,(-1+math.random()*2) *multiplier,(-1+math.random()*2) *multiplier}, + {(-1+math.random()*2) *multiplier,(-1+math.random()*2) *multiplier,(-1+math.random()*2) *multiplier}, + {(-1+math.random()*2) *multiplier,(-1+math.random()*2) *multiplier,(-1+math.random()*2) *multiplier}, + } + end + Interburbulator.update(player) + Interburbulator.gui_update(player) +end + +function Interburbulator.challenge_from_gui(player) + local root = player.gui.screen[Interburbulator.name_interburbulator_gui_root] + if not root then return end + + local grid_textbox = util.find_first_descendant_by_name(root, "grid_textbox") + local target_textbox = util.find_first_descendant_by_name(root, "target_textbox") + local top_left = util.find_first_descendant_by_name(root, "top_left") + local top_right = util.find_first_descendant_by_name(root, "top_right") + local bottom_left = util.find_first_descendant_by_name(root, "bottom_left") + + local function number_or_random(inp) + return tonumber(inp) or math.random() + end + global.interburbulator.challenge_set = { + {number_or_random(top_left.x.textbox.text),number_or_random(top_left.y.textbox.text),number_or_random(top_left.z.textbox.text)}, + {number_or_random(top_right.x.textbox.text),number_or_random(top_right.y.textbox.text),number_or_random(top_right.z.textbox.text)}, + {number_or_random(bottom_left.x.textbox.text),number_or_random(bottom_left.y.textbox.text),number_or_random(bottom_left.z.textbox.text)}, + } + + local cells_w = tonumber(grid_textbox.text) or 5 + cells_w = math.min(50, math.max(5, cells_w)) + global.interburbulator.challenge_grid_size = cells_w + local target_cell = target_textbox.text + local parts = Util.split(target_cell, ",") + local x = 2 + local y = 2 + if #parts == 2 then + x = math.min(cells_w, math.max(1, Util.string_to_number(parts[1]) or 2)) + y = math.min(cells_w, math.max(1, Util.string_to_number(parts[2]) or 2)) + end + global.interburbulator.challenge_cell = {x, y} +end + +function Interburbulator.on_gui_click(event) + if not (event.element and event.element.valid) then return end + local element = event.element + local player = game.players[event.player_index] + root = gui_element_or_parent(element, Interburbulator.name_interburbulator_gui_root) + if element.parent and element.parent.name == "challenges" then + if element.name == "challenge_random" then + Interburbulator.activate_challenge("random", player) + else + local challenge_index = Util.string_to_number(Util.replace(element.name, "challenge_", "")) + Interburbulator.activate_challenge(challenge_index, player) + end + elseif element.name == mod_prefix .. "-interburbulator-close" then + Interburbulator.gui_close(player) + elseif element.name == mod_prefix .. "-interburbulator-submit" then + Interburbulator.submit(player) + end +end +Event.addListener(defines.events.on_gui_click, Interburbulator.on_gui_click) + +function Interburbulator.on_gui_opened(event) + local player = game.players[event.player_index] + if event.entity and event.entity.valid and event.entity.name == mod_prefix.."interburbulator-control" then + player.opened = nil + if player.character and player.character.surface == event.entity.surface and Util.vectors_delta_length(player.character.position, event.entity.position) < 5 then + Interburbulator.gui_open(player) + Interburbulator.update() --Interburbulator.update(player) + else + event.entity.surface.create_entity{ + name = "flying-text", + position = event.entity.position, + text = {"space-exploration.out_of_reach"}, + render_player_index = player.index, + } + end + end +end +Event.addListener(defines.events.on_gui_opened, Interburbulator.on_gui_opened) + +function Interburbulator.on_gui_text_changed(event) + if not (event.element and event.element.valid) then return end + local element = event.element + local player = game.players[event.player_index] + root = gui_element_or_parent(element, Interburbulator.name_interburbulator_gui_root) + if not (root and global.interburbulator) then return end + if element.parent and element.parent.parent and element.parent.parent.name == "attempt" then + -- always allowed + else + if not global.interburbulator.freeplay_unlocked then + Interburbulator.message(player, {"space-exploration.interburbulator_deny_freeplay_"..(game.tick%6+1)}) + Interburbulator.gui_update(player) + end + end +end +Event.addListener(defines.events.on_gui_text_changed, Interburbulator.on_gui_text_changed) + +function Interburbulator.on_gui_confirmed(event) + if not (event.element and event.element.valid) then return end + local element = event.element + local player = game.players[event.player_index] + root = gui_element_or_parent(element, Interburbulator.name_interburbulator_gui_root) + if not (root and global.interburbulator) then return end + Interburbulator.submit(player, true) +end +Event.addListener(defines.events.on_gui_confirmed, Interburbulator.on_gui_confirmed) + +return Interburbulator diff --git a/space-exploration_0.5.80/space-exploration/scripts/landingpad-gui.lua b/space-exploration_0.5.80/space-exploration/scripts/landingpad-gui.lua new file mode 100644 index 0000000..f041ae0 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/landingpad-gui.lua @@ -0,0 +1,224 @@ +local LandingpadGUI = {} + +LandingpadGUI.name_rocket_landing_pad_gui_root = mod_prefix .. "rocket-landing-pad-gui" + +--- Create the landing pad gui for a player +---@param player LuaPlayer +---@param landing_pad Landingpad landing pad data +function LandingpadGUI.gui_open(player, landing_pad) + LandingpadGUI.gui_close(player) + if not landing_pad then Log.trace('LandingpadGUI.gui_open landing_pad not found') return end + + local gui = player.gui.relative + local anchor = {gui=defines.relative_gui_type.container_gui, position=defines.relative_gui_position.left} + local container = gui.add { + type = "frame", + name = LandingpadGUI.name_rocket_landing_pad_gui_root, + style = "space_platform_container", + direction = "vertical", + anchor = anchor, + -- use gui element tags to store a reference to what landing pad this gui is displaying/controls + tags = { + unit_number = landing_pad.unit_number + } + } + + local title_flow = container.add{type = "flow", "landingpad-title-flow", direction = "horizontal"} + title_flow.add{type = "label", name = "landingpad-title-label", style = "frame_title", caption = {"space-exploration.relative-window-settings"}, ignored_by_interaction = true} + local title_empty = title_flow.add { + type = "empty-widget", + style = "draggable_space", + ignored_by_interaction = true + } + title_empty.style.horizontally_stretchable = "on" + title_empty.style.left_margin = 4 + title_empty.style.right_margin = 0 + title_empty.style.height = 24 + + local name_flow = container.add { + type = "flow", + name = "name-flow", + direction = "vertical" + } + LandingpadGUI.make_change_name_button_flow(landing_pad, name_flow) + + container.add {type = "label", name = "cargo_capacity", caption = {"space-exploration.label_cargo", ""}} + local bar = container.add { + type = "progressbar", + name = "cargo_capacity_progress", + size = 300, + value = 0, + style = "space_platform_progressbar_cargo" + } + bar.style.horizontally_stretchable = true + + container.add {type = "label", name = "status", caption = {"space-exploration.label_status", ""}} + + LandingpadGUI.gui_update(player) +end + +function LandingpadGUI.gui_update(player) + local root = player.gui.relative[LandingpadGUI.name_rocket_landing_pad_gui_root] + if root then + local struct = Landingpad.from_unit_number( + root and root.tags and root.tags.unit_number) + if struct then + if not (struct.container and struct.container.valid) then + Landingpad.destroy(struct) + else + local inv = struct.container.get_inventory(defines.inventory.chest) + local inv_used = count_inventory_slots_used(inv) + + root["cargo_capacity"].caption = {"space-exploration.label_cargo", {"space-exploration.simple-a-b-divide", math.min(inv_used, #inv), #inv}} + root["cargo_capacity_progress"].value = math.min(inv_used, #inv) / #inv + local message = "" + if inv_used > 0 then + message = {"space-exploration.landingpad_unloading_required"} + else + message = {"space-exploration.landingpad_ready"} + end + if struct.inbound_rocket then + message = {"space-exploration.landingpad_rocket_inboud"} + end + root["status"].caption = {"space-exploration.label_status", message} + end + end + end +end + +function LandingpadGUI.make_change_name_button_flow(struct, name_flow) + name_flow.clear() + local name_horizontal_flow = name_flow.add{type="flow",direction="horizontal"} + local name_label = name_horizontal_flow.add { + type = "label", + name = "show-name", + caption = struct.name, + style = "space_platform_title_short" + } + local rename_button = name_horizontal_flow.add { + type = "sprite-button", + name = "rename", + sprite = "utility/rename_icon_normal", + tooltip = { + "space-exploration.rename-something", {"entity-name." .. Landingpad.name_rocket_landing_pad} + }, + style = "space_platform_sprite_button_small" + } + local list, selected_index, values = Landingpad.dropdown_list_force_landing_pad_names(struct.force_name, struct.name) + -- there is a default value at the start of the list, we don't want it here since landing pads always have a valid name + table.remove(list, 1) + table.remove(values, 1) + local landingpads_dropdown = name_flow.add{ type="drop-down", name="change_name_dropdown", items=values, selected_index=selected_index-1} +end + +function LandingpadGUI.make_change_name_confirm_flow(struct, name_flow) + name_flow.clear() + local name_horizontal_flow = name_flow.add{type="flow",direction="horizontal"} + local name_label = name_horizontal_flow.add { + type = "textfield", + name = "write-name", + text = struct.name, + style = "space_platform_textfield_short" + } + name_label.select_all() + name_label.focus() + local rename_button = name_horizontal_flow.add { + type = "sprite-button", + name = "rename-confirm", + sprite = "utility/enter", + tooltip = { + "space-exploration.rename-something", {"entity-name." .. Landingpad.name_rocket_landing_pad} + }, + style = "space_platform_sprite_button_small" + } +end + +function LandingpadGUI.gui_selection_state_changed(event) + if not (event.element and event.element.valid and event.element.name == "change_name_dropdown") then return end + local element = event.element + local root = gui_element_or_parent(element, + LandingpadGUI.name_rocket_landing_pad_gui_root) + if not root then return end + local struct = Landingpad.from_unit_number(root and root.tags and root.tags.unit_number) + if not struct then return end + + local name_text = struct.name + local new_name_text = element.get_item(element.selected_index) + if new_name_text ~= "" and new_name_text ~= name_text then + --do change name stuff + Landingpad.rename(struct, new_name_text) + end + + -- gui rebuild + local player = game.players[event.player_index] + LandingpadGUI.make_change_name_button_flow(struct, element.parent) +end +Event.addListener(defines.events.on_gui_selection_state_changed, LandingpadGUI.gui_selection_state_changed) + +function LandingpadGUI.on_gui_click(event) + if not (event.element and event.element.valid) then return end + local element = event.element + local player = game.players[event.player_index] + local root = gui_element_or_parent(element, + LandingpadGUI.name_rocket_landing_pad_gui_root) + if not root then return end + local struct = Landingpad.from_unit_number(root and root.tags and root.tags.unit_number) + if not struct then return end + + if element.name == "rename" then + local name_flow = element.parent.parent + LandingpadGUI.make_change_name_confirm_flow(struct, name_flow) + elseif element.name == "rename-confirm" then -- don't confirm by clicking the textbox + local name_flow = element.parent.parent + local new_name = string.trim(element.parent["write-name"].text) + if new_name ~= "" and new_name ~= struct.name then + -- do change name stuff + Landingpad.rename(struct, new_name) + end + LandingpadGUI.make_change_name_button_flow(struct, name_flow) + end +end +Event.addListener(defines.events.on_gui_click, LandingpadGUI.on_gui_click) +Event.addListener(defines.events.on_gui_confirmed, LandingpadGUI.on_gui_click) + +function LandingpadGUI.on_tick(struct) + if game.tick % 60 == 0 then + for _, player in pairs(game.connected_players) do + LandingpadGUI.gui_update(player) + end + end +end +Event.addListener(defines.events.on_tick, LandingpadGUI.on_tick) + +--- Close the landing pad gui for a player +---@param player any +function LandingpadGUI.gui_close(player) + if player.gui.relative[LandingpadGUI.name_rocket_landing_pad_gui_root] then + player.gui.relative[LandingpadGUI.name_rocket_landing_pad_gui_root].destroy() + end +end + +--- Respond to the main entity GUI being closed by destroying the relative GUI +---@param event any +function LandingpadGUI.on_gui_closed(event) + local player = game.players[event.player_index] + if player and event.entity and event.entity.name == Landingpad.name_rocket_landing_pad then + LandingpadGUI.gui_close(player) + end +end +Event.addListener(defines.events.on_gui_closed, LandingpadGUI.on_gui_closed) + +--- Opens the landing pad gui when a landing pad is clicked +--- Closes the landing pad gui when another gui is opened +---@param event any +function LandingpadGUI.on_gui_opened(event) + local player = game.players[event.player_index] + if event.entity and event.entity.valid and event.entity.name == Landingpad.name_rocket_landing_pad then + LandingpadGUI.gui_open(player, Landingpad.from_entity(event.entity)) + else + LandingpadGUI.gui_close(player) + end +end +Event.addListener(defines.events.on_gui_opened, LandingpadGUI.on_gui_opened) + +return LandingpadGUI diff --git a/space-exploration_0.5.80/space-exploration/scripts/landingpad.lua b/space-exploration_0.5.80/space-exploration/scripts/landingpad.lua new file mode 100644 index 0000000..ad12aef --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/landingpad.lua @@ -0,0 +1,336 @@ +local Landingpad = {} + +-- constants +Landingpad.name_rocket_landing_pad = mod_prefix.."rocket-landing-pad" +Landingpad.name_rocket_landing_pad_settings = mod_prefix.."rocket-landing-pad-settings" + +---@class LandingPad All data necessary to maintain the state of a delivery cannon + +--- Gets the Landingpad for this unit_number +---@param unit_number number +function Landingpad.from_unit_number (unit_number) + if not unit_number then Log.trace("Landingpad.from_unit_number: invalid unit_number: nil") return end + unit_number = tonumber(unit_number) + -- NOTE: only supports container as the entity + if global.rocket_landing_pads[unit_number] then + return global.rocket_landing_pads[unit_number] + else + Log.trace("Landingpad.from_unit_number: invalid unit_number: " .. unit_number) + end +end + +--- Gets the Landingpad for this entity +---@param entity LuaEntity +function Landingpad.from_entity (entity) + if not(entity and entity.valid) then + Log.trace("Landingpad.from_entity: invalid entity") + return + end + -- NOTE: only suppors container as the entity + return Landingpad.from_unit_number(entity.unit_number) +end + +-- returns the available struct +function Landingpad.get_force_landing_pads_availability(force_name, landing_pad_name) + + local empty_landing_pads = {} + local filled_landing_pads = {} + local blocked_landing_pads = {} + + if global.forces[force_name] and global.forces[force_name].rocket_landing_pad_names and global.forces[force_name].rocket_landing_pad_names[landing_pad_name] then + local landing_pads = global.forces[force_name].rocket_landing_pad_names[landing_pad_name] + + for _, landing_pad in pairs(landing_pads) do + if landing_pad.container and landing_pad.container.valid then + if landing_pad.inbound_rocket then + table.insert(blocked_landing_pads, landing_pad) + elseif landing_pad.container.get_inventory(defines.inventory.chest).is_empty() then + table.insert(empty_landing_pads, landing_pad) + else + table.insert(filled_landing_pads, landing_pad) + end + else + Landingpad.destroy(landing_pad) + end + end + + end + + return { + empty_landing_pads = empty_landing_pads, + filled_landing_pads = filled_landing_pads, + blocked_landing_pads = blocked_landing_pads, + } + +end + +-- returns the available struct +function Landingpad.get_zone_landing_pads_availability(force_name, zone, landing_pad_name) + + local empty_landing_pads = {} + local filled_landing_pads = {} + local blocked_landing_pads = {} + + local zone_assets = Zone.get_force_assets(force_name, zone.index) + if zone_assets.rocket_landing_pad_names and zone_assets.rocket_landing_pad_names[landing_pad_name] then + local landing_pads = zone_assets.rocket_landing_pad_names[landing_pad_name] + + + for _, landing_pad in pairs(landing_pads) do + if landing_pad.container and landing_pad.container.valid then + if landing_pad.inbound_rocket then + table.insert(blocked_landing_pads, landing_pad) + elseif landing_pad.container.get_inventory(defines.inventory.chest).is_empty() then + table.insert(empty_landing_pads, landing_pad) + else + table.insert(filled_landing_pads, landing_pad) + end + else + Landingpad.destroy(landing_pad) + end + end + + end + + return { + empty_landing_pads = empty_landing_pads, + filled_landing_pads = filled_landing_pads, + blocked_landing_pads = blocked_landing_pads, + } + +end + +function Landingpad.on_entity_created(event) + local entity = util.get_entity_from_event(event) + + if not entity then return end + if entity.name == Landingpad.name_rocket_landing_pad then + local zone = Zone.from_surface(entity.surface) + if not zone then + return cancel_entity_creation(entity, event.player_index, {"space-exploration.construction-denied"}) + end + local fn = entity.force.name + + local default_name = zone.name .. " Landing Pad" + + local struct = { + type = Landingpad.name_rocket_landing_pad, + valid = true, + force_name = fn, + unit_number = entity.unit_number, + container = entity, + name = default_name, + zone = zone + } + global.rocket_landing_pads = global.rocket_landing_pads or {} + global.rocket_landing_pads[entity.unit_number] = struct + + Landingpad.name(struct) -- assigns to zone_assets + + -- set settings + local tags = util.get_tags_from_event(event, Landingpad.serialize) + if tags then + Landingpad.deserialize(entity, tags) + end + + if event.player_index and game.players[event.player_index] and game.players[event.player_index].connected then + LandingpadGUI.gui_open(game.players[event.player_index], struct) + end + end +end +Event.addListener(defines.events.on_entity_cloned, Landingpad.on_entity_created) +Event.addListener(defines.events.on_built_entity, Landingpad.on_entity_created) +Event.addListener(defines.events.on_robot_built_entity, Landingpad.on_entity_created) +Event.addListener(defines.events.script_raised_built, Landingpad.on_entity_created) +Event.addListener(defines.events.script_raised_revive, Landingpad.on_entity_created) + +function Landingpad.remove_struct_from_tables(struct) + + -- force + local force_data = global.forces[struct.force_name] + force_data.rocket_landing_pad_names = force_data.rocket_landing_pad_names or {} + local force_type_table = force_data.rocket_landing_pad_names + + if not force_type_table[struct.name] then return end + force_type_table[struct.name][struct.unit_number] = nil + local count_remaining = 0 + for _, remaining in pairs(force_type_table[struct.name]) do + count_remaining = count_remaining + 1 + end + if count_remaining == 0 then + force_type_table[struct.name] = nil + end + + -- zone + local zone_assets = Zone.get_force_assets(struct.force_name, struct.zone.index) + zone_assets.rocket_landing_pad_names = zone_assets.rocket_landing_pad_names or {} + local zone_type_table = zone_assets.rocket_landing_pad_names + + if not zone_type_table[struct.name] then return end + zone_type_table[struct.name][struct.unit_number] = nil + local count_remaining = 0 + for _, remaining in pairs(zone_type_table[struct.name]) do + count_remaining = count_remaining + 1 + end + if count_remaining == 0 then + zone_type_table[struct.name] = nil + end + +end + +function Landingpad.destroy_sub(struct, key) + if struct[key] and struct[key].valid then + struct[key].destroy() + struct[key] = nil + end +end + +function Landingpad.destroy(struct) + if not struct then + Log.trace("Landingpad.destroy: no struct") + return + end + struct.valid = false + Landingpad.destroy_sub(struct, 'container') + + Landingpad.remove_struct_from_tables(struct) + global.rocket_landing_pads[struct.unit_number] = nil + + -- if a player has this gui open then close it + local gui_name = LandingpadGUI.name_rocket_landing_pad_gui_root + for _, player in pairs(game.connected_players) do + local root = player.gui.relative[gui_name] + if root and root.tags and root.tags.unit_number == struct.unit_number then + player.gui.relative[gui_name].destroy() + end + end +end + +function Landingpad.name(struct, new_name) + struct.name = (new_name or struct.name) + + -- force + local force_data = global.forces[struct.force_name] + force_data.rocket_landing_pad_names = force_data.rocket_landing_pad_names or {} + local force_type_table = force_data.rocket_landing_pad_names + + force_type_table[struct.name] = force_type_table[struct.name] or {} + force_type_table[struct.name][struct.unit_number] = struct + + local zone_assets = Zone.get_force_assets(struct.force_name, struct.zone.index) + zone_assets.rocket_landing_pad_names = zone_assets.rocket_landing_pad_names or {} + local zone_type_table = zone_assets.rocket_landing_pad_names + + zone_type_table[struct.name] = zone_type_table[struct.name] or {} + zone_type_table[struct.name][struct.unit_number] = struct +end + +function Landingpad.rename(struct, new_name) + local old_name = struct.name + Landingpad.remove_struct_from_tables(struct) + Landingpad.name(struct, new_name) +end + +function Landingpad.dropdown_list_zone_landing_pad_names(force_name, zone, current) + local selected_index + local list = {} -- names with optional [count] + local values = {} -- raw names + table.insert(list, {"space-exploration.none_general_vicinity"}) + table.insert(values, "") -- not sure if nil would work + + if zone and zone.type ~= "spaceship" then + local zone_assets = Zone.get_force_assets(force_name, zone.index) + for name, sites in pairs(zone_assets["rocket_landing_pad_names"]) do + local count = 0 + for _, struct in pairs(sites) do + count = count + 1 + end + if count == 1 then + table.insert(list, name) + table.insert(values, name) + if name == current then selected_index = #list end + elseif count > 1 then + table.insert(list, name .. " ["..count.."]") + table.insert(values, name) + if name == current then selected_index = #list end + end + end + end + return list, (selected_index or 1), values +end + +function Landingpad.dropdown_list_force_landing_pad_names(force_name, current) + local selected_index + local list = {} -- names with optional [count] + local values = {} -- raw names + table.insert(list, {"space-exploration.none_cannot_launch"}) + table.insert(values, "") -- not sure if nil would work + + local force_data = global.forces[force_name] + if force_data.rocket_landing_pad_names then + for name, sites in pairs(force_data.rocket_landing_pad_names) do + local count = 0 + for _, struct in pairs(sites) do + count = count + 1 + end + if count == 1 then + table.insert(list, name) + table.insert(values, name) + if name == current then selected_index = #list end + elseif count > 1 then + table.insert(list, name .. " ["..count.."]") + table.insert(values, name) + if name == current then selected_index = #list end + end + end + end + return list, (selected_index or 1), values +end + +function Landingpad.on_entity_removed(event) + local entity = event.entity + if entity and entity.valid and entity.name == Landingpad.name_rocket_landing_pad then + Landingpad.destroy(Landingpad.from_entity(entity)) + end +end +Event.addListener(defines.events.on_entity_died, Landingpad.on_entity_removed) +Event.addListener(defines.events.on_robot_mined_entity, Landingpad.on_entity_removed) +Event.addListener(defines.events.on_player_mined_entity, Landingpad.on_entity_removed) +Event.addListener(defines.events.script_raised_destroy, Landingpad.on_entity_removed) + +function Landingpad.serialize(entity) + local landing_pad = Landingpad.from_entity(entity) + if landing_pad then + local tags = {} + tags.name = landing_pad.name + return tags + end +end + +function Landingpad.deserialize(entity, tags) + local landing_pad = Landingpad.from_entity(entity) + if landing_pad then + Landingpad.rename(landing_pad, tags.name) + end +end + +--- Handles the player creating a blueprint by setting tags to store the state of landing pads +---@param event any +function Landingpad.on_player_setup_blueprint(event) + util.setup_blueprint(event, Landingpad.name_rocket_landing_pad, Landingpad.serialize) +end +Event.addListener(defines.events.on_player_setup_blueprint, Landingpad.on_player_setup_blueprint) + +--- Handles the player copy/pasting settings between landing pads +---@param event any +function Landingpad.on_entity_settings_pasted(event) + util.settings_pasted(event, Landingpad.name_rocket_landing_pad, Landingpad.serialize, Landingpad.deserialize) +end +Event.addListener(defines.events.on_entity_settings_pasted, Landingpad.on_entity_settings_pasted) + +function Landingpad.on_init(event) + global.rocket_landing_pads = {} -- all landing pads sorted by struct[unit_unumber] +end +Event.addListener("on_init", Landingpad.on_init, true) + +return Landingpad diff --git a/space-exploration_0.5.80/space-exploration/scripts/launchpad-gui.lua b/space-exploration_0.5.80/space-exploration/scripts/launchpad-gui.lua new file mode 100644 index 0000000..a1fc60e --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/launchpad-gui.lua @@ -0,0 +1,442 @@ +local LaunchpadGUI = {} + +LaunchpadGUI.name_rocket_launch_pad_gui_root = mod_prefix.."rocket-launch-pad-gui" +LaunchpadGUI.name_window_close = "launchpad_close_button" + +--- Create the launch pad gui for a player +---@param player any +---@param launch_pad Launchpad launch pad data +function LaunchpadGUI.gui_open(player, launch_pad) + LaunchpadGUI.gui_close(player) + if not launch_pad then Log.trace('LaunchpadGUI.gui_open launch_pad not found') return end + + local struct = launch_pad + local gui = player.gui.relative + local playerdata = get_make_playerdata(player) + + local anchor = {gui=defines.relative_gui_type.container_gui, position=defines.relative_gui_position.left} + local container = gui.add{ + type = "frame", + name = LaunchpadGUI.name_rocket_launch_pad_gui_root, + anchor = anchor, + style="space_platform_container", + direction="vertical", + -- use gui element tags to store a reference to what launch pad this gui is displaying/controls + tags = { + unit_number = struct.unit_number + } + } + + local title_table = container.add{type="table", name="launchpad-title-table", column_count=2, draw_horizontal_lines=false} + title_table.style.horizontally_stretchable = true + title_table.style.column_alignments[1] = "left" + title_table.style.column_alignments[2] = "right" + + local title_frame = title_table.add{type="frame", name="launchpad-title-frame", + caption = {"space-exploration.relative-window-settings"}, + style="informatron_title_frame"} + title_frame.style.right_padding = -5 + + local title_informatron = title_table.add{ + type="sprite-button", + name="goto_informatron_cargo_rockets", + sprite = "virtual-signal/informatron", + style="informatron_close_button", + tooltip={"space-exploration.informatron-open-help"} + } + title_informatron.style.width = 28 + title_informatron.style.height = 28 + + local bar + container.add{ type="label", name="crew_capsules", caption={"space-exploration.label_space_capsule", ""}} + bar = container.add{ type="progressbar", name="crew_capsules_progress", size = 300, value=0, style="space_platform_progressbar_capsule"} + bar.style.horizontally_stretchable = true + + container.add{ type="label", name="rocket_sections", caption={"space-exploration.label_rocket_sections", ""}} + bar = container.add{ type="progressbar", name="rocket_sections_progress", size = 300, value=0, style="space_platform_progressbar_sections"} + bar.style.horizontally_stretchable = true + + container.add{ type="label", name="fuel_capacity", caption={"space-exploration.label_liquid_rocket_fuel", ""}} + bar = container.add{ type="progressbar", name="fuel_capacity_progress", size = 300, value=0, style="space_platform_progressbar_fuel"} + bar.style.horizontally_stretchable = true + + container.add{ type="label", name="cargo_capacity", caption={"space-exploration.label_cargo", ""}} + bar = container.add{ type="progressbar", name="cargo_capacity_progress", size = 300, value=0, style="space_platform_progressbar_cargo"} + bar.style.horizontally_stretchable = true + + container.add{ type="label", name="trigger-label", caption={"space-exploration.launch_trigger"}} + + local list, selected_index = dropdown_from_preset(Launchpad.trigger_options, struct.launch_trigger) + local trigger_dropdown = container.add{ type="drop-down", name="trigger", items=list, selected_index = selected_index} + trigger_dropdown.style.horizontally_stretchable = true + + container.add{ type="label", name="destination-label", caption={"space-exploration.label_destination", ""}} + container.add{type="checkbox", name="list-zones-alphabetical", caption="List destinations alphabetically", state=playerdata.zones_alphabetical and true or false} + + local filter_container = container.add{ type="flow", name="filter_flow", direction="horizontal"} + local filter_field = filter_container.add{ type="textfield", name="filter_list"} + filter_field.style.width = 275 + local filter_button = filter_container.add{ type = "sprite-button", name="clear_filter", sprite="utility/search_icon", tooltip={"space-exploration.clear-filter"},} + filter_button.style.left_margin = 5 + filter_button.style.width = 28 + filter_button.style.height = 28 + + local destination_zone = struct.destination.zone + local list, selected_index, values = Zone.dropdown_list_zone_destinations(struct.force_name, destination_zone, playerdata.zones_alphabetical, nil, + {list = {"space-exploration.any_landing_pad_with_name"}, value = {type = "any"}} -- wildcard + ) + if selected_index == 1 then selected_index = 2 end + local zones_dropdown = container.add{ type="drop-down", name="launchpad-list-zones", items=list, selected_index=selected_index or 2} + zones_dropdown.style.horizontally_stretchable = true + player_set_dropdown_values(player, "launchpad-list-zones", values) + + container.add{ type="label", name="destination-location-label", caption={"space-exploration.label_destination_position", ""}} + local destination_pad_name = struct.destination.landing_pad_name + local list, selected_index, values, landingpads_dropdown + if destination_zone then + list, selected_index, values = Landingpad.dropdown_list_zone_landing_pad_names(struct.force_name, destination_zone, destination_pad_name) + landingpads_dropdown = container.add{ type="drop-down", name="launchpad-list-landing-pad-names", items=list, selected_index=selected_index} + player_set_dropdown_values(player, "launchpad-list-landing-pad-names", values) + else + list, selected_index, values = Landingpad.dropdown_list_force_landing_pad_names(struct.force_name, destination_pad_name) + landingpads_dropdown = container.add{ type="drop-down", name="launchpad-list-landing-pad-names", items=list, selected_index=selected_index} + player_set_dropdown_values(player, "launchpad-list-landing-pad-names", values) + end + landingpads_dropdown.style.horizontally_stretchable = true + + container.add{ type="label", name="cargo_loss", caption={"space-exploration.label_cargo_safety", ""}} + container.add{ type="label", name="survivability_loss", caption={"space-exploration.label_landing_chance", ""}} + + container.add{ type="label", name="status", caption={"space-exploration.label_status", ""}} + + LaunchpadGUI.gui_update(player) +end + +function LaunchpadGUI.gui_update(player) + local root = player.gui.relative[LaunchpadGUI.name_rocket_launch_pad_gui_root] + if root then + local struct = Launchpad.from_unit_number( + root and root.tags and root.tags.unit_number) + if struct then + Launchpad.prep(struct) + + local inv = struct.container.get_inventory(defines.inventory.chest) + local inv_used = count_inventory_slots_used(inv) + struct.crew_capsules = struct.crew_capsules or 0 + struct.rocket_sections = struct.rocket_sections or 0 + + if root["crew_capsules"] then + root["crew_capsules"].caption={"space-exploration.label_space_capsule", {"space-exploration.simple-a-b-divide", struct.crew_capsules, Launchpad.crew_capsules_per_rocket}} + root["crew_capsules_progress"].value = struct.crew_capsules / Launchpad.crew_capsules_per_rocket + end + + root["rocket_sections"].caption={"space-exploration.label_cargo_rocket_sections", {"space-exploration.simple-a-b-divide", struct.rocket_sections, Launchpad.rocket_sections_per_rocket}} + root["rocket_sections_progress"].value = struct.rocket_sections / Launchpad.rocket_sections_per_rocket + + if struct.required_fuel then + root["fuel_capacity"].caption={"space-exploration.label_liquid_rocket_fuel", {"space-exploration.simple-a-b-divide", + Util.format_fuel(math.min(struct.total_fuel, struct.required_fuel)), + Util.format_fuel(struct.required_fuel)}} + root["fuel_capacity_progress"].value=math.min(struct.total_fuel, struct.required_fuel) / (struct.required_fuel) + else + root["fuel_capacity"].caption={"space-exploration.label_liquid_rocket_fuel", {"space-exploration.simple-a-b-divide", + Util.format_fuel(math.floor(struct.total_fuel)), + "?"}} + root["fuel_capacity_progress"].value=0 + end + + root["cargo_capacity"].caption={"space-exploration.label_cargo", {"space-exploration.simple-a-b-divide", math.min(inv_used, Launchpad.rocket_capacity), Launchpad.rocket_capacity}} + root["cargo_capacity_progress"].value=math.min(inv_used, Launchpad.rocket_capacity) / Launchpad.rocket_capacity + + local message = "" + local ready = "disabled" + if not (global.forces[player.force.name] and global.forces[player.force.name].satellites_launched > 0) then + message = {"space-exploration.launchpad_requires_satellite"} + elseif struct.launch_status > -1 then + message = {"space-exploration.launchpad_launching_rocket"} + elseif struct.rocket_sections < Launchpad.rocket_sections_per_rocket then + message = {"space-exploration.launchpad_constructing_rocket"} + elseif struct.crew_capsules < Launchpad.crew_capsules_per_rocket then + message = {"space-exploration.launchpad_space_capsule_required"} + elseif not struct.required_fuel then + message = {"space-exploration.launchpad_invalid_destination"} + elseif struct.total_fuel < struct.required_fuel then + message = {"space-exploration.launchpad_loading_fuel"} + elseif inv_used < Launchpad.rocket_capacity then + message = {"space-exploration.launchpad_ready_loading_cargo"} + ready = "ready" + else + message = {"space-exploration.launchpad_ready_cargo_full"} + ready = "ready" + end + if ready == "ready" and struct.destination.landing_pad_name then + if struct.destination.zone then + local landing_pads = Landingpad.get_zone_landing_pads_availability(struct.force_name, struct.destination.zone, struct.destination.landing_pad_name) + if #landing_pads.empty_landing_pads == 0 then + message = {"space-exploration.launchpad_waiting_for_empty_pad"} + ready = "delayed" + if #landing_pads.filled_landing_pads == 0 then + message = {"space-exploration.launchpad_waiting_for_pad"} + ready = "disabled" + if #landing_pads.blocked_landing_pads == 0 then + message = {"space-exploration.launchpad_no_pad_matches"} + end + end + end + else + local landing_pads = Landingpad.get_force_landing_pads_availability(struct.force_name, struct.destination.landing_pad_name) + if #landing_pads.empty_landing_pads == 0 then + message = {"space-exploration.launchpad_waiting_for_empty_pad"} + ready = "delayed" + if #landing_pads.filled_landing_pads == 0 then + message = {"space-exploration.launchpad_waiting_for_pad"} + ready = "disabled" + if #landing_pads.blocked_landing_pads == 0 then + message = {"space-exploration.launchpad_no_pad_matches"} + end + end + end + end + end + + local delta_v = Zone.get_travel_delta_v(struct.zone, struct.destination.zone) + if root.cargo_loss then + local cargo_loss = Launchpad.get_cargo_loss(game.forces[struct.force_name], struct.destination.zone, delta_v) + if struct.destination and struct.destination.landing_pad_name then + cargo_loss = cargo_loss / 2 + end + if struct.destination.zone then + root.cargo_loss.caption = {"space-exploration.label_cargo_safety", string.format("%.2f", (1-cargo_loss)*100).."%"} + else + root.cargo_loss.caption = {"space-exploration.label_cargo_safety", {"space-exploration.variable"}} + end + root.cargo_loss.tooltip = {"space-exploration.cargo_loss_tooltip"} + end + if root.survivability_loss then + local survivability_loss = Launchpad.get_survivability_loss(game.forces[struct.force_name], struct.destination.zone, delta_v) + if struct.destination and struct.destination.landing_pad_name then + if struct.destination.zone then + root.survivability_loss.caption = {"space-exploration.label_landing_chance", string.format("%.2f", (1-survivability_loss)*100).."%"} + else + root.survivability_loss.caption = {"space-exploration.label_landing_chance", {"space-exploration.variable"}} + end + root.survivability_loss.tooltip = {"space-exploration.survivability_loss_tooltip"} + else + root.survivability_loss.caption = {"space-exploration.label_landing_chance", {"space-exploration.requires_landing_pad"}} + root.survivability_loss.tooltip = {"space-exploration.survivability_loss_no_pad_tooltip"} + end + end + + root["status"].caption={"space-exploration.label_status", message} + + if ready == "ready" or ready == "delayed" then + if root["launch-disabled"] then root["launch-disabled"].destroy() end + if not root["launch"] then + local launch_button + if ready == "delayed" then + launch_button = root.add{ type="button", name="launch", caption={"space-exploration.launchpad_launch_delayed"}, style="confirm_button", + tooltip={"space-exploration.launchpad_launch_delayed_tooltip"}} + else + launch_button = root.add{ type="button", name="launch", caption={"space-exploration.button-launch"}, style="confirm_button"} + end + launch_button.style.top_margin = 10 + launch_button.style.horizontally_stretchable = true + launch_button.style.horizontal_align = "left" + end + else + if root["launch"] then root["launch"].destroy() end + if not root["launch-disabled"] then + local launch_button = root.add{ type="button", name="launch-disabled", caption={"space-exploration.button-launch-disabled"}, style="red_confirm_button"} + launch_button.style.top_margin = 10 + launch_button.style.horizontally_stretchable = true + launch_button.style.horizontal_align = "left" + end + local launch_button = root["launch-disabled"] + if struct.launch_status > -1 then + launch_button.caption = {"space-exploration.launchpad_launch_in_progress"} + else + launch_button.caption = {"space-exploration.button-launch-disabled"} + end + end + + end + end +end + +function LaunchpadGUI.on_gui_click(event) + if not (event.element and event.element.valid) then return end + local element = event.element + local player = game.players[event.player_index] + local root = gui_element_or_parent(element, LaunchpadGUI.name_rocket_launch_pad_gui_root) + if not root then return end + local struct = Launchpad.from_unit_number( + root and root.tags and root.tags.unit_number) + if not struct then return end + if element.name == "trigger" then + + struct.launch_trigger = selected_name_from_dropdown_preset(element, Launchpad.trigger_options) or "none" + + elseif element.name == "launchpad-list-zones" then + + local value = player_get_dropdown_value(player, element.name, element.selected_index) + if type(value) == "table" then + if value.type == "zone" then + local zone_index = value.index + local zone = Zone.from_zone_index(zone_index) + if zone then + struct.destination.zone = zone + Log.trace("set destination to location: " .. zone.name ) + end + local pad_names = element.parent["launchpad-list-landing-pad-names"] + local destination_pad_name = struct.destination.landing_pad_name + local list, selected_index, values = Landingpad.dropdown_list_zone_landing_pad_names(struct.force_name, struct.destination.zone, destination_pad_name) + pad_names.items = list + pad_names.selected_index = selected_index + player_set_dropdown_values(player, "launchpad-list-landing-pad-names", values) + elseif value.type == "spaceship" then + local spaceship_index = value.index + local spaceship = Spaceship.from_index(spaceship_index) + if spaceship then + struct.destination.zone = spaceship + Log.trace("set destination to spaceship : " .. spaceship.name ) + end + local pad_names = element.parent["launchpad-list-landing-pad-names"] + local destination_pad_name = struct.destination.landing_pad_name + local list, selected_index, values = Landingpad.dropdown_list_zone_landing_pad_names(struct.force_name, struct.destination.zone, destination_pad_name) + pad_names.items = list + pad_names.selected_index = selected_index + player_set_dropdown_values(player, "launchpad-list-landing-pad-names", values) + elseif value.type == "any" then + struct.destination.zone = nil + Log.trace("set destination to location: any") + local pad_names = element.parent["launchpad-list-landing-pad-names"] + local destination_pad_name = struct.destination.landing_pad_name + local list, selected_index, values = Landingpad.dropdown_list_force_landing_pad_names(struct.force_name, destination_pad_name) + pad_names.items = list + pad_names.selected_index = selected_index + player_set_dropdown_values(player, "launchpad-list-landing-pad-names", values) + end + LaunchpadGUI.gui_update(player) + else + LaunchpadGUI.gui_close(player) + Log.trace("Error: Non-table value ") + end + + elseif element.name == "launchpad-list-landing-pad-names" then + + local value = player_get_dropdown_value(player, element.name, element.selected_index) + local landing_pad_name = value + if landing_pad_name and landing_pad_name ~= "" then + struct.destination.landing_pad_name = landing_pad_name + Log.trace("set destination to landing_pad " .. landing_pad_name ) + else + struct.destination.landing_pad_name = nil + end + + elseif element.name == "launch" then + Launchpad.launch(struct, false, true) + elseif element.name == "clear_filter" then + element.parent.filter_list.text = "" + LaunchpadGUI.gui_update_destinations_list(player) + elseif element.name == "goto_informatron_cargo_rockets" then + remote.call("informatron", "informatron_open_to_page", { + player_index = event.player_index, + interface = "space-exploration", + page_name = "cargo_rockets" + }) + end +end +Event.addListener(defines.events.on_gui_click, LaunchpadGUI.on_gui_click) +Event.addListener(defines.events.on_gui_selection_state_changed, LaunchpadGUI.on_gui_click) + +function LaunchpadGUI.gui_update_destinations_list(player) + local playerdata = get_make_playerdata(player) + local root = player.gui.relative[LaunchpadGUI.name_rocket_launch_pad_gui_root] + if root then + local struct = Launchpad.from_unit_number( + root and root.tags and root.tags.unit_number) + if not struct then return end + + local filter = nil + if root.filter_flow and root.filter_flow.filter_list then + filter = string.trim(root.filter_flow.filter_list.text) + if filter == "" then + filter = nil + end + end + + -- update the list + local destination_zone = struct.destination and struct.destination.zone + local list, selected_index, values = Zone.dropdown_list_zone_destinations( struct.force_name, destination_zone, playerdata.zones_alphabetical, filter, + {list = {"space-exploration.any_landing_pad_with_name"}, value = {type = "any"}} -- wildcard + ) + if selected_index == 1 then selected_index = 2 end + root["launchpad-list-zones"].items = list + root["launchpad-list-zones"].selected_index = selected_index or 2 + player_set_dropdown_values(player, "launchpad-list-zones", values) + + end +end + +function LaunchpadGUI.on_gui_checked_state_changed(event) + if not (event.element and event.element.valid) then return end + local element = event.element + local player = game.players[event.player_index] + local root = gui_element_or_parent(element, LaunchpadGUI.name_rocket_launch_pad_gui_root) + if not root then return end + local struct = Launchpad.from_unit_number( + root and root.tags and root.tags.unit_number) + if not struct then return end + if element.name == "list-zones-alphabetical" then + local playerdata = get_make_playerdata(player) + playerdata.zones_alphabetical = element.state + LaunchpadGUI.gui_update_destinations_list(player) + end +end +Event.addListener(defines.events.on_gui_checked_state_changed, LaunchpadGUI.on_gui_checked_state_changed) + +function LaunchpadGUI.on_gui_text_changed(event) + if not (event.element and event.element.valid) then return end + local element = event.element + local player = game.players[event.player_index] + local root = gui_element_or_parent(element, LaunchpadGUI.name_rocket_launch_pad_gui_root) + if root then -- remote view + if element.name == "filter_list" then + LaunchpadGUI.gui_update_destinations_list(player) + end + end +end +Event.addListener(defines.events.on_gui_text_changed, LaunchpadGUI.on_gui_text_changed) + +--- Close the launchpad gui for a player +---@param player any +function LaunchpadGUI.gui_close (player) + if player.gui.relative[LaunchpadGUI.name_rocket_launch_pad_gui_root] then + player.gui.relative[LaunchpadGUI.name_rocket_launch_pad_gui_root].destroy() + end +end + +--- Respond to the main entity GUI being closed by destroying the relative GUI +---@param event any +function LaunchpadGUI.on_gui_closed(event) + local player = game.players[event.player_index] + if player and event.entity and event.entity.name == Launchpad.name_rocket_launch_pad then + LaunchpadGUI.gui_close(player) + end +end +Event.addListener(defines.events.on_gui_closed, LaunchpadGUI.on_gui_closed) + +--- Opens the launchpad gui when a launchpad is clicked +--- Closes the launchpad gui when another gui is opened +---@param event any +function LaunchpadGUI.on_gui_opened(event) + local player = game.players[event.player_index] + if event.entity and event.entity.valid and event.entity.name == Launchpad.name_rocket_launch_pad then + LaunchpadGUI.gui_open(player, Launchpad.from_entity(event.entity)) + else + LaunchpadGUI.gui_close(player) + end +end +Event.addListener(defines.events.on_gui_opened, LaunchpadGUI.on_gui_opened) + +return LaunchpadGUI diff --git a/space-exploration_0.5.80/space-exploration/scripts/launchpad.lua b/space-exploration_0.5.80/space-exploration/scripts/launchpad.lua new file mode 100644 index 0000000..1fede0f --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/launchpad.lua @@ -0,0 +1,1589 @@ +local Launchpad = {} +-- launchpad, cargo rockeet, and rocket landing / crashing sequences + +--custon event +Launchpad.on_cargo_rocket_launched_event = script.generate_event_name() + +-- constants +Launchpad.name_rocket_launch_pad = mod_prefix.."rocket-launch-pad" +Launchpad.name_rocket_launch_pad_section_input = mod_prefix.."rocket-launch-pad-_-section-input" +Launchpad.name_rocket_launch_pad_tank = mod_prefix.."rocket-launch-pad-tank" +Launchpad.name_rocket_launch_pad_combinator = mod_prefix.."rocket-launch-pad-combinator" +Launchpad.name_rocket_launch_pad_silo = mod_prefix.."rocket-launch-pad-silo" +Launchpad.name_rocket_launch_pad_silo_dummy = mod_prefix.."rocket-launch-pad-silo-dummy-ingredient-item" +Launchpad.name_rocket_launch_pad_seat = mod_prefix.."rocket-launch-pad-_-seat" +Launchpad.name_rocket_section = mod_prefix.."cargo-rocket-section" + +Launchpad.name_cargo_rocket = mod_prefix.."cargo-rocket" +Launchpad.name_cargo_pod = mod_prefix.."cargo-rocket-cargo-pod" + +Launchpad.name_tech_rocket_cargo_safety = mod_prefix.."rocket-cargo-safety" +Launchpad.name_tech_rocket_reusability = mod_prefix.."rocket-reusability" +Launchpad.name_tech_rocket_survivability = mod_prefix.."rocket-survivability" + +Launchpad.rocket_capacity = 500 +Launchpad.fuel_per_delta_v = 8 -- maybe this should be an energy value? +Launchpad.rocket_sections_per_rocket = 100 +Launchpad.crew_capsules_per_rocket = 1 +Launchpad.signal_for_launch = {type = "virtual", name = "signal-green"} +Launchpad.signal_for_rocket_complete = {type = "virtual", name = mod_prefix.."cargo-rocket"} + +Launchpad.trigger_options = { + { name = "none", display = {"space-exploration.trigger-none"}}, + { name = "fuel-full", display = {"space-exploration.trigger-fuel-full"}}, + { name = "cargo-full", display = {"space-exploration.trigger-cargo-full"}}, + { name = "fuel-full-signal", display = {"space-exploration.trigger-fuel-full-signal"}}, + { name = "cargo-full-signal", display = {"space-exploration.trigger-cargo-full-signal"}}, + { name = "cargo-full-or-signal", display = {"space-exploration.trigger-cargo-full-or-signal"}}, +} + +Launchpad.time_takeoff = 440 -- the delay before the rocket gets going +Launchpad.time_takeoff_finish_ascent = 1100 --1164 -- just before the rocket launch event would fire + +Launchpad.time_landing_capsule_touchdown = 6 * 60 -- when the capsule lands +Launchpad.time_landing_cargopod_first = 3 * 60 -- when the first cargopod lands +Launchpad.time_landing_cargopod_last = 5 * 60 -- when the last cargopod lands +Launchpad.time_landing_debris_first = 2 * 60 -- when the first debris lands +Launchpad.time_landing_debris_last = 7 * 60 -- when the last debris lands +Launchpad.landing_start_altitude = 128 + +Launchpad.safety_delta_v_base = 1000 +Launchpad.safety_delta_v_factor = 100000 + +Launchpad.names_cargo_fragment = { -- these are the base names, actual names are "se-falling-" + "cargo-fragment-a", + "cargo-fragment-b", + "cargo-fragment-c", + "cargo-fragment-d", +} + +Launchpad.rocket_fragments_large = 4 +Launchpad.names_rocket_fragments_large = { + "rocket-fragment-big-d", + "rocket-fragment-big-a", + "rocket-fragment-big-b", + "rocket-fragment-big-c" +} +Launchpad.rocket_fragments_medium = 6 +Launchpad.names_rocket_fragments_medium = { + "rocket-fragment-medium-a", + "rocket-fragment-medium-b", + "rocket-fragment-medium-c" +} +Launchpad.rocket_fragments_small = 20 +Launchpad.names_rocket_fragments_small = { + "rocket-fragment-small-a", + "rocket-fragment-small-b", + "rocket-fragment-small-c", + "rocket-fragment-small-d", + "rocket-fragment-small-e", + "rocket-fragment-small-f", + "rocket-fragment-small-g", + "rocket-fragment-small-h", + "rocket-fragment-small-i", + "rocket-fragment-small-j" +} +Launchpad.rocket_fragments_tiny = 20 +Launchpad.names_rocket_fragments_tiny = { + "rocket-fragment-tiny-a", + "rocket-fragment-tiny-b", + "rocket-fragment-tiny-c", + "rocket-fragment-tiny-d", + "rocket-fragment-tiny-e", + "rocket-fragment-tiny-f" +} + +function Launchpad.get_force_cargo_loss_modifier(force) + local researched_levels = 0 + local i = 1 + local current_level = force.technologies[Launchpad.name_tech_rocket_cargo_safety.."-"..i] + while current_level and (current_level.researched or current_level.level > i) do + local more_levels = (current_level.level or i) - i + i = i + 1 + more_levels + researched_levels = researched_levels + (1 + more_levels) + current_level = force.technologies[Launchpad.name_tech_rocket_cargo_safety.."-"..i] + end + return 0.9 ^ researched_levels +end + +function Launchpad.get_cargo_loss(force, target_zone, delta_v) -- percentage of cargo lost + delta_v = (delta_v or Launchpad.safety_delta_v_factor) + Launchpad.safety_delta_v_base -- 50% + local loss = delta_v/(delta_v+Launchpad.safety_delta_v_factor) + --local loss = 0.5 * global.forces[force.name].cargo_rockets_launched / (global.forces[force.name].cargo_rockets_launched + 500) + if target_zone then + if target_zone.type == "anomaly" then + loss = 1 + elseif target_zone.type == "asteroid-field" then + loss = loss + (1 - loss) * 0.5 + elseif target_zone.type == "asteroid-belt" then + loss = loss + (1 - loss) * 0.1 + end + end + return loss *Launchpad.get_force_cargo_loss_modifier(force) +end + +function Launchpad.get_reusability(force) -- percentage of parts not recoverable (all at start) + local recovery = 0.2 + local i = 1 + local current_level = force.technologies[Launchpad.name_tech_rocket_reusability.."-"..i] + while current_level and (current_level.researched or current_level.level > i) do + local more_levels = (current_level.researched and current_level.level or current_level.level-1) - i + i = i + 1 + more_levels + recovery = recovery + 0.04 * (1 + more_levels) + current_level = force.technologies[Launchpad.name_tech_rocket_reusability.."-"..i] + end + return recovery +end + +function Launchpad.get_force_survivability_loss_modifier(force) -- chance to fail to land on rocket launch pad + local multiplier = 1 + local i = 1 + while force.technologies[Launchpad.name_tech_rocket_survivability.."-"..i] + and force.technologies[Launchpad.name_tech_rocket_survivability.."-"..i].researched do + i = i + 1 + multiplier = multiplier * 0.9 + end + if force.technologies[Launchpad.name_tech_rocket_survivability.."-"..i] then + local tech = force.technologies[Launchpad.name_tech_rocket_survivability.."-"..i] + if tech.prototype.max_level > 10 then -- infinite + for j = i, tech.level do + multiplier = multiplier * 0.9 + end + end + end + return multiplier +end + +function Launchpad.get_survivability_loss(force, target_zone, delta_v) -- chance to fail to land on rocket launch pad + delta_v = (delta_v or Launchpad.safety_delta_v_factor) + Launchpad.safety_delta_v_base -- 50% + local loss = delta_v/(delta_v+Launchpad.safety_delta_v_factor) + --local loss = 0.5 * global.forces[force.name].cargo_rockets_launched / (global.forces[force.name].cargo_rockets_launched + 500) + if target_zone then + if target_zone.type == "anomaly" then + loss = loss + (1 - loss) * 0.5 + elseif target_zone.type == "asteroid-field" then + loss = loss + (1 - loss) * 0.1 + elseif target_zone.type == "asteroid-belt" then + loss = loss + (1 - loss) * 0.05 + end + end + return loss * Launchpad.get_force_survivability_loss_modifier(force) +end + +---@class Launchpad All data necessary to maintain the state of a launchpad + +--- Gets the Launchpad for this unit_number +---@param unit_number number +function Launchpad.from_unit_number (unit_number) + if not unit_number then Log.trace("Launchpad.from_unit_number: invalid unit_number: nil") return end + unit_number = tonumber(unit_number) + -- NOTE: only supports container as the entity + if global.rocket_launch_pads[unit_number] then + return global.rocket_launch_pads[unit_number] + else + Log.trace("Launchpad.from_unit_number: invalid unit_number: " .. unit_number) + end +end + +--- Gets the Launchpad for this entity +---@param entity any +function Launchpad.from_entity (entity) + if not(entity and entity.valid) then + Log.trace("Launchpad.from_entity: invalid entity") + return + end + -- NOTE: only supports container as the entity + return Launchpad.from_unit_number(entity.unit_number) +end + +--- Computes the cost to launch a rocket +---@param origin Zone launch zone +---@param destination Zone destination zone +function Launchpad.get_fuel_cost(origin, destination) + if origin and destination then + return Launchpad.fuel_per_delta_v * (Zone.get_launch_delta_v(origin) + Zone.get_travel_delta_v(origin, destination)) + end +end + +--[[ +Input the destination as either: + { type = "zone", zone_index = name } + { type = "landing-pad", zone_index = name, landing_pad_name = name } +Output the destination as: + { type = "zone", zone_index = name, zone = Zone, position = {x=#,y=#} } + { type = "landing-pad", landing_pad_name = name, landing_pad = rocket_landing_pad} +]]-- +function Launchpad.lock_destination (struct, allow_non_empty) + -- force launch can go to non-empty landings + + if struct.destination then + if struct.destination.zone then + -- can't have people changing destination mid-launch + local force_name = struct.force_name + -- destination to locked destination + local locked_destination = { -- don't use deepcopy be + zone = struct.destination.zone, + landing_pad_name = struct.destination.landing_pad_name, + } + + local zone = locked_destination.zone + if not zone then return false end + + if locked_destination.landing_pad_name then + + local landing_pads = Landingpad.get_zone_landing_pads_availability(force_name, zone, locked_destination.landing_pad_name) + + if #landing_pads.empty_landing_pads > 0 then + local landing_pad = landing_pads.empty_landing_pads[math.random(#landing_pads.empty_landing_pads)] + locked_destination.landing_pad = landing_pad + Zone.get_make_surface(zone) + return locked_destination + elseif allow_non_empty and #landing_pads.filled_landing_pads > 0 then + local landing_pad = landing_pads.filled_landing_pads[math.random(#landing_pads.filled_landing_pads)] + locked_destination.landing_pad = landing_pad + Zone.get_make_surface(zone) + return locked_destination + end + + else -- not landing pad name + + Zone.get_make_surface(zone) + locked_destination.position = Zone.find_zone_landing_position(zone) + + --this is the first cargo rocket to space, go to the space platform satellite + if (zone.type == "orbit" and zone.parent.name == "Nauvis") then + if (global.forces[force_name].cargo_rockets_launched or 0) == 0 and global.forces[force_name].nauvis_satellite then + local satellite_blueprint = Ruin.ruins["satellite"] + locked_destination.position = { + x = global.forces[force_name].nauvis_satellite.x + + (satellite_blueprint.landing_offset.x or satellite_blueprint.landing_offset[1]) + - (satellite_blueprint.center.x or satellite_blueprint.center[1]), + y = global.forces[force_name].nauvis_satellite.y + + (satellite_blueprint.landing_offset.y or satellite_blueprint.landing_offset[2]) + - (satellite_blueprint.center.y or satellite_blueprint.center[2]) + } + end + end + return locked_destination + end + elseif struct.destination.landing_pad_name then + -- can't have people changing destination mid-launch + local force_name = struct.force_name + + local locked_destination = { -- don't use deepcopy be + landing_pad_name = struct.destination.landing_pad_name, + } + + local landing_pads = Landingpad.get_force_landing_pads_availability(force_name, locked_destination.landing_pad_name) + + if #landing_pads.empty_landing_pads > 0 then + local landing_pad = landing_pads.empty_landing_pads[math.random(#landing_pads.empty_landing_pads)] + locked_destination.zone = landing_pad.zone + locked_destination.landing_pad = landing_pad + return locked_destination + elseif allow_non_empty and #landing_pads.filled_landing_pads > 0 then + local landing_pad = landing_pads.filled_landing_pads[math.random(#landing_pads.filled_landing_pads)] + locked_destination.zone = landing_pad.zone + locked_destination.landing_pad = landing_pad + return locked_destination + end + + end + end + return false +end + +function Launchpad.add_section_input(struct) + -- spawn section input + local section_input_position = {struct.container.position.x, struct.container.position.y} + struct.section_input = util.find_entity_or_revive_ghost(struct.container.surface, Launchpad.name_rocket_launch_pad_section_input, section_input_position) + if not struct.section_input then + struct.section_input = struct.container.surface.create_entity{ + name = Launchpad.name_rocket_launch_pad_section_input, + force = struct.container.force, + position = section_input_position + } + end + local inv = struct.section_input.get_inventory(defines.inventory.car_trunk) + inv.set_filter(1, Launchpad.name_rocket_section) + inv.set_filter(2, Capsule.name_space_capsule) +end + +function Launchpad.update_combinator(struct, main_inv) + if struct.combinator then + local comb = struct.combinator.get_or_create_control_behavior() + -- comb.set_signal(1, {signal={type="fluid", name=name_fluid_rocket_fuel}, count=struct.total_fuel}) + comb.set_signal(1, {signal={type="fluid", name=name_fluid_rocket_fuel}, count=struct.lua_fuel}) + comb.set_signal(2, {signal={type="item", name=Launchpad.name_rocket_section}, count=struct.rocket_sections}) + comb.set_signal(3, {signal={type="item", name=Capsule.name_space_capsule}, count=struct.crew_capsules}) + if struct.rocket_sections >= Launchpad.rocket_sections_per_rocket and struct.crew_capsules >= Launchpad.crew_capsules_per_rocket then + comb.set_signal(4, {signal=Launchpad.signal_for_rocket_complete, count=1}) + else + comb.set_signal(4, {signal=Launchpad.signal_for_rocket_complete, count=0}) + end + + local slots_free = main_inv.count_empty_stacks() + + comb.set_signal(5, {signal={type = "virtual", name = "signal-E"}, count= slots_free}) + comb.set_signal(6, {signal={type = "virtual", name = "signal-F"}, count= #main_inv - slots_free}) + comb.set_signal(7, {signal={type = "virtual", name = "signal-L"}, count= struct.required_fuel or 0}) + end +end + +function Launchpad.prep(struct) + + --local profiler = game.create_profiler() + + if not (struct.container and struct.container.valid) then + return Launchpad.destroy(struct) + end + + struct.required_fuel = nil -- invalid + if struct.destination then + local origin_zone = struct.zone + if struct.destination.landing_pad_name and not struct.destination.zone then + + if global.forces[struct.force_name] + and global.forces[struct.force_name].rocket_landing_pad_names + and global.forces[struct.force_name].rocket_landing_pad_names[struct.destination.landing_pad_name] then + local required_fuel_max = 0 + local landing_pads_list = global.forces[struct.force_name].rocket_landing_pad_names[struct.destination.landing_pad_name] + for _, landing_pad in pairs(landing_pads_list) do + required_fuel_max = math.max(required_fuel_max, Launchpad.get_fuel_cost(origin_zone, landing_pad.zone)) + end + if required_fuel_max > 0 then + struct.required_fuel = required_fuel_max + end + end + else + local destination_zone = struct.destination.zone + struct.required_fuel = Launchpad.get_fuel_cost(origin_zone, destination_zone); -- self-validates + end + else + struct.required_fuel = nil -- invalid + end + + -- balance tank fuel and lua fuel + -- fuel tank % should match total % + local fluidbox + local effective_required_fuel = (struct.required_fuel or 0) + 1000 + if not (struct.tank and struct.tank.valid) then + struct.tank = struct.container.surface.create_entity{ + name = Launchpad.name_rocket_launch_pad_tank, + force = struct.container.force, + position = {struct.container.position.x, struct.container.position.y + 1}} -- 1 tile down to be in front of silo + struct.tank.fluidbox.set_filter(1, {name = name_fluid_rocket_fuel, force = true}) + struct.container.connect_neighbour({wire = defines.wire_type.red, target_entity = struct.tank}) + struct.container.connect_neighbour({wire = defines.wire_type.green, target_entity = struct.tank}) + struct.tank.destructible = false + end + if struct.tank and #struct.tank.fluidbox > 0 then + fluidbox = struct.tank.fluidbox[1] or {name = name_fluid_rocket_fuel, amount = 0} + struct.total_fuel = (struct.lua_fuel or 0) + fluidbox.amount + if struct.total_fuel > 0 then + local percent_of_required = 1 -- overflow + percent_of_required = struct.total_fuel / effective_required_fuel -- leave 10% available to fill faster + if percent_of_required < 1 then + percent_of_required = percent_of_required * 0.5 + end + fluidbox.amount = math.min(struct.total_fuel, math.min(1, percent_of_required) * struct.tank.fluidbox.get_capacity(1)) + if fluidbox.amount < 1 then + fluidbox.amount = 1 + end + struct.lua_fuel = struct.total_fuel - fluidbox.amount + struct.tank.fluidbox[1] = fluidbox + end + end + + local main_inv = struct.container.get_inventory(defines.inventory.chest) + + struct.crew_capsules = struct.crew_capsules or 0 + struct.rocket_sections = struct.rocket_sections or 0 + + -- take from section input first + if (struct.crew_capsules or 0) < Launchpad.crew_capsules_per_rocket and struct.section_input and struct.section_input.valid then + local inv = struct.section_input.get_inventory(defines.inventory.car_trunk) + local items = inv.get_item_count(Capsule.name_space_capsule) + if items > 0 then + local take = 1 + inv.remove({name=Capsule.name_space_capsule, count=take}) + struct.crew_capsules = struct.crew_capsules + take + end + end + + -- otherwise take from main container + if (struct.crew_capsules or 0) < Launchpad.crew_capsules_per_rocket then + local items = main_inv.get_item_count(Capsule.name_space_capsule) + if items > 0 then + local take = math.min(items, Launchpad.crew_capsules_per_rocket - struct.crew_capsules) + main_inv.remove({name=Capsule.name_space_capsule, count=take}) + struct.crew_capsules = struct.crew_capsules + take + end + end + + -- take from section input first + if struct.rocket_sections < Launchpad.rocket_sections_per_rocket and struct.section_input and struct.section_input.valid then + local inv = struct.section_input.get_inventory(defines.inventory.car_trunk) + local items = inv.get_item_count(Launchpad.name_rocket_section) + if items > 0 then + local take = math.min(items, Launchpad.rocket_sections_per_rocket - struct.rocket_sections) + inv.remove({name=Launchpad.name_rocket_section, count=take}) + struct.rocket_sections = struct.rocket_sections + take + end + end + + -- otherwise take from main container + if struct.rocket_sections < Launchpad.rocket_sections_per_rocket then + local items = main_inv.get_item_count(Launchpad.name_rocket_section) + if items > 0 then + local take = math.min(items, Launchpad.rocket_sections_per_rocket - struct.rocket_sections) + main_inv.remove({name=Launchpad.name_rocket_section, count=take}) + struct.rocket_sections = struct.rocket_sections + take + end + end + + -- not enough parts, add a section input to collect parts + -- this will probably prevent input of other parts. + if struct.rocket_sections < Launchpad.rocket_sections_per_rocket + and not main_inv.can_insert{name = Launchpad.name_rocket_section, count = 1} then + if not(struct.section_input and struct.section_input.valid) then + Launchpad.add_section_input(struct) + end + else + Launchpad.destroy_sub(struct, "section_input") + end + + Launchpad.update_combinator(struct, main_inv) + + if struct.rocket_sections >= Launchpad.rocket_sections_per_rocket and struct.crew_capsules >= Launchpad.crew_capsules_per_rocket + and not struct.has_inserted_dummy then + local inserted = struct.silo.insert{name = Launchpad.name_rocket_launch_pad_silo_dummy, count = 1} + if inserted == 1 then + struct.has_inserted_dummy = true + end + end + + --game.print(profiler) + +end + +function Launchpad.launch(struct, skip_prep, allow_non_empty) + + if struct.launch_status > -1 then return end -- already launching + if skip_prep ~= true then + Launchpad.prep(struct) + end + + local destination = Launchpad.lock_destination(struct, allow_non_empty) + + if destination then + local current_zone = struct.zone + local destination_zone = destination.zone + struct.launching_to_destination = destination + + local required_fuel = Launchpad.get_fuel_cost(current_zone, destination_zone) + struct.required_fuel = required_fuel + + -- the destination is locked so let's go + if destination.landing_pad then + destination.position = Util.vectors_add(destination.landing_pad.container.position, {x = 0, y = 2}) + destination.landing_pad.inbound_rocket = true + end + + -- set the contents + local main_inv = struct.container.get_inventory(defines.inventory.chest) + local main_contents = main_inv.get_contents() + struct.launched_contents = main_contents + -- make a global temp inventory. + -- swap items to that inventory. + -- make sure to destroy later + struct.launched_inventory = game.create_inventory(#main_inv) + Util.swap_inventories(main_inv, struct.launched_inventory) + main_inv.clear() -- chould already be empty anyway. + Log.trace("make launched_inventory with size" .. #struct.launched_inventory) + + -- consume the fuel + local lua_fuel_consumed = math.min(struct.lua_fuel, required_fuel) + struct.lua_fuel = struct.lua_fuel - lua_fuel_consumed + if lua_fuel_consumed < required_fuel then + local fluidbox = struct.tank.fluidbox[1] + local tank_fuel_consumed = math.min(required_fuel - lua_fuel_consumed, fluidbox.amount) + fluidbox.amount = math.max(1, fluidbox.amount - tank_fuel_consumed) + struct.tank.fluidbox[1] = fluidbox + struct.total_fuel = struct.lua_fuel + fluidbox.amount + end + if struct.tank and struct.tank.fluidbox and struct.tank.fluidbox[1] and struct.tank.fluidbox[1].name then + struct.container.force.fluid_production_statistics.on_flow(struct.tank.fluidbox[1].name, -required_fuel) + end + + -- consume rocket parts + struct.rocket_sections = struct.rocket_sections - Launchpad.rocket_sections_per_rocket +-- struct.container.force.item_production_statistics.on_flow(Launchpad.name_rocket_section, -Launchpad.rocket_sections_per_rocket) + + -- consume crew capsule + struct.crew_capsules = struct.crew_capsules - Launchpad.crew_capsules_per_rocket +-- struct.container.force.item_production_statistics.on_flow(Capsule.name_space_capsule, -Launchpad.crew_capsules_per_rocket) + + -- start charting the landing + if destination_zone.type ~= "spaceship" then + local range = Zone.discovery_scan_radius + struct.container.force.chart(Zone.get_make_surface(destination_zone), { + {destination.position.x - range, destination.position.y - range - Launchpad.landing_start_altitude}, + {destination.position.x + range, destination.position.y + range} + }) + end + -- set launch status + struct.launch_status = 1 + + script.raise_event(Launchpad.on_cargo_rocket_launched_event, {struct = struct}) + + Launchpad.update_combinator(struct, main_inv) + end +end + + +function Launchpad.tick(struct) + -- this should only be called once per 60 ticks during prep and every tick during launch + -- actually, launch should be handles seperatly. + -- make launches and capsule launches in to tick tasks + -- Launchpad.prep can be called every tick for gui updates + if not (struct.container and struct.container.valid) then + return Launchpad.destroy(struct) + end + + if struct.launch_status < 1 then + + Launchpad.prep(struct) + + -- if struct.required_fuel then the destination must be valid + if struct.required_fuel and struct.total_fuel >= struct.required_fuel + and struct.rocket_sections >= Launchpad.rocket_sections_per_rocket + and struct.crew_capsules >= Launchpad.crew_capsules_per_rocket then + -- can launch + -- TRIGGERS + + local destination = nil + if struct.launch_trigger == "fuel-full" then + -- we already know fuel is full so launch + Launchpad.launch(struct, true) + elseif struct.launch_trigger == "cargo-full" then + local main_inv = struct.container.get_inventory(defines.inventory.chest) + if main_inv then + if not main_inv.can_insert({name = Launchpad.name_rocket_section, count = 1}) then + -- cargo is full so try launch + Launchpad.launch(struct, true) + end + end + elseif struct.launch_trigger == "fuel-full-signal" then + if struct.container.get_circuit_network(defines.wire_type.red).get_signal(Launchpad.signal_for_launch) > 0 + or struct.container.get_circuit_network(defines.wire_type.green).get_signal(Launchpad.signal_for_launch) > 0 + then + Launchpad.launch(struct, true) + end + elseif struct.launch_trigger == "cargo-full-signal" then + local main_inv = struct.container.get_inventory(defines.inventory.chest) + if main_inv then + if not main_inv.can_insert({name = Launchpad.name_rocket_section, count = 1}) then + if struct.container.get_circuit_network(defines.wire_type.red).get_signal(Launchpad.signal_for_launch) > 0 + or struct.container.get_circuit_network(defines.wire_type.green).get_signal(Launchpad.signal_for_launch) > 0 + then + Launchpad.launch(struct, true) + end + end + end + elseif struct.launch_trigger == "cargo-full-or-signal" then + local main_inv = struct.container.get_inventory(defines.inventory.chest) + if main_inv then + if not main_inv.can_insert({name = Launchpad.name_rocket_section, count = 1}) then + -- cargo is full so try launch + Launchpad.launch(struct, true) + else + if struct.container.get_circuit_network(defines.wire_type.red).get_signal(Launchpad.signal_for_launch) > 0 + or struct.container.get_circuit_network(defines.wire_type.green).get_signal(Launchpad.signal_for_launch) > 0 + then + -- signal so try launch + Launchpad.launch(struct, true) + end + end + end + end + + end + elseif struct.launch_status == 1 then + -- the rocket should be ready + if struct.silo.launch_rocket() then + --Log.trace("launching") + struct.launch_status = 2 + struct.rocket_entity = struct.container.surface.find_entities_filtered{name=Launchpad.name_cargo_rocket, area=util.position_to_area(struct.container.position, 0.5)}[1] + -- the launch pad could get removed at this point and the rocket would need to keep going. + local tick_task = new_tick_task("launchpad-journey") + tick_task.struct = struct + tick_task.force_name = struct.force_name + tick_task.rocket_entity = struct.rocket_entity + tick_task.launch_timer = 0 + tick_task.launched_contents = struct.launched_contents + tick_task.launched_inventory = struct.launched_inventory + Log.trace("Move launched_inventory to tick task " .. #tick_task.launched_inventory) + struct.launched_inventory = nil + tick_task.launching_to_destination = struct.launching_to_destination + tick_task.delta_v = Zone.get_travel_delta_v(tick_task.struct.zone, tick_task.launching_to_destination.zone) + + local target_surface = Zone.get_make_surface(tick_task.launching_to_destination.zone) + target_surface.request_to_generate_chunks(Util.vectors_add(tick_task.launching_to_destination.position, {x = 0, y = Launchpad.landing_start_altitude}), + Launchpad.landing_start_altitude / 32 / 2) + -- start the launch animation + -- move the player seats over the rocket + -- follow rocket launch + -- if not landing_pad clear destination: remove biters + -- teleport over landing zone + -- if not landing_pad start descent / crash sequence + -- place landfill, place scaffold, place cargo Pods + -- place recoverable sections + -- destroy the seats to release the players + end + else + -- stays at struct.launch_status 2 until tick_task sets it back to -1 + end +end + + +function Launchpad.drop_rocket_fragment(zone, size, name, position, start_position_x_offset) + local target_surface = Zone.get_make_surface(zone) + local falling_time + if math.random() < 0.5 then -- biggest first + falling_time = Launchpad.time_landing_debris_first + + (size - math.random()) / 4 * (Launchpad.time_landing_debris_last - Launchpad.time_landing_debris_first) + else -- or just random + falling_time = Launchpad.time_landing_debris_first + math.random() * (Launchpad.time_landing_debris_last - Launchpad.time_landing_debris_first) + end + local landing_start_altitude = Launchpad.landing_start_altitude + if Zone.is_space(zone) then + landing_start_altitude = landing_start_altitude * 0.5 + end + local random_start_offset = {x = 8 * (math.random() - 0.5), y = 8 * (math.random() - 0.5)} + local start_position = Util.vectors_add(position, { + x = random_start_offset.x + start_position_x_offset, + y = random_start_offset.y - landing_start_altitude}) + local start_position_shadow = Util.vectors_add(position, { + x = random_start_offset.x + landing_start_altitude + start_position_x_offset, + y = random_start_offset.y}) + + local land_position = Util.vectors_add(position, { + x = random_start_offset.x + 32 * (math.random() - 0.5), + y = random_start_offset.y + 32 * (math.random() - 0.5)}) + + local flat_distance = Util.vectors_delta_length(start_position, land_position) + local flat_distance_shadow = Util.vectors_delta_length(start_position_shadow, land_position) + local speed = flat_distance / falling_time + local speed_shadow = flat_distance_shadow / falling_time + + if Zone.is_space(zone) then + target_surface.create_entity{ + name = mod_prefix .. "space-" ..name, + position = start_position, + target = land_position, + speed = speed, + --max_rage = flat_distance, + } + else + target_surface.create_entity{ + name = mod_prefix .. "falling-" ..name, + position = start_position, + target = land_position, + speed = speed, + max_rage = flat_distance, + } + target_surface.create_entity{ + name = mod_prefix .. "shadow-" ..name, + position = start_position_shadow, + target = land_position, + speed = speed_shadow, + max_rage = flat_distance_shadow, + } + end +end + +function Launchpad.tick_journey(tick_task) + -- from tick_task.type = "launchpad-journey" + if tick_task.launch_timer then + tick_task.launch_timer = tick_task.launch_timer + 1 + + local struct = tick_task.struct + if struct and struct.valid then + if tick_task.launch_timer <= Launchpad.time_takeoff then + -- collect passengers while rocket is low + tick_task.passengers = tick_task.passengers or {} -- characters not players + for _, seat in pairs(struct.seats) do + if seat.get_driver() then + table.insert(tick_task.passengers, seat.get_driver()) + if remote.interfaces["jetpack"] and remote.interfaces["jetpack"]["block_jetpack"] then + remote.call("jetpack", "block_jetpack", {character=seat.get_driver()}) + end + seat.set_driver(nil) + end + if seat.get_passenger() then + table.insert(tick_task.passengers, seat.get_passenger()) + if remote.interfaces["jetpack"] and remote.interfaces["jetpack"]["block_jetpack"] then + remote.call("jetpack", "block_jetpack", {character=seat.get_passenger()}) + end + seat.set_passenger(nil) + end + end + end + end + + if tick_task.rocket_entity and tick_task.rocket_entity.valid then + -- move passengers with the rocket + if tick_task.passengers then + for _, passenger in pairs(tick_task.passengers) do + if passenger and passenger.valid then + if remote.interfaces["jetpack"] and remote.interfaces["jetpack"]["block_jetpack"] then + remote.call("jetpack", "block_jetpack", {character=passenger}) + end + local target_position = { + x = tick_task.rocket_entity.position.x, + y = tick_task.rocket_entity.position.y - 2 - math.max(0, tick_task.launch_timer - Launchpad.time_takeoff) / 64} + passenger.teleport(target_position) + passenger.destructible = false + --passenger.teleport(Util.move_to(passenger.position, target_position, tick_task.launch_timer / 100) ) + end + end + end + + if tick_task.launch_timer >= Launchpad.time_takeoff_finish_ascent then + -- skip to next phase + tick_task.launch_timer = nil + end + + else + -- skip to next phase + tick_task.launch_timer = nil + end + + else + if not tick_task.land_timer then + tick_task.land_timer = 0 + -- setup next landing sequence + + if tick_task.rocket_entity and tick_task.rocket_entity.valid then + tick_task.rocket_entity.destroy() + tick_task.rocket_entity = nil + end + -- reset the landing pad + local struct = tick_task.struct + if struct and struct.valid then + struct.launched_contents = nil + if struct.launched_inventory and struct.launched_inventory.valid then + struct.launched_inventory.destroy() + struct.launched_inventory = nil + end + struct.launch_status = -1 + struct.launching_to_destination = nil + struct.has_inserted_dummy = nil + global.forces[tick_task.force_name].cargo_rockets_launched = (global.forces[tick_task.force_name].cargo_rockets_launched or 0) + 1 + end + + --game.print("Dev note: Show capsule landing sequence and discarded rocket part debris falling from the sky.") + + -- determine success rate + + -- for landing pad: + -- show capsule descent over the pad, then put capsule inside the pad and player outside. + -- show up to 10 cargo pods the fly past to the landing pad first. + -- failed cargo pods are added to crash debris. + -- crash debris based on recovery tech. + -- put some recovered parts in the landing pad based on recovery tech. + -- no fire from spilt fuel + + --for general location or guidance failure + -- show capsule descent at random locaiton then put player outside. + -- show up to 10 cargo pods the fly past to random locations + -- failed cargo pods are added to crash debris. + -- all rocket parts added to crash debris regardless of recovery tech. + -- add fire from spilt fuel + -- add some wider area explosive damage + + local is_landingpad = (tick_task.launching_to_destination.landing_pad and tick_task.launching_to_destination.landing_pad.container and tick_task.launching_to_destination.landing_pad.container.valid) + if is_landingpad then + local error_chance = Launchpad.get_survivability_loss(game.forces[tick_task.force_name], tick_task.launching_to_destination.zone, tick_task.delta_v) + if math.random() < error_chance then + -- off course + is_landingpad = false + local force = tick_task.launching_to_destination.landing_pad.container.force + force.item_production_statistics.on_flow(Launchpad.name_rocket_section, -Launchpad.rocket_sections_per_rocket) + tick_task.launching_to_destination.landing_pad.inbound_rocket = nil + tick_task.launching_to_destination.attempted_position = tick_task.launching_to_destination.landing_pad.container.position + tick_task.launching_to_destination.attempted_landing_pad = tick_task.launching_to_destination.landing_pad + tick_task.launching_to_destination.landing_pad = nil + local new_pos = tick_task.launching_to_destination.position + new_pos.x = new_pos.x + (math.random() - 0.5) * 150 + new_pos.y = new_pos.y + (math.random() - 0.5) * 128 + tick_task.launching_to_destination.position = Zone.find_zone_landing_position(tick_task.launching_to_destination.zone, new_pos) + force.print({"space-exploration.rocket_survivability_fail", "[gps="..math.floor(new_pos.x)..","..math.floor(new_pos.y)..","..Zone.get_surface_name(tick_task.launching_to_destination.zone).."]"}) + + end + end + + local cargo_loss = Launchpad.get_cargo_loss(game.forces[tick_task.force_name], tick_task.launching_to_destination.zone, tick_task.delta_v) + if is_landingpad then + cargo_loss = cargo_loss / 2 + end + local keep_percent = 1 - cargo_loss + if tick_task.launched_inventory and tick_task.launched_inventory.valid then + Log.trace("Loss launched_inventory") + -- remove items from the inventory directly + + for item_name, item_count in pairs(tick_task.launched_contents) do + local item_type = game.item_prototypes[item_name] + if item_type and item_count > 1 and item_type.stack_size > 1 then + local loss = cargo_loss * 2 * math.random() -- +/- 100% + local lost_items = math.floor(item_count * loss) + if lost_items > 0 then + tick_task.launched_inventory.remove({name = item_name, count = lost_items}) + end + end + end + + else -- old method for legacy launches in progress. + Log.trace("Loss safe_contents") + tick_task.safe_contents = {} + for item_type, item_count in pairs(tick_task.launched_contents) do + local item_type = game.item_prototypes[item_name] + if item_type and item_count > 1 and item_type.stack_size > 1 then + local loss = 2 * cargo_loss * math.random() -- +/- 100% + -- keep 10% at a minimum + tick_task.safe_contents[item_type] = math.max(math.ceil(item_count / 10), item_count - item_count * loss) + else + tick_task.safe_contents[item_type] = item_count + end + end + end + + -- cargo loss should never go above 90%, it can be below 10% round up for number of crashing pods. + local total_pods = 10 + local crashing_pods = math.floor(total_pods * cargo_loss + 0.49) + local safe_pods = total_pods - crashing_pods + local pods = {} + + local target_surface = Zone.get_make_surface(tick_task.launching_to_destination.zone) + Zone.apply_markers(tick_task.launching_to_destination.zone) -- in case the surface exists + + for i = 1, safe_pods do + table.insert(pods, {type = "safe"}) + end + for i = 1, crashing_pods do + table.insert(pods, {type = "crash"}) + end + pods = Util.shuffle(pods) + + local landing_start_altitude = Launchpad.landing_start_altitude + if Zone.is_space(tick_task.launching_to_destination.zone) then + landing_start_altitude = landing_start_altitude * 0.5 + end + local start_position_x_offset = landing_start_altitude * (math.random() - 0.5) -- gives an angle to all pieces + local start_position = Util.vectors_add(tick_task.launching_to_destination.position, { + x = start_position_x_offset, + y = - landing_start_altitude}) + local start_position_shadow = Util.vectors_add(tick_task.launching_to_destination.position, { + x = start_position_x_offset + landing_start_altitude, + y = 0}) + + tick_task.safe_pods = {} + for i, pod in pairs(pods) do + + local falling_time = Launchpad.time_landing_cargopod_first + + (Launchpad.time_landing_cargopod_last - Launchpad.time_landing_cargopod_first) * (i - 1) / (total_pods - 1) + local land_position + if pod.type == "safe" and is_landingpad then + land_position = tick_task.launching_to_destination.position + else + land_position = Util.vectors_add(tick_task.launching_to_destination.position, {x = 32 * (math.random() - 0.5), y = 32 * (math.random() - 0.5)}) + end + local flat_distance = Util.vectors_delta_length(start_position, land_position) + local flat_distance_shadow = Util.vectors_delta_length(start_position_shadow, land_position) + local speed = flat_distance / falling_time + local speed_shadow = flat_distance_shadow / falling_time + + if pod.type == "safe" then + -- track the safe ones for adding items + local entity = target_surface.create_entity{ + name = mod_prefix .. "falling-cargo-pod", + position = start_position, + target = land_position, + speed = speed, + max_rage = flat_distance, + } + entity.orientation = 0 + table.insert(tick_task.safe_pods, {falling_entity=entity, land_position = land_position}) + target_surface.create_entity{ + name = mod_prefix .. "shadow-cargo-pod", + position = start_position_shadow, + target = land_position, + speed = speed_shadow, + max_rage = flat_distance_shadow, + } + else + target_surface.create_entity{ + name = mod_prefix .. "falling-" .. Launchpad.names_cargo_fragment[(i % #Launchpad.names_cargo_fragment) + 1], + position = start_position, + target = land_position, + speed = speed, + max_rage = flat_distance, + } + target_surface.create_entity{ + name = mod_prefix .. "shadow-" .. Launchpad.names_cargo_fragment[(i % #Launchpad.names_cargo_fragment) + 1], + position = start_position_shadow, + target = land_position, + speed = speed_shadow, + max_rage = flat_distance_shadow, + } + end + end + + if not is_landingpad then + for i = 1, Launchpad.rocket_fragments_large do + Launchpad.drop_rocket_fragment(tick_task.launching_to_destination.zone, 4, Launchpad.names_rocket_fragments_large[(i % #Launchpad.names_rocket_fragments_large) + 1], + tick_task.launching_to_destination.position, + start_position_x_offset) + end + for i = 1, Launchpad.rocket_fragments_medium do + Launchpad.drop_rocket_fragment(tick_task.launching_to_destination.zone, 3, Launchpad.names_rocket_fragments_medium[(i % #Launchpad.names_rocket_fragments_medium) + 1], + tick_task.launching_to_destination.position, + start_position_x_offset) + end + for i = 1, Launchpad.rocket_fragments_small do + Launchpad.drop_rocket_fragment(tick_task.launching_to_destination.zone, 2, Launchpad.names_rocket_fragments_small[(i % #Launchpad.names_rocket_fragments_small) + 1], + tick_task.launching_to_destination.position, + start_position_x_offset) + end + for i = 1, Launchpad.rocket_fragments_tiny do + Launchpad.drop_rocket_fragment(tick_task.launching_to_destination.zone, 1, Launchpad.names_rocket_fragments_tiny[(i % #Launchpad.names_rocket_fragments_tiny) + 1], + tick_task.launching_to_destination.position, + start_position_x_offset) + end + end + + -- capsule + tick_task.capsule = target_surface.create_entity{ + name = Capsule.name_space_capsule_vehicle, + position=start_position, + force = tick_task.force_name + } + tick_task.capsule.destructible = false + tick_task.capsule_shadow = target_surface.create_entity{name = Capsule.name_space_capsule_vehicle_shadow, position=start_position_shadow, force = "neutral"} + tick_task.capsule_light = target_surface.create_entity{name = Capsule.name_space_capsule_vehicle_light, position=start_position, + speed = 0, target = tick_task.capsule} + + if tick_task.passengers then + for _, passenger in pairs(tick_task.passengers) do + if passenger and passenger.valid then + -- this disassociates the character + if passenger.player then + LaunchpadGUI.gui_close(passenger.player) + end + tick_task.passengers[_] = teleport_character_to_surface(passenger, target_surface, tick_task.capsule.position) + if tick_task.passengers[_] then + tick_task.passengers[_].destructible = false + end + end + end + end + -- end landing sequence setup + else + -- continuation for landing sqequence + tick_task.land_timer = tick_task.land_timer + 1 + + local time_remaining = math.max(1, Launchpad.time_landing_capsule_touchdown - tick_task.land_timer) + local target_pos = tick_task.launching_to_destination.position + local capsule_target_pos = tick_task.launching_to_destination.attempted_position or target_pos + + --local travel = Util.vector_multiply(Util.vectors_delta(tick_task.capsule.position, target_pos), 1 / time_remaining) + --local travel_shadow = Util.vector_multiply(Util.vectors_delta(tick_task.capsule_shadow.position, target_pos), 1 / time_remaining) + + if not(tick_task.capsule and tick_task.capsule.valid) then + local target_surface = Zone.get_make_surface(tick_task.launching_to_destination.zone) + tick_task.capsule = target_surface.create_entity{ + name = Capsule.name_space_capsule_vehicle, + position={x = capsule_target_pos.x, y = capsule_target_pos.y - Launchpad.landing_start_altitude * time_remaining / Launchpad.time_landing_capsule_touchdown}, + force = tick_task.force_name + } + end + tick_task.capsule.destructible = true + + local travel = Util.vector_multiply(Util.vectors_delta(tick_task.capsule.position, capsule_target_pos), math.min(0.9, 2 / time_remaining)) + local animation_speed = 1/3 + local animation_frames = 24 + local animation_frame = math.max(math.min(math.floor(time_remaining * animation_speed), animation_frames), 1) + + tick_task.capsule.teleport(Util.vectors_add(tick_task.capsule.position, travel)) + tick_task.capsule.orientation = (animation_frame - 1) / animation_frames + + if tick_task.capsule_light and tick_task.capsule_light.valid then + tick_task.capsule_light.teleport(tick_task.capsule.position) + end + + if tick_task.capsule_shadow and tick_task.capsule_shadow.valid then + local travel_shadow = Util.vector_multiply(Util.vectors_delta(tick_task.capsule_shadow.position, capsule_target_pos), math.min(0.9, 2 / time_remaining)) + tick_task.capsule_shadow.teleport(Util.vectors_add(tick_task.capsule_shadow.position, travel_shadow)) + tick_task.capsule_shadow.graphics_variation = animation_frame + end + + if tick_task.passengers then + for _, passenger in pairs(tick_task.passengers) do + if passenger and passenger.valid then + passenger.teleport({x = tick_task.capsule.position.x, y = tick_task.capsule.position.y - 0.2}) + end + end + end + + for _, safe_pod in pairs(tick_task.safe_pods) do + if safe_pod.falling_entity then + if not safe_pod.falling_entity.valid then + safe_pod.falling_entity = nil + if tick_task.launching_to_destination.landing_pad and tick_task.launching_to_destination.landing_pad.valid then + --tick_task.launching_to_destination.landing_pad.container.insert{name = Launchpad.name_cargo_pod, count = 1} -- we have rocket parts instead + --tick_task.launching_to_destination.landing_pad.container.force.item_production_statistics.on_flow(Launchpad.name_cargo_pod, 1) + else + safe_pod.cargo_entity = tick_task.capsule.surface.create_entity{ + name = Launchpad.name_cargo_pod, + position = safe_pod.land_position, + force = tick_task.force_name + } + end + end + + end + end + + if tick_task.land_timer > Launchpad.time_landing_capsule_touchdown then + + if tick_task.launching_to_destination.landing_pad and tick_task.launching_to_destination.landing_pad.valid then + -- going to a landing pad + tick_task.launching_to_destination.landing_pad.container.insert{name = Capsule.name_space_capsule, count = 1} + --tick_task.launching_to_destination.landing_pad.container.force.item_production_statistics.on_flow(Capsule.name_space_capsule, 1) + tick_task.capsule.destroy() + + if tick_task.capsule_light and tick_task.capsule_light.valid then + tick_task.capsule_light.destroy() + end + + if tick_task.capsule_shadow and tick_task.capsule_shadow.valid then + tick_task.capsule_shadow.destroy() + end + + if tick_task.launched_inventory and tick_task.launched_inventory.valid then + Log.trace("Insert to pad launched_inventory") + local inv = tick_task.launching_to_destination.landing_pad.container.get_inventory(defines.inventory.chest) + for i = 1, #tick_task.launched_inventory do + local stack = tick_task.launched_inventory[i] + if stack and stack.valid and stack.valid_for_read and stack.count then + inv.insert(tick_task.launched_inventory[i]) + end + end + tick_task.launched_inventory.clear() + tick_task.launched_inventory.destroy() + tick_task.launched_inventory = nil + elseif tick_task.safe_contents then -- legacy method + Log.trace("Insert to pad safe_contents") + for name, count in pairs(tick_task.safe_contents) do + tick_task.launching_to_destination.landing_pad.container.insert{name=name, count=count} + end + end + + local reusability = Launchpad.get_reusability(game.forces[tick_task.force_name]) + local reusable_parts = math.floor(math.min(Launchpad.rocket_sections_per_rocket, Launchpad.rocket_sections_per_rocket * reusability * ( 0.9 + 0.2 * math.random()))) + if reusable_parts > 0 then + tick_task.launching_to_destination.landing_pad.container.insert{name = Launchpad.name_rocket_section, count = reusable_parts} +-- tick_task.launching_to_destination.landing_pad.container.force.item_production_statistics.on_flow(Launchpad.name_rocket_section, reusable_parts) + end + if reusable_parts < Launchpad.rocket_sections_per_rocket then + tick_task.launching_to_destination.landing_pad.container.force.item_production_statistics.on_flow(Launchpad.name_rocket_section, -(Launchpad.rocket_sections_per_rocket - reusable_parts)) + end + + tick_task.launching_to_destination.landing_pad.inbound_rocket = nil + else + + if tick_task.launched_inventory and tick_task.launched_inventory.valid then + Log.trace("Distribute to pods launched_inventory") + + local spidertrons = {"spidertron-spidertron-rocket-launcher-1", "spidertron"} + for _, spidertron_name in pairs(spidertrons) do + if tick_task.launched_contents[spidertron_name] and tick_task.launched_contents[spidertron_name] > 0 then + local pod = tick_task.safe_pods[#tick_task.safe_pods] + local spider = pod.cargo_entity.surface.create_entity{ + name = spidertron_name, + position = pod.cargo_entity.position, + force = pod.cargo_entity.force, + raise_built = true + } + if spider then + tick_task.launched_contents[spidertron_name] = tick_task.launched_contents[spidertron_name] - 1 + local spider_item = tick_task.launched_inventory.find_item_stack(spidertron_name) + if spider_item.grid then + Util.transfer_equipment_grid(spider_item, spider) + end + local inventory = spider_item.get_inventory(defines.inventory.item_main) or spider_item.get_inventory(defines.inventory.car_trunk) + local reserve_item_stacks = { + "construction-robot", + "logistic-chest-storage", + "roboport", + } + local take_item_stacks = { + "construction-robot", + "logistic-chest-storage", + "roboport", + "substation", + mod_prefix .. "pylon-substation", + "solar-panel", + mod_prefix .. "space-solar-panel-1", + mod_prefix .. "space-solar-panel-2", + mod_prefix .. "space-solar-panel-3", + "accumulator", + "laser-turret", + } + if inventory then + Util.transfer_inventory_filters_direct(spider_item.get_inventory(defines.inventory.item_main), spider.get_inventory(defines.inventory.car_trunk)) + else -- item inv not supported yet? + local spider_inv = spider.get_inventory(defines.inventory.car_trunk) + for i, item in pairs(reserve_item_stacks) do + spider_inv.set_filter(i, item) + end + end + tick_task.launched_inventory.remove({name = spidertron_name, count = 1}) + for _, item in pairs(take_item_stacks) do + if tick_task.launched_contents[item] and tick_task.launched_contents[item] > 0 then + local remove = math.min(tick_task.launched_contents[item], 50) + tick_task.launched_contents[item] = tick_task.launched_contents[item] - remove + tick_task.launched_inventory.remove({name = item, count = remove}) + spider.insert({name = item, count = remove}) + end + end + -- the auto-deconstruction is a problem for the spider, clear nearby deconstruction orders. + tick_task.spider = spider + break + end + end + end + + for i = 1, #tick_task.launched_inventory do + for j = 0, #tick_task.safe_pods do + local pod = tick_task.safe_pods[((i + j) % #tick_task.safe_pods) + 1] + local stack = tick_task.launched_inventory[i] + if pod and pod.cargo_entity and pod.cargo_entity.valid and stack and stack.valid and stack.valid_for_read and stack.count then + local inserted = pod.cargo_entity.insert(tick_task.launched_inventory[i]) + if inserted == stack.count then + tick_task.launched_inventory[i].clear() + else + tick_task.launched_inventory[i].count = stack.count - inserted + end + end + end + end + tick_task.launched_inventory.clear() + tick_task.launched_inventory.destroy() + tick_task.launched_inventory = nil + else -- legacy version + Log.trace("Distribute to pods safe_contents") + local i = 1 + for name, count in pairs(tick_task.safe_contents) do + local remaining = count + for _, pod in pairs(tick_task.safe_pods) do + if pod and pod.cargo_entity and pod.cargo_entity.valid and remaining >= 1 then + remaining = remaining - pod.cargo_entity.insert{name=name, count=remaining} + end + end + end + end + + for _, pod in pairs(tick_task.safe_pods) do + -- HERE + if pod and pod.cargo_entity and pod.cargo_entity.valid and not tick_task.spider then + pod.cargo_entity.order_deconstruction(tick_task.force_name) + end + end + + if tick_task.launching_to_destination.attempted_landing_pad and tick_task.launching_to_destination.attempted_landing_pad.valid then + tick_task.launching_to_destination.attempted_landing_pad.container.insert{name = Capsule.name_space_capsule, count = 1} +-- tick_task.launching_to_destination.attempted_landing_pad.container.force.item_production_statistics.on_flow(Capsule.name_space_capsule, 1) + tick_task.capsule.destroy() + + if tick_task.capsule_light and tick_task.capsule_light.valid then + tick_task.capsule_light.destroy() + end + + if tick_task.capsule_shadow and tick_task.capsule_shadow.valid then + tick_task.capsule_shadow.destroy() + end + end + + end + + if tick_task.passengers then + for _, passenger in pairs(tick_task.passengers) do + if passenger and passenger.valid then + teleport_non_colliding(passenger, capsule_target_pos) + passenger.destructible = true + if passenger.player then + local playerdata = get_make_playerdata(passenger.player) + playerdata.zero_velocity = true + passenger.player.print({"space-exploration.respawn-if-stranded"}) + end + if remote.interfaces["jetpack"] and remote.interfaces["jetpack"]["unblock_jetpack"] then + remote.call("jetpack", "unblock_jetpack", {character=passenger}) -- last otherwise the teleport breacks the chatacter reference + end + end + end + end + + if tick_task.capsule and tick_task.capsule.valid then tick_task.capsule.destructible = false end + tick_task.launched_contents = nil + if tick_task.launched_inventory and tick_task.launched_inventory.valid then + tick_task.launched_inventory.destroy() + end + tick_task.launched_inventory = nil + tick_task.safe_contents = nil + + tick_task.valid = false -- close tick task + end + end + + end + +end + +function Launchpad.on_player_driving_changed_state(event) + local player = game.players[event.player_index] + if player then + if player.vehicle and player.vehicle.name == Launchpad.name_rocket_launch_pad_seat then + + if player.character then + remote.call("jetpack", "stop_jetpack_immediate", {character = player.character}) + end + + local armor_inv = player.get_inventory(defines.inventory.character_armor) + if not(armor_inv and armor_inv[1] and armor_inv[1].valid_for_read and Util.table_contains(name_thruster_suits, armor_inv[1].name)) then + player.print({"space-exploration.launch-suit-warning"}) + end + + local launch_pad_entity = player.surface.find_entities_filtered{ + limit = 1, + area = util.position_to_area(util.vectors_add(player.position, {x = 0, y = -5}), 5), + name = Launchpad.name_rocket_launch_pad + }[1] + if launch_pad_entity then + LaunchpadGUI.gui_open(player, Launchpad.from_entity(launch_pad_entity)) + end + end + end +end +Event.addListener(defines.events.on_player_driving_changed_state, Launchpad.on_player_driving_changed_state) + +--- Creates the composite entity when the laund pad is made +--- Does not handle clone_area in any acceptable manner +--- (it doesn't listen to on_cloned and even if it did it +--- would start duplicated entities) +--- TODO: maybe make it support cloning by get_make the entities +--- instead of making them every time +---@param event any +function Launchpad.on_entity_created(event) + local entity = util.get_entity_from_event(event) + + if not entity then return end + if entity.name == Launchpad.name_rocket_launch_pad then + local force_name = entity.force.name + + local zone = Zone.from_surface(entity.surface) + + if not zone then + return cancel_entity_creation(entity, event.player_index, "Invalid launch pad location") + end + + local default_name = zone.name + local default_destination_zone = zone + if zone.orbit then + default_destination_zone = zone.orbit + elseif zone.parent and zone.parent.type ~= "star" then + default_destination_zone = zone.parent + end + local struct = { + type = Launchpad.name_rocket_launch_pad, + valid = true, + force_name = force_name, + unit_number = entity.unit_number, + container = entity, + name = default_name, + rocket_sections = 0, + crew_capsules = 0, + launch_trigger = "none", + lua_fuel = 0, + total_fuel = 0, + zone = zone, + destination = { + zone = default_destination_zone + }, + launch_status = -1 + } + + global.rocket_launch_pads[entity.unit_number] = struct + Log.trace("Launchpad: launch_pad added") + + Launchpad.name(struct) -- assigns to zone_assets + Launchpad.add_section_input(struct) + -- spawn combinator + struct.combinator = util.find_entity_or_revive_ghost(entity.surface, Launchpad.name_rocket_launch_pad_combinator, entity.position) + if not struct.combinator then + struct.combinator = entity.surface.create_entity{ + name = Launchpad.name_rocket_launch_pad_combinator, + force = entity.force, + position = entity.position + } + end + entity.connect_neighbour({wire = defines.wire_type.red, target_entity = struct.combinator}) + entity.connect_neighbour({wire = defines.wire_type.green, target_entity = struct.combinator}) + struct.combinator.destructible = false + + -- spawn silo + local silo_position = {entity.position.x, entity.position.y + 1/32} -- 1 px down to be in front of container + struct.silo = util.find_entity_or_revive_ghost(entity.surface, Launchpad.name_rocket_launch_pad_silo, silo_position, 0.1) -- need radius specified otherwise it won't find it + if not struct.silo then + struct.silo = entity.surface.create_entity{ + name = Launchpad.name_rocket_launch_pad_silo, + force = entity.force, + position = silo_position + } + end + struct.silo.destructible = false + + + -- spawn storage tank + local tank_position = {entity.position.x, entity.position.y + 1} -- 1 tile down to be in front of silo + struct.tank = util.find_entity_or_revive_ghost(entity.surface, Launchpad.name_rocket_launch_pad_tank, tank_position) + if not struct.tank then + struct.tank = entity.surface.create_entity{ + name = Launchpad.name_rocket_launch_pad_tank, + force = entity.force, + position = tank_position + } + end + struct.tank.fluidbox.set_filter(1, {name = name_fluid_rocket_fuel, force = true}) + entity.connect_neighbour({wire = defines.wire_type.red, target_entity = struct.tank}) + entity.connect_neighbour({wire = defines.wire_type.green, target_entity = struct.tank}) + struct.tank.destructible = false + + struct.seats = {} + -- spawn passenger seats + for i = -2, 2, 1 do + local seat_position = {entity.position.x + i, entity.position.y + 5.9} + local seat = util.find_entity_or_revive_ghost(entity.surface, Launchpad.name_rocket_launch_pad_seat, seat_position) + if not seat then + seat = entity.surface.create_entity{ + name = Launchpad.name_rocket_launch_pad_seat, + force = entity.force, + position = seat_position + } + end + seat.destructible = false + table.insert(struct.seats, seat) + end + + -- set settings + local tags = util.get_tags_from_event(event, Launchpad.serialize) + if tags then + Launchpad.deserialize(entity, tags) + end + + if event.player_index and game.players[event.player_index] and game.players[event.player_index].connected then + LaunchpadGUI.gui_open(game.players[event.player_index], struct) + end + end +end +Event.addListener(defines.events.on_entity_cloned, Launchpad.on_entity_created) +Event.addListener(defines.events.on_built_entity, Launchpad.on_entity_created) +Event.addListener(defines.events.on_robot_built_entity, Launchpad.on_entity_created) +Event.addListener(defines.events.script_raised_built, Launchpad.on_entity_created) +Event.addListener(defines.events.script_raised_revive, Launchpad.on_entity_created) + +function Launchpad.get_struct_type_table(struct) + local zone_assets = Zone.get_force_assets(struct.force_name, struct.zone.index) + if struct.type == Launchpad.name_rocket_launch_pad then + zone_assets.rocket_launch_pad_names = zone_assets.rocket_launch_pad_names or {} + return zone_assets.rocket_launch_pad_names + end +end + +function Launchpad.remove_struct_from_table(struct) + local type_table = Launchpad.get_struct_type_table(struct) + if not type_table[struct.name] then return end + type_table[struct.name][struct.unit_number] = nil + local count_remaining = 0 + for _, remaining in pairs(type_table[struct.name]) do + count_remaining = count_remaining + 1 + end + if count_remaining == 0 then + type_table[struct.name] = nil + end +end + +function Launchpad.destroy_sub(struct, key) + if struct[key] and struct[key].valid then + struct[key].destroy() + struct[key] = nil + end +end + +function Launchpad.destroy(struct, player_index) + if not struct then + Log.trace("struct_destroy: no struct") + return + end + + struct.valid = false + + local capsules = struct.crew_capsules or 0 + local sections = struct.rocket_sections or 0 + + if player_index then + local player = game.players[player_index] + if player and player.connected then + if capsules > 0 then + local inserted = player.insert{name = Capsule.name_space_capsule, count = capsules} + capsules = capsules - inserted + end + if sections > 0 then + local inserted = player.insert{name = Launchpad.name_rocket_section, count = sections} + sections = sections - inserted + end + end + end + + if struct.container and struct.container.valid then + + local position = struct.container.position + local surface = struct.container.surface + + if capsules > 0 then + surface.spill_item_stack(position, {name = Capsule.name_space_capsule, count = capsules}, true, struct.container.force, false) + end + + if sections > 0 then + surface.spill_item_stack(position, {name = Launchpad.name_rocket_section, count = sections}, true, struct.container.force, false) + end + end + + Launchpad.destroy_sub(struct, 'container') + Launchpad.destroy_sub(struct, 'section_input') + Launchpad.destroy_sub(struct, 'tank') + Launchpad.destroy_sub(struct, 'silo') + Launchpad.destroy_sub(struct, 'combinator') + for _, seat in pairs(struct.seats or {}) do + if seat and seat.valid then seat.destroy() end + end + struct.seats = nil + Launchpad.remove_struct_from_table(struct) + global.rocket_launch_pads[struct.unit_number] = nil + + -- if a player has this gui open then close it + local gui_name = LaunchpadGUI.name_rocket_launch_pad_gui_root + for _, player in pairs(game.connected_players) do + local root = player.gui.relative[gui_name] + if root and root.tags and root.tags.unit_number == struct.unit_number then + root.destroy() + end + end +end + +function Launchpad.name(struct, new_name) + struct.name = (new_name or struct.name) + local type_table = Launchpad.get_struct_type_table(struct) + type_table[struct.name] = type_table[struct.name] or {} + type_table[struct.name][struct.unit_number] = struct +end + +function Launchpad.rename(struct, new_name) + local old_name = struct.name + Launchpad.remove_struct_from_table(struct) + Launchpad.name(struct, new_name) +end + +function Launchpad.on_entity_removed(event) + local entity = event.entity + if entity and entity.valid and entity.name == Launchpad.name_rocket_launch_pad then + Launchpad.destroy(Launchpad.from_entity(entity), event.player_index ) + end +end +Event.addListener(defines.events.on_entity_died, Launchpad.on_entity_removed) +Event.addListener(defines.events.on_robot_mined_entity, Launchpad.on_entity_removed) +Event.addListener(defines.events.on_player_mined_entity, Launchpad.on_entity_removed) +Event.addListener(defines.events.script_raised_destroy, Launchpad.on_entity_removed) + +function Launchpad.on_tick(struct) + -- handle launchpads + for _, struct in pairs(global.rocket_launch_pads) do + if (struct.launch_status and struct.launch_status > 0) or (game.tick + struct.unit_number) % 60 == 0 then + Launchpad.tick(struct) + end + end + + -- update guis + if game.tick % 60 == 0 then + for _, player in pairs(game.connected_players) do + LaunchpadGUI.gui_update(player) + end + end +end +Event.addListener(defines.events.on_tick, Launchpad.on_tick) + +function Launchpad.serialize(entity) + local launch_pad = Launchpad.from_entity(entity) + if launch_pad then + local tags = {} + tags.name = launch_pad.name + tags.launch_trigger = launch_pad.launch_trigger + if launch_pad.destination.zone then + tags.zone_name = launch_pad.destination.zone.name + end + if launch_pad.destination.landing_pad_name then + tags.landing_pad_name = launch_pad.destination.landing_pad_name + end + return tags + end +end + +function Launchpad.deserialize(entity, tags) + local launch_pad = Launchpad.from_entity(entity) + if launch_pad then + Launchpad.rename(launch_pad, tags.name) + launch_pad.launch_trigger = tags.launch_trigger + if tags.zone_name then + launch_pad.destination.zone = Zone.from_name(tags.zone_name) + else + launch_pad.destination.zone = nil + end + if tags.landing_pad_name then + launch_pad.destination.landing_pad_name = tags.landing_pad_name + else + launch_pad.destination.landing_pad_name = nil + end + end +end + +--- Handles the player creating a blueprint by setting tags to store the state of launch pads +---@param event any +function Launchpad.on_player_setup_blueprint(event) + util.setup_blueprint(event, Launchpad.name_rocket_launch_pad, Launchpad.serialize) +end +Event.addListener(defines.events.on_player_setup_blueprint, Launchpad.on_player_setup_blueprint) + +--- Handles the player copy/pasting settings between launch pads +---@param event any +function Launchpad.on_entity_settings_pasted(event) + util.settings_pasted(event, Launchpad.name_rocket_launch_pad, Launchpad.serialize, Launchpad.deserialize) +end +Event.addListener(defines.events.on_entity_settings_pasted, Launchpad.on_entity_settings_pasted) + +function Launchpad.on_init(event) + global.rocket_launch_pads = {} +end +Event.addListener("on_init", Launchpad.on_init, true) + +return Launchpad diff --git a/space-exploration_0.5.80/space-exploration/scripts/lifesupport.lua b/space-exploration_0.5.80/space-exploration/scripts/lifesupport.lua new file mode 100644 index 0000000..dba9540 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/lifesupport.lua @@ -0,0 +1,426 @@ +local Lifesupport = {} +--[[ +Lifesupport mechanics: +Consume lifesupport canisters for food & air + +Equiment boosts the lifesupport drain efficiency, stacks additivly. +All thruster suits have some base level life support efficiency, 1 module is built-in. + +Non-thruster suits can have modules added but only function on land and efficiency banafits are halved. Only useful on hostile planets. +A spacesuit proper spacesuit is required in space. + +]] + +Lifesupport.name_gui_root = mod_prefix.."lifesupport" +Lifesupport.name_window_close = "close_lifesupport" +Lifesupport.name_sound_used_canister = mod_prefix .. "canister-breath" + +Lifesupport.lifesupport_refil_threshold = 50 +Lifesupport.lifesupport_bar_max = 150 +Lifesupport.lifesupport_per_second = 1 -- at 100% hazard (space) +Lifesupport.tick_interval = 240 +Lifesupport.check_inventory_interval = Lifesupport.tick_interval * 4 + +Lifesupport.min_effective_efficiency = 0.25 -- acts as damage multiplier +Lifesupport.spacesuit_base_efficiency = 1 +Lifesupport.non_spacesuit_base_efficiency = 0 +Lifesupport.non_spacesuit_efficiency_multiplier = 0.5 + +Lifesupport.lifesupport_canisters = { + { + name = mod_prefix .. "lifesupport-canister", + used = mod_prefix .. "used-lifesupport-canister", + lifesupport = 100 + } +} + +Lifesupport.lifesupport_equipment = { + [mod_prefix .. "lifesupport-equipment-1"] = {efficiency = 1}, + [mod_prefix .. "lifesupport-equipment-2"] = {efficiency = 2}, + [mod_prefix .. "lifesupport-equipment-3"] = {efficiency = 4}, + [mod_prefix .. "lifesupport-equipment-4"] = {efficiency = 8}, +} + +--[[ + playerdata.user_opened_armor_gui -> flag that says user has armor gui open and we show life support gui + playerdata.environment_hostile -> flag for hostile environment where air is used up + playerdata.suit_thrust_bonused -> flag for thruster suit giving bonuses to thrusters +]] + +function Lifesupport.get_gui(player) + return player.gui.left[Lifesupport.name_gui_root] +end + +function Lifesupport.check_inventory_reserve_lifesupport(player) + local playerdata = get_make_playerdata(player) + local character = player_get_character(player) + if not character then + playerdata.reserve_lifesupport = 0 + return + end + playerdata.reserve_lifesupport = 0 + local inventory = character.get_main_inventory() + if inventory and inventory.valid then + for _, lifesupport_canister in pairs(Lifesupport.lifesupport_canisters) do + playerdata.reserve_lifesupport = playerdata.reserve_lifesupport + inventory.get_item_count(lifesupport_canister.name) * lifesupport_canister.lifesupport + end + end +end + +function Lifesupport.get_current_hazard(player) + local playerdata = get_make_playerdata(player) + local character = player_get_character(player) + if not character then + playerdata.lifesupport_environment = "unknown" + return 0 + end + local position = Util.position_to_tile(character.position) + local zone = Zone.from_surface(character.surface) + local spaceship = (zone and zone.type == "spaceship") and zone or nil + + local hazard = 0 + if character.vehicle then + hazard = 0 + else + if not zone then + -- vaults? + hazard = 0 + playerdata.lifesupport_environment = "unknown" + elseif spaceship then + if spaceship.known_tiles + and spaceship.known_tiles[position.x] and spaceship.known_tiles[position.x][position.y] + and (spaceship.known_tiles[position.x][position.y] == Spaceship.tile_status.floor_interior + or spaceship.known_tiles[position.x][position.y] == Spaceship.tile_status.floor_console_connected + or spaceship.known_tiles[position.x][position.y] == Spaceship.tile_status.wall_console_connected + or spaceship.known_tiles[position.x][position.y] == Spaceship.tile_status.bulkhead_console_connected) then + hazard = 0 + playerdata.lifesupport_environment = "spaceship-interior" + else + hazard = 1 + playerdata.lifesupport_environment = "space" + end + else + local tile = character.surface.get_tile(Util.position_to_tile(character.position)) + if tile and tile.valid and Util.table_contains(Spaceship.names_spaceship_floors, tile.name) then + hazard = 0 + playerdata.lifesupport_environment = "spaceship-interior" + elseif Zone.is_space(zone) then + hazard = 1 + playerdata.lifesupport_environment = "space" + else + hazard = 0 + if zone.plague_used then + hazard = 1 + if zone.type == "moon" then + playerdata.lifesupport_environment = "plague-moon" + else + playerdata.lifesupport_environment = "plague-planet" + end + else + -- land + -- TODO: Get habitability from zone data. hazard factors: desert, hot, cold, uranium, high aux. + if zone.type == "moon" then + playerdata.lifesupport_environment = "moon" + else + playerdata.lifesupport_environment = "planet" + end + end + end + end + end + return hazard + +end + +function Lifesupport.update_lifesupport_efficiency(player) + local character = player_get_character(player) + if not character then return end + local playerdata = get_make_playerdata(player) + + playerdata.lifesupport_efficiency = 0 + playerdata.has_spacesuit = false + + local armor_inv = character.get_inventory(defines.inventory.character_armor) + if armor_inv and armor_inv[1] and armor_inv[1].valid_for_read then + if util.table_contains(name_thruster_suits, armor_inv[1].name) then + playerdata.lifesupport_efficiency = Lifesupport.spacesuit_base_efficiency + playerdata.has_spacesuit = true + end + + -- get lifesupport equipment modules + local grid_efficiency = 0 + if character.grid then + for name, count in pairs(character.grid.get_contents()) do + if Lifesupport.lifesupport_equipment[name] ~= nil then + grid_efficiency = grid_efficiency + count * (Lifesupport.lifesupport_equipment[name].efficiency or 0) + end + end + end + playerdata.lifesupport_efficiency = playerdata.lifesupport_efficiency + grid_efficiency + end + + if not playerdata.has_spacesuit then + playerdata.lifesupport_efficiency = playerdata.lifesupport_efficiency / 2 + end + + return playerdata.lifesupport_efficiency +end + + +function Lifesupport.on_tick(event) + for _, player in pairs(game.connected_players) do + if game.tick % Lifesupport.tick_interval == 0 then + Lifesupport.consume_lifesupport(player) + end + if Lifesupport.get_gui(player) then + Lifesupport.gui_update(player, playerdata) + end + end +end +Event.addListener(defines.events.on_tick, Lifesupport.on_tick) + + +function Lifesupport.consume_lifesupport(player) + local playerdata = get_make_playerdata(player) + local character = player_get_character(player) + if not character then return end + local hazard = Lifesupport.get_current_hazard(player) + if hazard > 0 then + --Lifesupport.gui_open(player) + Lifesupport.update_lifesupport_efficiency(player) -- saves to playerdata.lifesupport_efficiency + local efficiency = playerdata.lifesupport_efficiency + if efficiency > 0 and not playerdata.has_spacesuit then + local zone = Zone.from_surface(character.surface) + if Zone.is_space(zone) then + efficiency = 0 + end + end + local effective_efficiency = math.max(efficiency, Lifesupport.min_effective_efficiency) + local hazard_use_rate_per_s = Lifesupport.lifesupport_per_second * Lifesupport.get_current_hazard(player) + local effective_use_rate_per_s = hazard_use_rate_per_s / effective_efficiency + local effective_use_per_interval = Lifesupport.tick_interval * effective_use_rate_per_s / 60 + if efficiency > 0 then + -- consume lifesupport + playerdata.lifesupport = (playerdata.lifesupport or 0) - effective_use_per_interval + if playerdata.lifesupport < Lifesupport.lifesupport_refil_threshold then + Lifesupport.consume_canister(player, playerdata, character) + end + if playerdata.lifesupport < 0 then + Lifesupport.damage_character(player, playerdata, character, -playerdata.lifesupport) + playerdata.lifesupport = 0 + end + else + -- lifesupport is not funcitioning. Even if there is a lifesupport buffer it won't do anything (eg: non-space suit in space.) + Lifesupport.damage_character(player, playerdata, character, effective_use_per_interval) + end + elseif playerdata.lifesupport == nil or playerdata.lifesupport < Lifesupport.lifesupport_refil_threshold then + Lifesupport.consume_canister(player, playerdata, character) + end +end + +function Lifesupport.consume_canister(player, playerdata, character) + local inventory = character.get_main_inventory() + if inventory and inventory.valid then + for _, lifesupport_canister in pairs(Lifesupport.lifesupport_canisters) do + local count = inventory.get_item_count(lifesupport_canister.name) + if count > 0 then + inventory.remove({name=lifesupport_canister.name, count=1}) + inventory.insert({name=lifesupport_canister.used, count=1}) + playerdata.lifesupport = (playerdata.lifesupport or 0) + lifesupport_canister.lifesupport + player.play_sound { path = Lifesupport.name_sound_used_canister } + return + end + end + end +end + +function Lifesupport.damage_character(player, playerdata, character, damage) + -- half damage direct to character + if damage > character.health then + player.print({"space-exploration.suffocating-warning"}, {r = 1, g = 0, b = 0, a = 0}) + character.die("neutral") + Lifesupport.gui_close(player) + return + end + + local shield_damage = 0 + if character.grid then + shield_damage = character.grid.shield + end + character.damage(damage + shield_damage, "neutral", "suffocation") + player.print({"space-exploration.suffocating-warning"}, {r = 1, g = 0, b = 0, a = 0}) +end + +function Lifesupport.on_equipment_changed(event) + local player = game.players[event.player_index] + local character = player_get_character(player) + if not character then return end + Lifesupport.update_lifesupport_efficiency(player) +end +Event.addListener(defines.events.on_player_placed_equipment, Lifesupport.on_equipment_changed) +Event.addListener(defines.events.on_player_removed_equipment, Lifesupport.on_equipment_changed) + +function Lifesupport.on_armor_changed(event) + local player = game.players[event.player_index] + local character = player_get_character(player) + if not character then return end + Lifesupport.update_lifesupport_efficiency(player) + local playerdata = get_make_playerdata(player) + if playerdata.lifesupport_efficiency and playerdata.lifesupport_efficiency > 0 then + Lifesupport.gui_open(player, playerdata) + end +end +Event.addListener(defines.events.on_player_armor_inventory_changed, Lifesupport.on_armor_changed) + +function Lifesupport.on_gui_opened(event) + local player = game.players[event.player_index] + if event.gui_type == defines.gui_type.item and event.item and event.item.type == "armor" and event.item.grid then + Lifesupport.update_lifesupport_efficiency(player) + local character = player_get_character(player) + if not character then return end + local playerdata = get_make_playerdata(player) + if playerdata.lifesupport_efficiency and playerdata.lifesupport_efficiency > 0 then + Lifesupport.gui_open(player, playerdata) + end + end +end +Event.addListener(defines.events.on_gui_opened, Lifesupport.on_gui_opened) +--[[ +function Lifesupport.on_gui_closed(event) + local player = game.players[event.player_index] + + if event.gui_type == defines.gui_type.item then + Lifesupport.gui_close(player, playerdata) + end + +end +Event.addListener(defines.events.on_gui_closed, Lifesupport.on_gui_closed) +]]-- + +function Lifesupport.gui_open(player) + if settings.get_player_settings(player)["se-never-show-lifesupport"].value then + return + end + local gui = Lifesupport.get_gui(player) + if not gui then + local root = player.gui.left.add{ + type = "frame", + name = Lifesupport.name_gui_root, + direction = "vertical", + } + + local title_table = root.add{type="table", name="title_table", column_count=2, draw_horizontal_lines=false} + title_table.style.horizontally_stretchable = true + title_table.style.column_alignments[1] = "left" + title_table.style.column_alignments[2] = "right" + + local title_frame = title_table.add{type="frame", name="title_frame", caption = {"space-exploration.lifesupport_title"}, style="informatron_title_frame"} + title_frame.style.right_padding = -5 + + local right_flow = title_table.add{type="flow", name="title_flow_right"} + local title_informatron = right_flow.add{ + type="sprite-button", + name="goto_informatron_lifesupport", + sprite = "virtual-signal/informatron", + style="informatron_close_button", + tooltip={"space-exploration.informatron-open-help"} + } + title_informatron.style.width = 28 + title_informatron.style.height = 28 + local close = right_flow.add{type="sprite-button", name=Lifesupport.name_window_close, sprite = "utility/close_white", style="informatron_close_button", tooltip={"space-exploration.close"}} + close.style.width = 28 + close.style.height = 28 + + root.add { type = "label", name = "lifesupport_environment" } + root.add { type = "label", name = "lifesupport_efficiency" } + local bar = root.add { type = "progressbar", name="lifesupport_bar", size = 100, value = 0, style = "space_platform_progressbar_fuel" } + bar.style.color = {r=70/255, g=171/255, b=1} + root.add { type = "label", name = "lifesupport_suit" } + root.add { type = "label", name = "lifesupport_reserves" } + bar.style.horizontally_stretchable = true + end +end + +function Lifesupport.gui_close(player) + local gui = Lifesupport.get_gui(player) + if gui then gui.destroy() end +end + +function Lifesupport.gui_update(player, playerdata) + local gui = Lifesupport.get_gui(player) + if not gui then return end + local character = player_get_character(player) + if not (gui and character) then Lifesupport.gui_close(player) return end + + local playerdata = get_make_playerdata(player) + Lifesupport.check_inventory_reserve_lifesupport(player) + local hazard = Lifesupport.get_current_hazard(player) + if not playerdata.lifesupport_efficiency then + Lifesupport.update_lifesupport_efficiency(player) + end + + if playerdata.has_spacesuit then + gui.lifesupport_efficiency.caption = {"space-exploration.lifesupport_efficiency_spacesuit", math.floor(playerdata.lifesupport_efficiency * 100) .. "%"} + else + gui.lifesupport_efficiency.caption = {"space-exploration.lifesupport_efficiency_no_spacesuit", math.floor(playerdata.lifesupport_efficiency * 100).. "%"} + end + + gui.lifesupport_bar.value = math.max(0, math.min(Lifesupport.lifesupport_bar_max, (playerdata.lifesupport or 0) / Lifesupport.lifesupport_bar_max)) + + + local efficiency = playerdata.lifesupport_efficiency + if efficiency > 0 and not playerdata.has_spacesuit then + local zone = Zone.from_surface(character.surface) + if zone and Zone.is_space(zone) then + efficiency = 0 + end + end + + local effective_efficiency = math.max(efficiency, Lifesupport.min_effective_efficiency) + local is_space_estimation = false + if hazard == 0 then + hazard = 1 + is_space_estimation = true + end + local hazard_use_rate_per_s = Lifesupport.lifesupport_per_second * hazard + local effective_use_rate_per_s = hazard_use_rate_per_s / effective_efficiency + + local lifesupport_suit_s = (playerdata.lifesupport or 0) / effective_use_rate_per_s + local lifesupport_duration = util.seconds_to_clock(lifesupport_suit_s) + + local lifesupport_reserve_s = (playerdata.reserve_lifesupport or 0) / effective_use_rate_per_s + local lifesupport_reserve_duration = util.seconds_to_clock(lifesupport_reserve_s) + + if is_space_estimation then + gui.lifesupport_suit.caption = { "space-exploration.lifesupport_suit_est", lifesupport_duration } + gui.lifesupport_reserves.caption = { "space-exploration.lifesupport_reserves_est", lifesupport_reserve_duration } + else + gui.lifesupport_suit.caption = { "space-exploration.lifesupport_suit", lifesupport_duration } + gui.lifesupport_reserves.caption = { "space-exploration.lifesupport_reserves", lifesupport_reserve_duration } + end + + gui.lifesupport_environment.caption = { "space-exploration.lifesupport_environment_"..playerdata.lifesupport_environment, canisters_per_hour, reserve_minutes } +end + +function Lifesupport.on_gui_click (event) + if not (event.element and event.element.valid) then return end + local element = event.element + local player = game.players[event.player_index] + + root = gui_element_or_parent(element, Lifesupport.name_gui_root) + if root then + if element.name == Lifesupport.name_window_close then + Lifesupport.gui_close(player) + elseif element.name == "goto_informatron_lifesupport" then + remote.call("informatron", "informatron_open_to_page", { + player_index = event.player_index, + interface = "space-exploration", + page_name = "lifesupport" + }) + end + end +end +Event.addListener(defines.events.on_gui_click, Lifesupport.on_gui_click) + + +return Lifesupport diff --git a/space-exploration_0.5.80/space-exploration/scripts/linked-container.lua b/space-exploration_0.5.80/space-exploration/scripts/linked-container.lua new file mode 100644 index 0000000..e5e1ad6 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/linked-container.lua @@ -0,0 +1,162 @@ + +local LinkedContainer = {} + +function LinkedContainer.tint_from_int(int) + local hue = (int / 1.61803398875)%1 + local rgb = {} + rgb[1], rgb[2], rgb[3]= util.HSVToRGB(hue*360, 1, 0.5) + return rgb +end + +function LinkedContainer.on_entity_created(event, player_initiated) + local entity + if event.entity and event.entity.valid then + entity = event.entity + end + if event.created_entity and event.created_entity.valid then + entity = event.created_entity + end + if not entity then return end + + if entity.type == "linked-container" then + + local link_id = entity.surface.index + 2 + local zone = Zone.from_surface(entity.surface) + + if zone and zone.type == "anomaly" then + link_id = (math.floor(game.tick / 3600) % 600) + 1 + end + + -- since the index of a spaceship surface is not consistent, allowing players + -- to put arcolinks on an in-transit spaceship lets them get arcolinks + -- with a link_id that they can no longer obtain anymore when the spaceship + -- lands and another surface takes that id + -- + -- to prevent this sadness, if the player or their robots try to initiate the placement of + -- an arcolink on an in-transit spaceship, we cancel the placement and display an informative message + -- + -- we must still allow scripts to place arcolinks on in-transit spaceships to allow for spaceship + -- launch/landing to work properly + if zone and zone.type == "spaceship" and player_initiated then + -- we can let the player have placed arcolinks be for the nearest surface if they're in docking range + local spaceship = Spaceship.from_own_surface_index(entity.surface.index) + if spaceship.near and spaceship.near.type == "zone" then + local nearby_zone = Zone.from_zone_index(spaceship.near.index) + local nearby_surface = Zone.get_make_surface(nearby_zone) + link_id = nearby_surface.index + 2 + else + return cancel_entity_creation(entity, event.player_index, {"space-exploration.construction-denied-linked-container-on-transient-surface"}) + end + end + + if not zone then + local vault = Ancient.vault_from_surface(entity.surface) + if vault then + link_id = 1 + end + end + + if event.link_id_override then + link_id = event.link_id_override + end + + local text_id = rendering.draw_text{ + text = link_id, + surface = entity.surface, + target = entity, + target_offset = {0, -0.75}, + color = {r=1,b=1,g=1}, + alignment = "center", + scale = 1, + only_in_alt_mode = true + } + local effect_id = rendering.draw_animation{ + animation = mod_prefix.."map-star-cloud", + surface = entity.surface, + target = entity, + target_offset = {0, -0.35}, + x_scale = 0.07, + y_scale = 0.055, + animation_speed = 1, + tint = LinkedContainer.tint_from_int(link_id) + } + + global.linked_containers = global.linked_containers or {} + global.linked_containers[entity.unit_number] = { + unit_number = entity.unit_number, + container = entity, + link_id = link_id, + text_id = text_id, + effect_id = effect_id + } + entity.link_id = link_id + end + +end + +function LinkedContainer.on_entity_created_player_cause(event) + return LinkedContainer.on_entity_created(event, true) +end +Event.addListener(defines.events.on_robot_built_entity, LinkedContainer.on_entity_created_player_cause) +Event.addListener(defines.events.on_built_entity, LinkedContainer.on_entity_created_player_cause) +function LinkedContainer.on_entity_created_nonplayer_cause(event) + return LinkedContainer.on_entity_created(event, false) +end +Event.addListener(defines.events.script_raised_built, LinkedContainer.on_entity_created_nonplayer_cause) +Event.addListener(defines.events.script_raised_revive, LinkedContainer.on_entity_created_nonplayer_cause) + +function LinkedContainer.on_entity_cloned(event) + if event.destination and event.destination.valid and event.destination.type == "linked-container" then + local link_id_override + if event.source and event.source.valid then + global.linked_containers = global.linked_containers or {} + if global.linked_containers[event.source.unit_number] then + link_id_override = global.linked_containers[event.source.unit_number].link_id + end + end + LinkedContainer.on_entity_created({entity = event.destination, link_id_override = link_id_override}) + end +end +Event.addListener(defines.events.on_entity_cloned, LinkedContainer.on_entity_cloned) + +function LinkedContainer.update() + if not global.linked_containers then return end + for unit_number, linked_container in pairs(global.linked_containers) do + if linked_container.container and linked_container.container.valid then + linked_container.container.link_id = linked_container.link_id + if not (linked_container.text_id and rendering.is_valid(linked_container.text_id)) then + linked_container.text_id = rendering.draw_text{ + text = linked_container.link_id, + surface = entity.surface, + target = entity, + target_offset = {0, -0.5}, + color = {r=1,b=1,g=1}, + alignment = "center", + scale = 1, + only_in_alt_mode = true + } + end + if not (linked_container.effect_id and rendering.is_valid(linked_container.effect_id)) then + linked_container.effect_id = rendering.draw_animation{ + animation = mod_prefix.."map-star-cloud", + surface = entity.surface, + target = entity, + target_offset = {0, -0.35}, + x_scale = 0.07, + y_scale = 0.055, + animation_speed = 1, + tint = LinkedContainer.tint_from_int(linked_container.link_id) + } + end + else + global.linked_containers[linked_container.unit_number] = nil + end + end +end + +function LinkedContainer.on_nth_tick_3600() + LinkedContainer.update() +end +Event.addListener("on_nth_tick_36000", LinkedContainer.on_nth_tick_36000) -- 10 minutes + +return LinkedContainer diff --git a/space-exploration_0.5.80/space-exploration/scripts/location.lua b/space-exploration_0.5.80/space-exploration/scripts/location.lua new file mode 100644 index 0000000..3dd6599 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/location.lua @@ -0,0 +1,148 @@ +Location = {} + +function Location.from_reference(location_reference) + if not location_reference then return nil end + if location_reference.type == "zone" then + return { + type = location_reference.type, + zone = Zone.from_zone_index(location_reference.index), + position = location_reference.position, + name = location_reference.name + } + end + if location_reference.type == "spaceship" then + local position = location_reference.position + local spaceship = Spaceship.from_index(location_reference.index) + if not spaceship then return nil end + local position = location_reference.position + if position and spaceship.console and spaceship.console.valid then + position = Util.vectors_add(location_reference.position, spaceship.console.position) + end + return { + type = location_reference.type, + zone = spaceship, + position = position, + name = location_reference.name + } + end + if location_reference.type == "system" then + return { + type = location_reference.type, + zone = Zone.from_zone_index(location_reference.index), + position = location_reference.position, + name = location_reference.name, + } + end + if location_reference.type == "interstellar" then + return { + type = location_reference.type, + position = location_reference.position, + name = location_reference.name, + } + end +end + +function Location.to_localised_string(location_reference) + if not location_reference then return nil end + local base + if location_reference.type == "interstellar" then + base = {"space-exploration.interstellar-map"} + else + local location = Location.from_reference(location_reference) + if not location then return nil end + if location.type == "system" then + base = { "space-exploration.solar-system", location.zone.name } + else + base = location.zone.name + end + end + if location_reference.name and location_reference.name ~= "" then + return { "space-exploration.remote-view-history-item_named", base, location_reference.name } + end + return base +end + +-- zone, spaceship, or starmap +function Location.new_reference_from_player(player) + if not player then return nil end + local zone = Zone.from_surface(player.surface) + if zone then + return Location.make_reference(zone, player.position) + end + -- maybe starmap + local playerdata = get_make_playerdata(player) + if playerdata.remote_view_active_map then + if playerdata.remote_view_active_map.type == "interstellar" then + return { + type = "interstellar", + position = player.position + } + elseif playerdata.remote_view_active_map.type == "system" then + zone = MapView.get_current_system(player) + return { + type = "system", + index = zone.index, + position = player.position + } + end + end +end + +-- zone or spaceship, +function Location.make_reference(zone, position, name) + if not zone then return nil end + local location_reference = {index = zone.index, position = position, name = name} + if zone.type == "spaceship" then + location_reference.type = "spaceship" + if position and zone.console and zone.console.valid then + location_reference.position = Util.vectors_delta(zone.console.position, position) + end + else + location_reference.type = "zone" + end + return location_reference +end + +function Location.update_reference_position(location_reference, zone, position) + if not location_reference then + location_reference = {} + end + if not zone then return nil end + location_reference.index = zone.index + location_reference.position = position + if zone.type == "spaceship" then + location_reference.type = "spaceship" + if position and zone.console and zone.console.valid then + location_reference.position = Util.vectors_delta(zone.console.position, position) + end + else + location_reference.type = "zone" + end + return location_reference +end + +function Location.update_reference_name(location_reference, name) + if not location_reference then + location_reference = {} + end + location_reference.name = name + return location_reference +end + +function Location.goto_reference(player, location_reference, freeze_history) + local location = Location.from_reference(location_reference) -- expand zone or spaceship connection + if not location then return end + if location_reference.type == "zone" or location_reference.type == "spaceship" then + RemoteView.start(player, location.zone, location.position, location.name, freeze_history) + elseif location_reference.type == "interstellar" then + MapView.start_interstellar_map(player, freeze_history) + if location_reference.position then + player.teleport(location_reference.position) + end + elseif location_reference.type == "system" then + MapView.start_system_map(player, location.zone, freeze_history) + player.teleport(location_reference.position) + end +end + +return Location diff --git a/space-exploration_0.5.80/space-exploration/scripts/log.lua b/space-exploration_0.5.80/space-exploration/scripts/log.lua new file mode 100644 index 0000000..75c672b --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/log.lua @@ -0,0 +1,66 @@ +Log = {} + +Log.print_trace = is_debug_mode -- does trace() do game.print()? +Log.log_trace = is_debug_mode -- does trace() do log()? +Log.debug_logs = is_debug_mode -- does debug_log() do log()? +Log.debug_big_logs = is_debug_mode -- the big file oututs (astro) + +function Log.debug_log(message, rel) -- use rel to filter with Log.print_trace_filter[] later + if Log.debug_logs then log(message) end +end + +function Log.trace(message, tags) -- use rel to filter with Log.print_trace_filter[] later + if Log.log_trace then log(message) end + if Log.print_trace then game.print({"", "Debug: ", message}) end +end + +function Log.log_global() + game.write_file("space-exploration.global.lua", serpent.dump(global, {comment=false, sparse=true, indent = "\t", nocode=true, name="global"}), false) +end + +function Log.log_universe() + game.write_file("space-exploration.universe.lua", serpent.dump(global.universe, {comment=false, sparse=true, indent = "\t", nocode=true, name="universe"}), false) +end + +function Log.log_spaceships() + game.write_file("space-exploration.spaceships.lua", serpent.dump(global.spaceships, {comment=false, sparse=true, indent = "\t", nocode=true, name="spaceships"}), false) +end + +function Log.log_universe_simplified() + local string = "" + for s, star in pairs(global.universe.stars) do + string = string .. star.name .. " ("..star.stellar_position.x.." "..star.stellar_position.y..")\n" + for p, planet in pairs(star.children) do + if planet.orbit then + string = string .. star.name .. " > "..planet.name ..": ".. (planet.resources and Util.values_to_string(planet.resources) or "").. + ". Orbit: "..(planet.orbit.resources and Util.values_to_string(planet.orbit.resources) or "") .."\n" + else + string = string .. star.name .. " > "..planet.name ..": ".. (planet.resources and Util.values_to_string(planet.resources) or "") .."\n" + end + if planet.children then + for m, moon in pairs(planet.children) do + string = string .. star.name .. " > "..planet.name .. " > "..moon.name ..": ".. (moon.resources and Util.values_to_string(moon.resources) or "") .. + ". Orbit: "..(moon.orbit.resources and Util.values_to_string(moon.orbit.resources) or "") .."\n" + end + end + end + end + for z, zone in pairs(global.universe.space_zones) do + string = string .. zone.name .. " ("..zone.stellar_position.x.." "..zone.stellar_position.y..") "..(zone.resources and Util.values_to_string(zone.resources) or "").."\n" + end + game.write_file("space-exploration.universe_simplified.lua", string, false) +end + +function Log.log_forces() + game.write_file("space-exploration.forces.lua", serpent.dump(global.forces, {comment=false, sparse=true, indent = "\t", nocode=true, name="forces"}), false) +end + +function Log.log_map_gen() + local map_gens = {} + for surface_name, surface in pairs(game.surfaces) do + map_gens[surface_name] = surface.map_gen_settings + end + game.write_file("space-exploration.map_gen.lua", serpent.dump(map_gens, {comment=false, sparse=true, indent = "\t", nocode=true, name="map_gens"}), false) +end + +return Log diff --git a/space-exploration_0.5.80/space-exploration/scripts/map-view.lua b/space-exploration_0.5.80/space-exploration/scripts/map-view.lua new file mode 100644 index 0000000..26c5763 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/map-view.lua @@ -0,0 +1,1938 @@ +--[[ +Map View. + +Is allows user to take a look at universe maps. Requires RemoteView to work. +Interconnects with Zonelist too. + +Two maps are currently available: + Interstellar map + System map +]]-- + +local InterstellarMap = {} +local SystemMap = {} +local MapObjects = {} + +local MapView = { + InterstellarMap = InterstellarMap, + SystemMap = SystemMap, + MapObjects = MapObjects +} + +MapView.tech_spaceship = mod_prefix .. "spaceship" + +-- constants +MapView.name_surface_prefix = "starmap-" +MapView.name_gui_zone_details_root = mod_prefix.."map-view-zone-details" +MapView.name_gui_zone_title_table = mod_prefix.."map-view-zone-title-table" +MapView.name_details_root = "remote-view-details-root" +MapView.name_gui_zone_prefix = "zone_" +MapView.name_gui_spaceship_prefix = "spaceship_" + +MapView.name_toggles = "map_view_toggles" +MapView.name_button_show_resources = "show_resources" +MapView.name_button_show_stats = "show_stats" +MapView.name_button_show_anchor_info = "show_anchor_info" +MapView.name_button_show_danger_zones = "show_danger_zones" +MapView.name_button_overhead_interstellar = mod_prefix .. "overhead_interstellar" +MapView.name_setting_overhead_interstellar = mod_prefix .. "show-overhead-button-interstellar-map" + +MapView.name_clickable_interstellar_star = mod_prefix .. "interstellar-map-star" +MapView.name_clickable_interstellar_asteroid_field = mod_prefix .. "interstellar-map-asteroid-field" +MapView.name_clickable_interstellar_spaceship = mod_prefix .. "interstellar-map-spaceship" +MapView.name_clickable_system_star = mod_prefix .. "system-map-star" +MapView.name_clickable_system_planet_prefix = mod_prefix .. "system-map-planet" +MapView.name_clickable_system_moon_prefix = mod_prefix .. "system-map-moon" +MapView.name_clickable_system_asteroid_belt = mod_prefix .. "system-map-asteroid-belt" +MapView.name_clickable_system_spaceship = mod_prefix .. "system-map-spaceship" +MapView.name_clickable_system_interstellar_space = mod_prefix .. "system-map-interstellar-space" +MapView.clickable_steps = 20 -- the number of increments for clickable scale + + +MapView.interstellar_map = "interstellar" -- interstellar space +MapView.system_map = "system" -- planetary system + +InterstellarMap.scale = 1 +InterstellarMap.distance_scale = 0.25 * InterstellarMap.scale + +InterstellarMap.star_scale = InterstellarMap.scale +InterstellarMap.asteroid_scale = InterstellarMap.scale +InterstellarMap.asteroid_scale_scatter = InterstellarMap.scale +InterstellarMap.spaceship_scale = 1 * InterstellarMap.scale + +InterstellarMap.infobox_scale = 1 * InterstellarMap.scale + +InterstellarMap.text_scale = 1 * InterstellarMap.scale +InterstellarMap.star_text_scale = 2.5 * InterstellarMap.text_scale +InterstellarMap.asteroid_field_text_scale = 2 * InterstellarMap.text_scale + +InterstellarMap.spaceship_text_scale = 0.5 * InterstellarMap.text_scale +InterstellarMap.spaceship_text_offset = Util.vector_multiply({ x = -0.2, y = -0.2}, InterstellarMap.spaceship_scale) + +InterstellarMap.danger_zone_from_delta_v_scale = 6.0 / 10350.0 -- magic number dictates how big the danger zone thickness should be from the delta_v used to indicate being near the field +InterstellarMap.field_danger_zone_circle_radius_scale = SpaceshipObstacles.near_enough_by_zone_type["asteroid-field"] * InterstellarMap.danger_zone_from_delta_v_scale * InterstellarMap.scale + +-- update coefficients here to adjust solar system map scale and element sizes +-- NOTE: if you change graphics please adjust *_graphics_scale constants in RemoteView.render_solarmap_* functions first +SystemMap.scale = 1 +SystemMap.distance_scale = 12 * SystemMap.scale -- star gravity well scale +SystemMap.star_scale = 16 * SystemMap.scale +SystemMap.planet_scale = 4 * SystemMap.scale +SystemMap.planet_min_multiplier = 0.05 +SystemMap.belt_scale = 1 * SystemMap.scale +SystemMap.spaceship_scale = 0.4 * SystemMap.scale + +-- draw_line(width=) in pixels +-- draw_arc(min_radius,max_radius=) in tiles +-- these thickness constants are in tiles so you need to multiply it by 32 if used in draw_line() +SystemMap.line_thickness_scale = 0.08 * SystemMap.scale +SystemMap.arc_thickness_scale = 0.08 * SystemMap.scale +SystemMap.belt_arc_thickness_scale = 0.05 * SystemMap.scale +SystemMap.danger_zone_from_delta_v_scale = 5.0 / 207.0 -- magic number dictates how big the danger zone thickness should be from the delta_v used to indicate being near the belt +SystemMap.belt_danger_zone_arc_thickness_scale = SpaceshipObstacles.near_enough_by_zone_type["asteroid-belt"] * SystemMap.danger_zone_from_delta_v_scale * SystemMap.scale +SystemMap.planet_offset = { x = 0, y = 0} +SystemMap.belt_offset = { x = 2, y = 0} + +SystemMap.infobox_scale = 1 * SystemMap.scale +SystemMap.infobox_gradient_tint = { r = 128, b = 128, g = 128, a = 255 } + +SystemMap.text_scale = 4 * SystemMap.scale +SystemMap.star_text_scale = 1.2 * SystemMap.text_scale +SystemMap.planet_text_scale = 1 * SystemMap.text_scale +SystemMap.orbit_text_scale = 0.8 * SystemMap.text_scale +SystemMap.belt_text_scale = 1 * SystemMap.text_scale +SystemMap.landed_spaceship_text_scale = 0.5 * SystemMap.text_scale + +SystemMap.spaceship_text_scale = 0.5 * SystemMap.text_scale + +SystemMap.star_text_offset = Util.vector_multiply({ x = 2, y = 0.5}, SystemMap.scale) +SystemMap.spaceship_text_offset = Util.vector_multiply({ x = -0.2, y = -0.2}, SystemMap.spaceship_scale) + + +function MapView.player_is_in_interstellar_map(player) + local playerdata = get_make_playerdata(player) + if playerdata.remote_view_active_map and playerdata.remote_view_active_map.type == "interstellar" then + return true + end + return false +end + +function MapView.get_current_system(player) + local playerdata = get_make_playerdata(player) + if playerdata.remote_view_active_map and playerdata.remote_view_active_map.type == MapView.system_map then + return playerdata.remote_view_active_map.zone + end + return nil +end + +function MapView.gui_get_element_name_from_zone(zone) + if zone.type == "spaceship" then + return MapView.name_gui_spaceship_prefix .. zone.index + else + return MapView.name_gui_zone_prefix .. zone.index + end +end + +function MapView.gui_get_zone_from_element(root) + if root then + local zone_index = util.parse_with_prefix(root.name, MapView.name_gui_zone_prefix) + if zone_index then + return Zone.from_zone_index(tonumber(zone_index)) + end + local spaceship_index = util.parse_with_prefix(root.name, MapView.name_gui_spaceship_prefix) + if spaceship_index then + return Spaceship.from_index(tonumber(spaceship_index)) + end + end +end + + + +function MapView.get_surface_name(player) + return MapView.name_surface_prefix .. player.index +end + +function MapView.get_make_surface(player) + local surface_name = MapView.get_surface_name(player) + + if not game.surfaces[surface_name] then + local mapgen_settings = { + autoplace_controls = { + ["planet-size"] = { frequency = 1/1000, size = 1 } + } + } + mapgen_settings.autoplace_settings={ + ["decorative"]={ + treat_missing_as_default=false, + settings={ + } + }, + ["entity"]={ + treat_missing_as_default=false, + settings={ + } + }, + ["tile"]={ + treat_missing_as_default=false, + settings={ + ["se-space"]={} + } + }, + } + mapgen_settings.property_expression_names = {} + mapgen_settings.property_expression_names["tile:out-of-map:probability"] = math.huge + local surface = game.create_surface(surface_name, mapgen_settings) + surface.daytime = 0 + surface.freeze_daytime = true + surface.show_clouds = false + end + + return game.surfaces[surface_name] +end + +function MapView.starmap_view_cycle(player) + -- Cycle through view modes. + -- Open solar system map if in a system. + -- Open interstellar map if not in a system or in a system map. + -- Close the starmaps if in an interstellar map (go back to last-viewed location) + if not MapView.player_is_in_interstellar_map(player) then + if MapView.get_current_system(player) then + return MapView.start_interstellar_map(player) + else + local star = Zone.from_surface(player.surface) + if star then + if star.type == "spaceship" then + if star.star_gravity_well and star.star_gravity_well > 0 then + star = Zone.get_star_from_position(star) + end + else + star = Zone.find_parent_star(star) + end + end + if star then + return MapView.start_system_map(player, star) + else + return MapView.start_interstellar_map(player) + end + end + else + local playerdata = get_make_playerdata(player) + if playerdata.location_history.references and playerdata.location_history.references then + for i = #playerdata.location_history.references, 1, -1 do + if playerdata.location_history.references[i] + and playerdata.location_history.references[i].type ~= "system" + and playerdata.location_history.references[i].type ~= "interstellar" then + RemoteView.start(player, playerdata.location_history.references[i].zone) + end + end + end + -- if history was cleared + local character = player_get_character(player) + if character then + local zone = Zone.from_surface(character.surface) + if zone then + return RemoteView.start(player, zone, character.position) + end + end + end + RemoteView.stop(player) +end + +function MapView.start_interstellar_map(player, freeze_history) + if not freeze_history then + RemoteView.add_history(player, Location.new_reference_from_player(player)) + end + MapView.internal_start_map(player, { + type = MapView.interstellar_map + }) + MapView.update_overhead_button(player.index) + if not freeze_history then + RemoteView.add_history(player, Location.new_reference_from_player(player)) + end +end + +function MapView.start_system_map(player, star, freeze_history) + if not freeze_history then + RemoteView.add_history(player, Location.new_reference_from_player(player)) + end + if (not star) or star.type ~= "star" then + -- fallback if star is invalid + MapView.start_interstellar_map(player) + return + end + + MapView.internal_start_map(player, { + type = MapView.system_map, + zone = star + }) + if not freeze_history then + RemoteView.add_history(player, Location.new_reference_from_player(player)) + end +end + +function MapView.internal_restart_map(player) + local playerdata = get_make_playerdata(player) + + local previous_current_zone = playerdata.remote_view_current_zone + local previous_active_map = playerdata.remote_view_active_map + + local from_zone + if previous_active_map and previous_active_map.zone then + from_zone = previous_active_map.zone + else + from_zone = previous_current_zone or Zone.from_surface(player.surface) + end + local map_data = previous_active_map + + MapView.stop_map(player) + playerdata.remote_view_active_map = map_data + playerdata.map_view_objects = {} + playerdata.map_view_entities = {} + + local map_type = map_data.type + if map_type == MapView.interstellar_map then + InterstellarMap.start(player, from_zone, true) + InterstellarMap.render(player) + elseif map_type == MapView.system_map then + SystemMap.start(player, map_data.zone, from_zone, true) + SystemMap.render(player, map_data.zone) + end + + RemoteView.gui_update(player) +end + +function MapView.internal_start_map(player, map_data) + local playerdata = get_make_playerdata(player) + -- need to preserve it as RemoteView.start() clears it + local previous_current_zone = playerdata.remote_view_current_zone + local previous_active_map = playerdata.remote_view_active_map + + RemoteView.start(player, nil, nil, nil, true) + if player.character or not(playerdata.remote_view_active) then return end -- failed + + local from_zone + if previous_active_map and previous_active_map.zone then + from_zone = previous_active_map.zone + else + from_zone = previous_current_zone or Zone.from_surface(player.surface) + end + + MapView.stop_map(player) + playerdata.remote_view_active_map = map_data + playerdata.map_view_objects = {} + playerdata.map_view_entities = {} + + local map_type = map_data.type + if map_type == MapView.interstellar_map then + InterstellarMap.start(player, from_zone) + InterstellarMap.render(player) + elseif map_type == MapView.system_map then + SystemMap.start(player, map_data.zone, from_zone) + SystemMap.render(player, map_data.zone) + end + + RemoteView.gui_update(player) +end + +function MapView.stop_map (player) + local playerdata = get_make_playerdata(player) + playerdata.remote_view_active_map = nil + + MapView.clear_map(player) + MapView.gui_close(player) +end + +function MapView.clear_map(player) + -- delete the starmap graphics for this player + local playerdata = get_make_playerdata(player) + if playerdata.map_view_objects then + for _, object_id in pairs(playerdata.map_view_objects) do + rendering.destroy(object_id) + end + end + playerdata.map_view_objects = nil + + local surface = game.surfaces[MapView.get_surface_name(player)] + if surface then + for _, entity in pairs(surface.find_entities_filtered{}) do + entity.destroy() + end + end + playerdata.map_view_entities = nil +end + + + +--[[ + + INTERSTELLAR MAP + +]]-- + +function InterstellarMap.start(player, from_zone, no_teleport) + local start_stellar_position = {x = 0, y = 0} + if from_zone then + start_stellar_position = Zone.get_stellar_position(from_zone) + end + local surface = MapView.get_make_surface(player) + if not no_teleport then + player.teleport(InterstellarMap.get_zone_position({stellar_position = start_stellar_position}), surface) + player.zoom = 0.5 + end +end + +function InterstellarMap.render(player) + local surface = MapView.get_make_surface(player) + local playerdata = get_make_playerdata(player) + local spaceships = InterstellarMap.get_spaceship_index(player) + + for _, star in pairs(global.universe.stars) do + InterstellarMap.render_star(player, surface, star, playerdata, spaceships.bound) + end + for _, zone in pairs(global.universe.space_zones) do + if Zone.is_visible_to_force(zone, player.force.name) then + InterstellarMap.render_asteroid_field(player, surface, zone, playerdata, spaceships.bound) + end + end + + for _, spaceship in pairs(spaceships.flying) do + InterstellarMap.render_spaceship(player, surface, spaceship, playerdata) + end + +end + +function InterstellarMap.get_zone_position(zone) + return Util.vector_multiply(zone.stellar_position, InterstellarMap.distance_scale) +end + +function InterstellarMap.get_spaceship_index(player) + local flying = {} + local bound = {} + for _, spaceship in pairs(global.spaceships) do + if spaceship.force_name == player.force.name then + if spaceship.space_distortion < 0.05 then + if spaceship.near_stellar_object then + bound[spaceship.near_stellar_object.index] = bound[spaceship.near_stellar_object.index] or {} + table.insert(bound[spaceship.near_stellar_object.index], spaceship) + else + table.insert(flying, spaceship) + end + end + end + end + + return {flying = flying, bound = bound} +end + +function InterstellarMap.render_star(player, surface, star, playerdata, spaceships) + local map_object = MapObjects.create(player, surface, + star, MapView.name_clickable_interstellar_star, + InterstellarMap.get_zone_position(star)) + map_object.command = "system" + + local object_id = rendering.draw_sprite{ + sprite = mod_prefix.."map-star", + surface = surface, + target = map_object.entity, + players = {player}, + x_scale = 0.1 * InterstellarMap.star_scale, + y_scale = 0.1 * InterstellarMap.star_scale, + render_layer = "decals",--28, -- just above decals + } + table.insert(playerdata.map_view_objects, object_id) + local object_id = rendering.draw_animation{ + animation = mod_prefix.."map-star-cloud", + surface = surface, + target = map_object.entity, + players = {player}, + x_scale = 0.1 * InterstellarMap.star_scale, + y_scale = 0.1 * InterstellarMap.star_scale, + animation_speed = -1, + tint = {r=255/255, g=100/255, b=5/255} + } + table.insert(playerdata.map_view_objects, object_id) + + MapView.render_zone_caption(player, map_object, star, spaceships) +end + +function InterstellarMap.render_asteroid_field(player, surface, zone, playerdata, spaceships) + local map_object = MapObjects.create(player, surface, + zone, MapView.name_clickable_interstellar_asteroid_field, + InterstellarMap.get_zone_position(zone)) + map_object.command = "details" + + local primary_resource = zone.primary_resource + local tint = {r=0,g=0,b=0,a=0} + for _, entity_prototype in pairs(game.entity_prototypes) do + if entity_prototype.name == primary_resource then + tint = entity_prototype.map_color + end + end + + local object_id = rendering.draw_sprite{ + sprite = mod_prefix.."map-asteroid-field-scatter", + surface = surface, + target = map_object.entity, + x_scale = 0.3 * InterstellarMap.asteroid_scale_scatter, + y_scale = 0.3 * InterstellarMap.asteroid_scale_scatter, + players = {player} + } + table.insert(playerdata.map_view_objects, object_id) + local object_id = rendering.draw_sprite{ + sprite = mod_prefix.."map-asteroid-field-scatter-detail", + surface = surface, + target = map_object.entity, + x_scale = 0.3 * InterstellarMap.asteroid_scale_scatter, + y_scale = 0.3 * InterstellarMap.asteroid_scale_scatter, + players = {player}, + tint = tint + } + table.insert(playerdata.map_view_objects, object_id) + local infobox_settings = MapView.get_settings(player) + if infobox_settings.show_danger_zones then + local object_id = rendering.draw_circle{ + color = {r=48, g=0, b=0, a=48}, + radius = InterstellarMap.field_danger_zone_circle_radius_scale, + filled = true, + target = map_object.entity, + surface = surface, + players = {player}, + draw_on_ground = true + } + table.insert(playerdata.map_view_objects, object_id) + end + MapView.render_zone_caption(player, map_object, zone, spaceships) +end + +function InterstellarMap.render_spaceship(player, surface, spaceship, playerdata) + local map_object = MapObjects.create(player, surface, + spaceship, MapView.name_clickable_interstellar_spaceship, + InterstellarMap.get_zone_position(spaceship)) + map_object.command = "details" + + local object_id = rendering.draw_sprite{ + sprite = mod_prefix.."map-spaceship", + surface = surface, + target = map_object.entity, + orientation = MapView.get_spaceship_orientation(player, spaceship), + x_scale = 0.0625 * InterstellarMap.spaceship_scale, + y_scale = 0.0625 * InterstellarMap.spaceship_scale, + players = {player}, + } + table.insert(playerdata.map_view_objects, object_id) + map_object.main_objects = {object_id} + + MapView.render_spaceship_caption(player, map_object, spaceship, nil) +end + +--[[ + + SYSTEM MAP + +]]-- + +function SystemMap.start(player, star, from_zone, no_teleport) + local start_solar_position = { x = 0, y = 0 } + if from_zone then + local star_stellar_position = star.stellar_position + local from_zone_stellar_position = Zone.get_stellar_position(from_zone) + if from_zone_stellar_position.x == star_stellar_position.x and from_zone_stellar_position.y == star_stellar_position.y then + start_solar_position = SystemMap.get_zone_position(star, from_zone) + end + end + + local surface = MapView.get_make_surface(player) + if not no_teleport then + player.teleport(start_solar_position, surface) + player.zoom = 0.4 + end +end + +function SystemMap.render(player, star) + local surface = MapView.get_make_surface(player) + local playerdata = get_make_playerdata(player) + local spaceships = SystemMap.get_spaceship_index(player, star) + + -- horizontal line showing the star gravity well + local object_id = rendering.draw_line{ + color = {r=128, g=128, b=128, a=255}, + width = 32 * SystemMap.line_thickness_scale, + from = SystemMap.get_zone_position(star, { + star_gravity_well = star.star_gravity_well, + planet_gravity_well = Zone.get_planet_gravity_well(star.orbit) + }), + to = SystemMap.get_zone_position(star, { star_gravity_well = 0}), + surface = surface, + players = {player}, + draw_on_ground = true + } + table.insert(playerdata.map_view_objects, object_id) + + SystemMap.render_star(player, surface, star, playerdata, spaceships.bound) + + for _, planet_or_belt in pairs(star.children) do + if Zone.is_visible_to_force(planet_or_belt, player.force.name) then + if planet_or_belt.type == "planet" then + local position_data = SystemMap.get_zone_position_data(star, planet_or_belt) + local solar_distance = position_data.y + * SystemMap.distance_scale + local object_id = rendering.draw_arc{ + color = {r=128, g=128, b=128, a=255}, + max_radius = (solar_distance + 0.5 * SystemMap.arc_thickness_scale), + min_radius = (solar_distance - 0.5 * SystemMap.arc_thickness_scale), + start_angle = 0.5 * Util.pi - 2 * Util.pi * position_data.orientation, + angle = 2 * Util.pi * position_data.orientation, + target = {x=0, y=0}, + surface = surface, + players = {player}, + draw_on_ground = true + } + table.insert(playerdata.map_view_objects, object_id) + + SystemMap.render_planet_or_moon(player, surface, star, planet_or_belt, playerdata, spaceships.bound) + + for _, moon in pairs(planet_or_belt.children) do + SystemMap.render_planet_or_moon(player, surface, star, moon, playerdata, spaceships.bound) + end + + elseif planet_or_belt.type == "asteroid-belt" then + local position_data = SystemMap.get_zone_position_data(star, planet_or_belt) + local solar_distance = position_data.y + * SystemMap.distance_scale + local primary_resource = planet_or_belt.primary_resource + local tint = {r=0,g=0,b=0,a=0} + for _, entity_prototype in pairs(game.entity_prototypes) do + if entity_prototype.name == primary_resource then + tint = entity_prototype.map_color + end + end + + local belt_graphics_scale = 0.5 + for i = 1, 36 do + local object_id = rendering.draw_arc{ + color = {r=16, g=16, b=16, a=16}, + max_radius = (solar_distance + 2 * SystemMap.belt_arc_thickness_scale), + min_radius = (solar_distance - 2 * SystemMap.belt_arc_thickness_scale), + start_angle = (i - 1) / 36 * 2 * Util.pi, + angle = (0.9) / 36 * 2 * Util.pi, + target = {x=0, y=0}, + surface = surface, + players = {player}, + draw_on_ground = true + } + table.insert(playerdata.map_view_objects, object_id) + local object_id = rendering.draw_arc{ + color = {r=32, g=32, b=32, a=32}, + max_radius = (solar_distance + SystemMap.belt_arc_thickness_scale), + min_radius = (solar_distance - SystemMap.belt_arc_thickness_scale), + start_angle = (i - 1 + 0.01) / 36 * 2 * Util.pi, + angle = (0.9 - 2 * 0.01) / 36 * 2 * Util.pi, + target = {x=0, y=0}, + surface = surface, + players = {player}, + draw_on_ground = true + } + table.insert(playerdata.map_view_objects, object_id) + end + + -- asteroid belt scatter graphics + local num_partitions = 3.2 * 36 * solar_distance / 133 -- 133 is solar distance for first ring + for i = 1, num_partitions+1 do + local angle = (i - 1) / num_partitions * 2 * Util.pi + local orientation = (i - 1) / num_partitions - 0.25 -- -0.25 rotates by 90 degrees + local object_id = rendering.draw_sprite{ + sprite = mod_prefix.."map-asteroid-belt-scatter", + x_scale = belt_graphics_scale * SystemMap.belt_scale, + y_scale = belt_graphics_scale * SystemMap.belt_scale, + orientation = orientation, + target = {x=math.cos(angle)*solar_distance, y=math.sin(angle)*solar_distance}, + surface = surface, + players = {player}, + draw_on_ground = true, + } + table.insert(playerdata.map_view_objects, object_id) + local object_id = rendering.draw_sprite{ + sprite = mod_prefix.."map-asteroid-belt-scatter-detail", + x_scale = belt_graphics_scale * SystemMap.belt_scale, + y_scale = belt_graphics_scale * SystemMap.belt_scale, + orientation = orientation, + target = {x=math.cos(angle)*solar_distance, y=math.sin(angle)*solar_distance}, + surface = surface, + players = {player}, + draw_on_ground = true, + tint = tint + } + table.insert(playerdata.map_view_objects, object_id) + end + + local infobox_settings = MapView.get_settings(player) + if infobox_settings.show_danger_zones then + local object_id = rendering.draw_arc{ + color = {r=48, g=0, b=0, a=48}, + max_radius = (solar_distance + SystemMap.belt_danger_zone_arc_thickness_scale), + min_radius = (solar_distance - SystemMap.belt_danger_zone_arc_thickness_scale), + start_angle = 0, + angle = 2 * Util.pi, + target = {x=0, y=0}, + surface = surface, + players = {player}, + draw_on_ground = true + } + table.insert(playerdata.map_view_objects, object_id) + end + SystemMap.render_asteroid_belt(player, surface, star, planet_or_belt, playerdata, spaceships.bound) + end + end + end + + for _, spaceship in pairs(spaceships.flying) do + SystemMap.render_spaceship(player, surface, star, spaceship, playerdata) + end + + SystemMap.render_interstellar_space(player, surface, star, playerdata) + +end + +function SystemMap.get_rendered_star_size(star) + local star_size = star.star_gravity_well / 26 -- 26 seems to be around max star_gravity_well + return star_size * SystemMap.star_scale +end + +function SystemMap.get_zone_position_data(star, zone) + -- zone may be just a table { star_gravity_well = ..., planet_gravity_well = ... } + if zone and zone.type == "orbit" then + zone = zone.parent + end + local position_data = { + y = (SystemMap.get_rendered_star_size(star) + SystemMap.star_text_offset.x) + / SystemMap.distance_scale + + star.star_gravity_well - zone.star_gravity_well, + x = 0, + orientation = 0 + } + if zone.planet_gravity_well and zone.planet_gravity_well > 0 then + position_data.x = zone.planet_gravity_well * Zone.travel_cost_planet_gravity / Zone.travel_cost_star_gravity + position_data.orientation = position_data.y and (position_data.x / (2 * Util.pi * position_data.y)) or 0 + end + + return position_data +end + +function SystemMap.get_zone_position(star, zone) + local position_data = SystemMap.get_zone_position_data(star, zone) + + return Util.vector_multiply( + Util.rotate_vector(- position_data.orientation, + {x = 0, y = position_data.y} + ), + SystemMap.distance_scale) +end + +function SystemMap.get_spaceship_index(player, star) + local flying = {} + local bound = {} + for _, spaceship in pairs(global.spaceships) do + if spaceship.force_name == player.force.name then + if spaceship.space_distortion < 0.05 then + if spaceship.near_stellar_object and spaceship.near_stellar_object.index == star.index then + if spaceship.zone_index then + bound[spaceship.zone_index] = bound[spaceship.zone_index] or {} + table.insert(bound[spaceship.zone_index], spaceship) + else + table.insert(flying, spaceship) + end + end + end + end + end + + return {flying = flying, bound = bound} +end + +function SystemMap.render_star(player, surface, star, playerdata, spaceships) + local star_rendered_size = SystemMap.get_rendered_star_size(star) + + local map_object = MapObjects.create(player, surface, + star, MapView.name_clickable_system_star, { x = 0, y = 0}) + map_object.command = "details" + + local star_graphics_scale = 1 / 8 -- update if changing sprite + local object_id = rendering.draw_sprite{ + sprite = mod_prefix.."map-star", -- update star_graphics_scale above if you change it + surface = surface, + target = map_object.entity, + players = {player}, + x_scale = star_graphics_scale * star_rendered_size, + y_scale = star_graphics_scale * star_rendered_size, + render_layer = "decals"-- 28, -- just above decals + } + table.insert(playerdata.map_view_objects, object_id) + local object_id = rendering.draw_animation{ + animation = mod_prefix.."map-star-cloud", + surface = surface, + target = map_object.entity, + players = {player}, + x_scale = star_graphics_scale * star_rendered_size, + y_scale = star_graphics_scale * star_rendered_size, + animation_speed = -1, + tint = {r=255/255, g=100/255, b=5/255} + } + table.insert(playerdata.map_view_objects, object_id) + + MapView.render_zone_caption(player, map_object, star, spaceships) +end + +function SystemMap.render_planet_or_moon(player, surface, star, zone, playerdata, spaceships) + if Zone.is_visible_to_force(zone, player.force.name) then + local zone_size = zone.radius / Universe.planet_max_radius -- 0..1 + local zone_rendered_size = (SystemMap.planet_min_multiplier + (1 - SystemMap.planet_min_multiplier) * zone_size) * SystemMap.planet_scale + local solar_position = SystemMap.get_zone_position(star, zone) + solar_position = Util.vectors_add(solar_position, SystemMap.planet_offset) + + local entity_name_prefix = MapView.name_clickable_system_planet_prefix + if zone.type == "moon" then + entity_name_prefix = MapView.name_clickable_system_moon_prefix + end + local entity_name_suffix = "-"..math.ceil(MapView.clickable_steps * zone.radius / Universe.planet_max_radius) + + local map_object = MapObjects.create(player, surface, + zone, entity_name_prefix .. entity_name_suffix, solar_position) + map_object.command = "details" + + local planet_graphics_scale = 1 / 8 -- update if changing sprite + local base_render_layer = 133 + + local object_id = rendering.draw_sprite{ -- black out the star orbit like to make planets stand out more + sprite = mod_prefix.."map-planet", + surface = surface, + target = map_object.entity, + players = {player}, + x_scale = planet_graphics_scale * zone_rendered_size + 0.01 * SystemMap.planet_scale, + y_scale = planet_graphics_scale * zone_rendered_size + 0.01 * SystemMap.planet_scale, + render_layer = "higher-object-under", -- base_render_layer-1, + tint = {r=0,b=0,g=0,a=1} + } + table.insert(playerdata.map_view_objects, object_id) + + local tint = {r=1, b=1, g=1} + if (not zone.tags) or (Util.table_contains(zone.tags, "aux_very_low") or Util.table_contains(zone.tags, "aux_low")) then + tint = {r=1, b=0.8, g=0.9} + end + if zone.tags and (Util.table_contains(zone.tags, "aux_very_high") or Util.table_contains(zone.tags, "aux_high")) then + tint = {r=1, b=1, g=0.9} + end + local object_id = rendering.draw_sprite{ + sprite = mod_prefix.."map-planet", + surface = surface, + target = map_object.entity, + players = {player}, + x_scale = planet_graphics_scale * zone_rendered_size, + y_scale = planet_graphics_scale * zone_rendered_size, + render_layer = "higher-object-above",--base_render_layer, + tint = tint + } + table.insert(playerdata.map_view_objects, object_id) + + if not (zone.tags and Util.table_contains(zone.tags, "moisture_none")) then + local tint = {r=1, b=1, g=1} + if (not zone.tags) or (Util.table_contains(zone.tags, "aux_very_low") or Util.table_contains(zone.tags, "aux_low")) then + tint = {r=0.5, b=0.5, g=1} + end + if zone.tags and (Util.table_contains(zone.tags, "aux_very_high") or Util.table_contains(zone.tags, "aux_high")) then + tint = {r=1, b=1, g=0.5} + end + local object_id = rendering.draw_sprite{ + sprite = mod_prefix.."map-planet-detail", + surface = surface, + target = map_object.entity, + players = {player}, + x_scale = planet_graphics_scale * zone_rendered_size, + y_scale = planet_graphics_scale * zone_rendered_size, + render_layer = "item-in-inserter-hand", --base_render_layer + 1, + tint = tint + } + table.insert(playerdata.map_view_objects, object_id) + end + + if not (zone.tags and Util.table_contains(zone.tags, "water_none")) then + local object_id = rendering.draw_sprite{ + sprite = mod_prefix.."map-planet-water", + surface = surface, + target = map_object.entity, + players = {player}, + x_scale = planet_graphics_scale * zone_rendered_size, + y_scale = planet_graphics_scale * zone_rendered_size, + render_layer = "wires",--base_render_layer + 2 + } + table.insert(playerdata.map_view_objects, object_id) + end + + local object_id = rendering.draw_sprite{ + sprite = mod_prefix.."map-planet-cloud-ice", + surface = surface, + target = map_object.entity, + players = {player}, + x_scale = planet_graphics_scale * zone_rendered_size, + y_scale = planet_graphics_scale * zone_rendered_size, + render_layer = "wires-above",--base_render_layer + 3 + } + table.insert(playerdata.map_view_objects, object_id) + + local tint = {r = 0, g = 0.5, b = 1} + -- TODO: try to estimate average temperature and do a smooth transition from blue to red based on that. + -- for now just make a few key values specific colors + if zone.tags and Util.table_contains(zone.tags, "temperature_volcanic") then tint = {r = 1, g = 0, b = 0} end + if zone.tags and Util.table_contains(zone.tags, "temperature_very_hot") then tint = {r = 1, g = 0.2, b = 0} end + if zone.tags and Util.table_contains(zone.tags, "temperature_hot") then tint = {r = 1, g = 0.6, b = 0} end + if zone.tags and Util.table_contains(zone.tags, "temperature_frozen") then tint = {r = 0, g = 0.2, b = 1} end + local haze = 0.5 -- darken + if zone.tags and Util.table_contains(zone.tags, "moisture_none") then haze = 0 end + if zone.tags and Util.table_contains(zone.tags, "moisture_low") then haze = 0.1 end + if zone.tags and Util.table_contains(zone.tags, "moisture_med") then haze = 0.3 end + if zone.tags and Util.table_contains(zone.tags, "moisture_high") then haze = 0.5 end + if zone.tags and Util.table_contains(zone.tags, "moisture_max") then haze = 1 end + if haze > 0 then + for k, v in pairs(tint) do tint[k] = v * 0.5 end -- darken + local object_id = rendering.draw_sprite{ + sprite = mod_prefix.."map-planet-haze", + surface = surface, + target = map_object.entity, + players = {player}, + x_scale = planet_graphics_scale * zone_rendered_size, + y_scale = planet_graphics_scale * zone_rendered_size, + render_layer = "entity-info-icon",--base_render_layer + 4, + tint = tint + } + table.insert(playerdata.map_view_objects, object_id) + end + + if haze > 0 then + tint = {r = 1, g = 1, b = 1} + for k, v in pairs(tint) do tint[k] = v * 0.5 end -- darken + local object_id = rendering.draw_sprite{ + sprite = mod_prefix.."map-planet-atmosphere", + surface = surface, + target = map_object.entity, + players = {player}, + x_scale = planet_graphics_scale * zone_rendered_size, + y_scale = planet_graphics_scale * zone_rendered_size, + render_layer = "entity-info-icon-above",--base_render_layer + 5, + tint = tint + } + table.insert(playerdata.map_view_objects, object_id) + end + + MapView.render_zone_caption(player, map_object, zone, spaceships) + end +end + +function SystemMap.render_asteroid_belt(player, surface, star, belt, playerdata, spaceships) + if Zone.is_visible_to_force(belt, player.force.name) then + local solar_position = SystemMap.get_zone_position(star, belt) + solar_position = Util.vectors_add(solar_position, SystemMap.belt_offset) + + local map_object = MapObjects.create(player, surface, + belt, MapView.name_clickable_system_asteroid_belt, solar_position) + map_object.command = "details" + + local primary_resource = belt.primary_resource + local tint = {r=0,g=0,b=0,a=0} + for _, entity_prototype in pairs(game.entity_prototypes) do + if entity_prototype.name == primary_resource then + tint = entity_prototype.map_color + end + end + + local belt_graphics_scale = 1 / 3 + local object_id = rendering.draw_sprite{ + sprite = mod_prefix.."map-asteroid-belt", + surface = surface, + target = map_object.entity, + x_scale = belt_graphics_scale * SystemMap.belt_scale, + y_scale = belt_graphics_scale * SystemMap.belt_scale, + players = {player} + } + table.insert(playerdata.map_view_objects, object_id) + local object_id = rendering.draw_sprite{ + sprite = mod_prefix.."map-asteroid-belt-detail", + surface = surface, + target = map_object.entity, + x_scale = belt_graphics_scale * SystemMap.belt_scale, + y_scale = belt_graphics_scale * SystemMap.belt_scale, + players = {player}, + tint = tint + } + table.insert(playerdata.map_view_objects, object_id) + MapView.render_zone_caption(player, map_object, belt, spaceships) + end +end + +function SystemMap.render_spaceship(player, surface, star, spaceship, playerdata) + local solar_position = SystemMap.get_zone_position(star, spaceship) + + local map_object = MapObjects.create(player, surface, + spaceship, MapView.name_clickable_system_spaceship, solar_position) + map_object.command = "details" + + local spaceship_graphics_scale = 1 / 4 + local object_id = rendering.draw_sprite{ + sprite = mod_prefix.."map-spaceship", + surface = surface, + target = map_object.entity, + orientation = MapView.get_spaceship_orientation(player, spaceship), + x_scale = spaceship_graphics_scale * SystemMap.spaceship_scale, + y_scale = spaceship_graphics_scale * SystemMap.spaceship_scale, + players = {player} + } + table.insert(playerdata.map_view_objects, object_id) + map_object.main_objects = {object_id} + + MapView.render_spaceship_caption(player, map_object, spaceship, nil) +end + +function SystemMap.render_interstellar_space(player, surface, star, playerdata) + local solar_position = SystemMap.get_zone_position(star, { + star_gravity_well = -0.5 + }) + + local map_object = MapObjects.create(player, surface, + "interstellar-space", MapView.name_clickable_system_interstellar_space, solar_position) + map_object.command = "interstellar" + + + local starmap_graphics_scale = 1 / 8 + table.insert(playerdata.map_view_objects, + rendering.draw_sprite { + sprite = mod_prefix .. "map-starmap", -- update star_graphics_scale above if you change it + surface = surface, + target = map_object.entity, + players = { player }, + x_scale = starmap_graphics_scale * map_object.entity.prototype.selection_box.right_bottom.y, + y_scale = starmap_graphics_scale * map_object.entity.prototype.selection_box.right_bottom.y, + render_layer = "decals",--28, -- just above decals + }) + + local text_size = 3 + table.insert(playerdata.map_view_objects, + rendering.draw_text { + text = { "space-exploration.interstellar-map" }, + surface = surface, + target = map_object.entity, + target_offset = { x = 0, y = map_object.entity.prototype.selection_box.right_bottom.y }, + alignment = "center", + players = { player }, + color = { r = 224, g = 224, b = 224, a = 255 }, + scale = text_size, + scale_with_zoom = false + }) + +end + +-- ZONE MAP POSITIONING -- +function MapView.get_zone_position(playerdata, zone) + local map_type = playerdata and playerdata.remote_view_active_map and playerdata.remote_view_active_map.type or MapView.interstellar_map + + if map_type == MapView.interstellar_map then + return InterstellarMap.get_zone_position(zone) + elseif map_type == MapView.system_map then + return SystemMap.get_zone_position(playerdata.remote_view_active_map.zone, zone) + end +end + +--[[ + + ZONE CAPTIONS + +]]-- + +function MapView.draw_gradient_line(line_props) + line_props = table.deepcopy(line_props) + + local line_vector = util.vectors_delta(line_props.from_offset, line_props.to_offset) + local line_length = util.vectors_delta_length(line_props.from_offset, line_props.to_offset) + + -- gradient constants, gradient is oriented downwards + local gradient_width = 4 + local gradient_height = 512 + + line_props = table.deepcopy(line_props) + + line_props.sprite = mod_prefix .. "gradient-sprite" + line_props.target = line_props.from + line_props.target_offset = util.lerp_vectors(line_props.from_offset, line_props.to_offset, 0.5) + line_props.x_scale = line_props.width / gradient_width + line_props.y_scale = 32 * line_length / gradient_height + line_props.orientation = 0.75 + util.vector_to_orientation(line_vector) + line_props.tint = line_props.color + + return rendering.draw_sprite(line_props) +end + + +function MapView.get_zone_info(player, zone, infobox_flags, spaceship_index, clamp_index) + local playerdata = get_make_playerdata(player) + local force_name = player.force.name + + local zone_info = {} + + if infobox_flags.show_stats then + local info_line = {} + local threat = Zone.get_threat(zone) + + local priority = Zone.get_priority(zone, force_name) + local priority_color = Zonelist.name_color_priority_neutral + if priority > 0 then + priority_color = Zonelist.name_color_priority_positive + elseif priority < 0 then + priority_color = Zonelist.name_color_priority_negative + end + table.insert(info_line, { + sprite = "virtual-signal/se-accolade", + text = priority, + text_color = priority_color + }) + if threat > 0 then + table.insert(info_line, { + sprite = "virtual-signal/se-death", + sprite_tint = {r = 255, g = 32, b = 32}, + text = string.format("%.0f", Zone.get_threat(zone)*100).."%", + text_length = 4 + }) + end + + table.insert(info_line, { + sprite = "item/solar-panel", + text = string.format("%.0f", Zone.get_display_light_percent(zone) * 100).."%", + text_length = 5 + }) + + if Zone.is_solid(zone) and not (zone.tags and Util.table_contains(zone.tags, "water_none")) then + table.insert(info_line, { + sprite = "fluid/water" + }) + end + + if playerdata.visited_zone and playerdata.visited_zone[zone.index] then + table.insert(info_line, { + sprite = "entity/character" + }) + end + if global.forces[force_name].zone_assets and global.forces[force_name].zone_assets[zone.index] and table_size(global.forces[force_name].zone_assets[zone.index].rocket_launch_pad_names) > 0 then + table.insert(info_line, { + sprite = "entity/"..Launchpad.name_rocket_launch_pad + }) + end + if global.forces[force_name].zone_assets and global.forces[force_name].zone_assets[zone.index] and table_size(global.forces[force_name].zone_assets[zone.index].rocket_landing_pad_names) > 0 then + table.insert(info_line, { + sprite = "entity/"..Landingpad.name_rocket_landing_pad + }) + end + if playerdata.track_glyphs and (zone.glyph ~= nil) then + table.insert(info_line, { + sprite = "entity/se-pyramid-a" + }) + end + if zone.interburbulator or zone.ruins then + table.insert(info_line, { + sprite = "virtual-signal/se-ruin" + }) + end + table.insert(zone_info, info_line) + end + + if infobox_flags.show_anchor_info then + --local clamps_line = {} + --local clamps_here = clamps_index and clamps_index[zone.index] or {} + --table.insert(clamps_line, { + -- sprite = "item/se-spaceship-clamp", + -- text = { "space-exploration.remote-view-clamps", #clamps_here}, + -- text_color = #clamps_here > 0 and { r=255, g=255, b=255, a=196 } or { r=96, g=96, b=96, a=96 } + --}) + --table.insert(zone_info, clamps_line) + + local spaceships_line = {} + local spaceships_here = spaceship_index and spaceship_index[zone.index] or {} + local spaceships_text + local spaceships_text_color = { r=0, g=255, b=255, a=196 } + local spaceships_string_key = "space-exploration.remote-view-spaceships-anchored" + if zone.type == "star" and playerdata.remote_view_active_map and playerdata.remote_view_active_map.type == MapView.interstellar_map then + spaceships_string_key = "space-exploration.remote-view-spaceships" + end + if #spaceships_here > 0 then + spaceships_text = spaceships_here[1].name + if #spaceships_here > 1 then + spaceships_text = { spaceships_string_key, #spaceships_here} + end + else + spaceships_text = { spaceships_string_key, 0} + spaceships_text_color = { r=96, g=96, b=96, a=96 } + end + table.insert(spaceships_line, { + sprite = "virtual-signal/se-spaceship", + text = spaceships_text, + text_color = spaceships_text_color + }) + table.insert(zone_info, spaceships_line) + end + + return zone_info +end + +function MapView.render_zone_info(player, map_object, object_ids, cursor, scale, zone, infobox_flags, spaceship_index, clamp_index) + local icon_offset = {x = 0.25 * scale, y = 0.325 * scale} + local icon_size = {x = 0.6 * scale, y = 0} + + for _, info_row in pairs(MapView.get_zone_info(player, zone, infobox_flags, spaceship_index, clamp_index)) do + local line_cursor = table.deepcopy(cursor) + for _, info_item in pairs(info_row) do + table.insert(object_ids, + rendering.draw_sprite({ + surface = map_object.entity.surface, + target = map_object.entity, + players = {player}, + + tint = info_item.sprite_tint, + target_offset = util.vectors_add(line_cursor, icon_offset), + sprite = info_item.sprite, + x_scale = scale / 2, + y_scale = scale / 2, + }) + ) + line_cursor = util.vectors_add(line_cursor, icon_size) + + if info_item.text then + table.insert(object_ids, + rendering.draw_text({ + surface = map_object.entity.surface, + target = map_object.entity, + players = {player}, + + target_offset = line_cursor, + text = info_item.text, + color = info_item.text_color or {r = 255, b = 255, g = 255, a = 255}, + scale_with_zoom = false, + scale = scale, + }) + ) + line_cursor.x = line_cursor.x + (info_item.text_length and (0.3 + 0.16 * info_item.text_length) or 0.5) * scale + end + end + cursor.y = cursor.y + 0.6 * scale + end +end + +function MapView.render_zone_resources(player, map_object, object_ids, cursor, scale, zone, max_resources) + max_resources = max_resources or 7 + local icon_offset_left = {x = -0.25 * scale, y = 0.325 * scale} + local icon_size_left = {x = -0.6 * scale, y = 0} + + local fsrs = {} + local max_fsr = 0 + for resource_name, resource_settings in pairs(global.resources_and_controls.resource_settings) do + if zone.controls[resource_name] then + local fsr = Universe.estimate_resource_fsr(zone.controls[resource_name]) + if fsr > 0 then + max_fsr = math.max(max_fsr, fsr) + table.insert(fsrs, {name=resource_name, fsr=fsr}) + end + end + end + table.sort(fsrs, function(a,b) return a.fsr > b.fsr end) + local mapgen + if zone.surface_index then mapgen = Zone.get_make_surface(zone).map_gen_settings end + + for i = 1, math.min(#fsrs, max_resources), 1 do + local resource_name = fsrs[i].name + local percent = math.pow(fsrs[i].fsr/max_fsr, 1/3) + + local line_cursor = table.deepcopy(cursor) + table.insert(object_ids, + rendering.draw_sprite({ + surface = map_object.entity.surface, + target = map_object.entity, + players = {player}, + + target_offset = util.vectors_add(line_cursor, icon_offset_left), + sprite = "entity/"..resource_name, + x_scale = scale / 2, + y_scale = scale / 2, + }) + ) + line_cursor = util.vectors_add(line_cursor, icon_size_left) + + local percent_text = string.format("%.0f", percent * 100) + local percent_color = percent == 1 and {r = 255, b = 255, g = 255, a = 255} or {r = 128, b = 128, g = 128, a = 255} + table.insert(object_ids, + rendering.draw_text({ + surface = map_object.entity.surface, + target = map_object.entity, + players = {player}, + + target_offset = line_cursor, + text = percent_text, + color = percent_color, + scale_with_zoom = false, + alignment = "right", + scale = scale, + }) + ) + cursor.y = cursor.y + 0.65 * scale + + end +end + +function MapView.render_zone_caption(player, map_object, zone, spaceship_index) + if not Zone.is_visible_to_force(zone, player.force.name) then return end + + for _, object_id in pairs(map_object.text_objects or {}) do + rendering.destroy(object_id) + end + local object_ids = {} + map_object.text_objects = object_ids + + local infobox_flags = table.deepcopy(MapView.get_settings(player)) + + local playerdata = get_make_playerdata(player) + local map_type = playerdata.remote_view_active_map and playerdata.remote_view_active_map.type + + local scale = map_type == MapView.interstellar_map and InterstellarMap.infobox_scale or SystemMap.infobox_scale + local main_cursor = { x = 0, y = map_object.entity.prototype.selection_box.right_bottom.x} + local cursor + + local name_alignment = "center" -- center/left + local name_color = {r = 192, b = 192, g = 192, a = 192} + local name_size = scale + local short = zone.type == "star" or not zone.orbit + + if map_type == MapView.interstellar_map then + if zone.type == "star" then + name_color = {r=255, g=128, b=0, a=255} + name_size = InterstellarMap.star_text_scale + infobox_flags.show_resources = false + infobox_flags.show_stats = false + elseif zone.type == "asteroid-field" then + name_color = {r=255, g=255, b=255, a=160} + name_size = InterstellarMap.asteroid_field_text_scale + end + elseif map_type == MapView.system_map then + if zone.type == "star" then + name_color = {r=255, g=128, b=0, a=255} + name_size = SystemMap.star_text_scale + name_alignment = "left" + main_cursor = util.vectors_add(main_cursor, { x = 3 * scale, y = 2 * scale}) + infobox_flags.show_resources = false + elseif zone.type == "planet" then + name_color = {r=255, g=255, b=255, a=224} + name_size = SystemMap.planet_text_scale + elseif zone.type == "moon" then + name_color = {r=255, g=255, b=255, a=224} + name_size = SystemMap.planet_text_scale + elseif zone.type == "asteroid-belt" then + name_color = {r=255, g=255, b=255, a=128} + name_size = SystemMap.belt_text_scale + name_alignment = "left" + main_cursor = util.vectors_add(main_cursor, { x = 1 * scale, y = 0}) + end + end + + -- NAME AND LINES + if name_alignment == "center" then + table.insert(object_ids, + rendering.draw_text({ + surface = map_object.entity.surface, + target = map_object.entity, + players = {player}, + + target_offset = main_cursor, + text = zone.name, + color = name_color, + scale_with_zoom = false, + alignment = "center", + scale = name_size, + }) + ) + elseif name_alignment == "left" then + table.insert(object_ids, + rendering.draw_text({ + surface = map_object.entity.surface, + target = map_object.entity, + players = {player}, + + target_offset = util.vectors_add(main_cursor, { x=-1.7 * scale, y=0}), + text = zone.name, + color = name_color, + scale_with_zoom = false, + alignment = "left", + scale = name_size, + }) + ) + end + + if not (infobox_flags.show_resources or infobox_flags.show_stats or infobox_flags.show_anchor_info) then + return + end + + main_cursor.y = main_cursor.y + 0.5 * name_size + 0.2 * scale + local horiz_line_cursor = table.deepcopy(main_cursor) + + table.insert(object_ids, + MapView.draw_gradient_line({ + surface = map_object.entity.surface, + from = map_object.entity, + to = map_object.entity, + players = { player }, + + from_offset = main_cursor, + to_offset = util.vectors_add(main_cursor, { x = 2 * scale, y = 0 }), + color = SystemMap.infobox_gradient_tint, + width = 2 * scale, + })) + table.insert(object_ids, + MapView.draw_gradient_line({ + surface = map_object.entity.surface, + from = map_object.entity, + to = map_object.entity, + players = { player }, + + from_offset = main_cursor, + to_offset = util.vectors_add(main_cursor, { x = -2 * scale, y = 0 }), + color = SystemMap.infobox_gradient_tint, + width = 2 * scale, + })) + main_cursor.y = main_cursor.y + 0.1 * scale + + cursor = util.vectors_add(main_cursor, { x=0.3 * scale, y=0.1 * scale}) + + if infobox_flags.show_stats or infobox_flags.show_anchor_info then + local body_info_shown = false + local show_orbit_info = true + -- BODY INFO + if zone.type == "star" then + if map_type == MapView.interstellar_map then + show_orbit_info = false + MapView.render_zone_info(player, map_object, object_ids, cursor, scale, zone, { show_anchor_info = true }, spaceship_index) + end + else + MapView.render_zone_info(player, map_object, object_ids, cursor, scale, zone, infobox_flags, spaceship_index) + body_info_shown = true + end + + if show_orbit_info and zone.orbit then + -- ORBIT HEADER + + if body_info_shown then + cursor.y = cursor.y + 0.25 * scale + + table.insert(object_ids, + MapView.draw_gradient_line({ + surface = map_object.entity.surface, + from = map_object.entity, + to = map_object.entity, + players = { player }, + + from_offset = util.vectors_add(cursor, { x = -0.3 * scale, y = 0 }), + to_offset = util.vectors_add(cursor, { x = 3.5 * scale, y = 0 }), + color = SystemMap.infobox_gradient_tint, + width = 2 * scale, + })) + cursor.y = cursor.y + 0.15 * scale + end + + table.insert(object_ids, + rendering.draw_text({ + surface = map_object.entity.surface, + target = map_object.entity, + players = {player}, + + target_offset = cursor, + text = "Orbit", + color = {r = 128, b = 128, g = 128, a = 255}, + scale_with_zoom = false, + scale = scale, + }) + ) + cursor.y = cursor.y + 0.6 * scale + + -- ORBIT INFO + + MapView.render_zone_info(player, map_object, object_ids, cursor, scale, zone.orbit, infobox_flags, spaceship_index) + + end + + end + + local right_side_y = cursor.y + + + -- RESOURCES + cursor = util.vectors_add(main_cursor, { x=-0.3 * scale, y=0.1 * scale}) + if infobox_flags.show_resources and zone.type ~= "star" then + MapView.render_zone_resources(player, map_object, object_ids, cursor, scale, zone, + short and 4 or 7) + end + + local left_side_y = cursor.y + + -- VERTICAL LINE + local line_height = (math.max(left_side_y, right_side_y) - horiz_line_cursor.y) * 0.95 + table.insert(object_ids, + MapView.draw_gradient_line({ + surface = map_object.entity.surface, + from = map_object.entity, + to = map_object.entity, + players = { player }, + + from_offset = horiz_line_cursor, + to_offset = util.vectors_add(horiz_line_cursor, { x = 0, y = line_height }), + color = SystemMap.infobox_gradient_tint, + width = 2 * scale, + })) +end + +function MapView.render_spaceship_caption(player, map_object, zone, spaceship_index) + local playerdata = get_make_playerdata(player) + local map_type = playerdata.remote_view_active_map and playerdata.remote_view_active_map.type + if not map_type then return end + + local color = {r=0, g=196, b=196, a=255} + local orientation = 0.125 + + local size + local target_offset + if map_type == MapView.interstellar_map then + size = InterstellarMap.spaceship_text_scale + target_offset = InterstellarMap.spaceship_text_offset + elseif map_type == MapView.system_map then + size = SystemMap.spaceship_text_scale + target_offset = SystemMap.spaceship_text_offset + else + return + end + local half_size = map_object.entity.prototype.selection_box.right_bottom.y + target_offset = util.vectors_add(target_offset, { x = -half_size, y = -half_size }) + target_offset = util.vectors_add(target_offset, { x = 0, y = -0.5 * size }) + + table.insert(map_object.text_objects, + rendering.draw_text{ + text = zone.name, + surface = MapView.get_make_surface(player), + target = map_object.entity, + target_offset = target_offset, + players = {player}, + color = color, + orientation = orientation, + alignment = "right", + scale = size, + scale_with_zoom = false, + } + ) +end + +-- SPACESHIP UPDATES -- +function MapView.update_view(player) + local playerdata = get_make_playerdata(player) + if not playerdata.remote_view_active_map then + return + end + if not playerdata.map_view_entities then + return + end + + local map_type = playerdata.remote_view_active_map and playerdata.remote_view_active_map.type + local spaceship_index = {} + if map_type == MapView.interstellar_map then + spaceship_index = InterstellarMap.get_spaceship_index(player) + elseif map_type == MapView.system_map then + spaceship_index = SystemMap.get_spaceship_index(player, playerdata.remote_view_active_map.zone) + end + + local bound_spaceships = spaceship_index.bound or {} + local flying_spaceships = spaceship_index.flying or {} + local flying_by_spaceship_index = {} + for _, spaceship in pairs(flying_spaceships) do + flying_by_spaceship_index[spaceship.index] = spaceship + end + + local seen_flying = {} + for _, map_object in pairs(playerdata.map_view_entities) do + local entity = map_object.entity + if entity and entity.valid and map_object.zone then + if map_object.zone and map_object.zone.type == "spaceship" then + local spaceship = map_object.zone + seen_flying[spaceship.index] = true + if not flying_by_spaceship_index[spaceship.index] then + -- spaceship is no longer flying here + MapObjects.destroy(player, map_object) + else + -- update spaceship position and orientation + entity.teleport(MapView.get_zone_position(playerdata, spaceship)) + MapObjects.set_orientation(map_object, MapView.get_spaceship_orientation(player, spaceship)) + end + else + -- not a spaceship, update zone caption to account for changes in anchored spaceships + MapView.render_zone_caption(player, map_object, map_object.zone, bound_spaceships) + end + end + end + + -- render new spaceships + for _, spaceship in pairs(flying_spaceships) do + if not seen_flying[spaceship.index] then + -- render new spaceship + MapView.render_spaceship(player, spaceship) + end + end + +end + +function MapView.render_spaceship(player, spaceship) + local surface = MapView.get_make_surface(player) + local playerdata = get_make_playerdata(player) + local map_type = playerdata and playerdata.remote_view_active_map and playerdata.remote_view_active_map.type or MapView.interstellar_map + + if map_type == MapView.interstellar_map then + InterstellarMap.render_spaceship(player, surface, spaceship, playerdata) + else + local star = playerdata.remote_view_active_map.zone + SystemMap.render_spaceship(player, surface, star, spaceship, playerdata) + end +end + +function MapView.get_spaceship_orientation(player, spaceship) + local playerdata = get_make_playerdata(player) + local map_type = playerdata and playerdata.remote_view_active_map and playerdata.remote_view_active_map.type or MapView.interstellar_map + local destination_zone = Spaceship.get_destination_zone(spaceship) + + -- no destination set, or standing still near a zone + if not destination_zone or spaceship.near or spaceship.stopped then + return 0.625 -- oriented bottom left + end + + if map_type == MapView.interstellar_map then + local travel_vector = util.vectors_delta(spaceship.stellar_position, Zone.get_stellar_position(destination_zone)) + return 0.25 + util.vector_to_orientation(travel_vector) + elseif map_type == MapView.system_map then + local star = playerdata.remote_view_active_map.zone + local destination_star_gravity_well = Zone.get_star_gravity_well(destination_zone) + if util.vectors_delta_length(spaceship.stellar_position, Zone.get_stellar_position(destination_zone)) > 0 + or Zone.get_space_distortion(destination_zone) > 0 then + -- destination in another system, you need to get out of the current system + destination_star_gravity_well = -1 + end + if spaceship.planet_gravity_well <= 0 and spaceship.star_gravity_well ~= destination_star_gravity_well then + -- travelling through star_gravity_well + if spaceship.star_gravity_well > destination_star_gravity_well then + return 0.5 + else + return 0 + end + else + local direction_offset = 0.75 + if spaceship.star_gravity_well == destination_star_gravity_well + and spaceship.planet_gravity_well < Zone.get_planet_gravity_well(destination_zone) then + direction_offset = 0.25 + end + local solar_position_data = SystemMap.get_zone_position_data(star, spaceship) + return direction_offset - solar_position_data.orientation + end + end + + -- everything should be covered but just in case return the default + return 0.625 +end + + + +-- MAP OBJECTS MANAGEMENT -- +function MapObjects.create(player, surface, context, entity_name, position) + -- context is either a zone, or a non-zone space (e.g. "interstellar-space") + local zone = nil + if type(context) == "table" then + zone = context + context = "zone" + end + + local playerdata = get_make_playerdata(player) + + local entity = surface.create_entity{ + name = entity_name, + position = position, + force = "neutral" + } + entity.destructible = false + + local map_object = { + entity = entity, + context = context, -- "zone" or "interstellar-space" + zone = zone, + objects = {}, + text_objects = {} + } + + playerdata.map_view_entities = playerdata.map_view_entities or {} + playerdata.map_view_entities[entity.unit_number] = map_object + + return playerdata.map_view_entities[entity.unit_number] +end + +function MapObjects.destroy(player, map_object) + if map_object and map_object.entity and map_object.entity.valid then + local entity = map_object.entity + local playerdata = get_make_playerdata(player) + if not playerdata.map_view_entities[entity.unit_number] then + return + end + + playerdata.map_view_entities[entity.unit_number] = nil + entity.destroy() + end +end + +function MapObjects.set_orientation(map_object, orientation) + for _, rendering_object in pairs(map_object.main_objects or {}) do + rendering.set_orientation(rendering_object, orientation) + end +end + + +-- EVENT HANDLERS -- +function MapView.on_map_tick(event) + if (game.tick % 60) == 40 then + for _, player in pairs(game.connected_players) do + local playerdata = get_make_playerdata(player) + if playerdata.remote_view_active_map then + MapView.update_view(player) + end + end + end +end +Event.addListener(defines.events.on_tick, MapView.on_map_tick) + + +function MapView.on_gui_opened (event) + local player = game.players[event.player_index] + if event.entity and event.entity.valid and event.entity.type == "lamp" then + local playerdata = get_make_playerdata(player) + if playerdata.map_view_entities then + local map_object = playerdata.map_view_entities[event.entity.unit_number] + if map_object then + if map_object.command == "system" then + player.opened = nil -- close + if Zone.is_visible_to_force(map_object.zone, player.force.name ) then + MapView.start_system_map(player, map_object.zone) + else + player.print({"space-exploration.interstellar_launch_satellite_to_see_star"}) + end + elseif map_object.command == "interstellar" then + player.opened = nil -- close + MapView.start_interstellar_map(player) + elseif map_object.command == "details" then + player.opened = nil -- close + MapView.gui_open(player, map_object.zone) + end + + end + end + end +end +Event.addListener(defines.events.on_gui_opened, MapView.on_gui_opened) + +function MapView.on_gui_closed (event) + if event.element and event.element.valid and event.element.name == MapView.name_gui_zone_details_root then + MapView.gui_close(game.get_player(event.player_index)) + end +end +Event.addListener(defines.events.on_gui_closed, MapView.on_gui_closed) + +function MapView.get_make_settings(player) + local playerdata = get_make_playerdata(player) + playerdata.starmap_settings = playerdata.starmap_settings or { + show_resources = false, + show_stats = false, + show_anchor_info = false, + show_danger_zones = true, + } + return playerdata.starmap_settings +end + +function MapView.get_settings(player) + local settings = MapView.get_make_settings(player) + if not player.force.technologies[MapView.tech_spaceship].researched then + settings = table.deepcopy(settings) + settings["show_anchor_info"] = nil + end + return settings +end + +function MapView.toggle_setting(player, setting_name) + local settings = MapView.get_make_settings(player) + settings[setting_name] = not settings[setting_name] + if setting_name == "show_danger_zones" then + MapView.internal_restart_map(player) + else + MapView.update_view(player) + end +end + + +-- ZONE DETAILS GUI -- +function MapView.gui_open(player, zone) + if not zone then return end + if zone.type == "star" then zone = zone.orbit end + + MapView.gui_close(player) + + local gui = player.gui.screen + player.opened = nil + + local main = gui.add{ type = "frame", name = MapView.name_gui_zone_details_root, direction="vertical"} + main.style.padding = 12 + main.style.top_padding = 6 + main.style.bottom_padding = 0 + + player.opened = main + + if not (main and main.valid) then return end -- setting player.opened can cause other scripts to delete UIs + local title_table = main.add{type="table", name=MapView.name_gui_zone_title_table, column_count=2, draw_horizontal_lines=false} + title_table.style.horizontally_stretchable = true + title_table.style.column_alignments[1] = "left" + title_table.style.column_alignments[2] = "right" + title_table.drag_target = main + + -- store zone name here for + local title_frame = title_table.add{type="frame", name=MapView.gui_get_element_name_from_zone(zone), caption=zone.name, style="informatron_title_frame"} + title_frame.ignored_by_interaction = true + + local right_flow = title_table.add{type="flow", direction="horizontal", name="right_flow"} + right_flow.style.vertical_align = "top" + if zone.type ~= "star" and zone.orbit then + local land = right_flow.add{type="sprite-button", name=MapView.name_gui_zone_details_root.."_land", sprite = Zone.get_icon(zone), style="button", tooltip=zone.name} + land.style.width = 40 + land.style.height = 40 + land.style.bottom_margin = -5 + land.enabled = false + local orbit = right_flow.add{type="sprite-button", name=MapView.name_gui_zone_details_root.."_orbit", sprite = Zone.get_icon(zone.orbit), style="button", tooltip=zone.orbit.name} + orbit.style.width = 40 + orbit.style.height = 40 + orbit.style.right_margin = 6 + orbit.style.bottom_margin = -5 + end + local close = right_flow.add{type="sprite-button", name=MapView.name_gui_zone_details_root.."_close", sprite = "utility/close_white", style="informatron_close_button", tooltip={"gui.close-instruction"}} + close.style.width = 28 + close.style.height = 28 + close.style.top_margin = 3 + + local details_root = main.add{type="frame", name=MapView.name_details_root, direction="vertical"} + details_root.style.horizontally_stretchable = true + details_root.style.top_margin = -2 + details_root.style.left_margin = -16 + details_root.style.right_margin = -16 + details_root.style.bottom_margin = -3 + details_root.drag_target = main + + local zone_identifier = details_root.add{type="flow", direction="vertical", name=MapView.gui_get_element_name_from_zone(zone)} + local zone_gui_zonelist_root = zone_identifier.add{type="flow", direction="vertical", name=Zonelist.name_gui_root} + Zonelist.gui_create_zone_content(player, zone_gui_zonelist_root) + MapView.gui_update(player) + + main.force_auto_center() + +end + +function MapView.gui_update(player) + local root = player.gui.screen[MapView.name_gui_zone_details_root] + if root and root[MapView.name_details_root] then + local details = util.find_first_descendant_by_name(root, Zonelist.name_gui_root) + local zone = MapView.gui_get_zone_from_element(details.parent) + Zonelist.gui_update_zone_content(player, details, zone) + end +end + +function MapView.gui_close(player) + if player.gui.screen[MapView.name_gui_zone_details_root] then + player.gui.screen[MapView.name_gui_zone_details_root].destroy() + end +end + + +function MapView.on_gui_click(event) + if not (event.element and event.element.valid) then return end + local element = event.element + local player = game.players[event.player_index] + + if event.element.tags and event.element.tags.se_action == "starmap-cycle" then + return MapView.starmap_view_cycle(player) + end + + local root = gui_element_or_parent(element, MapView.name_gui_zone_details_root) + if root then + if element.name == MapView.name_gui_zone_details_root.."_close" then + MapView.gui_close(player) + elseif element.name == MapView.name_gui_zone_details_root.."_land" then + local title_table = util.find_first_descendant_by_name(root, MapView.name_gui_zone_title_table) + if title_table then + local zone = MapView.gui_get_zone_from_element(title_table.children[1]) + if zone then + util.find_first_descendant_by_name(root, MapView.name_gui_zone_details_root.."_land").enabled = false + util.find_first_descendant_by_name(root, MapView.name_gui_zone_details_root.."_orbit").enabled = true + local details_root = util.find_first_descendant_by_name(root, MapView.name_details_root) + details_root.clear() + local zone_identifier = details_root.add{type="flow", direction="vertical", name=MapView.gui_get_element_name_from_zone(zone)} + local zone_gui_zonelist_root = zone_identifier.add{type="flow", direction="vertical", name=Zonelist.name_gui_root} + Zonelist.gui_create_zone_content(player, zone_gui_zonelist_root) + MapView.gui_update(player) + end + end + elseif element.name == MapView.name_gui_zone_details_root.."_orbit" then + local title_table = util.find_first_descendant_by_name(root, MapView.name_gui_zone_title_table) + if title_table then + local zone = MapView.gui_get_zone_from_element(title_table.children[1]) + if zone and zone.orbit then + util.find_first_descendant_by_name(root, MapView.name_gui_zone_details_root.."_land").enabled = true + util.find_first_descendant_by_name(root, MapView.name_gui_zone_details_root.."_orbit").enabled = false + local details_root = util.find_first_descendant_by_name(root, MapView.name_details_root) + details_root.clear() + local zone_identifier = details_root.add{type="flow", direction="vertical", name=MapView.gui_get_element_name_from_zone(zone.orbit)} + local zone_gui_zonelist_root = zone_identifier.add{type="flow", direction="vertical", name=Zonelist.name_gui_root} + Zonelist.gui_create_zone_content(player, zone_gui_zonelist_root) + MapView.gui_update(player) + end + end + end + end +end +Event.addListener(defines.events.on_gui_click, MapView.on_gui_click) + +function MapView.update_overhead_button(player_index) + local player = game.players[player_index] + local button_flow = mod_gui.get_button_flow(player) + if button_flow then + if settings.get_player_settings(player)[MapView.name_setting_overhead_interstellar].value == true then + if not button_flow[MapView.name_button_overhead_interstellar] then + button_flow.add{type="sprite-button", name=MapView.name_button_overhead_interstellar, sprite="se-map-gui-starmap"} + end + button_flow[MapView.name_button_overhead_interstellar].tooltip = {"space-exploration.star-map"} + button_flow[MapView.name_button_overhead_interstellar].tags = {se_action="starmap-cycle"} + else + if button_flow[MapView.name_button_overhead_interstellar] then + button_flow[MapView.name_button_overhead_interstellar].destroy() + end + end + end +end + +function MapView.on_runtime_mod_setting_changed(event) + for _, player in pairs(game.connected_players) do + MapView.update_overhead_button(player.index) + end +end +Event.addListener(defines.events.on_runtime_mod_setting_changed, MapView.on_runtime_mod_setting_changed) + +function MapView.on_configuration_changed() + for _, player in pairs(game.connected_players) do + MapView.update_overhead_button(player.index) + end +end +Event.addListener("on_configuration_changed", MapView.on_configuration_changed, true) + +return MapView diff --git a/space-exploration_0.5.80/space-exploration/scripts/medpack.lua b/space-exploration_0.5.80/space-exploration/scripts/medpack.lua new file mode 100644 index 0000000..5022c1a --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/medpack.lua @@ -0,0 +1,46 @@ +Medpack = {} + +-- constants +Medpack.trigger_base_name = mod_prefix.."heal-trigger-" +Medpack.search_radius = 8 + +function Medpack.on_trigger_created_entity(event) + if not event.entity and event.entity.valid then return end + if string.starts(event.entity.name, Medpack.trigger_base_name) then + local suffix = util.replace(event.entity.name, Medpack.trigger_base_name, "") + -- number is at the end. + local heal = util.string_to_number(suffix) + if heal and heal > 0 then + local instigator = event.source + if not instigator then return end + + local surface = event.entity.surface + local position = event.entity.position + local forces = ceasefire_forces(instigator.force) + local friends = surface.find_entities_filtered{ + position = position, + radius = Medpack.search_radius, + force = forces, + type = {"character", "unit"} + } + local heal_target = nil + local best_distance = math.huge + for _, friend in pairs(friends) do + -- TODO: when entity.prototype.trigger_target_mask is readable then use the biological mask. + if friend.prototype.flags["breaths-air"] then + local distance = util.vectors_delta_length(position, friend.position) + if distance < best_distance then + best_distance = distance + heal_target = friend + end + end + end + if heal_target then + heal_target.health = heal_target.health + heal + end + end + end +end +Event.addListener(defines.events.on_trigger_created_entity, Medpack.on_trigger_created_entity) + +return Medpack diff --git a/space-exploration_0.5.80/space-exploration/scripts/meteor.lua b/space-exploration_0.5.80/space-exploration/scripts/meteor.lua new file mode 100644 index 0000000..dc02b62 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/meteor.lua @@ -0,0 +1,870 @@ +local Meteor = {} + +Meteor.name_meteor_defence = mod_prefix.."meteor-defence" +Meteor.name_meteor_defence_container = mod_prefix.."meteor-defence-container" +Meteor.name_meteor_defence_charger = mod_prefix.."meteor-defence-charger" +Meteor.name_meteor_defence_ammo = mod_prefix.."meteor-defence-ammo" +Meteor.name_meteor_defence_beam = mod_prefix.."meteor-defence-beam" +Meteor.name_meteor_defence_beam_offset = {x = -1, y = -5} + +Meteor.name_meteor_point_defence = mod_prefix.."meteor-point-defence" +Meteor.name_meteor_point_defence_container = mod_prefix.."meteor-point-defence-container" +Meteor.name_meteor_point_defence_charger = mod_prefix.."meteor-point-defence-charger" +Meteor.name_meteor_point_defence_charger_overcharged = mod_prefix.."meteor-point-defence-charger-overcharged" +Meteor.name_meteor_point_defence_ammo = mod_prefix.."meteor-point-defence-ammo" +Meteor.name_meteor_point_defence_beam = mod_prefix.."meteor-point-defence-beam" +Meteor.name_meteor_point_defence_mask = mod_prefix.."meteor-point-defence-mask" +Meteor.name_meteor_point_defence_beam_offsets = { + {x = 0.1, y = -3.5}, + {x = 0.4, y = -3.1}, + {x = -0.3, y = -3.4}, + {x = 0.7, y = -3.2}, +} + +Meteor.defence_accuracy = 0.8 +Meteor.defence_full_power = 2000 * 1000000 +Meteor.defence_passive_draw = 5000000 + +Meteor.point_defence_range = 64 +Meteor.point_defence_accuracy = 0.5 +Meteor.point_defence_full_power = 200 * 1000000 +Meteor.point_defence_fire_power = Meteor.point_defence_full_power / 4 +Meteor.point_defence_passive_draw = 500000 +Meteor.point_defence_passive_draw_overcharged = 250000 + +Meteor.meteor_swarm_altitude = 100 +Meteor.meteor_swarm_x_deviation = Meteor.meteor_swarm_altitude + +Meteor.meteor_fall_time = 2 * 60 +Meteor.meteor_chain_delay = 10 + +Meteor.meteor_random_range = 512 +Meteor.meteor_variants = 16 +Meteor.meteor_position_deviation = 10 +Meteor.meteor_chain_distance = 10 + +Meteor.tick_skip = 10 + + + +function Meteor.on_player_selected_or_opened_changed(event) + local player = game.players[event.player_index] + local playerdata = get_make_playerdata(player) + if playerdata.meteor_point_defence_radius then + if not ( + (player.selected and player.selected.name == Meteor.name_meteor_point_defence_container) + or (player.opened and player.opened_gui_type == defines.gui_type.entity and player.opened.name == Meteor.name_meteor_point_defence_container) ) then + if rendering.is_valid(playerdata.meteor_point_defence_radius) then + rendering.destroy(playerdata.meteor_point_defence_radius) + end + playerdata.meteor_point_defence_radius = nil + end + end +end +Event.addListener(defines.events.on_gui_opened, Meteor.on_player_selected_or_opened_changed) +Event.addListener(defines.events.on_selected_entity_changed, Meteor.on_player_selected_or_opened_changed) + +function Meteor.on_entity_created(event) + local entity = util.get_entity_from_event(event) + if not entity then return end + if entity.name == Meteor.name_meteor_defence_container + or entity.name == Meteor.name_meteor_point_defence_container then + local zone = Zone.from_surface(entity.surface) + if zone then + entity.active = false + local old_entities = entity.surface.find_entities_filtered{ + name = {Meteor.name_meteor_defence_charger, Meteor.name_meteor_point_defence_charger}, + area = entity.bounding_box, + } + for _, old_entity in pairs(old_entities) do + old_entity.destroy() + end + if zone.type ~= "spaceship" then + if entity.name == Meteor.name_meteor_defence_container then + local charger = entity.surface.create_entity{ + name = Meteor.name_meteor_defence_charger, + position = entity.position, + direction = entity.direction, + force = entity.force + } + charger.destructible = false + + if not zone.meteor_defences then + zone.meteor_defences = {} + end + zone.meteor_defences[entity.unit_number] = { + unit_number = entity.unit_number, + container = entity, + charger = charger, + } + else + local charger = entity.surface.create_entity{ + name = Meteor.name_meteor_point_defence_charger, + position = entity.position, + direction = entity.direction, + force = entity.force + } + charger.destructible = false + charger.energy = 0 + + if not zone.meteor_point_defences then + zone.meteor_point_defences = {} + end + zone.meteor_point_defences[entity.unit_number] = { + unit_number = entity.unit_number, + container = entity, + charger = charger, + } + + end + -- add to list of zones where meteors can appear + global.meteor_zones = global.meteor_zones or {} + global.meteor_zones[zone.index] = zone + end + + else + cancel_entity_creation(entity, event.player_index, {"space-exploration.construction-denied"}) + return + end + elseif entity.type == "electric-pole" or entity.type == "assembling-machine" then + local zone = Zone.from_surface(entity.surface) + if zone and zone.type ~= "spaceship" then + global.meteor_zones = global.meteor_zones or {} + global.meteor_zones[zone.index] = zone + end + end +end +Event.addListener(defines.events.on_entity_cloned, Meteor.on_entity_created) +Event.addListener(defines.events.on_built_entity, Meteor.on_entity_created) +Event.addListener(defines.events.on_robot_built_entity, Meteor.on_entity_created) +Event.addListener(defines.events.script_raised_built, Meteor.on_entity_created) +Event.addListener(defines.events.script_raised_revive, Meteor.on_entity_created) + +function Meteor.on_removed_entity(event) + if event.entity and event.entity.valid and event.entity.surface then + if event.entity.name == Meteor.name_meteor_defence_charger then + local entity = event.entity + local charger = entity.surface.find_entity(Meteor.name_meteor_defence_container, entity.position) + if charger then charger.destroy() end + elseif event.entity.name == Meteor.name_meteor_defence_container then + local entity = event.entity + local charger = entity.surface.find_entity(Meteor.name_meteor_defence_charger, entity.position) + if charger then charger.destroy() end + elseif event.entity.name == Meteor.name_meteor_point_defence_charger or Meteor.name_meteor_point_defence_charger.."-overcharged" then + local entity = event.entity + local charger = entity.surface.find_entity(Meteor.name_meteor_point_defence_container, entity.position) + if charger then charger.destroy() end + elseif event.entity.name == Meteor.name_meteor_point_defence_container then + local entity = event.entity + local charger = entity.surface.find_entity(Meteor.name_meteor_point_defence_charger, entity.position) + if charger then charger.destroy() else + charger = entity.surface.find_entity(Meteor.name_meteor_point_defence_charger.."-overcharged", entity.position) + if charger then charger.destroy() end + end + end + end +end +Event.addListener(defines.events.on_entity_died, Meteor.on_removed_entity) +Event.addListener(defines.events.on_robot_mined_entity, Meteor.on_removed_entity) +Event.addListener(defines.events.on_player_mined_entity, Meteor.on_removed_entity) +Event.addListener(defines.events.script_raised_destroy, Meteor.on_removed_entity) + +function Meteor.tick_meteor_shower(meteor_shower) + if type(meteor_shower.remaining_meteors) ~= "table" then + meteor_shower.valid = false + return + end + + if meteor_shower.skip and meteor_shower.skip > 0 then + meteor_shower.skip = meteor_shower.skip - Meteor.tick_skip + return + end + + if #meteor_shower.remaining_meteors == 0 then + + -- no meteors left, defences won, vistory message + meteor_shower.valid = false + Meteor.meteor_shower_alert(meteor_shower) + return + + end + + local surface = Zone.get_make_surface(meteor_shower.zone) + if meteor_shower.zone.meteor_defences then + for _, defence in pairs(meteor_shower.zone.meteor_defences) do + local charger = defence.charger + if defence.charger and defence.charger.valid and defence.container and defence.container.valid then + if charger.energy >= Meteor.defence_full_power * 0.99 then + local inv = defence.container.get_inventory(defines.inventory.turret_ammo) + --local contents = inv.get_contents() + --if contents[Meteor.name_meteor_defence_ammo] and contents[Meteor.name_meteor_defence_ammo] > 0 then + if inv.get_item_count(Meteor.name_meteor_defence_ammo) > 0 then + -- this defence is ready to fire + local take = 1 + inv.remove({name=Meteor.name_meteor_defence_ammo, count=take}) + charger.force.item_production_statistics.on_flow(Meteor.name_meteor_defence_ammo, -take) + charger.energy = 0 + meteor_shower.skip = 30 + + meteor_shower.defences_activated = meteor_shower.defences_activated + 1 + if math.random() < Meteor.defence_accuracy then + Meteor.credit_kill(defence.container, mod_prefix .. "static-meteor-01") + meteor_shower.remaining_meteors[math.random(#meteor_shower.remaining_meteors)] = nil + local remaining_meteors = {} + for _, meteor in pairs(meteor_shower.remaining_meteors) do + table.insert(remaining_meteors, meteor) + end + meteor_shower.remaining_meteors = remaining_meteors + end + surface.create_entity{ + name = Meteor.name_meteor_defence_beam, + position = Util.vectors_add(charger.position, Meteor.name_meteor_defence_beam_offset), + target = Util.vectors_add(charger.position, {x = 0, y = -Meteor.meteor_swarm_altitude}) + } + return + end + end + end + end + end + + -- try point defence + if meteor_shower.zone.meteor_point_defences then + for _, defence in pairs(meteor_shower.zone.meteor_point_defences) do + local charger = defence.charger + if defence.charger and defence.charger.valid and defence.container and defence.container.valid then + for remaining_index, meteor in pairs(meteor_shower.remaining_meteors) do + if charger.energy >= Meteor.point_defence_fire_power and Util.vectors_delta_length(meteor.land_position, defence.charger.position) <= Meteor.point_defence_range then + local inv = defence.container.get_inventory(defines.inventory.turret_ammo) + --local contents = inv.get_contents() + --if contents[Meteor.name_meteor_point_defence_ammo] and contents[Meteor.name_meteor_point_defence_ammo] > 0 then + if inv.get_item_count(Meteor.name_meteor_point_defence_ammo) > 0 then + -- this defence is ready to fire + + local take = 1 + inv.remove({name=Meteor.name_meteor_point_defence_ammo, count=take}) + charger.force.item_production_statistics.on_flow(Meteor.name_meteor_point_defence_ammo, -take) + charger.energy = charger.energy - Meteor.point_defence_fire_power + + defence.barrel = (defence.barrel or 0) % 4 + 1 + surface.create_entity{ + name = Meteor.name_meteor_point_defence_beam, + position = Util.vectors_add(charger.position, Meteor.name_meteor_point_defence_beam_offsets[defence.barrel]), + target = Util.vectors_add(charger.position, {x = 0, y = -Meteor.meteor_swarm_altitude}) + } + + meteor_shower.point_defences_activated = meteor_shower.point_defences_activated + 1 + if math.random() < Meteor.point_defence_accuracy then + Meteor.credit_kill(defence.container, mod_prefix .. "static-meteor-01") + + meteor_shower.remaining_meteors[remaining_index] = nil + local remaining_meteors = {} + for _, meteor in pairs(meteor_shower.remaining_meteors) do + table.insert(remaining_meteors, meteor) + end + meteor_shower.remaining_meteors = remaining_meteors + end + + return + end + end + end + end + end + + end + + if meteor_shower.defences_activated or meteor_shower.point_defences_activated > 0 then + -- there were defences, meteors win, show defence status message + Meteor.meteor_shower_alert(meteor_shower) + end + + meteor_shower.valid = false + Meteor.spawn_meteor_shower(meteor_shower) +end + + +function Meteor.defence_vs_projectile(projectile) + -- projectile should have the following properties: + -- projectile.force_name + -- projectile.target_position + local zone = projectile.target_zone + projectile.health = projectile.health or 1 -- some may take multiple hits? + + local surface = Zone.get_make_surface(zone) + local defence_data = {} + + if zone.meteor_defences then + for _, defence in pairs(zone.meteor_defences) do + local charger = defence.charger + if charger and charger.valid and not (projectile.force_name == charger.force.name or charger.force.get_cease_fire(projectile.force_name) or charger.force.get_friend(projectile.force_name)) then + defence_data[charger.force.name] = defence_data[charger.force.name] or {defence_shots = 0, point_defence_shots = 0} + if defence.container and defence.container.valid then + if charger.energy >= Meteor.defence_full_power * 0.99 then + local inv = defence.container.get_inventory(defines.inventory.turret_ammo) + if inv.get_item_count(Meteor.name_meteor_defence_ammo) > 0 then + -- this defence is ready to fire + local take = 1 + inv.remove({name=Meteor.name_meteor_defence_ammo, count=take}) + charger.force.item_production_statistics.on_flow(Meteor.name_meteor_defence_ammo, -take) + charger.energy = 0 + defence_data[charger.force.name].defence_shots = defence_data[charger.force.name].defence_shots + 1 + + surface.create_entity{ + name = Meteor.name_meteor_defence_beam, + position = Util.vectors_add(charger.position, Meteor.name_meteor_defence_beam_offset), + target = Util.vectors_add(charger.position, {x = 0, y = -Meteor.meteor_swarm_altitude}) + } + if math.random() < Meteor.defence_accuracy then + projectile.health = projectile.health - 1 + if projectile.health <= 0 then + --TODO: credit kill of a summy delivery cannon capsule. + return defence_data + end + end + end + end + end + end + end + end + + -- try point defence + if zone.meteor_point_defences then + for _, defence in pairs(zone.meteor_point_defences) do + local charger = defence.charger + if charger and charger.valid and not (projectile.force_name == charger.force.name or charger.force.get_cease_fire(projectile.force_name) or charger.force.get_friend(projectile.force_name)) then + defence_data[charger.force.name] = defence_data[charger.force.name] or {defence_shots = 0, point_defence_shots = 0} + if defence.container and defence.container.valid then + if Util.vectors_delta_length(projectile.target_position, defence.charger.position) <= Meteor.point_defence_range then + local inv = defence.container.get_inventory(defines.inventory.turret_ammo) + while charger.energy >= Meteor.point_defence_fire_power and inv.get_item_count(Meteor.name_meteor_point_defence_ammo) > 0 do + -- this defence is ready to fire + + local take = 1 + inv.remove({name=Meteor.name_meteor_point_defence_ammo, count=take}) + charger.force.item_production_statistics.on_flow(Meteor.name_meteor_point_defence_ammo, -take) + charger.energy = charger.energy - Meteor.point_defence_fire_power + defence_data[charger.force.name].point_defence_shots = defence_data[charger.force.name].point_defence_shots + 1 + + defence.barrel = (defence.barrel or 0) % 4 + 1 + surface.create_entity{ + name = Meteor.name_meteor_point_defence_beam, + position = Util.vectors_add(charger.position, Meteor.name_meteor_point_defence_beam_offsets[defence.barrel]), + target = Util.vectors_add(charger.position, {x = 0, y = -Meteor.meteor_swarm_altitude}) + } + + if math.random() < Meteor.point_defence_accuracy then + projectile.health = projectile.health - 1 + if projectile.health <= 0 then + --TODO: credit kill of a summy delivery cannon capsule. + return defence_data + end + end + end + end + end + end + end + + end + + return defence_data + +end + + +function Meteor.meteor_shower_alert(meteor_shower) + + local meteor_defences = 0 + local meteor_defences_ready = 0 + local meteor_defences_shot_fired = meteor_shower.defences_activated + + local meteor_point_defences = 0 + local meteor_point_defences_ready = 0 + local meteor_point_defence_shots_fired = meteor_shower.point_defences_activated + + if meteor_shower.zone.meteor_defences then + for _, defence in pairs(meteor_shower.zone.meteor_defences) do + meteor_defences = meteor_defences + 1 + local charger = defence.charger + if defence.charger and defence.charger.valid and defence.container and defence.container.valid then + if charger.energy >= Meteor.defence_full_power * 0.99 then + local inv = defence.container.get_inventory(defines.inventory.turret_ammo) + local contents = inv.get_contents() + if contents[Meteor.name_meteor_defence_ammo] and contents[Meteor.name_meteor_defence_ammo] > 0 then + meteor_defences_ready = meteor_defences_ready + 1 + end + end + end + end + end + + -- try point defence + if meteor_shower.zone.meteor_point_defences then + for _, defence in pairs(meteor_shower.zone.meteor_point_defences) do + meteor_point_defences = meteor_point_defences + 1 + local charger = defence.charger + if defence.charger and defence.charger.valid and defence.container and defence.container.valid then + if charger.energy >= Meteor.point_defence_fire_power then + local inv = defence.container.get_inventory(defines.inventory.turret_ammo) + local contents = inv.get_contents() + if contents[Meteor.name_meteor_point_defence_ammo] and contents[Meteor.name_meteor_point_defence_ammo] > 0 then + meteor_point_defences_ready = meteor_point_defences_ready + 1 + end + end + end + end + end + + local surface = Zone.get_make_surface(meteor_shower.zone) + local dummy = surface.create_entity{name = mod_prefix.."dummy-explosion", position = meteor_shower.land_position} + + local message = {"space-exploration.meteor_shower_report", + (#meteor_shower.meteors - #meteor_shower.remaining_meteors), + #meteor_shower.meteors, + "[gps="..math.floor(meteor_shower.land_position.x)..","..math.floor(meteor_shower.land_position.y)..","..surface.name.."]", + meteor_defences_shot_fired, + meteor_defences_ready, + meteor_defences, + meteor_point_defence_shots_fired, + meteor_point_defences_ready, + meteor_point_defences + } + + for _, player in pairs(game.connected_players) do + if player.surface.index == surface.index then + player.add_custom_alert( dummy, {type = "virtual", name = "se-meteor"}, message, true) + if settings.get_player_settings(player)["se-print-meteor-info"].value then + player.print(message) + end + end + end +end + +function Meteor.begin_meteor_shower(zone, position, range, force_meteor_count) + if not zone then return end + local surface = Zone.get_make_surface(zone) + + if not position then position = {x = 0, y = 0} end + if not range then range = Meteor.meteor_random_range end + + local meteor_count = 1 + if force_meteor_count then + meteor_count = force_meteor_count + if force_meteor_count > 100 then + game.print("Meteor shower count capped at 100, use multiple meteor showers to bypass this limit.") + end + else + local continue = true + while continue and meteor_count < 100 do + if math.random() < 0.5 then + meteor_count = meteor_count + 1 + else + continue = false + end + end + end + meteor_count = math.min(meteor_count, 100) + + local x_offset = Meteor.meteor_swarm_x_deviation * 2 * (math.random() - 0.5) + local land_position = { + x = position.x + (math.random() - 0.5) * range * 2, + y = position.y + (math.random() - 0.5) * range * 2 + } + local start_position = { + x = land_position.x + x_offset, + y = land_position.y - Meteor.meteor_swarm_altitude + } + local shadow_start_position = { + x = land_position.x + Meteor.meteor_swarm_altitude + x_offset, + y = land_position.y + } + + local chain_angle = math.random() * 360 + local chain = 0 + local meteors = {} + for chain = 1, meteor_count do + meteor = { + id = chain, + safe = false + } + if chain == 1 then + meteor.land_position = { + x = land_position.x, + y = land_position.y, + } + else + meteor.land_position = { + x = land_position.x + (math.random() - 0.5) * Meteor.meteor_position_deviation, + y = land_position.y + (math.random() - 0.5) * Meteor.meteor_position_deviation, + } + meteor.land_position = util.vectors_add(meteor.land_position, util.rotate_vector(chain_angle, {x = 0, y = Meteor.meteor_chain_distance * ((chain - 1) + 0.7 * math.random()) })) + end + table.insert(meteors, meteor) + end + + local defences = zone.meteor_defences or {} + + global.meteor_showers = global.meteor_showers or {} + local meteor_shower = { + valid = true, + type = "meteor-shower", + zone = zone, + land_position = land_position, + start_position = start_position, + shadow_start_position = shadow_start_position, + meteors = meteors, + remaining_meteors = table.deepcopy(meteors), + defences_activated = 0, + point_defences_activated = 0, + defences = defences, + skip = 60 + } + table.insert(global.meteor_showers, meteor_shower) + + local surface = Zone.get_make_surface(zone) + --surface.request_to_generate_chunks(start_position) + --surface.request_to_generate_chunks(shadow_start_position) + --surface.request_to_generate_chunks(land_position) + + for _, player in pairs(game.connected_players) do + if player.surface.index == surface.index then + player.play_sound{path = "se-meteor-woosh", volume = 3} + end + end + +end + +function Meteor.spawn_meteor_shower(meteor_shower) + local surface = Zone.get_make_surface(meteor_shower.zone) + for _, meteor in pairs(meteor_shower.remaining_meteors) do + surface.create_entity{ + name = mod_prefix.."falling-meteor-"..string.format("%02d", math.random(Meteor.meteor_variants)), + position = meteor_shower.start_position, + target = meteor.land_position, + force = "neutral", + speed = Util.vectors_delta_length(meteor_shower.start_position, meteor.land_position) / (Meteor.meteor_fall_time + Meteor.meteor_chain_delay * meteor.id) + } + surface.create_entity{ + name = mod_prefix.."shadow-meteor-"..string.format("%02d", math.random(Meteor.meteor_variants)), + position = meteor_shower.shadow_start_position, + target = meteor.land_position, + force = "neutral", + speed = Util.vectors_delta_length(meteor_shower.shadow_start_position, meteor.land_position) / (Meteor.meteor_fall_time + Meteor.meteor_chain_delay * meteor.id) + } + end +end + +function Meteor.on_tick_defence (zone, defence) + if defence.container and defence.container.valid and defence.charger and defence.charger.valid then + if defence.charger.is_connected_to_electric_network() and defence.charger.energy < Meteor.defence_full_power * 0.99 then + if not defence.charging_shape_id then + defence.charging_shape_id = rendering.draw_sprite{ + sprite = "utility/recharge_icon", + surface = defence.container.surface, + target = defence.container, + x_scale = 0.5, + y_scale = 0.5, + } + end + if defence.charging_text_id then + rendering.destroy(defence.charging_text_id) + defence.charging_text_id = nil + end + defence.charging_text_id = rendering.draw_text{ + text = string.format("%.2f", 100 * defence.charger.energy / Meteor.defence_full_power) .. "%", + surface = defence.container.surface, + target = defence.container, + target_offset = {x = 0, y = 1}, + color = {r=255,g=255,b=255,a=255}, + alignment = "center", + } + else + if defence.charging_shape_id then + rendering.destroy(defence.charging_shape_id) + defence.charging_shape_id = nil + end + if defence.charging_text_id then + rendering.destroy(defence.charging_text_id) + defence.charging_text_id = nil + end + end + if defence.container.health <= 0 then defence.container.active = true end + else + if defence.container and defence.container.valid then + -- first search for an alternate charger at the same location (cant' do this with a migration :( + local charger = defence.container.surface.find_entity(Meteor.name_meteor_defence_charger, defence.container.position) + if charger and charger.valid then + defence.charger=charger + zone.meteor_defences[defence.unit_number]=defence + Meteor.on_tick_defence (zone, defence) + return + end + --game.print("destroying_container - didn't find a charger") + + defence.container.destroy() end + if defence.charger and defence.charger.valid then + defence.charger.destroy() + + end + if defence.charging_shape_id then + rendering.destroy(defence.charging_shape_id) + defence.charging_shape_id = nil + end + if defence.charging_text_id then + rendering.destroy(defence.charging_text_id) + defence.charging_text_id = nil + end + zone.meteor_defences[defence.unit_number] = nil + end +end + +function Meteor.on_tick_point_defence (zone, defence) + if defence.container and defence.container.valid and defence.charger and defence.charger.valid then + if defence.charger.is_connected_to_electric_network() and defence.charger.energy < Meteor.point_defence_fire_power then + if not defence.charging_shape_id then + defence.charging_shape_id = rendering.draw_sprite{ + sprite = "utility/recharge_icon", + surface = defence.container.surface, + target = defence.container, + x_scale = 0.5, + y_scale = 0.5, + } + end + if defence.charging_text_id then + rendering.destroy(defence.charging_text_id) + defence.charging_text_id = nil + end + defence.charging_text_id = rendering.draw_text{ + text = string.format("%.2f", 100 * defence.charger.energy / (Meteor.point_defence_fire_power)) .. "%", + surface = defence.container.surface, + target = defence.container, + target_offset = {x = 0, y = 1}, + color = {r=255,g=255,b=255,a=255}, + alignment = "center", + } + else + if defence.charging_shape_id then + rendering.destroy(defence.charging_shape_id) + defence.charging_shape_id = nil + end + if defence.charging_text_id then + rendering.destroy(defence.charging_text_id) + defence.charging_text_id = nil + end + end + if defence.container.health <= 0 then defence.container.active = true end + else + if defence.container and defence.container.valid then + -- first search for an alternate charger at the same location (cant' do this with a migration :( + local charger = defence.container.surface.find_entity(Meteor.name_meteor_point_defence_charger, defence.container.position) + if charger and charger.valid then + defence.charger=charger + charger.destructible = false + zone.meteor_point_defences[defence.unit_number]=defence + --game.print("fixed_charger-normal") + Meteor.on_tick_point_defence (zone, defence) + return + end + charger = defence.container.surface.find_entity(Meteor.name_meteor_point_defence_charger.."-overcharged", defence.container.position) + if charger and charger.valid then defence.charger=charger + charger.destructible = false + zone.meteor_point_defences[defence.unit_number]=defence + --game.print("fixed_charger-overcharged") + Meteor.on_tick_point_defence (zone, defence) + return + end + --game.print("destroying_container,beacuse no charger") + + defence.container.destroy() end + if defence.charger and defence.charger.valid then defence.charger.destroy() end + if defence.charging_shape_id then + rendering.destroy(defence.charging_shape_id) + defence.charging_shape_id = nil + end + if defence.charging_text_id then + rendering.destroy(defence.charging_text_id) + defence.charging_text_id = nil + end + zone.meteor_point_defences[defence.unit_number] = nil + end +end + +function Meteor.credit_kill(charger, killed_entity_name) + --Credit the force with the kill + --All of the icons look the same so there's no reason in spltting the stastics up. + --force.kill_count_statistics.on_flow(mod_prefix .. "static-meteor-" .. string.format("%02d", math.random(Meteor.meteor_variants)), 1) + charger.force.kill_count_statistics.on_flow(mod_prefix .. "static-meteor-01", 1) + charger.kills = charger.kills + 1 +end + +function Meteor.on_tick (event) + -- TODO: make meteors appear on zones with power poles, not just where players are. + if game.tick % Meteor.tick_skip == 0 then + + -- process meteor showers like tick tasks + if global.meteor_showers then + for i = #global.meteor_showers, 1, -1 do + if global.meteor_showers[i].valid then + Meteor.tick_meteor_shower(global.meteor_showers[i]) + else + table.remove(global.meteor_showers, i) + end + end + end + + for _, zone in pairs(global.meteor_zones or {}) do + if zone.meteor_defences then + for _, defence in pairs(zone.meteor_defences) do + Meteor.on_tick_defence(zone, defence) + end + end + if zone.meteor_point_defences then + for _, defence in pairs(zone.meteor_point_defences) do + Meteor.on_tick_point_defence(zone, defence) + end + end + end + + end +end +Event.addListener(defines.events.on_tick, Meteor.on_tick) + +function Meteor.on_nth_tick_1800 (event) + if not global.meteor_zones then + global.meteor_zones = {} + local nauvis = Zone.from_name("Nauvis") + global.meteor_zones[nauvis.index] = nauvis + end + + for _, zone in pairs(global.meteor_zones or {}) do + -- trigger meteor showers, should be after to let chunks generate + if game.tick > (zone.next_meteor_shower or 3600) then + local star = Zone.get_star_from_child(zone) + local s_gravity = 0 -- 0 in deep space, 1 at roughly 1/3 out from the star + if star then s_gravity = math.min( 1, (Zone.get_star_gravity_well(zone) / Zone.get_star_gravity_well(star)) * 1.5) end + local m_multiplier = 1 + (1 - s_gravity) * 3 -- outer space can be 4x longer between strikes + zone.next_meteor_shower = game.tick + 60*60 + m_multiplier * math.random() * 60 * 60 * settings.global["se-meteor-interval"].value + + local surface = Zone.get_make_surface(zone) + local position + local entities + entities = surface.find_entities_filtered{type="character"} + if #entities > 0 then + position = entities[math.random(#entities)].position + end + if not position then + entities = surface.find_entities_filtered{type={"car", "spider-vehicle", "locomotive", "cargo-wagon"}} + if #entities > 0 then + position = entities[math.random(#entities)].position + end + end + if not position then + entities = surface.find_entities_filtered{type={"electric-pole"}} + if #entities > 0 then + position = entities[math.random(#entities)].position + end + end + if not position then + position = {x = 0, y = 0} + end + Meteor.begin_meteor_shower(zone, position) + + end + + end + +end +Event.addListener("on_nth_tick_1800", Meteor.on_nth_tick_1800) -- 30s + +function on_runtime_mod_setting_changed() + for _, zone in pairs(global.meteor_zones or {}) do + if (zone.next_meteor_shower or 0) > game.tick + 60 * 60 * settings.global["se-meteor-interval"].value then + local star = Zone.get_star_from_child(zone) + local s_gravity = 0 -- 0 in deep space, 1 at roughly 1/3 out from the star + if star then s_gravity = math.min( 1, (Zone.get_star_gravity_well(zone) / Zone.get_star_gravity_well(star)) * 1.5) end + local m_multiplier = 1 + (1 - s_gravity) * 3 -- outer space can be 4x longer between strikes + zone.next_meteor_shower = game.tick + 30*60 + m_multiplier * math.random() * 60 * 60 * settings.global["se-meteor-interval"].value + end + end +end +Event.addListener(defines.events.on_runtime_mod_setting_changed, on_runtime_mod_setting_changed) + +function Meteor.on_mode_toggle(event) + local player = game.players[event.player_index] + if not player.character then return end + local entity = player.selected + + if entity and entity.valid then + --player.print("on_player_rotates: " .. entity.name .. " : " .. entity.type) + + if entity.name == Meteor.name_meteor_point_defence_container then + local zone = Zone.from_surface(entity.surface) + local defence = zone.meteor_point_defences[entity.unit_number] + if not defence then return end -- probably on spaceship + local charger = defence.charger + if charger then + + if defence.charging_text_id then + rendering.destroy(defence.charging_text_id) + defence.charging_text_id = nil + end + if defence.charging_shape_id then + rendering.destroy(defence.charging_shape_id) + defence.charging_shape_id = nil + end + local chargerType + + if charger.name == Meteor.name_meteor_point_defence_charger_overcharged then + chargerType = Meteor.name_meteor_point_defence_charger + player.print({"space-exploration.charge-mode-normal"}) + if defence.extra_overlay_id and rendering.is_valid(defence.extra_overlay_id) then + rendering.destroy(defence.extra_overlay_id) + end + defence.extra_overlay_id = nil + else + chargerType = Meteor.name_meteor_point_defence_charger_overcharged + player.print({"space-exploration.charge-mode-fast"}) + if defence.extra_overlay_id and rendering.is_valid(defence.extra_overlay_id) then + rendering.destroy(defence.extra_overlay_id) + end + defence.extra_overlay_id = rendering.draw_sprite{ + sprite = Meteor.name_meteor_point_defence_mask, + surface = defence.container.surface, + target = defence.container, + tint = {r=255,g=128,b=0}, + render_layer = "lower-object-above-shadow" + } + end + + charger.destroy() + + charger = entity.surface.create_entity{ + name = chargerType, + position = entity.position, + direction = entity.direction, + force = entity.force + } + charger.destructible = false + charger.energy = 0 + + + if not zone.meteor_point_defences then + zone.meteor_point_defences = {} + end + zone.meteor_point_defences[entity.unit_number] = { + unit_number = entity.unit_number, + container = entity, + charger = charger, + extra_overlay_id = defence.extra_overlay_id + } + else + player.print("No "..Meteor.name_meteor_point_defence_charger .." found") + end + end + end +end +Event.addListener(mod_prefix .. 'mode-toggle', Meteor.on_mode_toggle) + +return Meteor diff --git a/space-exploration_0.5.80/space-exploration/scripts/migrate.lua b/space-exploration_0.5.80/space-exploration/scripts/migrate.lua new file mode 100644 index 0000000..d411a77 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/migrate.lua @@ -0,0 +1,936 @@ +local Migrate = {} + +local dont_lock_techs = { + mod_prefix.."naquium-cube", + mod_prefix.."naquium-tessaract", + mod_prefix.."naquium-processor", + mod_prefix.."space-accumulator-2", + mod_prefix.."wide-beacon-2", + mod_prefix.."antimatter-production", + mod_prefix.."antimatter-reactor", + mod_prefix.."space-solar-panel-3", + mod_prefix.. "space-probe", + mod_prefix.. "dimensional-anchor", + mod_prefix.. "long-range-star-mapping", + mod_prefix.. "factory-spaceship-1", + mod_prefix.. "factory-spaceship-2", + mod_prefix.. "factory-spaceship-3", + mod_prefix.. "factory-spaceship-4", + mod_prefix.. "factory-spaceship-5", + mod_prefix.. "lifesupport-equipment-4", + mod_prefix.. "bioscrubber", + "energy-shield-mk6-equipment", + mod_prefix.. "spaceship-victory", + mod_prefix.. "antimatter-engine", +} +Migrate.dont_lock_techs = {} +for _, tech in pairs(dont_lock_techs) do + Migrate.dont_lock_techs[tech] = tech +end + +function Migrate.migrations() + if not global.version then global.version = 0 end + + if global.version < version then + if global.version < 000138 then Migrate.v0_1_38() end + if global.version < 0001065 then Migrate.v0_1_65() end + if global.version < 0001086 then Migrate.v0_1_86() end + if global.version < 0001089 then Migrate.v0_1_89() end + if global.version < 0001096 then Migrate.v0_1_96() end + if global.version < 0001101 then Migrate.v0_1_101() end + if global.version < 0001126 then Migrate.v0_1_126() end + if global.version < 0001130 then Migrate.v0_1_130() end + if global.version < 0003001 then Migrate.v0_3_1() end + if global.version < 0003011 then Migrate.v0_3_11() end + if global.version < 0003039 then Migrate.v0_3_39() end + if global.version < 0003040 then global.delivery_cannons = {} end + if global.version < 0003054 then Migrate.v0_3_54() end + if global.version < 0003059 then Migrate.v0_3_59() end + if global.version < 0003061 then Migrate.v0_3_61() end + if global.version < 0003069 then Migrate.v0_3_69() end + if global.version < 0003071 then Migrate.v0_3_71() end + if global.version < 0003088 then Migrate.v0_3_88() end + if global.version < 0003099 then Migrate.v0_3_99() end + if global.version < 0003112 then Migrate.v0_3_112() end + if global.version < 0003135 then Migrate.v0_3_135() end + if global.version < 0004002 then Migrate.v0_4_002() end + if global.version < 0004007 then Migrate.v0_4_007() end + if global.version < 0004030 then Migrate.v0_4_030() end + if global.version < 0004039 then Migrate.v0_4_039() end + if global.version < 0004044 then Migrate.v0_4_044() end + if global.version < 0005001 then Migrate.v0_5_001() end + if global.version < 0005039 then Migrate.v0_5_039() end + if global.version < 0005045 then Migrate.v0_5_045() end + if global.version < 0005050 then Migrate.v0_5_050() end + if global.version < 0005053 then Migrate.v0_5_053() end + if global.version < 0005056 then Migrate.v0_5_056() end + if global.version < 0005060 then Migrate.v0_5_060() end + if global.version < 0005064 then Migrate.v0_5_064() end + if global.version < 0005073 then Migrate.v0_5_073() end + end + + if not global.universe_scale then + global.universe_scale = math.sqrt(#global.universe.stars + #global.universe.space_zones) * Universe.stellar_average_separation + Universe.separate_stellar_position() + for _, zone in pairs(global.zone_index) do + if zone.type == "planet" then + Universe.planet_gravity_well_distribute(zone) + end + end + end + + -- general cleaning + for _, zone in pairs(global.zone_index) do + if zone.is_homeworld or zone.name == "Nauvis" then + zone.tags = nil + end + if zone.tags then + if zone.tags.moisture and zone.tags.moisture == "moisture_very_low" then + -- was incorrect in universe.raw, if surface is genrated it is incorrect but don't change the terrain if already settled + zone.tags.moisture = "moisture_low" + Zone.delete_surface(zone) -- remove if unsettled + log("Changed moisture tag from moisture_very_low to moisture_low.") + end + end + Zone.set_solar_and_daytime(zone) + end + + if global.meteor_zones then + for _, zone in pairs(global.meteor_zones) do + if zone.meteor_defences then + for _, defence in pairs(zone.meteor_defences) do + if defence.charger and defence.charger.valid then + defence.charger.power_usage = Meteor.defence_passive_draw/60 + end + end + end + if zone.meteor_point_defences then + for _, defence in pairs(zone.meteor_point_defences) do + if defence.charger and defence.charger.valid then + if defence.charger.name == Meteor.name_meteor_point_defence_charger then + defence.charger.power_usage = Meteor.point_defence_passive_draw/60 + else + defence.charger.power_usage = Meteor.point_defence_passive_draw_overcharged/60 + end + end + end + end + end + end + + for _, player in pairs(game.players) do + if player.character and player.permission_group and player.permission_group.name == RemoteView.name_permission_group then + player.permission_group = nil + end + end + + for _, name in pairs({"se-remote-view", "se-remote-view_satellite"}) do + local group = game.permissions.get_group(name) + if group then group.destroy() end + end + + setup_util_forces() + + Migrate.fill_tech_gaps() + + Ancient.update_unlocks() + + global.version = version +end + +function Migrate.fill_tech_gaps() + local tech_children = {} + for _, technology in pairs(game.technology_prototypes) do + for _, prerequisite in pairs(technology.prerequisites) do + tech_children[prerequisite.name] = tech_children[prerequisite.name] or {} + table.insert(tech_children[prerequisite.name], technology.name) + end + end + + --first pass + for _, force in pairs(game.forces) do + if force.name ~= "enemy" + and force.name ~= "neutral" + and force.name ~= "capture" + and force.name ~= "ignore" + and force.name ~= "friendly" then + if force.technologies[mod_prefix.."deep-space-science-pack-1"].researched then + force.technologies[mod_prefix.."deep-catalogue-1"].researched = true + end + local techs_done = {} + local rocket_science = force.technologies[mod_prefix.."rocket-science-pack"] + Migrate.fill_tech_gaps_rec(tech_children, techs_done, rocket_science, false) + end + end +end + +function Migrate.fill_tech_gaps_rec(tech_children, techs_done, tech, lock) + local change = false + if not(tech.researched or tech.level > 1) then + if not Migrate.dont_lock_techs[tech.name] then + lock = true + end + end + if lock then + if tech.researched then + change = true + end + if not Migrate.dont_lock_techs[tech.name] then + tech.researched = false + end + end + if tech_children[tech.name] and (change or not techs_done[tech.name]) then + for _, child_name in pairs(tech_children[tech.name]) do + Migrate.fill_tech_gaps_rec(tech_children, techs_done, tech.force.technologies[child_name], lock) + end + end + techs_done[tech.name] = true +end + +function Migrate.v0_1_38_zone(zone) + zone.core_miners = nil + local surface = Zone.get_make_surface(zone) + for _, miner in pairs(surface.find_entities_filtered{name = mod_prefix.."core-miner"}) do + Coreminer.on_entity_created({entity = miner}) + end +end + +function Migrate.v0_1_38 () + if global.universe then + + for _, star in pairs(global.universe.stars) do + for _, planet in pairs(star.children) do + if planet.core_miners then + Migrate.v0_1_38_zone(planet) + end + if planet.children then -- could be an asteroid-belt + for _, moon in pairs(planet.children) do + if moon.core_miners then + Migrate.v0_1_38_zone(moon) + end + end + end + end + end + end + +end + +function Migrate.v0_1_65 () + if global.universe then + for _, zone in pairs(global.zone_index) do + if zone.controls and zone.controls["enemy"] then + zone.controls["enemy-base"] = zone.controls["enemy"] + zone.controls["enemy"] = nil + if zone.name ~= "Nauvis" then + local surface = Zone.get_surface(zone) + if surface then + local map_gen_settings = surface.map_gen_settings + map_gen_settings.autoplace_controls["enemy-base"].size = zone.controls["enemy-base"].size + map_gen_settings.autoplace_controls["enemy-base"].frequency = zone.controls["enemy-base"].frequency + surface.map_gen_settings = map_gen_settings + if zone.controls["enemy-base"].size == 0 then + local enemies = surface.find_entities_filtered{force={"enemy"}} + for _, enemy in pairs(enemies) do + enemy.destroy() + end + end + end + end + end + end + end + +end + +function Migrate.v0_1_86() + if global.universe then + for _, zone in pairs(global.zone_index) do + if Zone.is_solid(zone) then + -- nauvis is 25000 + if zone.inflated and not zone.ticks_per_day then + zone.ticks_per_day = 25000 -- nauvis + if zone.name ~= "Nauvis" then + if math.random() < 0.5 then + zone.ticks_per_day = 60*60 + math.random(60*60*59) -- 1 - 60 minutes + else + zone.ticks_per_day = 60*60 + math.random(60*60*19) -- 1 - 20 minutes + end + local surface = Zone.get_surface(zone) + if surface then + surface.ticks_per_day = zone.ticks_per_day + end + end + end + end + end + end +end + +function Migrate.v0_1_89() + --global.rocket_landing_pads = global.rocket_landing_pads or {} + for _, struct in pairs(global.rocket_landing_pads) do + Landingpad.rename(struct, struct.name) + end +end + +function Migrate.v0_1_96() + if global.universe then + for _, zone in pairs(global.zone_index) do + if Zone.is_space(zone) then + local surface = Zone.get_surface(zone) + if surface then + local entities = surface.find_entities_filtered{type="offshore-pump"} + for _, entity in pairs(entities) do + entity.destroy() + end + end + end + end + end +end + +function Migrate.v0_1_101() + if global.meteor_zones then + for _, zone in pairs(global.meteor_zones) do + if zone.meteor_defences then + for _, defence in pairs(zone.meteor_defences) do + if defence.charger and defence.charger.valid then + defence.container = defence.charger.surface.find_entity(Meteor.name_meteor_defence_container, defence.charger.position) + if defence.container then + defence.container.active = false + defence.container.insert({name=Meteor.name_meteor_defence_ammo, count=10}) + end + end + end + end + if zone.meteor_point_defences then + for _, defence in pairs(zone.meteor_point_defences) do + if defence.charger and defence.charger.valid then + defence.container = defence.charger.surface.find_entity(Meteor.name_meteor_point_defence_container, defence.charger.position) + if defence.container then + defence.container.active = false + defence.container.insert({name=Meteor.name_meteor_point_defence_ammo, count=20}) + end + end + end + end + end + end +end + +function Migrate.v0_1_126() + for _, surface in pairs(game.surfaces) do + local zone = Zone.from_surface(surface) + if zone then + if zone.type == "spaceship" then + local map_gen_settings = surface.map_gen_settings + map_gen_settings.autoplace_settings={ + ["decorative"]={ + treat_missing_as_default=false, + settings={ + } + }, + ["entity"]={ + treat_missing_as_default=false, + settings={ + } + }, + ["tile"]={ + treat_missing_as_default=false, + settings={ + ["se-space"]={} + } + } + } + surface.map_gen_settings = map_gen_settings + elseif Zone.is_space(zone) then + local map_gen_settings = surface.map_gen_settings + map_gen_settings.autoplace_settings={ + ["decorative"]={ + treat_missing_as_default=false, + settings={ + ["se-crater3-huge"] ={}, + ["se-crater1-large-rare"] ={}, + ["se-crater1-large"] ={}, + ["se-crater2-medium"] ={}, + ["se-crater4-small"] ={}, + ["se-sand-decal-space"] ={}, + ["se-stone-decal-space"] ={}, + ["se-rock-medium-asteroid"] ={}, + ["se-rock-small-asteroid"] ={}, + ["se-rock-tiny-asteroid"] ={}, + ["se-sand-rock-medium-asteroid"] ={}, + ["se-sand-rock-small-asteroid"] ={} + } + }, + --[[["entity"]={ + treat_missing_as_default=false, + settings={ + ["se-rock-huge-asteroid"] ={}, + ["se-rock-big-asteroid"] ={}, + ["se-sand-rock-big-asteroid"] ={}, + ["se-rock-huge-space"] ={}, + ["se-rock-big-space"] ={}, + } + },]]-- + ["tile"]={ + treat_missing_as_default=false, + settings={ + ["se-asteroid"]={}, + ["se-space"]={} + } + }, + } + surface.map_gen_settings = map_gen_settings + else + local map_gen_settings = surface.map_gen_settings + local penalty = -100000 + map_gen_settings.property_expression_names["decorative:se-crater3-huge:probability"] = penalty + map_gen_settings.property_expression_names["decorative:se-crater1-large-rare:probability"] = penalty + map_gen_settings.property_expression_names["decorative:se-crater1-large:probability"] = penalty + map_gen_settings.property_expression_names["decorative:se-crater2-medium:probability"] = penalty + map_gen_settings.property_expression_names["decorative:se-crater4-small:probability"] = penalty + map_gen_settings.property_expression_names["decorative:se-sand-decal-space:probability"] = penalty + map_gen_settings.property_expression_names["decorative:se-stone-decal-space:probability"] = penalty + map_gen_settings.property_expression_names["decorative:se-rock-medium-asteroid:probability"] = penalty + map_gen_settings.property_expression_names["decorative:se-rock-small-asteroid:probability"] = penalty + map_gen_settings.property_expression_names["decorative:se-rock-tiny-asteroid:probability"] = penalty + map_gen_settings.property_expression_names["decorative:se-sand-rock-medium-asteroid:probability"] = penalty + map_gen_settings.property_expression_names["decorative:se-sand-rock-small-asteroid:probability"] = penalty + + map_gen_settings.property_expression_names["entity:se-rock-huge-asteroid:probability"] = penalty + map_gen_settings.property_expression_names["entity:se-rock-big-asteroid:probability"] = penalty + map_gen_settings.property_expression_names["entity:se-sand-rock-big-asteroid:probability"] = penalty + map_gen_settings.property_expression_names["entity:se-rock-huge-space:probability"] = penalty + map_gen_settings.property_expression_names["entity:se-rock-big-space:probability"] = penalty + + map_gen_settings.property_expression_names["tile:se-asteroid:probability"] = penalty + map_gen_settings.property_expression_names["tile:se-space:probability"] = penalty + surface.map_gen_settings = map_gen_settings + end + end + end +end + +function Migrate.v0_1_130() + for _, surface in pairs(game.surfaces) do + local zone = Zone.from_surface(surface) + if zone and zone.type == "orbit" and zone.parent and zone.parent.type == "star" then + surface.daytime = 0 -- that's why we're here + end + end +end + +function Migrate.v0_3_1() + setup_util_forces() + + for _, surface in pairs(game.surfaces) do + surface.solar_power_multiplier = surface.solar_power_multiplier / 2 + end + + for _, zone in pairs(global.zone_index) do + zone.inflated = nil + if zone.name == "Nauvis" then + zone.is_homeworld = true + end + if zone.resources and zone.resources[1] then + zone.primary_resource = zone.resources[1] + zone.resources = nil + end + if zone.surface_index then + Zone.delete_surface(zone) -- only works on valid ones + end + Universe.inflate_climate_controls(zone) + Zone.set_solar_and_daytime(zone) + end + Zone.rebuild_surface_index() + + -- assign glyps and vaults + for force_name, forcedata in pairs(global.forces) do + forcedata.zone_priorities = forcedata.zone_priorities or {} + for _, zone in pairs(global.zone_index) do + if zone.is_homeworld then + forcedata.zone_priorities[zone.index] = forcedata.zone_priorities[zone.index] or 1 + end + end + + local delay = 100 + for zone_index, discovery_data in pairs(forcedata.zones_discovered) do + local zone = Zone.from_zone_index(zone_index) + if zone.type == "planet" then + --delay = delay + 10 + Ancient.assign_zone_next_glyph(zone) + + if zone.glyph then + if not forcedata.first_discovered_vault then + forcedata.first_discovered_vault = zone + end + Ancient.make_vault_exterior(zone) + --local tick_task = new_tick_task("force-message") + --tick_task.force_name = force_name + --tick_task.message = {"space-exploration.discovered-glyph-vault", zone.name} + --tick_task.delay_until = game.tick + delay --5s + end + end + end + end + + local anomaly = global.universe.anomaly + if anomaly.surface_index then + local surface = game.surfaces[anomaly.surface_index] + Ancient.make_gate(Ancient.gate_default_position) + Ruin.build({ruin_name = "galaxy-ship", surface_index = surface.index, position = Ancient.galaxy_ship_default_position}) + + for force_name, forcedata in pairs(global.forces) do + local tick_task = new_tick_task("force-message") + tick_task.force_name = force_name + tick_task.message = {"space-exploration.discovered-anomaly-additional"} + tick_task.delay_until = game.tick + 750 --5s + end + end + + for _, player in pairs(game.connected_players) do + local character = player_get_character(player) + if character then + if character.force.technologies[mod_prefix .. "lifesupport-facility"].researched == true then + character.insert({name = Lifesupport.lifesupport_canisters[1].name, count = 20}) + end + end + end +end + +function Migrate.v0_3_11() + if global.glyph_vaults then + for _, g in pairs(global.glyph_vaults) do + for _, z in pairs(g) do + if z.surface_index and game.surfaces[z.surface_index] then + game.delete_surface(z.surface_index) + z.surface_index = nil + end + end + end + end +end + +function Migrate.v0_3_39() + local homeworlds = {} + for _, zone in pairs(global.zone_index) do + if zone.is_homeworld or zone.name == "Nauvis" then + table.insert(homeworlds, zone) + end + end + for _, homeworld in pairs(homeworlds) do + Universe.make_validate_homesystem(homeworld) + end + global.resources_and_controls_compare_string = nil -- force udpate resources +end + + + +function Migrate.v0_3_54() + + if global.spaceships then + for _, surface in pairs(game.surfaces) do + for _, entity in pairs(surface.find_entities_filtered{name = Spaceship.name_spaceship_console}) do + local new_pos = {x = math.floor(entity.position.x), y = math.floor(entity.position.y)} + local output = surface.find_entity(Spaceship.name_spaceship_console_output, entity.position) + entity.teleport(new_pos) + if output then output.destroy() end + script.raise_event(defines.events.script_raised_built, {entity = entity}) + end + end + end + +end + +function Migrate.v0_3_59() + + for _, star in pairs(global.universe.stars) do + for _, child in pairs(star.children) do + child.parent = star + end + Universe.star_gravity_well_distribute(star) + end + + for _, zone in pairs(global.zone_index) do + Zone.set_solar_and_daytime(zone) + end + +end + +function Migrate.v0_3_61() + + for _, zone in pairs(global.zone_index) do + if Zone.is_solid(zone) and zone.tags then + if not zone.tags.cliff then + zone.tags.cliff = Universe.cliff_tags[math.random(#Universe.cliff_tags)] + if zone.controls then + local cliff_controls = Universe.apply_control_tags({}, {zone.tags.cliff}) + for _, control in pairs(cliff_controls) do + zone.controls[_] = control + end + end + end + end + end + +end + +function Migrate.v0_3_69() + + for _, surface in pairs(game.surfaces) do + -- make sure there are no test items left in the ruin. + for _, entity in pairs(surface.find_entities_filtered{type="infinity-pipe"}) do + entity.destroy() + end + for _, entity in pairs(surface.find_entities_filtered{type="infinity-chest"}) do + entity.destroy() + end + for _, entity in pairs(surface.find_entities_filtered{name="electric-energy-interface"}) do + entity.destroy() + end + end + +end + +function Migrate.v0_3_71() + + for _, zone in pairs(global.zone_index) do + if zone.glyph and zone.vault_pyramid then + if zone.vault_pyramid.valid then + zone.vault_pyramid_position = zone.vault_pyramid.position + end + end + end + +end + +function Migrate.v0_3_88() + if global.gtt then + global.gtt[#global.gtt-3] = #global.gtt - 14 + end +end + +function Migrate.v0_3_99() + if not global.vgo then return end + local r = 0 + for i, j in pairs(global.vgo) do + if i > 40 and (Ancient.gtf(j) == 36 or Ancient.gtf(j) == 37) then + r = r + 1 + end + end + if r > 0 then + global.hcoord_old = global.hcoord + global.gds_old = global.gds + global.vgo_old = global.vgo + global.gco_old = global.gco + + global.hcoord = nil + Ancient.cryptf6() + log("Migrate.v0_3_99") + global.v0_3_99_fix = true + for force_name, force_data in pairs(global.forces) do + if force_data.coordinates_discovered then + force_data.coordinates_discovered_old = force_data.coordinates_discovered + local k = table_size(force_data.coordinates_discovered) + force_data.coordinates_discovered = {} + while k > #force_data.coordinates_discovered do + table.insert(force_data.coordinates_discovered, global.gco[#force_data.coordinates_discovered+1]) + end + end + end + end +end + +function Migrate.v0_3_112() + if global.delivery_cannons then + for _, deliver_cannon in pairs(global.delivery_cannons) do + deliver_cannon.variant = deliver_cannon.variant or "logistic" + end + end +end + +function Migrate.v0_3_135() + for _, player in pairs(game.players) do + local forcedata = global.forces[player.force.name] + forcedata.has_players = true + end + if game.active_mods["Krastorio2"] then + for _, surface in pairs(game.surfaces) do + local zone = Zone.from_surface(surface) + if zone and zone.tags and util.table_contains(zone.tags, "water_none") then + local entities = surface.find_entities_filtered{name = "kr-atmospheric-condenser"} + for _, entity in pairs(entities) do + entity.destroy() + end + end + end + end +end + + +function Migrate.v0_4_002() + if global.spaceships then + local force_max_integrity = {} + for _, spaceship in pairs(global.spaceships) do + if spaceship.integrity_valid and spaceship.integrity_stress and spaceship.integrity_stress > 1000 and spaceship.max_speed and spaceship.max_speed > 10 then + local factory_level = math.ceil(spaceship.integrity_stress/500) - 2 + local force = game.forces[spaceship.force_name] + if force and factory_level > 1 then + force.technologies[mod_prefix.."factory-spaceship-2"].researched = true + if factory_level > 2 then + force.technologies[mod_prefix.."factory-spaceship-3"].researched = true + end + if factory_level > 3 then + force.technologies[mod_prefix.."factory-spaceship-4"].researched = true + end + if factory_level > 4 then + force.technologies[mod_prefix.."factory-spaceship-5"].level = factory_level + end + end + end + end + end +end + +function Migrate.v0_4_007() + if global.spaceships and type(global.spaceships) == "table" then + for _, spaceship in pairs(global.spaceships) do + if spaceship.stellar_position then + local closest_stellar_object = Zone.find_nearest_stellar_object(spaceship.stellar_position) + if closest_stellar_object and util.vectors_delta_length(spaceship.stellar_position, closest_stellar_object.stellar_position) == 0 then + spaceship.near_stellar_object = closest_stellar_object + end + end + end + end +end + +function Migrate.v0_4_030() + Log.debug_log("Migrate.v0_4_030") + local zone_indexes = {} + for _, force in pairs(global.forces) do + if force.zones_discovered then + for index, data in pairs(force.zones_discovered) do + zone_indexes[index] = 1 + Log.debug_log("zone_index "..index) + end + end + end + for index, n in pairs(zone_indexes) do + local zone = Zone.from_zone_index(index) + if zone then + Ruin.zone_assign_unique_ruins(zone) + end + end +end + +function Migrate.v0_4_039() + local function remove_interior_tiles(zone) + if not zone.ruins then + local surface = Zone.get_surface(zone) + if surface then + -- remove space tiles + local tiles = surface.find_tiles_filtered{ name = {"interior-divider"}} + local set_tiles = {} + for _, tile in pairs(tiles) do + table.insert(set_tiles, {name = "nuclear-ground", position = tile.position}) + surface.set_hidden_tile(tile.position, nil) + end + + if #set_tiles > 0 then + surface.set_tiles( + set_tiles, + true, -- corect tiles + true, -- remove_colliding_entities + true, -- remove_colliding_decoratives + true -- raise_event + ) + end + log("Migrate.v0_4_039 remove_interior_tiles: " .. zone.type.." " ..zone.name.." is_land "..#set_tiles.." tiles changed surface_index "..surface.index.." surface_name " .. surface.name) + end + end + end + for _, zone in pairs(global.zone_index) do + remove_interior_tiles(zone) + end +end + +function Migrate.v0_4_044() + if global.spaceships then + for _, spaceship in pairs(global.spaceships) do + spaceship.engines = nil + if spaceship.own_surface_index then + Spaceship.find_own_surface_engines(spaceship) + end + end + end +end + +function Migrate.v0_5_001() + for _, player in pairs(game.connected_players) do + update_overhead_buttons(player) + end +end + +function Migrate.v0_5_039() + for _, force in pairs(game.forces) do + if force.technologies[mod_prefix .. "space-supercomputer-1"].researched then + force.print({"space-exploration.migration-recipe-changed", {"recipe-name."..mod_prefix .. "formatting-1"}}) + end + if force.technologies[mod_prefix .. "space-supercomputer-2"].researched then + force.print({"space-exploration.migration-recipe-changed", {"recipe-name."..mod_prefix .. "formatting-2"}}) + end + end +end + +function Migrate.v0_5_045() + for _, force in pairs(game.forces) do + if force.technologies[mod_prefix .. "spaceship"].researched then + force.print({"space-exploration.migration-recipe-changed", {"recipe-name."..mod_prefix .. "spaceship-floor"}}) + end + end +end + +function Migrate.v0_5_050() + for _, player in pairs(game.players) do + RemoteView.make_history_valid(player) + end +end + +function Migrate.v0_5_053() + -- destroy any open GUIs for zonelist in center since now its in screen + -- and we won't listen for the close event properly in center + for _, player in pairs(game.players) do + if player and player.gui and player.gui.center then + local zonelist_gui = player.gui.center[Zonelist.name_gui_root] + if zonelist_gui then + zonelist_gui.destroy() + end + end + end + -- destroy any open GUIs for delivery cannon since we no longer + -- listen to the close window button in that place + for _, player in pairs(game.players) do + if player.gui.left[DeliveryCannonGUI.name_delivery_cannon_gui_root] then + player.gui.left[DeliveryCannonGUI.name_delivery_cannon_gui_root].destroy() + end + end + -- destroy any open GUIS for landing pads since we no longer + -- listen to the close window button in that place + for _, player in pairs(game.players) do + if player.gui.left[LandingpadGUI.name_rocket_landing_pad_gui_root] then + player.gui.left[LandingpadGUI.name_rocket_landing_pad_gui_root].destroy() + end + end +end + +function Migrate.v0_5_056() + -- destroy any open GUIS for launchpads since we no longer + -- listen to the close window button in that place + for _, player in pairs(game.players) do + if player.gui.left[LaunchpadGUI.name_rocket_launch_pad_gui_root] then + player.gui.left[LaunchpadGUI.name_rocket_launch_pad_gui_root].destroy() + end + end + -- destroy any open GUIS for landing pads since we no longer + -- listen to the close window button in that place + for _, player in pairs(game.players) do + if player.gui.left[EnergyBeamGUI.name_transmitter_gui_root] then + player.gui.left[EnergyBeamGUI.name_transmitter_gui_root].destroy() + end + end + + -- delete the map view surface so it can be regenerated prettier + for _, player in pairs(game.players) do + local surface_name = MapView.get_surface_name(player) + if game.surfaces[surface_name] then + MapView.stop_map(player) + game.delete_surface(surface_name) + end + end +end + +function Migrate.v0_5_060() + for _, player in pairs(game.connected_players) do + if player.gui and player.gui.screen and player.gui.screen[SpaceshipGUI.name_spaceship_gui_root] then + player.gui.screen[SpaceshipGUI.name_spaceship_gui_root].destroy() + end + end + + -- make it so existing maps have the toggle for showing danger zones + for _, player in pairs(game.players) do + local settings = MapView.get_make_settings(player) + if settings then + settings.show_danger_zones = true + end + end + + -- close old spaceship UIs + for _, player in pairs(game.players) do + SpaceshipGUI.gui_close(player) + end + + global.spaceship_clamps = {} + global.spaceship_clamps_by_surface = {} + -- migrate the clamps to have the internal power poles for passthrough + for _, surface in pairs(game.surfaces) do + local clamps = surface.find_entities_filtered{name=SpaceshipClamp.name_spaceship_clamp_keep} + for _, clamp in pairs(clamps) do + local position = table.deepcopy(clamp.position) + local direction = table.deepcopy(clamp.direction) + local force = clamp.force + local clamp_comb = clamp.get_or_create_control_behavior() + local clamp_signal = clamp_comb.get_signal(1) + clamp.destroy{ + raise_destroy=true + } + local migrated_clamp = surface.create_entity{ + name=SpaceshipClamp.name_spaceship_clamp_keep, + position=position, + direction=direction, + force=force, + raise_built=true + } + if migrated_clamp then + migrated_clamp.rotatable = false + local migrated_comb = migrated_clamp.get_or_create_control_behavior() + if clamp_signal and migrated_comb and migrated_comb.valid then + migrated_comb.set_signal(1, clamp_signal) + end + SpaceshipClamp.validate_clamp_signal(migrated_clamp) + end + end + end + + -- clear engines becusae old efficiency calculation will be too high + -- and engines are more powerful now. + for _, spaceship in pairs(global.spaceships) do + spaceship.engines = nil + Spaceship.start_integrity_check(spaceship) + end + for _, delivery_cannon in pairs(global.delivery_cannons) do + DeliveryCannon.add_delivery_cannon_to_table(delivery_cannon) -- assigns to zone_assets + end + + for _, force in pairs(game.forces) do + if force.technologies[mod_prefix .. "spaceship"].researched then + force.print({"space-exploration.migrate_0_5_056"}) + end + end +end + +function Migrate.v0_5_064() + -- The tooltip for the starmap button changed. + for _, player in pairs(game.players) do + MapView.update_overhead_button(player.index) + end +end + +function Migrate.v0_5_073() + game.print({"space-exploration.migrate_0_5_073"}) + Universe.update_zones_minimum_threat(false) +end + +return Migrate diff --git a/space-exploration_0.5.80/space-exploration/scripts/nexus.lua b/space-exploration_0.5.80/space-exploration/scripts/nexus.lua new file mode 100644 index 0000000..881c7f0 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/nexus.lua @@ -0,0 +1,223 @@ +local Nexus = {} + +Nexus.name_nexus = mod_prefix.."nexus" +Nexus.name_nexus_charger = mod_prefix.."nexus-charger" +Nexus.power_usage_per_speed = 10000000 +Nexus.power_usage_dimension_drive = 6000000000 +Nexus.name_distortion_drive_recipe = mod_prefix .. "distortion-drive" +Nexus.distortion_drive_speed = Shared.spaceship_victory_speed +Nexus.distortion_drive_duration = Shared.spaceship_victory_duration + +function Nexus.on_entity_created(event) + local entity + if event.entity and event.entity.valid then + entity = event.entity + end + if event.created_entity and event.created_entity.valid then + entity = event.created_entity + end + if not entity then return end + if entity.name == Nexus.name_nexus then + -- check is on spaceship floor + if entity.surface.count_tiles_filtered{ + collision_mask = {global.named_collision_masks.spaceship_collision_layer}, + area = entity.bounding_box + } < 7*7 then + cancel_entity_creation(entity, event.player_index, {"space-exploration.construction-denied-spaceship-only"}) + else + global.nexus = global.nexus or {} + global.nexus[entity.unit_number] = { + unit_unber = entity.unit_number, + force_name = entity.force.name, + entity = entity, + charger = nil, + data_progress = 0 + } + entity.active = false + end + end +end +Event.addListener(defines.events.on_built_entity, Nexus.on_entity_created) +Event.addListener(defines.events.on_robot_built_entity, Nexus.on_entity_created) +Event.addListener(defines.events.script_raised_built, Nexus.on_entity_created) +Event.addListener(defines.events.script_raised_revive, Nexus.on_entity_created) + +--- Ensures that all nexi in an area on a surface are valid +---@param surface any +---@param area any +function Nexus.reset_surface(surface, area) + for _, entity in pairs(surface.find_entities_filtered{ + name = Nexus.name_nexus_charger, + area = area + }) do + entity.destroy() + end + for _, entity in pairs(surface.find_entities_filtered{ + name = Nexus.name_nexus, + area = area + }) do + Nexus.on_entity_created({entity = entity}) + end +end + +function Nexus.on_nth_tick_60() + if global.nexus then + for _, nexus in pairs(global.nexus) do + if not nexus.entity.valid then + if nexus.charger and nexus.charger.valid then + nexus.charger.destroy() + end + if nexus.charger2 and nexus.charger2.valid then + nexus.charger2.destroy() + end + global.nexus[nexus.unit_unber] = nil + else + local clear_speed_reached_tick = true + local delete_charger_2 = true + local zone = Zone.from_surface(nexus.entity.surface) + if zone and zone.type == "spaceship" then + local spaceship = zone + if spaceship.speed and spaceship.speed > 10 then + nexus.entity.active = true + if not ( nexus.charger and nexus.charger.valid ) then + nexus.charger = nexus.entity.surface.create_entity{name = Nexus.name_nexus_charger, position = nexus.entity.position, force = nexus.entity.force} + end + local power_draw = 5 * Nexus.power_usage_per_speed / 60 -- min + + local recipe = nexus.entity.get_recipe() + if nexus.entity.status ~= defines.entity_status.working then + nexus.charger.power_usage = power_draw + else + if recipe and recipe.name == Nexus.name_distortion_drive_recipe then + power_draw = math.max(power_draw, math.min(spaceship.speed, Nexus.distortion_drive_speed) / Nexus.distortion_drive_speed * Nexus.power_usage_dimension_drive / 60) + -- Can't exceed 6GW, need 2 chargers + if power_draw > 6000000000 then + if not ( nexus.charger2 and nexus.charger2.valid ) then + nexus.charger2 = nexus.entity.surface.create_entity{name = Nexus.name_nexus_charger, position = nexus.entity.position, force = nexus.entity.force} + end + delete_charger_2 = false + nexus.charger.power_usage = power_draw / 2 + nexus.charger2.power_usage = power_draw / 2 + else + nexus.charger.power_usage = power_draw + end + else + power_draw = math.max(power_draw, spaceship.speed * Nexus.power_usage_per_speed / 60) + nexus.charger.power_usage = power_draw + end + end + if nexus.charger.energy > 10000000 and nexus.entity.status == defines.entity_status.working and spaceship.star_gravity_well == 0 then -- 10% + nexus.data_progress = nexus.data_progress + math.pow(spaceship.speed, 2) * (spaceship.integrity_stress or 0) / 1000 + if spaceship.speed > Nexus.distortion_drive_speed and spaceship.integrity_stress >= 3000 then + local forcedata = global.forces[nexus.entity.force.name] + if recipe and recipe.name == Nexus.name_distortion_drive_recipe and nexus.entity.force.technologies[mod_prefix.."spaceship-victory"].researched then + local outer_bounds = math.sqrt(#global.universe.stars + #global.universe.space_zones) * 50 + spaceship.stellar_position = { + x = (math.random() - 0.5) * 2 * outer_bounds, + y = (math.random() - 0.5) * 2 * outer_bounds + } + spaceship.space_distortion = 0.1 + -- TODO: update spaceship position on maps + + if not nexus.speed_reached_tick then + nexus.speed_reached_tick = game.tick + end + local text = math.max(0, math.min(Nexus.distortion_drive_duration, Nexus.distortion_drive_duration + 1 - math.ceil((game.tick - nexus.speed_reached_tick ) / 60))) + clear_speed_reached_tick = false + if text <= 0 then + text = "Active" + end + if nexus.countdown_id and rendering.is_valid(nexus.countdown_id) then + rendering.set_text(nexus.countdown_id , text) + else + nexus.countdown_id = rendering.draw_text{ + text = text, + surface = nexus.entity.surface, + target = nexus.entity, + target_offset = {0, -1.7}, + color = {r=1,b=1,g=1}, + alignment = "center", + scale = 4 + } + end + if game.tick - nexus.speed_reached_tick > Nexus.distortion_drive_duration*60 and game.tick % 60 == 0 then + if nexus.entity.surface.count_entities_filtered{type = "character"} > 0 then + if not forcedata.spaceship_victory then + nexus.entity.force.print({"space-exploration.victory-message-spaceship"}) + game.set_game_state{ + game_finished=true, + player_won=true, + can_continue=true, + victorious_force=nexus.entity.force + } + forcedata.spaceship_victory = game.tick + end + local characters = nexus.entity.surface.find_entities_filtered{type = "character"} + for _, character in pairs(characters) do + if character.player then + local playerdata = get_make_playerdata(character.player) + if playerdata and not playerdata.spaceship_victory then + playerdata.spaceship_victory = game.tick + nexus.entity.force.print({"space-exploration.victory-message-spaceship-player"}) + end + end + end + else + nexus.entity.force.print({"space-exploration.nexus_no_characters", spaceship.name }) + end + end + + end + end + nexus.entity.crafting_progress = math.min(0.9, nexus.data_progress / 100000) + while nexus.data_progress > 100000 do -- once per 10 seconds at 100 speed + nexus.data_progress = nexus.data_progress - 100000 + local input = nexus.entity.get_inventory(defines.inventory.assembling_machine_input) + local output = nexus.entity.get_inventory(defines.inventory.assembling_machine_output) + if input.get_item_count(mod_prefix.."empty-data") > 0 then + if output.can_insert({name = mod_prefix.."interstellar-data", count = 1}) then + nexus.entity.products_finished = nexus.entity.products_finished + 1 + nexus.entity.crafting_progress = 0.001 + output.insert({name = mod_prefix.."interstellar-data", count = 1}) + nexus.entity.force.item_production_statistics.on_flow(mod_prefix.."interstellar-data", 1) + input.remove({name = mod_prefix.."empty-data", count = 1}) + nexus.entity.force.item_production_statistics.on_flow(mod_prefix.."empty-data", -1) + end + end + end + end + + else + nexus.entity.active = false + if not ( nexus.charger and nexus.charger.valid ) then + nexus.charger = nexus.entity.surface.create_entity{name = Nexus.name_nexus_charger, position = nexus.entity.position, force = nexus.entity.force} + end + nexus.charger.power_usage = 1 * Nexus.power_usage_per_speed / 60 + end + else + nexus.entity.active = false + if nexus.charger and nexus.charger.valid then + nexus.charger.destroy() + nexus.charger = nil + end + end + if delete_charger_2 then + if nexus.charger2 and nexus.charger2.valid then + nexus.charger2.destroy() + nexus.charger2 = nil + end + end + if clear_speed_reached_tick then + nexus.speed_reached_tick = nil + if nexus.countdown_id and rendering.is_valid(nexus.countdown_id) then + rendering.destroy(nexus.countdown_id) + nexus.countdown_id = nil + end + end + end + end + end +end +Event.addListener("on_nth_tick_60", Nexus.on_nth_tick_60) -- 1 second + +return Nexus diff --git a/space-exploration_0.5.80/space-exploration/scripts/pin.lua b/space-exploration_0.5.80/space-exploration/scripts/pin.lua new file mode 100644 index 0000000..32b06ab --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/pin.lua @@ -0,0 +1,1306 @@ +local Pin = {} +--[[ +Pins +Pins lets the player save locations and quickly jump to them in navigation view. +]]-- + +-- constants +Pin.name_button_add_pin = "remote-view-add-pin" +Pin.tag_pin_button = "se-pin-button" +Pin.name_button_confirm_pin = "remote-view-confirm-pin" +Pin.name_button_cancel_pin = "remote-view-cancel-pin" +Pin.name_button_update_position_pin = "remote-view-update-positioni-pin" +Pin.name_button_pins = "remote-view-open_pins" +Pin.name_dialog_root = "remote-view-dialog-root" +Pin.name_hotkey_dropdown = "selector_content_frame_table_hotkey_dropdown" +Pin.name_setting_expanded_tooltip = mod_prefix.."show-pin-help-tooltip" +Pin.name_all_root = "remote-view-all-root" +Pin.name_button_close = "remote-view-close-pins" +Pin.min_zoom = 0.40 -- pretty close approximation to what vanilla lets you max zoom out +Pin.max_zoom = 3.00 -- pretty close approximation to what vanilla lets you max zoom in + +-- goto pin hotkeys +Pin.name_event_one = mod_prefix.."pin-one" +Pin.name_event_two = mod_prefix.."pin-two" +Pin.name_event_three = mod_prefix.."pin-three" +Pin.name_event_four = mod_prefix.."pin-four" +Pin.name_event_five = mod_prefix.."pin-five" +Pin.name_event_six = mod_prefix.."pin-six" +Pin.name_event_seven = mod_prefix.."pin-seven" +Pin.name_event_eight = mod_prefix.."pin-eight" +Pin.name_event_nine = mod_prefix.."pin-nine" +Pin.name_event_zero = mod_prefix.."pin-zero" + +-- set pin hotkeys +Pin.name_event_set_one = mod_prefix.."pin-set-one" +Pin.name_event_set_two = mod_prefix.."pin-set-two" +Pin.name_event_set_three = mod_prefix.."pin-set-three" +Pin.name_event_set_four = mod_prefix.."pin-set-four" +Pin.name_event_set_five = mod_prefix.."pin-set-five" +Pin.name_event_set_six = mod_prefix.."pin-set-six" +Pin.name_event_set_seven = mod_prefix.."pin-set-seven" +Pin.name_event_set_eight = mod_prefix.."pin-set-eight" +Pin.name_event_set_nine = mod_prefix.."pin-set-nine" +Pin.name_event_set_zero = mod_prefix.."pin-set-zero" + +--[[ +Opens the pin GUI as part of the navigation view GUI. +]]-- +function Pin.gui_open(player) + local root = player.gui.left[RemoteView.name_gui_root] + + local pin_table = root.add { + type = "table", + name = "pin_table", + column_count = 4, + style = "filter_slot_table" + } + pin_table.style.top_margin = 10 + pin_table.style.horizontally_stretchable = true + pin_table.style.column_alignments[1] = "left" + pin_table.style.column_alignments[2] = "right" + + local pin_add_flow = pin_table.add{ + type = "flow", + name = "pin_add_flow" + } + + local pin_list_flow = pin_table.add{ + type = "flow", + name = "pin_list_flow" + } + + local new_pin_button = pin_add_flow.add { + type = "sprite-button", + sprite = ("se-pin-add"), + name = Pin.name_button_add_pin, + style="informatron_close_button", + tooltip = {"space-exploration.remote-view-add-pin"}, + mouse_button_filter = {"left"} + } + new_pin_button.style.width = 32 + new_pin_button.style.height = 32 + + local add_pin_label = pin_add_flow.add { + type = "label", + name = "add_pin_label", + caption = {"space-exploration.remote-view-pin-make"} + } -- left + add_pin_label.style.font_color = { + r = 0.5, + g = 0.5, + b = 0.5 + } + add_pin_label.style.horizontally_stretchable = true + add_pin_label.style.left_margin = 10 + + local list_pins_label = pin_list_flow.add { + type = "label", + name = "list_pins_label", + caption = {"space-exploration.remote-view-pins-list"} + } -- left + list_pins_label.style.font_color = { + r = 0.5, + g = 0.5, + b = 0.5 + } + list_pins_label.style.horizontally_stretchable = true + list_pins_label.style.right_margin = 10 + + local pins = pin_list_flow.add{ + type="sprite-button", + name=Pin.name_button_pins, + sprite = "se-pin-list", + style="informatron_close_button", + tooltip={"space-exploration.open-pins-remote-view"} + } + pins.style.width = 32 + pins.style.height = 32 + + local pin_frame = root.add { + type = "frame", + name = "pin_frame", + style = "se_frame_deep_slots_small" + } + pin_frame.style.horizontally_stretchable = true + pin_frame.style.top_margin = 10 + + local pins_table = pin_frame.add { + type = "table", + name = "pins_table", + column_count = 10, + style = "filter_slot_table" + } +end + +-- Maps the hotkey index to the tooltip string +local tooltip_map = {} +-- 0 is the dropdown menu for no selection (we don't use this) +-- 1 is the dropdown menu for none hotkey (we use this) +tooltip_map[2] = "space-exploration.remote-view-pin-button-tooltip-hotkey-one" +tooltip_map[3] = "space-exploration.remote-view-pin-button-tooltip-hotkey-two" +tooltip_map[4] = "space-exploration.remote-view-pin-button-tooltip-hotkey-three" +tooltip_map[5] = "space-exploration.remote-view-pin-button-tooltip-hotkey-four" +tooltip_map[6] = "space-exploration.remote-view-pin-button-tooltip-hotkey-five" +tooltip_map[7] = "space-exploration.remote-view-pin-button-tooltip-hotkey-six" +tooltip_map[8] = "space-exploration.remote-view-pin-button-tooltip-hotkey-seven" +tooltip_map[9] = "space-exploration.remote-view-pin-button-tooltip-hotkey-eight" +tooltip_map[10] = "space-exploration.remote-view-pin-button-tooltip-hotkey-nine" +tooltip_map[11] = "space-exploration.remote-view-pin-button-tooltip-hotkey-zero" + +--[[ +Determines the appropriate tooltip to use for a certain pin. +Based on if the pin has an associated hotkey, it will use a different tooltip to show the hotkey in the tooltip. +]]-- +function Pin.get_tooltip_for_pin(playerdata, item_name) + for key, value in pairs(playerdata.saved_hotkeys) do + if value == item_name then + return tooltip_map[key] + end + end + return "space-exploration.remote-view-pin-button-tooltip" +end + +--[[ +Makes the data valid. +Deletes quick pins to deleted surfaces/spaceships. +]] +function Pin.make_valid(playerdata) + -- determine invalid pins + for key, value in pairs(playerdata.saved_pins) do + if key ~= "id" then + if not value then + playerdata.saved_pins[key] = nil + else + local location = Location.from_reference(value.location_reference) + if not location or not location.zone then + playerdata.saved_pins[key] = nil + end + end + end + end + -- replace the old pin table with a new pin table that doesn't include the invalid ones + local saved_pins_new = {} + for key, value in pairs(playerdata.saved_pins) do + if value then + saved_pins_new[key] = value + end + end + playerdata.saved_pins = saved_pins_new + -- remove hotkeys for deleted pins + for key, value in pairs(playerdata.saved_hotkeys) do + if not playerdata.saved_pins[value] then + playerdata.saved_hotkeys[key] = nil + end + end +end + +--[[ +If it is valid for the player to add or update the position of pins from their current zone. +]] +function Pin.add_or_update_pin_position_valid(player) + local root = player.gui.left[RemoteView.name_gui_root] + if root then + local currently_viewing_frame = root.currently_viewing_frame + if currently_viewing_frame then + return currently_viewing_frame.visible + end + end + return true +end + +--[[ +Rebuilds the entire quick pin GUI. +Necessary to call in response to changes to the data displayed in the GUI. +]]-- +function Pin.gui_update(player) + local playerdata = Pin.get_make_pin_playerdata(player) + + -- makes the data valid (fix deletes surfaces) + Pin.make_valid(playerdata) + + -- update the window too if it exists + Pin.window_update(player) + + -- clear the data-driven part of the GUI + local root = player.gui.left[RemoteView.name_gui_root] + if not root then + return + end + + local pins_table = root.pin_frame.pins_table + pins_table.clear() + + -- build the data-driven part of the GUI + local add_or_update_pin_position_valid = Pin.add_or_update_pin_position_valid(player) + + for key, value in pairs(playerdata.saved_pins) do + if key ~= "id" then + local sprite_path = Pin.signal_to_sprite_path(value.signal) + local location = Location.from_reference(value.location_reference) + local name = location.name or "" + local tooltip = {"", {Pin.get_tooltip_for_pin(playerdata, key), location.zone.name, name}} + if settings.get_player_settings(player)[Pin.name_setting_expanded_tooltip].value == true then + table.insert(tooltip, {"space-exploration.remote-view-pin-button-tooltip-help-text"}) + if add_or_update_pin_position_valid then + table.insert(tooltip, {"space-exploration.remote-view-pin-button-tooltip-help-text-update-position"}) + end + end + if location.zone == Zone.from_surface(player.surface) then + local pin_button = pins_table.add { + type = "sprite-button", + sprite = sprite_path, + tags = { + action = Pin.tag_pin_button, + item_name = key + }, + style = "se_sprite-button_inset", + tooltip = tooltip + } + end + end + end + + + -- add the new-pin button at the end of the list so it's always last + if add_or_update_pin_position_valid then + root.pin_table.pin_add_flow.add_pin_label.visible = true + root.pin_table.pin_add_flow[Pin.name_button_add_pin].visible = true + else + root.pin_table.pin_add_flow.add_pin_label.visible = false + root.pin_table.pin_add_flow[Pin.name_button_add_pin].visible = false + end + + -- if there are no pins and adding pins is not valid, make the UI for pins invisible + if #pins_table.children > 0 then + --root.pin_table.visible = true + root.pin_frame.visible = true + else + --root.pin_table.visible = false + root.pin_frame.visible = false + end +end + +--[[ +Handles click events anywhere on the UI: + clicks on the add-pin button uses Pin.modal_open + delegates clicks on pin buttons to Pin.on_gui_pin_button_click + delegates clicks on the modal to Pin.on_gui_modal_click +Return value is if the quick pin UI consumed the event. +]]-- +function Pin.on_gui_click(event) + local element = event.element + local player = game.players[event.player_index] + + if element.name == Pin.name_button_pins then + Pin.window_toggle(player) + return + end + if element.tags and element.tags.action == Pin.tag_pin_button then + Pin.on_gui_pin_button_click(player, event) return true + elseif element.name == Pin.name_button_add_pin then + local playerdata = Pin.get_make_pin_playerdata(player) + local id = playerdata.saved_pins.id + local item_name = "pin-button-prefix-" .. id + playerdata.saved_pins.id = playerdata.saved_pins.id + 1 + Pin.modal_open(player, item_name) return true + else + local root = gui_element_or_parent(element, Pin.name_dialog_root) + if root then + Pin.on_gui_modal_click(player, root, element) return true + else + root = gui_element_or_parent(element, Pin.name_all_root) + if root then + Pin.on_gui_window_click(player, root, element) return true + end + end + end + return false +end + +--[[ +Handles the GUI attempting to be closed. +]] +function Pin.on_gui_closed (event) + if event.element and event.element.valid and event.element.name == Pin.name_all_root then + Pin.window_close(game.get_player(event.player_index)) + elseif event.element and event.element.valid and event.element.name == Pin.name_dialog_root then + Pin.modal_close(game.get_player(event.player_index)) + end +end +Event.addListener(defines.events.on_gui_closed, Pin.on_gui_closed) + +--[[ +Handles click events on the modal. +]] +function Pin.on_gui_modal_click(player, root, element) + if element.name == Pin.name_button_confirm_pin then + local name_textfield = root.selector_content_flow.selector_content_frame.selector_content_frame_flow + .selector_content_frame_table.selector_content_frame_table_name_textfield + local icon_selector = root.selector_content_flow.selector_content_frame.selector_content_frame_flow + .selector_content_frame_table.selector_content_frame_table_icon_selector + local zoom_textfield = root.selector_content_flow.selector_content_frame.selector_content_frame_flow + .selector_content_frame_table.selector_content_frame_table_zoom_flow.selector_content_frame_table_zoom_flow_textfield + local hotkey_dropdown = root.selector_content_flow.selector_content_frame.selector_content_frame_flow + .selector_content_frame_table.selector_content_frame_table_hotkey_dropdown + local text = name_textfield.text + local icon = icon_selector.elem_value + local zoom = zoom_textfield.text + local hotkey = hotkey_dropdown.selected_index + Pin.add_update_pin(player, text, icon, zoom, hotkey, true) + Pin.modal_close(player) + elseif element.name == Pin.name_button_cancel_pin then + Pin.modal_close(player) + elseif element.name == Pin.name_button_update_position_pin then + local add_or_update_pin_position_valid = Pin.add_or_update_pin_position_valid(player) + -- don't allow the player to update the position of a pin when their current position isn't valid + if add_or_update_pin_position_valid then + local playerdata = Pin.get_make_pin_playerdata(player) + local saved_pin = playerdata.saved_pins[playerdata.quick_pin_opened_item_name] + saved_pin.location_reference = Location.update_reference_position(saved_pin.location_reference, Zone.from_surface(player.surface), player.position) + -- since we don't have a method for rebuilding the modal gui, make the changes to it here + local root = player.gui.screen[Pin.name_dialog_root] + if root then + root.selector_content_flow.selector_content_frame.selector_content_frame_flow + .selector_content_frame_table.selector_content_frame_table_location_flow + .selector_content_frame_table_location_flow_label.caption = {"space-exploration.remote-view-pin-location-position", string.format("%.0f", player.position.x), string.format("%.0f", player.position.y)} + end + end + elseif element.name == "goto_informatron_pins" then + remote.call("informatron", "informatron_open_to_page", { + player_index = player.index, + interface = "space-exploration", + page_name = "pinned_locations" + }) + end +end + +--[[ +Handles click events on the window. +]] +function Pin.on_gui_window_click(player, root, element) + if element.name == Pin.name_button_close then + Pin.window_close(player) + elseif element.name == "goto_informatron_pins" then + remote.call("informatron", "informatron_open_to_page", { + player_index = player.index, + interface = "space-exploration", + page_name = "pinned_locations" + }) + end +end + +--[[ +Closes this GUI. +]] +function Pin.gui_close(player) + Pin.modal_close(player) + Pin.window_close(player) +end + +--[[ +Closes the modal. +]]-- +function Pin.modal_close(player) + if player.gui.screen[Pin.name_dialog_root] then + player.gui.screen[Pin.name_dialog_root].destroy() + end +end + +--[[ +Converts a signal to a sprite path. +The signal is chosen from a "choose-elem-button" UI element with "elem_type" set to "signal". +]] +function Pin.signal_to_sprite_path(signal) + if signal and signal.name then + if signal.type == "item" then + return "item/" .. signal.name + elseif signal.type == "fluid" then + return "fluid/" .. signal.name + elseif signal.type == "virtual" then + return "virtual-signal/" .. signal.name + end + end + return nil +end + +--[[ +Converts a signal to a rich text icon. +The signal is chosen from a "choose-elem-button" UI element with "elem_type" set to "signal". +]]-- +function Pin.signal_to_rich_text(signal) + if signal and signal.name then + if signal.type == "item" then + return "[img=item."..signal.name.."]" + elseif signal.type == "fluid" then + return "[img=fluid."..signal.name.."]" + elseif signal.type == "virtual" then + return "[img=virtual-signal."..signal.name.."]" + end + end + return "" +end + +--[[ +Makes the rich text icon string for the hotkey dropdown option. +Each hotkey dropdown displays the hotkey itself followed by a rich text icon of the pin it is for. +This function creates that rich text icon based on the index of the dropdown option. +]]-- +function Pin.make_hotkey_string(playerdata, index) + if playerdata.saved_hotkeys[index] then + local saved_pin = playerdata.saved_pins[playerdata.saved_hotkeys[index]] + if saved_pin then + return Pin.signal_to_rich_text(saved_pin.signal) + end + end + return "" +end + +--[[ +Opens a modal for selecting the properties of the pin icon on the bar. +The modal is setup to match the look/feel of the vanilla map tag UI. +]]-- +function Pin.modal_open(player, item_name) + Pin.modal_close(player) -- always start fresh + + local playerdata = Pin.get_make_pin_playerdata(player) + playerdata.quick_pin_opened_item_name = item_name + + local selector_frame = player.gui.screen.add { + type = "frame", + name = Pin.name_dialog_root, + direction = "vertical" + } + selector_frame.style.maximal_height = 1440 + selector_frame.auto_center = true + + player.opened = selector_frame + + if not (selector_frame and selector_frame.valid) then return end -- setting player.opened can cause other mods to close GUIs + local selector_title_flow = selector_frame.add { + type = "flow", + direction = "horizontal" + } + selector_title_flow.drag_target = selector_frame + selector_title_flow.style.vertically_stretchable = "off" + + local selector_title_label = selector_title_flow.add { + type = "label", + caption = {"space-exploration.remote-view-pin-details"}, + style = "frame_title", + ignored_by_interaction = true + } + selector_title_label.style.vertically_stretchable = "on" + selector_title_label.style.horizontally_squashable = "on" + + local selector_title_empty = selector_title_flow.add { + type = "empty-widget", + style = "draggable_space", + ignored_by_interaction = true + } + selector_title_empty.style.horizontally_stretchable = "on" + selector_title_empty.style.left_margin = 4 + selector_title_empty.style.right_margin = 0 + selector_title_empty.style.height = 24 + + local selector_title_informatron = selector_title_flow.add { + type="sprite-button", + name="goto_informatron_pins", + sprite = "virtual-signal/informatron", + style="informatron_close_button", + tooltip={"space-exploration.informatron-open-help"} + } + selector_title_informatron.style.width = 28 + selector_title_informatron.style.height = 28 + + local selector_content_flow = selector_frame.add { + type = "flow", + name = "selector_content_flow", + direction = "vertical" + } + + local selector_content_frame = selector_content_flow.add { + type = "frame", + name = "selector_content_frame", + direction = "vertical", + style = "inside_shallow_frame_with_padding" + } + selector_content_frame.style.horizontally_stretchable = "on" + + local selector_content_frame_flow = selector_content_frame.add { + type = "flow", + name = "selector_content_frame_flow", + direction = "horizontal" + } + selector_content_frame_flow.style.horizontally_stretchable = "on" + + local selector_content_frame_table = selector_content_frame_flow.add { + type = "table", + name = "selector_content_frame_table", + column_count = 2, + style = "player_input_table" + } + + local selector_content_frame_table_name_label = selector_content_frame_table.add { + type = "label", + caption = {"space-exploration.remote-view-pin-name"} + } + + local selector_content_frame_table_name_textfield = selector_content_frame_table.add { + type = "textfield", + name = "selector_content_frame_table_name_textfield" + } + selector_content_frame_table_name_textfield.style.maximal_width = 0 + selector_content_frame_table_name_textfield.style.horizontally_stretchable = "on" + selector_content_frame_table_name_textfield.focus() + selector_content_frame_table_name_textfield.select_all() + + local selector_content_frame_table_icon_label = selector_content_frame_table.add { + type = "label", + caption = {"space-exploration.remote-view-pin-icon"} + } + + local selector_content_frame_table_icon_selector = selector_content_frame_table.add { + type = "choose-elem-button", + elem_type = "signal", + name = "selector_content_frame_table_icon_selector" + } + + local selector_content_frame_table_zoom_label = selector_content_frame_table.add { + type = "label", + caption = {"space-exploration.remote-view-pin-zoom"} + } + + local selector_content_frame_table_zoom_flow = selector_content_frame_table.add { + type = "flow", + direction = "horizontal", + name = "selector_content_frame_table_zoom_flow" + } + selector_content_frame_table_zoom_flow.style.vertical_align = "center" + + local selector_content_frame_table_zoom_flow_slider = selector_content_frame_table_zoom_flow.add { + type = "slider", + minimum_value = Pin.min_zoom, + maximum_value = Pin.max_zoom, + discrete_values = false, + name = "selector_content_frame_table_zoom_flow_slider" + } + + local selector_content_frame_table_zoom_flow_textfield = selector_content_frame_table_zoom_flow.add { + type = "textfield", + numeric = true, + allow_decimal = true, + name = "selector_content_frame_table_zoom_flow_textfield" + } + selector_content_frame_table_zoom_flow_textfield.style.width = 40 + + local selector_content_frame_table_hotkey_label = selector_content_frame_table.add { + type = "label", + caption = {"space-exploration.remote-view-pin-hotkey"} + } + + local selector_content_frame_table_hotkey_dropdown = selector_content_frame_table.add { + type = "drop-down", + name = Pin.name_hotkey_dropdown, + items = { + {"space-exploration.remote-view-pin-hotkey-none"}, + {"space-exploration.remote-view-pin-hotkey-one", Pin.make_hotkey_string(playerdata, 2)}, + {"space-exploration.remote-view-pin-hotkey-two", Pin.make_hotkey_string(playerdata, 3)}, + {"space-exploration.remote-view-pin-hotkey-three", Pin.make_hotkey_string(playerdata, 4)}, + {"space-exploration.remote-view-pin-hotkey-four", Pin.make_hotkey_string(playerdata, 5)}, + {"space-exploration.remote-view-pin-hotkey-five", Pin.make_hotkey_string(playerdata, 6)}, + {"space-exploration.remote-view-pin-hotkey-six", Pin.make_hotkey_string(playerdata, 7)}, + {"space-exploration.remote-view-pin-hotkey-seven", Pin.make_hotkey_string(playerdata, 8)}, + {"space-exploration.remote-view-pin-hotkey-eight", Pin.make_hotkey_string(playerdata, 9)}, + {"space-exploration.remote-view-pin-hotkey-nine", Pin.make_hotkey_string(playerdata, 10)}, + {"space-exploration.remote-view-pin-hotkey-zero", Pin.make_hotkey_string(playerdata, 11)} + }, + selected_index = 1 -- start with none selected + } + + -- update location is only valid if the saved_pin we are updating has a valid location + local saved_pin = playerdata.saved_pins[playerdata.quick_pin_opened_item_name] + if saved_pin then + local location = Location.from_reference(saved_pin.location_reference) + if location and location.position and location.zone == Zone.from_surface(player.surface) then + local selector_content_frame_table_location_label = selector_content_frame_table.add { + type = "label", + caption = {"space-exploration.remote-view-pin-location"} + } + + local selector_content_frame_table_location_flow = selector_content_frame_table.add { + type = "flow", + direction = "horizontal", + name = "selector_content_frame_table_location_flow" + } + selector_content_frame_table_location_flow.style.vertical_align = "center" + local selector_content_frame_table_location_flow_button = selector_content_frame_table_location_flow.add { + type = "button", + name = Pin.name_button_update_position_pin, + caption = {"space-exploration.remote-view-pin-location-position-button"}, + tooltip = {"space-exploration.remote-view-pin-location-position-button-tooltip"}, + mouse_button_filter = {"left"} + } + local selector_content_frame_table_location_flow_label = selector_content_frame_table_location_flow.add { + type = "label", + caption = {"space-exploration.remote-view-pin-location-position", string.format("%.0f", location.position.x), string.format("%.0f", location.position.y)}, + name = "selector_content_frame_table_location_flow_label" + } + end + end + + -- Button bar + local button_bar = selector_frame.add { + type = "flow", + direction = "horizontal", + style = "dialog_buttons_horizontal_flow" + } + button_bar.style.horizontal_spacing = 0 + button_bar.drag_target = selector_frame + + -- Cancel/Back button + local button_cancel = button_bar.add { + type = "button", + name = Pin.name_button_cancel_pin, + style = "back_button", + caption = {"gui-tag-edit.cancel"}, + tooltip = {"gui.cancel-instruction"}, + mouse_button_filter = {"left"} + } + button_cancel.style.minimal_width = 0 + button_cancel.style.padding = {1, 12, 0, 12} + + local button_empty = button_bar.add { + type = "empty-widget", + style = "draggable_space", + ignored_by_interaction = true + } + button_empty.style.horizontally_stretchable = "on" + button_empty.style.left_margin = 10 + button_empty.style.right_margin = 10 + button_empty.style.height = 24 + + -- Submit button + local button_submit = button_bar.add { + type = "button", + name = Pin.name_button_confirm_pin, + caption = {"gui-tag-edit.confirm"}, + tooltip = {"gui.confirm-instruction"}, + style = "confirm_button", + mouse_button_filter = {"left"} + } + button_submit.style.minimal_width = 0 + button_submit.style.padding = {1, 8, 0, 12} + + -- if we are opening an existing pin to modify it, pre-populate the modal with the info for that pin + if saved_pin then + local location = Location.from_reference(saved_pin.location_reference) + selector_content_frame_table_name_textfield.text = location.name or "" + selector_content_frame_table_icon_selector.elem_value = saved_pin.signal + selector_content_frame_table_zoom_flow_slider.slider_value = saved_pin.zoom or selector_content_frame_table_zoom_flow_slider.slider_value + selector_content_frame_table_hotkey_dropdown.selected_index = 1 + for key, value in pairs(playerdata.saved_hotkeys) do + if value == playerdata.quick_pin_opened_item_name then + selector_content_frame_table_hotkey_dropdown.selected_index = key + end + end + end + selector_content_frame_table_zoom_flow_textfield.text = string.format("%.2f", selector_content_frame_table_zoom_flow_slider.slider_value) +end + +--[[ +Clamps zoom to reasonable values. Must not be nil +]] +function Pin.clamp_zoom(zoom) + if zoom < Pin.min_zoom then + zoom = Pin.min_zoom + end + if zoom > Pin.max_zoom then + zoom = Pin.max_zoom + end + return zoom +end + +--[[ +Handles text changes to the zoom textfield. +]]-- +function Pin.on_gui_text_changed(event) + if event.element.name == "selector_content_frame_table_zoom_flow_textfield" then + local player = game.players[event.player_index] + local root = player.gui.screen[Pin.name_dialog_root] + local zoom_slider = root.selector_content_flow.selector_content_frame.selector_content_frame_flow + .selector_content_frame_table.selector_content_frame_table_zoom_flow.selector_content_frame_table_zoom_flow_slider + local zoom = tonumber(event.text) + -- empty textbox gives nil + if zoom then + zoom = Pin.clamp_zoom(zoom) + zoom_slider.slider_value = zoom + end + end +end +Event.addListener(defines.events.on_gui_text_changed, Pin.on_gui_text_changed) + +--[[ +Handles value changes to the zoom slider. +]]-- +function Pin.on_gui_value_changed(event) + if event.element.name == "selector_content_frame_table_zoom_flow_slider" then + local player = game.players[event.player_index] + local root = player.gui.screen[Pin.name_dialog_root] + local zoom_textfield = root.selector_content_flow.selector_content_frame.selector_content_frame_flow + .selector_content_frame_table.selector_content_frame_table_zoom_flow.selector_content_frame_table_zoom_flow_textfield + local zoom = event.element.slider_value + zoom_textfield.text = string.format("%.2f", zoom) + end +end +Event.addListener(defines.events.on_gui_value_changed, Pin.on_gui_value_changed) + +-- Maps the input event name to the index that we save that hotkey's pin at. +local hotkey_map = {} +-- 0 is the dropdown menu for no selection (we don't use this) +-- 1 is the dropdown menu for none hotkey (we use this) +hotkey_map[Pin.name_event_one]=2 +hotkey_map[Pin.name_event_two]=3 +hotkey_map[Pin.name_event_three]=4 +hotkey_map[Pin.name_event_four]=5 +hotkey_map[Pin.name_event_five]=6 +hotkey_map[Pin.name_event_six]=7 +hotkey_map[Pin.name_event_seven]=8 +hotkey_map[Pin.name_event_eight]=9 +hotkey_map[Pin.name_event_nine]=10 +hotkey_map[Pin.name_event_zero]=11 +hotkey_map[Pin.name_event_set_one]=2 +hotkey_map[Pin.name_event_set_two]=3 +hotkey_map[Pin.name_event_set_three]=4 +hotkey_map[Pin.name_event_set_four]=5 +hotkey_map[Pin.name_event_set_five]=6 +hotkey_map[Pin.name_event_set_six]=7 +hotkey_map[Pin.name_event_set_seven]=8 +hotkey_map[Pin.name_event_set_eight]=9 +hotkey_map[Pin.name_event_set_nine]=10 +hotkey_map[Pin.name_event_set_zero]=11 + +--[[ +Handles pin hotkey presses. +]]-- +function Pin.on_pin_hotkey_press(event) + local player_index = event.player_index + if player_index and game.players[player_index] and game.players[player_index].connected then + local player = game.players[player_index] + local playerdata = Pin.get_make_pin_playerdata(player) + local index = hotkey_map[event.input_name] + if index then + if playerdata.saved_hotkeys[index] then + Pin.do_pin(player, playerdata.saved_hotkeys[index]) + end + end + end +end +Event.addListener(Pin.name_event_one, Pin.on_pin_hotkey_press) +Event.addListener(Pin.name_event_two, Pin.on_pin_hotkey_press) +Event.addListener(Pin.name_event_three, Pin.on_pin_hotkey_press) +Event.addListener(Pin.name_event_four, Pin.on_pin_hotkey_press) +Event.addListener(Pin.name_event_five, Pin.on_pin_hotkey_press) +Event.addListener(Pin.name_event_six, Pin.on_pin_hotkey_press) +Event.addListener(Pin.name_event_seven, Pin.on_pin_hotkey_press) +Event.addListener(Pin.name_event_eight, Pin.on_pin_hotkey_press) +Event.addListener(Pin.name_event_nine, Pin.on_pin_hotkey_press) +Event.addListener(Pin.name_event_zero, Pin.on_pin_hotkey_press) + +--[[ +Handles set hotkey presses. +]] +function Pin.on_set_hotkey_press(event) + local player_index = event.player_index + if player_index and game.players[player_index] and game.players[player_index].connected then + local player = game.players[player_index] + local playerdata = Pin.get_make_pin_playerdata(player) + local index = hotkey_map[event.input_name] + if index then + local id = playerdata.saved_pins.id + local item_name = "pin-button-prefix-" .. id + playerdata.saved_pins.id = playerdata.saved_pins.id + 1 + playerdata.quick_pin_opened_item_name = item_name + local zone = Zone.from_surface(player.surface) + if zone then + Pin.add_update_pin(player, nil, { + type = "virtual", + name = Zone.get_signal_name(zone) + }, Pin.min_zoom, index, false) + end + end + end +end +Event.addListener(Pin.name_event_set_one, Pin.on_set_hotkey_press) +Event.addListener(Pin.name_event_set_two, Pin.on_set_hotkey_press) +Event.addListener(Pin.name_event_set_three, Pin.on_set_hotkey_press) +Event.addListener(Pin.name_event_set_four, Pin.on_set_hotkey_press) +Event.addListener(Pin.name_event_set_five, Pin.on_set_hotkey_press) +Event.addListener(Pin.name_event_set_six, Pin.on_set_hotkey_press) +Event.addListener(Pin.name_event_set_seven, Pin.on_set_hotkey_press) +Event.addListener(Pin.name_event_set_eight, Pin.on_set_hotkey_press) +Event.addListener(Pin.name_event_set_nine, Pin.on_set_hotkey_press) +Event.addListener(Pin.name_event_set_zero, Pin.on_set_hotkey_press) + +--[[ +Removes any pins that have the given hotkey as long as they are not player-modified. +This allows for the pin-set-hotkeys that create new locations to overwrite each other +and not leave a bunch of permanent pins if used a bunch of times in a row without +the player explicitly indicating that they want to permanently keep the hotkey by +manually opening the modal and changing something in it. +]]-- +function Pin.remove_unmodified_with_hotkey(playerdata, hotkey) + if hotkey then + for key, value in pairs(playerdata.saved_hotkeys) do + if key == hotkey and value and playerdata.saved_pins[value] then + if not playerdata.saved_pins[value].player_modified then + playerdata.saved_pins[value] = nil + end + end + end + end +end + +--[[ +Updates the hotkey associated with a pin. +First clears the hotkey associated with the pin. +Then adds the new hotkey. +]]-- +function Pin.set_hotkey(playerdata, item_name, hotkey) + if hotkey then + for key, value in pairs(playerdata.saved_hotkeys) do + if value == item_name then + playerdata.saved_hotkeys[key] = nil + end + end + -- only save hotkey information for proper hotkeys (not unselected or none) + if hotkey > 1 then + playerdata.saved_hotkeys[hotkey] = item_name + end + end +end + +--[[ +Creates or updates a pin. +Always sets the pin's name and icon. +When creating an entirely new pin, the pin's position is set based on the player's current position in the navigation view. +Forces a GUI rebuild. +]]-- +function Pin.add_update_pin(player, name, signal, zoom, hotkey, player_modified) + local playerdata = Pin.get_make_pin_playerdata(player) + playerdata.saved_pins[playerdata.quick_pin_opened_item_name] = playerdata.saved_pins[playerdata.quick_pin_opened_item_name] or {} + local saved_pin = playerdata.saved_pins[playerdata.quick_pin_opened_item_name] + saved_pin.signal = signal + zoom = tonumber(zoom) or 1 + zoom = Pin.clamp_zoom(zoom) + saved_pin.zoom = tonumber(string.format("%.2f", zoom)) + saved_pin.player_modified = player_modified + + if not saved_pin.location_reference then + saved_pin.location_reference = Location.make_reference(Zone.from_surface(player.surface), player.position, name) + else + saved_pin.location_reference = Location.update_reference_name(saved_pin.location_reference, name) + end + + Pin.remove_unmodified_with_hotkey(playerdata, hotkey) + Pin.set_hotkey(playerdata, playerdata.quick_pin_opened_item_name, hotkey) + Pin.gui_update(player) +end + +--[[ +Performs a pin. +Opens/moves the player's navigation view to the pin's position. +Only attempts to perform the pin if the target is valid. +]]-- +function Pin.do_pin(player, item_name) + if item_name then + local playerdata = Pin.get_make_pin_playerdata(player) + local saved_pin = playerdata.saved_pins[item_name] + if saved_pin then + local location = Location.from_reference(saved_pin.location_reference) + if location then + RemoteView.start(player, location.zone, location.position, location.name) + end + -- if playerdata.surface_positions then + -- playerdata.surface_positions[player.surface.index] = player.position + -- end + player.close_map() + if saved_pin.zoom then + player.zoom = saved_pin.zoom + end + end + end +end + +--[[ +Deletes a pin. +Forces a GUI rebuild. +]]-- +function Pin.delete_pin(player, item_name) + local playerdata = Pin.get_make_pin_playerdata(player) + playerdata.saved_pins[item_name] = nil + Pin.gui_update(player) +end + +--[[ +Handles click events for the pin buttons. +Four distinct events are tracked: + left-click performs a pin + right-click opens the modal for editing the pin + shift-right-click resets the pin position to the current location + ctrl-right-click deletes the pin +]]-- +function Pin.on_gui_pin_button_click(player, event) + local element = event.element + if not element or not element.tags or not element.tags.item_name then + return + end + local item_name = element.tags.item_name + + if event.button == defines.mouse_button_type.left then + Pin.do_pin(player, item_name) + elseif event.button == defines.mouse_button_type.right then + if event.control then + Pin.delete_pin(player, item_name) + elseif event.shift then + local add_or_update_pin_position_valid = Pin.add_or_update_pin_position_valid(player) + -- don't allow the player to update the position of a pin when their current position isn't valid + if add_or_update_pin_position_valid then + local playerdata = Pin.get_make_pin_playerdata(player) + local saved_pin = playerdata.saved_pins[item_name] + saved_pin.location_reference = Location.update_reference_position(saved_pin.location_reference, Zone.from_surface(player.surface), player.position) + end + else + Pin.modal_open(player, item_name) + end + end +end + +--[[ +Closes the window. +]]-- +function Pin.window_close(player) + if player.gui.screen[Pin.name_all_root] then + player.gui.screen[Pin.name_all_root].destroy() + end +end + +--[[ +Toggles the window. +]]-- +function Pin.window_toggle(player) + if player.gui.screen[Pin.name_all_root] then + Pin.window_close(player) + else + Pin.window_open(player) + end +end + +--[[ +Opens the window for viewing all pins. +]]-- +function Pin.window_open(player) + Pin.window_close(player) + + local playerdata = Pin.get_make_pin_playerdata(player) + + local viewer_frame = player.gui.screen.add { + type = "frame", + name = Pin.name_all_root, + direction = "vertical" + } + viewer_frame.style.maximal_height = 1440 + viewer_frame.auto_center = true + + player.opened = viewer_frame + + if not (viewer_frame and viewer_frame.valid) then return end -- setting player.opened can cause other scripts to delete UIs + local viewer_title_table = viewer_frame.add { + type = "table", + column_count = 2, + draw_horizontal_lines = false, + } + viewer_title_table.style.horizontally_stretchable = true + viewer_title_table.style.column_alignments[1] = "left" + viewer_title_table.style.column_alignments[2] = "right" + + local viewer_title_flow = viewer_title_table.add { + type = "flow", + direction = "horizontal" + } + viewer_title_flow.drag_target = viewer_frame + viewer_title_flow.style.vertically_stretchable = false + + local viewer_title_label = viewer_title_flow.add { + type = "label", + caption = {"space-exploration.remote-view-pin-viewer-title"}, + style = "frame_title", + ignored_by_interaction = true + } + viewer_title_label.style.vertically_stretchable = true + viewer_title_label.style.horizontally_squashable = true + + local viewer_title_empty = viewer_title_flow.add { + type = "empty-widget", + style = "draggable_space", + ignored_by_interaction = true + } + viewer_title_empty.style.horizontally_stretchable = true + viewer_title_empty.style.left_margin = 4 + viewer_title_empty.style.right_margin = 0 + viewer_title_empty.style.height = 24 + + local viewer_title_flow_right = viewer_title_table.add { + type = "flow", + direction = "horizontal" + } + + local viewer_title_informatron = viewer_title_flow_right.add { + type="sprite-button", + name="goto_informatron_pins", + sprite = "virtual-signal/informatron", + style="informatron_close_button", + tooltip={"space-exploration.informatron-open-help"} + } + viewer_title_informatron.style.width = 28 + viewer_title_informatron.style.height = 28 + + local viewer_title_close = viewer_title_flow_right.add { + type="sprite-button", + name=Pin.name_button_close, + sprite = "utility/close_white", + style="informatron_close_button", + tooltip={"space-exploration.exit-pins-remote-view"} + } + viewer_title_close.style.width = 28 + viewer_title_close.style.height = 28 + + local viewer_content_flow = viewer_frame.add { + type = "scroll-pane", + name = "viewer_content_flow", + horizontal_scroll_policy = "never" + } + viewer_content_flow.style.height = 420 + viewer_content_flow.style.minimal_width = 400 + viewer_content_flow.style.padding = 0 + + Pin.window_update(player) +end + +--[[ +Makes a row containing some pins for the window. +]] +function Pin.make_window_row(player, playerdata, viewer_content_frame_flow, pins, zone_name) + local pin_row_label = viewer_content_frame_flow.add { + type = "label", + caption = zone_name + } -- left + pin_row_label.style.font_color = { + r = 0.5, + g = 0.5, + b = 0.5 + } + + local pin_row_frame = viewer_content_frame_flow.add { + type = "frame", + style = "se_frame_deep_slots_small" + } + pin_row_frame.style.horizontally_stretchable = true + + local pin_row_table = pin_row_frame.add { + type = "table", + column_count = 10, + style = "filter_slot_table" + } + pin_row_table.style.width = 400 + + local add_or_update_pin_position_valid = Pin.add_or_update_pin_position_valid(player) + + for key, value in pairs(pins) do + local sprite_path = Pin.signal_to_sprite_path(value.signal) + local location = Location.from_reference(value.location_reference) + if location then + local name = location.name or "" + local tooltip = {"", {Pin.get_tooltip_for_pin(playerdata, key), location.zone.name, name}} + if settings.get_player_settings(player)[Pin.name_setting_expanded_tooltip].value == true then + table.insert(tooltip, {"space-exploration.remote-view-pin-button-tooltip-help-text"}) + if add_or_update_pin_position_valid then + table.insert(tooltip, {"space-exploration.remote-view-pin-button-tooltip-help-text-update-position"}) + end + end + local pin_button = pin_row_table.add { + type = "sprite-button", + sprite = sprite_path, + tags = { + action = Pin.tag_pin_button, + item_name = key + }, + style = "se_sprite-button_inset", + tooltip = tooltip + } + end + end +end + +--[[ +Updates the pins window in response to changes to the data. +Rebuilds the entire window UI. +]] +function Pin.window_update(player) + local playerdata = Pin.get_make_pin_playerdata(player) + local force_name = player.force.name + + -- clear the data-driven part of the GUI + local root = player.gui.screen[Pin.name_all_root] + if not root then + return + end + + local viewer_content_flow = root.viewer_content_flow + viewer_content_flow.clear() + + local zone_to_count = {} + local spaceships + + -- count how many pins are in each zone + for key, value in pairs(playerdata.saved_pins) do + if key ~= "id" then + local location = Location.from_reference(value.location_reference) + if location then + local priority = Zone.get_priority(location.zone, force_name) + local zone_name = location.zone.name + -- track spaceship pins separately from normal pins + if location.type == "spaceship" then + if spaceships then + spaceships.pins[key] = value + if priority > spaceships.priority then + spaceships.priority = priority + end + else + local pins = {} + pins[key] = value + spaceships = {pins=pins,priority=priority} + end + -- normal pins here + else + if zone_to_count[zone_name] then + zone_to_count[zone_name].count = zone_to_count[zone_name].count + 1 + zone_to_count[zone_name].pins[key] = value + if priority > zone_to_count[zone_name].priority then + zone_to_count[zone_name].priority = priority + end + else + local pins = {} + pins[key] = value + zone_to_count[zone_name] = {count=1,pins=pins,priority=priority} + end + end + end + end + end + + local roots_to_count = {} + + -- for any zone that has < 2 pins, reassign its pins to either its star's zone (if possible) + for key, value in pairs(zone_to_count) do + local look_for_parent = value.count < 2 + if value.pins then + local zone = Zone.from_name(key) + local priority = value.priority + if look_for_parent and zone then + zone = Zone.find_parent_star(zone) or zone + end + for key2, value2 in pairs(value.pins) do + local zone_name + if zone then + zone_name = zone.name + else + zone_name = key + end + if roots_to_count[zone_name] then + roots_to_count[zone_name].count = roots_to_count[zone_name].count + 1 + roots_to_count[zone_name].pins[key2] = value2 + if priority > roots_to_count[zone_name].priority then + roots_to_count[zone_name].priority = priority + end + else + local pins = {} + pins[key2] = value2 + roots_to_count[zone_name] = {count=1,pins=pins,priority=priority} + end + end + end + end + + local finals_to_count = {} + + -- for any zone that *still* has < 2 pins, reassign its pins to the misc zone + for key, value in pairs(roots_to_count) do + local assign_to_misc = value.count < 2 + if value.pins then + local zone_name = key + local priority = value.priority + if assign_to_misc then + zone_name = {"space-exploration.remote-view-pin-viewer-misc-row"} + end + for key2, value2 in pairs(value.pins) do + if finals_to_count[zone_name] then + finals_to_count[zone_name].count = finals_to_count[zone_name].count + 1 + finals_to_count[zone_name].pins[key2] = value2 + if priority > finals_to_count[zone_name].priority then + finals_to_count[zone_name].priority = priority + end + else + local pins = {} + pins[key2] = value2 + finals_to_count[zone_name] = {count=1,pins=pins,priority=priority} + end + end + end + end + + -- assign all spaceship pins to a special row + if spaceships then + finals_to_count[{"space-exploration.remote-view-pin-viewer-spaceship-row"}] = {pins=spaceships.pins,priority=spaceships.priority} + end + + -- sort the rows by priority + local rows_array = {} + for key, value in pairs(finals_to_count) do + table.insert(rows_array, {key=key,value=value}) + end + table.sort(rows_array, function (a, b) + return a.value.priority > b.value.priority + end) + for index, element in ipairs(rows_array) do + Pin.make_window_row(player, playerdata, viewer_content_flow, element.value.pins, element.key) + end +end + +--[[ +Toggles if the pins window is open/closed. +]] +function Pin.window_toggle(player) + if player.gui.screen[Pin.name_all_root] then + Pin.window_close(player) + else + Pin.window_open(player) + end +end + +--[[ +Get/Make PlayerData relevant to Pin. +Ensures that the returned PlayerData has two tables so accessing them can be done without nil checks: + saved_pins stores a mapping of pin-id to the details about that quick pin + saved_hotkeys stores a mapping of hotkey-id to the pin-id that hotkey links to +]]-- +function Pin.get_make_pin_playerdata(player) + local playerdata = get_make_playerdata(player) + playerdata.saved_pins = playerdata.saved_pins or { + id = 0 + } + playerdata.saved_hotkeys = playerdata.saved_hotkeys or {} + return playerdata +end + +return Pin diff --git a/space-exploration_0.5.80/space-exploration/scripts/profiler.lua b/space-exploration_0.5.80/space-exploration/scripts/profiler.lua new file mode 100644 index 0000000..4ce24ea --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/profiler.lua @@ -0,0 +1,170 @@ +--[[ + +Profiler functions + +LuaProfiler is desync unsafe so you cannot use it in multiplayer. + +Prints summary to log file and to console every 5 seconds. + + +Example 1: +Profiler.start('test1') + ...code... +Profiler.split('test1','chunk1') -- optional + ...code... +Profiler.split('test1','chunk2') -- optional + ...code... +Profiler.stop('test1') + +Example 2: +Profiler.start('test2', table_size(items)) +for _, item in pairs(items) do + ...code... +end +Profiler.stop('test2') + +Example 3: +Profiler.count('counter1') + +]]-- + +local Profiler = { + enabled = false, + print_to_console = true +} + +if is_debug_mode and Profiler.enabled then + local active_profilers = {} + local active_splits = {} + local active_counters = {} + + -- LuaProfiler makes the game slower as more and more profilers are created, + -- thus we create a pool of profilers to mitigate the issue + local profilers_pool = {} + local profilers_used = {} + + local function get_make_profiler() + local profiler + if table_size(profilers_pool) > 0 then + profiler = table.remove(profilers_pool) + profiler.reset() + else + profiler = game.create_profiler(true) + end + table.insert(profilers_used, profiler) + return profiler + end + + local function recycle_profilers() + for _, profiler in pairs(profilers_used) do + table.insert(profilers_pool, profiler) + end + profilers_used = {} + end + + local function dup_profiler(profiler) + local new_profiler = get_make_profiler() + new_profiler.reset() + new_profiler.stop() + new_profiler.add(profiler) + return new_profiler + end + + + function Profiler.start(name, unit_count) + if not active_profilers[name] then + active_profilers[name] = { + profiler = get_make_profiler(), + tick = game.tick, + count = 0 + } + end + if unit_count == nil then unit_count = 1 end + active_profilers[name].count = active_profilers[name].count + unit_count + active_profilers[name].profiler.restart() + end + + function Profiler.stop(name) + if active_profilers[name] then + if active_splits[name] then + Profiler.stop(active_splits[name]) + active_splits[name] = nil + end + active_profilers[name].profiler.stop() + end + end + + function Profiler.split(name, part) + if active_profilers[name] then + if active_splits[name] then + Profiler.stop(active_splits[name]) + active_splits[name] = nil + end + if part then + local split_name = name .. "--" .. part + Profiler.start(split_name) + active_splits[name] = split_name + end + end + end + + + function Profiler.count(name, value) + if not active_counters[name] then + active_counters[name] = { + counter = 0, + tick = game.tick + } + end + if value == nil then value = 1 end + active_counters[name].counter = active_counters[name].counter + value + end + + function Profiler.collect_print() + local results = {} + for name, entry in pairs(active_profilers) do + entry.profiler.stop() + if entry.count == 0 then + entry.profiler.divide(game.tick - entry.tick + 1) + results[name] = { "", "PerTick ", entry.profiler } + else + local per_tick_count = entry.count / (game.tick - entry.tick + 1) + local per_unit_profiler = dup_profiler(entry.profiler) + per_unit_profiler.divide(entry.count) + entry.profiler.divide(game.tick - entry.tick + 1) + results[name] = { "", "PerUnit (", per_tick_count, "/", entry.count, ") ", per_unit_profiler, + " / PerTick ", entry.profiler } + end + end + for name, entry in pairs(active_counters) do + local value = entry.counter / (game.tick - entry.tick + 1) + local key = results[name] and (name .. "-count") or name + results[key] = { "", "Count: ", value } + end + + local log_fn = Profiler.print_to_console and Log.trace or Log.debug_log + -- sort the results + local keys = {} + for k in pairs(results) do table.insert(keys, k) end + table.sort(keys) + -- print + log_fn('---') + for _, name in pairs(keys) do + log_fn({ "", name, ": ", results[name]}) + end + -- cleanup + active_profilers = {} + active_splits = {} + active_counters = {} + recycle_profilers() + end + Event.addListener("on_nth_tick_301", Profiler.collect_print) -- 5 seconds +else + Profiler.start = function() end + Profiler.stop = function() end + Profiler.split = function() end + Profiler.count = function() end + Profiler.collect_print = function() end +end + +return Profiler diff --git a/space-exploration_0.5.80/space-exploration/scripts/remote-interface.lua b/space-exploration_0.5.80/space-exploration/scripts/remote-interface.lua new file mode 100644 index 0000000..483f5c9 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/remote-interface.lua @@ -0,0 +1,454 @@ +--[[ NOTE: The multiplayer support commnads are designed so that multiplayer mods can use them, but individuals can use use commands to to get multiplayer working without relying on mods.]] + +remote.add_interface( + "space-exploration", + { + +--/c remote.call("space-exploration", "lock_player_respawn_location", {player = game.player, position = game.player.position, zone_name = "Nauvis"}) +-- or +--/c remote.call("space-exploration", "lock_player_respawn_location", {player = game.player, position = game.player.position, surface_name = "nauvis"}) + lock_player_respawn_location = function(data) + if data.player and data.player.valid and data.position and data.position.x and data.position.y then + local playerdata = get_make_playerdata(data.player) + if data.zone_name then + local zone = Zone.from_name(data.zone_name) + if not zone then game.print("Invalid zone name: "..data.zone_name) return end + playerdata.lock_respawn = {zone_index = zone.index, position = data.position} + game.print(data.player.name.." respawn location locked") + elseif data.surface_name then + if not game.surfaces[data.surface_name] then game.print("Invalid surface name: "..data.surface_name) end + playerdata.lock_respawn = {surface_name = data.surface_name, position = data.position} + game.print(data.player.name.." respawn location locked") + end + end + end, + +--/c remote.call("space-exploration", "unlock_player_respawn_location", {player = game.player}) + unlock_player_respawn_location = function(data) + if data.player and data.player.valid then + local playerdata = get_make_playerdata(data.player) + playerdata.lock_respawn = nil + end + end, + +--/c remote.call("space-exploration", "get_player_character", {player = game.player}) + get_player_character = function(data) + if data.player and data.player.valid then + if data.player.character then return data.player.character end + local playerdata = get_make_playerdata(data.player) + return playerdata.character + end + end, + +--/c remote.call("space-exploration", "spawn_small_resources", {surface = game.player.surface}) + spawn_small_resources = function(data) + Zone.spawn_small_resources(data.surface) + end, + +--Can multiply resources on nauvis. It should not be used unless you are sure the available resources on nauvis are insufficient to set up a few moon mining bases. +--/c remote.call("space-exploration", "multiply_nauvis_resource", {surface = game.player.surface, resource_name = "iron-ore", multiplier=0.9}) + multiply_nauvis_resource = function(data) + if data.multiplier > 0 and data.multiplier ~= 1 and data.surface then + for _, entity in pairs(data.surface.find_entities_filtered{type = "resource", name=data.resource_name}) do + local amount = math.ceil(entity.amount * data.multiplier) + if amount > 0 then + entity.amount = amount + else + entity.destroy() + end + end + end + end, + +-- Quick setup multiplayer test +--/c remote.call("space-exploration", "setup_multiplayer_test", { force_name = "player-2", players = {game.player}, match_nauvis_seed = false}) + setup_multiplayer_test = function(data) + + -- make the force + local force_name = data.force_name + if not game.forces[force_name] then + game.create_force(force_name) + end + if not game.forces[force_name] then + game.print("Error creating force with name: "..(force_name or "nil")) + return + end + + -- select the planet + local planet + + for _, star in pairs(global.universe.stars) do + if planet == nil then + if star.special_type == "homesystem" then + -- taken + else + for _, child in pairs(star.children) do + if child.type == "planet" and (not child.ruins) and (not child.interburbulator) and (not child.glyph) then + planet = child + game.print("Selected planet: "..child.name.." for homeworld.") + break + end + end + end + end + end + if not planet then + game.print("Error finding a planet") + return + end + + -- change the player forces + for _, player in pairs(data.players) do + player.force = game.forces[force_name] + end + + local match_nauvis_seed = data.match_nauvis_seed == nil and true or data.match_nauvis_seed + -- make the homeworld + Zone.set_zone_as_homeworld({ zone_name = planet.name, match_nauvis_seed = match_nauvis_seed, reset_surface = true}) + + + Zone.spawn_small_resources(Zone.get_surface(planet)) + + -- move the players + local surface = Zone.get_make_surface(planet) + for _, player in pairs(data.players) do + if player.character then + teleport_character_to_surface(player.character, surface, {0,0}) -- prevents overlapping players + else + player.teleport({0,0}, surface) + end + end + + -- assign the force to the homeworld (a homeworld can have multiple forces) + -- also resets discoveries + set_force_homeworld({zone_name = planet.name, force_name = force_name, spawn_position = {x = 0, y = 0}, reset_discoveries = true}) + + -- TODO: trigger AAI crash sequence? + + end, + +-- set the target zone to be a homeworld +--/c remote.call("space-exploration", "set_zone_as_homeworld", {zone_name = "Arendel", match_nauvis_seed = false, reset_surface = true}) + set_zone_as_homeworld = function(data) + return Zone.set_zone_as_homeworld(data) + end, + +-- set a force's homeworld (needed for later functions) and sets their respawn location +--/c remote.call("space-exploration", "set_force_homeworld", {zone_name = "Arendel", force_name = "player-2", spawn_position = {x = 0, y = 0}, reset_discoveries = true}) + set_force_homeworld = function(data) + return set_force_homeworld(data) + end, + +-- reset a force's discovered locations. +--/c remote.call("space-exploration", "set_force_homeworld", { force_name = "player-2"}) + force_reset_discoveries = function(data) + force_reset_discoveries(data.force_name) + end, + +--/c remote.call("space-exploration", "get_zone_index", {}) + get_zone_index = function(data) + local zone_index = {} + for i, zone in pairs(global.zone_index) do + table.insert(zone_index, Zone.export_zone(zone)) + end + return zone_index + end, + +--/c remote.call("space-exploration", "get_zone_from_name", {zone_name = "Nauvis"}) + get_zone_from_name = function(data) return Zone.export_zone(Zone.from_name(data.zone_name)) end, + +--/c remote.call("space-exploration", "get_zone_from_zone_index", {zone_index = 2}) + get_zone_from_zone_index = function(data) return Zone.export_zone(Zone.from_zone_index(data.zone_index)) end, + +--/c remote.call("space-exploration", "get_zone_from_surface_index", {surface_index = game.player.surface.index}) + get_zone_from_surface_index = function(data) return Zone.export_zone(Zone.from_surface_index(data.surface_index)) end, + +--/c remote.call("space-exploration", "get_surface_type", {surface_index = game.player.surface.index}) + get_surface_type = function(data) + local surface = game.surfaces[data.surface_index] + local zone = Zone.from_surface(surface) + if zone then return zone.type end + -- vault? + local vault = Ancient.vault_from_surface(surface) + if vault then return "vault" end + end, + +--/c remote.call("space-exploration", "get_zone_icon", {zone_index = remote.call("space-exploration", "get_zone_from_surface_index", {surface_index = game.player.surface.index}).index}) + get_zone_icon = function(data) return Zone.get_icon(Zone.from_zone_index(data.zone_index)) end, + +--/c remote.call("space-exploration", "get_zone_is_solid", {zone_index = remote.call("space-exploration", "get_zone_from_surface_index", {surface_index = game.player.surface.index}).index}) + get_zone_is_solid = function(data) return Zone.is_solid(Zone.from_zone_index(data.zone_index)) end, + +--/c remote.call("space-exploration", "get_zone_is_space", {zone_index = remote.call("space-exploration", "get_zone_from_surface_index", {surface_index = game.player.surface.index}).index}) + get_zone_is_space = function(data) return Zone.is_space(Zone.from_zone_index(data.zone_index)) end, + +--/c remote.call("space-exploration", "zone_get_surface", {zone_index = remote.call("space-exploration", "get_zone_from_name", {zone_name = "Arendel"}).index}) + zone_get_surface = function(data) return Zone.get_surface(Zone.from_zone_index(data.zone_index)) end, + +--/c remote.call("space-exploration", "zone_get_make_surface", {zone_index = remote.call("space-exploration", "get_zone_from_name", {zone_name = "Arendel"}).index}) + zone_get_make_surface = function(data) return Zone.get_make_surface(Zone.from_zone_index(data.zone_index)) end, + +--/c remote.call("space-exploration", "get_cargo_loss", {force = game.player.force}) + get_cargo_loss = function(data) return Launchpad.get_force_cargo_loss_modifier(data.force) end, + +--/c remote.call("space-exploration", "get_reusability", {force = game.player.force}) + get_reusability = function(data) return Launchpad.get_reusability(data.force) end, + +--/c remote.call("space-exploration", "get_survivability_loss", {force = game.player.force}) +--/c game.print(remote.call("space-exploration", "get_survivability_loss", {force = game.player.force})) + get_survivability_loss = function(data) return Launchpad.get_force_survivability_loss_modifier(data.force) end, + +--/c game.print(remote.call("space-exploration", "get_rockets_launched", {force = game.player.force})) + get_rockets_launched = function(data) return global.forces[data.force.name].cargo_rockets_launched end, + +--/c remote.call("space-exploration", "launch_satellite", {force_name = game.player.force.name, surface=game.player.surface, count=1}) + launch_satellite = function(data) + local rep = data.count or 1 + for i = 1, rep, 1 do + on_satellite_launched(data.force_name, data.surface) + end + end, + +--/c remote.call("space-exploration", "build_satellite", {force_name = game.player.force.name}) + build_satellite = function(data) build_satellite(data.force_name) end, + +--/c remote.call("space-exploration", "build_ruin", {ruin_name = "satellite", surface_index = game.player.surface.index, position = game.player.position}) + build_ruin = function(data) + Ruin.build(data) + end, + +--/c pl = game.player p = pl.position remote.call("space-exploration", "ruin_log_tiles", {capture_name = "temp", surface = pl.surface, registration_point = p, left_top = {p.x - 11, p.y - 11}, right_bottom = {p.x + 11, p.y + 11}}) + ruin_log_tiles = function(data) + Ruin.log_tiles(data) + end, + +--/c pl = game.player p = pl.position remote.call("space-exploration", "ruin_log_entities", {capture_name = "temp", surface = pl.surface, registration_point = p, left_top = {p.x - 11, p.y - 11}, right_bottom = {p.x + 11, p.y + 11}}) + ruin_log_entities = function(data) + Ruin.log_entities(data) + end, + +--/c remote.call("space-exploration", "ruin_replace_in_blueprint", {name="filename", blueprint="...", entities={{name="in-name", new_name="out-name", shift={0,0}}, tiles={["in_name"]="out-name"}}) + ruin_replace_in_blueprint = function(data) + Ruin.replace_in_blueprint(data) + end, + +--/c remote.call("space-exploration", "make_interburbulator", {position = {x=game.player.position.x, y = game.player.position.y - 10}, zone_index = remote.call("space-exploration", "get_zone_from_surface_index", {surface_index = game.player.surface.index}).index}) + make_interburbulator = function(data) + Interburbulator.make_interburbulator(Zone.from_zone_index(data.zone_index), data.position) + end, + +--/c remote.call("space-exploration", "discover_zone", {force_name = game.player.force.name, surface=game.player.surface, zone_name="Arendel"}) + discover_zone = function(data) + if not global.forces[data.force_name].satellites_launched or global.forces[data.force_name].satellites_launched == 0 then + on_satellite_launched(data.force_name, data.surface) + end + Zone.discover(data.force_name, Zone.from_name(data.zone_name)) + end, + +--/c remote.call("space-exploration", "discover_zones_by_type", {force_name = game.player.force.name, types={"star", "planet", "moon"}}) + discover_zones_by_type = function(data) + for _, zone in pairs(global.zone_index) do + if util.table_contains(data.types, zone.type) then + Zone.discover(data.force_name, zone) + end + end + end, + +--/c remote.call("space-exploration", "show_all_zones", {}) + show_all_zones = function(data) + global.debug_view_all_zones = true + end, + +--/c remote.call("space-exploration", "unshow_all_zones", {}) + unshow_all_zones = function(data) + global.debug_view_all_zones = false + end, + +--/c remote.call("space-exploration", "debug_set_global", {debug_view_all_zones = true}) +-- debug_set_global = function(data) for k, v in pairs(data) do global[k] = v end end, + +--/c remote.call("space-exploration", "teleport_to_zone", {zone_name = "Nauvis", player=game.player}) + teleport_to_zone = function(data) + local zone = Zone.from_name(data.zone_name) + if zone and data.player then + local surface = Zone.get_make_surface(zone) + if data.player.character then + teleport_character_to_surface(data.player.character, surface, {0,0}) + else + data.player.teleport({0,0}, surface) + end + end + end, + +-- /c remote.call("space-exploration", "remote_view_is_active", {player=game.player}) + remote_view_is_active = function(data) + if data.player then + return RemoteView.is_active(data.player) + end + end, + +-- /c remote.call("space-exploration", "remote_view_is_unlocked", {player=game.player}) + remote_view_is_unlocked = function(data) + if data.player then + return RemoteView.is_unlocked(data.player) + end + end, + +-- /c remote.call("space-exploration", "remote_view_start", {player=game.player, zone_name = "Nauvis", position={x=100,y=200}, location_name="Point of Interest", freeze_history=true}) + remote_view_start = function(data) + local zone = Zone.from_name(data.zone_name) + if zone and data.player then + RemoteView.start(data.player, zone, data.position, data.location_name, data.freeze_history) + end + end, + +-- /c remote.call("space-exploration", "remote_view_stop", {player=game.player}) + remote_view_stop = function(data) + if data.player then + RemoteView.stop(data.player) + end + end, + +--/c remote.call("space-exploration", "set_player_velocity", {player=game.player, velocity = {x = 0, y = 0}}) + set_player_velocity = function(data) + if data.player and data.velocity and data.velocity.x and data.velocity.y then + local playerdata = get_make_playerdata(player) + if playerdata then + playerdata.velocity = data.velocity + end + end + end, +--/c remote.call("space-exploration", "begin_meteor_shower", {target_entity = game.player, meteors = 10}) +--/c remote.call("space-exploration", "begin_meteor_shower", {target_entity = game.player.selected or game.player}) +--/c remote.call("space-exploration", "begin_meteor_shower", {zone_name = "Nauvis", position = {x=0,y=0}, range = 1, meteors = 100}) +--/c for i = 1, 10 do remote.call("space-exploration", "begin_meteor_shower", {target_entity = game.player, meteors = 100}) end + begin_meteor_shower = function(data) + local entity = data.target_entity + if entity then + local zone = Zone.from_surface(entity.surface) + if zone and zone.type ~= "spaceship" then + Meteor.begin_meteor_shower(zone, entity.position, data.range, data.meteors) + end + elseif data.zone_name then + local zone = Zone.from_name(data.zone_name) + if zone and zone.type ~= "spaceship" then + local position = data.position or {x = 0, y = 0} + Meteor.begin_meteor_shower(zone, position, data.range, data.meteors) + end + end + + end, + +--/c remote.call("space-exploration", "begin_solar_flare", {zone_name = "Nauvis", targeting="basic"}) + begin_solar_flare = function(data) + if data.zone_name then + local zone = Zone.from_name(data.zone_name) + if zone and zone.type ~= "spaceship" then + SolarFlare.begin_flare(zone, data.targeting) -- zone, targeting, power_multiplier, delay, max_age + end + end + + end, + + +--/c remote.call("space-exploration", "fuel_rocket_silos", {}) + fuel_rocket_silos = function() + for _, launch_pad in pairs(global.rocket_launch_pads) do + launch_pad.lua_fuel = (launch_pad.lua_fuel or 0) + 100000000 + end + end, + +--/c remote.call("space-exploration", "get_known_zones", {force_name = game.player.force.name}) + get_known_zones = function(data) + if data.force_name and global.forces[data.force_name] then + -- return a list of known zone indexes. + return global.forces[data.force_name].zones_discovered + end + end, + +--/c remote.call("space-exploration", "show_only_zones", {zone_names = {"Nauvis", "Sandro", "Zomble", "Foenestra", "Kamsta"}}) + show_only_zones = function(data) + for force_name, force_data in pairs(global.forces) do + force_data.zones_discovered = {} + force_data.zones_discovered_count = 0 + force_data.satellites_launched = 1 + for _, zone_name in pairs(data.zone_names) do + local zone = Zone.from_name(zone_name) + if zone then + Zone.discover(force_name, zone, "Command") + else + game.print("Invalid zone name: "..zone_name) + end + end + end + end, + +--/c remote.call("space-exploration", "rebuild_surface_index", {}) + rebuild_surface_index = Zone.rebuild_surface_index, + +--/c remote.call("space-exploration", "rebuild_universe_resource_assignments", {}) + rebuild_universe_resource_assignments = Universe.rebuild_resource_assignments, + + get_on_cargo_rocket_launched_event = function() return Launchpad.on_cargo_rocket_launched_event end, +--/c remote.call("space-exploration", "get_on_player_respawned_event") + get_on_player_respawned_event = function() return Respawn.on_player_respawned_event end, + +--/c remote.call("space-exploration", "planet_swap", {star="Calidus", add_planet="Sandro"}) + robot_attrition_for_surface = function(data) + local surface_index = data.surface_index + local default_rate = data.default_rate + local zone = Zone.from_surface_index(surface_index) + return Zone.get_attrition(zone, default_rate) + end, + +--/c remote.call("space-exploration", "cancel_entity_creation", {entity=game.player.selected, player_index=1, message={"space-exploration.construction-denied"}}) + cancel_entity_creation = function(data) + return cancel_entity_creation(data.entity, data.player_index, data.message) + end, + +--/c remote.call("space-exploration", "update_zones_minimum_threat", { update_existing_surfaces = true}) + update_zones_minimum_threat = function(data) + Universe.update_zones_minimum_threat(data.update_existing_surfaces) + end, + +--/c remote.call("space-exploration", "log_map_gen", {}) + log_map_gen = Log.log_map_gen, + log_global = Log.log_global, + log_universe_simplified = Log.log_universe_simplified, + log_universe = Log.log_universe, + log_forces = Log.log_forces, + log_spaceships = Log.log_spaceships, + + +-- informatron implementation + informatron_menu = function(data) + return Informatron.menu(data.player_index) + end, + + informatron_page_content = function(data) + return Informatron.page_content(data.page_name, data.player_index, data.element) + end, + + informatron_page_content_update = function(data) + return Informatron.page_content_update(data.page_name, data.player_index, data.element) + end, + +-- jetpack implementation + on_character_swapped = function(event) + if event.new_character and event.old_character then + for _, playerdata in pairs(global.playerdata) do + if playerdata.character == event.old_character then + playerdata.character = event.new_character + end + end + end + end, + + on_entity_activated = function(event) + if mod ~= "space-exploration" then + Beacon.validate_entity(entity, ignore_count) + end + end + + } +) diff --git a/space-exploration_0.5.80/space-exploration/scripts/remote-view.lua b/space-exploration_0.5.80/space-exploration/scripts/remote-view.lua new file mode 100644 index 0000000..621fd46 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/remote-view.lua @@ -0,0 +1,1069 @@ +local RemoteView = {} +--[[ +Navigation View. +Remote view is the system that detaches the player from the character. +It displays a small you-are-here window on the top left with a buttons to: + Open the zone list + Open starmap + Open system view + Return to your body + +]]-- + +-- constants +RemoteView.name_gui_root = mod_prefix.."remote-view" +RemoteView.name_shortcut = mod_prefix.."remote-view" +RemoteView.name_event = mod_prefix.."remote-view" +RemoteView.name_pins_event = mod_prefix.."remote-view-pins" +RemoteView.name_event_previous = mod_prefix.."remote-view-previous" +RemoteView.name_event_next = mod_prefix.."remote-view-next" +--RemoteView.name_permissions_group = mod_prefix.."remote-view" +RemoteView.name_button_overhead_satellite = mod_prefix .. "overhead_satellite" +RemoteView.name_setting_overhead_satellite = mod_prefix .. "show-overhead-button-satellite-mode" +RemoteView.name_window_close = "remote-view-close" +RemoteView.name_button_zonelist = "remote-view-open_zonelist" +RemoteView.name_button_starmap = "remote-view-open_starmap" +RemoteView.name_button_system_map = "system_map_button" +RemoteView.name_details_root = "remote-view-details-root" +RemoteView.name_button_history_previous = "remote-view-history-previous" +RemoteView.name_button_history_next = "remote-view-history-next" +RemoteView.name_button_history_delete = "remote-view-history-delete" + +RemoteView.name_permission_group = "satellite" +RemoteView.name_permission_group_suffix = "_satellite" + +RemoteView.action_zone_click = "se-remoteview-zone-click" +RemoteView.max_history = 50 + +RemoteView.satellite_block_actions = { + defines.input_action.begin_mining_terrain, + defines.input_action.change_riding_state, + defines.input_action.change_shooting_state, + defines.input_action.cursor_split, + defines.input_action.destroy_opened_item, + defines.input_action.drop_item, + defines.input_action.fast_entity_split, + defines.input_action.fast_entity_transfer, + defines.input_action.inventory_split, + defines.input_action.inventory_transfer, + defines.input_action.map_editor_action, + defines.input_action.open_equipment, + defines.input_action.place_equipment, + defines.input_action.set_car_weapons_control, + defines.input_action.stack_split, + defines.input_action.stack_transfer, + defines.input_action.start_repair, + defines.input_action.take_equipment, + defines.input_action.toggle_driving, + defines.input_action.toggle_map_editor, +} + + +function RemoteView.get_stack_limit(stack) -- must be lua item stack, not simple stack + local name = stack.name + local type = stack.type + if type == "blueprint" + or type == "blueprint-book" + or type == "deconstruction-item" + or type == "selection-tool" + or type == "upgrade-item" + or type == "copy-paste-tool" + or type == "cut-paste-tool" then + return stack.count + end + if name == "artillery-targeting-remote" -- type == "capsule" for the artillery remote + --or name == "ion-cannon-targeter" -- still bugged + or type == "spidertron-remote" then -- allow all spidertron remotes (not just the vanilla one named spidertron-remote) by using type + return stack.count + end + if name == "red-wire" + or name == "green-wire" + or name == "copper-cable" then + return 2 + end + return 0 +end + +function RemoteView.drop_stack(player, stack, drop_count, drop_to_ground) + if player and player.connected and RemoteView.is_active(player) then + local entity = player.opened_gui_type == defines.gui_type.entity and player.opened or player.selected + if entity then + local inserted = entity.insert({name = stack.name, count = drop_count}) + if inserted < drop_count and drop_to_ground == true then + player.surface.spill_item_stack( + entity.position, + {name = stack.name, count = drop_count - inserted}, + false, -- lootable + player.force, -- deconstruct by force + false) -- allow belts + end + elseif drop_to_ground then + local limit = RemoteView.get_stack_limit(stack) + if limit == 0 then + player.surface.spill_item_stack( + player.position, + {name = stack.name, count = drop_count}, + false, -- lootable + player.force, -- deconstruct by force + false) -- allow belts + end + end + end +end + +function RemoteView.on_player_crafted_item(event) + if not(event.item_stack and event.item_stack.valid_for_read) then return end + local player = game.players[event.player_index] + if player and player.connected and RemoteView.is_active(player) then + local limit = RemoteView.get_stack_limit(event.item_stack) + if limit > 0 then + player.cursor_stack.set_stack(event.item_stack) + if event.item_stack.count > limit then + RemoteView.drop_stack(player, event.item_stack, event.item_stack.count - limit, false) + end + event.item_stack.count = limit + else + player.cursor_ghost = event.item_stack.prototype + event.item_stack.count = 0 + end + end +end +Event.addListener(defines.events.on_player_crafted_item, RemoteView.on_player_crafted_item) + +function RemoteView.on_player_pipette(event) + local player = game.players[event.player_index] + if player and player.connected and RemoteView.is_active(player) then + player.cursor_stack.clear() + player.cursor_ghost = event.item + end +end +Event.addListener(defines.events.on_player_pipette, RemoteView.on_player_pipette) + +function RemoteView.on_player_cursor_stack_changed(event) + local player = game.players[event.player_index] + if player and player.connected and RemoteView.is_active(player) then + local stack = player.cursor_stack + if stack and stack.valid_for_read then + local limit = RemoteView.get_stack_limit(stack) + if limit > 0 then + if stack.count > limit then + if stack.name == "red-wire" + or stack.name == "green-wire" + or stack.name == "copper-cable" then + --wire shortcuts mod messes things up + else + RemoteView.drop_stack(player, stack, stack.count - limit, true) + end + end + stack.count = limit + else + RemoteView.drop_stack(player, stack, stack.count, true) + player.cursor_ghost = stack.prototype + player.cursor_stack.clear() + end + end + end +end +Event.addListener(defines.events.on_player_cursor_stack_changed, RemoteView.on_player_cursor_stack_changed) + +function RemoteView.on_player_main_inventory_changed(event) + local player = game.players[event.player_index] + if player and player.connected and RemoteView.is_active(player) then + local inv = player.get_main_inventory() + for i = 1, #inv do + local stack = inv[i] + if stack and stack.valid_for_read then + local limit = RemoteView.get_stack_limit(stack) + if limit > 0 then + stack.count = limit + else + RemoteView.drop_stack(player, stack, stack.count, true) + stack.count = 0 + end + end + end + end +end +Event.addListener(defines.events.on_player_main_inventory_changed, RemoteView.on_player_main_inventory_changed) + +function RemoteView.apply_permission_group_permissions(group_from, group_to) + for _, action in pairs(defines.input_action) do + group_to.set_allows_action(action, group_from.allows_action(action) ) + end +end + +function RemoteView.player_set_satellite_permissions(player) + local playerdata = get_make_playerdata(player) + local permission_group = nil + if player.permission_group then + if player.permission_group.name == RemoteView.name_permission_group then + return player.permission_group -- already in default satellite group + elseif string.find(player.permission_group.name, RemoteView.name_permission_group_suffix, 1, true) then + return player.permission_group -- already in special satellite group + end + -- make a new group from the existing group + permission_group = game.permissions.get_group(player.permission_group.name..RemoteView.name_permission_group_suffix) + if not permission_group then + permission_group = game.permissions.create_group(player.permission_group.name..RemoteView.name_permission_group_suffix) + end + RemoteView.apply_permission_group_permissions(player.permission_group, permission_group) + end + + -- get the default group + if not permission_group then + permission_group = game.permissions.get_group(RemoteView.name_permission_group) + end + + -- make the default group + if not permission_group then + permission_group = game.permissions.create_group(RemoteView.name_permission_group) + end + + for _, action in pairs(RemoteView.satellite_block_actions) do + permission_group.set_allows_action(action, false) + end + + return permission_group +end + +function RemoteView.gui_close (player, keep_open_window) + Pin.modal_close(player) + if not keep_open_window then + Pin.window_close(player) + end + if player.gui.left[RemoteView.name_gui_root] then + player.gui.left[RemoteView.name_gui_root].destroy() + end +end + +function RemoteView.gui_update (player) -- only call when something changed + local root = player.gui.left[RemoteView.name_gui_root] + if root then + if root.currently_viewing_frame + and root.currently_viewing_frame.currently_viewing_table + and root.currently_viewing_frame.currently_viewing_table.currently_viewing_value then + local zone = Zone.from_surface(player.surface) + + -- current system button + local current_system + if zone then + current_system = Zone.get_star_from_child(zone) + root.system_toggles_table.system_map_button.style = "se_generic_button" + else + current_system = MapView.get_current_system(player) + root.system_toggles_table.system_map_button.style = "se_generic_button_down" + end + root.system_toggles_table.system_map_button.style.padding = 5 + if current_system then + root.system_toggles_table.system_map_button.caption = { + "space-exploration.simple-a-b-space", + "[img=se-map-gui-system]", + { "space-exploration.solar-system", current_system.name } } + else + root.system_toggles_table.system_map_button.caption = { + "space-exploration.simple-a-b-space", + "[img=se-map-gui-starmap]", + { "space-exploration.interstellar-map" } } + end + + -- view details toggles + local starmap_settings = MapView.get_settings(player) + for _, element in pairs(root.system_toggles_table[MapView.name_toggles].children) do + if starmap_settings[element.name] then + element.style = "se_generic_square_button_down" + else + element.style = "se_generic_square_button" + end + element.style.width = 32 + element.style.height = 32 + element.visible = starmap_settings[element.name] ~= nil + end + + if root.system_toggles_table.history_flow then + local playerdata = get_make_playerdata(player) + local history = playerdata.location_history + if history then + + local next_locations = {} + local next_locations_merged = {} + for i = history.current_pointer +1, #history.references do + local locale = Location.to_localised_string(history.references[i]) + if locale then + table.insert(next_locations, locale) + if #next_locations_merged == 0 then + next_locations_merged = {"space-exploration.simple-bold", locale} + else + next_locations_merged = {"space-exploration.simple-a-b-break", next_locations_merged, locale} + end + end + end + + local prev_locations = {} + local prev_locations_merged = {} + for i = history.current_pointer -1, 1, -1 do + local locale = Location.to_localised_string(history.references[i]) + if locale then + table.insert(prev_locations, locale) + if #prev_locations_merged == 0 then + prev_locations_merged = {"space-exploration.simple-bold", locale} + else + prev_locations_merged = {"space-exploration.simple-a-b-break", prev_locations_merged, locale} + end + end + end + + if root.system_toggles_table.history_flow[RemoteView.name_button_history_delete] then + root.system_toggles_table.history_flow[RemoteView.name_button_history_delete].enabled = #next_locations + #prev_locations > 0 + end + + if root.system_toggles_table.history_flow[RemoteView.name_button_history_next] then + if #next_locations > 0 then + root.system_toggles_table.history_flow[RemoteView.name_button_history_next].enabled = true + root.system_toggles_table.history_flow[RemoteView.name_button_history_next].tooltip = { + "space-exploration."..RemoteView.name_button_history_next, next_locations_merged} + else + root.system_toggles_table.history_flow[RemoteView.name_button_history_next].enabled = false + root.system_toggles_table.history_flow[RemoteView.name_button_history_next].tooltip = { + "space-exploration."..RemoteView.name_button_history_next, ""} + end + end + + if root.system_toggles_table.history_flow[RemoteView.name_button_history_previous] then + if #prev_locations > 0 then + root.system_toggles_table.history_flow[RemoteView.name_button_history_previous].enabled = true + root.system_toggles_table.history_flow[RemoteView.name_button_history_previous].tooltip = { + "space-exploration."..RemoteView.name_button_history_previous, prev_locations_merged} + else + root.system_toggles_table.history_flow[RemoteView.name_button_history_previous].enabled = false + root.system_toggles_table.history_flow[RemoteView.name_button_history_previous].tooltip = { + "space-exploration."..RemoteView.name_button_history_previous, ""} + end + end + end + end + + -- currently viewing path and name + local currently_viewing_path = root.currently_viewing_frame.currently_viewing_table.currently_viewing_path + currently_viewing_path.clear() + currently_viewing_path.style.vertical_align = "center" + + local currently_viewing_name + if zone then + + local parent_chain = {} + local parent_zone = zone + local found_star = false + while parent_zone do + table.insert(parent_chain, parent_zone) -- reverse order + found_star = parent_zone.type == "star" + parent_zone = parent_zone.parent + end + local buttons = {} + for i = #parent_chain, 1, -1 do + if zone.type ~= "spaceship" and not found_star then + local space = currently_viewing_path.add{ type="sprite", sprite = "se-map-gui-starmap-small", tooltip = {"space-exploration.interstellar-space"} } + end + parent_zone = parent_chain[i] + local zone_icon = Zone.get_icon(parent_zone) + if parent_zone.type == "orbit" and parent_zone.parent.type == "star" then + break + end + if parent_zone.type == "star" then + parent_zone = parent_zone.orbit + end + if #currently_viewing_path.children > 0 then + local arrow = currently_viewing_path.add{ type="label", caption = "▶" } + arrow.style.font = "default-tiny-bold" + arrow.style.top_margin = 1 + + --currently_viewing_path.add{ type="sprite", sprite = zone_icon, tooltip = parent_zone.name } + table.insert(buttons, currently_viewing_path.add { + type = "sprite-button", + sprite = zone_icon, + tags = { + action = RemoteView.action_zone_click, + zone_index = parent_zone.index + }, + style = "se_generic_square_button", + tooltip = parent_zone.name + }) + else + --currently_viewing_path.add{ type="sprite", sprite = zone_icon, tooltip = parent_zone.name } + table.insert(buttons, currently_viewing_path.add { + type = "sprite-button", + sprite = zone_icon, + tags = { + action = RemoteView.action_zone_click, + zone_index = parent_zone.index + }, + style = "se_generic_square_button", + tooltip = parent_zone.name + }) + end + end + + currently_viewing_path.children[#currently_viewing_path.children].style = "se_generic_square_button_active" + + currently_viewing_name = zone.name + + if zone.orbit and zone.type ~= "star" then + local arrow = currently_viewing_path.add{ type="label", caption = "▶" } + arrow.style.font = "default-tiny-bold" + arrow.style.top_margin = 1 + local zone_icon = Zone.get_icon(zone.orbit) + table.insert(buttons, currently_viewing_path.add { + type = "sprite-button", + sprite = zone_icon, + tags = { + action = RemoteView.action_zone_click, + zone_index = zone.orbit.index + }, + style = "se_generic_square_button", + tooltip = zone.orbit.name + }) + end + -- temp hack + + currently_viewing_path.style.vertical_align = "center" + for _, button in pairs(buttons) do + button.style.top_margin = 2 + button.style.bottom_margin = 2 + button.style.vertical_align = "center" + button.style.width = 36 + button.style.height = 36 + end + + end + + if currently_viewing_name then + root.system_toggles_table[MapView.name_toggles].visible = false + root.currently_viewing_label.visible = true + root.currently_viewing_frame.visible = true + root.currently_viewing_frame.currently_viewing_table.currently_viewing_value.caption = currently_viewing_name + else + root.system_toggles_table[MapView.name_toggles].visible = true + root.currently_viewing_label.visible = false + root.currently_viewing_frame.visible = false + end + + Pin.gui_update(player) + end + end +end + +function RemoteView.gui_open (player) + local gui = player.gui.left + close_own_guis(player) + RemoteView.gui_close(player, true) + Lifesupport.gui_close(player) + + local main = gui.add{ type = "frame", name = RemoteView.name_gui_root, style="space_platform_container", direction="vertical"} + main.style.horizontally_stretchable = true + main.style.padding = 12 + main.style.top_padding = 6 + -- If the width can be expanded and you have 10+ pins, or system names are different, + -- then you have the problem of the window size changing and the back button moves + -- enough for the mouse to be over a different button. + main.style.minimal_width = 432 + + local title_table = main.add{type="table", name="title_table", column_count=2, draw_horizontal_lines=false} + title_table.style.horizontally_stretchable = true + title_table.style.column_alignments[1] = "left" + title_table.style.column_alignments[2] = "right" + + local title_frame = title_table.add{type="frame", name="title_frame", caption={"space-exploration.remote-view-window-title"}, style="informatron_title_frame"} + title_frame.style.right_padding = -5 + + local right_flow = title_table.add{type="flow", name="title_flow_right"} + + local list = right_flow.add{type="sprite-button", name=RemoteView.name_button_zonelist, sprite = "se-map-gui-universe-explorer", style="informatron_close_button", tooltip={"space-exploration.zonelist-window-title"}} + list.style.width = 28 + list.style.height = 28 + list.style.right_margin = 6 + + local starmap = right_flow.add{type="sprite-button", name=RemoteView.name_button_starmap, sprite = "se-map-gui-starmap", style="informatron_close_button", tooltip={"space-exploration.star-map"}, + tags = {se_action="starmap-cycle"}} + starmap.style.width = 28 + starmap.style.height = 28 + starmap.style.right_margin = 6 + + --local close = right_flow.add{type="button", name=RemoteView.name_window_close, caption="✖", style="informatron_close_button", tooltip={"space-exploration.exit-remote-view"}} + local close = right_flow.add{type="sprite-button", name=RemoteView.name_window_close, sprite = "utility/close_white", style="informatron_close_button", tooltip={"space-exploration.exit-remote-view"}} + close.style.width = 28 + close.style.height = 28 + + local system_toggles_table = main.add{ type="table", name="system_toggles_table", column_count=3, draw_horizontal_lines=false} + system_toggles_table.style.horizontally_stretchable = true + system_toggles_table.style.column_alignments[1] = "left" + system_toggles_table.style.column_alignments[2] = "right" + system_toggles_table.style.column_alignments[3] = "right" + system_toggles_table.style.top_margin = 5 + + local system_map_button = system_toggles_table.add{ type="button", name=RemoteView.name_button_system_map, style="se_generic_button", caption = ""} + --system_map_button.style.horizontally_stretchable = true + --system_map_button.style.width = 160 + system_map_button.style.left_padding = 4 + system_map_button.style.right_padding = 4 + system_map_button.style.height = 36 + + local toggles_flow = system_toggles_table.add{type="flow", name=MapView.name_toggles} + toggles_flow.style.horizontally_stretchable = true + toggles_flow.style.horizontal_align = "right" + + local show_resources = toggles_flow.add{type="sprite-button", name=MapView.name_button_show_resources, sprite = "entity/stone", style="se_generic_square_button", tooltip={"space-exploration.remote-view-show-hide-resources"}} + show_resources.style.width = 32 + show_resources.style.height = 32 + local show_stats = toggles_flow.add{type="sprite-button", name=MapView.name_button_show_stats, sprite = "entity/"..Landingpad.name_rocket_landing_pad, style="se_generic_square_button", tooltip={"space-exploration.remote-view-show-hide-stats"}} + show_stats.style.width = 32 + show_stats.style.height = 32 + local show_anchor_info = toggles_flow.add{type="sprite-button", name=MapView.name_button_show_anchor_info, sprite = "virtual-signal/se-spaceship", style="se_generic_square_button", tooltip={"space-exploration.remote-view-show-hide-anchor-info"}} + show_anchor_info.style.width = 32 + show_anchor_info.style.height = 32 + show_anchor_info.style.right_margin = 10 + local show_danger_zones = toggles_flow.add{type="sprite-button", name=MapView.name_button_show_danger_zones, sprite="utility/warning_icon", style="se_generic_square_button", tooltip={"space-exploration.remote-view-show-hide-danger-zones"}} + show_danger_zones.style.width = 32 + show_danger_zones.style.height = 32 + show_danger_zones.style.right_margin = 10 + + local history_flow = system_toggles_table.add{type="flow", name="history_flow"} + history_flow.style.horizontally_stretchable = true + history_flow.style.horizontal_align = "right" + + local history_delete = history_flow.add{ + type="sprite-button", + name=RemoteView.name_button_history_delete, + sprite = "utility/trash_white", + style="se_generic_square_button", + tooltip={"space-exploration."..RemoteView.name_button_history_delete} + } + history_delete.style.width = 32 + history_delete.style.height = 32 + history_delete.style.padding = 4 + local history_prev = history_flow.add{ + type="button", + name= RemoteView.name_button_history_previous, + caption = "←", + style="se_generic_square_button", + tooltip={"space-exploration."..RemoteView.name_button_history_previous} + } + history_prev.style.width = 32 + history_prev.style.height = 32 + local history_next = history_flow.add{ + type="button", + name= RemoteView.name_button_history_next, + caption = "→", + style="se_generic_square_button", + tooltip={"space-exploration."..RemoteView.name_button_history_next} + } + history_next.style.width = 32 + history_next.style.height = 32 + + + local currently_viewing_label = main.add{type="label", name="currently_viewing_label", caption={"space-exploration.remote-view-currently-viewing"}} -- left + currently_viewing_label.style.font_color = {r=0.5,g=0.5,b=0.5} + + local currently_viewing_frame = main.add{type="frame", name="currently_viewing_frame", style="informatron_inside_deep_frame"} + currently_viewing_frame.style.horizontally_stretchable = true + --currently_viewing_frame.style.width = 280 + currently_viewing_frame.style.padding = 10 + currently_viewing_frame.style.top_padding = 6 + + local currently_viewing_table = currently_viewing_frame.add{type="table", name="currently_viewing_table", column_count=2, draw_horizontal_lines=false} + currently_viewing_table.style.horizontally_stretchable = true + --currently_viewing_frame.style.width = 280 + currently_viewing_table.style.column_alignments[1] = "left" + currently_viewing_table.style.column_alignments[2] = "right" + + local currently_viewing_path = currently_viewing_table.add{type="flow", name="currently_viewing_path", direction="horizontal"} -- right + --currently_viewing_path.style.horizontally_stretchable = true -- this cuts off the label if both sides go to 50% size + + local currently_viewing_value = currently_viewing_table.add{type="label", name="currently_viewing_value", style = "heading_2_label"} -- right + currently_viewing_value.style.horizontally_stretchable = true + + Pin.gui_open (player) + RemoteView.gui_update (player) +end + +function RemoteView.gui_make_entity_back_button (player, entity) + local root = player.gui.left[RemoteView.name_gui_root] + if root then + if root.back_container then + root.back_container.destroy() + end + local back_container = root.add{ + type = "flow", + name = "back_container", + direction = "horizontal" + } + local back = back_container.add{ + type = "button", + name = "canel_activity", + caption = {"space-exploration.simple-a-b-space", "[img=entity/"..entity.name.."]", {"space-exploration.back"}}, + style="back_button", + tooltip= {"space-exploration.simple-a-b-space", {"space-exploration.back-to"}, {"entity-name."..entity.name}}, + tags = { + se_action = "go_to_entity_and_select", + name = entity.name, + surface_index = entity.surface.index, + position = entity.position, + } + } + back.style.top_margin = 10 + end +end + +function RemoteView.stop (player) + player.cheat_mode = false + local playerdata = get_make_playerdata(player) + -- exit remote view + if playerdata.remote_view_active then + playerdata.remote_view_active = nil + playerdata.remote_view_activity = nil + + local location_reference = Location.make_reference(Zone.from_surface(player.surface), player.position, nil) + RemoteView.add_history(player, location_reference, true) + + RemoteView.gui_close(player) + MapView.stop_map(player) + + if playerdata.pre_nav_permission_group and playerdata.pre_nav_permission_group.valid and playerdata.pre_nav_permission_group.name ~= RemoteView.name_permission_group then + player.permission_group = playerdata.pre_nav_permission_group + else + player.permission_group = nil + end + playerdata.pre_nav_permission_group = nil + if playerdata.character and playerdata.character.valid then + if playerdata.anchor_scouting_for_spaceship_index then + player.set_controller{type = defines.controllers.ghost} + playerdata.character.color = player.color + else + player.teleport(playerdata.character.position, playerdata.character.surface) + player.set_controller{type = defines.controllers.character, character = playerdata.character} + end + elseif not player.character then + Respawn.die(player) + end + end +end + +function RemoteView.add_history(player, location_reference, force_to_end) + if not location_reference then return end + + local playerdata = get_make_playerdata(player) + if not playerdata.location_history then + playerdata.location_history = {} + playerdata.location_history.references = {location_reference} + playerdata.location_history.current_pointer = 1 + else + + -- if back in history, clear any skipped forward + if not force_to_end then + for i = playerdata.location_history.current_pointer + 1, #playerdata.location_history.references do + playerdata.location_history.references[i] = nil + end + end + + -- don't add duplicate + if #playerdata.location_history.references > 0 then + local last_ref = playerdata.location_history.references[#playerdata.location_history.references] + --Log.trace(serpent.block(last_ref)) + --Log.trace(serpent.block(location_reference)) + if last_ref.type == location_reference.type and last_ref.index == location_reference.index then + -- same zone, maybe have a setting to not have multiple history events on the same zone. + if last_ref.position == nil or last_ref.name == nil then + -- replace the postionless location + playerdata.location_history.references[#playerdata.location_history.references] = location_reference + elseif location_reference.position and Util.vectors_delta_length(last_ref.position, location_reference.position) > 1 then + -- add different position + table.insert(playerdata.location_history.references, location_reference) + end + else -- different zone, always add + table.insert(playerdata.location_history.references, location_reference) + end + else + table.insert(playerdata.location_history.references, location_reference) + end + + -- fit in max history + while #playerdata.location_history.references > RemoteView.max_history do + table.remove(playerdata.location_history.references, 1) + end + + -- update pointer + playerdata.location_history.current_pointer = #playerdata.location_history.references + end +end + +--[[ +Makes the data valid. +Deletes histories to deleted surfaces/spaceships +]] +function RemoteView.make_history_valid(player) + local playerdata = get_make_playerdata(player) + if playerdata.location_history then + local old_history = playerdata.location_history + playerdata.location_history = nil + for _, location_reference in pairs(old_history.references) do + if Location.from_reference(location_reference) then + RemoteView.add_history(player, location_reference, true) + end + end + end +end + +function RemoteView.history_goto_next(player) + local location_reference = RemoteView.history_next(player) + if location_reference then + local playerdata = get_make_playerdata(player) + playerdata.location_history.current_pointer = playerdata.location_history.current_pointer + 1 + Location.goto_reference(player, location_reference, true) + end +end + +function RemoteView.history_next(player) + local playerdata = get_make_playerdata(player) + if not playerdata.location_history then return end + return playerdata.location_history.references[playerdata.location_history.current_pointer + 1] +end + +function RemoteView.history_goto_previous(player) + local location_reference = RemoteView.history_previous(player) + if location_reference then + local playerdata = get_make_playerdata(player) + playerdata.location_history.current_pointer = playerdata.location_history.current_pointer - 1 + Location.goto_reference(player, location_reference, true) + end +end +function RemoteView.history_previous(player) + local playerdata = get_make_playerdata(player) + if not playerdata.location_history then return end + return playerdata.location_history.references[playerdata.location_history.current_pointer - 1] +end + +function RemoteView.history_delete_all(player) + local playerdata = get_make_playerdata(player) + if not playerdata.location_history then return end + local current_history = nil + if playerdata.location_history.current_pointer > 0 and playerdata.location_history.references then + current_history = playerdata.location_history.references[playerdata.location_history.current_pointer] + end + playerdata.location_history.current_pointer = 0 + for key, value in pairs(playerdata.location_history.references) do + playerdata.location_history.references[key] = nil + end + if current_history then + playerdata.location_history.current_pointer = 1 + table.insert(playerdata.location_history.references, current_history) + end +end + +function RemoteView.history_goto_last(player) + local playerdata = get_make_playerdata(player) + if playerdata.location_history.references and playerdata.location_history.references then + local location_reference = playerdata.location_history.references[#playerdata.location_history.references] + if location_reference then + Location.goto_reference(player, location_reference, true) + end + end +end + +function RemoteView.is_unlocked_force(force_name) + if global.debug_view_all_zones or + (global.forces[force_name] + and global.forces[force_name].satellites_launched > 0) then + return true + end + return false +end +function RemoteView.is_unlocked(player) + if global.debug_view_all_zones or + (global.forces[player.force.name] + and global.forces[player.force.name].satellites_launched > 0) then + return true + end + return false +end + +function RemoteView.start (player, zone, position, location_name, freeze_history) + -- dont let the player enter nav view in the editor because it breaks + if player.controller_type == defines.controllers.editor then return game.print({"space-exploration.cannot-open-nav-view-in-editor"}) end + + if RemoteView.is_unlocked(player) then + local playerdata = get_make_playerdata(player) + Spaceship.stop_anchor_scouting(player) + + local character = player.character + -- enter remote view + if not playerdata.remote_view_active then + playerdata.remote_view_active = true + if player.permission_group then + playerdata.pre_nav_permission_group = game.permissions.get_group(player.permission_group.name) + end + --player.set_controller{type = defines.controllers.spectator} + --player.set_controller{type = defines.controllers.ghost} + player.set_controller{type = defines.controllers.god} + player.cheat_mode = true + end + + player.permission_group = RemoteView.player_set_satellite_permissions(player) + + if character then + playerdata.character = character + playerdata.character.color = player.color + -- stop the character from continuing input action (running to doom) + character.walking_state = {walking = false, direction = defines.direction.south} + character.riding_state = {acceleration = defines.riding.acceleration.braking, direction = defines.riding.direction.straight} + character.shooting_state = {state = defines.shooting.not_shooting, position=character.position} + end + + if not zone then + zone = Zone.from_surface(player.surface) + end + if not zone then + local vault = Ancient.vault_from_surface(player.surface) + if vault then + zone = Zone.from_zone_index(vault.zone_index) + end + end + if (not zone) and not playerdata.remote_view_active_map then + zone = Zone.get_default() + end + if zone then + if not freeze_history then + local location_reference = Location.make_reference(zone, position, location_name) + RemoteView.add_history(player, location_reference) + end + playerdata.remote_view_current_zone = zone + playerdata.remote_view_active_map = nil + if zone.type == "spaceship" then + local spaceship = zone + local surface = Spaceship.get_current_surface(zone) + if player.surface ~= surface then + if position then + player.teleport(position, surface) + elseif spaceship.console and spaceship.console.valid then + player.teleport(spaceship.console.position, spaceship.console.surface) + else + if spaceship.known_tiles_average_x and spaceship.known_tiles_average_y then + player.teleport({spaceship.known_tiles_average_x,spaceship.known_tiles_average_y}, surface) + else + player.teleport({0,0}, surface) + end + end + elseif position then + player.teleport(position) + end + else + local surface = Zone.get_make_surface(zone) + if not playerdata.surface_positions or not playerdata.surface_positions[surface.index] then + player.force.chart(surface, util.position_to_area({x = 0, y = 0}, 256)) + elseif not position then + position = playerdata.surface_positions[zone.surface_index] + end + if not position then + position = {x = 0, y = 0} + end + player.teleport(position, surface) + Zone.apply_markers(zone) -- in case the surface exists + end + else + playerdata.remote_view_current_zone = nil + playerdata.remote_view_active_map = nil + end + + -- add zone select gui + RemoteView.gui_open(player) + else + player.print({"space-exploration.remote-view-requires-satellite"}) + end +end + +function RemoteView.is_active (player) + return get_make_playerdata(player).remote_view_active == true +end + +function RemoteView.toggle (player) + if RemoteView.is_active(player) then + RemoteView.stop(player) + else + RemoteView.start(player) + end +end + +function RemoteView.on_gui_click (event) + if not (event.element and event.element.valid) then return end + local element = event.element + local player = game.players[event.player_index] + + if event.element.name == RemoteView.name_button_overhead_satellite then + RemoteView.toggle(player) return + end + + if Pin.on_gui_click(event) then + return + end + + if element.tags and element.tags.se_action == "go_to_entity_and_select" then + local surface = game.surfaces[element.tags.surface_index] + if surface then + local zone = Zone.from_surface(surface) + if zone then + player.cursor_stack.clear() + local entity = surface.find_entity(element.tags.name, element.tags.position) + RemoteView.start(player, zone, element.tags.position) + if entity then player.opened = entity end + return + end + end + RemoteView.stop(player) + return + end + + local root = gui_element_or_parent(element, RemoteView.name_gui_root) + if root then -- remote view + if element.name == RemoteView.name_window_close then + RemoteView.stop(player) + elseif element.name == RemoteView.name_button_zonelist then + Zonelist.toggle_main_window(event.player_index) + elseif element.name == RemoteView.name_button_system_map then + local zone = Zone.from_surface(player.surface) + if zone then + local parent_star = Zone.get_star_from_child(zone) + if parent_star then + MapView.start_system_map(player, parent_star) + else + MapView.start_interstellar_map(player) + end + elseif MapView.get_current_system(player) then + --RemoteView.start(player, MapView.get_current_system(player)) + RemoteView.history_goto_previous(player) + else + RemoteView.stop(player) + end + elseif element.parent and element.parent.name == MapView.name_toggles then + MapView.toggle_setting(player, element.name) + RemoteView.gui_update(player) + elseif element.tags.action == RemoteView.action_zone_click then + local zone = Zone.from_zone_index(element.tags.zone_index) + if zone then RemoteView.start (player, zone) end + elseif element.name == RemoteView.name_button_history_delete then + RemoteView.history_delete_all(player) + RemoteView.gui_update(player) + elseif element.name == RemoteView.name_button_history_previous then + RemoteView.history_goto_previous(player) + elseif element.name == RemoteView.name_button_history_next then + RemoteView.history_goto_next(player) + end + return + end +end +Event.addListener(defines.events.on_gui_click, RemoteView.on_gui_click) + +function RemoteView.on_lua_shortcut (event) + if event.player_index + and game.players[event.player_index] + and game.players[event.player_index].connected then + + if event.prototype_name == RemoteView.name_shortcut then + RemoteView.toggle(game.players[event.player_index]) + end + + end +end +Event.addListener(defines.events.on_lua_shortcut, RemoteView.on_lua_shortcut) + +function RemoteView.on_remote_view_keypress (event) + if event.player_index + and game.players[event.player_index] + and game.players[event.player_index].connected + then + local player = game.players[event.player_index] + if event.input_name == RemoteView.name_event then + RemoteView.toggle(player) + elseif event.input_name == RemoteView.name_event_next then + RemoteView.history_goto_next(player) + elseif event.input_name == RemoteView.name_event_previous then + RemoteView.history_goto_previous(player) + end + end +end +Event.addListener(RemoteView.name_event, RemoteView.on_remote_view_keypress) +Event.addListener(RemoteView.name_event_next, RemoteView.on_remote_view_keypress) +Event.addListener(RemoteView.name_event_previous, RemoteView.on_remote_view_keypress) + + +function RemoteView.on_remote_view_pins_keypress (event) + if event.player_index + and game.players[event.player_index] + and game.players[event.player_index].connected + then + Pin.window_toggle(game.players[event.player_index]) + end +end +Event.addListener(RemoteView.name_pins_event, RemoteView.on_remote_view_pins_keypress) + +function RemoteView.on_player_clicked_gps_tag (event) + local player = game.players[event.player_index] + if not player then return end + local surface = game.surfaces[event.surface] + if surface then + local zone = Zone.from_surface(surface) + if not zone then + if event.surface ~= player.surface.name then + return player.print({"space-exploration.gps_no_zone"}) + end + else + if not RemoteView.is_unlocked(player) then + if event.surface ~= player.surface.name then + return player.print({"space-exploration.gps_requires_satellite"}) + else + -- default to map shift with no message + end + else + if Zone.is_visible_to_force(zone, player.force.name) then + local playerdata = get_make_playerdata(player) + RemoteView.start(player, zone, event.position) + player.close_map() + player.zoom = 0.3 + else + player.print({"space-exploration.gps_undiscovered"}) + end + end + end + else + player.print({"space-exploration.gps_invalid"}) + end +end +Event.addListener(defines.events.on_player_clicked_gps_tag, RemoteView.on_player_clicked_gps_tag) + +function RemoteView.update_overhead_button(player_index) + local player = game.players[player_index] + local button_flow = mod_gui.get_button_flow(player) + if button_flow then + if settings.get_player_settings(player)[RemoteView.name_setting_overhead_satellite].value == true then + if not button_flow[RemoteView.name_button_overhead_satellite] then + button_flow.add{type="sprite-button", name=RemoteView.name_button_overhead_satellite, sprite="virtual-signal/"..mod_prefix.."remote-view", tooltip = {"space-exploration.remote-view"}} + end + else + if button_flow[RemoteView.name_button_overhead_satellite] then + button_flow[RemoteView.name_button_overhead_satellite].destroy() + end + end + end +end + +function RemoteView.on_runtime_mod_setting_changed(event) + for _, player in pairs(game.connected_players) do + RemoteView.update_overhead_button(player.index) + end +end +Event.addListener(defines.events.on_runtime_mod_setting_changed, RemoteView.on_runtime_mod_setting_changed) + +function RemoteView.on_configuration_changed() + for _, player in pairs(game.connected_players) do + RemoteView.update_overhead_button(player.index) + end +end +Event.addListener("on_configuration_changed", RemoteView.on_configuration_changed, true) + +return RemoteView diff --git a/space-exploration_0.5.80/space-exploration/scripts/respawn.lua b/space-exploration_0.5.80/space-exploration/scripts/respawn.lua new file mode 100644 index 0000000..976091e --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/respawn.lua @@ -0,0 +1,523 @@ +local Respawn = {} + +--custon event +--/c remote.call("space-exploration", "get_on_player_respawned_event") +--script.on_event(remote.call("space-exploration", "get_on_player_respawned_event"), my_event_handler) +Respawn.on_player_respawned_event = script.generate_event_name() + +-- constants +Respawn.name_gui = mod_prefix.."respawn-gui" +Respawn.name_shortcut = mod_prefix.."respawn" +Respawn.name_button_event = mod_prefix.."respawn" +Respawn.keep_percent = 0.9 +Respawn.corpse_inventory_size_buffer = 100 +Respawn.non_colliding_search_radius = 128 + +function Respawn.at(player, surface, position) + position = position or player.force.get_spawn_position(surface) or {0,0} + player.teleport(position, surface) + + local character = surface.create_entity{name = "character", position=position, force=player.force, raise_built=true} + local playerdata = get_make_playerdata(player) + playerdata.death_surface = nil + Respawn.set_data(playerdata, character) + player.set_controller{type = defines.controllers.character, character = character} + teleport_non_colliding_player(player, position) + Respawn.close_gui(player) + RemoteView.stop(player) + --script.raise_event(defines.events.on_player_respawned, {player_index=player.index}) -- crashes in 0.18.27 + script.raise_event(Respawn.on_player_respawned_event, {player_index = player.index}) + on_player_spawned({player_index=player.index}) +end + +function Respawn.at_zone(player, zone, position) + Respawn.at(player, Zone.get_make_surface(zone), position) +end + +function Respawn.at_landing_pad(player, landing_pad) + if not landing_pad.container and landing_pad.container.valid then + Respawn.open_gui (player) + return + end + local position = landing_pad.container.position or {0,0} + local surface = landing_pad.container.surface + Respawn.at(player, surface, position) +end + +function Respawn.at_spaceship(player, spaceship) + local position = {0,0} + local surface = game.surfaces[1] + if spaceship.console and spaceship.console.valid then + position = spaceship.console.position + surface = spaceship.console.surface + elseif spaceship.own_surface_index then + surface = Spaceship.get_own_surface(spaceship) + if spaceship.known_bounds then + position = { + x = (spaceship.known_bounds.left_top.x + spaceship.known_bounds.right_bottom.x) / 2, + y = (spaceship.known_bounds.left_top.y + spaceship.known_bounds.right_bottom.y) / 2 + } + end + end + Respawn.at(player, surface, position) +end + + +function Respawn.get_options(player) + local home_zone + if global.forces[player.force.name] and global.forces[player.force.name].homeworld_index then + home_zone = Zone.from_zone_index(global.forces[player.force.name].homeworld_index) + end + if not home_zone then home_zone = Zone.from_name("Nauvis") end + local options = { + default = home_zone, + rocket_landing_pads = {}, + spaceships = {} + } + local playerdata = get_make_playerdata(player) + local death_zone = nil + if playerdata.death_surface then + local vault = Ancient.vault_from_surface(playerdata.death_surface) + if vault then + death_zone = Zone.from_zone_index(vault.zone_index) + else + death_zone = Zone.from_surface(playerdata.death_surface) + end + end + if not death_zone then death_zone = home_zone end + if global.spaceships then + local spaceship_zones = {} + local spaceship_zone = nil + for _, spaceship in pairs(global.spaceships) do + if spaceship.force_name == player.force.name then + spaceship_zone = Zone.from_surface(Spaceship.get_current_surface(spaceship)) + if spaceship_zone then + table.insert(spaceship_zones, spaceship_zone) + end + end + end + if #spaceship_zones > 0 then + local spaceship_respawn_surface = Zone.get_surface(Zone.get_closest_zone(death_zone, spaceship_zones)) + for _, spaceship in pairs(global.spaceships) do + if spaceship.force_name == player.force.name and Spaceship.get_current_surface(spaceship) == spaceship_respawn_surface then + table.insert(options.spaceships, spaceship) + end + end + end + end + + if global.rocket_landing_pads then + local landing_pad_zones = {} + for zone_index, zone_assets in pairs(global.forces[player.force.name].zone_assets) do + if zone_assets.rocket_landing_pad_names and table_size(zone_assets.rocket_landing_pad_names) > 0 then + table.insert(landing_pad_zones, Zone.from_zone_index(zone_index)) + end + end + + if #landing_pad_zones > 0 then + local respawn_zone = Zone.get_closest_zone(death_zone, landing_pad_zones) + local landing_pad_respawn_surface = Zone.get_surface(Zone.get_closest_zone(death_zone, landing_pad_zones)) + for _, rocket_landing_pad in pairs(global.rocket_landing_pads) do + if rocket_landing_pad.force_name == player.force.name then + if rocket_landing_pad.container and rocket_landing_pad.container.valid then + if rocket_landing_pad.container.surface == landing_pad_respawn_surface then + table.insert(options.rocket_landing_pads, rocket_landing_pad) + end + else + Landingpad.destroy(rocket_landing_pad) + end + end + end + end + end + return options +end + + + +function Respawn.on_gui_click(event) + if not (event.element and event.element.valid) then return end + local element = event.element + local player = game.players[event.player_index] + root = gui_element_or_parent(element, Respawn.name_gui) + if not root then return end + + local options = Respawn.get_options(player) + if element.name == "spaceship" and #options.spaceships > 0 then + Respawn.at_spaceship(player, options.spaceships[math.random(#options.spaceships)]) + elseif element.name == "rocket-landing-pad" and #options.rocket_landing_pads > 0 then + Respawn.at_landing_pad(player, options.rocket_landing_pads[math.random(#options.rocket_landing_pads)]) + else + Respawn.at_zone(player, options.default) + end +end +Event.addListener(defines.events.on_gui_click, Respawn.on_gui_click) + +function Respawn.close_gui (player) + if player.character and player.gui.center[Respawn.name_gui] then + player.gui.center[Respawn.name_gui].destroy() + end +end + +function Respawn.open_gui (player) + local gui = player.gui.center + gui.clear() + local options = Respawn.get_options(player) + local root = gui.add{ type = "frame", name = Respawn.name_gui, direction="vertical", caption={"space-exploration.respawn-options-title"}} + flow = root.add{ type="flow", name="respawn_options", direction="vertical"} + --flow.add{ type = "sprite-button", sprite = "virtual-signal/"..mod_prefix.."planet", name = "planet"} + flow.add{ type = "button", caption = {"space-exploration.respawn-button-homeworld"}, name = "planet"} + if #options.rocket_landing_pads > 0 then + --flow.add{ type = "sprite-button", sprite = "item/"..mod_prefix.."rocket-landing-pad", name = "rocket-landing-pad"} + flow.add{ type = "button", caption = {"space-exploration.respawn-button-landing-pad"}, name = "rocket-landing-pad"} + end + if #options.spaceships > 0 then + --flow.add{ type = "sprite-button", sprite = "virtual-signal/"..mod_prefix.."spaceship", name = "spaceship"} + flow.add{ type = "button", caption = {"space-exploration.respawn-button-spaceship"}, name = "spaceship"} + end +end + +function Respawn.set_data(playerdata, character) + + if playerdata.personal_logistic_slots then + for i, slot in pairs(playerdata.personal_logistic_slots) do + if slot and slot.name and game.item_prototypes[slot.name] then + if slot.min then + if slot.max then + slot.min = math.min(slot.min, slot.max) + end + slot.min = math.max(0, slot.min) + end + if slot.max then + if slot.min then + slot.max = math.max(slot.min, slot.max) + end + slot.max = math.max(0, slot.max) + end + character.set_personal_logistic_slot(i, slot) + end + end + end + + if playerdata.character_personal_logistic_requests_enabled ~= nil then + character.character_personal_logistic_requests_enabled = playerdata.character_personal_logistic_requests_enabled + end + + if playerdata.inventory_type_filters then + for inventory_type, inventory_filters in pairs(playerdata.inventory_type_filters) do + local inventory = character.get_inventory(inventory_type) + if inventory then + for slot, string in pairs(inventory_filters) do + if string and slot <= #inventory and game.item_prototypes[string] then + inventory.set_filter(slot, string) + end + end + end + end + end + +end + +function Respawn.record_data(playerdata, character) + playerdata.inventory_type_filters = {} + playerdata.personal_logistic_slots = {} + playerdata.character_personal_logistic_requests_enabled = nil + + if not character and character.valid then return end + + local limit = 100 + local i = 1 + while i < limit do + playerdata.personal_logistic_slots[i] = character.get_personal_logistic_slot(i) + if playerdata.personal_logistic_slots[i] and playerdata.personal_logistic_slots[i].name then + limit = i + 100 + end + i = i + 1 + end + + playerdata.character_personal_logistic_requests_enabled= character.character_personal_logistic_requests_enabled + + local inventories = {defines.inventory.character_main, defines.inventory.character_guns, defines.inventory.character_ammo} + for _, inventory_type in pairs(inventories) do + local inventory = character.get_inventory(inventory_type) + if inventory then + playerdata.inventory_type_filters[inventory_type] = playerdata.inventory_type_filters[inventory_type] or {} + for i = 1, #inventory do + playerdata.inventory_type_filters[inventory_type][i] = inventory.get_filter(i) + end + end + end +end + +function Respawn.tick_task_bind_corpse (tick_task) + tick_task.valid = false + local corpse = tick_task.corpse_surface.find_entity("character-corpse", tick_task.corpse_position) + if corpse and corpse.valid then + corpse.character_corpse_player_index = tick_task.player_index + end +end + +function Respawn.mark_corpse (player, character) + player.force.add_chart_tag(character.surface, { + icon = {type = "virtual", name = mod_prefix .. "character-corpse"}, + position = character.position, + text = player.name + }) + local tick_task = new_tick_task("bind-corpse") + tick_task.corpse_position = character.position + tick_task.corpse_surface = character.surface + tick_task.player_index = player.index + +end + +function Respawn.respawn (player) + + close_own_guis(player) + player.play_sound{path = "se-game-lost", volume = 1} + + local playerdata = get_make_playerdata(player) + if player.character then + Respawn.mark_corpse(player, player.character) + Respawn.record_data(playerdata, player.character) + end + playerdata.character = nil + player.set_controller{type = defines.controllers.spectator} + + if playerdata.lock_respawn then + if playerdata.lock_respawn.surface_name and game.surfaces[playerdata.lock_respawn.surface_name] then + Respawn.at(player, game.surfaces[playerdata.lock_respawn.surface_name], playerdata.lock_respawn.position) + end + if playerdata.lock_respawn.zone_index then + local zone = Zone.from_zone_index(playerdata.lock_respawn.zone_index) + Respawn.at(player, Zone.get_make_surface(zone), playerdata.lock_respawn.position) + end + return + end + + local options = Respawn.get_options(player) + --if #options.rocket_landing_pads > 0 or #options.spaceships > 0 then + Respawn.open_gui (player) + --else + -- Respawn.at_zone(player, options.default) + --end +end + +function Respawn.die (player) + + RemoteView.stop(player) + Spaceship.stop_anchor_scouting(player) + + if player.character then + player.character.die() + else -- skip ahead + local playerdata = get_make_playerdata(player) + if playerdata.character and playerdata.character.valid then + Respawn.record_data(playerdata, character) + playerdata.character.die() + game.print({"space-exploration.player-died", player.name or ("Player " .. player.index)}) + end + Respawn.respawn(player) + end + + if player and player.connected then + player.print({"space-exploration.please-consider-patreon"}) + end +end + +function Respawn.on_pre_player_died (event) + local player = game.players[event.player_index] + if player then + RemoteView.stop(player) + Spaceship.stop_anchor_scouting(player) + local playerdata = get_make_playerdata(player) + playerdata.death_surface = player.character.surface + Respawn.respawn(player) + if player and player.connected then + player.print({"space-exploration.please-consider-patreon"}) + end + --[[ + local surface = player.character.surface + player.character.health = player.character.prototype.max_health + local main_inv = player.get_main_inventory() + local corpse = surface.create_entity{ + name = player.character.prototype.character_corpse.name, + position = player.position, + force = player.force, + player_index = player.index, + inventory_size = #main_inv + Respawn.corpse_inventory_size_buffer + } + --corpse.expires = false -- errors + corpse.character_corpse_player_index = player.index + corpse.character_corpse_tick_of_death = game.tick + for _, inv_type in pairs({ + defines.inventory.character_main, + defines.inventory.character_guns, + defines.inventory.character_ammo, + defines.inventory.character_armor, + defines.inventory.character_trash, + }) do + local inv = player.get_inventory(inv_type) + if inv then + local contents = inv.get_contents() + for item_type, item_count in pairs(contents) do + if inv_type == defines.inventory.character_armor then -- never lose this + corpse.insert({name=item_type, count=item_count}) + elseif item_count > 1 then + corpse.insert({name=item_type, count=math.ceil(item_count * Respawn.keep_percent) }) + elseif math.random() < Respawn.keep_percent then + corpse.insert({name=item_type, count=item_count}) + end + end + inv.clear() + end + end + game.print({"space-exploration.player-died", player.name or ("Player " .. player.index)}) + local nauvis = game.surfaces[1] + player.teleport(nauvis.find_non_colliding_position(player.character.name, {x=0,y=0}, Respawn.non_colliding_search_radius, 1), nauvis) + ]]-- + end +end +Event.addListener(defines.events.on_pre_player_died, Respawn.on_pre_player_died) + + +function Respawn.on_entity_died (event) + -- Called when an entity dies. + -- entity :: LuaEntity + -- cause :: LuaEntity (optional): The entity that did the killing if available. + -- loot :: LuaInventory: The loot generated by this entity if any. + -- force :: LuaForce (optional): The force that did the killing if any. + if not (event.entity and event.entity.valid) then return end + if event.entity.type == "character" then + local character = event.entity + if not character.player then + for player_index, playerdata in pairs(global.playerdata) do + if playerdata.character == character then + local player = game.players[player_index] + if player and player.connected then + -- player's character died + RemoteView.stop(player) + Spaceship.stop_anchor_scouting(player) + + Respawn.record_data(playerdata, character) + game.print({"space-exploration.player-died", player.name or ("Player " .. player.index)}) + Respawn.respawn(player) -- adds marker + end + return + end + end + end + end +end +Event.addListener(defines.events.on_entity_died, Respawn.on_entity_died) + +function Respawn.on_corpse_removed (corpse) + + for _, force in pairs(game.forces) do + local tags = force.find_chart_tags(corpse.surface, Util.position_to_area( corpse.position, 1)) + for _, tag in pairs(tags) do + if tag.icon and tag.icon.name == mod_prefix .. "character-corpse" then + -- TODO: check that corpse matches the marker. + -- will need to have the corpse know the player first. + tag.destroy() + end + end + end + +end + +function Respawn.on_character_corpse_expired (event) + -- event.corpse LuaEntity + -- Note: this is not called if the corpse is mined. See defines.events.on_pre_player_mined_item to detect that. + -- remove corpse marker + if not(event.corpse and event.corpse.valid) then return end + Respawn.on_corpse_removed (event.corpse) + +end +Event.addListener(defines.events.on_character_corpse_expired, Respawn.on_character_corpse_expired) + +function Respawn.on_pre_player_mined_item (event) + -- event.entity + -- event.player_index + -- remove corpse marker + if not(event.entity and event.entity.valid) then return end + if event.entity.name == "character-corpse" then + Respawn.on_corpse_removed (event.entity) + end +end +Event.addListener(defines.events.on_pre_player_mined_item, Respawn.on_pre_player_mined_item) + +function Respawn.on_lua_shortcut (event) + if event.player_index + and game.players[event.player_index] + and game.players[event.player_index].connected then + if event.prototype_name == Respawn.name_shortcut then + --Respawn.die(game.players[event.player_index]) + Respawn.confirm.open_gui(game.players[event.player_index]) + end + end +end +Event.addListener(defines.events.on_lua_shortcut, Respawn.on_lua_shortcut) + +function Respawn.on_respawn_keypress (event) + if event.player_index + and game.players[event.player_index] + and game.players[event.player_index].connected + then + --Respawn.die(game.players[event.player_index]) + Respawn.confirm.open_gui(game.players[event.player_index]) + end +end +Event.addListener(Respawn.name_button_event, Respawn.on_respawn_keypress) + +Respawn.confirm = {} +Respawn.confirm.name_gui = mod_prefix.."respawn-gui-confirm" +Respawn.confirm.buttons_container = 'confirm_button_container' +Respawn.confirm.button_yes = 'yes' +Respawn.confirm.button_no = 'no' + +function Respawn.confirm.open_gui(player) + local center = player.gui.center + if (center[Respawn.confirm.name_gui]) then return end + if (center[Respawn.name_gui]) then return end + local popup = center.add {type = "frame", name = Respawn.confirm.name_gui, direction = "vertical", caption = {'space-exploration.respawn-confirm-title'}} + + local buttons_container = popup.add {type = "flow", name = Respawn.confirm.buttons_container, direction = "horizontal"} + + + buttons_container.add { + type = "button", + name = Respawn.confirm.button_no, + style="back_button", + caption = {'space-exploration.respawn-confirm-no'} + } + + local yes = buttons_container.add { + type = "button", + name = Respawn.confirm.button_yes, + style="red_confirm_button", + caption = {'space-exploration.respawn-confirm-yes'} + } + yes.style.left_margin = 10 +end + +function Respawn.confirm.close_gui(player) + if player.gui.center[Respawn.confirm.name_gui] then + player.gui.center[Respawn.confirm.name_gui].destroy() + end +end + +function Respawn.confirm.on_gui_click(event) + if not (event.element and event.element.valid) then return end + local element = event.element + local player = game.players[event.player_index] + root = gui_element_or_parent(element, Respawn.confirm.name_gui) + if not root then return end + if element.name == Respawn.confirm.button_yes then + Respawn.die(game.players[event.player_index]) + end + Respawn.confirm.close_gui(game.players[event.player_index]) +end +Event.addListener(defines.events.on_gui_click, Respawn.confirm.on_gui_click) + + +return Respawn diff --git a/space-exploration_0.5.80/space-exploration/scripts/ruin.lua b/space-exploration_0.5.80/space-exploration/scripts/ruin.lua new file mode 100644 index 0000000..585fb21 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/ruin.lua @@ -0,0 +1,478 @@ +local Ruin = {} + +--[[ +Add more ruins below, eg: +Ruin.ruins["my-ruin"] = require("ruins/my-ruin.lua") +test with +/c remote.call("space-exploration", "build_ruin", {ruin_name = "my-ruin", surface_index = game.player.surface.index, position = game.player.position}) + +Ruin forces: +"enemy" = turrets are hostile to player, cannot be mined, cannot be opened +"neutral" = can be mined +"capture" = can be captured by nearby player (not implemented yet, defaults to neutral) + + +When making a ruin it is useful to use the editor, then make a blurprint, then export the string. +In order to blueprint entities they must be your force: +/c for _, e in pairs(game.player.surface.find_entities()) do e.force=game.player.force end +]]-- + +Ruin.ruins = {} + +Ruin.ruins["satellite"] = require("ruins/satellite.lua") +Ruin.ruins["galaxy-ship"] = require("ruins/galaxy-ship.lua") +Ruin.ruins["interburbulator-platform"] = require("ruins/interburbulator-platform.lua") +Ruin.ruins["arty40"] = require("ruins/arty40.lua") +Ruin.ruins["persepolis"] = require("ruins/persepolis.lua") +Ruin.track_loot_items = {"se-arcosphere", "productivity-module-9", "speed-module-9", "effectivity-module-9"} + +function Ruin.build(data) + if not (data.ruin_name and data.surface_index and data.position) then return end + + local ruin_name = data.ruin_name + local ruin = Ruin.ruins[data.ruin_name] + if not ruin then return end + + setup_util_forces() + local force = "ignore" + if ruin.force_name then + force = ruin.force_name + end + if data.force_name_override then + force = data.force_name_override + end + + local ruin_position = data.position + ruin_position.x = math.floor((ruin_position.x+1)/2)*2-1 + ruin_position.y = math.floor((ruin_position.y+1)/2)*2-1 + local ruin_position_center_offset = Util.vectors_delta(ruin.center, ruin_position) + + local surface = game.surfaces[data.surface_index] + + surface.request_to_generate_chunks(ruin_position, 2) + surface.force_generate_chunk_requests() -- must be generated to place + + if ruin.prebuild then + ruin.prebuild(surface, ruin_position, ruin) + end + + + if ruin.clear_entity_areas then + for _, clear_area in pairs(ruin.clear_entity_areas) do + local area = Util.area_add_position(clear_area, ruin_position_center_offset) + local entities = surface.find_entities(area) + for _, entity in pairs(entities) do + if entity.valid and entity.type ~= "character" then entity.destroy() end + end + end + end + if ruin.clear_decorative_areas then + for _, clear_area in pairs(ruin.clear_decorative_areas) do + local area = Util.area_add_position(clear_area, ruin_position_center_offset) + surface.destroy_decoratives{area = area} + end + end + + local under_tiles = ruin.under_tiles or {} + if ruin.default_under_tile then + under_tiles[ruin.default_under_tile] = under_tiles[ruin.default_under_tile] or {} + end + if ruin.tiles then + local tiles = {} + for tile_name, positions in pairs(ruin.tiles) do + local tile_type = game.tile_prototypes[tile_name] + local m = tile_type.mineable_properties.minable and ruin.default_under_tile + for _, position in pairs(positions) do + if m then table.insert(under_tiles[ruin.default_under_tile], position) end + table.insert(tiles, {name = tile_name, + position = { + x = ruin_position.x + position[1] - ruin.center.x, + y = ruin_position.y + position[2] - ruin.center.y}}) + end + end + surface.set_tiles(tiles, true) + end + + for tile_name, positions in pairs(under_tiles) do + for _, position in pairs(positions) do + surface.set_hidden_tile({ + x = ruin_position.x + position[1] - ruin.center.x, + y = ruin_position.y + position[2] - ruin.center.y}, tile_name) + end + end + + for _, bp in pairs(ruin.blueprint_strings or {}) do + local container = game.surfaces[1].create_entity{name = "iron-chest", position = {0,0}} + container.insert{name="blueprint", count = 1} + local inv = container.get_inventory(defines.inventory.chest) + local blueprint = inv[1] + blueprint.import_stack(bp.string) + + local entities = blueprint.build_blueprint{ + surface = surface, + force = bp.force_override or force, + position = {ruin_position.x + (bp.xadj or 0), ruin_position.y + (bp.yadj or 0)}, + force_build = true, + direction=defines.direction.north, + skip_fog_of_war=false + } + + for _, entity in pairs(entities) do + if entity.valid then + entity.revive({raise_revive = true}) + end + end + + container.destroy() + end + + for entity_name, set in pairs(ruin.entities or {}) do + for _, entity_data in pairs(set) do + if type(entity_data.x) == "number" or type(entity_data[1]) then + local entity_relative_position = { + x = 0 + (entity_data.x or entity_data[1]), + y = 0 + (entity_data.y or entity_data[2]) + } + local entity_position = { + x = ruin_position.x + entity_relative_position.x - ruin.center.x, + y = ruin_position.y + entity_relative_position.y - ruin.center.y + } + local force_name = entity_data.force_name or force + if data.force_name_override then + force_name = data.force_name_override + end + local entity = surface.create_entity{ + name = entity_name, + force = force_name, + position = entity_position, + direction = entity_data.direction, + raise_built = true + } + if entity and entity.valid then + if entity_data.graphics_variation then + entity.graphics_variation = entity_data.graphics_variation + end + if entity_data.orientation then + entity.orientation = entity_data.orientation + end + if entity_data.destructible ~= nil then + entity.destructible = entity_data.destructible + end + if entity_data.stacks then + for _, stack in pairs(entity_data.stacks) do + entity.insert{name = stack.name, count = stack.count} + end + end + end + end + end + end + + --game.print("starting specific chests") + -- put a few specific items in chests based on the insert_list table + -- list of items to put in chests + -- max, min define the range for number of items + -- odds will only have it appear 1 in odds times + -- max, min, and odds all default to 1 + for _, ins in pairs(ruin.insert_list or {}) do + local p = {x = ruin_position.x + ins.x + .5, y = ruin_position.y + ins.y + .5} + -- find_entities_filtered used because it could be any kind of chest + local chest = surface.find_entities_filtered({ + position = p, + radius = .5, + name = { + "steel-chest", + "logistic-chest-buffer", + "logistic-chest-active-provider", + "logistic-chest-buffer", + "logistic-chest-passive-provider", + "logistic-chest-requester", + "logistic-chest-storage", + mod_prefix.."cargo-rocket-cargo-pod" + }})[1] + + if chest == nil then + Log.trace(data.ruin_name..": cannot find specific chest at offset "..ins.x..", "..ins.y.." final position "..p.x..", "..p.y, "ruin") + if is_debug_mode then + rendering.draw_rectangle{ + color = {r = 1, g = 0, b = 0, a = 0.5}, + filled = false, + left_top = {x = ruin_position.x + ins.x, y = ruin_position.y + ins.y}, + right_bottom = {x = 1 + ruin_position.x + ins.x, y = 1 + ruin_position.y + ins.y}, + surface = surface, + } + end + else + --game.print(chest.name .. " found at " .. chest.position.x .. ", " .. chest.position.y) + for _, item in pairs(ins.items) do + --game.print("attempting to insert up to " .. item.count .. " of " .. item.name) + if item.odds == nil or math.random(1, item.odds) == 1 then + chest.insert({name = item.name, count = math.random(item.min or 1, item.max or 1)}) + end + end + end + end + + for wire_type, set in pairs(ruin.wires or {}) do + for _, wire_data in pairs(set) do + local from = surface.find_entity(wire_data.from.name, + { + x = ruin_position.x + (wire_data.from.position.x or wire_data.from.position[1]) - ruin.center.x, + y = ruin_position.y + (wire_data.from.position.y or wire_data.from.position[2]) - ruin.center.y + } + ) + local to = surface.find_entity(wire_data.to.name, + { + x = ruin_position.x + (wire_data.to.position.x or wire_data.to.position[1]) - ruin.center.x, + y = ruin_position.y + (wire_data.to.position.y or wire_data.to.position[2]) - ruin.center.y + } + ) + if from and to then + from.connect_neighbour({ -- https://lua-api.factorio.com/latest/LuaEntity.html#LuaEntity.connect_neighbour + wire = wire_type, + target_entity = to, + source_circuit_id = wire_data.source_circuit_id, + target_circuit_id = wire_data.target_circuit_id + }) + else + game.print("can't find wire targets") + end + end + end + + if ruin.postbuild then + ruin.postbuild(surface, ruin_position, ruin) + end + + -- make sure there are no test items left in the ruin. + for _, entity in pairs(surface.find_entities_filtered{type="infinity-pipe"}) do + entity.destroy() + end + for _, entity in pairs(surface.find_entities_filtered{type="infinity-chest"}) do + entity.destroy() + end + for _, entity in pairs(surface.find_entities_filtered{name="electric-energy-interface"}) do + entity.destroy() + end + +end + + +function Ruin.zone_assign_unique_ruins(zone) + local ruin_name + + if Zone.is_solid(zone) and (not zone.is_homeworld) and (not zone.glyph) and (not zone.interburbulator) and (not zone.ruins) and zone.tags then + global.ruins = global.ruins or {} + local star = Zone.get_star_from_child(zone) + + ruin_name = "persepolis" + if (not global.ruins[ruin_name]) and math.random() < 0.5 and zone.radius > 2000 and star.special_type ~= "homesystem" and (not Util.table_contains(zone.tags, "water_none")) + and (Util.table_contains(zone.tags, "temperature_bland") or Util.table_contains(zone.tags, "temperature_temperate") or Util.table_contains(zone.tags, "temperature_midrange") or Util.table_contains(zone.tags, "temperature_warm")) + and (Util.table_contains(zone.tags, "moisture_none") or Util.table_contains(zone.tags, "moisture_low") or Util.table_contains(zone.tags, "moisture_med")) + and (Util.table_contains(zone.tags, "aux_very_low") or Util.table_contains(zone.tags, "aux_low") or Util.table_contains(zone.tags, "aux_med")) then + local ruin_location = {name = ruin_name, position = {x=0,y=0}, zone_index = zone.index} + global.ruins[ruin_name] = ruin_location + zone.ruins = { [ruin_name] = ruin_location } + end + + ruin_name = "arty40" + if (not global.ruins[ruin_name]) and math.random() < 0.5 and zone.radius > 2000 and star.special_type ~= "homesystem" and (not Util.table_contains(zone.tags, "water_none")) + and (Util.table_contains(zone.tags, "temperature_bland") or Util.table_contains(zone.tags, "temperature_temperate") or Util.table_contains(zone.tags, "temperature_cool")) then + local ruin_location = {name = ruin_name, position = {x=0,y=0}, zone_index = zone.index} + global.ruins[ruin_name] = ruin_location + zone.ruins = { [ruin_name] = ruin_location } + end + end + +end + +function Ruin.zone_build_ruins(zone, surface) + local ruin_name + + ruin_name = "persepolis" + if zone.ruins and zone.ruins[ruin_name] then + Ruin.build( {ruin_name = ruin_name, surface_index = surface.index, position = zone.ruins[ruin_name].position } ) + end + + ruin_name = "arty40" + if zone.ruins and zone.ruins[ruin_name] then + Ruin.build( {ruin_name = ruin_name, surface_index = surface.index, position = zone.ruins[ruin_name].position } ) + end + +end + +function Ruin.log_tiles(data) + -- log tiles in a format that can be put bakc into ruins + local surface = data.surface + local registration_point = Util.position_to_tile(data.registration_point) + local area = {left_top = Util.position_to_tile(data.left_top), right_bottom = Util.position_to_tile(data.right_bottom)} + local capture_name = data.capture_name or "temp" + local file_name = "space-exploration.ruin_log_tiles."..capture_name..".lua" + local tiles = {} + local under_tiles = {} + for x = area.left_top.x, area.right_bottom.x-1 do + for y = area.left_top.y, area.right_bottom.y-1 do + local tile = surface.get_tile(x,y) + if not tiles[tile.name] then + tiles[tile.name] = {} + end + table.insert(tiles[tile.name], {x-registration_point.x,y-registration_point.y}) + local hidden_name = surface.get_hidden_tile({x,y}) + if hidden_name then + if not under_tiles[hidden_name] then + under_tiles[hidden_name] = {} + end + table.insert(under_tiles[hidden_name], {x-registration_point.x,y-registration_point.y}) + end + end + end + local string = "local "..capture_name.." = {\n name = \""..capture_name.."\",\n tiles = {" + for tilename, positions in pairs(tiles) do + string = string.."\n [\""..tilename.."\"] = {" + for _, position in pairs(positions) do + string = string.."{"..position[1]..","..position[2].."}, " + end + string = string.."}," + end + string = string .. "\n },\n under_tiles = {" + for tilename, positions in pairs(under_tiles) do + string = string.."\n [\""..tilename.."\"] = {" + for _, position in pairs(positions) do + string = string.."{"..position[1]..","..position[2].."}, " + end + string = string.."}," + end + string = string .. "\n }\n}" + game.write_file(file_name, string, false) + rendering.draw_rectangle{ + surface = surface, + left_top = area.left_top, + right_bottom = area.right_bottom, + color = {r=0,b=1,g=0,a=0.5}, + width = 5, + time_to_live = 60*5 + } + rendering.draw_rectangle{ + surface = surface, + left_top = area.left_top, + right_bottom = area.right_bottom, + color = {r=0,b=0.5,g=0,a=0.25}, + width = 5, + filled = true, + time_to_live = 60*5 + } + game.print("Tiles of area X:"..area.left_top.x.." to "..area.right_bottom.x.." Y: "..area.left_top.y.."to "..area.right_bottom.y.." captured to: "..file_name) +end + +function Ruin.log_entities(data) + -- log tiles in a format that can be put bakc into ruins + local surface = data.surface + local registration_point = Util.position_to_tile(data.registration_point) + local area = {left_top = Util.position_to_tile(data.left_top), right_bottom = Util.position_to_tile(data.right_bottom)} + local capture_name = data.capture_name or "temp" + local file_name = "space-exploration.ruin_log_entities."..capture_name..".lua" + local entities = surface.find_entities(area) + local entities_data = {} + for _, entity in pairs(entities) do + entities_data[entity.name] = entities_data[entity.name] or {} + local entity_data = { x = entity.position.x-registration_point.x, y = entity.position.y-registration_point.y} + if entity.type == "tree" or entity.type == "simple-entity" then + entity_data.graphics_variation = entity.graphics_variation + end + table.insert(entities_data[entity.name], entity_data) + end + local string = "local "..capture_name.." = {\n name = \""..capture_name.."\",\n entities = {" + for entity_name, entity_list in pairs(entities_data) do + string = string.."\n [\""..entity_name.."\"] = {" + for _, entity_data in pairs(entity_list) do + string = string.."{" + local first = true + for k, v in pairs(entity_data) do + if first then first = false else string = string .. ", " end + string = string..k.."="..v + end + string = string.."}, " + end + string = string.."}," + end + string = string .. "\n }\n}" + game.write_file(file_name, string, false) + rendering.draw_rectangle{ + surface = surface, + left_top = area.left_top, + right_bottom = area.right_bottom, + color = {r=1,b=0,g=1,a=0.5}, + width = 5, + time_to_live = 60*5 + } + rendering.draw_rectangle{ + surface = surface, + left_top = area.left_top, + right_bottom = area.right_bottom, + color = {r=0.5,b=0,g=0.5,a=0.25}, + width = 5, + filled = true, + time_to_live = 60*5 + } + game.print("Entities of area X:"..area.left_top.x.." to "..area.right_bottom.x.." Y: "..area.left_top.y.."to "..area.right_bottom.y.." captured to: "..file_name) +end + +-- Ruin.replace_in_blueprint({name="filename", blueprint="...", entities={["in_name"]="out-name"}, tiles={["in_name"]="out-name"}}) +function Ruin.replace_in_blueprint(data) + local file_name = "space-exploration.replace_in_blueprint."..data.name..".lua" + local blueprint_string = data.blueprint + + local container = game.surfaces[1].create_entity{name = "iron-chest", position = {0,0}} + container.insert{name="blueprint", count = 1} + local inv = container.get_inventory(defines.inventory.chest) + local blueprint = inv[1] + blueprint.import_stack(blueprint_string) + + local entities = blueprint.get_blueprint_entities() + for _, entity in pairs(entities or {}) do + for _, change in pairs(data.entities or {}) do + if entity.name == change.name then + if change.new_name then + entity.name = change.new_name + end + if change.shift then + entity.position.x = entity.position.x + change.shift[1] or change.shift.x + entity.position.y = entity.position.y + change.shift[2] or change.shift.y + end + end + end + end + blueprint.set_blueprint_entities(entities) + + local tiles = blueprint.get_blueprint_tiles() + for _, tile in pairs(tiles or {}) do + for k, v in pairs(data.tiles or {}) do + if tile.name == k then tile.name = v end + end + end + blueprint.set_blueprint_tiles(tiles) + + local out_string = blueprint.export_stack() + + container.destroy() + + game.write_file(file_name, out_string, false) +end + + +function Ruin.on_nth_tick_3600() + if not global.ruins then return end + for ruin_name, ruin_location in pairs(global.ruins) do + local ruin = Ruin.ruins[ruin_location.name] + if ruin and ruin.on_nth_tick_3600 then + local zone = Zone.from_zone_index(ruin_location.zone_index) + local surface = Zone.get_surface(zone) + if surface then + ruin.on_nth_tick_3600(ruin, ruin_location, surface) + end + end + end +end +Event.addListener("on_nth_tick_3600", Ruin.on_nth_tick_3600) -- 1 minute + +return Ruin diff --git a/space-exploration_0.5.80/space-exploration/scripts/ruins/arty40.lua b/space-exploration_0.5.80/space-exploration/scripts/ruins/arty40.lua new file mode 100644 index 0000000..7d39b7c --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/ruins/arty40.lua @@ -0,0 +1,130 @@ +local arty40 = { + name = "arty40", + center = {x = 0, y = 0}, + force_name = "conquest", + entities = { -- not blueprintable + ["car"] = { + {x = 6, y = 5, orientation = 0.225} + }, + ["tank"] = { + {x = 19, y = 0, orientation = 0.75}, + {x = 19, y = 2, orientation = 0.75}, + }, + }, + clear_entity_areas = { + {{-29,-22},{32,22}}, + }, + clear_decorative_areas = { + {{-29,-22},{32,22}}, + }, + prebuild = function(surface, ruin_position, ruin) + if not game.forces["conquest"].technologies["energy-weapons-damage-5"].researched then + game.forces["conquest"].research_all_technologies() + end + end, + postbuild = function(surface, ruin_position, ruin) + local ruin_position_center_offset = Util.vectors_delta(ruin.center, ruin_position) + local area = Util.area_add_position({{-29,-22},{32,22}}, ruin_position_center_offset) + local entities = surface.find_entities_filtered{name="logistic-chest-storage", area = area} + local arcospheres_to_add = 8 + local zone = Zone.from_surface(surface) + if zone and zone.looted_items and zone.looted_items["se-arcosphere"] then + arcospheres_to_add = arcospheres_to_add - zone.looted_items["se-arcosphere"] + end + if arcospheres_to_add > 0 then + for i = 1, arcospheres_to_add do + entities[math.random(1, #entities)].insert({name="se-arcosphere", count=1}) + end + end + local entities = surface.find_entities(area) + for _, entity in pairs(entities) do + if entity.name == "logistic-chest-storage" then + local r = math.random(1,10) + if r == 1 then + entity.insert({name="coal", count=10000}) + elseif r == 2 then + entity.insert({name="iron-ore", count=10000}) + elseif r == 3 then + entity.insert({name="copper-ore", count=10000}) + elseif r == 4 then + entity.insert({name="stone", count=10000}) + elseif r == 5 then + entity.insert({name="wood", count=10000}) + elseif r == 6 then + entity.insert({name="processed-fuel", count=10000}) + elseif r == 7 then + entity.insert({name="iron-plate", count=10000}) + elseif r == 8 then + entity.insert({name="copper-plate", count=10000}) + elseif r == 9 then + entity.insert({name="stone-brick", count=10000}) + elseif r == 10 then + entity.insert({name="plastic-bar", count=10000}) + end + end + if entity.type == "accumulator" then + entity.energy = 1000000000 + end + if entity.name == "roboport" then + entity.backer_name = "ARTY40" + entity.insert({name="repair-pack", count=100}) + entity.insert({name="logistic-robot", count=100}) + entity.insert({name="construction-robot", count=100}) + end + if entity.type == "burner-generator" then + entity.insert({name="processed-fuel", count=10000}) + end + if entity.name == "artillery-turret" then + entity.insert({name="artillery-shell", count=10}) + end + if entity.type == "car" then + entity.insert({name="processed-fuel", count=50}) + end + end + local petrol_tank = surface.find_entity("storage-tank", Util.vectors_add(ruin_position_center_offset, {x = 11, y = 1})) + petrol_tank.fluidbox[1] = {name = "petroleum-gas", amount = 15000} + end, + on_nth_tick_3600 = function(ruin, ruin_location, surface) + local ruin_position_center_offset = Util.vectors_delta(ruin.center, ruin_location.position) + local petrol_tank = surface.find_entity("storage-tank", Util.vectors_add(ruin_position_center_offset, {x = 11, y = 1})) + if petrol_tank and petrol_tank.valid and petrol_tank.force.name == "conquest" then petrol_tank.fluidbox[1] = {name = "petroleum-gas", amount = 5000} end + local buffers = surface.find_entities_filtered{name="logistic-chest-buffer", force="conquest"} + for _, buffer in pairs(buffers) do + local request = buffer.get_request_slot(1) + local inv = buffer.get_inventory(defines.inventory.chest) + if inv.is_empty() then + buffer.insert(request) + end + end + local burners = surface.find_entities_filtered{name="burner-turbine-generator", force="conquest"} + for _, burner in pairs(burners) do burner.insert({name = "processed-fuel", count = 500}) end + local accumulators = surface.find_entities_filtered{type="accumulator", force="conquest"} + for _, accumulator in pairs(accumulators) do accumulator.energy = 1000000000 end + end, + tiles = { + ["water-shallow"] = {{-42,3}, {-42,4}, {-42,5}, {-42,6}, {-41,3}, {-41,4}, {-41,5}, {-41,6}, {-41,7}, {-40,4}, {-40,5}, {-40,6}, {-40,8}, {-40,9}, {-39,1}, {-39,2}, {-39,3}, {-39,4}, {-39,5}, {-39,6}, {-39,7}, {-39,8}, {-39,9}, {-39,10}, {-38,-3}, {-38,-2}, {-38,-1}, {-38,0}, {-38,1}, {-38,7}, {-38,8}, {-38,9}, {-38,10}, {-37,-3}, {-37,-2}, {-37,-1}, {-37,0}, {-37,1}, {-37,8}, {-37,9}, {-37,10}, {-37,11}, {-37,12}, {-37,13}, {-36,-5}, {-36,-4}, {-36,-3}, {-36,-2}, {-36,12}, {-36,13}, {-36,14}, {-35,-5}, {-35,-4}, {-35,-3}, {-35,12}, {-35,13}, {-35,14}, {-35,15}, {-34,-6}, {-34,-5}, {-34,-4}, {-34,13}, {-34,14}, {-34,15}, {-34,16}, {-33,-7}, {-33,-6}, {-33,-5}, {-33,-4}, {-33,15}, {-33,16}, {-32,-7}, {-32,-6}, {-32,-5}, {-32,16}, {-32,18}, {-31,-7}, {-31,-6}, {-31,17}, {-31,18}, {-31,19}, {-30,-9}, {-30,-8}, {-30,-7}, {-30,-6}, {-30,17}, {-30,18}, {-30,19}, {-29,18}, {-29,19}, {-29,20}, {-28,-10}, {-28,18}, {-28,19}, {-28,20}, {-27,-11}, {-27,-10}, {-27,19}, {-27,20}, {-26,-11}, {-26,20}, {-26,22}, {-25,-13}, {-25,-12}, {-25,19}, {-25,20}, {-25,22}, {-24,-14}, {-24,-13}, {-24,20}, {-24,21}, {-24,22}, {-23,-16}, {-23,-15}, {-23,-14}, {-23,21}, {-23,22}, {-22,-17}, {-22,-16}, {-22,-15}, {-22,22}, {-22,23}, {-22,24}, {-21,-18}, {-21,-17}, {-21,22}, {-21,23}, {-21,24}, {-20,-19}, {-20,-18}, {-20,22}, {-20,23}, {-19,-21}, {-19,-20}, {-19,-19}, {-19,21}, {-19,22}, {-19,23}, {-18,-21}, {-18,-20}, {-18,21}, {-18,22}, {-17,-22}, {-17,-21}, {-17,-20}, {-17,-19}, {-17,21}, {-16,-23}, {-16,-21}, {-16,-20}, {-15,-23}, {-15,-22}, {-15,-21}, {-15,21}, {-14,-23}, {-14,-22}, {-14,-21}, {-14,21}, {-13,-22}, {-13,-21}, {-13,21}, {-12,-24}, {-12,-23}, {-12,-22}, {-12,21}, {-11,-23}, {-11,-22}, {-11,-21}, {-10,-23}, {-10,-22}, {-9,-23}, {-9,-22}, {-8,-23}, {-8,-22}, {-8,24}, {-7,-24}, {-7,-23}, {-7,-22}, {-7,23}, {-7,24}, {-7,25}, {-6,-22}, {-6,-21}, {-6,23}, {-6,24}, {-6,25}, {-5,-21}, {-5,25}, {-5,26}, {-5,27}, {-4,-22}, {-4,-21}, {-4,26}, {-4,27}, {-3,-21}, {-3,-20}, {-3,26}, {-3,27}, {-3,28}, {-2,-20}, {-2,27}, {-2,28}, {-1,-20}, {-1,-19}, {-1,28}, {-1,29}, {0,-18}, {0,-17}, {0,-16}, {0,28}, {0,29}, {1,-18}, {1,-17}, {1,-16}, {1,-15}, {1,28}, {2,-16}, {2,-15}, {2,-14}, {2,-13}, {3,-14}, {3,-13}, {3,-12}, {3,28}, {4,-14}, {4,-13}, {4,-12}, {4,-11}, {4,28}, {5,-12}, {5,-11}, {5,25}, {5,26}, {5,27}, {6,-14}, {6,-12}, {6,-11}, {6,25}, {6,26}, {7,-23}, {7,-22}, {7,-21}, {7,-12}, {7,-11}, {7,-10}, {7,25}, {7,26}, {7,27}, {8,-23}, {8,-22}, {8,-21}, {8,-11}, {8,-10}, {8,-9}, {8,25}, {8,26}, {8,27}, {9,-25}, {9,-24}, {9,-21}, {9,-19}, {9,-18}, {9,-11}, {9,-10}, {9,-9}, {9,26}, {9,27}, {10,-26}, {10,-25}, {10,-24}, {10,-18}, {10,-17}, {10,-8}, {10,27}, {11,-27}, {11,-26}, {11,-25}, {11,-22}, {11,-21}, {11,-20}, {11,-17}, {11,-8}, {11,-7}, {11,28}, {12,-28}, {12,-27}, {12,-26}, {12,-20}, {12,-19}, {12,-16}, {12,28}, {13,-28}, {13,-27}, {13,-16}, {13,28}, {13,29}, {14,-29}, {14,-28}, {14,-27}, {14,-15}, {14,29}, {14,30}, {15,-30}, {15,-29}, {15,-15}, {15,29}, {15,30}, {16,-31}, {16,-30}, {16,28}, {16,30}, {17,-31}, {17,-30}, {17,27}, {17,28}, {17,29}, {17,30}, {18,-30}, {18,27}, {18,28}, {18,29}, {19,-30}, {19,26}, {19,27}, {19,28}, {19,29}, {20,-30}, {20,27}, {20,28}, {21,-30}, {21,-29}, {21,26}, {21,27}, {21,28}, {22,-30}, {22,-29}, {22,27}, {23,27}, {24,-28}, {24,25}, {24,26}, {25,-28}, {25,24}, {25,25}, {26,-29}, {26,-28}, {26,-27}, {27,-29}, {27,-28}, {27,-27}, {28,-27}, {28,-26}, {29,-26}, {29,-25}, {30,-26}, {31,-26}, {31,-25}, {31,-24}, {31,-23}, {31,20}, {31,21}, {31,22}, {31,23}, {32,-25}, {32,-24}, {32,-23}, {32,-22}, {32,19}, {32,20}, {32,21}, {32,22}, {33,-24}, {33,-23}, {33,-22}, {33,-21}, {33,16}, {33,17}, {33,18}, {33,19}, {33,20}, {33,21}, {33,22}, {34,-23}, {34,-22}, {34,-20}, {34,-19}, {34,14}, {34,15}, {34,16}, {34,17}, {34,18}, {34,19}, {34,20}, {34,21}, {35,-22}, {35,-20}, {35,13}, {35,14}, {35,15}, {35,16}, {35,17}, {35,18}, {35,19}, {36,-20}, {36,-19}, {36,7}, {36,8}, {36,10}, {36,11}, {36,12}, {36,13}, {36,14}, {36,15}, {36,16}, {36,18}, {37,-20}, {37,-19}, {37,-18}, {37,-17}, {37,6}, {37,7}, {37,8}, {37,9}, {37,10}, {37,11}, {37,12}, {37,13}, {37,14}, {38,-19}, {38,-16}, {38,-15}, {38,-14}, {38,-13}, {38,-12}, {38,-11}, {38,-10}, {38,-9}, {38,5}, {38,6}, {38,7}, {38,8}, {38,9}, {38,10}, {38,11}, {38,12}, {38,13}, {39,-18}, {39,-17}, {39,-12}, {39,-11}, {39,-10}, {39,-9}, {39,4}, {39,5}, {39,6}, {39,7}, {39,8}, {39,9}, {39,10}, {39,11}, {40,-17}, {40,-16}, {40,-15}, {40,-14}, {40,-13}, {40,-12}, {40,-11}, {40,-10}, {40,-9}, {40,-4}, {40,-3}, {40,-2}, {40,-1}, {40,0}, {40,4}, {40,5}, {40,6}, {40,7}, {40,8}, {40,9}, {41,-13}, {41,-12}, {41,-11}, {41,-10}, {41,-8}, {41,-7}, {41,-6}, {41,-5}, {41,-4}, {41,-2}, {41,-1}, {41,0}, {41,1}, {41,2}, {41,3}, {41,4}, {41,5}, {41,6}, {42,-6}, {42,-5}, {42,-4}, {42,-3}, {42,-2}, {42,-1}, {42,0}, {42,1}, {42,2}, {42,3}, {42,4}, {42,5}, {43,-4}, {43,-3}, {43,-2}, {43,-1}, {43,0}, {43,1}, {43,2}, {43,4}, }, + ["mineral-beige-dirt-4"] = {{-42,11}, {-42,12}, {-41,2}, {-41,9}, {-41,10}, {-41,11}, {-41,12}, {-41,13}, {-41,14}, {-40,0}, {-40,1}, {-40,2}, {-40,3}, {-40,10}, {-40,11}, {-40,12}, {-40,13}, {-40,14}, {-39,-2}, {-39,-1}, {-39,0}, {-39,11}, {-39,12}, {-39,13}, {-37,-5}, {-37,-4}, {-35,16}, {-35,17}, {-35,18}, {-34,17}, {-34,18}, {-34,19}, {-33,17}, {-33,18}, {-33,19}, {-33,20}, {-32,17}, {-32,19}, {-32,20}, {-32,21}, {-31,20}, {-30,20}, {-19,24}, {-18,23}, {-18,24}, {-17,22}, {-17,23}, {-9,26}, {-8,26}, {-7,26}, {-6,-24}, {-6,-23}, {-6,26}, {-6,27}, {-6,28}, {-5,-23}, {-5,28}, {-5,29}, {-5,30}, {-4,-26}, {-4,-23}, {-4,28}, {-4,29}, {-4,30}, {-3,-26}, {-3,-25}, {-3,-22}, {-3,29}, {-2,-28}, {-2,-27}, {-2,-26}, {-1,-27}, {-1,-26}, {0,-27}, {0,-26}, {0,-25}, {0,-20}, {1,-28}, {1,-27}, {1,-25}, {1,-19}, {2,-27}, {2,-23}, {2,-22}, {2,-18}, {2,-17}, {3,-27}, {3,-24}, {3,-17}, {3,-16}, {3,-15}, {4,-16}, {4,-15}, {5,-15}, {5,-14}, {5,-13}, {6,-28}, {6,-27}, {6,-26}, {6,-25}, {6,-24}, {6,-23}, {6,-22}, {6,-21}, {6,-20}, {6,-19}, {6,-13}, {7,-26}, {7,-25}, {7,-24}, {7,-19}, {7,-18}, {7,-13}, {8,-26}, {8,-25}, {8,-19}, {8,-18}, {8,-17}, {8,-12}, {9,-26}, {9,-17}, {9,-12}, {10,-16}, {10,-11}, {10,-10}, {11,-31}, {11,-30}, {11,-16}, {11,-10}, {11,-9}, {12,-31}, {12,-30}, {12,-29}, {12,-15}, {12,-10}, {12,-9}, {12,-8}, {12,-7}, {12,-6}, {13,-31}, {13,-30}, {13,-29}, {13,-15}, {13,-14}, {13,-6}, {14,-32}, {14,-31}, {14,-30}, {14,-14}, {14,-13}, {15,-31}, {15,-13}, {15,-12}, {15,31}, {15,32}, {16,-13}, {16,-12}, {16,-11}, {16,-10}, {16,-9}, {16,-8}, {16,31}, {16,32}, {17,-10}, {17,-9}, {17,-8}, {17,-7}, {17,-6}, {17,31}, {17,32}, {18,-8}, {18,-7}, {18,31}, {18,32}, {19,31}, {20,29}, {20,30}, {20,31}, {21,29}, {21,30}, {21,31}, {27,-30}, {28,-30}, {28,-29}, {28,-28}, {29,-30}, {29,-29}, {29,-28}, {29,-27}, {30,-29}, {30,-28}, {30,-27}, {35,-24}, {35,-23}, {36,-23}, {36,-22}, {36,-21}, {36,17}, {36,19}, {36,20}, {37,-21}, {37,15}, {37,16}, {37,17}, {37,18}, {37,19}, {38,14}, {38,15}, {38,16}, {38,17}, {38,18}, {39,12}, {39,13}, {39,14}, {39,15}, {39,16}, {40,10}, {40,13}, {40,14}, {41,-9}, {41,7}, {41,8}, {41,9}, {41,10}, {41,11}, {41,12}, {42,-9}, {42,-8}, {42,-7}, {42,6}, {42,7}, {42,8}, {43,-8}, {43,-7}, {43,-6}, {43,-5}, {44,-8}, {44,-7}, {44,-6}, {44,-5}, {44,-4}, {44,-3}, {44,-2}, {44,-1}, {45,-5}, {45,-4}, {45,-3}, }, + ["water"] = {{-38,2}, {-38,3}, {-38,4}, {-38,5}, {-38,6}, {-37,2}, {-37,3}, {-37,4}, {-37,5}, {-37,6}, {-37,7}, {-36,-1}, {-36,0}, {-36,1}, {-36,2}, {-36,3}, {-36,4}, {-36,5}, {-36,6}, {-36,7}, {-36,8}, {-36,9}, {-36,10}, {-36,11}, {-35,-2}, {-35,-1}, {-35,0}, {-35,3}, {-35,4}, {-35,5}, {-35,6}, {-35,11}, {-34,-3}, {-34,-2}, {-34,-1}, {-33,-3}, {-33,-2}, {-33,13}, {-33,14}, {-32,-4}, {-32,-3}, {-32,-2}, {-32,-1}, {-32,14}, {-31,-5}, {-31,-4}, {-31,-3}, {-31,-2}, {-30,-5}, {-30,-4}, {-30,16}, {-29,-7}, {-29,-6}, {-29,-5}, {-29,-4}, {-29,15}, {-29,16}, {-29,17}, {-28,-9}, {-28,-8}, {-28,-7}, {-28,-6}, {-28,-5}, {-28,16}, {-28,17}, {-27,-9}, {-27,-8}, {-27,-7}, {-27,17}, {-27,18}, {-26,-10}, {-26,-9}, {-26,-8}, {-26,-7}, {-26,17}, {-26,18}, {-26,19}, {-25,-10}, {-25,-9}, {-25,-8}, {-25,17}, {-25,18}, {-24,-11}, {-24,-10}, {-24,-9}, {-24,17}, {-24,18}, {-24,19}, {-23,-13}, {-23,-12}, {-23,-11}, {-23,-10}, {-23,17}, {-23,18}, {-23,19}, {-23,20}, {-22,-14}, {-22,-13}, {-22,-12}, {-22,-11}, {-22,-10}, {-22,-9}, {-22,18}, {-22,19}, {-22,20}, {-22,21}, {-21,-16}, {-21,-15}, {-21,-14}, {-21,-13}, {-21,-12}, {-21,-11}, {-21,-10}, {-21,-9}, {-21,19}, {-21,20}, {-21,21}, {-20,-17}, {-20,-16}, {-20,-15}, {-20,-14}, {-20,-11}, {-20,-10}, {-20,-9}, {-20,18}, {-20,19}, {-20,20}, {-20,21}, {-19,-18}, {-19,-17}, {-19,-16}, {-19,-10}, {-19,19}, {-19,20}, {-18,-19}, {-18,-18}, {-18,-17}, {-18,20}, {-17,-18}, {-17,-17}, {-17,19}, {-17,20}, {-16,-22}, {-16,-19}, {-16,-18}, {-16,18}, {-16,19}, {-16,20}, {-15,-20}, {-15,-19}, {-15,18}, {-15,19}, {-15,20}, {-14,-20}, {-14,18}, {-14,19}, {-14,20}, {-13,18}, {-13,19}, {-13,20}, {-12,-21}, {-12,-20}, {-12,18}, {-12,19}, {-12,20}, {-11,-20}, {-11,19}, {-11,20}, {-11,21}, {-11,22}, {-10,-21}, {-10,-20}, {-10,19}, {-10,20}, {-10,21}, {-10,22}, {-10,23}, {-9,-21}, {-9,-20}, {-9,20}, {-9,21}, {-9,22}, {-9,23}, {-8,-21}, {-8,-20}, {-8,-19}, {-8,21}, {-8,22}, {-8,23}, {-7,-21}, {-7,-20}, {-7,-19}, {-7,21}, {-7,22}, {-6,-20}, {-6,-19}, {-6,21}, {-6,22}, {-5,-22}, {-5,-20}, {-5,-19}, {-5,-18}, {-5,22}, {-5,23}, {-5,24}, {-4,-20}, {-4,-19}, {-4,-18}, {-4,21}, {-4,22}, {-4,23}, {-4,24}, {-4,25}, {-3,-19}, {-3,-18}, {-3,-17}, {-3,20}, {-3,21}, {-3,22}, {-3,23}, {-3,24}, {-3,25}, {-2,-19}, {-2,-18}, {-2,-17}, {-2,-16}, {-2,-15}, {-2,21}, {-2,22}, {-2,23}, {-2,24}, {-2,25}, {-2,26}, {-1,-18}, {-1,-17}, {-1,-16}, {-1,-15}, {-1,-14}, {-1,22}, {-1,23}, {-1,24}, {-1,25}, {-1,26}, {-1,27}, {0,-15}, {0,-14}, {0,-13}, {0,22}, {0,23}, {0,24}, {0,25}, {0,26}, {0,27}, {1,-14}, {1,-13}, {1,23}, {1,24}, {1,25}, {1,26}, {1,27}, {1,29}, {1,30}, {2,-12}, {2,23}, {2,24}, {2,25}, {2,26}, {2,27}, {2,28}, {2,29}, {3,-11}, {3,22}, {3,23}, {3,24}, {3,25}, {3,26}, {3,27}, {4,21}, {4,22}, {4,23}, {4,24}, {4,25}, {4,26}, {5,-10}, {5,22}, {5,23}, {5,24}, {6,-10}, {6,23}, {6,24}, {7,-20}, {7,23}, {7,24}, {8,-20}, {8,24}, {9,-23}, {9,-22}, {9,-20}, {9,24}, {9,25}, {10,-23}, {10,-22}, {10,-21}, {10,-20}, {10,-19}, {10,25}, {10,26}, {11,-24}, {11,-23}, {11,-19}, {11,-18}, {11,26}, {11,27}, {12,-25}, {12,-24}, {12,-23}, {12,-22}, {12,-21}, {12,-18}, {12,-17}, {12,26}, {12,27}, {12,29}, {13,-26}, {13,-25}, {13,-24}, {13,-23}, {13,-22}, {13,-21}, {13,27}, {14,-26}, {14,-25}, {14,-24}, {14,-23}, {14,-22}, {14,27}, {14,28}, {15,-28}, {15,-27}, {15,-26}, {15,-25}, {15,-24}, {15,-23}, {15,27}, {15,28}, {16,-29}, {16,-28}, {16,-27}, {16,-26}, {16,-25}, {16,-24}, {16,-23}, {16,-22}, {16,26}, {16,27}, {16,29}, {17,-29}, {17,-28}, {17,-27}, {17,-26}, {17,-25}, {17,-24}, {17,-23}, {17,26}, {18,-29}, {18,-28}, {18,-27}, {18,-26}, {18,-25}, {18,-24}, {18,25}, {18,26}, {18,30}, {19,-29}, {19,-28}, {19,-27}, {19,-26}, {19,-25}, {19,-24}, {19,25}, {19,30}, {20,-29}, {20,-28}, {20,-27}, {20,-26}, {20,-25}, {20,-24}, {20,25}, {20,26}, {21,-28}, {21,-27}, {21,-26}, {21,-25}, {21,-24}, {21,22}, {21,23}, {21,24}, {21,25}, {22,-28}, {22,-27}, {22,-26}, {22,-25}, {22,-24}, {22,17}, {22,18}, {22,19}, {22,20}, {22,21}, {22,22}, {22,23}, {22,24}, {22,25}, {22,26}, {23,-29}, {23,-28}, {23,-27}, {23,-26}, {23,-25}, {23,-24}, {23,15}, {23,16}, {23,17}, {23,18}, {23,19}, {23,20}, {23,21}, {23,22}, {23,23}, {23,24}, {23,25}, {23,26}, {24,-29}, {24,-27}, {24,-26}, {24,-25}, {24,-24}, {24,14}, {24,15}, {24,16}, {24,17}, {24,18}, {24,19}, {24,20}, {24,21}, {24,22}, {24,23}, {24,24}, {25,-27}, {25,-26}, {25,-25}, {25,12}, {25,13}, {25,14}, {25,15}, {25,16}, {25,17}, {25,18}, {25,19}, {25,20}, {25,21}, {25,22}, {25,23}, {26,-26}, {26,-25}, {26,-24}, {26,11}, {26,12}, {26,13}, {26,14}, {26,15}, {26,16}, {26,17}, {26,18}, {26,19}, {26,20}, {26,21}, {26,22}, {26,23}, {26,24}, {27,-26}, {27,-25}, {27,-24}, {27,11}, {27,12}, {27,13}, {27,14}, {27,15}, {27,16}, {27,17}, {27,18}, {27,19}, {27,20}, {27,21}, {27,22}, {27,23}, {27,24}, {27,25}, {28,-25}, {28,-24}, {28,-23}, {28,11}, {28,12}, {28,13}, {28,14}, {28,15}, {28,16}, {28,17}, {28,18}, {28,19}, {28,20}, {28,21}, {28,22}, {28,23}, {28,24}, {29,-24}, {29,-23}, {29,-22}, {29,11}, {29,12}, {29,13}, {29,14}, {29,15}, {29,16}, {29,17}, {29,18}, {29,19}, {29,20}, {29,21}, {29,22}, {29,23}, {30,-25}, {30,-24}, {30,-23}, {30,-22}, {30,-21}, {30,12}, {30,13}, {30,14}, {30,15}, {30,16}, {30,17}, {30,18}, {30,19}, {30,20}, {30,21}, {30,22}, {31,-22}, {31,-21}, {31,-20}, {31,-19}, {31,-18}, {31,-15}, {31,-14}, {31,-13}, {31,9}, {31,10}, {31,11}, {31,12}, {31,13}, {31,14}, {31,15}, {31,16}, {31,17}, {31,18}, {31,19}, {32,-21}, {32,-20}, {32,-19}, {32,-18}, {32,-17}, {32,-16}, {32,-15}, {32,-14}, {32,-13}, {32,-12}, {32,-11}, {32,-8}, {32,-7}, {32,-6}, {32,-5}, {32,-4}, {32,-3}, {32,7}, {32,8}, {32,9}, {32,10}, {32,11}, {32,12}, {32,13}, {32,14}, {32,15}, {32,16}, {32,17}, {32,18}, {33,-20}, {33,-19}, {33,-18}, {33,-17}, {33,-16}, {33,-15}, {33,-14}, {33,-13}, {33,-12}, {33,-11}, {33,-10}, {33,-9}, {33,-8}, {33,-7}, {33,-6}, {33,-5}, {33,-4}, {33,-3}, {33,-2}, {33,-1}, {33,0}, {33,1}, {33,2}, {33,3}, {33,4}, {33,5}, {33,6}, {33,7}, {33,8}, {33,9}, {33,10}, {33,11}, {33,12}, {33,13}, {33,14}, {33,15}, {34,-21}, {34,-18}, {34,-17}, {34,-16}, {34,-15}, {34,-14}, {34,-13}, {34,-12}, {34,-11}, {34,-10}, {34,-9}, {34,-8}, {34,-7}, {34,-6}, {34,-5}, {34,-4}, {34,-3}, {34,-2}, {34,-1}, {34,0}, {34,1}, {34,2}, {34,3}, {34,4}, {34,5}, {34,6}, {34,7}, {34,8}, {34,9}, {34,10}, {34,11}, {34,12}, {34,13}, {35,-21}, {35,-19}, {35,-18}, {35,-17}, {35,-16}, {35,-15}, {35,-14}, {35,-13}, {35,-12}, {35,-11}, {35,-10}, {35,-9}, {35,-8}, {35,-7}, {35,-6}, {35,-5}, {35,-4}, {35,-3}, {35,-2}, {35,-1}, {35,0}, {35,1}, {35,2}, {35,3}, {35,4}, {35,5}, {35,6}, {35,7}, {35,8}, {35,9}, {35,10}, {35,11}, {35,12}, {36,-18}, {36,-17}, {36,-16}, {36,-15}, {36,-14}, {36,-13}, {36,-12}, {36,-11}, {36,-10}, {36,-9}, {36,-8}, {36,-7}, {36,-6}, {36,-5}, {36,-4}, {36,-3}, {36,-2}, {36,-1}, {36,0}, {36,1}, {36,2}, {36,3}, {36,4}, {36,5}, {36,6}, {36,9}, {37,-16}, {37,-15}, {37,-14}, {37,-13}, {37,-12}, {37,-11}, {37,-10}, {37,-9}, {37,-8}, {37,-7}, {37,-6}, {37,-5}, {37,-4}, {37,-3}, {37,-2}, {37,-1}, {37,0}, {37,1}, {37,2}, {37,3}, {37,4}, {37,5}, {38,-18}, {38,-17}, {38,-8}, {38,-7}, {38,-6}, {38,-5}, {38,-4}, {38,-3}, {38,-2}, {38,-1}, {38,0}, {38,1}, {38,2}, {38,3}, {38,4}, {39,-16}, {39,-15}, {39,-14}, {39,-13}, {39,-8}, {39,-7}, {39,-6}, {39,-5}, {39,-4}, {39,-3}, {39,-2}, {39,-1}, {39,0}, {39,1}, {39,2}, {39,3}, {40,-8}, {40,-7}, {40,-6}, {40,-5}, {40,1}, {40,2}, {40,3}, {41,-3}, }, + ["deepwater"] = {{-35,1}, {-35,2}, {-35,7}, {-35,8}, {-35,9}, {-35,10}, {-34,0}, {-34,1}, {-34,2}, {-34,3}, {-34,4}, {-34,5}, {-34,6}, {-34,7}, {-34,8}, {-34,9}, {-34,10}, {-34,11}, {-34,12}, {-33,-1}, {-33,0}, {-33,1}, {-33,2}, {-33,3}, {-33,4}, {-33,5}, {-33,6}, {-33,7}, {-33,8}, {-33,9}, {-33,10}, {-33,11}, {-33,12}, {-32,0}, {-32,1}, {-32,2}, {-32,3}, {-32,4}, {-32,5}, {-32,6}, {-32,7}, {-32,8}, {-32,9}, {-32,10}, {-32,11}, {-32,12}, {-32,13}, {-32,15}, {-31,-1}, {-31,0}, {-31,1}, {-31,2}, {-31,3}, {-31,4}, {-31,5}, {-31,6}, {-31,7}, {-31,8}, {-31,9}, {-31,10}, {-31,11}, {-31,12}, {-31,13}, {-31,14}, {-31,15}, {-31,16}, {-30,-3}, {-30,-2}, {-30,-1}, {-30,0}, {-30,1}, {-30,2}, {-30,3}, {-30,4}, {-30,5}, {-30,6}, {-30,7}, {-30,8}, {-30,9}, {-30,10}, {-30,11}, {-30,12}, {-30,13}, {-30,14}, {-30,15}, {-29,-3}, {-29,-2}, {-29,-1}, {-29,0}, {-29,1}, {-29,2}, {-29,3}, {-29,4}, {-29,10}, {-29,11}, {-29,12}, {-29,13}, {-29,14}, {-28,-4}, {-28,-3}, {-28,-2}, {-28,-1}, {-28,0}, {-28,1}, {-28,2}, {-28,12}, {-28,13}, {-28,14}, {-28,15}, {-27,-6}, {-27,-5}, {-27,-4}, {-27,-3}, {-27,-2}, {-27,-1}, {-27,0}, {-27,14}, {-27,15}, {-27,16}, {-26,-6}, {-26,-5}, {-26,-4}, {-26,-3}, {-26,-2}, {-26,-1}, {-26,0}, {-26,14}, {-26,15}, {-26,16}, {-25,-7}, {-25,-6}, {-25,-5}, {-25,-4}, {-25,-3}, {-25,-2}, {-25,-1}, {-25,15}, {-25,16}, {-24,-8}, {-24,-7}, {-24,-6}, {-24,-5}, {-24,-4}, {-24,-3}, {-24,-2}, {-24,-1}, {-24,15}, {-24,16}, {-23,-9}, {-23,-8}, {-23,-7}, {-23,-6}, {-23,-5}, {-23,-4}, {-23,-3}, {-23,-2}, {-23,16}, {-22,-8}, {-22,-7}, {-22,-6}, {-22,-5}, {-22,-4}, {-22,-3}, {-22,-2}, {-22,16}, {-22,17}, {-21,-8}, {-21,-7}, {-21,-6}, {-21,-5}, {-21,-4}, {-21,-3}, {-21,-2}, {-21,16}, {-21,17}, {-21,18}, {-20,-13}, {-20,-12}, {-20,-8}, {-20,-7}, {-20,-6}, {-20,-5}, {-20,-4}, {-20,-3}, {-20,-2}, {-20,16}, {-20,17}, {-19,-15}, {-19,-14}, {-19,-13}, {-19,-12}, {-19,-11}, {-19,-9}, {-19,-8}, {-19,-7}, {-19,-6}, {-19,-5}, {-19,-4}, {-19,-3}, {-19,16}, {-19,17}, {-19,18}, {-18,-16}, {-18,-15}, {-18,-14}, {-18,-13}, {-18,-12}, {-18,-11}, {-18,-10}, {-18,-9}, {-18,-8}, {-18,-7}, {-18,-6}, {-18,-5}, {-18,-4}, {-18,-3}, {-18,15}, {-18,16}, {-18,17}, {-18,18}, {-18,19}, {-17,-16}, {-17,-15}, {-17,-14}, {-17,-13}, {-17,-12}, {-17,-11}, {-17,-10}, {-17,-9}, {-17,-8}, {-17,-7}, {-17,-6}, {-17,-5}, {-17,-4}, {-17,-3}, {-17,15}, {-17,16}, {-17,17}, {-17,18}, {-16,-17}, {-16,-16}, {-16,-15}, {-16,-14}, {-16,-13}, {-16,-12}, {-16,-11}, {-16,-10}, {-16,-9}, {-16,-8}, {-16,-7}, {-16,-6}, {-16,-5}, {-16,-4}, {-16,14}, {-16,15}, {-16,16}, {-16,17}, {-15,-18}, {-15,-17}, {-15,-16}, {-15,-15}, {-15,-14}, {-15,-13}, {-15,-12}, {-15,-11}, {-15,-10}, {-15,-9}, {-15,-8}, {-15,-7}, {-15,-6}, {-15,-5}, {-15,14}, {-15,15}, {-15,16}, {-15,17}, {-14,-19}, {-14,-18}, {-14,-17}, {-14,-16}, {-14,-15}, {-14,-14}, {-14,-13}, {-14,-12}, {-14,-11}, {-14,-10}, {-14,-9}, {-14,-8}, {-14,-7}, {-14,-6}, {-14,14}, {-14,15}, {-14,16}, {-14,17}, {-13,-20}, {-13,-19}, {-13,-18}, {-13,-17}, {-13,-16}, {-13,-15}, {-13,-14}, {-13,-10}, {-13,-9}, {-13,-8}, {-13,-7}, {-13,14}, {-13,15}, {-13,16}, {-13,17}, {-12,-19}, {-12,-18}, {-12,-17}, {-12,-16}, {-12,14}, {-12,15}, {-12,16}, {-12,17}, {-11,-19}, {-11,-18}, {-11,-17}, {-11,-16}, {-11,14}, {-11,15}, {-11,16}, {-11,17}, {-11,18}, {-10,-19}, {-10,-18}, {-10,-17}, {-10,14}, {-10,15}, {-10,16}, {-10,17}, {-10,18}, {-9,-19}, {-9,-18}, {-9,-17}, {-9,14}, {-9,15}, {-9,16}, {-9,17}, {-9,18}, {-9,19}, {-8,-18}, {-8,-17}, {-8,15}, {-8,16}, {-8,17}, {-8,18}, {-8,19}, {-8,20}, {-7,-18}, {-7,-17}, {-7,-16}, {-7,18}, {-7,19}, {-7,20}, {-6,-18}, {-6,-17}, {-6,-16}, {-6,18}, {-6,19}, {-6,20}, {-5,-17}, {-5,-16}, {-5,-15}, {-5,-14}, {-5,18}, {-5,19}, {-5,20}, {-5,21}, {-4,-17}, {-4,-16}, {-4,-15}, {-4,-14}, {-4,-13}, {-4,-12}, {-4,-11}, {-4,18}, {-4,19}, {-4,20}, {-3,-16}, {-3,-15}, {-3,-14}, {-3,-13}, {-3,-12}, {-3,-11}, {-3,18}, {-3,19}, {-2,-14}, {-2,-13}, {-2,-12}, {-2,-11}, {-2,-10}, {-2,-9}, {-2,18}, {-2,19}, {-2,20}, {-1,-13}, {-1,-12}, {-1,-11}, {-1,-10}, {-1,-9}, {-1,-8}, {-1,18}, {-1,19}, {-1,20}, {-1,21}, {0,-12}, {0,-11}, {0,-10}, {0,-9}, {0,-8}, {0,18}, {0,19}, {0,20}, {0,21}, {1,-12}, {1,-11}, {1,-10}, {1,-9}, {1,-8}, {1,18}, {1,19}, {1,20}, {1,21}, {1,22}, {2,-11}, {2,-10}, {2,-9}, {2,-8}, {2,18}, {2,19}, {2,20}, {2,21}, {2,22}, {3,-10}, {3,-9}, {3,-8}, {3,16}, {3,17}, {3,18}, {3,19}, {3,20}, {3,21}, {4,-10}, {4,-9}, {4,-8}, {4,16}, {4,17}, {4,18}, {4,19}, {4,20}, {5,-9}, {5,-8}, {5,16}, {5,17}, {5,18}, {5,19}, {5,20}, {5,21}, {6,-9}, {6,16}, {6,17}, {6,18}, {6,19}, {6,20}, {6,21}, {6,22}, {7,-9}, {7,16}, {7,17}, {7,18}, {7,19}, {7,20}, {7,21}, {7,22}, {8,16}, {8,17}, {8,18}, {8,19}, {8,20}, {8,21}, {8,22}, {8,23}, {9,-8}, {9,16}, {9,17}, {9,18}, {9,19}, {9,20}, {9,21}, {9,22}, {9,23}, {10,16}, {10,17}, {10,18}, {10,19}, {10,20}, {10,21}, {10,22}, {10,23}, {10,24}, {11,16}, {11,19}, {11,20}, {11,21}, {11,22}, {11,23}, {11,24}, {11,25}, {12,21}, {12,22}, {12,23}, {12,24}, {12,25}, {13,-20}, {13,-19}, {13,-18}, {13,-17}, {13,21}, {13,22}, {13,23}, {13,24}, {13,25}, {13,26}, {14,-21}, {14,-20}, {14,-19}, {14,-18}, {14,-17}, {14,-16}, {14,22}, {14,23}, {14,24}, {14,25}, {14,26}, {15,-22}, {15,-21}, {15,-20}, {15,-19}, {15,-18}, {15,-17}, {15,-16}, {15,22}, {15,23}, {15,24}, {15,25}, {15,26}, {16,-21}, {16,-20}, {16,-19}, {16,-18}, {16,-17}, {16,21}, {16,22}, {16,23}, {16,24}, {16,25}, {17,-22}, {17,-21}, {17,-20}, {17,-19}, {17,21}, {17,22}, {17,23}, {17,24}, {17,25}, {18,-23}, {18,-22}, {18,-21}, {18,-20}, {18,13}, {18,14}, {18,15}, {18,16}, {18,19}, {18,20}, {18,21}, {18,22}, {18,23}, {18,24}, {19,-23}, {19,-22}, {19,-21}, {19,12}, {19,13}, {19,14}, {19,15}, {19,16}, {19,17}, {19,18}, {19,19}, {19,20}, {19,21}, {19,22}, {19,23}, {19,24}, {20,-23}, {20,-22}, {20,-21}, {20,11}, {20,12}, {20,13}, {20,14}, {20,15}, {20,16}, {20,17}, {20,18}, {20,19}, {20,20}, {20,21}, {20,22}, {20,23}, {20,24}, {21,-23}, {21,-22}, {21,10}, {21,11}, {21,12}, {21,13}, {21,14}, {21,15}, {21,16}, {21,17}, {21,18}, {21,19}, {21,20}, {21,21}, {22,-23}, {22,-22}, {22,9}, {22,10}, {22,11}, {22,12}, {22,13}, {22,14}, {22,15}, {22,16}, {23,-23}, {23,-22}, {23,8}, {23,9}, {23,10}, {23,11}, {23,12}, {23,13}, {23,14}, {24,-23}, {24,-22}, {24,-21}, {24,7}, {24,8}, {24,9}, {24,10}, {24,11}, {24,12}, {24,13}, {25,-24}, {25,-23}, {25,-22}, {25,-21}, {25,-9}, {25,-8}, {25,-7}, {25,-6}, {25,-5}, {25,-4}, {25,-3}, {25,-2}, {25,-1}, {25,0}, {25,7}, {25,8}, {25,9}, {25,10}, {25,11}, {26,-23}, {26,-22}, {26,-21}, {26,-20}, {26,-10}, {26,-9}, {26,-8}, {26,-7}, {26,-6}, {26,-5}, {26,-4}, {26,-3}, {26,-2}, {26,-1}, {26,8}, {26,9}, {26,10}, {27,-23}, {27,-22}, {27,-21}, {27,-20}, {27,-19}, {27,-11}, {27,-10}, {27,-9}, {27,-8}, {27,-7}, {27,-6}, {27,-5}, {27,-4}, {27,-3}, {27,-2}, {27,-1}, {27,8}, {27,9}, {27,10}, {28,-22}, {28,-21}, {28,-20}, {28,-19}, {28,-18}, {28,-17}, {28,-13}, {28,-12}, {28,-11}, {28,-10}, {28,-9}, {28,-8}, {28,-7}, {28,-6}, {28,-5}, {28,-4}, {28,-3}, {28,-2}, {28,-1}, {28,0}, {28,7}, {28,8}, {28,9}, {28,10}, {29,-21}, {29,-20}, {29,-19}, {29,-18}, {29,-17}, {29,-16}, {29,-15}, {29,-14}, {29,-13}, {29,-12}, {29,-11}, {29,-10}, {29,-9}, {29,-8}, {29,-7}, {29,-6}, {29,-5}, {29,-4}, {29,-3}, {29,-2}, {29,-1}, {29,0}, {29,7}, {29,8}, {29,9}, {29,10}, {30,-20}, {30,-19}, {30,-18}, {30,-17}, {30,-16}, {30,-15}, {30,-14}, {30,-13}, {30,-12}, {30,-11}, {30,-10}, {30,-9}, {30,-8}, {30,-7}, {30,-6}, {30,-5}, {30,-4}, {30,-3}, {30,-2}, {30,-1}, {30,0}, {30,1}, {30,2}, {30,5}, {30,6}, {30,7}, {30,8}, {30,9}, {30,10}, {30,11}, {31,-17}, {31,-16}, {31,-12}, {31,-11}, {31,-10}, {31,-9}, {31,-8}, {31,-7}, {31,-6}, {31,-5}, {31,-4}, {31,-3}, {31,-2}, {31,-1}, {31,0}, {31,1}, {31,2}, {31,3}, {31,4}, {31,5}, {31,6}, {31,7}, {31,8}, {32,-10}, {32,-9}, {32,-2}, {32,-1}, {32,0}, {32,1}, {32,2}, {32,3}, {32,4}, {32,5}, {32,6}, + {-3,-10}, {-3,-9}, {-3,-8}, {-2,-8}, + }, + ["refined-concrete"] = {{-29,5}, {-29,6}, {-29,7}, {-29,8}, {-29,9}, {-28,3}, {-28,4}, {-28,5}, {-28,6}, {-28,7}, {-28,8}, {-28,9}, {-28,10}, {-28,11}, {-27,1}, {-27,2}, {-27,3}, {-27,4}, {-27,5}, {-27,6}, {-27,7}, {-27,8}, {-27,9}, {-27,10}, {-27,11}, {-27,12}, {-27,13}, {-26,1}, {-26,2}, {-26,3}, {-26,4}, {-26,5}, {-26,6}, {-26,7}, {-26,8}, {-26,9}, {-26,10}, {-26,11}, {-26,12}, {-26,13}, {-25,0}, {-25,1}, {-25,2}, {-25,3}, {-25,4}, {-25,5}, {-25,6}, {-25,7}, {-25,8}, {-25,9}, {-25,10}, {-25,11}, {-25,12}, {-25,13}, {-25,14}, {-24,0}, {-24,1}, {-24,2}, {-24,3}, {-24,4}, {-24,5}, {-24,6}, {-24,7}, {-24,8}, {-24,9}, {-24,10}, {-24,11}, {-24,12}, {-24,13}, {-24,14}, {-23,-1}, {-23,0}, {-23,1}, {-23,2}, {-23,3}, {-23,4}, {-23,5}, {-23,6}, {-23,7}, {-23,8}, {-23,9}, {-23,10}, {-23,11}, {-23,12}, {-23,13}, {-23,14}, {-23,15}, {-22,-1}, {-22,0}, {-22,1}, {-22,2}, {-22,3}, {-22,4}, {-22,5}, {-22,6}, {-22,7}, {-22,8}, {-22,9}, {-22,10}, {-22,11}, {-22,12}, {-22,13}, {-22,14}, {-22,15}, {-21,-1}, {-21,0}, {-21,1}, {-21,2}, {-21,3}, {-21,4}, {-21,5}, {-21,6}, {-21,7}, {-21,8}, {-21,9}, {-21,10}, {-21,11}, {-21,12}, {-21,13}, {-21,14}, {-21,15}, {-20,-1}, {-20,0}, {-20,1}, {-20,2}, {-20,3}, {-20,4}, {-20,5}, {-20,6}, {-20,7}, {-20,8}, {-20,9}, {-20,10}, {-20,11}, {-20,12}, {-20,13}, {-20,14}, {-20,15}, {-19,-1}, {-19,0}, {-19,1}, {-19,2}, {-19,3}, {-19,4}, {-19,5}, {-19,6}, {-19,7}, {-19,8}, {-19,9}, {-19,10}, {-19,11}, {-19,12}, {-19,13}, {-19,14}, {-18,0}, {-18,1}, {-18,2}, {-18,3}, {-18,4}, {-18,5}, {-18,6}, {-18,7}, {-18,8}, {-18,9}, {-18,10}, {-18,11}, {-18,12}, {-18,13}, {-18,14}, {-17,0}, {-17,1}, {-17,2}, {-17,3}, {-17,4}, {-17,5}, {-17,6}, {-17,7}, {-17,8}, {-17,9}, {-17,10}, {-17,11}, {-17,12}, {-17,13}, {-17,14}, {-16,1}, {-16,2}, {-16,3}, {-16,4}, {-16,5}, {-16,6}, {-16,7}, {-16,8}, {-16,9}, {-16,10}, {-16,11}, {-16,12}, {-16,13}, {-15,12}, {-15,13}, {-13,-13}, {-13,-12}, {-13,-11}, {-12,-15}, {-12,-14}, {-12,-13}, {-12,-12}, {-12,-11}, {-12,-10}, {-12,-9}, {-11,-15}, {-11,-14}, {-11,-13}, {-11,-12}, {-11,-11}, {-11,-10}, {-11,-9}, {-10,-16}, {-10,-15}, {-10,-14}, {-10,-13}, {-10,-12}, {-10,-11}, {-10,-10}, {-10,-9}, {-9,-16}, {-9,-15}, {-9,-14}, {-9,-13}, {-9,-12}, {-9,-11}, {-9,-10}, {-9,-9}, {-9,-8}, {-8,-16}, {-8,-15}, {-8,-14}, {-8,-13}, {-8,-12}, {-8,-11}, {-8,-10}, {-8,-9}, {-7,-15}, {-7,-14}, {-7,-13}, {-7,-12}, {-7,-11}, {-7,-10}, {-7,-9}, {-7,13}, {-7,14}, {-7,15}, {-7,16}, {-7,17}, {-6,-15}, {-6,-14}, {-6,-13}, {-6,-12}, {-6,-11}, {-6,-10}, {-6,-9}, {-6,12}, {-6,13}, {-6,14}, {-6,15}, {-6,16}, {-6,17}, {-5,-13}, {-5,-12}, {-5,-11}, {-5,12}, {-5,13}, {-5,14}, {-5,15}, {-5,16}, {-5,17}, {-4,12}, {-4,13}, {-4,14}, {-4,15}, {-4,16}, {-4,17}, {-3,12}, {-3,13}, {-3,14}, {-3,15}, {-3,16}, {-3,17}, {-2,12}, {-2,13}, {-2,14}, {-2,15}, {-2,16}, {-2,17}, {-1,12}, {-1,13}, {-1,14}, {-1,15}, {-1,16}, {-1,17}, {0,12}, {0,13}, {0,14}, {0,15}, {0,16}, {0,17}, {1,12}, {1,13}, {1,14}, {1,15}, {1,16}, {1,17}, {2,12}, {2,13}, {2,14}, {2,15}, {2,16}, {2,17}, {4,-7}, {4,-6}, {4,-5}, {4,-4}, {4,-3}, {4,-2}, {4,-1}, {5,-7}, {5,-6}, {5,-5}, {5,-4}, {5,-3}, {5,-2}, {5,-1}, {6,-8}, {6,-7}, {6,-6}, {6,-5}, {6,-4}, {6,-3}, {6,-2}, {6,-1}, {6,0}, {7,-8}, {7,-7}, {7,-6}, {7,-5}, {7,-4}, {7,-3}, {7,-2}, {7,-1}, {7,0}, {8,-8}, {8,-7}, {8,-6}, {8,-5}, {8,-4}, {8,-3}, {8,-2}, {8,-1}, {8,0}, {9,-7}, {9,-6}, {9,-5}, {9,-4}, {9,-3}, {9,-2}, {9,-1}, {10,-7}, {10,-6}, {10,-5}, {10,-4}, {10,-3}, {10,-2}, {10,-1}, {11,-5}, {11,-4}, {11,-3}, {11,17}, {11,18}, {12,15}, {12,16}, {12,17}, {12,18}, {12,19}, {12,20}, {13,15}, {13,16}, {13,17}, {13,18}, {13,19}, {13,20}, {14,15}, {14,16}, {14,17}, {14,18}, {14,19}, {14,20}, {14,21}, {15,15}, {15,16}, {15,17}, {15,18}, {15,19}, {15,20}, {15,21}, {16,-16}, {16,-15}, {16,-14}, {16,15}, {16,16}, {16,17}, {16,18}, {16,19}, {16,20}, {17,-18}, {17,-17}, {17,-16}, {17,-15}, {17,-14}, {17,-13}, {17,-12}, {17,15}, {17,16}, {17,17}, {17,18}, {17,19}, {17,20}, {18,-19}, {18,-18}, {18,-17}, {18,-16}, {18,-15}, {18,-14}, {18,-13}, {18,-12}, {18,-11}, {18,17}, {18,18}, {19,-20}, {19,-19}, {19,-18}, {19,-17}, {19,-16}, {19,-15}, {19,-14}, {19,-13}, {19,-12}, {19,-11}, {19,-10}, {20,-20}, {20,-19}, {20,-18}, {20,-17}, {20,-16}, {20,-15}, {20,-14}, {20,-13}, {20,-12}, {20,-11}, {20,-10}, {21,-21}, {21,-20}, {21,-19}, {21,-18}, {21,-17}, {21,-16}, {21,-15}, {21,-14}, {21,-13}, {21,-12}, {21,-11}, {21,-10}, {22,-21}, {22,-20}, {22,-19}, {22,-18}, {22,-17}, {22,-16}, {22,-15}, {22,-14}, {22,-13}, {22,-12}, {22,-11}, {22,-10}, {23,-21}, {23,-20}, {23,-19}, {23,-18}, {23,-17}, {23,-16}, {23,-15}, {23,-14}, {23,-13}, {23,-12}, {23,-11}, {23,-10}, {24,-20}, {24,-19}, {24,-18}, {24,-17}, {24,-16}, {24,-15}, {24,-14}, {24,-13}, {24,-12}, {24,-11}, {24,-10}, {24,1}, {24,2}, {24,3}, {24,4}, {24,5}, {24,6}, {25,-20}, {25,-19}, {25,-18}, {25,-17}, {25,-16}, {25,-15}, {25,-14}, {25,-13}, {25,-12}, {25,-11}, {25,-10}, {25,1}, {25,2}, {25,3}, {25,4}, {25,5}, {25,6}, {26,-19}, {26,-18}, {26,-17}, {26,-16}, {26,-15}, {26,-14}, {26,-13}, {26,-12}, {26,-11}, {26,0}, {26,1}, {26,2}, {26,3}, {26,4}, {26,5}, {26,6}, {26,7}, {27,-18}, {27,-17}, {27,-16}, {27,-15}, {27,-14}, {27,-13}, {27,-12}, {27,0}, {27,1}, {27,2}, {27,3}, {27,4}, {27,5}, {27,6}, {27,7}, {28,-16}, {28,-15}, {28,-14}, {28,1}, {28,2}, {28,3}, {28,4}, {28,5}, {28,6}, {29,1}, {29,2}, {29,3}, {29,4}, {29,5}, {29,6}, {30,3}, {30,4}, }, + ["vegetation-green-grass-1"] = {{-19,-2}, {-18,-2}, {-8,14}, {-2,-21}, {0,-19}, {1,-26}, {8,-24}, {10,-9}, {11,-6}, {15,-14}, {17,-11}, {18,-10}, {18,-9}, {18,-6}, }, + ["concrete"] = {{-18,-1}, {-17,-2}, {-17,-1}, {-16,-3}, {-16,-2}, {-16,-1}, {-16,0}, {-15,-4}, {-15,-3}, {-15,-1}, {-15,0}, {-15,1}, {-15,2}, {-15,3}, {-15,4}, {-15,5}, {-15,6}, {-15,7}, {-15,8}, {-15,9}, {-15,10}, {-15,11}, {-14,-5}, {-14,-4}, {-14,-3}, {-14,-2}, {-14,-1}, {-14,12}, {-14,13}, {-13,-6}, {-13,-5}, {-13,-4}, {-13,-3}, {-13,-2}, {-13,2}, {-13,12}, {-13,13}, {-12,-8}, {-12,-7}, {-12,-6}, {-12,-5}, {-12,-4}, {-12,-3}, {-12,12}, {-12,13}, {-11,-8}, {-11,-7}, {-11,-6}, {-11,-5}, {-11,-4}, {-11,12}, {-11,13}, {-10,-8}, {-10,-7}, {-10,-6}, {-10,-5}, {-10,12}, {-10,13}, {-9,12}, {-9,13}, {-8,-8}, {-8,-7}, {-8,-6}, {-8,-5}, {-8,12}, {-8,13}, {-7,-7}, {-7,-6}, {-7,-5}, {-6,-7}, {-6,-6}, {-5,-7}, {-5,-6}, {-4,-7}, {-4,-6}, {-3,-7}, {-3,-6}, {-2,-7}, {-2,-6}, {-2,-2}, {-2,-1}, {-2,0}, {-2,1}, {-2,2}, {-2,3}, {-2,7}, {-2,8}, {-2,9}, {-2,10}, {-2,11}, {-1,-7}, {-1,-6}, {-1,-2}, {-1,-1}, {-1,0}, {-1,1}, {-1,2}, {-1,3}, {-1,7}, {-1,8}, {-1,9}, {-1,10}, {-1,11}, {0,-7}, {0,-6}, {0,-2}, {0,-1}, {1,-7}, {1,-6}, {1,-2}, {1,-1}, {2,-7}, {2,-6}, {2,-2}, {2,-1}, {3,-7}, {3,-6}, {3,-2}, {3,-1}, {3,14}, {4,14}, {5,14}, {6,14}, {7,14}, {8,14}, {9,14}, {10,14}, {11,-2}, {11,14}, {12,-4}, {12,-3}, {12,-2}, {12,12}, {12,13}, {12,14}, {13,-4}, {13,-3}, {13,-2}, {13,12}, {13,13}, {13,14}, {16,12}, {16,13}, {16,14}, {17,-4}, {17,-3}, {17,-2}, {17,11}, {17,12}, {17,13}, {17,14}, {18,-4}, {18,-3}, {18,-2}, {18,10}, {18,11}, {18,12}, {19,-9}, {19,-8}, {19,-7}, {19,-6}, {19,-5}, {19,-4}, {19,-3}, {19,-2}, {19,9}, {19,10}, {19,11}, {20,-9}, {20,-8}, {20,-7}, {20,-6}, {20,-5}, {20,-4}, {20,-3}, {20,-2}, {20,8}, {20,9}, {20,10}, {21,7}, {21,8}, {21,9}, {22,6}, {22,7}, {22,8}, {23,-9}, {23,-8}, {23,-7}, {23,-6}, {23,-5}, {23,-4}, {23,-3}, {23,-2}, {23,-1}, {23,0}, {23,1}, {23,2}, {23,5}, {23,6}, {23,7}, {24,-9}, {24,-8}, {24,-7}, {24,-6}, {24,-5}, {24,-4}, {24,-3}, {24,-2}, {24,-1}, {24,0}, }, + ["black-refined-concrete"] = {{-15,-2}, {-14,0}, {-14,1}, {-14,2}, {-14,3}, {-14,4}, {-14,5}, {-14,6}, {-14,7}, {-14,8}, {-14,9}, {-14,10}, {-14,11}, {-13,-1}, {-13,0}, {-13,1}, {-13,3}, {-13,4}, {-13,5}, {-13,6}, {-13,7}, {-13,8}, {-13,9}, {-13,10}, {-13,11}, {-12,-2}, {-12,-1}, {-12,0}, {-12,1}, {-12,2}, {-12,3}, {-12,4}, {-12,5}, {-12,6}, {-12,7}, {-12,8}, {-12,9}, {-12,10}, {-12,11}, {-11,-3}, {-11,-2}, {-11,-1}, {-11,0}, {-11,1}, {-11,2}, {-11,3}, {-11,4}, {-11,5}, {-11,6}, {-11,7}, {-11,8}, {-11,9}, {-11,10}, {-11,11}, {-10,-4}, {-10,-3}, {-10,-2}, {-10,-1}, {-10,0}, {-10,1}, {-10,2}, {-10,3}, {-10,4}, {-10,5}, {-10,6}, {-10,7}, {-10,8}, {-10,9}, {-10,10}, {-10,11}, {-9,-7}, {-9,-6}, {-9,-5}, {-9,-4}, {-9,-3}, {-9,-2}, {-9,-1}, {-9,0}, {-9,1}, {-9,2}, {-9,3}, {-9,4}, {-9,5}, {-9,6}, {-9,7}, {-9,8}, {-9,9}, {-9,10}, {-9,11}, {-8,-4}, {-8,-3}, {-8,-2}, {-8,-1}, {-8,0}, {-8,1}, {-8,2}, {-8,3}, {-8,4}, {-8,5}, {-8,6}, {-8,7}, {-8,8}, {-8,9}, {-8,10}, {-8,11}, {-7,-8}, {-7,-4}, {-7,-3}, {-7,-2}, {-7,-1}, {-7,0}, {-7,1}, {-7,2}, {-7,3}, {-7,4}, {-7,5}, {-7,6}, {-7,7}, {-7,8}, {-7,9}, {-7,10}, {-7,11}, {-7,12}, {-6,-5}, {-6,-4}, {-6,-3}, {-6,-2}, {-6,-1}, {-6,0}, {-6,1}, {-6,2}, {-6,3}, {-6,4}, {-6,5}, {-6,6}, {-6,7}, {-6,8}, {-6,9}, {-6,10}, {-6,11}, {-5,-5}, {-5,-4}, {-5,-3}, {-5,-2}, {-5,-1}, {-5,0}, {-5,1}, {-5,2}, {-5,3}, {-5,4}, {-5,5}, {-5,6}, {-5,7}, {-5,8}, {-5,9}, {-5,10}, {-5,11}, {-4,-5}, {-4,-4}, {-4,-3}, {-4,-2}, {-4,-1}, {-4,0}, {-4,1}, {-4,2}, {-4,3}, {-4,4}, {-4,5}, {-4,6}, {-4,7}, {-4,8}, {-4,9}, {-4,10}, {-4,11}, {-3,-5}, {-3,-4}, {-3,-3}, {-3,-2}, {-3,-1}, {-3,0}, {-3,1}, {-3,2}, {-3,3}, {-3,4}, {-3,5}, {-3,6}, {-3,7}, {-3,8}, {-3,9}, {-3,10}, {-3,11}, {-2,-5}, {-2,-4}, {-2,-3}, {-1,-5}, {-1,-4}, {-1,-3}, {0,-5}, {0,-4}, {0,-3}, {1,-5}, {1,-4}, {1,-3}, {2,-5}, {2,-4}, {2,-3}, {3,-5}, {3,-4}, {3,-3}, }, + ["mineral-dustyrose-dirt-3"] = {{-7,-27}, {-6,-26}, {-6,-25}, {-5,-26}, {-5,-25}, {-5,-24}, {-4,-25}, {-4,-24}, {-3,-24}, {-3,-23}, {-2,-25}, {-2,-24}, {-2,-23}, {-2,-22}, {-1,-25}, {-1,-24}, {-1,-23}, {-1,-22}, {-1,-21}, {-1,4}, {-1,5}, {-1,6}, {0,-24}, {0,-23}, {0,-22}, {0,-21}, {0,4}, {0,5}, {0,6}, {1,-24}, {1,-23}, {1,-22}, {1,-21}, {1,-20}, {1,4}, {1,5}, {1,6}, {2,-26}, {2,-25}, {2,-24}, {2,-21}, {2,-20}, {2,-19}, {2,4}, {2,5}, {2,6}, {3,-26}, {3,-25}, {3,-23}, {3,-22}, {3,-21}, {3,-20}, {3,-19}, {3,-18}, {3,4}, {3,5}, {4,-27}, {4,-26}, {4,-25}, {4,-24}, {4,-23}, {4,-22}, {4,-21}, {4,-20}, {4,-19}, {4,-18}, {4,-17}, {4,4}, {4,5}, {4,6}, {5,-28}, {5,-27}, {5,-26}, {5,-25}, {5,-24}, {5,-23}, {5,-22}, {5,-21}, {5,-20}, {5,-19}, {5,-18}, {5,-17}, {5,-16}, {5,4}, {5,5}, {5,6}, {6,-18}, {6,-17}, {6,-16}, {6,-15}, {6,4}, {6,5}, {6,6}, {7,-17}, {7,-16}, {7,-15}, {7,-14}, {7,4}, {7,5}, {7,6}, {8,-16}, {8,-15}, {8,-14}, {8,-13}, {8,5}, {8,6}, {9,-16}, {9,-15}, {9,-14}, {9,-13}, {9,5}, {9,6}, {10,-15}, {10,-14}, {10,-13}, {10,-12}, {10,5}, {10,6}, {11,-15}, {11,-14}, {11,-13}, {11,-12}, {11,-11}, {11,5}, {11,6}, {12,-14}, {12,-13}, {12,-12}, {12,-11}, {12,4}, {12,5}, {12,6}, {13,-13}, {13,-12}, {13,-11}, {13,-10}, {13,-9}, {13,-8}, {13,-7}, {13,4}, {13,5}, {13,6}, {14,-12}, {14,-11}, {14,-10}, {14,-9}, {14,-8}, {14,-7}, {14,-6}, {14,-4}, {14,-3}, {14,-2}, {14,-1}, {14,0}, {14,1}, {14,2}, {14,3}, {14,4}, {14,5}, {14,6}, {15,-11}, {15,-10}, {15,-9}, {15,-8}, {15,-7}, {15,-6}, {15,-5}, {15,-4}, {15,-3}, {15,-2}, {15,-1}, {15,0}, {15,1}, {15,2}, {15,3}, {15,4}, {15,5}, {15,6}, {16,-7}, {16,-6}, {16,-5}, {16,-4}, {16,-3}, {16,-2}, {16,-1}, {16,0}, {16,1}, {16,2}, {16,3}, {16,4}, {16,5}, }, + ["landfill"] = {{-6,-8}, {-5,-10}, {-5,-9}, {-5,-8}, {-4,-10}, {-4,-9}, {-4,-8}, }, + ["mineral-dustyrose-dirt-2"] = {{-2,4}, {-2,5}, {-2,6}, {3,6}, {8,4}, {9,4}, {10,4}, {11,4},{12,-5},{13,3}, {14,-5},}, + ["stone-path"] = {{0,0}, {0,1}, {0,2}, {0,3}, {0,7}, {0,8}, {0,9}, {0,10}, {0,11}, {1,0}, {1,1}, {1,2}, {1,3}, {1,7}, {1,8}, {1,9}, {1,10}, {1,11}, {2,0}, {2,1}, {2,2}, {2,3}, {2,7}, {2,8}, {2,9}, {2,10}, {2,11}, {3,0}, {3,1}, {3,2}, {3,3}, {3,7}, {3,8}, {3,9}, {3,10}, {3,11}, {3,12}, {3,13}, {3,15}, {4,0}, {4,1}, {4,2}, {4,3}, {4,7}, {4,8}, {4,9}, {4,10}, {4,11}, {4,12}, {4,13}, {4,15}, {5,0}, {5,1}, {5,2}, {5,3}, {5,7}, {5,8}, {5,9}, {5,10}, {5,11}, {5,12}, {5,13}, {5,15}, {6,1}, {6,2}, {6,3}, {6,7}, {6,8}, {6,9}, {6,10}, {6,11}, {6,12}, {6,13}, {6,15}, {7,1}, {7,2}, {7,3}, {7,7}, {7,8}, {7,9}, {7,10}, {7,11}, {7,12}, {7,13}, {7,15}, {8,1}, {8,2}, {8,3}, {8,7}, {8,8}, {8,9}, {8,10}, {8,11}, {8,12}, {8,13}, {8,15}, {9,0}, {9,1}, {9,2}, {9,3}, {9,7}, {9,8}, {9,9}, {9,10}, {9,11}, {9,12}, {9,13}, {9,15}, {10,0}, {10,1}, {10,2}, {10,3}, {10,7}, {10,8}, {10,9}, {10,10}, {10,11}, {10,12}, {10,13}, {10,15}, {11,-1}, {11,0}, {11,1}, {11,2}, {11,3}, {11,7}, {11,8}, {11,9}, {11,10}, {11,11}, {11,12}, {11,13}, {11,15}, {12,-1}, {12,0}, {12,1}, {12,2}, {12,3}, {12,7}, {12,8}, {12,9}, {12,10}, {12,11}, {13,-5}, {13,-1}, {13,0}, {13,1}, {13,2}, {13,7}, {13,8}, {13,9}, {13,10}, {13,11}, {14,7}, {14,8}, {14,9}, {14,10}, {14,11}, {14,12}, {14,13}, {14,14}, {15,7}, {15,8}, {15,9}, {15,10}, {15,11}, {15,12}, {15,13}, {15,14}, {16,6}, {16,7}, {16,8}, {16,9}, {16,10}, {16,11}, {17,-5}, {17,-1}, {17,0}, {17,1}, {17,2}, {17,3}, {17,4}, {17,5}, {17,6}, {17,7}, {17,8}, {17,9}, {17,10}, {18,-5}, {18,-1}, {18,0}, {18,1}, {18,2}, {18,3}, {18,4}, {18,5}, {18,6}, {18,7}, {18,8}, {18,9}, {19,-1}, {19,0}, {19,1}, {19,2}, {19,3}, {19,4}, {19,5}, {19,6}, {19,7}, {19,8}, {20,-1}, {20,0}, {20,1}, {20,2}, {20,3}, {20,4}, {20,5}, {20,6}, {20,7}, {21,-9}, {21,-8}, {21,-7}, {21,-6}, {21,-5}, {21,-4}, {21,-3}, {21,-2}, {21,-1}, {21,0}, {21,1}, {21,2}, {21,3}, {21,4}, {21,5}, {21,6}, {22,-9}, {22,-8}, {22,-7}, {22,-6}, {22,-5}, {22,-4}, {22,-3}, {22,-2}, {22,-1}, {22,0}, {22,1}, {22,2}, {22,3}, {22,4}, {22,5}, {23,3}, {23,4}, }, + }, + under_tiles = { + ["mineral-beige-dirt-4"] = {{-30,5}, {-30,6}, {-30,7}, {-30,8}, {-30,9}, {-29,5}, {-29,6}, {-29,7}, {-29,8}, {-29,9}, {-28,3}, {-28,4}, {-28,5}, {-28,6}, {-28,7}, {-28,8}, {-28,9}, {-28,10}, {-28,11}, {-27,1}, {-27,2}, {-27,3}, {-27,4}, {-27,5}, {-27,6}, {-27,7}, {-27,8}, {-27,9}, {-27,10}, {-27,11}, {-27,12}, {-27,13}, {-26,1}, {-26,2}, {-26,3}, {-26,4}, {-26,5}, {-26,6}, {-26,7}, {-26,8}, {-26,9}, {-26,10}, {-26,11}, {-26,12}, {-26,13}, {-25,0}, {-25,1}, {-25,2}, {-25,3}, {-25,4}, {-25,5}, {-25,6}, {-25,7}, {-25,8}, {-25,9}, {-25,10}, {-25,11}, {-25,12}, {-25,13}, {-25,14}, {-24,0}, {-24,1}, {-24,2}, {-24,3}, {-24,4}, {-24,5}, {-24,6}, {-24,7}, {-24,8}, {-24,9}, {-24,10}, {-24,11}, {-24,12}, {-24,13}, {-24,14}, {-23,-1}, {-23,0}, {-23,1}, {-23,2}, {-23,3}, {-23,4}, {-23,5}, {-23,6}, {-23,7}, {-23,8}, {-23,9}, {-23,10}, {-23,11}, {-23,12}, {-23,13}, {-23,14}, {-23,15}, {-22,-1}, {-22,0}, {-22,1}, {-22,2}, {-22,3}, {-22,4}, {-22,5}, {-22,6}, {-22,7}, {-22,8}, {-22,9}, {-22,10}, {-22,11}, {-22,12}, {-22,13}, {-22,14}, {-22,15}, {-21,-1}, {-21,0}, {-21,1}, {-21,2}, {-21,3}, {-21,4}, {-21,5}, {-21,6}, {-21,7}, {-21,8}, {-21,9}, {-21,10}, {-21,11}, {-21,12}, {-21,13}, {-21,14}, {-21,15}, {-20,-1}, {-20,0}, {-20,1}, {-20,2}, {-20,3}, {-20,4}, {-20,5}, {-20,6}, {-20,7}, {-20,8}, {-20,9}, {-20,10}, {-20,11}, {-20,12}, {-20,13}, {-20,14}, {-20,15}, {-19,-1}, {-19,0}, {-19,1}, {-19,2}, {-19,3}, {-19,4}, {-19,5}, {-19,6}, {-19,7}, {-19,8}, {-19,9}, {-19,10}, {-19,11}, {-19,12}, {-19,13}, {-19,14}, {-18,2}, {-18,3}, {-18,4}, {-18,5}, {-18,6}, {-18,7}, {-18,8}, {-18,9}, {-18,10}, {-18,11}, {-18,12}, {-18,13}, {-18,14}, {-17,9}, {-17,10}, {-17,11}, {-17,12}, {-17,13}, {-17,14}, {-16,11}, {-16,12}, {-16,13}, {-15,12}, {-15,13}, {-14,0}, {-13,-13}, {-13,-11}, {-13,-1}, {-13,0}, {-13,1}, {-12,-15}, {-12,-9}, {-12,-8}, {-12,-2}, {-12,-1}, {-12,0}, {-12,1}, {-12,2}, {-12,3}, {-12,4}, {-12,5}, {-12,6}, {-12,7}, {-12,8}, {-12,9}, {-12,10}, {-11,-3}, {-11,-2}, {-11,-1}, {-11,0}, {-11,1}, {-11,2}, {-11,3}, {-11,4}, {-11,5}, {-11,6}, {-11,7}, {-11,8}, {-11,9}, {-11,10}, {-11,14}, {-10,-16}, {-10,-3}, {-10,-2}, {-10,-1}, {-10,0}, {-10,1}, {-10,2}, {-10,3}, {-10,4}, {-10,5}, {-10,6}, {-10,7}, {-10,8}, {-10,9}, {-10,10}, {-10,14}, {-9,-7}, {-9,-6}, {-9,-5}, {-9,-4}, {-9,-3}, {-9,-2}, {-9,-1}, {-9,0}, {-9,1}, {-9,2}, {-9,3}, {-9,4}, {-9,5}, {-9,6}, {-9,7}, {-9,8}, {-9,9}, {-9,10}, {-9,14}, {-8,-16}, {-8,-3}, {-8,-2}, {-8,-1}, {-8,0}, {-8,1}, {-8,2}, {-8,3}, {-8,4}, {-8,5}, {-8,6}, {-8,7}, {-8,8}, {-8,9}, {-8,10}, {-7,-3}, {-7,-2}, {-7,-1}, {-7,0}, {-7,1}, {-7,2}, {-7,3}, {-7,4}, {-7,5}, {-7,6}, {-7,7}, {-7,8}, {-7,9}, {-7,10}, {-7,12}, {-7,13}, {-7,14}, {-7,15}, {-7,16}, {-7,17}, {-6,-15}, {-6,-8}, {-6,-3}, {-6,-2}, {-6,-1}, {-6,0}, {-6,1}, {-6,2}, {-6,3}, {-6,4}, {-6,5}, {-6,6}, {-6,7}, {-6,8}, {-6,9}, {-6,10}, {-6,15}, {-6,16}, {-6,17}, {-5,-15}, {-5,-14}, {-5,-13}, {-5,-11}, {-5,-3}, {-5,-2}, {-5,-1}, {-5,0}, {-5,1}, {-5,2}, {-5,3}, {-5,4}, {-5,5}, {-5,6}, {-5,7}, {-5,8}, {-5,9}, {-5,10}, {-5,15}, {-5,16}, {-5,17}, {-4,-15}, {-4,-14}, {-4,-13}, {-4,-12}, {-4,-11}, {-4,-10}, {-4,-9}, {-4,-3}, {-4,-2}, {-4,-1}, {-4,0}, {-4,1}, {-4,2}, {-4,3}, {-4,4}, {-4,5}, {-4,6}, {-4,7}, {-4,8}, {-4,9}, {-4,14}, {-4,15}, {-4,16}, {-4,17}, {-3,-15}, {-3,-14}, {-3,-13}, {-3,-12}, {-3,-11}, {-3,-10}, {-3,-9}, {-3,-3}, {-3,13}, {-3,14}, {-3,15}, {-3,16}, {-3,17}, {-2,-14}, {-2,-13}, {-2,-12}, {-2,-11}, {-2,-10}, {-2,-9}, {-2,-8}, {-2,13}, {-2,14}, {-2,15}, {-2,16}, {-2,17}, {-1,-14}, {-1,-13}, {-1,-12}, {-1,-11}, {-1,-10}, {-1,-9}, {-1,-8}, {-1,4}, {-1,5}, {-1,6}, {-1,7}, {-1,8}, {-1,9}, {-1,10}, {-1,11}, {-1,12}, {-1,13}, {-1,14}, {-1,15}, {-1,16}, {-1,17}, {0,-13}, {0,-12}, {0,-11}, {0,-10}, {0,-9}, {0,-8}, {0,4}, {0,5}, {0,6}, {0,7}, {0,8}, {0,9}, {0,10}, {0,11}, {0,12}, {0,13}, {0,14}, {0,15}, {0,16}, {0,17}, {1,-12}, {1,-11}, {1,-10}, {1,-9}, {1,-8}, {1,-3}, {1,2}, {1,4}, {1,5}, {1,6}, {1,7}, {1,8}, {1,9}, {1,10}, {1,11}, {1,12}, {1,13}, {1,14}, {1,15}, {1,16}, {1,17}, {2,-10}, {2,-9}, {2,-8}, {2,1}, {2,2}, {2,3}, {2,4}, {2,5}, {2,6}, {2,7}, {2,8}, {2,9}, {2,10}, {2,11}, {2,12}, {2,13}, {2,14}, {2,15}, {2,16}, {2,17}, {3,-8}, {3,0}, {3,1}, {3,2}, {3,3}, {3,4}, {3,5}, {3,6}, {3,7}, {3,8}, {3,9}, {3,10}, {3,11}, {3,12}, {3,13}, {3,14}, {3,15}, {3,16}, {4,-7}, {4,-1}, {4,0}, {4,1}, {4,2}, {4,3}, {4,4}, {4,5}, {4,6}, {4,7}, {4,8}, {4,9}, {4,10}, {4,11}, {4,12}, {4,13}, {4,14}, {4,15}, {4,16}, {5,-3}, {5,-2}, {5,-1}, {5,0}, {5,1}, {5,2}, {5,3}, {5,4}, {5,5}, {5,6}, {5,7}, {5,8}, {5,9}, {5,10}, {5,11}, {5,12}, {5,13}, {5,14}, {5,15}, {5,16}, {6,-8}, {6,-7}, {6,-6}, {6,-5}, {6,-4}, {6,-3}, {6,-2}, {6,-1}, {6,0}, {6,1}, {6,2}, {6,3}, {6,4}, {6,5}, {6,6}, {6,7}, {6,8}, {6,9}, {6,10}, {6,11}, {6,12}, {6,13}, {6,14}, {6,15}, {6,16}, {7,-8}, {7,-7}, {7,-6}, {7,-5}, {7,-4}, {7,-3}, {7,-2}, {7,-1}, {7,0}, {7,1}, {7,2}, {7,3}, {7,4}, {7,5}, {7,6}, {7,7}, {7,8}, {7,9}, {7,10}, {7,11}, {7,12}, {7,13}, {7,14}, {7,15}, {7,16}, {8,-8}, {8,-7}, {8,-6}, {8,-5}, {8,-4}, {8,-3}, {8,-2}, {8,-1}, {8,0}, {8,1}, {8,2}, {8,3}, {8,4}, {8,5}, {8,6}, {8,7}, {8,8}, {8,9}, {8,10}, {8,11}, {8,12}, {8,13}, {8,14}, {8,15}, {8,16}, {9,-7}, {9,-6}, {9,-5}, {9,-4}, {9,-3}, {9,-2}, {9,-1}, {9,0}, {9,1}, {9,2}, {9,3}, {9,4}, {9,5}, {9,6}, {9,7}, {9,8}, {9,9}, {9,10}, {9,11}, {9,12}, {9,13}, {9,14}, {9,15}, {9,16}, {10,-7}, {10,-6}, {10,-5}, {10,-4}, {10,-3}, {10,-2}, {10,-1}, {10,0}, {10,1}, {10,2}, {10,3}, {10,4}, {10,5}, {10,6}, {10,7}, {10,8}, {10,9}, {10,10}, {10,11}, {10,12}, {10,13}, {10,14}, {10,15}, {10,16}, {11,-5}, {11,-4}, {11,-3}, {11,-2}, {11,-1}, {11,0}, {11,1}, {11,2}, {11,3}, {11,4}, {11,5}, {11,6}, {11,7}, {11,8}, {11,9}, {11,10}, {11,11}, {11,12}, {11,13}, {11,14}, {11,15}, {11,16}, {11,17}, {11,18}, {12,-1}, {12,0}, {12,1}, {12,2}, {12,3}, {12,4}, {12,5}, {12,6}, {12,7}, {12,8}, {12,9}, {12,10}, {12,11}, {12,12}, {12,13}, {12,14}, {12,15}, {12,16}, {12,17}, {12,18}, {12,19}, {12,20}, {13,-1}, {13,0}, {13,1}, {13,2}, {13,3}, {13,4}, {13,5}, {13,6}, {13,7}, {13,8}, {13,9}, {13,10}, {13,11}, {13,12}, {13,13}, {13,14}, {13,15}, {13,16}, {13,17}, {13,18}, {13,19}, {13,20}, {14,-1}, {14,0}, {14,1}, {14,2}, {14,3}, {14,4}, {14,5}, {14,6}, {14,7}, {14,8}, {14,9}, {14,10}, {14,11}, {14,12}, {14,13}, {14,14}, {14,15}, {14,16}, {14,17}, {14,18}, {14,19}, {14,20}, {14,21}, {15,-1}, {15,0}, {15,1}, {15,2}, {15,3}, {15,4}, {15,5}, {15,6}, {15,7}, {15,8}, {15,9}, {15,10}, {15,11}, {15,12}, {15,13}, {15,14}, {15,15}, {15,16}, {15,17}, {15,18}, {15,19}, {15,20}, {15,21}, {16,-16}, {16,-15}, {16,-14}, {16,-1}, {16,0}, {16,1}, {16,2}, {16,3}, {16,4}, {16,5}, {16,6}, {16,7}, {16,8}, {16,9}, {16,10}, {16,11}, {16,12}, {16,13}, {16,14}, {16,15}, {16,16}, {16,17}, {16,18}, {16,19}, {16,20}, {17,-18}, {17,-17}, {17,-16}, {17,-15}, {17,-14}, {17,-13}, {17,-12}, {17,-1}, {17,0}, {17,1}, {17,2}, {17,3}, {17,4}, {17,5}, {17,6}, {17,7}, {17,8}, {17,9}, {17,10}, {17,11}, {17,12}, {17,13}, {17,14}, {17,15}, {17,16}, {17,17}, {17,18}, {17,19}, {17,20}, {18,-19}, {18,-18}, {18,-17}, {18,-16}, {18,-15}, {18,-14}, {18,-13}, {18,-12}, {18,-11}, {18,-1}, {18,0}, {18,1}, {18,2}, {18,3}, {18,4}, {18,5}, {18,6}, {18,7}, {18,8}, {18,9}, {18,10}, {18,11}, {18,12}, {18,17}, {18,18}, {19,-20}, {19,-19}, {19,-18}, {19,-17}, {19,-16}, {19,-15}, {19,-14}, {19,-13}, {19,-12}, {19,-11}, {19,-10}, {19,-9}, {19,-8}, {19,-7}, {19,-6}, {19,-1}, {19,0}, {19,1}, {19,2}, {19,3}, {19,4}, {19,5}, {19,6}, {19,7}, {19,8}, {19,9}, {19,10}, {19,11}, {20,-20}, {20,-19}, {20,-18}, {20,-17}, {20,-16}, {20,-15}, {20,-14}, {20,-13}, {20,-12}, {20,-11}, {20,-10}, {20,-9}, {20,-8}, {20,-7}, {20,-6}, {20,-5}, {20,-4}, {20,-3}, {20,-2}, {20,-1}, {20,0}, {20,1}, {20,2}, {20,3}, {20,4}, {20,5}, {20,6}, {20,7}, {20,8}, {20,9}, {20,10}, {21,-21}, {21,-20}, {21,-19}, {21,-18}, {21,-17}, {21,-16}, {21,-15}, {21,-14}, {21,-13}, {21,-12}, {21,-11}, {21,-10}, {21,-9}, {21,-8}, {21,-7}, {21,-6}, {21,-5}, {21,-4}, {21,-3}, {21,-2}, {21,-1}, {21,0}, {21,1}, {21,2}, {21,3}, {21,4}, {21,5}, {21,6}, {21,7}, {21,8}, {21,9}, {22,-21}, {22,-20}, {22,-19}, {22,-18}, {22,-17}, {22,-16}, {22,-15}, {22,-14}, {22,-13}, {22,-12}, {22,-11}, {22,-10}, {22,-9}, {22,-8}, {22,-7}, {22,-6}, {22,-5}, {22,-4}, {22,-3}, {22,-2}, {22,-1}, {22,0}, {22,1}, {22,2}, {22,3}, {22,4}, {22,5}, {22,6}, {22,7}, {22,8}, {22,9}, {23,-21}, {23,-20}, {23,-19}, {23,-18}, {23,-17}, {23,-16}, {23,-15}, {23,-14}, {23,-13}, {23,-12}, {23,-11}, {23,-10}, {23,-9}, {23,-8}, {23,-7}, {23,-6}, {23,-5}, {23,-4}, {23,-3}, {23,-2}, {23,-1}, {23,0}, {23,1}, {23,2}, {23,3}, {23,4}, {23,5}, {23,6}, {23,7}, {23,8}, {24,-20}, {24,-19}, {24,-18}, {24,-17}, {24,-16}, {24,-15}, {24,-14}, {24,-13}, {24,-12}, {24,-11}, {24,-10}, {24,-9}, {24,-8}, {24,-7}, {24,-6}, {24,-5}, {24,-4}, {24,-3}, {24,-2}, {24,-1}, {24,0}, {24,1}, {24,2}, {24,3}, {24,4}, {24,5}, {24,6}, {24,7}, {24,8}, {25,-20}, {25,-19}, {25,-18}, {25,-17}, {25,-16}, {25,-15}, {25,-14}, {25,-13}, {25,-12}, {25,-11}, {25,-10}, {25,0}, {25,1}, {25,2}, {25,3}, {25,4}, {25,5}, {25,6}, {25,7}, {26,-19}, {26,-18}, {26,-17}, {26,-16}, {26,-15}, {26,-14}, {26,-13}, {26,-12}, {26,-11}, {26,0}, {26,1}, {26,2}, {26,3}, {26,4}, {26,5}, {26,6}, {26,7}, {27,-18}, {27,-17}, {27,-16}, {27,-15}, {27,-14}, {27,-13}, {27,-12}, {27,0}, {27,1}, {27,2}, {27,3}, {27,4}, {27,5}, {27,6}, {27,7}, {28,-16}, {28,-15}, {28,-14}, {28,1}, {28,2}, {28,3}, {28,4}, {28,5}, {28,6}, {29,1}, {29,2}, {29,3}, {29,4}, {29,5}, {29,6}, {30,3}, {30,4}, {-18,-1}, {-18,0}, {-18,1}, {-17,-2}, {-17,-1}, {-17,0}, {-17,1}, {-17,2}, {-17,3}, {-17,4}, {-17,5}, {-17,6}, {-17,7}, {-17,8}, {-16,-3}, {-16,-2}, {-16,-1}, {-16,0}, {-16,1}, {-16,2}, {-16,3}, {-16,4}, {-16,5}, {-16,6}, {-16,7}, {-16,8}, {-16,9}, {-16,10}, {-15,-4}, {-15,-3}, {-15,-1}, {-15,0}, {-15,1}, {-15,2}, {-15,3}, {-15,4}, {-15,5}, {-15,6}, {-15,7}, {-15,8}, {-15,9}, {-15,10}, {-15,11}, {-14,-5}, {-14,-4}, {-14,-3}, {-14,-2}, {-14,-1}, {-14,1}, {-14,2}, {-14,3}, {-14,4}, {-14,5}, {-14,6}, {-14,7}, {-14,8}, {-14,9}, {-14,10}, {-14,11}, {-14,12}, {-13,-6}, {-13,-5}, {-13,-4}, {-13,-3}, {-13,-2}, {-13,2}, {-13,3}, {-13,4}, {-13,5}, {-13,6}, {-13,7}, {-13,8}, {-13,9}, {-13,10}, {-13,11}, {-13,12}, {-12,-7}, {-12,-6}, {-12,-5}, {-12,-4}, {-12,-3}, {-12,11}, {-12,12}, {-11,-8}, {-11,-7}, {-11,-6}, {-11,-5}, {-11,-4}, {-11,11}, {-11,12}, {-10,-8}, {-10,-7}, {-10,-6}, {-10,-5}, {-10,-4}, {-10,11}, {-10,12}, {-9,11}, {-9,12}, {-8,-8}, {-8,-7}, {-8,-6}, {-8,-5}, {-8,-4}, {-8,11}, {-8,12}, {-7,-8}, {-7,-7}, {-7,-6}, {-7,-5}, {-7,-4}, {-7,11}, {-6,-9}, {-6,-7}, {-6,-6}, {-6,-5}, {-6,-4}, {-6,11}, {-6,12}, {-6,13}, {-6,14}, {-5,-10}, {-5,-9}, {-5,-8}, {-5,-7}, {-5,-6}, {-5,-5}, {-5,-4}, {-5,11}, {-5,12}, {-5,13}, {-5,14}, {-4,-8}, {-4,-7}, {-4,-6}, {-4,-5}, {-4,-4}, {-4,11}, {-4,12}, {-4,13}, {-3,-8}, {-3,-7}, {-3,-6}, {-3,-5}, {-3,-4}, {-3,-2}, {-3,-1}, {-3,0}, {-3,1}, {-3,2}, {-3,3}, {-3,4}, {-3,5}, {-3,6}, {-3,7}, {-3,8}, {-3,9}, {-3,10}, {-3,11}, {-3,12}, {-2,-7}, {-2,-6}, {-2,-5}, {-2,-4}, {-2,-3}, {-2,-2}, {-2,-1}, {-2,0}, {-2,1}, {-2,2}, {-2,3}, {-2,4}, {-2,5}, {-2,6}, {-2,7}, {-2,8}, {-2,9}, {-2,10}, {-2,11}, {-2,12}, {-1,-7}, {-1,-6}, {-1,-5}, {-1,-4}, {-1,-3}, {-1,-2}, {-1,-1}, {-1,0}, {-1,1}, {-1,2}, {0,-7}, {0,-6}, {0,-5}, {0,-4}, {0,-3}, {0,-2}, {0,-1}, {0,0}, {0,1}, {0,2}, {1,-7}, {1,-6}, {1,-5}, {1,-4}, {1,-2}, {1,-1}, {1,0}, {1,1}, {2,-7}, {2,-6}, {2,-5}, {2,-4}, {2,-3}, {2,-2}, {2,-1}, {2,0}, {3,-7}, {3,-6}, {3,-5}, {3,-4}, {3,-3}, {3,-2}, {3,-1}, {4,-6}, {4,-5}, {4,-4}, {4,-3}, {4,-2}, {5,-7}, {5,-6}, {5,-5}, {5,-4}, {-14,13}, {-9,13}, {-8,13}, {-13,-12}, {-12,-14}, {-12,-13}, {-12,-12}, {-12,-11}, {-12,-10}, {-11,-15}, {-11,-14}, {-11,-13}, {-11,-12}, {-11,-11}, {-11,-10}, {-11,-9}, {-10,-15}, {-10,-14}, {-10,-13}, {-10,-12}, {-10,-11}, {-10,-10}, {-10,-9}, {-9,-16}, {-9,-15}, {-9,-14}, {-9,-13}, {-9,-12}, {-9,-11}, {-9,-10}, {-9,-9}, {-9,-8}, {-8,-15}, {-8,-14}, {-8,-13}, {-8,-12}, {-8,-11}, {-8,-10}, {-8,-9}, {-7,-15}, {-7,-14}, {-7,-13}, {-7,-12}, {-7,-11}, {-7,-10}, {-7,-9}, {-6,-14}, {-6,-13}, {-6,-12}, {-6,-11}, {-6,-10}, {-5,-12}, {-13,13}, {-12,13}, {-11,13}, {-10,13},{-1,3}, {0,3}, {1,3},{12,-4}, {12,-3}, {12,-2}, {13,-5}, {13,-4}, {13,-3}, {13,-2}, {14,-2}, {15,-2}, {16,-2}, {17,-5}, {17,-4}, {17,-3}, {17,-2}, {18,-5}, {18,-4}, {18,-3}, {18,-2}, {19,-5}, {19,-4}, {19,-3}, {19,-2},}, + }, + blueprint_strings = { + { xadj = 1, yadj = 0, force_override = "conquest", + string = "0eNq9nemOYzeShd9Fv1ONy52sVxkYhlJ5K0uwUtJosbtg1LuPlJuoNM+NOJQxvxpuZH06wcstFpJ/zx7Xp3G3X22Os29/z1bL7eYw+/Y/f88Oq+fNYn35/44/d+Ps22x1HF9mD7PN4uXyX4fjOK7nfy3W69mvh9lq8zT+d/bN/HoQ/+F6cRj38+Npvx+P1T+1v357mI2b4+q4Gt8EvP7Hz983p5fHcX9mt376YbbbHs7/ZLu5/N4Zk4r7T3iY/Zx9K+U/4ddFzxeOVXKCwHFKjhc4XskZ3jlmMG1QUIKMBIo0aGiDkhJkJUWZ/PZQUaEVAZAZyM+PSYbskJik7dpRam+j7dxJJHmahKwLtHWIpO3gWbRO2cNz+SQ5QMo0yQJSoScUoMkONAlosqY9/bdG3oemJseqOX6S49ScNMnxdE9Cba3t3eL3t5EmIU2Jtg5pUvbueF1SAiApe3ccJJJT9u54XQs8ICln8OhEkqVJyDpHW4dIyj4evWidso/HIGqKtCZEUvbxGEUSP4MjkrKP5yyR/ECTwLfzhrYOkfRzuPmwrsm59vDF/rhar8f9z6n14KatHmZPq/24fPsL26J7eoVoq+TndfQt+XkdfQFdn8+DOIf6TJOQJmWfD1frEnCDBnqFQCRDkyIgqft8/Nj/pCan2rdsn1eH42o5X/4YD8f54bjdL57H6bUCqVP39Rgm1Wnn9yS2fKRnZUTi53fUSvz8jjQVmgQ0RX5+RyRD7/WBddHSe/3c5FQ7mJezmPl68bKb9tWRbVX/3m6e5z8Wm6fxab7anNUdz38w6Wunr6uFb/1CUGoVe1mM9LrTbj1+746+Z6bXHUQqNAm0UhrodQeRDL3ugDhesjQpA5Ky51feEiJ5egVD1gWahDRFdi00Q5OTlK0UREWZXf+AokKvf6C180CTgG3Z0Osf0mRpEtLk6PUPkTwdqkbWBXr9Q6RIk5B1fPwcacr8vrGI4yYXRN2P/3s6/6+0tpbXtfX9j3//vlqf/8Vb7ucjn9Rw8Q4/xtdWWG5Pl5RVuOSNPhH77cvvj6fv3185x/1pbOUABjqQDJq1GDq4jUiWXq7BRymOJiFNnl6ukSZ68TAg4F4iG0iEpERrQjml6+B6XhynXbBXNWLwoRQ2eIesNMPAxtwwyrBBN4y6dvfdajdOrmwY4tgFCaM8jYJ5wWtf337/fvix3Y/z3am9M8lctzhvYiuZ280oL3fY4sSunNhisf9f87KvEIWhRWmoPADUiVorGlplapGhnjTUsNUIE+ocjYJt5pXNL48sddY2yQZGdt3GqGvvX243y/Nmf1SsJCh1W+VuRdog0wq9xKFMcJXAFYVZUZg19KoEhVm9sCALc3qal2meXjGhmYFeMSEq6m1Mso3pZv2dH7fz5/15P/00jYPiiAEQZXFFTysizRFjIMs0o6YleeJw+mGQ5InD6YdBcjLN62ny3FGlfkWaPOCdfjAkecBrU8BJHlfaHHCSR4E2CZyKODy1WeCUZZShVSEDvaVVQZQ2oDTIBipn/yyPbm3qN8tDW5v7zfJIvEn+6nwIiMo0CjY7v+FHqm7yvzoUUnWTAJ5CyVNWsDQKqnL07hyq4jf6UJV+hr9mQExAtNhD84im3+6HLGvLPc4DpJUeGrI0Dj2uCNIWTQ8NarPKhI2VhTki5OZVnnj0Pb4StLWe+xfLP6aSzZUjEXRSI4q77xaHw+rPcb7bb/9cPbV/zcutm3r8KdgUucfXg7RquPwYX1bLxXq+Wy82x2nPJf4ji39JGixXr+dTxv/u1ttLux1mzRrvocf1QgYk0+MrQZol+lkh+1lyPY4YlOp7HDFICz25pzR8aQJV7mm5XVQJp3SR83Fo6dr6p/X3077+KzYtZVLkk3RJXmBS6nFZYbvnHpcV0kqHyU40uUqf67HyqpNNj4ONbM+2x8GGtI7KwBRkk30HVl5hcuhx4KHtsSe4AGmJ9uGhmXw4AKoq2hqVywh9U9U+HTTodmFJntGL+lRPNtOalKGALA99bfo7y8Ndm//O8ui8SYBP+FlZHpFFmQPM8iisUuBgF50TuWWQc+E5ssgiIjOHtIMyRJBFR9UOho6BeISyNAqq0oYIBhnl6XAKRAUaBdsq0uEUqCrRKKgq0+EUqKrQKKTK6P2XcB3vCdFMDy0imn4TFKKszfVEjSDN99CgpaEnBgW1xR4a1HYdAvvF02I/HXvKiNJRZFhhobjSE4RCNNvhGlTxHoitloFxftgtluN8sVyeXk7rxZk7t1PFxKmNtEjpmyc57XElvXv7trnZrd8W13f/1QzDr9+ashwvy/TIOgt6hT8u9hpZnpdle2TdBgMCkhN4Oa7v450XB4WeyOvxfc2z2509ge1eIyrxokKPqNV+u1FK4j02NEVbcd9aQdC8UlUvaN2+3AbxvhoA8b4aaiHtGfUKBduJ99WgqkCjoKr4JTr71kungrT5awevfZmH2WQ3/2u7fZq1+/VNjQOtJLJKXidJoKRjl5C9/NXKXVj0BW9KJ5TtVvAXjGK7fc6e7da7qb+g9URWz+fECdTYjmMlg/gtvbsLC7+lp/1riAo0ChobaacYohKNggZm2imGqgqNQqrUpR3y6qwu7ZDX6KBcEf11IKKr6YJyRQxGRilXxDDIKOWKGJyMUhYyBSujiKKOIDqvRFFHRYPa9D5r8CKNKOqogiTI0tgVwIE020ODlroeSyGtI3lVRXKgyV2RHEiLfOTg0r1+vtb3t5HpjmBEaSPzPSUnik5ZiDqG2y8vXs5gqwIO+bQZ6kxV3QZTMp91CuXzcHJPqso1ZAg00/dUC0BJoadaANJiDw1a2lUXAWm5pzYAWlp6agMQLQ892pClTBWEvIozVRDyKp5dT10BpPkebdDSrpoHSIv0oQWI4gseIIoPn8HG588/IFWFP/8AUYY+HgBRlj4eAFEdDnOWR3pROsxZntAKH1SDqvizEFDVXVGxwkbF3mL17VBKuS8sBhur0NUiGV2XOtA1LBBliMKTrCnpcFXxhFx4okQ6ovBEifR04Qlsw0CXeEAUf60ARCXiLgBlm2U6qgXV8aEodPl/VVQh3wWgM9Twp42QocbS0S1oKH/aCKpShqT8p4HWIJRyPfFJRinXEx9lVKJVDQil3En5LKsqbHwSqtLeCF+pgih1QvIS9X1F2TZIfd9ksNMgOviKjaODrxilvFryGnyFHcHSwVesKrEhYYxS9vRroBQbqL1EWJ5gtLfDVyhkoPZ6+MpAiOqJtmJaT7QV07R9Xp6StSn4IE/JLvacEwq3sypTZvKljsra0Dwv9J7pnfxrh6p8Ln/2W9PapA+jXiPd9h+3T8Um/DpQF4fD+PK4Xm2e5y+L5Y/VeVvgJqv7Ppvx/cjdftwtVmfzzxpnzd9ijvlFbIitfvP9iFbziQPloYgor7be6KOwcCz5notBsCTXQ4PaeiLEWFvooUFt19G+3z5ud9t9s1TKT+4D/E36ZPdzfR7Vh9PjeUC9Qloxtg8j27zMp2NSmZZIB8dgkwU6OIZRpiOGIXff26sTLpz5cbH5YzLkY1UX6rlAXxyCjb8OC3DdX64RCm2Bvc8NtyB9WgKbmVh3EKMyezUcNrCwV8NBlPZK/VJklKFRqK0ifT8sRtEXxGIDvfIadnkdiIG90R2jIh1mcAildei9jMq0KotQ6rOg/mNlcu23jwZypft0xX2bZ7o22+am8bTHA/bb5Xjehj7Nv5/G9ZcTAuTRe8dco1B5x061b67y8o+n/ebtez2uNs3ykzDdwLyPhfqj9kL/CoX6Y7rnPpLK1YL8Pq/GqpbZ1NidHbbrxcU52ZybpenXfAwDoLd0IP0kMg8dyDyNZApaMm7VZp/PXQ4M6gBMWt/ItC4HBo2jrMzDVGZCVNR/kWsGXdnPM3HlZ0rs5856eB5Y5YXeCKNPX+SsTRQ/k/rW/yjr0b+VlCdX8qJ90DQPwzSI39LBdgo0CrZTVKKsrEq7pbtGruEzjfyWDr2Mqb3xv9powicfBxqF3uQb1DmaS+DlFRXbIOXVb1WODWpydAoKtpSnE2MQFeiED0RFOg0FUYlO+EBUpreLEFVoFHyUVJzPq2UXQgwBQUZVGfeLPzJ/d0+2+8k6Chtvw+L1P11tnmfNX3L63XC5ncTkV0+N73rSx3/5GZUH93pc8cZvaydKvp63Jp07b/hAGvzKkdg/wP6W6P0D1JPp/QMAFXr/AB73HehFHxmnfG+gRsEnhy29f4AoR+8fEkJ5GhURKtCLPlQVaRRUlei1GqL4ehhoYGEejq5W7KTxhby6csCKRjtxZaogyFztgf1quYUosSKygkCj/L8TLYIiu24GreJGxMUS1c2x1+R8ex37/NP5crHZXAKtt+/YmaGZ+f+4j+cDzi9/ruOAWXy/A8LmdhOne06DKbps7vmE0f1bn7C0r3ht3ZNTml+teXdN6fh2XS8sXq9RphpifZ7W9tvN5SdW++VpdbxKj2Bz9vZvzv/iZXvcVqa6YcB1LPPH87/4A/2xnyynMaEjvO/98K9cmA37q++5/SlNDjF8tcLkl++axd5rkZaLx7Wicul2255Cx+dw93wOeQXoq1CBtJ4zjJgWCWcTLaFe+fRxkTeO6ose5O2s5+O0CKUtSqlQyED1RQ/ydlb9hoc8Y2gLTyofEKrydBkFRAW6YAEaGOkqA4iin7LHBtJv2WNUoQsWECryPjNEGdqlLAhlaVRGKEe7lBDlaRQ0MNDR7dIGRdo3hZp4jxm2VKaj21BVoaPbCJUGOroNUXW1yeZ5/mNx3qo8TRYH3HZVORyaLO3LQ7WORqEvW1eBqK8Mee/Cbmgj+5zm8KU9/7+fcvc9b2ZUpwZgCyc6ZgK/O584gaqIS1JCxl29dQWJz0NXkQ3SWlWXKA8LXKFuuM2KfO0wzd+z9OEEi34PhGqaP0skY6JlP4kn4PIqnJk3qTyrNfY8eIW1JvpzBvQ530JozV/hT7Rk2Gn+GT5p/iRz0RE7hsvQ8xoU/Ail57FbOBEW20OD2rrOtEBtvocGtX11o76f9pvzIj11FKW9s6zqXpQdtKoLK7cd9CbK0/wxoswy5S8/I2VFyj0XiCV5i1qIcZUHLL61DQxVSY3yM2SLPsNrVPN5XOznf/04941Z8/eMugN9HippdqBQF96oKrxzmebdE7or4kAMA7HkFXEkhiF03CRrZCx9YQY2WBvccDKKvigDG0g/xwtVmYEOMCJVRlt46WWUZUv33IBQjkYZhKKDGxhFFwRgAyNbvIdRiT254mwbpC58+XR8AYguRoPGaS/HqFDo69menRem9RTjY1pPMT5utJ6dF6aFe3YZTrad8HIqHJSbuh4xvR399z3M0crwTR6tatqRiWbxXzwowakJdbkOuwd2tuWkfearWz/nhp5dsFNdoRCc+Vd2wbB/uq6scfpn5KXztgsTBuK2i56jesG5ru+jOnMdnO/xIpzRwUMXfND1rNjvonwdJRODo2vCyqFnwmo+2kNPV3T3usdPzfK+zDF+aiCnSk/MXVne+Pme+xyKjO14NSRnsWV7Xg3JWVZLX9mIFWrT6/KWTv1qiLxnUr8aIm8N1cUk8r5QXUxiRZS2mKRy0BxCGRplEcqydwViVY69wRCjPJt/xqjAXvDnXBsU1SA3DVKWTV0vYsNfj760DrcTfWkdREXeA0UGagtJgtw9tYUkQe6e2kKSKpcIUdqrFOSeHgOtCjZ7pFVBlDKyeL2kDRuo7O3X91cxqtCqkIHaUpJKFUQpe/s1ywoN1JaMVOlniHK0Kmigp1VBlLK3R3nqS8reHuXlVFuxEeW5XVuxEeUJua7YmLxXUJ5FiUc8ojy9E494RHlaJm77iFHWpg8wRnlGJW77iPKkmnuuK8S0ngdtME28ez19dfmlkEXuedUGd5PSQ0PmlqHjPRWojal1kKeQ0uHiJnnP0vPOR5L3L8V3hdR0XaiEO0OSlgwZVbn16/kl24wctUKYN396be8vB5xC+8gSOEnTE4gq8Z7LNPG3Tl1BSNU1QOG+R0zwaCrsyyPI/DgoL/rNXkYZWpVFKKt/D0U37KLi8ZLIIrVvbBe57ZSXZuUst12kUVBVokN9UJX2oMkgowodKAJ3F0QzsEcCXEAoQ6OgKkvHnCCKfsIBozyNgm1FXw6EUZFGQQPpJxywqkyjoKrCHpOAKEtfxAANtIaO0UFVlo4cQpSjHVVooKdRUFXocQahsNhDg9rU9Ucfl2c6AFLXH6VhGqS+yzfZSZDreeQTNrszPTTU7MSzJZVzBbX1PPKJtSnze0nu+S7QKGijcleT5D7vlLuaJO8fXKZR0MBCG4hQXllhmuT9g1fu6ZO8q/GWRkEDHW0gRGmz2fL+wWv38PJeS5vNzvJeS5vNzvJeS5vNzvJWxBf2JVWICgONQgZqr0bI8gZJezVClifk4Gi/GqK0Hqs8IWuvRsjy+hUi4e2rrm2MIRHevhKZaW8ffoZCu+gIpc1wZ3lW1Wa4szyrajPc1e45IRS/p48Ipd3TJ1mVNucXZVSkVUEDE60KorQ5vyIbqM1wZxGlznAX0UB1hjvLKGVvrxJg0EBlb6+yXxDlaVXQwECrgihlb6+cKGigsrdXST6IyrQqaGChVSFU1r5E5kUDs6FRUJWyt2f5C2ZH7yGgKk+joCp1nV7+OEqV2iB1nV7O06BEL/LQOH4XA5u80CF9pKoMdJ/KCGXojlAQytIoqMrRfaq0QZ7uUwAU6I4A2ynSKNhOie5TEJXZr+cHhCqs24RQSfsYxdXj8QahtD09yihLo6CBjjYQojzrkGAU3dvfUL89zFbH8eXyUtn6NO72q9cHd/8c94c3RzEbn3w5783NcHZjf/36P5Mp4bU=" + } + } +} + +return arty40 diff --git a/space-exploration_0.5.80/space-exploration/scripts/ruins/galaxy-ship.lua b/space-exploration_0.5.80/space-exploration/scripts/ruins/galaxy-ship.lua new file mode 100644 index 0000000..fb9f571 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/ruins/galaxy-ship.lua @@ -0,0 +1,124 @@ +-- Note: Default entity force will be 'capture', if a player character get near and there are no enemies the player will capture the entity. +local galaxy_ship = { + center = {x = 11, y = 5}, + force_name = "ignore", + insert_list = { + -- list of items to put in chests + -- max, min define the range for number of items + -- odds will only have it appear 1 in odds times + -- max, min, and odds all default to 1 + {x=14, y=2, items={{name = "empty-barrel", max = 100}}}, + {x=16, y=-11, items={{name = "empty-barrel", max = 100}}}, + {x=16, y=2, items={{name = mod_prefix.."contaminated-space-water-barrel", max = 50}}}, + {x=14, y=-11, items={{name = mod_prefix.."chemical-gel-barrel", max = 20}}}, + {x=25, y=-43, items={{name = "uranium-rounds-magazine", max = 50}, + {name = mod_prefix.."thruster-suit"}, + {name = "processed-fuel", max = 200}, + {name = "explosive-uranium-cannon-shell", max = 20}, + {name = mod_prefix.."contaminated-scrap", max = 100}, + }}, + {x=7, y=-27, items={{name = "pistol"}, + {name = "submachine-gun"}, + {name = "uranium-rounds-magazine", max = 50}, + }}, + {x=-1, y=-21, items={{name = "pistol"}, + {name = "submachine-gun"}, + {name = "uranium-rounds-magazine", max = 50}, + }}, + {x=0, y=-21, items={{name = "pistol"}, + {name = "submachine-gun"}, + {name = "uranium-rounds-magazine", max = 50}, + }}, + {x=1, y=-21, items={{name = mod_prefix.."thruster-suit"}}}, + {x=16, y=-21, items={{name = "uranium-rounds-magazine", max = 50}, + {name = mod_prefix.."thruster-suit"}, + {name = "processed-fuel", max = 200}, + {name = mod_prefix.."contaminated-scrap", max = 50}, + }}, + {x=7, y=-27, items={{name = mod_prefix.."thruster-suit"}, + {name = mod_prefix.."naquium-processor", min = 8, max = 8} + }}, + {x=-9.5, y=1.5, items={{name = mod_prefix.."thruster-suit"}}}, + {x=8.5, y=1.5, items={{name = mod_prefix.."thruster-suit"}}}, + {x=-2, y=-13, items={{name = "nuclear-fuel", odds = 3}, + {name = "uranium-ore", max = 50}, + {name = mod_prefix.."contaminated-scrap", max = 50}, + }}, + {x=2, y=-13, items={{name = "nuclear-fuel", odds = 3}, + {name = "uranium-ore", max = 50}, + {name = mod_prefix.."contaminated-scrap", max = 50}, + }}, + {x=6, y=-13, items={{name = "nuclear-fuel", odds = 3}, + {name = "uranium-ore", max = 50}, + {name = mod_prefix.."contaminated-scrap", max = 50}, + }}, + {x=6, y=25, items={{name = "nuclear-fuel", odds = 3}, + {name = "uranium-ore", max = 50}, + {name = mod_prefix.."contaminated-scrap", max = 50}, + }}, + }, + prebuild = function(surface, ruin_position, ruin) + end, + postbuild = function(surface, ruin_position, ruin) + -- fill all chests with scrap, an an occasional emergency space suit + local chests = surface.find_entities_filtered({position = ruin_position, radius = 100, name = { + "logistic-chest-active-provider", + "logistic-chest-buffer", + "logistic-chest-passive-provider", + "logistic-chest-requester", + "logistic-chest-storage", + mod_prefix.."cargo-rocket-cargo-pod", + "cargo-wagon"}}) + for _, chest in pairs(chests) do + chest.insert({name = mod_prefix.."scrap", count = math.random(1,100)}) + if math.random(1,3) == 1 then + chest.insert({name = mod_prefix.."contaminated-scrap", count = math.random(1,50)}) + end + if math.random(1,50) == 1 then + chest.insert({name = mod_prefix.."thruster-suit", count = 1}) + end + end + + --game.print("starting armory chests") + -- fill all armory buffer chests with walls and floors (for bots to fix any damage) + -- fill storage chests with ammo, or broken ammo (uranium ore or contaminated scrap) + + chests = surface.find_entities_filtered({ + position = {x = ruin_position.x, y = ruin_position.y - 40}, + radius = 7, + name = {"logistic-chest-buffer", "logistic-chest-storage"} + }) + for _, chest in pairs(chests) do + --game.print(chest.name .. " found at " .. chest.position.x .. ", " .. chest.position.y) + if chest.name == "logistic-chest-storage" then + local r = math.random(1,16) + -- mostly scrap, some ore and some survived bullets + if r <= 6 then + chest.insert({name = mod_prefix.."contaminated-scrap", count = math.random(1, 100)}) + elseif r <= 12 then + chest.insert({name = "uranium-ore", count = math.random(1, 50)}) + elseif r <= 16 then + chest.insert({name = "uranium-rounds-magazine", count = math.random(1, 50)}) + end + elseif chest.name == "logistic-chest-buffer" then + chest.insert({name = mod_prefix.."spaceship-wall", count = math.random(1, 50)}) + chest.insert({name = mod_prefix.."spaceship-floor", count = math.random(1, 50)}) + end + end + --game.print("done all types of chests") + end, + blueprint_strings = { + { -- tiles + xadj = 0, yadj = -2, + string = + "0eNqt3V2uJMeRpuG91DUJhJuZ/2kDs4hBX6jV1AwBiiRIqjENQXsfaVRVc6Ns5HlMVw1Q7ZF1Mr60cH9fD/O/fPr3H/783c+/fP/jb59+95dP3//hpx9//fS7//mXT79+/79+/P0Pf/9vv/3Xz999+t2n//z+l9/+/Lf/8s2nH3//p7//h3/8f3z7Pz799ZtP3//4H9/9n0+/G3/9t28+/fb9D9/94xo///Tr9799/9OPf7/K3/7XbzO++fRff/u/FX/9/1f57ttff/79H7779X9///O3f/zhp59++dv1/snQ8Y+h8+GhdX3o8qHTh5YPTR/qN6eGD/X7mn5f8/jQ7UM9TQlpej7/csqHpg8NHzp86MNDpUp8GXp86Pahy4d6msrTVJ6m8jSVp6k8TelpSk9TeprS0wS1KS7Xpq9D04eGDx0+9OGhUJu+Dj0+dPvQ5UM9TeVpKk9TeZrK01SepvQ0pacpPU3paZLadLw2Ha9Nx2vT8dp0vDYdr03Ha9Px2nS8Nh2vTcdr0/HadLw2Ha9Nx2vT8dp0vDYdr03Ha9Px2rS9Nm2vTdtr0/batL02ba9N22vT9tq0vTZtr03ba9P22rS9Nm2vTdtr0/batL02ba9N22vTbtemhDStzz/1f/Kp3/78w+9/++NPv/zp21//8Ps//vGnH/7jv79E49PTh4YPHT704aFSGZdXxuWVcXllXF4Zl1fG5ZVxeWVcXhmXV8bllXF5ZVyvK+MHq0V6qtJTJRVyvi407/7N83XB+eglnvYlpABNL0DTC9D0AjS9AE0vQNML0PQCNL0ATS9A0wvQfF2APpjlTiGaXoimF6LZLkQJ6arXU7R3v656PVX76CVG/xJP+xL/rAx+9BKnf4ndv8TqX2L2L1GcyvJAV/T/4cM//eGh2U9f9qOT/ehkPzrp0ZFamK9XvO8OLR/a+AeHDx0+9OGhMtHMfmXNfmXNflnM17Xto5eI/iVG+xKdUpH9UpGvS8VHL9G/I9m/I1wGYODnLaBz+dDpQ8uHNv7W8KHDhz48VGpl+KI8fFEevigPX5SHzzLDZ5m+efrr0EbljdezzA9eovGF80j/uv3b5p8u/3D5E/mP5O+VbyWnJ7i8JP+VyYW0M9sb/ogd/ogd/ogd/ogd/ogd/oj1l1HCX0b5OvT40O1DPU3laSpPU3maytNUnqbOo3X0FzWjv6gZ/UXN6C9qvlxitC8Rnr7w9IWnL/4Ff3M/hY2fO49sfN08kn/q/NjgT+Q/kr9XvpWcHv+1hn8mPxWDH8XBz//gSUdyZJMzmx5aTm1yhpIzlJyh5AwlZyg5Q8UZ8kmVz+R8+uhz1s6i7/FF3+OLPn+3OPzd4vB3i8PfLQ5/tzj83eLwd4vD3y0Of7c4/N3i8HeLw98tDn+3OPzd4nj6i76nL8Oe/rrxcW/+uDd/Xq8T3x3qNy29BISXgPASEF4CwktAeAkIT1N4msLT1Fl5P/2V9+dLjNufQHgp89+Tf+08kn/9/NvnT+Q/kr9XvpWcHv/Veqnw+uRF0Suxl39/5mS7JGW7Lvoj3ucVPplJzlRyppIzlZyp5EwVF1CfZvvc3hcUvorpY4BqLwkaGxbHZRTxdej0oeVD04eGDx0+9OGhgCKGtxIa3kpoeCuh4a2EhrcSGt5KaHgroeGthMZto4hx228BjNumGcOb/Xwd6vc7/X6n3+/0+51ePcKrR3j1CK8e4dUjPE3haQpPU3iaGhTj6yX6VaRBMb5e4vQv4XfAc9qYMnnd9wriQeORXO+42vEn8h/J3yvfSk4PB5Z/I/z84GfW8OhwdgaHp1/6Bn9Twd9U+K+Mvyl/xvqD3WcTPoXxeZNP1nyG6NNSnwv7BNxn/b7U8PVNcoaSM5ScoeQMFWfI18++aHdS4HiiwRjHcb53nO95O97h7XiHt+Md3o53eDve4e14h7fjHd6Od3g73uHteMd/0473gz+Dxkv147Rfqh/epnecPvc7fe7nDXSHN9D9OtSrSXo1Sa8m6fc5vZqEV5PwahJeTcLTFJ6m8DSFpyk8TeFpin7VGJ6q4akanqrhqRqequGpGp6q4akanqrhNcrD5FnyKDXmzv6g90eHlwmPgo7kCPEn8h/J3yvfSk4PB5Z/I/yz5Erg1cdLntdZL+7+RBltbDDaSwV/9vuEIzgZPsXyeZ1PJn0G69Nmn6v7AsFXJb4U8vVXYxPtlyv4I4qz5GtrX9A7RegjjORMJWeqOFMOjIqzVD7fgSx9OTdo+9DlQ6cPbfyt6UPDhw4f+vDQRsvs4Yc7DT/cafjhTmO3e8CO3Sfeu0+8d59473Yzw7HbPf/H7pNvP55p+PFMw49n+jrUq0x6lUmvMulVRqZ728n3dvK9nXxvJ9/byfd28r2dfG8n3/s1+X5z6PA0DU/T8DQNT9PwNA1P0/A0DU/T8DQNT5OHybPkUWrMpX2+5I8MLw8eBR3JEeJP5D+Sv1e+lZweDiz/RvhnyZXAq4+XPK+zXtz9ieLPXX/Y+wzDpzXRXpH5RM5njz5l9XmyT859ReDLEF/7+ILLV3m+tPT1bLahiq/g+/igzzCSs1WcrT686RCk9ZoMf/QSq3+J2b8EZH+1T1Acq30W7VjtQxiHH4I9Vp8kr/YRYWO1jwgbfjj2WH0U2j+Hefg5zMPPYR5+DvPXoelDw4cOH+o/E5mDLEehy1HochS6HIUuR6HLUehyFLochS5HoctR6HIUuhyFLkehy1HochS6HIUuR6HLUehyFLoYhS5GoYtR6GIUuhiFLkahi1HoYhS6GIUuRaFLUehSFLoUhS5FoUtR6FIUuhSFLkWhS1HoYhS6GIUuRqGLUeh6iUI/Nk0f7Ym+P8F92uBzFZ8gRXtpHO31uc9HfRLsM2+f7vsawxc2vpryJZyvG32x6itkX5Y7C0jOUHKGkjNUnKHiDPXhabXrUmcj4nzNPT96iexfIvqXGP1LPO1LdDjo7HPQ2d/jOvu7Sz9fQn7P8zVKfXfo9qHLh04fWj40fWj40OFDHx4anqbwNIWnKTxN4WkKT1N4msLTFJ6m8DQNT9PwNA1P0/A0DU/T8DQNT9PwNA1P0/A0eZg8Sx4lT5IHqfGM8/LgUdCRHCH+RP4j+XvlW8np4cDyb4R/llwJvPp4yfM668V9tNebHXQ6GZ1ORqeT0elkdDq5+8FsI9PJyHS+RKYf/GwuGD7d9zWGL2x8NeVLOF83+mLVV8i+LHcW4ADCqYejluIMSQ+D6u8arf6u0ervGq0+Pa0+Pa0++qw++qw++qw++qzX+zc/eol+Lqqfiw6Arf7r/fWa4X70Ev2bmv16IfW8nO2Ws91ytlvOdsvZbjnbLWe75Wy3nO2Ws91ytlvOdsvZbjnbLWe75Wy3nO2Ws91ytlvOdsvZbjnbLWe75Wy3nO2Ws91itlvMdovZbjHbLWa7xWy3mO0Ws91itlvKdkvZbinbLWW7pWy3lO3WK7b7sZlde2rIP1OuDF6NvAR63fVi70+Y0b6ro73q8GmEz118wuSzNJ8a+nw02kvsaBeOaGfM1x7RXlb7asuXeL6u9MWsr6CznTFnBskzuORM9VFNtSFgcbakr216d9r07rTp3WnTew1knxZnf69t9oFzeq+B7IPm7IPm7PcaSO81kH1GnX1Gna+72L77B4QP7aevU+myT8bTdzmn73JOJ+HpJDydhKeT8HQSnk7C00l4OglPJ+HpJDydhKeT8HQSnk7C00l4OglPJ+HpJDydhKeT8HQSnk7C00l4OglPJ+HpJDydhCeT8GQSnkzCk0l4MglPJuHJJDyZhCeT8FQSnkrCU0l4KglPJeGpJDx1l3N2CXgqAc9XBPxjnzza8/DRXhCP9l/hT2ifFkR7FR/tby7aK8hoL2M7HDh5z2++5L8f/Ox29rL9C8r2ctpXWb608/WkL2J95ezLdWcEyfO1Ph0prmvVrmvVrmsdMhZOh8PpcPjZZeFnl4WfXRZOgeM1BX536PGh24cuH+ppKk9TeZrK01Sepk7dij7VDae64VQ3nOqGU91wqhtOdcOpbjjVDae64VQ3nOqGU91wqhtOdcOpbjjVDae64VQ3nOqGU91wqhtOdcOpbjjVDae64VQ3nOqGU91wqhtMdYOpbjDVDaa6wVQ3mOoGU91gqhtMdUOpbijVDaW6oVQ3lOqGUt3o7m+OLt2Nl3Tyg1cY7SvwrfYHe7RX8R06GW06Ge1dqtGmlNGmlPGS833wCu276cscX1v5gs5XkclP9P76udqVosP/hrO34extOHsbzt6Gs7fh7G04exvO3oazt+HsbTh7G87ehrO34extOHsbr9nbm0PT05SepvQ0pacpPU3paUpPU3qa0tOUnqbwNIWnKTxN4WkKT1N4msLTFJ6m8DSFp2l4moanaXiahqdpeJqGp2l4moanaXiahqfJw+RZ8ih5khpTJn9keHnwKOhIjhB/Iv+R2V2PVfcCs3sBf2D5U9IfzT4f8ElItr/jXO0r+L+eq6MvPTqs5HFO8TineJxTPM4pHucUj3OKxznF45zicU7xOKd4nFM8zike5xSPc4rHOcXjnOJxTvE4p3icUzzOKR7nFI9zisc5xeOc4nFO8TineJxTPM4pHucUj3OKxznF45zicU7xOKd4nFM8zike5xSPc4rHOcXjnOJxTvE4p3icUzzOKR7nFI9zioc5xcOc4mFO8TCneJhTPMwpHuYUD3OKhznFo5ziUU7xKKd4upzi6XKKp8spnvY7fU/7nb6HicfDxONp75J52rtkHu7l9vD5HQ/3cHu4h9vTJj0P74Z5mPA8XdpyP5f6j9/fy+3FLncXu4yGLpOhy2DoMhe6jIUuU6HLUOgyE7qMhC4ToctA6DIPuoyDLtOgyzDoMgu6jIIuk6DLIOgyB7qMgS5ToMsQ6DIDuoyALhOgywDoMv+5jH8u05/L8Ocy+7mMfi6Tn8vg5zL3uYx9LlOfy9DnMvO5jHwuE5/LwOcy77mMey7Tnquw5yrruYp6rpKeq6DnKue5inmuUp6rkOci47mIeC4SnosvfV185+viK18X+3hdPKz4vure9aGl8eiurblojeh+cnYvUN0LzO4FdvcC7ft/mxeIboAa7xfeLji9XW56FZve7juGV7eLXd0tdhWVXiWlV0Hp7fY2uy9bm33sAt0Kk92A8OqfgUN2S1J2S1J17zvjKCZgjYNrDyPuw4j7MOI+jLgPI+7DiPsw4j6MuA8j7sOI+zDiPoy4DyPuw4j7MOI+jLgPI+7DiPsw4j6MuA8j7sOI+zDiPoy4DyPuw4j7MOI+jLgPI+7DiPsw4j6MuA8j7sOI+zDiPoy4DyPuw4j7MOI+jLgPI+7DiPsw4j6MuA8j7sOI+zDiPoy4DyPuo4j7KOI+iriPIu6jiPso4j6KuI8i7qOI+yDiPoi4DyLug4j7IOI+iLgPIu6DiPvgARUHT2g+ekDzURR+9Hjmo6czHz2c+bxE3u8N7BIOfizzTIAnHw0mfrpM/HSZ+Oky8dNtwHe6bPx0NxYfZeRHGflRRn66B4GcLis/XVZ+ul0CTxe2H+0ReBSyn5eQ/WP/ZE1aA7Kfl5uy35uu6FOSCRpDu+omqro1jOlodZPVOCR5f16TfLyYbXYZm13GZpex2WVsdhmbXcZml7HZZWx2GZtdxmaXsdllbHYZm13GZpex2WVsdhmbXcZml7HZZWx2GZtdxmaXsdllbHYZm13GZpex2WVsdhmbXcZml7HZZWx2GZtdxmaXsdllbHYZm13GZpex2WVsdhmbXcZml7HZZWx2GZtdxmaXsdllbHYZW13GVpex1WVsdRlbXcZWl7HVZWx1GVtdxkaXsdFlbHQZG13GRpex0WVsdBkbXcZGl7HRZWx1GVtdxlaXsdVl7O42/t3dxr+7bmN33wPY3fcAtrqOrcefbz39fHfdxu66jd11G7vrNnbXbexuz5TdPVhod88V2l3nsbvOY3edx+46j911Hrv7gsFW97H1BYPdfcFgd93H7jak2epAtjqQ3T0Xfb90Ie99ss7NmKYywG07j+oma3aTNbs1bXZr2uwmbXZr2vSatlhdLVZXi9XVYnW1WF0tVleL1dVidbVYXS1WV4vV1WJ1tVhdLVZXi9XVYnW1WF0tVleL1dVidbVYXS1WV4vV1WJ1tVhdLVZXi9XVYnW1WF0tVleL1dVidbVYXS1WV4vV1WJ1tVhdLVZXi9XVYnW1WF0tVleL1dVidbVYXS1WV4vV1WJ1tVhdLVZXS9XVUnW1VF0tVVdL1dVSdbVUXS1VV0vV1UJ1tVBdLVRXC9XVQnW1UF0tVFcL1dVCdbVQXS1VV0vV1ep2pFrdjlRLX8tZXYW1Xiqs9z55dz/5dC9wmxfgeRFPxXj2xxPOhrJaXWW1uspqdZXV6iqr1VVWq6usVldZra6yWi+V1XvP1W4Cs5vA7CYwuwnMbgIZCFU3edVNHpO36j5VmTNWN3FMVRnkMjtmXD27yZrdZDWU1fy84Pv4DGCyKZpsiiabosmmaLIpmmyKJpuiyaZosimabIomm6LJpmiyKZpsiiabosmmaLIpmmyKJpuiyaZosimabIomm6LJpmiyKZpsiiabosmmaLIpmmyKJpuiyaZosimabIomm6LJpmiyKZpsiiabosmmaLIpmmyKJpuiyaZosimabIomm6LJpmiyKZpsiqaaoqmmaKopmmqKppqiqaZoqimaaoqmmqKJpmiiKZpoiiaaoommaKIpmmiKJpqiiaZooimaaoqmmqKpLzlNfclpqhmaXTM01QzNrhma2rht6stMs9u4bXYbt83uy02z+3LT7JqiqUdBz64hml1DNLuGaHYN0ewaotk1RLNriGZX9MyuZpldzTJVs8yuZpldzTJVs8yuZpndM0xm9/WbqQ5jvnQY7w3UGUTDWRQ7i2JnUewsip1FsbModhbFzqLYWRQ7i2JnUewsip1FsbModhbFzqLYWRQ7i2JnUewsip1FsbModhbFzqLYWRQ7i2JnUewsip1FsbModhbFzqLYWRQ7i2JnUewsip1FsbModhbFzqLYWRQ7i2JnUewsip1FsbModhbFzqLYWRQ7i2JnUewsSp1FqbModRalzqLUWZQ6i1JnUeosSp1FobModBaFzqLQWRQ6i0JnUegsCp1FobModBalzqLUWZQ6i1JnUeosqussSp1F6SEz1X2LpbpvsVTXXVTXXVTXXZS+3VJdZ1Hdt1uq6y5KD5uprrOorrOorrOorrOorrOobkuw6oL/6oL/egn+P3aBboSZ7AHATIbgyRA8GYInQ/BkCJ4MwZMheDIET4bgyRA8GYInQ/BkCJ4MwZMheDIET4bgyRA8GYInQ/BkCJ4MwZMheDIET4bgyRA8GYInQ/BkCJ4MwZMheDIET4bgyRA8GYInQ/BkCJ4MwZMheDIET4bgyRA8GYInQ/BkCJ4MwZMheDIET4bgyRA8GYKnQvBUCJ4KwVMheCoET4XgqRA8FYKnQvBECJ4IwRMheCIET4TgiRA8EYInQvBECJ4IwVMheCoET4XgqRA8FYKnnrSeCr9T4XfqRv3sQu/U1k2prZtSWzelwu3swu3swu3swu3sbsxPPVE9u3A7u3A7u3A7u3A7u6eMZHdHf3bpeOqBGdml4tk9Azy1lU92z0EIpuPBdDyYjgfT8WA6HkzHg+l4MB0PpuPBdDyYjgfT8WA6HkzHg+l4MB0PpuPBdDyYjgfT8WA6HkzHg+l4MB0PpuPBdDyYjgfT8WA6HkzHg+l4MB0PpuPBdDyYjgfT8WA6HkzHg+l4MB0PpuPBdDyYjgfT8WA6HkzHg+l4MB0PpuPBdDyYjofS8VA6HkrHQ+l4KB0PpeOhdDyUjofS8UA6HkjHA+l4IB0PpOOBdDyQjgfS8UA6HkjHQ+l4KB0PpeOhdDyUjofS8VA6HkrHo7s1PLqUPLpbw6O7NTy6W8Oj29YmuhQ9tK1NvKTn7w3c3X+ylqzoJo5Xa9lNWnbvc+OYgXgJfN+8wGBuO5jbDua2g7ntYG47mNsO5raDue1gbjuY2w7mtoO57WBuO5jbDua2g7ntYG47mNsO5raDue1gbjuY2w7mtoO57WBuO5jbDua2g7ntYG47mNsO5raDue1gbjuY2w7mtoO57WBuO5jbDua2g7ntYG47mNsO5raDue1gbjuY2w7mtoO57WBuO5jbDua2Q7ntUG47lNsO5bZDue1QbjuU2w7ltkO57UBuO5DbDuS2A7ntQG47kNsO5LYDue1AbjuQ2w7ltkO57VBuO5TbDuW2Q7ntUG47lNsO3dU8tP340N3Mo8tnR5fPji6fHS/57Ht/++x+8upeoAv8Gi08RpfXjpedkz90gcYpkKN7CuTnC/BtfJS6PgpdH2WujyLXR4nro8D1Ud76KG59lLY+ClsfZa2PotZHSeujoPVRzvooZn2Usj4KWR9lrI8i1kcJ66OA9VG++ihefZSuPgpXH2Wrj6LVR8nqo2D1Ua76KFZ9lKo+ClUfZaqPItVHieqjQPVRnvooTn2Upj4KUx9lqY+i1EdJ6qMg9VGO+ihGfZSiPgpRH2WoDyLUBwnqgwD1QX76ID59kJ4+CE8fZKcPotPHyOlj4PQxbvoYNn2Mmj4GTR9jpo8h08eI6WPA9EFe+iAufZCWPghLH2SlD6LSB0npg6D0QU76ICZ9kJI+2PLhabLRp4lGn+bO1acJSJ8mH32aePRp0tHnJRx968Hw9D43m7nRxWg285LNvGTzfmfzfs/m7202v78uiJ789/P2Yd49zJuHee8wbx3mncO8cZj3DfO2Yd41zJuGec8wbxnmHcO8YZj3C/N2Yd4tzJuFea8wbxXmncK8UZj3CfM2Yd4lzJuEeY8wbxHmHcK8QZj3B/P2YN4dzJuDeW8wbw3mncG8MZj3BfO2YN4VzJuCeU8wbwnmHcG8IZj3A/N2YN4NzJuBdS+wbgXWncC6EVj3Aes2YN0FrJuAdQ8wbgHGHcC4ARj3/+L2X9z9i5t/ce8vbv3Fnb+68Vf3/eq2X931q5t+dc+vbvnVHb+64Vf3++p234Ege2Dr4u7e3tEE2N0dvt0Nvt39vd3tvd3dvaMJskezJ8NoAunP45v3L5vf/2zmfzb/fgfC3AeY2wBzF2BuAsw9gLkFMHcA5gbA3P+X2/9y919u/su9f7n1L3f+5ca/3PeX2/5y119u+ss9f7nlL3f85Ya/3O+X2/1yt19u9su9frnVL3f65Ua/3OeX2/xyl19u8ss9frnFL3f45Qa/3N+X2/tyd19u7su9fbm1L3f25ca+3NeX2/pyV19t6qs9fbWlr3b01Ya+2s9X2/lqN19t5ou9fLGVL3byxUa+2McX2/hiF19s4os9fLGFr3bw1Qa+2r9X2/dq915t3qu9e7V1byAQDgTCgUA4EAgHAuHAo+y6PXi1Ba924O024NX+u932u9EEvt0mvNHc+RzNHcTRBL7RbGYRL4HvW4/Q2fxc/t5SQXEqKE4FxamgOBUUp4LiVFCcCopTQXEqKE4FxamgOBUUp4LiVFCcCopTQXEqKE4FxamgOBUUp4LiVFCcCopTQXEqKE4FxamgOBUUp4LiVFCcCopTQXEqKE4FxamgOBUUp4LiVFCcCopTQXEqKE4FxamgOBUUp4LiVFCcCopTQXEqKE4FxYmgOBEUJ4LiRFCcCIoTQXEiKE4ExYmgOA0Up4HiNFCcBorTQHEaKE4DxWmgOA0Up4HiRFCcCIoTQXEiKE4ExYmgOBEUJ4LiRFCcCIoTQXEiKE4ExYmgOLEZcCIgTgTE2QTEiYA4m4A4m4A4m4A4m4A4X7bG+ND4ao5fzfHN+1fN71/5oAPqUsBcCphLAXMpYC4FzKWAuRQwlwLmUsBcCphLAXMpYC4FzKWAuRQwlwLmUsBcCphLAXMpYC4FzKWAuRQwlwLmUsBcCphLAXMpYC4FzKWAuRQwlwLmUsBcCphLAXMpYC4FzKWAuRQwlwLmUsBcCphLAXMpYC4FzKWAuRQwlwLmUsBcCphLAXMhYC4EzIWAuRAwFwLmQsBcCJgLAXMhYC4DzGWAuQwwlwHmMsBcBpjLAHMZYC4DzGWAuRAwFwLmQsBcCJgLAXMhYC4EzIWAuRAwFwLmQsBcCJgLAXMhYC4EzIWAuRAw10vA/NY4zIsuXBwo10ug/Nbn6gMJc+PguF72Vn7rc1fzc3dzPOapove5Sv0UbM7m/e0Ccm/18Xk8i4WpgH4qoJ8K6KcC+qmAfiqgnwropwL6qYB+KqCfCuinAvqpgH4qoJ8K6KcC+qmAfiqgnwropwL6qYB+KqCfCuinAvqpgH4qoJ8K6KcC+qmAfiqgnwropwL6qYB+KqCfCuinAvqpgH4qoJ8K6KcC+qmAfiqgnwropwL6qYB+KqCfCuinAvqpgH4qoJ8K6CcC+omAfiKgnwjoJwL6iYB+IqCfCOgnAvppgH4aoJ8G6KcB+mmAfhqgnwbopwH6aYB+GqCfCOgnAvqJgH4ioJ8I6CcC+omAfiKgnwjoJwL6iYB+IqCfCOgnAvqJgH4ioJ8I6CcC+omAfiKgny8B/VvjRg8o+k7viaB+vgT1b42bzX/vao7fzfGnOb4JkOtpjm/mTbGXYk8lux9HyUsB/VJAvxTQLwX0SwH9UkC/FNAvBfRLAf1SQL8U0C8F9EsB/VJAvxTQLwX0SwH9UkC/FNAvBfRLAf1SQL8U0C8F9EsB/VJAvxTQLwX0SwH9UkC/FNAvBfRLAf1SQL8U0C8F9EsB/VJAvxTQLwX0SwH9UkC/FNAvBfRLAf1SQL8U0C8F9EsB/VJAvxTQLwT0CwH9QkC/ENAvBPQLAf1CQL8Q0C8E9MsA/TJAvwzQLwP0ywD9MkC/DNAvA/TLAP0yQL8Q0C8E9AsB/UJAvxDQLwT0CwH9QkC/ENAvBPQLAf1CQL8Q0C8E9AsB/UJAvxDQLwT0CwH9QkC/ENAv3Dm/cOf8QiC/EMgv3DG/miB+vQTxb33uaX7u7Y13AL+aAH41d/x/Hl/N8bM5vpmbat7/2bx/ypX9kNPVEhqz+X17z/vVfOPi85yX79dWL7PVy2z1Mlu9zFYvs9XLbPUyW73MVi+z1cts9TJbvcxWL7PVy2z1Mlu9zFYvs9XLbPUyW73MVi+z1cts9TJbvcxWL7PVy2z1Mlu9zFYvs9XLbPUyW73MVi+z1cts9TJbvcxWL7PVy2z1Mlu9zFYvs9XLbPUyW73MVi+z1cts9TJbvcxWL7PVy2z0Mhu9zEYvs9HLbPQyG73MRi+z0cts9DLbvMw2L7PNy2zzMtu8zDYvs83LbPMy27zMNi+z0cts9DIbvcxGL7PRy2z0Mhu9zEYvs9HLbPQyG73MRi+z0cts9DIbvcxGL7PRy2z0Mhu9zEYvs9HLbPQyu/nCxEY/s9HP7OYLE/ulp3nrczE/7mf2Sz/z1hO/yYndy+yml9kvX6z40Phqjm/mzL3O5/G7Ob6ZO4W9SpcVZys/V2CvhkCVhDoQlS6zmRvvCLb/JX5rcd066seO+rGjfuyoHzvqx476saN+7KgfO+rHjvqxo37sqB876seO+rGjfuyoHzvqx476saN+7KgfO+rHjvqxo37sqB876seO+rGjfuyoHzvqx476saN+7KgfO+rHjvqxo37sqB876seO+rGjfuyoHzvqx476saN+7KgfO+rHjvqxo37sqB876seO+rGDfuygHzvoxw76sYN+7KAfO+jHDvqxg37smB875seO+bFjfuyYHzvmx475sWN+7JgfO+bHDvqxg37soB876McO+rGDfuygHzvoxw76sYN+7KAfO+jHDvqxg37soB876McO+rGDfuygHzvoxw76sYN+7OB7Swe92EEvdppe7KAXO+jFTtOLneZ7S+elH3trptDky+7FTtOLnaYXO00vdl56sbe+d8yZstVq5svfqzovfdiHxjdzpsBeDYEqCX+f66AnOy892VvjPvzcu6qXruqlq3rpql66qpeu6qWreumqXrqql67qpat66apeuqqXruqlq3rpql66qpeu6qWreumqXrqql67qpat66apeuqqXruqlq3rpql66qpeu6qWreumqXrqql67qpat66apeuqqXruqlq3rpql66qpeu6qWreumqXrqql67qpat66apeuqqXLuqli3rpol66qJcu6qWLeumiXrqoly7qpWt66ZpeuqaXrumla3rpml66ppeu6aVreumaXrqoly7qpYt66aJeuqiXLuqli3rpol66qJcu6qWLeumiXrqoly7qpYt66aJeuqiXLuqli3rpol66qJcu6qWLeumiXrqoly62xbuolS5qpYsHx9+mTrrN161uUyvdpla6Ta10X2qlt2ZGs/m5qzl+N8dj3hTmzmbOFFsrJ1cwryZA1YO6DpUranNms06tZn789arxqMf6OnLzyMUjJ48sHpk8Mnjk4JGPjvx4Dfw6kjNUnKHiDBVnqDhDxRkqzlBxhoozlJyh5AwlZyg5Q8kZSs5QcoaSM5ScoeQMBWcoOEPBGQrOUHCGgjMUnKHgDAVnKDhDgzM0OEODMzQ4Q4MzNDhDgzM0OEODMzQ4QxwhThAHyOfTPEXg5wIXA04ADtTg6OfpH6jfqN5CzYyGVH8V+jPU3z1XGi5uXE+5hPNTgx9U/GzkxzHPAHjSwfMcnlrxbI4nkDxn5Wkyz8x5McDrD17y8CqLF3a8luTlK6+YeZHOXIBRBNMPBi7MeKqLnJloMURjbseo0D3YlwtokrzR4JcLaKKYPDPsZr7up119uYAGg9UH2xYWPFOD0JBSgzXPYM0zWPMM1jyDNc9gzTNY8wzWPIM1z2DNM1jzDNY8gzXPYM0zWPMM1jyDNc9gzTNY8wzWPIM1z2DNM1jzDNY8gzXPYM0zWPMM1jyDNc9gzTNY8wzWPIM1z2DNM1jzDNY8gzXPYM0zWPMM1jyDNc9gzTNY8wzWPIM1z2DNM1TzDNU8QzXPUM0zVPMM1TxDNc9QzTNU8wzUPAM1z0DNM1DzDNQ8AzXPQM0zUPMM1DwDNc9QzTNU8wzVPEM1z1DNM1TzDNU8QzXPUM0zVPMM1TxDNc9QzTNU8wzVPEM1z1DNM1TzDNU8QzXPUM0zVPMM1TxDNc9QzTNU8wzVPEM1z1DNM1TzDNU846XmeW9gNOmvv/v05QKaJEaGzFRnNf/WqRmeu/vJLpqCKX8w5Q+m/MGUP5jyB1P+YMofTPmDKX8w5Q+m/MGUP5jyB1P+YMofTPmDKX8w5Q+m/MGUP5jyB1P+YMofTPmDKX8w5Q+m/MGUP5jyB1P+YMofTPmDKX8w5Q+m/MGUP5jyB1P+YMofTPmDKX8w5Q+m/MGUP5jyB1P+UMofSvlDKX8o5Q+l/KGUP5Tyh1L+UMofSPkDKX8g5Q+k/IGUP5DyB1L+QMofSPkDKX8o5Q+l/KGUP5Tyh1L+UMofSvlDKX8o5Q+l/KGUP5Tyh1L+UMofSvlDKX8o5Q+l/KGUP5Tyh1L+UMofSvlDKX8o5Q+l/KGUP5Tyh1L+UMofSvmj+zJH6Msc0aX80Tw558sFZvcCq3uB3bzA7P4JflzLSIb4yRA/GeInQ/xkiJ8M8ZMhfjLET4b4yRA/GeInQ/xkiJ8M8ZMhfjLET4b4yRA/GeInQ/xkiJ8M8ZMhfjLET4b4yRA/GeInQ/xkiJ8M8ZMhfjLET4b4yRA/GeInQ/xkiJ8M8ZMhfjLET4b4yRA/GeInQ/xkiJ8M8VMhfirET4X4qRA/FeKnQvxUiJ8K8VMhfiLET4T4iRA/EeInQvxEiJ8I8RMhfiLET4T4qRA/FeKnQvxUiJ8K8VMhfirET4X4qRA/FeKnQvxUiJ8K8VMhfirET4X4qRA/FeKnQvxUiJ8K8VMhfirET4X4qRA/FeKnQvxUiJ8K8VMhfirET92qnwrvUzsxpW7Nzy6szy6szy6sz25npnz5lsGHLtDQBcVnPhSf+VBsGIoNQ7FhKDYMxYah2DAUG4Ziw1BsGIoNQ7FhKDYMxYah2DAUG4Ziw1BsGIoNQ7FhKDYMxYah2DAUG4Ziw1BsGIoNQ7FhKDYMxYah2DAUG4Ziw1BsGIoNQ7FhKDYMxYah2DAUG4Ziw1BsGIoNQ7FhKDYMxYah2DCUGoZSw1BqGEoNQ6lhKDUMpYah1DCUGoZCw1BoGAoNQ6FhKDQMhYah0DAUGoZCw1BoGEoNQ6lhKDUMpYah1DCUGoZSw1BqGEoNQ6lhKDUMpYah1DCUGoZSw1BqGEoNQ6lhKDUMpYah1DCUGoZSw1BqGEoNQ6lhKDUMpYah1DCUGoZSw1BqGEoNQ6lhqO5rAdU1DdU1DdU1DdU1DZM5/2TOP5nzT+b8kzn/ZM4/mfNP5vyTOf9kzj+Z80/m/JM5/2TOP5nzT+b8kzn/ZM4/mfNP5vyTOf9kzj+Z80/m/JM5/2TOP5nzT+b8kzn/ZM4/mfNP5vyTOf9kzj+Z80/m/JM5/2TOP5nzT+b8kzn/ZM4/mfNP5vyTOf9kzj+Z80/m/FM5/1TOP5XzT+X8Uzn/VM4/lfNP5fxTOf9Ezj+R80/k/BM5/0TOP5HzT+T8Ezn/RM4/kfNP5fxTOf9Uzj+V80/l/FM5/1TOP5XzT+X8Uzn/VM4/lfNP5fxTOf9Uzj+V80/l/FM5/1TOP5XzT+X8Uzn/VM4/lfNP5fxTOf9Uzj+V80/l/FM5/1TOP5XzT+X8Uzn/1DcJpjb5ny+5/nsDdxPHt3l+482B+fJs5zcvsNgoLDYKi43CYqOw2CgsNgqLjcJio7DYKCw2CouNwmKjsNgoLDYKi43CYqOw2CgsNgqLjcJio7DYKCw2CouNwmKjsNgoLDYKi43CYqOw2CgsNgqLjcJio7DYKCw2CouNwmKjsNgoLDYKi43CYqOw2CgsNgqLjcJio7DYKCw2CouNwmKjsNQoLDUKS43CUqOw1CgsNQpLjcJSo7DUKCw0CguNwkKjsNAoLDQKC43CQqOw0CgsNAoLjcJSo7DUKCw1CkuNwlKjsNQoLDUKS43CUqOw1CgsNQpLjcJSo7DUKCw1CkuNwlKjsNQoLDUKS43CUqOw1CgsNQpLjcJSo7DUKCw1CkuNwlKjsNQoLDUKS43CUqOw1CgsNQpLjcLqvimwXpqF9z75dD/5Ni/QNgrTj67YrCQ2K4nNSmKzktisJDYric1KYrOS2KwkNiuJzUpis5LYrCQ2K4nNSmKzktisJDYric1KYrOS2KwkNiuJzUpis5LYrCQ2K4nNSmKzktisJDYric1KYrOS2KwkNiuJzUpis5LYrCQ2K4nNSmKzktisJDYric1KYrOS2KwkNiuJzUpis5LYqiS2KomtSmKrktiqJLYqia1KYquS2KokNiqJjUpio5LYqCQ2KomNSmKjktioJDYqiY1KYquS2KoktiqJrUpiq5LYqiS2KomtSmKrktiqJLYqia1KYquS2KoktiqJrUpiq5LYqiS2KomtSmKrktiqJLYqia1KYquS2KoktiqJrUpiq5LYqiS2KomtSmKrktiqJLYqia1KYutLDltVxO6qiN1VEburIva/RkX8M87+5gUOu4zDLuOwyzjsMg67jMMu47DLOOwyDruMwy7jsMs47DIOu4zDLuOwyzjsMg67jMMu47DLOOwyDruMwy7jsMs47DIOu4zDLuOwyzjsMg67jMMu47DLOOwyDruMwy7jsMs47DIOu4zDLuOwyzjsMg67jMMu47DLOOwyDruMwy7jsMs47DKOuoyjLuOoyzjqMo66jKMu46jLOOoyjrqMgy7joMs46DIOuoyDLuOgyzjoMg66jIMu46DLOOoyjrqMoy7jqMs46jKOuoyjLuOoyzjqMo66jKMu46jLOOoyjrqMoy7jqMs46jKOuoyjLuOoyzjqMo66jKMu46jLOOoyjrqMoy7jqMs46jKOuoyjLuOoyzjqMo66jKMu46jLOOoyjrqM89JlvDdQk9NwF6frLs6/xl38M6T/sQv4kR+XHchlB3LZgVx2IJcdyGUHctmBXHYglx3IZQdy2YFcdiCXHchlB3LZgVx2IJcdyGUHctmBXHYglx3IZQdy2YFcdiCXHchlB3LZgVx2IJcdyGUHctmBXHYglx3IZQdy2YFcdiCXHchlB3LZgVx2IJcdyGUHctmBXHYglx3IZQdy2YFcdSBXHchVB3LVgVx1IFcdyFUHctWBXHUgFx3IRQdy0YFcdCAXHchFB3LRgVx0IBcdyEUHctWBXHUgVx3IVQdy1YFcdSBXHchVB3LVgVx1IFcdyFUHctWBXHUgVx3IVQdy1YFcdSBXHchVB3LVgVx1IFcdyFUHctWBXHUgVx3IVQdy1YFcdSBXHchVB3LVgVx1IFcdyFUHctWBXHUgVx3IVQdyXzqQ9wZqcpijN1zHfek63vtkPtY8HpUkX0dOHlk8Mnlk8MjBIx8d+fFfzdeRh0duHskZKs5QcYaKM1ScoeIMFWcoOUPJGUrOUHKGkjOUnKHkDCVnKDlDyRkKzlBwhoIzFJyh4AwFZyg4Q8EZCs5QcIYGZ2hwhgZnaPBd4X8s/1t96sZPIy5BnDu+kThQc66fp3+gfqN6CzUzGlL9VejPUKvU4MBoYoZGhuspl3B+avCDip+N/DjmGQBPOniew1Mrns3xBJLnrDxN5pk5LwZ4/cFLHl5l8cKO15K8fOUVMy/SmQswimD6wcCFGQ9jJSZZDM+Y1/l2+y8XiO4FsnuB6l7AUfRgFD0YRQ9G0YNR9GAUPRhFD0bRg1H0YBQ9GEUPRtGDUfRgFD0YRQ9G0YNR9GAUPRhFD0bRg1H0YBQ9GEUPRtGDUfRgFD0YRQ9G0YNR9GAUPRhFD0bRg1H0YBQ9GEUPRtGDUfRgFD0YRQ9G0UNZ61DWOpS1DmWtQ1nrQNY6kLUOZK0DWetA1jqQtQ5lWEMZ1lCGNZRhDWVYQxnWUIY1lGENZVhDGdZQhjWUYQ1lWEMZ1lCGNZRhDWVYQxnWUIY1lGENZVhDGdZQhjWUYQ1lWENR1FAUNbooanRR1OiiqNFFUeNfg6Lm6l5g8wWCYVgwDAuGYcEwLBiGBcOwYBgWDMOCYVgwDAuGYcEwLBiGBcOwYBgWDMOCYVgwDAuGYcEwLBiGBcOwYBgWDMOCYVgwDAsGNsHAJhjYBAObYGATDGyCgU0osAkFNqHAJhTYhAKbQGATCGwCgU0gsAkENoHAJpS7hHKXUO4Syl1CuUsodwnlLqHcJZS7hHKXUO4Syl1CuUsodwnlLqHcJZS7hHKXUO4Syl1CuUsodwnlLqHcJZrHj325wG1ewFt4RjIBSCYAyQQgmQAkE4BkApBMAJIJQDIBSCYAyQQgmQAkE4BkApBMAJIJQDIBSCYAyQQgmQAkE4BkApBMAJIJQDIBSF0xpq4YU1eMqSvG1BVj4ooxccWYuGJMXDEmrhgTV4ypy7DUlUbqZDp1vlg8gSmewBRPYIonMMUTmOIJTPEEpngCUzyBKZ7AFE9giicwxROY4glM8QSmeAJTPIEpnsAUT2CKJzDFE5jiCUzxBKZ4AlM6nSh8aE4u8JML/OQCP7nATy7wkwv85AI/ucBPLvCTC/zkAj+5wE8u8JML/OQCP7nATy7wkwv85AI/ucBPLvCTC/zkAr+4ai6umour5uKqubhqLq6ai6vm4qq5uGourpqLq+biqrm4ai6umour5uKqubhqLq6ai6vm4qq5uGourpqLq+bmqrm5am6umpur5uaqublqbq6am6vm5qq5uWpurpqbq+bmqrm5am6umpur5uaqublqbq6am6vm5qq5uWoermCHK9jhCna4gh2uYIcr2OEKdriCHa5ghyvY4Qp2uIIdrmCHK9jhCna4gh2uYIcr2OEKdriCHa5gfKBq8IGqwQeqBh+oGnygavCBqsEHqgYfqBp8oGrwgarBB6oGH6gafKBq8IGqwQeqBh+oGnygavCBqsEHqgYfqJp8ZkHymQXJZxYkn1mQfGZB8pkFyWcWJJ9ZkHxmQfKZBclnFiSfWZB8ZkHymQXJZxYkn1mQfGZB8pkFyWcWJJ9ZkNywLrlhXXLDuuSGdckN65Ib1iU3rEtuWJfcsC65YV1yw7rkhnXJDeuSG9YlN6xLbliX3LAuuWFdcsO65IZ1ye/QJ79Dn/w+e/L77Mnvsye/z578Pnvy++zJ77Mnv8+e/D578vvsye+zJ7/Pnm++nfBv33z6/rfv/vS3//Xff/jzdz//8v2Pv3365tN/fvfLr//vWnFG7Rt7nF1zjb/+9f8CLLrbOA==" + }, + { -- entities + xadj = 0, yadj = -2, + string = + "0eNrlfdtuZMmx3b8Q8JObB3m/DHQEWLKfD+BjwAaEQaO6Wd1dHrKKLhZHZyz0B+gv9HJ+TF/iKrKbzNrcK3fEypJ0ZL3MoJvslSsiLzsyIjLiD1cfbh/X9/vN9nD1wx+uNh9324erH373h6uHzeft6vb0d4df7tdXP1xtDuu7q3dX29Xd6U8P6+uH+9XH9cOXzf3171e3t1df311ttjfrf7v6wX59J/731w+729X++n61Xd9e+wbEff3x3dV6e9gcNutnRk9/+OX99vHuw3p/HKXD5d3V/e7h+C932xOBI1q1/xTfXf1y9cN1SO6f4tcTwwmeU+H5Vzw/j+dZPMAvqPDcIl5U4cVFeZMKLyziZZYfkLew/ABeVeHlRXmtUQGmZUDLMgQSW8cyRIC6PVKXRdZtkrIMGFmGSOTEMkSAqn1ijVmWuegQ7TJipRHRYW1oqRGi1SG6Ramd0yEuf1KcpxGR1IGWGiFGHeLyh8AlHeLyp8BlmiNCVO6Z5bPRqfZMabaMAfaIasuUuAyo2jGlORstAHQsIGLoWRsRMdR9X8wyYGQBkciJFRkBZtbuRCIXFhAxrKylDRgGwwIChsGytidi6FjjGAG+7pTPj9vrw+N+vz7M2XQvks6iBFZOpLjIWpxIzsTaxAiw2R53R5Dr29XdfR8JyVpYyxBRq6ztCgCjkS2S2l0k0dKmG+LlaPMSIcq2w9Ee6osaRIvjTEawOmKkTT8kY6JNP4SYaY5I6kKbfohjpU0/gJgMzRFInSzNESEqd8jyuZc8bfAixEBzRFJHmiNCVO6ZsoyYaUSkR92escu7MOn2jF022bJuz9jlPZN1e8Yu75ms2zN2efVk1Z7Jr2qMBQCqtkyOy4CqHZPzMqBqw+RXHcYKADMLiBgWVmTEULVbcl1kWAwLCBgW1V7JZRnQsYBIZE86PyDDwAIihqqdUswyYGIBkciqnVLcMmBhAZHIlfRIIYaVdXEhhvV1p+wfN9snoOv9+m672h4eZhDDOeK7q59X+83q+TfCHL6j8asIX7ePls/zqttHy8dvjaTPD66BxAIihrp9tHy41UL6/CBgZQErCkUa0ouIEdlwPRL66e4t8Ub4F2rzMF7mwAkCRq+b49Pq4XC92T6s94fjj7pozxv5ZrNff3z+DTeLHcXYWY2dZJrMLwqYF7/ZKIfVx596HMv0oGw4hlnwIgevavAqVW7rqnmr3TQbhTdCX5Ltq7cN53edSX55pTaR/EWBvVpgqfMs9nempR0C8BSykYaEqkyskwGzzDQkZKl0pFUBZGU9FxBSG9VfvplYZVjfCj48yri+NQJIz3pYsOCBdQNhyEhDQsETLTiEzKxvCQteWOcShqw0SyS4NzRLCGlZHxgU3Ct3j+BU956GhIIHWnAIqdw9VSC4cvcIzkufaZZQ8EKzhJC63eMEp7ou6H/8VAkgLQ2JpkcX+D8THELqdo8TnOq6PIDjB1UAqds9TnC46XIBjl8/AaRq96Rm8ySEWFjEjBBVeyeVZY7RsIiIoy5HIFsBos5FbQRSexYRcgys1JBjZCNOEDGxiFDqzAaxIMfCIkKOVXT3bqNDiJwuXaANYCFyunSBFhFydGxMDHL0bAwLIgY25gQRo8hvkeuL+uZhEhtqgsQyiwgnuLDBJsixsoiIY5Mj8BQbeZ2TXoTkxdubz6Mjs45PXdJAERwUmQ/o5GlAZ56yPx/gdrf9fP1ltb1Z37x48XoDTo7PswHt7IB0xAfqKLJBKYiYmKWSX/exQA10FAiSLmygCiJW0QFWFg4wXb5BFRwOhQ7+QETHIqLjRpdyUAUHWJNz8LQq97sPu/vdvrcm27hQEp0HhYoLJVFYpCRdvu/xzJ2FyVR0RcixqJV8FtIQarnScQO0gquhIdGCq5aOG0CWjoaELD0dioAsAx03gJBRGMRaOExrouMPkFqm4w8QssiktXZB2maffNmsb2+u7/e7/33cwLv9rAf6Oxp442no4EBGz0YtHcKAkE4Wl7VRgMV7siEk78mGkJGGTAgy0YJDSN6TDQXnPdkQsgp3Xv+ccdbQjmFEzfLuawgp3Ctu2bxy1tMSQ8hAu8KhxJF2hUPIRLOEgmeaJYQstHcdCl7pGACCVGYcuLAsuDLjwEUBpDLqI/gsKDMOnOCzoMw4cILPgjLjwAk+C8qMAyc4w5UZB64IWCp3TxVAVhoSCe7pwE9EiJZFDAjRsQE0yNGziJBjYENJkGNkQ0kQkfGx5Zf7Qlj2sTld7kEbW4KkJ96BM/9Dj7c7n7TFRHvXZCToRoqdkfxsxRbGL57z61VLMIQlhalatenyGdrQBtpLgX46hBaRLpuhCHZnoB8PQaknu/N2dZwsgQ88gP05vyzyWOxBvanCZPs+3xlkI0SJY8+FqhwhdWSYPdSi4fZSG/eQHQxRliBeBB+k6EjSRTvFkS3RAzeXLouiCo6UyBbpwYiJRYRSZ+UbDgBTlC7/MA9TqacgUeLyd20GheIpiBDcal9rgJpldMUFuGi0JRfy8qrR1lxIAki66AIWPMkDSG8skMUJz8JnNYK7RpNWsUTUGjXRKvQzC040bf0FwbxnPlUcsuRTxSEk72CHggf5pBftpGdhGMotHEc5CXEWQjJZHst1rnP2pllw3mUIJ0f+ss/FzuTM8i2GdnghvsXSDi8I6YRTn/vf9OJpLxekFmhItMFLpL1cEDLRkFBwXZ54M8uw/mhhEVHVVV3OQ+vmghVNaXch4lhpdyHkSLsLIUdPXc1fXWdOcPergRvk5bj3gqtskxOhcwtN1q9AnESOlM7nQyDTxKdx2K+2D08JRB/WtwfhUE7ka6iFcdxVMEPzQ7BFg9F+8LocjBYRtUXQpWC0zi+I6FhEKLUfyj0W7FhvAjNEBEPY2SHiUFqslwyRlCmnfl7fmfWHwBksrBcIIlYWEa1bSyfaQkSrrIkyPx3y8hBtwqqXFBvxVllpGFF83T5zbuh++quT3L28pVJrhVpIWvpVTT9rhyjqIYpyiLMEX+EYXG0WL7nBeWeUdX7BamxyPjT1VIQknbaeCiBJl2yFZ6LjS7RASL5ECzoVHV+iBUJmbXowmBN14i3AkaYRNjbKbMME4YawcQGH9wYilXu6HitcawOFIyBkoCGh4FGbIjq/Rs6rRdys1/ffWrBN7jy/rG9vd79fSKGE8ischLZzEs5+C7zcv+56H5rZT7JX5a6/OkrnN0BbTqKb6SpYU9o6EkUA6WhItEy1dSSqADLQkFBw3efFC64ayjoSXmDH83UkUI8Uvo4EbIVD15GAvXBo/yCSOtpxj5WV5DH4acYE5UeyEj+Sj/4CQxmJd8zHMOSyshJpou7FtFXPTKIHMBJnpdcVsGjdT3Aj0M/z4UYg0xPbjCqZNpIZSxJT77wkvnuVMsVeMjjOszgak+nxKM/+8353/H/faCp1qsD2uvfue3Pc3ePh/vFwNcvBj5ltpXQYzEvNdjmDy0+XFFKtAJHtcwY3XaJ9kBARbOPPq8O62+ns7eqcPTpRzQ2A77X4uiyRpssY1EhmG6FhxNcd2sa85ui9LKl5IE92BsPUAtm8DCPG0eOo5d05jjZbdBrl1nH5efNw2Hy8/vhlfTx3Pzx++jTrVkzLu1lXXaMKrNPMdlPDiHXsHK69L8Hs/jvPLyFG7J38s65GZfqJERyrxbHt3jCkH90GZ8O8nQzBPihBuw/OtIU2QqHbvGFt0X3eMGQWHrpP1fV7p25RfSLbVmfCb1ipugGidoCBOh6wnylfxwNC8nU80CKofDoyhAxUoq/Mlq9x/NQoolOjY8zXUR+sqVprvoo3q3X9zVrV4T5r1LMkD/e1xTlEqghNMssieFCD8yEP2IeYD3mgJrMDFUYgSz7kAVmqQx52HueSIQ9INl9wEKhkLvQh+oYFU/VlOWCra0NHFpDslo9/QJaOjixASD7+AQUPZFJvKAgxsogVISYysIAR2eAHlrqQgQXMkQ1+QI5u4jddffz4ePd4uzrs9pIs4VCX3fnBWWoMrxpjEgh5Y12Joi6hSuITwV0gFPJ2qNkz0pEZ1hUob34QOhgSikwKOhgiVRMbDIFbzRUdZdPRyfwiqvSKbcIjwhXrDT9YUA9muaoA+UWBkkH4DV/UG77J2OlfZl4yjsNsN7VwnqczFFUJorZowbMxELgzPBsDgR8hz8ZAMEe22SXmWLUNGyFUk6QjdWZHAaqVhiTy67dhFmg4+ljrdJUuuihCGPau1kKMGsQuRbugtajuk4inMum9vE4ASzf4g/ssFNYbh1lWmiWCjLSzFAoerXjhLHwSorucby6IOq+GOB7JsKY36HIkI0TxzntJQkYKHPewNj69njSdgySOunxsUM9iHpc7js5iEc9iXJjFyjod4bZPdLkJuO2TZZ2OmCVdbgKz9OJZqf2vWgrDa8yZ0b2V4uU8nVhnb63aM0eFm61xu6C9TGDGBcxCYC5YfImu0QlXdab9sXCGMu2PxSxpfyxm6dm0bAwZaEgoOO2QzQgxsYgJIdIOWciRzUbHHGmHLOJY2Gx0yLHYMRdvFjhIihtz8YrG8IOuUEFvrjDtnqPwVGaRK6nwvtYkyYQOJdGOyywbgPa1whWqLbgZO0qZn9ZKNv+CnKvRqTlp51GXjlMEh5UuG6cIjpbKltGEx19ly2hijmwZTcyRLaOJOWYypfrbll26KlY2JVyKz6aEhyTBj6gczDJ/IT6bII5mNOpyaGoUIHoWMSPEwEoNESOZe46lTmR+PEbMLCKUurBSQ8RKppFDqZVFX6oA0bKISGpddkwtAkTPZoFjsQObq44hI80SCp5olhAyszniWPDC5ohjyEpDIsGVzXqMF0BaNj1c9kGOqHXPcoK7dABPSyD7JKMaLwIJhAPQFaPh4uMrvuCVkunQFYTkY3ZQ8Mo214SQ3rDNNTGkZZtiYkjHNsXEkLqdZdXGtNftLKu2pr2yUaPA+PXKRo0CC91nOjoEIQsNiTarr3R0CLEMhoZELMW5J03AKc8juZEwDMD0I2EYgBlGwjAAM9IBDjjXdNs5PNeZjplASLrtHBa80jETxFKZReIFZ320bNAkIETHIkaEqOs7lwSIgQ3DQKkjGzSBiPT7Aih1ZjlCxEL278NSV7J/H0TU5WC0iEhqXQpGKzVEdGQDQCy1as9kL0AMLCKUOrJSQ0Rd5CmHc8jFmjtRVyulxYdq1WX5N20T31L2swNUeoAgiWzFbHSxs/YJinAEy48QZSM45Qi5M4KdHcHzIwi1pAsc59oZYHbxZ13gOBe1BIkeQLZ9c6ZVJFxHhY6ty3ZzrvQAsjkohg7ey1ZRYdsgwFN/mvqxRNlrlV48nx0gOx2mSR+LIwTtytQVWClvzrePu+1hv7t9/2H9ZfXzZrc//eLHzf7j4+bwfne/3r5/ct78cNg/rt+9/GC/Xt28f1hvH06//2l1+7Cen8DE5O6ccja+LTyJhjOdLSFcJIXNbYDrurL5FwixUm9tT/9KruhKJXu9PlsTjeHY/AeoGTqPBBl2fB4J5BjZ+DvkmNj4O+SYWUTIsbBSQ47NN3T3YXdK3+50eg2zXeGSMQP14JCwqUkDIVAjQnUjNbswrB+ChToIdAAVMqWri2GWiYaELDMtOGRZ6HggZFnp4B2CnEkNWXRlm9Lfn5auJQaVqaydYqpAck/HGCEkERewZkGZkY5bQpqJjltCyKxuFIznutAhyigJUSZb6SCrbABl0ohd/nAmZ+kYKIQkom2vD/nmV6uy348VHHqOLvWFISMNiRatMvvDCs48ZfaHFZx5yuwPKzjzlNkfdjn8kpTZH7YKIHU5V85qt7zX5Vw5ox7A0xIE2QCBlkA4gDLCLbAElZkhTmC2KTNDnMAEVmaGOIG9qswMccsX0qTMDHFBAGlplkhwbRMhwXdQ20RIcHRrmwgJPjDa/BDBZ1CbHyL4WA/kh0DBC53FAlnyT54RZOSfPCPBdfkhZyknENLRkFBw5ZNnwf3kTQeg4xeo479s81icxOWfUMbI/KeuxfeIctJRLh3KfnYA1SOxFh9SnsTLnh1H37xIvWe759ACbVc6M8CLdDNt/7Og/HYA2XpJllNV0aoqOW6gqh6I9rmj5ZRon7tDiLTPHSLSPneImFmOUI+F5QgRK/IVPxyv+avP675nG4meh7zwiGy2arJnnm3IdswPD+l62hUNmfI+eAgZaUgoOO+Dh5AzBXMedrer/fX9aru+vfbd+mp2HpN3wkOafIk6ND9FvZXOHKmI6Uy6x6JCX5o1A4XOtNZZxswLmPpglhVMFNEuxwpMvSabQwwrMMeKvuyjrQJYYlM5uzBfvD8D0tS55J3gHK36TeUEX9Oq9CRWAVNHQ0KWOm9he9GDLAMNCVnS9zCDEBN9dRQ1wk2VvodByoW+OlrR9ahO7l+H1fanbu2nzgBzl4ls+PuXqL9rNtMk5OYAkyXqGcnkZuOocYpyEWWj2p3tXQksomwCi2gRompv1iDgmNi7EuRIZzxBRF2tnCiQeuz2hYha+HXbr//P4/H/sxewLABuvm+H1cefrj9tbk/tk3Hzn5qn++z5nzxc/fC7P1xttjfr0/fgBfVxv9puHu+un8qHPlzfrT6v/u9mu776+uMsHVQg+eH+dnM4EcN1yJemxvpL1jq3bdVxWDQ323DJUufSQePYrRoulkSswrMaJhA5a5fhGezl16GyaaRfPhm01Ur8sta01UqcAFJZrcQtC66tTyI4DrUVSZKAZaCvJJBlpCEhy6Qy7s6CeDLrzmX6dgL1UGhIqIdK304QpDc0JBLcs0++fUGI7JNvXxGiJx8/Y46BfPyMEdkn31hq9sk3Rszk42csNfvkGyNWFhFJHdgn3xjRkk+VMSL75BvqMbBPvjGi8kWpPxd78S1gDpGNynpRV7Yc6AfhXtRDLYfMvq6WDlCoutblZRTJGJV6smU0Y0Tq6VlxqjE4F43RrqpI1Ro/hQIUsvihN5GyMfRPBWoz6bOQbLM3eAhFttkbPHojGy/HHNl4OUasLEckta4OSg0CRDviVcKwbggWabTNNlH7lL4d1m0r9Ive7NNgV8aap2fYQiJ0nklsWdz7tb/302AHqiowkdNgz/EqMJqb7BfGUYVXYB3DRXzbTjd6N9VfemmfN81husuZztpOs0M61qmFdUzn2MDlwOfYYEg6xwYLngbeZoKDItNtIDFNOscGK7MOPKQEkhfipasNC5iWwEwLmMyzvIVZL0wRzCV9BtmTTyc4ngv9NAhDJhoSLfQml0acUSI4ObTpNALzsFQaErGshn3LA1lW+nkQZunYVzKYJf08CEMGGhIKTj8PwpCJfSWDBc/sKxkMST8PwoLTz4MQZDF0+VgMST8PQrosur41rfM2I0TaMQoRA+u8hYiR5ZgQYiJLVWKOumBCFHCki196Ua+7oitW0ioBUba6+nhNGUefRJR1hUuaVzeYsm5HFQGiakc1RQgxYiCrAmJEXcE7wY7SlSwpToCoa2QoWZ58I0Pp+mQbGULOTllAtqnN50XNF4tjOxlizmwnQ4zIvoaD57WuaEkV7ClHe/chYiL76nlRJ5Di2L6GUnza8w81Qnv+0TrQlTKpgu+2Z7sVYo5jTn8I68cyVDFwIDvuYZ1GsisgRkxkNzuMmMmOexhx0NcO56cOJoVCZGWJEiM4VpUlSozgXA28CxwKzrvAIUveBQ5Z8i5wyDKxjeCEH5GQ2VZ20gF47zhUCl0GEkIqy5cYwfmvLF9iBGdgpKtAYkjP1kLEkMoWa1a7pKKyfJ3gNIiJrbko5ZzZkoiYc2FLImJIuuEahEyGLQyIIS1bcg9DOrbkHoZU+s0FOysp/eaCj3WKNCQ6+BIfeYKQdFE6LHihISHLSguOWGa6KB1kmfmoE4Ski9JhwfmoE2QZWB9yRIg6z3kWICbaxStqgVJ0+Q+tizcgyoV18UIlVBYRcSyGlRpxpFvJYETHOrYhIpfHa1+0KXDJlsA6piFr2nkOEbkeL16lh8w7v0V9eoqyyUuY4o930Xn+0e7xcP94eP+w+bxd3Z5Avr2+/XmzPzyuTlS+s3z6jevfXH19xTuSuHmh+Wmzf1AD7bYPh6NKr34wpz/c3a/2p3k8/tavr77Ozz4dNEDrqaoexrUhA1Gp43KeF3L/y+3uuJ4ePxzlfvpHncT48Kyh7TP8w+nn9vSf/frmKZ/y20ibm5OH3L5Oy+kvWipPv+DM1x/fXX3er9fbN//49LOjbq62683nLx92j0/5mse/fedMrT/OCkVHLdChrktMKYJDXZeXUgSfskpHLaDUiY2sQI6Z5QgRCxtZEW6QykZWRPi1zVbppPa14YqweMaOHH3m/Oizk6Pvz3/809VXsPXn9+8pi+R88/84e3pWXZZNXTaaqy7JpgYB4utBcLP+uLk5VQzd3X3YbJ/U041fBDBp33BeJ+1Jofjj86ur01/c/3L8B4/bw/tP+93d++dyFE9fza+Kc/nkMJlMDTqF62na3l05BHXyELVQFkMl++ZXwYIIOmWnyyv7z3/894up2xoXsVamCnzzjaymPwMzakVjGQNVTofn4I5JbAgRImbdsih/iWXxp8vtwrczjxdJXVgkyb49bL+tmVnE45pMcC0UnZ7r3+Csm+Vd2YAwWnHWsAFhiGhVuj2Lr+qUq/z8/+vSzUd/K/vtM+Rf/gitoXtCHi87M/eO6Snb+3B54YerSUWUza79D2MmAMkdPFZmP0VO/Cl6aze86x95b35hasTgWfF0SgPcxoFOaYCQUfbWpw3pB4SV6CwBSC/T6REQstCJB7I7lrIJnYnaAc5rgS17UZqngwo3ysz5teRYOblI4N474b31rBz/9sdZGelOk3DinaMh0YpXNsUzAgNW2RTPCL7+yqZ4pgoET3QKCGRJ1LO2L5VM/DxmoRM2hFux0kkmSA/K4mRW62Oq3tJJJpCzo3NAIKSnc0AgZBhoi+nDPCbdcBLTpBtOYshMSJ4XJKc7TsJTxdMdJ6Hkge44iSEtDYkE1/a+Exh2gU/SgZCBhoSCRzpXBbJMbETcIcTMRu09QiwsR4hIZxYgqae1xYR1v+I518Xob430MyLInA7IQURVEdoiWAGRbaqFOUY2fAYR6SJhUGq9jVdfCnW4ecjXrXRcaIcvd+unVwnCKIkD7o9XqFn/1pkf5GF9+pXzv9vdr/ffFv3V//qX/36lcdAaL3bQWp2j5OTKlvrsg9DN0STWSvWf/rr6/88q7c+4tAntA6VmoVKb1GKpUutfV6n/6epiflTtIpa6RZtkaqkSy19Xib/6le5gCOKl+fYMmbhySl0IsFb5UZH7LtPj7Bc4RwOua3ch1/U/Xy62NrOU34l93NPQgF86Tt76vd/16eCt4rVb5cxf/bc9xcGpYoV5IDNPD5abEy4YJcq3B61fEBljyrcHrfcSQvIV45CBp3x7YATWfFK60wWXJeXbAyO4ITRvD/a7D7tTBcZuhTg7j+JoBwiU1dPeCihroFlCyEizhILTfgCLEGk/gEGI9AsDyLGyUiOOZeIH+L68uwXGz4kuOwEK7QSAtGknAESks3LRZBU6KxciqluYttd2iJpGUKE+M+uwgDwLiwg5vm6n75aJ2LdgZkoAK3IgpGmLTc6+jGK6FEWxj6BJ+5dRrIsU39iabXFlba7Q48nedD6ZlJ/srO/FmZ8McP7VAdKGU2qjXGzCpFfn5gGCiOLZvWxw3UvvLM2TBiFH8zdYVdfOhhyKTyeX/+K6kl1lsEr0Daxbox4dqzUNwaKzVVky1GQBZKEhofCVvisAyONCNPQtCWPyRTkMxOSrcmBMP5Dm4SoA5W8kWKH8lQRjJponVmimeWJMNj7pCoRkLyauIkhdnnRze+pAWhYSCm71Vd9fHiq7AjAn758/rY6H8ffOFN2Xv+eEF4s8HocK5FCuM5SfHypSEed0Pq8SmRJ5k+ssnExe5TqQhWWJ12JlWUJIZwbuhlh4Xf5nc5XrMHUsJGY52YfPIr/UxENLttWAqGHdcaTA7I3mjaF4IPDZO9nYu9vj0XV76DQxcgWEAtArjs1hfTcUBFtMUqYz+E+PlWSvZdNUy38/r2Wz7NJ61EVmin4mySYqwicI9u9WzcmK1cyV2JQcqTOJxfJAF7JEvB25G+LDGpeuFeFiJdAZ+x2ugcbEPOmc/Q5POmm/wzPTPDFmoXli2V/31ZkF208ld2/buM2iN1nGi+hRj24HsrfRxg10qBErWZlzbCULTJl0bCULLNBX+47siayY5hKEzCxkhpD0xR6zZDOPMWSkL/ZQ8Mg2AOlAsmXNOoJ7svZaB5ItY+aSprjWp9XtA6qu9e1n/1HKazWBnkkeGLDJYlRWQPNTJS7euuKkkNuLsbd4l2wHy8LBGFO+XRl4S9AuCwxZWUi4JXSFe4vkeElWVd2ylM4KmXeOJdp7gUmPey+EKy4F3Q6qtqOfeZ9eYp8/dNZJEl5MkwQsD11o8CTSIa8OV7oMPeaZ6ZgX5pnpmFcH09GYWHZPy57/v6xweUr9kX17cxgJF6L5EBa9aG+CeMEk9u1zB5P5Qp/RxWuxUNBRAk3X2MeaKHSR/Q4mXWW/g0mX2e9g0qm7eI4KHSnvYEb2XXBH9kRjYp6qjjDtfTpCyElnwBOUrKq5CzLTqajS39u7MCRdjY50UZOuE3P446obKjb6AZxKhPbyIh3B0yNE4QhUSK8pfy0eKOpEIeY70SNE2fWnZt0ItSPD/AVCV9q3HQBvNF01X7MMaY1u71b11rLGUpHmrFW4nckuW45HvWTGBKAfIr3MxCVQXd8nM9HFPGakMfHiSOxTqQ7PTGNinsoSbEWCWWlMKLtVlmKKEkxLY0LZrdN8bs8Mb+GhYL2OtWQV2EBjYu3qdpWTHLk20ZiYZ6btRi87Xa2yC3yjXSdcE1U3QumMMC+D4w1VLzIrrLKHtT0XYR7S6VzBRq8Wz8cjhHPrVHuzNX491EtkA1FY1Yl15GPITFuywo3p6BgJJl1p41i4T3RFCVurE64HT2d4Qj14R5muXj2HA1lEmDxvZGIdR9qZjXnyRibmyWcRYZ68kYl51hFvtJ0HDUbvjXZ/+/zHeVks7QyHE4kylQQWM5xIbaZSkvAMtPsbY0baXYsxE213Y33Sj5A6PAttd2OelXYrQ57TQokKS9tKOlseR6CtVAtJ08lLBkLSyUsYMrCQWPBpMs/xTFt9XqvybKzMiJ4m9QjzK1rTVzpSHuoDeepLIRikjD7PsjLrik/5gQuJT/nBkGzJErw2E1uzpAPpR55nYVh9Ke3qXlfbPCadwYPniG0p2JE8c0lT+k2dCjeS/qBKlTk+Xiqzyo6PbDhxolqcbLmRgn4kRyku6RTn9XutLOy1HDgVJb2KIjdS1o+kr1IkOUGzOnGvSs76mdJfi486jFma1kqALp3LxegzFyXfkEI8HZOc0MURSghLSvB6sk5CNuhxvQSXKAUTJbhELZggwSU6VJi0NGllKOcWk+XzY6GpUg2NCXlWPj8WY9I1YTqye5onxqT7KHVkh5vq2y1ywWuHgfW7ykp2a80DHW/QrlIWWbKi1V9pfxzCdMoqS1awo5yyypJNEkz+JSbG5FNHMSafOorniE8dxTwT6dqyBUJmFrJCyEK6tjosKwsJWepKLDWeK8xSV2Kpcbt1IJ0yIB7PQZcvF25acWkpqh86I/j5EZRvpBrHmpXVcnK67JiSpwMsdJY7DsAWVurMLVtYqQNZWEi8T1iXJYZ0huy+gwWniyp1INlniR3BVd+uKjkgdE01q+QYc1F1INSo3q267JYaJKR1JZeTBFJXczlLICvZ/xxDekM2ae9AWrYZcwfTsT2jO5iebaHcwQxsp+cOpjJXJUowlRVvJHvI010zOpj0I94OJu2kwEdzoBtnYJ7KlBEj2e6BdlJ0ZKedFB1MZQq0UVtkIbIdkMUjJLZfsXiEzDYs7qyQwrYX7mBWNvkJY0b6/WsH07KOkQ6mozHh7oh0klYHM5B1gGyCkJF1DmBI2oWRIWRmnQOYJe3CwCwr6xyAkIl2YWBI2oUBdalM/XASSM97RWRFV1zS5WeF6QDjdS3+zmtLuRT5ScrCSUq06yrLXFcps36lJLMAku5tbtIPUFkJsmyAafaLxrsnK7LkMpuQhg+6zCak4VNJVwunhcQsAys4ZsnmonVYsrloHZaZdRFiloWFxCwr63yDkLqqMFXyTdcVhamSb7quJkyVGDO6kjA1SiAD62bEkJFliXVJO0MxZGY9lxiSdoZiXVbWZQtZ6lJNahKw1GWaVMmHQpdoUiWnui7PpEq+kLo0kyr5nNVIO4Gx5Il2VmPMTPPEsheaJ8astAMcYXptBy/B58JrO3g5CaajMbHsnnbUY8xAO+qx7JHGxDwTLTvmyQcUMCYfUMCyV5onxLR01iOW3fIBBcyTrgraweQDClh2OuuxgxnpIIXs9u2VFVas1Y+QaRmycIRCyyAdodJhELgGnaGDN0LNO0uzhivSOZq1UNfO0+EhzDrQ4SE8f5HmiTHpgrYd2TMdHsKYdB5yR3Y6Dxljej6EB2X3dAnbDib7JNwGCOlZyAgh2SfhHZaRhcQsJz73u/XN5vFO9rzcBpHX3ftMvcfOnYHs/EBF6buunSHmz1s/eYE609FbOKCsJqoP+raVkqUUyKenRi+AYx21cNHqMlyq5AAIgXog61+4ilQRZ6ryHParzecvR6WvNrM+x9cR5jFfN/AJ6alOxFzrx9wyPS7Z559dXc2DZj3RukS0iIi+Vk6VMa1qpk+lV7tUm1yWPtXYUv1LFTn6n+eRWzOJ2P7q9OPvR4NooKdWpq/LfX1z/fujmSkY5bs06+3qw+36/c3m4fT/72Hvh/X25v1h9/5JZS8B76c/vT8p8H59Ixf6fzw1rlya/Ui8zM2C0yC6IVx4cCkThVrPBOYaaEzMMxLlw172bQCg0i41ZfpV/kvtLJATEd7mRLy7enxYH8e63e0fnte7pq3qUfaMGqn6Jt9pxphY0E+E+vm0uT2sT2SPVMQK+S/PCnn8dgJstjfrf/v2MRNj/HYWw10Aw6sw/tssRlBh/OssRrwARrqAPrIK419mMYoK47/OYtQLzIs1KpDfNCDNtv0Oplttz3v2FdC+Ap22rW6jJ7zR5wppPDys7z7cbrafr+9WH79stgsvszufAd4hAD8DiX6Y3MGkHyZj2ROf04sxaY+Ag5CBhfQQkvYIYMjEQmLBJw6As9bDsgJzVlYP2k9rUYmHCp2h5l0B02JUt6vjKNeHx/1+3b9Cv0yBRKBMv66E06HLv6uSdZiduuBEm+yEcf0QLlZBGLiJe4AZiYZlbWoN1kKSdu1uc2C8LIKQ9aU3Xp0JDhAuA/4DpN7K9IMzktVb5F3RjVEruBBd0V+dIEDDc7Wj5H4PoOImaW9RD0Gvh6AvStPmJcDNXCK1MqJkZST6co3p8mkUmGdTQKr5DM3eHpcWQRUvgjYG6qaLYLZCsK/yrWYlc195cxJjOhoTTpCycpSVfBYqXce7I3tkn50ZCEm/EcOQdJkbCyHpN2KYJV3mBrEMRlaCvw3SYSw7bpUbUQQwmEndm/vjvXfz8/r6fr/7eXOjKzVtZVU2gxF/zFrb30BtBbrxfdBzj4MVrN9OjJsf6GxvflztP++u97uPPx1vMM9/uN/d9K4wFiiLfu+B9U+/98AboA5dLiCuNUO4UAUz+YLySwuYKesGrH8DMP2A9Y94hhEjGhGNI0Y0YprGzFw8/XkMGK/XwhwCjSWJNMHn4UIlOENjQvmdHYl2gbXVpP5pzGgsuKfaoUsMgSbfT2OTG5HFH5y+h32HKtxcU5NigTweIdPGP547PgEQY9I97LHsAwmAGJNPAISye7oQaYen6oLW9Lk0BULqSngkCSR7PetAJhayQkjVHmq6YXZYzngU7zf36+5trwNXyQskFlpXcqq57WGWuopTLSRm6bggZHOj7PD1ZPPFDmQgzf6OCtgn8x1IWWpL83K6g6V6AdJcHDpKLOQr9A7Lyt9FTJ3HnCkhJb43QEw7YOJDUCfMZAoCTUZdx+rGoscTrs0JixKedB/4Dk/avd7hmdmXeh3MC6RudLRQpd+21uTCeIk247AGEl2KrcOTTtvo8PSsadjBpOvJd2SPbN37DqZuNzmJoZQyW/e+g6n6HOXmcEoQsrLWO4TUJV601juGtCzLDCEdyxJDzrjvDl/W+7vdzS/Hv998fDh+7z7snrJjf+kby17mIshsrcOOEJG9gmDIxFxBMBxb57ADWdSOrJJfVi3ArEMRAgRb2LQmvLsKm9aEFVrYovEdSMaP15rkWH62dnyHbLOLDquPP/Uyj/w5xbNtn+bR08AdIgPGAy+XIGYZuUMg0CpW7dk9QqjbCmNQq+O/6/tJjeSLq23ZFQXL7TzxQh+IQIdNpZ/ddOSnn9105I/01QVjpoHgBlRoHjIRzq4cXrigC3VJwnqh/ecQM2obeRUJpqUvChjT0UZ9gpievnxgzEDzxLJHmifGVF68nET2zN4VAoQs7F0BQ9L3LvRAJFr63oUh7ZgNGwAs+7Id69OyL9s7wgfKhguiYznaOGjOYlWkQWSskUxpJAo1UgasWsS4Dli1ANOZEasWgdrLmJ1wVTh3mQHg4mgLKmnscuF+cYGDFy6+8zJLhAUNjjrHO+qxpuk8+M7yKLTFgHlW2mKAPJWZFi1PjGlpnlB2XaZF+313ENKz33cMGViWHkJGliWGTINJvUb2BjJ6Nvu2o2E2+7ajjsr61iDLNgVD8WGX3UBjm40hDPJjpm7QuIFqVdZGchKyA48ljQeYccCiQZjAQX992F1/3u8etzf9B4IdDWSx88FI1n4Y8igi8as+KwFKHC/kP4QqaBMzNIaQcLMq23y1lLFOeDcixgy0yw9jRponnq4hN6IDoHxwGQvPW4BYeN4ChJjKJA0nOaZ0SRptYN1ASNoAtBCSNgAxJG0AYsFpAxBDJjY9EgtOm3qYZWHtMgxZ2ZRGKHhmG+tglnngeZWxANMNmDkI048YDwg00FmIeI7oRsmdSUp0FiLmyWcMYp6F/gZjzEp/2iBm4R0RUJ+Fd0RgTEdjYtk9HbbBmEHVw/D1u+FrEb2ljrqeVa/fuucB5iET963ztULIzLLEkIVL6eoJXrnEsw6krmdVCwkF16VatIJjSKfPZesJ7Rk4zI4snd5jGFlIzFJclem1ekEPLitLO/SkLRertzBzLs17HWvV11t4VsdyhmgyZrz6glSSZIbCxUeZvs7DkuFiPM/JeBayQkgmXDwzj2kePVLoRYg+FjLuKToPImN98+FivNL4cDHEtJMd+On2cXNzXGifd9tescMX2CLZeXbgtRZm7hhPo3hJW38JT2ln7dnA8RduGpzBoeMPV7hNQzFpPK9s/LjHtdCYeP4q7zo97ZtZUGeI8hLizy1O45AVm+hoQ1MXQ7K62nwNWXmJHrlwkfISvREikcbaw0sUHlYn2/+qx7HQmJhnJdNiOzw9m77bw7Q0JpRdW/6iSjA96QfqYQbSZ9PDjDRPPEeJ5okxM+sGSBCysJAZQlbm3g7hZkpgCOCgwGz5ix5Dx0Jiln60ooavEYIHxseQZV/5EEdrpX8fqjHswVBp7EqdgXoye//F01lYSLzoKnXplb30StFQ6FmIbgcvvlDR0Q0iQ31HP3ClBistTvz6z6t28frbwAquvzEO3NsR8USkLvWmLQ8lWYkPp6js5dhUZv++dZb1XUfcDUDhyVzmPg1nIFnOHyA8T5K7DH+4PZPn+AtPrPNcEMLdgOY10q4BPJWJxsTqzcO1ajoGSZMdovE7YLaVcgcID5FsqNsxnK+5FBEBHpQ+O/pmjDl6GhPzDPQtFmNGGhPLntgrUoCQ9EUO7qFcmGsShqvsnQYKrcsKaVliSPoyBwUvdEANQ3ou+e0Zst+pcne/3r5/ylP61jD1+w/269XN+4f19uH0+88/2j0e7h/VnSwv3xJz2gb211dfgeIm9vFJTlEf6ecls1yqPpWoMwirn07Ooj2oy4Np7yJ4QZHVHHs7aSRiiDBHIoYAs5rBmwJUah0KEyJQdVHHHkNPpj72MNkUzc5aqrxRi3kmMp2yh5nJtM+e7GUkLhcAaKUsRCR4NmwtRyx4Npa2EDEmb8li2T1tIWKevCWLeUbWRHQQUpXm3EJ6CKnaQq1NhyELayZiwWljFkJOM1fu1jebx7tl++HF+ewEtkO2ljVGoXotbd9iXXhVenJrpnmRmZYtlz/mRM6dPFhupKcZ2vbD85cHDDUPMMuAoYYwh9ygANRdyA0KJ8yRblDhSnOOtuDggnB+0DXpAG6grTis3khbcVh+3t2JMS/h7rQQvajsTitiXGmTDs6WN7T5hTGtTvYikJ3u3NLj6VnzC067px8gYMjI2koYMrEsDYTMLEsMWWbNr056gT+XfflNVPZ10MQzEhMvGNYeg1MYaKsR6jtMem2efxyFDjNZ+8gc/AXGEs5xCIOmH56EyD4uaeGNyMeYQxowCi0QIFPJCekVVkJ8xPJExCvzqMAao2IeRx2Rsk53OQ65JYGK4oXC8XD1xwu9X4AHUiTfLxiZoR4jB2+F8LzNilXOv1zAWi6DdwsDcIdeLwDQxJurUAHJ0mY1nKjkaEzMk4/PY568VxNjRpWrqDEvi+wle05kY3hfKiRNNtXoQZbRNunP4BKF1OGE3LdDzVtu2bCOwCJ7RZsza9oWlFSfM+sQxbObx9px9JDDuG38djaBrvnYuHg6Wf9oZzoH/KOlAswBKxVi1jH7EWugGCY5F6+5JslGnTQrPTmKG7BykYqLVwffvy3cXsbNSCKMOU+EsZNEmD//8U9XX59/Y/tsQD6cQO3pP/v1zdUPv3uRcnNzkrC2R/7TX1WTvv74FeiDs5mL7M1yLpd589tZiIn1nnc2C201dzAL6+XuYFaaJ9QnbucjfJCL6TbJNIqM3iJ7SZyru8yL2g5//QPgv7Ojo3h4TtTApE931llkLzydCUo0JuZJP1PuYNLPlDuys+kMBeU4F8N6oTuQlsx6LekfOuu1GMdmvZYsuhIW41mzG892IFNSS4aQccCSzwAzDVjyCDOP2K4ItLB5mR2FVtp+gvOOGist51BintbStg7m6WibDGP6AS9mSQA0jKcelAgpR8ouw1OVKFNB9tKqKIvxWNFC4D/IWAuVxoQ8HZ2ji3k6SyY14AWly2hqIQOE9KwHF7NkUy86kGztx47gtOsaQ2Y+T6JEmTXhylieRJG4CosuwalKVoWnjV6ob2+ZRNUia8RV/GB1g44qRj3WWCOX8FgH2Ur0IxYj4p+GajSUIFncPg+YpYh4GUuDEDIfSfNF1INhdN7giqgHexl/JdxU4TJZFnhv0ZlSZ+7dIKq2U0K4xGBRONhYy0G8sujEi8408y5kPLOFtv4wT95KhZiRt1Kh7JF+SdbBpFOEO7LTL8k6PJWV/ht7WvaUpsRIj+BkezeyGcTFQbXQGRgeQk4+j/vdh939bn8Q2sayronlPNFJXaKszL+DKYm2XKE+Ep1ZAWctXSBp+K2i502/dIGk4bdbaH6Bp3CB1N63g82voHSJPGLpck0DecRwrY7YtgizDCZPeJkDKlUqlQLuiGmClCqVQjiHeSRhGCk8X8iUhcdP5up3FdnDu5LDZfjjmY2XsI6FB1AeLH4OZ5m3ZPHE0sXPO8oeSR8u8+8dS5M29d0WmPViL8Hw1ivUYaHrIGAdFt56xZh0xnBHdrYOQjEQki3oVSyEzGQ3pQ7Lwtq8mCWdOABZ1skXbfXx4+Pd4+0pxi3y/Ure2pRK26aYN531C7VbPZ8va2WXN10Pq9YAxIqILCRWxMRlejI6rr8lRcjUIXv2VupIrq8F5AtFPuvJV2qgpB2ozuT2yA3weS3VJrmn4b1gwMpevNU2/6WPLdjo1fjBq4KFyGHE0EaKjVLhg16xSZ8Pbf/ekhrP86GdqRXlOVaT6XwYvNwKjYkXGp/7CzGtoTGh7HONtlp7wHXvJGBDWN72xcLTr+U6wvO2L+ZJV7Pt8Exsn5cOJtuXNRcIWVjICiEraaNjSMf2ZcWC0zk6HZaOFRyzZHN0OiwDC4lZsjk6HUg2uNERXBfc8BJI3d3RSSAryxLqUpd/07LEkLqC0EECqevuEyWQnmUJp0dZXChKIJXvP8vkEBZcTabJNZohiujKXL2uQmWaDtBY1WAAZU+RdgipmqpyiNJR0/wQwfBDyN54VmXnrTod4B/1QUhV9her08n/x1Uc28kaH4ohkK+a8NcgRBYSs0ys4JhlJv2EHZa6rmgSk0KX41QltpQuxalKrBSiplN9JQowneoBVpierovfOZTutDyA8EMadU/Iol6CyA4glUC37ZJk9WUWEq8+3baTXK1jZSEhyzTgtUZ7JKmKj9aiXmHJsQMIV1jSbcKqlyCwA0glUJYAlnxBtR3PJJ/QpHQOS4yHVGhMLPtIAj7aKFn5qtOr11nW1QE2Tj+Co0cQLuXsaS1JR1DW4JZ4CpQt0ozEoZETzRNj0tGZjux0MlKHZ2VfFmOexdCYkGehX1V3eCpfVUt86srEJCNxVxdllyP9Z61EegTheVaSrnK60Y+Q6RGkWlJWvrd6GSo9glCGqnzyIrkQVmXSoOQqXB3NE+5NZQcyK7lfV2XgVPLt0FYcknw3tRWHJN9NbcUhyTeu0k/HOjzpp2OIpzN8E7IOJp18i2Q/Yjo2YN7BpJNvO5h0AkJHn5GWHWPq9pEzEtkzjYl50hkICULqMhCSAFKXx9OyzBDSsukCGJLOQMCCv3nwtduvPq+vD6vtT7KK0jlJQmPHkYIyNObONbIYGjsOETlhgl6YacS1eTYhi/YloUgZvbj5Jlw/tIGXUplX1eJrOGLi2ZIjeNU69uEmVoizVAb+iwsoS1Th3EDEIgPikx18gnuaz/tuorWOdxjwIiPekeBtjdURTyNuPcT8dU++kp71pbRcHw7fmF5dzaMW9U4/81jglV3HgOEu9HTyaweTd69ABXhHvHMzL1QBaPvS8vUzs3B9S5LL8RE8COvmRon4UcxUNOt05msHM9OYWOxCG7MYs9KYUHZd5zLrJN9HXY5Qa84GCOlYyAghvfRZeJufixkG1jrGkJGFxEKfPzrebW/Wp9fN14fH/YfZipStHexlx8e055jG1I4yoy4U6dy1SZJY0XXcHA0y5tGMDyVUUmQfXOLlE9kHl1j38QI1P7KoyOFxrEvU/BCrn32T2dHVQGWPjDAnu/V293F3t3sqpyCojJeDSBXK7NqaO9qeP3SiMru2TbIRTuhQMgvQfrKM9qtK+28q+CjqlYh145n7a3Ofkkky8lgTTkEkpqCBlTGXl1hu4+pR9sVNmekB0gbb4Ymf6KeQ+BhLg1dCSDabMWDIOPP3QkzW0ZiYp9imPQsVYrygNBfP7oReUtbnOEjUXzexVpNcAxIbPPN3Q8yx0JiYJ383hDyVCSzOCHgW+m7oISR9N3QQkrobYrjAwGGB6XshhkwsJBY6M3c0zJC68mF2lQqhTGZb8OWf1tb5sPl8vb49noj748fpfnfbNfRezCO/XFHsOJRlbxxQ68oKO06g+eoHLjEeYI5ECBBm5OpXv8yZEy2PoRABos5nXeKVwBuCeCmcfbTuf7k9qvbh8cP3WMWcsdZuCGFFkeoMaLB4HH19VPSH3eP+iPC7Uu2PczztbPEdsQt/tsacszNpLhJbDU2QnUlxkeA5iOcpSwrzCxQe5sentWBMPrqA5ebTWjAmH13AslfWjLIIks9rMRDSstk3GNIx1hmGo2xHrEM6roAZ0vYjZjkSVzAiL4e1lEGJKVMGJVZqZR8AQ4Z8ngmG1D2eMwLBnaMrJmZRxcTjEGyrw44i2FaHHUUMNK7JFmAOtDqEmCOtDiFoUZel60xOZfsm4tnRpotIjpCBdBGMSfc47GB6tr9jR5+BMjcxXqTwsMxpxHVpRK5L6zNl02LShcLDSq20PQs5KjNGrMRm0mWMnGWhYExH28gY09OYWJ+BNJJThZCRhSwQMhFWbYdhZuAwu0JatB2GbKFBzPK8CInOSE5ZZiRHS1i1HcqOgYNKjWwtnw4kW8unAxlZlliPaTjtJ4mKgB2HymNdIDtCFNIM76i68jZzqvOYI3kaEHOkHwsEvUw/FjxhievHkorM+kmBNanxgmiyMZgQfkcXdNPADtnM2uodTLq6QUf2ytjWGG+msogED8p8nl6htNXffhnnV2t2jG3dUQLlH+8oIbB2dQeT9pF35KaffnZ40j7yDk/26WfKEJJ1kSeUK2+LYQxhyLBYBg6zY598dhh6FhKzDIyRiuEiA4cF5h5rThaPwEtahh5rdgQYf6yZZI81bWEfa2L2lXWi4wVS7QXSyKUqqe4Sg2XhYAO5GSkDbQ3kZkDMSW7GUy+YblJGRxXzu2koMQPyzmM90VMWzWLhzP4kM6Rqvcy1Be0vZ8xlBshwAHuBPo9vF1KYH8yN3WiwFH4MGOs/0FcQTDbSmJgn9WVty3YJDwNnMnXhwdooFB7WRKXuIhDPGgoPymstfQ/BmHRJn47ctH+/gxloTCw77eCPEDKxkAFCZjJXpwNZmPsNFroycJCdspNQETB0bB2fDks3EIYIojCEc565Q2HK1A0PKzWO32hkD+OcY4v4d5SRWUiskMIGUTDLOv6uN8ne9Tpv6BSkJHu37fxF7nzCRePZrHs8HX7kZocwJ8+pv6xXh6WrWK362Y3EMKUzTJofZujCh1SUL3HTkL2BdtomRmdjBOEYlY75wLUZ3rSfPrvlLe6ws1GEW6zJOKEuT/AoDfSzzg6mpzGx0gMdu8KYVA5XBy9ReFiPeSTOFETuEReoHK6OEri7HVRCpPO3Opj8/Q7KHen8rQ4mf7/Dsgc2d63Dk77feQhJ3+8chKSSuDDDonLqtpiyt5gu0jldUAeJvvJBPUxrgtytbzaPd8tllOwLWcmHPFGZXZi0p6JcQT2HKahWSUteOkIk30h0tEPfAvHCy+yVDUMW8k1ER/DK3mQgy2wGbjIeYFomLvMKK3nq67IbuWAg5p62x7GGA/v8Ai8EbcMayfcn8yldGDOzTyU6snPefozHpXNBmYsZMYutzCwuljJjMWkunQsqVdmxxkosmsKndGG5I23CYkw+pQvLnll700JIOqPLQEgqAAAZViqbC7KrtPMfQ9IZXVhoT1tkRmaRVd7mk70wdfUCEQErFOYCTwGkeqMjBXiyCwuJl+QlIgUy5XtjLjCWEa0pb+zgQwykMW8ukhMmVdlI5MACAUYKOULQeJm0IQvVni7hzLfC1ZMv6BQ3wqkmMz3PzGDpsqoXGEsol6VbBeDFYOm333hfW6qET4cjVQ6yw48q4dPhFyk8zI8u39PBpAtAduSmy/d0MOkCkFh2N/la/r7vgWws7lhEsV3v2HKQsULSTke66El71lH9doT5w9+xRX86aok06So7ZV1irfS3IwC1sPZsLFAtrD3b0XS9gHUWZa99/TT1hRtMOMPe8qZgnH8E6/2IVxSC+ouYgnjZTFNfKFNQuux9vMRgRZSu7n26nN0pXld53BYUj3UBG1e8OStrI+LTJdC2LF7NYeT9bZS9FveBMm47iqCM244SKOO2w48ybjv8aOO2g0kbtx25C5sP0eFJG7cYM9LVzbHs0dK2p+wlio+8dZtk1u20Ic8p8iVzS4pHYEu2fFPS8YA67He37z+sv6x+3uz2p1/8uNl/fNwc3u/u19v3T8G6Hw77x/W7lx/s16ub9w/Hc+30+88/2j0e7h8P7x82n7er2xPI4Zf7E6mfN/vD4+pE5TvLp9+4/s3V11e80yn5QvPTZv+gBtptjx/y7eHqB3P6w939an9ql3L8rV9ffQXLiy1MEzNcsYkM0HcgM5lGEBOELAOGZwaYdcTwBKCJrjKI9ZksG47HCp32BFrY5GfGj3CXJzpptaMKOmn1YkfHp9Xtw9/87HhYnyDk/+i3zwdOc8b8Mzpjpu2QhI8qre0skPlPWaKyezuLI1N5c08Vlr8Rlxj1SZemeMZdqhkq5RdrJtMpvx1MOuUXn0rZKVXbs27mZy/TGcAdVdAvPDuqiCo7rzWSouyin9mcxBgh6TweXY2yhyg+l0s4voJw1bBpjFhXZSCNMSLMkSp1EPQyVepigJqgUxg72g2q7XNmKciepflCVzTo0KYzGjvqvYRzTbhPysC3MQqHqORXPr2uc8HxUnWhr7PvW5AtoGkZIc3XTqisqvMWnH2ahJ+RafbX0oeq+Y54oRCBHsHJviXT7C/uWyIVZ6CJb5zPAvc18zWWIGYZ+Zgg0MvUDooo7TTQCV5nsRIvWjdhWkdoKFYie50Sprlf1HEuHYu/wuMJoosLRQcx4wV04oU6eZMEtl7dfY+UdMcqev1n/iMkFafwQzjhLqn8d04ohZ3s+vvHu3vpEE40gKW/QVYogqNHMCJ7I9iBRM44n3MZ7EBxP4hJNV58hTUidY9Ue4DMM1V4L8qe0AQ7UN8hypKWg6XrO0SURhbcBes7SLeTsxf4JEjHcvxl0wiH4L/EFk4L/yXGUx35z4ksMTpM08w0QxjRnSa4zH+xpBNaiKI2r9sgvMl2ifPDVP58DvPJVWGacqYovhpkiTPBjziyIG83Vnz1iCuhTnuzAkpVCJ5+kBsqxIx0BPDt4ps3ODztzeqogm658G3t/aMmD4Q3iW/CaqlFv3srfUIHWRZfCLx7LshysEOwA0fnfHpACCPJrhB04oH7tDpaOEqPR8hCvYfLmXIhCceMFxxTKmcaNx/F8l3AQS+Wi+4uE1D4MwQ6yzWg8GeIZqjmX5DFcEIcsjMQ9wt46ILMwR8ifS8IAeqevheECDGV94J2ywp9QNMWa6fpu/72zRQegtKRMn3feztE+Prju6vNYX13RPtw+7i+32+On/Xjr6z3D89fp2JDri77mm22/uvX/wcq+FDk" + }, + } +} + +return galaxy_ship diff --git a/space-exploration_0.5.80/space-exploration/scripts/ruins/interburbulator-platform.lua b/space-exploration_0.5.80/space-exploration/scripts/ruins/interburbulator-platform.lua new file mode 100644 index 0000000..9394d22 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/ruins/interburbulator-platform.lua @@ -0,0 +1,88 @@ +local interburbulator_platform = { + name = "interburbulator-platform", + center = {x = 0, y = 0}, + force_name = "ignore", + entities = { -- not blueprintable + ["se-burbulator"] = { + {x = 0, y = -17, orientation = 1, destructible = false} + }, + ["se-interburbulator-projector"] = { + {x = -9.25, y = -9.25, direction = defines.direction.east, destructible = false}, + {x = 9.25, y = -9.25, direction = defines.direction.south, destructible = false}, + {x = 9.25, y = 9.25, direction = defines.direction.west, destructible = false}, + {x = -9.25, y = 9.25, direction = defines.direction.north, destructible = false} + }, + ["se-interburbulator-interface"] = { + --{x = -9, y = -8.25, direction = defines.direction.east}, + --{x = 9, y = -8.25, direction = defines.direction.south}, + {x = 0, y = 10.25, direction = defines.direction.west, destructible = false}, + --{x = -9, y = 10.25, direction = defines.direction.north} + }, + ["se-interburbulator-control"] = { + {x = 0, y = 9.5, direction = defines.direction.west, destructible = false}, + } + }, + clear_entity_areas = { + {{-20,-13},{20,13}}, + {{-13,-20},{13,20}}, + {{-18,-18},{18,18}}, + }, + clear_decorative_areas = { + {{-20,-13},{20,13}}, + {{-13,-20},{13,20}}, + {{-18,-18},{18,18}}, + }, + postbuild = function(surface, ruin_position, ruin) + local ruin_position_center_offset = Util.vectors_delta(ruin.center, ruin_position) + local entities = surface.find_entities_filtered{area = Util.area_add_position({{-21, -21},{21,21}}, ruin_position_center_offset)} + for _, entity in pairs(entities) do + if entity.force.name == "ignore" then + entity.destructible = false + end + if entity.type == "gate" or entity.type == "wall" or entity.name == "se-interburbulator-control" then + entity.force = "friendly" + end + end + local burbulator = surface.find_entity("se-burbulator", Util.vectors_add(ruin_position_center_offset, {x = 0, y = -17})) + burbulator.autopilot_destination = Util.vectors_add(ruin_position_center_offset, {x = 0, y = -11}) + end, + tiles = { + ["volcanic-orange-heat-1"] = {{-19,-9}, {-19,-8}, {-19,-7}, {-19,-6}, {-19,-5}, {-19,-4}, {-19,3}, {-19,4}, {-19,5}, {-19,6}, {-19,7}, {-18,-10}, {-18,-9}, {-18,-8}, {-18,-7}, {-18,-6}, {-18,-5}, {-18,-4}, {-18,3}, {-18,4}, {-18,5}, {-18,6}, {-18,7}, {-18,8}, {-17,-11}, {-17,-10}, {-17,-9}, {-17,-8}, {-17,-7}, {-17,-6}, {-17,-4}, {-17,3}, {-17,5}, {-17,6}, {-17,8}, {-17,9}, {-16,-12}, {-16,-11}, {-16,-10}, {-16,-9}, {-16,-8}, {-16,-7}, {-16,-6}, {-16,-4}, {-16,3}, {-16,5}, {-16,6}, {-16,7}, {-16,8}, {-16,9}, {-16,10}, {-15,-13}, {-15,-11}, {-15,-10}, {-15,-6}, {-15,-4}, {-15,3}, {-15,5}, {-15,7}, {-15,8}, {-15,9}, {-15,10}, {-15,11}, {-14,-14}, {-14,-10}, {-14,-9}, {-14,-8}, {-14,-7}, {-14,-6}, {-14,5}, {-14,7}, {-14,8}, {-14,9}, {-14,11}, {-14,12}, {-13,-15}, {-13,-14}, {-13,-13}, {-13,-12}, {-13,-10}, {-13,-8}, {-13,-6}, {-13,5}, {-13,7}, {-13,11}, {-13,12}, {-13,13}, {-12,-16}, {-12,-15}, {-12,-14}, {-12,-13}, {-12,-12}, {-12,11}, {-12,12}, {-12,13}, {-12,14}, {-11,-17}, {-11,-16}, {-11,-13}, {-11,-12}, {-11,12}, {-11,15}, {-10,-18}, {-10,-17}, {-10,-16}, {-10,-14}, {-10,-13}, {-10,12}, {-10,14}, {-10,15}, {-10,16}, {-9,-19}, {-9,-18}, {-9,-15}, {-9,-14}, {-9,13}, {-9,14}, {-9,15}, {-9,16}, {-9,17}, {-8,-19}, {-8,-18}, {-8,-17}, {-8,-14}, {-8,-13}, {-8,12}, {-8,13}, {-8,16}, {-8,17}, {-8,18}, {-7,-19}, {-7,-18}, {-7,-17}, {-7,-16}, {-7,-14}, {-7,13}, {-7,15}, {-7,16}, {-7,17}, {-7,18}, {-6,-19}, {-6,-18}, {-6,-17}, {-6,-16}, {-6,-15}, {-6,-14}, {-6,-13}, {-6,12}, {-6,13}, {-6,14}, {-6,15}, {-6,16}, {-6,17}, {-6,18}, {-5,-19}, {-5,-18}, {-5,-15}, {-5,14}, {-5,17}, {-5,18}, {-4,-19}, {-4,-18}, {-4,-17}, {-4,14}, {-4,15}, {-4,16}, {-4,17}, {-4,18}, {3,-19}, {3,-18}, {3,-15}, {3,14}, {3,15}, {3,16}, {3,17}, {3,18}, {4,-19}, {4,-18}, {4,-17}, {4,14}, {4,16}, {4,17}, {4,18}, {5,-19}, {5,-18}, {5,-17}, {5,-16}, {5,-15}, {5,-14}, {5,-13}, {5,12}, {5,13}, {5,15}, {5,16}, {5,17}, {5,18}, {6,-19}, {6,-18}, {6,-17}, {6,-16}, {6,-15}, {6,13}, {6,15}, {6,16}, {6,17}, {6,18}, {7,-19}, {7,-18}, {7,-17}, {7,-14}, {7,-13}, {7,12}, {7,13}, {7,16}, {7,17}, {7,18}, {8,-18}, {8,-17}, {8,-16}, {8,-15}, {8,-14}, {8,13}, {8,14}, {8,15}, {8,16}, {8,17}, {9,-17}, {9,-16}, {9,-15}, {9,-14}, {9,-13}, {9,12}, {9,13}, {9,14}, {9,15}, {9,16}, {10,-16}, {10,-15}, {10,-13}, {10,-12}, {10,11}, {10,12}, {10,15}, {11,-15}, {11,-14}, {11,-13}, {11,-12}, {11,-11}, {11,11}, {11,12}, {11,13}, {11,14}, {12,-14}, {12,-13}, {12,-12}, {12,-11}, {12,-8}, {12,-6}, {12,5}, {12,7}, {12,9}, {12,10}, {12,11}, {12,12}, {12,13}, {13,-13}, {13,-12}, {13,-9}, {13,-8}, {13,-7}, {13,-6}, {13,-5}, {13,4}, {13,5}, {13,7}, {13,8}, {13,11}, {13,12}, {14,-12}, {14,-10}, {14,-9}, {14,-6}, {14,-4}, {14,3}, {14,5}, {14,8}, {14,9}, {14,10}, {14,11}, {15,-11}, {15,-10}, {15,-9}, {15,-7}, {15,-6}, {15,-4}, {15,3}, {15,5}, {15,6}, {15,8}, {15,9}, {15,10}, {16,-10}, {16,-9}, {16,-8}, {16,-7}, {16,-6}, {16,-5}, {16,-4}, {16,3}, {16,4}, {16,5}, {16,6}, {16,7}, {16,8}, {16,9}, {17,-9}, {17,-8}, {17,-7}, {17,-6}, {17,-5}, {17,-4}, {17,3}, {17,4}, {17,5}, {17,6}, {17,7}, {17,8}, {18,-8}, {18,-7}, {18,-6}, {18,-5}, {18,-4}, {18,3}, {18,4}, {18,5}, {18,6}, {18,7}, }, + ["stone-path"] = {{-19,-3}, {-19,2}, {-18,-3}, {-18,2}, {-17,-3}, {-17,2}, {-16,-3}, {-16,2}, {-15,-3}, {-15,2}, {-14,-3}, {-14,2}, {-13,-4}, {-13,3}, {-12,-9}, {-12,-8}, {-12,-7}, {-12,-6}, {-12,-5}, {-12,4}, {-12,5}, {-12,6}, {-12,7}, {-12,8}, {-11,-10}, {-11,9}, {-10,-11}, {-10,10}, {-9,-12}, {-9,11}, {-8,-12}, {-8,11}, {-7,-12}, {-7,11}, {-6,-12}, {-6,11}, {-5,-12}, {-5,11}, {-4,-13}, {-4,12}, {-3,-19}, {-3,-18}, {-3,-17}, {-3,-16}, {-3,-15}, {-3,-14}, {-3,13}, {-3,14}, {-3,15}, {-3,16}, {-3,17}, {-3,18}, {-2,-15}, {-2,14}, {-1,-15}, {-1,14}, {0,-15}, {0,14}, {1,-15}, {1,14}, {2,-19}, {2,-18}, {2,-17}, {2,-16}, {2,-15}, {2,-14}, {2,13}, {2,14}, {2,15}, {2,16}, {2,17}, {2,18}, {3,-13}, {3,12}, {4,-12}, {4,11}, {5,-12}, {5,11}, {6,-12}, {6,11}, {7,-12}, {7,11}, {8,-12}, {8,11}, {9,-11}, {9,10}, {10,-10}, {10,9}, {11,-9}, {11,-8}, {11,-7}, {11,-6}, {11,-5}, {11,4}, {11,5}, {11,6}, {11,7}, {11,8}, {12,-4}, {12,3}, {13,-3}, {13,2}, {14,-3}, {14,2}, {15,-3}, {15,2}, {16,-3}, {16,2}, {17,-3}, {17,2}, {18,-3}, {18,2}, }, + ["refined-concrete"] = {{-19,-2}, {-19,-1}, {-19,0}, {-19,1}, {-18,-2}, {-18,-1}, {-18,0}, {-18,1}, {-17,-2}, {-17,-1}, {-17,0}, {-17,1}, {-16,-2}, {-16,-1}, {-16,0}, {-16,1}, {-15,-2}, {-15,-1}, {-15,0}, {-15,1}, {-14,-2}, {-14,-1}, {-14,0}, {-14,1}, {-13,-2}, {-13,-1}, {-13,0}, {-13,1}, {-12,-2}, {-12,-1}, {-12,0}, {-12,1}, {-11,-2}, {-11,-1}, {-11,0}, {-11,1}, {-10,-2}, {-10,-1}, {-10,0}, {-10,1}, {-3,-13}, {-3,-12}, {-3,-11}, {-3,10}, {-3,11}, {-3,12}, {-2,-19}, {-2,-18}, {-2,-17}, {-2,-16}, {-2,-14}, {-2,-13}, {-2,-12}, {-2,-11}, {-2,-10}, {-2,9}, {-2,10}, {-2,11}, {-2,12}, {-2,13}, {-2,15}, {-2,16}, {-2,17}, {-2,18}, {-1,-19}, {-1,-18}, {-1,-17}, {-1,-16}, {-1,-14}, {-1,-13}, {-1,-12}, {-1,-11}, {-1,-10}, {-1,9}, {-1,10}, {-1,11}, {-1,12}, {-1,13}, {-1,15}, {-1,16}, {-1,17}, {-1,18}, {0,-19}, {0,-18}, {0,-17}, {0,-16}, {0,-14}, {0,-13}, {0,-12}, {0,-11}, {0,-10}, {0,9}, {0,10}, {0,11}, {0,12}, {0,13}, {0,15}, {0,16}, {0,17}, {0,18}, {1,-19}, {1,-18}, {1,-17}, {1,-16}, {1,-14}, {1,-13}, {1,-12}, {1,-11}, {1,-10}, {1,9}, {1,10}, {1,11}, {1,12}, {1,13}, {1,15}, {1,16}, {1,17}, {1,18}, {2,-13}, {2,-12}, {2,-11}, {2,10}, {2,11}, {2,12}, {9,-2}, {9,-1}, {9,0}, {9,1}, {10,-2}, {10,-1}, {10,0}, {10,1}, {11,-2}, {11,-1}, {11,0}, {11,1}, {12,-2}, {12,-1}, {12,0}, {12,1}, {13,-2}, {13,-1}, {13,0}, {13,1}, {14,-2}, {14,-1}, {14,0}, {14,1}, {15,-2}, {15,-1}, {15,0}, {15,1}, {16,-2}, {16,-1}, {16,0}, {16,1}, {17,-2}, {17,-1}, {17,0}, {17,1}, {18,-2}, {18,-1}, {18,0}, {18,1}, }, + ["volcanic-orange-heat-2"] = {{-17,-5}, {-17,4}, {-17,7}, {-16,-5}, {-16,4}, {-15,-12}, {-15,-9}, {-15,-8}, {-15,-7}, {-15,-5}, {-15,4}, {-15,6}, {-14,-13}, {-14,-12}, {-14,-11}, {-14,6}, {-14,10}, {-13,-11}, {-13,9}, {-13,10}, {-11,-15}, {-11,-14}, {-11,13}, {-11,14}, {-10,-15}, {-10,13}, {-9,-17}, {-9,-16}, {-8,-15}, {-8,14}, {-8,15}, {-7,-15}, {-7,14}, {-5,-17}, {-5,-16}, {-5,15}, {-5,16}, {-4,-16}, {-4,-15}, {3,-17}, {3,-16}, {4,-16}, {4,-15}, {4,15}, {5,14}, {6,-14}, {6,14}, {7,-16}, {7,-15}, {7,14}, {7,15}, {10,-14}, {10,13}, {10,14}, {12,-10}, {13,-11}, {13,-10}, {13,6}, {13,9}, {13,10}, {14,-11}, {14,-8}, {14,-7}, {14,-5}, {14,4}, {14,6}, {14,7}, {15,-8}, {15,-5}, {15,4}, }, + ["volcanic-orange-heat-3"] = {{-14,-5}, {-14,4}, {-13,-9}, {-13,8}, {-12,-11}, {-12,-10}, {-12,9}, {-12,10}, {-11,-11}, {-11,10}, {-11,11}, {-10,-12}, {-10,11}, {-9,-13}, {-9,12}, {-8,-16}, {-7,12}, {-5,-14}, {-5,13}, {4,-14}, {4,13}, {8,-13}, {8,12}, {9,-12}, {9,11}, {10,-11}, {10,10}, {11,-10}, {11,9}, {11,10}, {12,-9}, {12,8}, {15,7}, }, + ["volcanic-orange-heat-4"] = {{-14,-4}, {-14,3}, {-13,-7}, {-13,-5}, {-13,-3}, {-13,2}, {-13,4}, {-13,6}, {-12,-4}, {-12,-3}, {-12,2}, {-11,-4}, {-11,-3}, {-11,2}, {-11,3}, {-10,-4}, {-10,-3}, {-10,2}, {-10,3}, {-7,-13}, {-5,-13}, {-5,12}, {-4,-14}, {-4,-12}, {-4,-11}, {-4,-10}, {-4,9}, {-4,10}, {-4,13}, {-3,-10}, {-3,9}, {2,-10}, {2,9}, {3,-14}, {3,-12}, {3,-11}, {3,-10}, {3,9}, {3,10}, {3,13}, {4,-13}, {4,12}, {6,-13}, {6,12}, {9,-4}, {9,-3}, {9,2}, {9,3}, {10,-4}, {10,-3}, {10,2}, {10,3}, {11,-4}, {11,-3}, {11,2}, {11,3}, {12,-7}, {12,-5}, {12,-3}, {12,2}, {12,4}, {12,6}, {13,-4}, {13,3}, {-12,3}, {-4,11}, {3,11}, }, + ["refined-hazard-concrete-left"] = {{-11,-9}, {-11,-8}, {-11,-7}, {-11,-6}, {-11,-5}, {-10,-10}, {-10,-9}, {-10,-8}, {-10,-7}, {-10,-6}, {-10,-5}, {-9,-11}, {-9,-10}, {-8,-11}, {-8,-10}, {-7,-11}, {-7,-10}, {-6,-11}, {-6,-10}, {-5,-11}, {-5,-10}, {4,9}, {4,10}, {5,9}, {5,10}, {6,9}, {6,10}, {7,9}, {7,10}, {8,9}, {8,10}, {9,4}, {9,5}, {9,6}, {9,7}, {9,8}, {9,9}, {10,4}, {10,5}, {10,6}, {10,7}, {10,8}, }, + ["refined-hazard-concrete-right"] = {{-11,4}, {-11,5}, {-11,6}, {-11,7}, {-11,8}, {-10,4}, {-10,5}, {-10,6}, {-10,7}, {-10,8}, {-10,9}, {-9,9}, {-9,10}, {-8,9}, {-8,10}, {-7,9}, {-7,10}, {-6,9}, {-6,10}, {-5,9}, {-5,10}, {4,-11}, {4,-10}, {5,-11}, {5,-10}, {6,-11}, {6,-10}, {7,-11}, {7,-10}, {8,-11}, {8,-10}, {9,-10}, {9,-9}, {9,-8}, {9,-7}, {9,-6}, {9,-5}, {10,-9}, {10,-8}, {10,-7}, {10,-6}, {10,-5}, }, + ["tutorial-grid"] = {{-9,-9}, {-9,-8}, {-9,-7}, {-9,-6}, {-9,-5}, {-9,-4}, {-9,-3}, {-9,-2}, {-9,-1}, {-9,0}, {-9,1}, {-9,2}, {-9,3}, {-9,4}, {-9,5}, {-9,6}, {-9,7}, {-9,8}, {-8,-9}, {-8,8}, {-7,-9}, {-7,8}, {-6,-9}, {-6,8}, {-5,-9}, {-5,8}, {-4,-9}, {-4,8}, {-3,-9}, {-3,8}, {-2,-9}, {-2,8}, {-1,-9}, {-1,8}, {0,-9}, {0,8}, {1,-9}, {1,8}, {2,-9}, {2,8}, {3,-9}, {3,8}, {4,-9}, {4,8}, {5,-9}, {5,8}, {6,-9}, {6,8}, {7,-9}, {7,8}, {8,-9}, {8,-8}, {8,-7}, {8,-6}, {8,-5}, {8,-4}, {8,-3}, {8,-2}, {8,-1}, {8,0}, {8,1}, {8,2}, {8,3}, {8,4}, {8,5}, {8,6}, {8,7}, {8,8}, }, + --["lab-dark-1"] + ["out-of-map"] + = {{-8,-8}, {-8,-7}, {-8,-6}, {-8,-5}, {-8,-4}, {-8,-3}, {-8,-2}, {-8,-1}, {-8,0}, {-8,1}, {-8,2}, {-8,3}, {-8,4}, {-8,5}, {-8,6}, {-8,7}, {-7,-8}, {-7,-7}, {-7,-6}, {-7,-5}, {-7,-4}, {-7,-3}, {-7,-2}, {-7,-1}, {-7,0}, {-7,1}, {-7,2}, {-7,3}, {-7,4}, {-7,5}, {-7,6}, {-7,7}, {-6,-8}, {-6,-7}, {-6,-6}, {-6,-5}, {-6,-4}, {-6,-3}, {-6,-2}, {-6,-1}, {-6,0}, {-6,1}, {-6,2}, {-6,3}, {-6,4}, {-6,5}, {-6,6}, {-6,7}, {-5,-8}, {-5,-7}, {-5,-6}, {-5,-5}, {-5,-4}, {-5,-3}, {-5,-2}, {-5,-1}, {-5,0}, {-5,1}, {-5,2}, {-5,3}, {-5,4}, {-5,5}, {-5,6}, {-5,7}, {-4,-8}, {-4,-7}, {-4,-6}, {-4,-5}, {-4,-4}, {-4,-3}, {-4,-2}, {-4,-1}, {-4,0}, {-4,1}, {-4,2}, {-4,3}, {-4,4}, {-4,5}, {-4,6}, {-4,7}, {-3,-8}, {-3,-7}, {-3,-6}, {-3,-5}, {-3,-4}, {-3,-3}, {-3,-2}, {-3,-1}, {-3,0}, {-3,1}, {-3,2}, {-3,3}, {-3,4}, {-3,5}, {-3,6}, {-3,7}, {-2,-8}, {-2,-7}, {-2,-6}, {-2,-5}, {-2,-4}, {-2,-3}, {-2,-2}, {-2,-1}, {-2,0}, {-2,1}, {-2,2}, {-2,3}, {-2,4}, {-2,5}, {-2,6}, {-2,7}, {-1,-8}, {-1,-7}, {-1,-6}, {-1,-5}, {-1,-4}, {-1,-3}, {-1,-2}, {-1,-1}, {-1,0}, {-1,1}, {-1,2}, {-1,3}, {-1,4}, {-1,5}, {-1,6}, {-1,7}, {0,-8}, {0,-7}, {0,-6}, {0,-5}, {0,-4}, {0,-3}, {0,-2}, {0,-1}, {0,0}, {0,1}, {0,2}, {0,3}, {0,4}, {0,5}, {0,6}, {0,7}, {1,-8}, {1,-7}, {1,-6}, {1,-5}, {1,-4}, {1,-3}, {1,-2}, {1,-1}, {1,0}, {1,1}, {1,2}, {1,3}, {1,4}, {1,5}, {1,6}, {1,7}, {2,-8}, {2,-7}, {2,-6}, {2,-5}, {2,-4}, {2,-3}, {2,-2}, {2,-1}, {2,0}, {2,1}, {2,2}, {2,3}, {2,4}, {2,5}, {2,6}, {2,7}, {3,-8}, {3,-7}, {3,-6}, {3,-5}, {3,-4}, {3,-3}, {3,-2}, {3,-1}, {3,0}, {3,1}, {3,2}, {3,3}, {3,4}, {3,5}, {3,6}, {3,7}, {4,-8}, {4,-7}, {4,-6}, {4,-5}, {4,-4}, {4,-3}, {4,-2}, {4,-1}, {4,0}, {4,1}, {4,2}, {4,3}, {4,4}, {4,5}, {4,6}, {4,7}, {5,-8}, {5,-7}, {5,-6}, {5,-5}, {5,-4}, {5,-3}, {5,-2}, {5,-1}, {5,0}, {5,1}, {5,2}, {5,3}, {5,4}, {5,5}, {5,6}, {5,7}, {6,-8}, {6,-7}, {6,-6}, {6,-5}, {6,-4}, {6,-3}, {6,-2}, {6,-1}, {6,0}, {6,1}, {6,2}, {6,3}, {6,4}, {6,5}, {6,6}, {6,7}, {7,-8}, {7,-7}, {7,-6}, {7,-5}, {7,-4}, {7,-3}, {7,-2}, {7,-1}, {7,0}, {7,1}, {7,2}, {7,3}, {7,4}, {7,5}, {7,6}, {7,7}, }, + -- it is better without extra tiles for the walls, but this is needed over water, maybe in the future filter these by water tiles + ["mineral-grey-dirt-2"] = {{-21,-4}, {-21,-3}, {-21,-2}, {-21,-1}, {-21,0}, {-21,1}, {-21,2}, {-21,3}, {-20,-10}, {-20,-9}, {-20,-8}, {-20,-7}, {-20,-6}, {-20,-5}, {-20,-4}, {-20,-3}, {-20,-2}, {-20,-1}, {-20,0}, {-20,1}, {-20,2}, {-20,3}, {-20,4}, {-20,5}, {-20,6}, {-20,7}, {-20,8}, {-19,-11}, {-19,-10}, {-19,8}, {-19,9}, {-18,-12}, {-18,-11}, {-18,9}, {-18,10}, {-17,-13}, {-17,-12}, {-17,10}, {-17,11}, {-16,-14}, {-16,-13}, {-16,11}, {-16,12}, {-15,-15}, {-15,-14}, {-15,12}, {-15,13}, {-14,-16}, {-14,-15}, {-14,13}, {-14,14}, {-13,-17}, {-13,-16}, {-13,14}, {-13,15}, {-12,-18}, {-12,-17}, {-12,15}, {-12,16}, {-11,-19}, {-11,-18}, {-11,16}, {-11,17}, {-10,-20}, {-10,-19}, {-10,17}, {-10,18}, {-9,-20}, {-9,18}, {-9,19}, {-8,-20}, {-8,19}, {-7,-20}, {-7,19}, {-6,-20}, {-6,19}, {-5,-20}, {-5,19}, {-4,-21}, {-4,-20}, {-4,19}, {-4,20}, {-3,-21}, {-3,-20}, {-3,19}, {-3,20}, {-2,-21}, {-2,-20}, {-2,19}, {-2,20}, {-1,-21}, {-1,-20}, {-1,19}, {-1,20}, {0,-21}, {0,-20}, {0,19}, {0,20}, {1,-21}, {1,-20}, {1,19}, {1,20}, {2,-21}, {2,-20}, {2,19}, {2,20}, {3,-21}, {3,-20}, {3,19}, {3,20}, {4,-20}, {4,19}, {5,-20}, {5,19}, {6,-20}, {6,19}, {7,-20}, {7,19}, {8,-20}, {8,-19}, {8,18}, {8,19}, {9,-19}, {9,-18}, {9,17}, {9,18}, {10,-18}, {10,-17}, {10,16}, {10,17}, {11,-17}, {11,-16}, {11,15}, {11,16}, {12,-16}, {12,-15}, {12,14}, {12,15}, {13,-15}, {13,-14}, {13,13}, {13,14}, {14,-14}, {14,-13}, {14,12}, {14,13}, {15,-13}, {15,-12}, {15,11}, {15,12}, {16,-12}, {16,-11}, {16,10}, {16,11}, {17,-11}, {17,-10}, {17,9}, {17,10}, {18,-10}, {18,-9}, {18,8}, {18,9}, {19,-9}, {19,-8}, {19,-7}, {19,-6}, {19,-5}, {19,-4}, {19,-3}, {19,-2}, {19,-1}, {19,0}, {19,1}, {19,2}, {19,3}, {19,4}, {19,5}, {19,6}, {19,7}, {19,8}, {20,-4}, {20,-3}, {20,-2}, {20,-1}, {20,0}, {20,1}, {20,2}, {20,3}, }, + + }, + under_tiles = { + ["volcanic-orange-heat-1"] = { + -- copy all tile positions from above +{-19,-3}, {-19,2}, {-18,-3}, {-18,2}, {-17,-3}, {-17,2}, {-16,-3}, {-16,2}, {-15,-3}, {-15,2}, {-14,-3}, {-14,2}, {-13,-4}, {-13,3}, {-12,-9}, {-12,-8}, {-12,-7}, {-12,-6}, {-12,-5}, {-12,4}, {-12,5}, {-12,6}, {-12,7}, {-12,8}, {-11,-10}, {-11,9}, {-10,-11}, {-10,10}, {-9,-12}, {-9,11}, {-8,-12}, {-8,11}, {-7,-12}, {-7,11}, {-6,-12}, {-6,11}, {-5,-12}, {-5,11}, {-4,-13}, {-4,12}, {-3,-19}, {-3,-18}, {-3,-17}, {-3,-16}, {-3,-15}, {-3,-14}, {-3,13}, {-3,14}, {-3,15}, {-3,16}, {-3,17}, {-3,18}, {-2,-15}, {-2,14}, {-1,-15}, {-1,14}, {0,-15}, {0,14}, {1,-15}, {1,14}, {2,-19}, {2,-18}, {2,-17}, {2,-16}, {2,-15}, {2,-14}, {2,13}, {2,14}, {2,15}, {2,16}, {2,17}, {2,18}, {3,-13}, {3,12}, {4,-12}, {4,11}, {5,-12}, {5,11}, {6,-12}, {6,11}, {7,-12}, {7,11}, {8,-12}, {8,11}, {9,-11}, {9,10}, {10,-10}, {10,9}, {11,-9}, {11,-8}, {11,-7}, {11,-6}, {11,-5}, {11,4}, {11,5}, {11,6}, {11,7}, {11,8}, {12,-4}, {12,3}, {13,-3}, {13,2}, {14,-3}, {14,2}, {15,-3}, {15,2}, {16,-3}, {16,2}, {17,-3}, {17,2}, {18,-3}, {18,2}, + +{-19,-2}, {-19,-1}, {-19,0}, {-19,1}, {-18,-2}, {-18,-1}, {-18,0}, {-18,1}, {-17,-2}, {-17,-1}, {-17,0}, {-17,1}, {-16,-2}, {-16,-1}, {-16,0}, {-16,1}, {-15,-2}, {-15,-1}, {-15,0}, {-15,1}, {-14,-2}, {-14,-1}, {-14,0}, {-14,1}, {-13,-2}, {-13,-1}, {-13,0}, {-13,1}, {-12,-2}, {-12,-1}, {-12,0}, {-12,1}, {-11,-2}, {-11,-1}, {-11,0}, {-11,1}, {-10,-2}, {-10,-1}, {-10,0}, {-10,1}, {-3,-13}, {-3,-12}, {-3,-11}, {-3,10}, {-3,11}, {-3,12}, {-2,-19}, {-2,-18}, {-2,-17}, {-2,-16}, {-2,-14}, {-2,-13}, {-2,-12}, {-2,-11}, {-2,-10}, {-2,9}, {-2,10}, {-2,11}, {-2,12}, {-2,13}, {-2,15}, {-2,16}, {-2,17}, {-2,18}, {-1,-19}, {-1,-18}, {-1,-17}, {-1,-16}, {-1,-14}, {-1,-13}, {-1,-12}, {-1,-11}, {-1,-10}, {-1,9}, {-1,10}, {-1,11}, {-1,12}, {-1,13}, {-1,15}, {-1,16}, {-1,17}, {-1,18}, {0,-19}, {0,-18}, {0,-17}, {0,-16}, {0,-14}, {0,-13}, {0,-12}, {0,-11}, {0,-10}, {0,9}, {0,10}, {0,11}, {0,12}, {0,13}, {0,15}, {0,16}, {0,17}, {0,18}, {1,-19}, {1,-18}, {1,-17}, {1,-16}, {1,-14}, {1,-13}, {1,-12}, {1,-11}, {1,-10}, {1,9}, {1,10}, {1,11}, {1,12}, {1,13}, {1,15}, {1,16}, {1,17}, {1,18}, {2,-13}, {2,-12}, {2,-11}, {2,10}, {2,11}, {2,12}, {9,-2}, {9,-1}, {9,0}, {9,1}, {10,-2}, {10,-1}, {10,0}, {10,1}, {11,-2}, {11,-1}, {11,0}, {11,1}, {12,-2}, {12,-1}, {12,0}, {12,1}, {13,-2}, {13,-1}, {13,0}, {13,1}, {14,-2}, {14,-1}, {14,0}, {14,1}, {15,-2}, {15,-1}, {15,0}, {15,1}, {16,-2}, {16,-1}, {16,0}, {16,1}, {17,-2}, {17,-1}, {17,0}, {17,1}, {18,-2}, {18,-1}, {18,0}, {18,1}, +{-11,-9}, {-11,-8}, {-11,-7}, {-11,-6}, {-11,-5}, {-10,-10}, {-10,-9}, {-10,-8}, {-10,-7}, {-10,-6}, {-10,-5}, {-9,-11}, {-9,-10}, {-8,-11}, {-8,-10}, {-7,-11}, {-7,-10}, {-6,-11}, {-6,-10}, {-5,-11}, {-5,-10}, {4,9}, {4,10}, {5,9}, {5,10}, {6,9}, {6,10}, {7,9}, {7,10}, {8,9}, {8,10}, {9,4}, {9,5}, {9,6}, {9,7}, {9,8}, {9,9}, {10,4}, {10,5}, {10,6}, {10,7}, {10,8}, + +{-11,4}, {-11,5}, {-11,6}, {-11,7}, {-11,8}, {-10,4}, {-10,5}, {-10,6}, {-10,7}, {-10,8}, {-10,9}, {-9,9}, {-9,10}, {-8,9}, {-8,10}, {-7,9}, {-7,10}, {-6,9}, {-6,10}, {-5,9}, {-5,10}, {4,-11}, {4,-10}, {5,-11}, {5,-10}, {6,-11}, {6,-10}, {7,-11}, {7,-10}, {8,-11}, {8,-10}, {9,-10}, {9,-9}, {9,-8}, {9,-7}, {9,-6}, {9,-5}, {10,-9}, {10,-8}, {10,-7}, {10,-6}, {10,-5}, + +{-9,-9}, {-9,-8}, {-9,-7}, {-9,-6}, {-9,-5}, {-9,-4}, {-9,-3}, {-9,-2}, {-9,-1}, {-9,0}, {-9,1}, {-9,2}, {-9,3}, {-9,4}, {-9,5}, {-9,6}, {-9,7}, {-9,8}, {-8,-9}, {-8,8}, {-7,-9}, {-7,8}, {-6,-9}, {-6,8}, {-5,-9}, {-5,8}, {-4,-9}, {-4,8}, {-3,-9}, {-3,8}, {-2,-9}, {-2,8}, {-1,-9}, {-1,8}, {0,-9}, {0,8}, {1,-9}, {1,8}, {2,-9}, {2,8}, {3,-9}, {3,8}, {4,-9}, {4,8}, {5,-9}, {5,8}, {6,-9}, {6,8}, {7,-9}, {7,8}, {8,-9}, {8,-8}, {8,-7}, {8,-6}, {8,-5}, {8,-4}, {8,-3}, {8,-2}, {8,-1}, {8,0}, {8,1}, {8,2}, {8,3}, {8,4}, {8,5}, {8,6}, {8,7}, {8,8}, + +{-8,-8}, {-8,-7}, {-8,-6}, {-8,-5}, {-8,-4}, {-8,-3}, {-8,-2}, {-8,-1}, {-8,0}, {-8,1}, {-8,2}, {-8,3}, {-8,4}, {-8,5}, {-8,6}, {-8,7}, {-7,-8}, {-7,-7}, {-7,-6}, {-7,-5}, {-7,-4}, {-7,-3}, {-7,-2}, {-7,-1}, {-7,0}, {-7,1}, {-7,2}, {-7,3}, {-7,4}, {-7,5}, {-7,6}, {-7,7}, {-6,-8}, {-6,-7}, {-6,-6}, {-6,-5}, {-6,-4}, {-6,-3}, {-6,-2}, {-6,-1}, {-6,0}, {-6,1}, {-6,2}, {-6,3}, {-6,4}, {-6,5}, {-6,6}, {-6,7}, {-5,-8}, {-5,-7}, {-5,-6}, {-5,-5}, {-5,-4}, {-5,-3}, {-5,-2}, {-5,-1}, {-5,0}, {-5,1}, {-5,2}, {-5,3}, {-5,4}, {-5,5}, {-5,6}, {-5,7}, {-4,-8}, {-4,-7}, {-4,-6}, {-4,-5}, {-4,-4}, {-4,-3}, {-4,-2}, {-4,-1}, {-4,0}, {-4,1}, {-4,2}, {-4,3}, {-4,4}, {-4,5}, {-4,6}, {-4,7}, {-3,-8}, {-3,-7}, {-3,-6}, {-3,-5}, {-3,-4}, {-3,-3}, {-3,-2}, {-3,-1}, {-3,0}, {-3,1}, {-3,2}, {-3,3}, {-3,4}, {-3,5}, {-3,6}, {-3,7}, {-2,-8}, {-2,-7}, {-2,-6}, {-2,-5}, {-2,-4}, {-2,-3}, {-2,-2}, {-2,-1}, {-2,0}, {-2,1}, {-2,2}, {-2,3}, {-2,4}, {-2,5}, {-2,6}, {-2,7}, {-1,-8}, {-1,-7}, {-1,-6}, {-1,-5}, {-1,-4}, {-1,-3}, {-1,-2}, {-1,-1}, {-1,0}, {-1,1}, {-1,2}, {-1,3}, {-1,4}, {-1,5}, {-1,6}, {-1,7}, {0,-8}, {0,-7}, {0,-6}, {0,-5}, {0,-4}, {0,-3}, {0,-2}, {0,-1}, {0,0}, {0,1}, {0,2}, {0,3}, {0,4}, {0,5}, {0,6}, {0,7}, {1,-8}, {1,-7}, {1,-6}, {1,-5}, {1,-4}, {1,-3}, {1,-2}, {1,-1}, {1,0}, {1,1}, {1,2}, {1,3}, {1,4}, {1,5}, {1,6}, {1,7}, {2,-8}, {2,-7}, {2,-6}, {2,-5}, {2,-4}, {2,-3}, {2,-2}, {2,-1}, {2,0}, {2,1}, {2,2}, {2,3}, {2,4}, {2,5}, {2,6}, {2,7}, {3,-8}, {3,-7}, {3,-6}, {3,-5}, {3,-4}, {3,-3}, {3,-2}, {3,-1}, {3,0}, {3,1}, {3,2}, {3,3}, {3,4}, {3,5}, {3,6}, {3,7}, {4,-8}, {4,-7}, {4,-6}, {4,-5}, {4,-4}, {4,-3}, {4,-2}, {4,-1}, {4,0}, {4,1}, {4,2}, {4,3}, {4,4}, {4,5}, {4,6}, {4,7}, {5,-8}, {5,-7}, {5,-6}, {5,-5}, {5,-4}, {5,-3}, {5,-2}, {5,-1}, {5,0}, {5,1}, {5,2}, {5,3}, {5,4}, {5,5}, {5,6}, {5,7}, {6,-8}, {6,-7}, {6,-6}, {6,-5}, {6,-4}, {6,-3}, {6,-2}, {6,-1}, {6,0}, {6,1}, {6,2}, {6,3}, {6,4}, {6,5}, {6,6}, {6,7}, {7,-8}, {7,-7}, {7,-6}, {7,-5}, {7,-4}, {7,-3}, {7,-2}, {7,-1}, {7,0}, {7,1}, {7,2}, {7,3}, {7,4}, {7,5}, {7,6}, {7,7}, + } + }, + blueprint_strings = { + { -- walls, heat piptes, gates + string = "0eNqdndtOXEcQRf/lPI+tPn1vfiWyImyPnJHwGMGQxLL494AR56CIpepdb8aIxa6+7K7pS/Fr+XzzcLy9O50vy9Wv5fTlx/l+ufrj13J/+na+vnn+v8vP2+NytZwux+/LYTlff3/+6q/j9eXD7enpO4+H5XT+evx3uVofD+bP3V+Ox5sP/1zf3Lz5wfj46bAcz5fT5XR8+e2/v/j55/nh++fj3RP5nZ//cPdwOj+Bb3/cP/3cj/Pzr3xipfaxHJafT9DxsTw+K/ofKwqsbrCSwBoGK8+zcjBYRWCtBqsKrPTK6u+zmocFurrAigZrbKxv15fjO4DyFnBYvp7ujl9evh/fwa1B0JaNNltXDwwCXaMVadMiTRavarxs8brGU2bCsHqiemDUE8JcKMFSJkyGYk34dXiUkdsKU6FYUz4KU6FYcz4KC0EpFkxYCYo1SaOwFKRXZWkFmDAD0utkTQFg1QMjZc2xqqOy/k5qwgsBahozmG0KESYFx9ii0JIy6pulTBn1Vg+m5IFRmMqof3WK53+8CyueKRQBpoz6bMGaB0ZhTo36LfVETUPDgJoctDkIavKqYUhN1KYyqUkahtTkKYw1enLRMKSmeiyFNCmZTLeUKZmMOSCHRxmEWQRPT9twKABTPtFGCxY9zpkBljzKCDY16vfFnQKcGvV7wkFqqoYhNU1zS1Izl7EECzM0DARVRe8GNVX0blIjejepEb2b1Mx5tzWzatEwpKZqSwCpmRrFu/kTpmsYCmou77amZgue1QNCa4JHV2sMNcGjqzVZW/LAKEwh745bmzWAKXl3sGDVs+JWgDWPMoJ1bV0jzFze3Q1MDxoGmruv2kpCaqKGITVJW0lITdYwpKZoKwmpqRqG1DRtJSE1XcOQmjnvLoaaETQMqBmrtpKQmugxf4Ipfm0NxSH4dbX6bhSPMgpT8Ou4eSMdyQh+HbsF6541Djbbx/Aoo537MGfeyeSsGoc2/8OUfe+f/FDPlH/vO1yoZy75HiZnysH3qYxxTVn4nnUhp2kcjKt77ABVCWO7mn2nnIPuNDwHVfLxYmqLDrPKgWjJQ1uJNrdtspqcuX2TYHKq5AnMmds5KWZrd8lbmDMkb0FOnEtduslZJY/Cdo5THr65AXOmPLya/a4caFaz95UTzVpNWvXQMNLm8YFItO6hJaINKUNAVSloboCcVXMD5ETNDZCTNDdATtbcADlaxsIcLWNhTvPMFKR1D43GdlJy8o0G22trDp55h7TVQ8tEmxrt24cY5iQtx0BO1nIM5BTNnZAj5irIEXMV5Ii5CnLEXIU4RcxVkCPmKsiJmjshJ2k5D3KylvMgZ869zX4vSn5ielFxeTjSXB6OkVq3cHdzbHRBM3iWgUo0l3Ejzbp6u7cQhpc8YwEFZU/vIa1M9x59JH9zsmkh8IZum25kVNGnEahieiQX+ljSPClIoY8lylHmNi+YNj2SOTzPSGZBnpHMtOJpespMlUPMvekpa26ez5dM61IuyTEOKZdEzuRBZjA52l44c7S9cOYkKZdkTpZySeYUKZdkTpVySeY0KZdkTpdySeYMKZdEztyRZjXHz9yZZjX7XTrUrCYteWjkRdKxpulsw+XhlOe6DjYL5bmjae6EqrrmTsgZmjsVeukTNHdCzqq5E3Ki5k7ISZo7ISdr7oQcz/43jcYYPPvfrM2VnzSiefa/SyWa59weta1By3lI1bpqOQ9yxFwFOWKugu0j5irIEXMV5Ii5CnLEXAXbuWs5BnKGlmMQR3moWc3eV15q7q6CNFfegpEmx2Wg0onmuT5b8E1q8XgUaquOO6+sTcxbUFXXOKhnaI6HT3fFvIXiSmLeghxtR5w5Yt6C7SPmLcgpjptKTKuOu0XcVs1DQ23d46WobTiuwVd64Jw9z9gqvbpWzjY3h2FadLw940iTdEmfOVm6Xs/RFY2Deqp0wZ71NI2DerSn96xnaBwseBCkS/aoZ+6Es5gzbu6Ec7tmz3qSxkE9Wbpoz3qKxkE9Vbqxz5zmuLLPtO64Gc9tNTw00qYcc1ZzXCnHnFtWVhPRPI+RaySa5zUy07Kj9gJHWrT1BVVpz5KZ0zQOxqUVlWCO9jIZ42pB45Cepr1NZj1R46Ae7XUy68kaB/Vo75NZT9U4qKdJD52Zoz1R5ri0N8rImTvl3PVQXH11PHZmmueBMsfoeaHM2rJnZUdtntpAlXa8e/XQaDe+e6oDMa07ynVxpFqVIFQ1dyq6c0jPEP0c9Yh+jnpEP0c9op+jHq1WEOvRCk6wnuYoOsQ0T6EgjtFTKYhoKQQPrRDNU/22VqJFjycgLXm0NaJlR21ephVtXmOM2qN95jRHUUCOrjtq77G24ZmbRFPefe7aKFLl3ec+KjrRoqNmM9OSo2oz07KjbjPTiqNCMtM8daAr1c1ePZWgWVufrd/8G2FWDU5KCdyt5jIGGz3loDHYN0erRgnnyWBjnK3hPAtMs0WcZ4HZUXiZu8NTE5q7ozqqJbM2T1Vo1uYpC8204ai+jLTkKQzNtNWztiItOqo5v9A+HV7+4MHVm7+rcFj+Pt7dvwzvvuaWR6ttDbXUx8f/ADsk9Pc=" + } + } +} + +return interburbulator_platform diff --git a/space-exploration_0.5.80/space-exploration/scripts/ruins/persepolis.lua b/space-exploration_0.5.80/space-exploration/scripts/ruins/persepolis.lua new file mode 100644 index 0000000..b8c751c --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/ruins/persepolis.lua @@ -0,0 +1,150 @@ +local persepolis = { + name = "persepolis", + center = {x = 0, y = 0}, + force_name = "ignore", + clear_entity_areas = { + {{-97, -128}, {93, 156}}, + }, + clear_decorative_areas = { + {{-97, -128}, {93, 156}}, + }, + --runtime_area = {left_top = {x = -97, y = -128}, right_bottom = { x = 93, y = 156}}, + --runtime_tick_3600 = function(surface, ruin_data) + --end, + prebuild = function(surface, ruin_position, ruin) + local ruin_position_center_offset = Util.vectors_delta(ruin.center, ruin_position) + surface.request_to_generate_chunks(ruin_position_center_offset, 5) + surface.force_generate_chunk_requests() + end, + postbuild = function(surface, ruin_position, ruin) + local ruin_position_center_offset = Util.vectors_delta(ruin.center, ruin_position) + local area = Util.area_add_position({{-96, -128}, {93, 156}}, ruin_position_center_offset) + local entities = surface.find_entities_filtered{name="iron-wood-chest", area = area} + local arcospheres_to_add = 10 + local zone = Zone.from_surface(surface) + if zone and zone.looted_items and zone.looted_items["se-arcosphere"] then + arcospheres_to_add = arcospheres_to_add - zone.looted_items["se-arcosphere"] + end + if arcospheres_to_add > 0 then + for i = 1, arcospheres_to_add do + local entity = entities[math.random(1, #entities)] + entity.insert({name="se-arcosphere", count=1}) + end + end + local entities = surface.find_entities(area) + local iron + for _, entity in pairs(entities) do + if entity.type == "container" then + local r = math.random(1,9) + if r == 1 then + entity.insert({name="coal", count=10000}) + elseif r == 2 then + entity.insert({name="iron-ore", count=10000}) + elseif r == 3 then + entity.insert({name="copper-ore", count=10000}) + elseif r == 4 then + entity.insert({name="stone", count=10000}) + elseif r == 5 then + entity.insert({name="wood", count=10000}) + elseif r == 6 then + entity.insert({name="iron-plate", count=10000}) + elseif r == 7 then + entity.insert({name="copper-plate", count=10000}) + elseif r == 8 then + entity.insert({name="stone-brick", count=10000}) + elseif r == 9 then + entity.insert({name="raw-fish", count=10000}) + end + entity.force = "capture" + end + if entity.type == "lab" then + entity.insert({name="coal", count=10000}) + entity.insert({name="automation-science-pack", count=10000}) + entity.force = "capture" + entity.backer_name = "Persepolis II" + end + if entity.name == "stone-furnace" then + entity.force = "capture" + iron = not iron + entity.insert({name="coal", count=10000}) + if iron then + entity.insert({name="iron-ore", count=10000}) + else + entity.insert({name="copper-ore", count=10000}) + end + end + if entity.type == "wall" then + if math.random() < 0.03 then + entity.die() + else + entity.destructible = false + end + end + end + local chunks = {} + for x = math.floor(area[1][1]/32), math.ceil(area[2][1]/32) do + for y = math.floor(area[1][2]/32), math.ceil(area[2][2]/32) do + table.insert(chunks, {x=x,y=y}) + end + end + local decorative_names = {} + for decorative_name, prototype in pairs(game.decorative_prototypes) do + if prototype.autoplace_specification and not(string.find(decorative_name, "dune", 1, true) + or string.find(decorative_name, "blue", 1, true) + or string.find(decorative_name, "purple", 1, true) + or string.find(decorative_name, "violet", 1, true) + or string.find(decorative_name, "mauve", 1, true)) then + table.insert(decorative_names, decorative_name) + end + end + surface.regenerate_decorative(decorative_names, chunks) + end, + entities = { -- not blueprintable + ["stone-rubble"] = {{x=-78.55078125, y=-126.2109375, graphics_variation=5}, {x=-80.52734375, y=-124.234375, graphics_variation=7}, {x=-54.41015625, y=-122.5390625, graphics_variation=7}, {x=-52.71875, y=-122.4375, graphics_variation=5}, {x=-85.37109375, y=-119.3125, graphics_variation=8}, {x=-21.5078125, y=-117.39453125, graphics_variation=5}, {x=3.4375, y=-109.1796875, graphics_variation=3}, {x=62.95703125, y=-109.55859375, graphics_variation=1}, {x=-84.421875, y=-107.96875, graphics_variation=6}, {x=-5.41796875, y=-107.56640625, graphics_variation=8}, {x=73.62890625, y=-101.328125, graphics_variation=1}, {x=77.53515625, y=-100.56640625, graphics_variation=2}, {x=84.35546875, y=-102.43359375, graphics_variation=6}, {x=75.53515625, y=-100.48828125, graphics_variation=7}, {x=79.36328125, y=-99.5, graphics_variation=6}, {x=56.51953125, y=-96.70703125, graphics_variation=4}, {x=73.6484375, y=-97.48046875, graphics_variation=4}, {x=79.6875, y=-96.62109375, graphics_variation=5}, {x=60.60546875, y=-95.66015625, graphics_variation=7}, {x=64.61328125, y=-94.7109375, graphics_variation=3}, {x=56.515625, y=-92.63671875, graphics_variation=8}, {x=68.48828125, y=-93.48046875, graphics_variation=6}, {x=73.57421875, y=-92.7578125, graphics_variation=3}, {x=13.61328125, y=-91.375, graphics_variation=8}, {x=23.546875, y=-90.86328125, graphics_variation=2}, {x=55.48828125, y=-90.6171875, graphics_variation=7}, {x=60.44140625, y=-91.55078125, graphics_variation=5}, {x=77.171875, y=-90.625, graphics_variation=2}, {x=-84.4140625, y=-90.46484375, graphics_variation=5}, {x=54.5546875, y=-88.5625, graphics_variation=8}, {x=59.390625, y=-89.3828125, graphics_variation=2}, {x=50.72265625, y=-88.5, graphics_variation=6}, {x=57.734375, y=-88.44921875, graphics_variation=7}, {x=61.75390625, y=-87.62890625, graphics_variation=8}, {x=63.54296875, y=-88.44921875, graphics_variation=4}, {x=65.546875, y=-86.859375, graphics_variation=3}, {x=48.6640625, y=-85.5078125, graphics_variation=1}, {x=55.58203125, y=-85.34375, graphics_variation=2}, {x=58.34375, y=-86.3515625, graphics_variation=3}, {x=62.66796875, y=-85.4375, graphics_variation=1}, {x=69.23828125, y=-84.92578125, graphics_variation=5}, {x=73.75390625, y=-85.484375, graphics_variation=5}, {x=76.421875, y=-84.7421875, graphics_variation=8}, {x=60.421875, y=-84.5234375, graphics_variation=3}, {x=-80.16015625, y=-80.42578125, graphics_variation=6}, {x=31.55078125, y=-80.453125, graphics_variation=6}, {x=38.34765625, y=-78.5078125, graphics_variation=8}, {x=-61.5078125, y=-76.4296875, graphics_variation=6}, {x=50.921875, y=-75.3828125, graphics_variation=2}, {x=81.99609375, y=-73.53125, graphics_variation=8}, {x=-57.15625, y=-70.703125, graphics_variation=4}, {x=69.0234375, y=-71.53125, graphics_variation=8}, {x=70.375, y=-72.2109375, graphics_variation=6}, {x=-78.60546875, y=-70.3203125, graphics_variation=5}, {x=-76.35546875, y=-70.34375, graphics_variation=7}, {x=-74.51953125, y=-70.45703125, graphics_variation=8}, {x=-48.5390625, y=-70.38671875, graphics_variation=5}, {x=-78.48828125, y=-67.46484375, graphics_variation=2}, {x=-76.375, y=-67.27734375, graphics_variation=7}, {x=-74.2890625, y=-67.53125, graphics_variation=8}, {x=64.2734375, y=-66.55859375, graphics_variation=1}, {x=-68.515625, y=-65.08984375, graphics_variation=8}, {x=62.578125, y=-66.53515625, graphics_variation=4}, {x=77.5546875, y=-64.5859375, graphics_variation=8}, {x=79.7265625, y=-64.93359375, graphics_variation=7}, {x=84.55859375, y=-64.96875, graphics_variation=3}, {x=-53.6953125, y=-62.859375, graphics_variation=1}, {x=-45.515625, y=-63.55078125, graphics_variation=3}, {x=-41.5234375, y=-63.6640625, graphics_variation=6}, {x=-39.43359375, y=-63.5, graphics_variation=6}, {x=-37.484375, y=-63.453125, graphics_variation=5}, {x=-31.46875, y=-63.5, graphics_variation=8}, {x=-26.2578125, y=-63.7578125, graphics_variation=4}, {x=-21.91796875, y=-63.33984375, graphics_variation=5}, {x=-12.90625, y=-63.546875, graphics_variation=6}, {x=-7.3828125, y=-63.5703125, graphics_variation=2}, {x=5.18359375, y=-63.40625, graphics_variation=6}, {x=61.828125, y=-63.5625, graphics_variation=7}, {x=61.62109375, y=-62.609375, graphics_variation=6}, {x=64.9609375, y=-63.5859375, graphics_variation=3}, {x=75.46484375, y=-63.484375, graphics_variation=2}, {x=78.640625, y=-64.484375, graphics_variation=4}, {x=84.625, y=-64, graphics_variation=5}, {x=-55.234375, y=-61.55078125, graphics_variation=5}, {x=-53.90234375, y=-61.70703125, graphics_variation=7}, {x=-0.4296875, y=-62.47265625, graphics_variation=5}, {x=17.4609375, y=-59.16796875, graphics_variation=8}, {x=46.71875, y=-60.3828125, graphics_variation=3}, {x=48.58984375, y=-59.4375, graphics_variation=8}, {x=47.5703125, y=-59.46484375, graphics_variation=5}, {x=49.62109375, y=-59.5078125, graphics_variation=5}, {x=64.265625, y=-60.171875, graphics_variation=5}, {x=67.5859375, y=-59.12890625, graphics_variation=4}, {x=75.56640625, y=-60.49609375, graphics_variation=3}, {x=-78.921875, y=-58.5, graphics_variation=4}, {x=-77.875, y=-58.16015625, graphics_variation=6}, {x=-68.26171875, y=-58.5234375, graphics_variation=3}, {x=-65.26953125, y=-58.26953125, graphics_variation=6}, {x=-56.5390625, y=-58.22265625, graphics_variation=6}, {x=-21.63671875, y=-58.37109375, graphics_variation=5}, {x=14.7578125, y=-57.1953125, graphics_variation=3}, {x=51.6796875, y=-58.32421875, graphics_variation=3}, {x=20.640625, y=-55.78515625, graphics_variation=1}, {x=40.84375, y=-55.39453125, graphics_variation=1}, {x=55.2890625, y=-56.0703125, graphics_variation=1}, {x=12.62109375, y=-53.328125, graphics_variation=8}, {x=50.47265625, y=-52.5625, graphics_variation=8}, {x=55.51953125, y=-54.3515625, graphics_variation=8}, {x=-82.34765625, y=-49.328125, graphics_variation=7}, {x=32.60546875, y=-50.01171875, graphics_variation=1}, {x=64.4765625, y=-47.2421875, graphics_variation=1}, {x=61.55078125, y=-44.6328125, graphics_variation=2}, {x=62.5, y=-45.55859375, graphics_variation=5}, {x=62.22265625, y=-46.53515625, graphics_variation=4}, {x=71.51953125, y=-45.39453125, graphics_variation=2}, {x=71.50390625, y=-46.4296875, graphics_variation=3}, {x=14.75, y=-44.3359375, graphics_variation=8}, {x=17.453125, y=-42.8359375, graphics_variation=2}, {x=58.734375, y=-44.0625, graphics_variation=8}, {x=61.24609375, y=-43.6796875, graphics_variation=1}, {x=62.45703125, y=-43.35546875, graphics_variation=3}, {x=62.546875, y=-44.4453125, graphics_variation=5}, {x=71.5390625, y=-43.41015625, graphics_variation=1}, {x=58.734375, y=-40.8125, graphics_variation=7}, {x=62.19921875, y=-42.23828125, graphics_variation=6}, {x=69.6328125, y=-40.7578125, graphics_variation=2}, {x=71.46875, y=-42.32421875, graphics_variation=8}, {x=72.40234375, y=-42.48046875, graphics_variation=2}, {x=73.48828125, y=-42.55078125, graphics_variation=7}, {x=74.5390625, y=-42.46484375, graphics_variation=3}, {x=12.4140625, y=-38.578125, graphics_variation=5}, {x=14.70703125, y=-39.1328125, graphics_variation=3}, {x=17.3046875, y=-38.5546875, graphics_variation=7}, {x=61.64453125, y=-39.2734375, graphics_variation=4}, {x=58.5625, y=-37.29296875, graphics_variation=5}, {x=12.265625, y=-35.40625, graphics_variation=1}, {x=14.6796875, y=-33.4765625, graphics_variation=1}, {x=76.5234375, y=-33.171875, graphics_variation=5}, {x=87.05078125, y=-32.265625, graphics_variation=2}, {x=9.07421875, y=-29.0390625, graphics_variation=6}, {x=79.8359375, y=-30.484375, graphics_variation=8}, {x=-82.36328125, y=-26.67578125, graphics_variation=6}, {x=-71.2734375, y=-25.92578125, graphics_variation=2}, {x=-37.58984375, y=-25.8984375, graphics_variation=6}, {x=12.265625, y=-25.48828125, graphics_variation=8}, {x=63.6640625, y=-24.79296875, graphics_variation=3}, {x=69.5, y=-25.921875, graphics_variation=4}, {x=76.60546875, y=-26.1484375, graphics_variation=4}, {x=76.4921875, y=-24.93359375, graphics_variation=1}, {x=84.50390625, y=-20.69140625, graphics_variation=1}, {x=-84.56640625, y=-18.8984375, graphics_variation=2}, {x=-80.3359375, y=-19.31640625, graphics_variation=3}, {x=-37.25390625, y=-19.2109375, graphics_variation=8}, {x=-27.35546875, y=-19.3125, graphics_variation=5}, {x=81.609375, y=-19.17578125, graphics_variation=5}, {x=12.265625, y=-16.76171875, graphics_variation=5}, {x=66.7734375, y=-17.71484375, graphics_variation=6}, {x=76.50390625, y=-17.3828125, graphics_variation=2}, {x=-84.52734375, y=-15.375, graphics_variation=1}, {x=-64.390625, y=-16.39453125, graphics_variation=1}, {x=-87.3984375, y=-14.28515625, graphics_variation=6}, {x=-74.44140625, y=-13.5703125, graphics_variation=5}, {x=-34.23828125, y=-13.7109375, graphics_variation=6}, {x=-24.41015625, y=-13.5703125, graphics_variation=6}, {x=12.54296875, y=-13.72265625, graphics_variation=3}, {x=61.34375, y=-14.546875, graphics_variation=4}, {x=62.2734375, y=-13.7578125, graphics_variation=2}, {x=63.62109375, y=-13.98828125, graphics_variation=3}, {x=64.78125, y=-14.265625, graphics_variation=7}, {x=70.5703125, y=-12.96875, graphics_variation=8}, {x=74.0078125, y=-14.22265625, graphics_variation=2}, {x=-86.9140625, y=-10.5625, graphics_variation=2}, {x=-82.19140625, y=-10.7109375, graphics_variation=4}, {x=-54.33984375, y=-10.55859375, graphics_variation=5}, {x=61.30078125, y=-11.71484375, graphics_variation=8}, {x=62.2734375, y=-12.50390625, graphics_variation=4}, {x=-22.03515625, y=-10.46875, graphics_variation=7}, {x=74.359375, y=-9.1953125, graphics_variation=4}, {x=84.390625, y=-4.890625, graphics_variation=8}, {x=-71.54296875, y=-4.359375, graphics_variation=7}, {x=12.56640625, y=-2.62109375, graphics_variation=5}, {x=84.27734375, y=-3.8984375, graphics_variation=7}, {x=-33.50390625, y=-2.07421875, graphics_variation=4}, {x=-75.27734375, y=1.296875, graphics_variation=8}, {x=-45.56640625, y=-0.04296875, graphics_variation=3}, {x=-37.4140625, y=0.06640625, graphics_variation=4}, {x=14.609375, y=6.1328125, graphics_variation=1}, {x=62.546875, y=7.4140625, graphics_variation=4}, {x=12.3984375, y=7.96875, graphics_variation=5}, {x=67.7109375, y=8.24609375, graphics_variation=6}, {x=67.29296875, y=11.1796875, graphics_variation=4}, {x=67.5234375, y=9.80859375, graphics_variation=3}, {x=87.6171875, y=9.546875, graphics_variation=8}, {x=12.33203125, y=12.140625, graphics_variation=6}, {x=65.3125, y=11.8671875, graphics_variation=1}, {x=65.46484375, y=13.42578125, graphics_variation=1}, {x=67.67578125, y=12.32421875, graphics_variation=7}, {x=84.95703125, y=11.48828125, graphics_variation=8}, {x=12.47265625, y=13.953125, graphics_variation=6}, {x=67.25390625, y=13.921875, graphics_variation=3}, {x=81.58984375, y=13.921875, graphics_variation=1}, {x=-71.546875, y=16.32421875, graphics_variation=1}, {x=-37.46875, y=16.9765625, graphics_variation=5}, {x=81.53125, y=16.2734375, graphics_variation=7}, {x=65.38671875, y=18.32421875, graphics_variation=3}, {x=-71.48828125, y=21.21875, graphics_variation=4}, {x=-33.65625, y=19.5234375, graphics_variation=2}, {x=-86.68359375, y=23.68359375, graphics_variation=7}, {x=-22.0625, y=23.66015625, graphics_variation=8}, {x=-52.546875, y=27.42578125, graphics_variation=7}, {x=-48.3515625, y=26.46875, graphics_variation=5}, {x=-43.18359375, y=27.4453125, graphics_variation=3}, {x=-41.0703125, y=27.28125, graphics_variation=8}, {x=70.609375, y=26.7421875, graphics_variation=7}, {x=-49.953125, y=29.39453125, graphics_variation=4}, {x=81.109375, y=29.43359375, graphics_variation=6}, {x=81.3359375, y=28.2421875, graphics_variation=2}, {x=12.44140625, y=30.13671875, graphics_variation=3}, {x=67.25, y=31.43359375, graphics_variation=1}, {x=-87.3125, y=31.97265625, graphics_variation=6}, {x=-75.58203125, y=32.90625, graphics_variation=4}, {x=-72.34375, y=31.625, graphics_variation=2}, {x=-36.44921875, y=31.671875, graphics_variation=7}, {x=12.59375, y=32.0078125, graphics_variation=3}, {x=67.5234375, y=32.57421875, graphics_variation=6}, {x=81.5625, y=31.640625, graphics_variation=3}, {x=84.4765625, y=33.16796875, graphics_variation=5}, {x=81.64453125, y=33.5078125, graphics_variation=1}, {x=65.48828125, y=35.47265625, graphics_variation=1}, {x=65.73046875, y=36.74609375, graphics_variation=3}, {x=84.421875, y=35.48828125, graphics_variation=4}, {x=-68.03515625, y=38.48046875, graphics_variation=4}, {x=65.8359375, y=37.8515625, graphics_variation=7}, {x=-84.45703125, y=39.68359375, graphics_variation=5}, {x=12.64453125, y=39.81640625, graphics_variation=6}, {x=65.59375, y=39.75, graphics_variation=4}, {x=-65.46484375, y=42.51953125, graphics_variation=4}, {x=9.65625, y=43.4296875, graphics_variation=7}, {x=87.6484375, y=42.90234375, graphics_variation=5}, {x=0.78515625, y=44.73046875, graphics_variation=3}, {x=9.296875, y=45.35546875, graphics_variation=3}, {x=8.32421875, y=44.37890625, graphics_variation=8}, {x=-86.43359375, y=46.56640625, graphics_variation=1}, {x=6.3046875, y=45.90625, graphics_variation=7}, {x=9.7578125, y=46.66015625, graphics_variation=8}, {x=40.2890625, y=47.28515625, graphics_variation=6}, {x=-79.4375, y=48.37890625, graphics_variation=7}, {x=-13.63671875, y=48.421875, graphics_variation=1}, {x=2.61328125, y=48.90625, graphics_variation=6}, {x=20.4765625, y=47.53515625, graphics_variation=6}, {x=23.04296875, y=47.63671875, graphics_variation=4}, {x=24.52734375, y=47.48046875, graphics_variation=4}, {x=36.61328125, y=47.6015625, graphics_variation=2}, {x=39.0234375, y=49.4375, graphics_variation=6}, {x=38.2890625, y=48.2578125, graphics_variation=6}, {x=39.62109375, y=48.20703125, graphics_variation=7}, {x=84.3828125, y=48.921875, graphics_variation=2}, {x=-86.41015625, y=49.5390625, graphics_variation=3}, {x=-27.3984375, y=50.640625, graphics_variation=3}, {x=-18.34765625, y=51.44140625, graphics_variation=8}, {x=33.74609375, y=49.671875, graphics_variation=5}, {x=43.26953125, y=49.6015625, graphics_variation=7}, {x=42.16796875, y=49.73828125, graphics_variation=3}, {x=-69.32421875, y=51.671875, graphics_variation=1}, {x=-27.3984375, y=52.49609375, graphics_variation=1}, {x=18.9140625, y=52.30078125, graphics_variation=4}, {x=27.3984375, y=52.48046875, graphics_variation=6}, {x=41.6484375, y=52.671875, graphics_variation=4}, {x=47.859375, y=52.984375, graphics_variation=3}, {x=49.5859375, y=52.87890625, graphics_variation=1}, {x=53, y=52.6015625, graphics_variation=5}, {x=68.140625, y=52.328125, graphics_variation=1}, {x=69.625, y=52.4296875, graphics_variation=5}, {x=71.73046875, y=52.2578125, graphics_variation=8}, {x=80.875, y=52.71484375, graphics_variation=3}, {x=-77.4609375, y=54.57421875, graphics_variation=7}, {x=-18.52734375, y=54.078125, graphics_variation=8}, {x=16.9921875, y=54.53125, graphics_variation=3}, {x=-28.45703125, y=56.6328125, graphics_variation=1}, {x=9.68359375, y=56.46875, graphics_variation=3}, {x=29.7421875, y=55.625, graphics_variation=7}, {x=-72.5390625, y=58.59375, graphics_variation=1}, {x=13.734375, y=58.62109375, graphics_variation=6}, {x=44.203125, y=59.38671875, graphics_variation=6}, {x=63.8359375, y=59.33203125, graphics_variation=2}, {x=-86.25, y=60.37890625, graphics_variation=4}, {x=75.46875, y=59.81640625, graphics_variation=8}, {x=84.52734375, y=59.578125, graphics_variation=6}, {x=-82.46484375, y=61.58203125, graphics_variation=6}, {x=-77.39453125, y=62.79296875, graphics_variation=7}, {x=-63.359375, y=62.546875, graphics_variation=7}, {x=79.76171875, y=61.48046875, graphics_variation=6}, {x=-82.39453125, y=63.578125, graphics_variation=5}, {x=-28.36328125, y=64.41015625, graphics_variation=7}, {x=26.0859375, y=64.37109375, graphics_variation=6}, {x=27.3046875, y=65.01953125, graphics_variation=1}, {x=33.65234375, y=64.125, graphics_variation=6}, {x=-82.44140625, y=66.52734375, graphics_variation=4}, {x=27.50390625, y=67.28515625, graphics_variation=6}, {x=33.609375, y=66.81640625, graphics_variation=6}, {x=33.56640625, y=65.5546875, graphics_variation=5}, {x=80.1875, y=65.53515625, graphics_variation=6}, {x=82.421875, y=65.87109375, graphics_variation=1}, {x=82.9609375, y=66.7734375, graphics_variation=1}, {x=-67.640625, y=68.42578125, graphics_variation=5}, {x=-30.578125, y=68.71484375, graphics_variation=7}, {x=-30.37109375, y=67.71875, graphics_variation=6}, {x=-16.76171875, y=69.28515625, graphics_variation=8}, {x=7.68359375, y=68.27734375, graphics_variation=8}, {x=16.0390625, y=68.53125, graphics_variation=7}, {x=18.359375, y=68.5859375, graphics_variation=4}, {x=53.2109375, y=67.69140625, graphics_variation=2}, {x=80.65234375, y=68.2734375, graphics_variation=5}, {x=87.6953125, y=69.09765625, graphics_variation=8}, {x=-30.48828125, y=70.203125, graphics_variation=1}, {x=-23.00390625, y=70.6171875, graphics_variation=8}, {x=-21.8671875, y=70.17578125, graphics_variation=3}, {x=15.64453125, y=69.55078125, graphics_variation=1}, {x=19.3515625, y=70.73828125, graphics_variation=8}, {x=25.51953125, y=69.97265625, graphics_variation=5}, {x=82.44921875, y=69.7734375, graphics_variation=1}, {x=87.6328125, y=70.16015625, graphics_variation=2}, {x=-83.28515625, y=73.28125, graphics_variation=2}, {x=36.30859375, y=73.125, graphics_variation=1}, {x=87.8515625, y=72.41015625, graphics_variation=7}, {x=-80.3359375, y=74.046875, graphics_variation=4}, {x=-83.40234375, y=75.48828125, graphics_variation=4}, {x=40.24609375, y=76.41015625, graphics_variation=6}, {x=45.36328125, y=76.4921875, graphics_variation=4}, {x=44.17578125, y=76.37890625, graphics_variation=7}, {x=54.57421875, y=76.4609375, graphics_variation=1}, {x=58.7265625, y=76.28125, graphics_variation=1}, {x=65.41796875, y=76.58203125, graphics_variation=4}, {x=67.1171875, y=76.41015625, graphics_variation=8}, {x=77.0234375, y=76.6640625, graphics_variation=7}, {x=-34.390625, y=78.46484375, graphics_variation=1}, {x=-27.6484375, y=78.796875, graphics_variation=7}, {x=-34.49609375, y=79.6953125, graphics_variation=1}, {x=-22.46875, y=80.640625, graphics_variation=8}, {x=84.7109375, y=81.30859375, graphics_variation=3}, {x=76.7265625, y=81.91015625, graphics_variation=6}, {x=78.796875, y=82.9765625, graphics_variation=8}, {x=84.5390625, y=83.0625, graphics_variation=1}, {x=-22.390625, y=83.6171875, graphics_variation=6}, {x=36.38671875, y=85.3515625, graphics_variation=1}, {x=43.6875, y=85.2578125, graphics_variation=5}, {x=-57.328125, y=87.40234375, graphics_variation=5}, {x=27.35546875, y=86.9453125, graphics_variation=4}, {x=44.29296875, y=86.74609375, graphics_variation=7}, {x=60.4375, y=85.6640625, graphics_variation=6}, {x=75.96484375, y=87.4296875, graphics_variation=7}, {x=84.47265625, y=87.140625, graphics_variation=2}, {x=-55.4140625, y=87.546875, graphics_variation=4}, {x=5.53125, y=89.28515625, graphics_variation=4}, {x=5.78125, y=87.62890625, graphics_variation=5}, {x=62.69921875, y=88.71875, graphics_variation=3}, {x=78.59765625, y=88.84375, graphics_variation=6}, {x=87.52734375, y=88.0390625, graphics_variation=3}, {x=-57.3515625, y=89.62890625, graphics_variation=7}, {x=-55.4140625, y=89.546875, graphics_variation=5}, {x=36.6484375, y=89.74609375, graphics_variation=6}, {x=45.5, y=89.671875, graphics_variation=7}, {x=82.84375, y=89.484375, graphics_variation=6}, {x=83.09765625, y=90.6171875, graphics_variation=7}, {x=84.1171875, y=90.67578125, graphics_variation=4}, {x=84.23046875, y=89.76953125, graphics_variation=1}, {x=-33.33203125, y=91.44921875, graphics_variation=3}, {x=4.0625, y=92.59765625, graphics_variation=2}, {x=33.6953125, y=92.89453125, graphics_variation=6}, {x=64.3125, y=92.7421875, graphics_variation=3}, {x=83.2109375, y=91.9765625, graphics_variation=5}, {x=-81.3359375, y=94.60546875, graphics_variation=4}, {x=33.2734375, y=93.984375, graphics_variation=6}, {x=33.57421875, y=95.34765625, graphics_variation=3}, {x=82.671875, y=93.90234375, graphics_variation=4}, {x=7.5078125, y=95.84765625, graphics_variation=6}, {x=48.703125, y=95.66015625, graphics_variation=8}, {x=60.578125, y=96.9140625, graphics_variation=3}, {x=-12.3046875, y=97.48046875, graphics_variation=6}, {x=5.625, y=98.31640625, graphics_variation=3}, {x=33.359375, y=97.6015625, graphics_variation=5}, {x=33.609375, y=98.73828125, graphics_variation=1}, {x=46.1484375, y=99.328125, graphics_variation=1}, {x=60.46484375, y=98.2421875, graphics_variation=4}, {x=-58.3125, y=99.63671875, graphics_variation=4}, {x=-42.5625, y=100.453125, graphics_variation=4}, {x=25.2890625, y=99.72265625, graphics_variation=8}, {x=52.32421875, y=100.3046875, graphics_variation=5}, {x=-50.5625, y=103.16796875, graphics_variation=8}, {x=68.5859375, y=102.9296875, graphics_variation=6}, {x=84.73828125, y=101.5703125, graphics_variation=1}, {x=16.6015625, y=104.87890625, graphics_variation=6}, {x=87.3359375, y=103.93359375, graphics_variation=2}, {x=87.48828125, y=105.3828125, graphics_variation=7}, {x=-84.6171875, y=106.5390625, graphics_variation=8}, {x=-73.33203125, y=106.61328125, graphics_variation=1}, {x=-68.48828125, y=105.45703125, graphics_variation=5}, {x=-44.671875, y=107.37109375, graphics_variation=6}, {x=-30.41796875, y=105.87890625, graphics_variation=6}, {x=5.3515625, y=106.34765625, graphics_variation=6}, {x=21.5078125, y=107.25390625, graphics_variation=3}, {x=36.43359375, y=107.390625, graphics_variation=2}, {x=37.875, y=106.796875, graphics_variation=8}, {x=50.0234375, y=106.25390625, graphics_variation=4}, {x=56.80078125, y=106.578125, graphics_variation=3}, {x=57.97265625, y=106.546875, graphics_variation=8}, {x=74.4375, y=106.55078125, graphics_variation=1}, {x=78.484375, y=106.58203125, graphics_variation=3}, {x=5.2578125, y=107.59765625, graphics_variation=3}, {x=16.0078125, y=107.56640625, graphics_variation=6}, {x=29.3203125, y=108.25, graphics_variation=2}, {x=36.88671875, y=108.63671875, graphics_variation=2}, {x=68.53125, y=108.4765625, graphics_variation=8}, {x=87.6015625, y=109.078125, graphics_variation=2}, {x=5.4765625, y=110.03515625, graphics_variation=6}, {x=29.2890625, y=110.91015625, graphics_variation=2}, {x=33.30859375, y=110.171875, graphics_variation=1}, {x=33.48046875, y=111.078125, graphics_variation=4}, {x=84.23046875, y=110.55859375, graphics_variation=4}, {x=87.6015625, y=110.18359375, graphics_variation=2}, {x=-62.41015625, y=113.34765625, graphics_variation=5}, {x=5.2890625, y=113.19140625, graphics_variation=4}, {x=5.2890625, y=112.09765625, graphics_variation=1}, {x=29.3203125, y=112.91796875, graphics_variation=7}, {x=29.515625, y=111.81640625, graphics_variation=4}, {x=33.734375, y=112.01171875, graphics_variation=7}, {x=-61.5625, y=114.46484375, graphics_variation=5}, {x=-61.3515625, y=113.50390625, graphics_variation=3}, {x=-62.5390625, y=114.265625, graphics_variation=8}, {x=17.703125, y=115.3671875, graphics_variation=2}, {x=36.3203125, y=113.87109375, graphics_variation=8}, {x=72.54296875, y=114.3515625, graphics_variation=1}, {x=82.65625, y=114.3125, graphics_variation=6}, {x=-80.47265625, y=115.4765625, graphics_variation=6}, {x=-72.125, y=115.66796875, graphics_variation=4}, {x=-55.75, y=117.24609375, graphics_variation=6}, {x=-50.01953125, y=115.46875, graphics_variation=6}, {x=-38.68359375, y=115.60546875, graphics_variation=6}, {x=-33.21875, y=115.625, graphics_variation=1}, {x=7.015625, y=116.78515625, graphics_variation=7}, {x=54.6640625, y=115.9296875, graphics_variation=1}, {x=59.734375, y=116.30859375, graphics_variation=7}, {x=74.58203125, y=115.9921875, graphics_variation=8}, {x=-80.453125, y=117.51953125, graphics_variation=2}, {x=7.10546875, y=119.03515625, graphics_variation=8}, {x=7.7578125, y=118.12890625, graphics_variation=6}, {x=29.3515625, y=118.18359375, graphics_variation=7}, {x=38.171875, y=119.26953125, graphics_variation=3}, {x=91.0703125, y=119.34765625, graphics_variation=3}, {x=-79.0234375, y=120.375, graphics_variation=1}, {x=3.4453125, y=120.81640625, graphics_variation=6}, {x=5.34375, y=121.078125, graphics_variation=1}, {x=7.19921875, y=120.73046875, graphics_variation=1}, {x=6.109375, y=120.08203125, graphics_variation=6}, {x=15.5625, y=119.94921875, graphics_variation=7}, {x=25.3828125, y=119.58984375, graphics_variation=3}, {x=27.7578125, y=120.68359375, graphics_variation=2}, {x=52.50390625, y=121.3125, graphics_variation=3}, {x=56.625, y=120.890625, graphics_variation=5}, {x=84.58203125, y=120.51171875, graphics_variation=1}, {x=83.67578125, y=120.3984375, graphics_variation=4}, {x=5.25, y=122.0078125, graphics_variation=8}, {x=36.515625, y=121.734375, graphics_variation=6}, {x=36.57421875, y=122.83203125, graphics_variation=8}, {x=84.49609375, y=121.55859375, graphics_variation=1}, {x=91.640625, y=121.75, graphics_variation=1}, {x=5.3828125, y=124.06640625, graphics_variation=5}, {x=44.78125, y=124.640625, graphics_variation=4}, {x=-65.41015625, y=127.4375, graphics_variation=1}, {x=-40.48046875, y=127.203125, graphics_variation=7}, {x=-39.30078125, y=126.3828125, graphics_variation=5}, {x=-38.09765625, y=127.0234375, graphics_variation=6}, {x=49.11328125, y=126.140625, graphics_variation=4}, {x=76.6953125, y=127.2578125, graphics_variation=3}, {x=-68.640625, y=129.20703125, graphics_variation=8}, {x=-62.3671875, y=128.62890625, graphics_variation=8}, {x=-39.5078125, y=127.6640625, graphics_variation=4}, {x=-36.2265625, y=127.6875, graphics_variation=4}, {x=-26.92578125, y=130.34765625, graphics_variation=3}, {x=0.609375, y=130.05859375, graphics_variation=7}, {x=2.890625, y=130.93359375, graphics_variation=1}, {x=5.953125, y=130.83984375, graphics_variation=5}, {x=29.7734375, y=129.8828125, graphics_variation=1}, {x=33.55859375, y=130.98046875, graphics_variation=1}, {x=-27.2265625, y=132.85546875, graphics_variation=4}, {x=-26.6015625, y=131.7734375, graphics_variation=5}, {x=33.4921875, y=133.015625, graphics_variation=5}, {x=33.6953125, y=131.91015625, graphics_variation=2}, {x=36.26171875, y=132.99609375, graphics_variation=4}, {x=52.5546875, y=131.5546875, graphics_variation=2}, {x=-53.234375, y=135.24609375, graphics_variation=8}, {x=-46.265625, y=135.24609375, graphics_variation=6}, {x=-44.453125, y=135.37109375, graphics_variation=6}, {x=-27.296875, y=133.78125, graphics_variation=5}, {x=-7.02734375, y=135.3203125, graphics_variation=5}, {x=33.62890625, y=134.32421875, graphics_variation=5}, {x=60.6015625, y=133.6015625, graphics_variation=4}, {x=72.40234375, y=133.625, graphics_variation=7}, {x=-45.359375, y=136.02734375, graphics_variation=8}, {x=-39.140625, y=137.33984375, graphics_variation=1}, {x=-29.890625, y=136.18359375, graphics_variation=3}, {x=-21.33984375, y=136.84765625, graphics_variation=4}, {x=-18.75390625, y=137.3125, graphics_variation=8}, {x=-19.296875, y=135.50390625, graphics_variation=7}, {x=-17.4921875, y=136.59765625, graphics_variation=8}, {x=-12.671875, y=136.52734375, graphics_variation=2}, {x=0.88671875, y=135.53125, graphics_variation=4}, {x=-0.54296875, y=135.63671875, graphics_variation=5}, {x=10.640625, y=137.40234375, graphics_variation=2}, {x=11.203125, y=135.77734375, graphics_variation=1}, {x=12.109375, y=135.80859375, graphics_variation=5}, {x=13.265625, y=135.90234375, graphics_variation=8}, {x=17.703125, y=136.08984375, graphics_variation=4}, {x=21.953125, y=136.80859375, graphics_variation=8}, {x=62.5234375, y=136.39453125, graphics_variation=3}, {x=63.4921875, y=136.26953125, graphics_variation=4}, {x=70.48828125, y=137.1328125, graphics_variation=8}, {x=87.3359375, y=135.61328125, graphics_variation=5}, {x=87.48828125, y=137.0625, graphics_variation=1}, {x=-41.171875, y=137.68359375, graphics_variation=8}, {x=-22.28515625, y=137.54296875, graphics_variation=1}, {x=-17.23828125, y=137.66796875, graphics_variation=7}, {x=20.765625, y=137.68359375, graphics_variation=3}, {x=53.66015625, y=137.5, graphics_variation=5}, {x=70.7734375, y=138.6875, graphics_variation=2}, {x=-54.125, y=141.12109375, graphics_variation=5}, {x=-41.796875, y=141.1875, graphics_variation=7}, {x=7.578125, y=140.44921875, graphics_variation=3}, {x=19.56640625, y=140.7421875, graphics_variation=8}, {x=44.5546875, y=140.80078125, graphics_variation=2}, {x=60.7109375, y=140.45703125, graphics_variation=1}, {x=63.0546875, y=140.67578125, graphics_variation=7}, {x=70.26171875, y=140.69921875, graphics_variation=6}, {x=80.69921875, y=140.77734375, graphics_variation=2}, {x=59.3359375, y=142.17578125, graphics_variation=4}, {x=76.6875, y=142.21484375, graphics_variation=3}, {x=-21.3671875, y=146.40234375, graphics_variation=2}, {x=73.72265625, y=145.5859375, graphics_variation=2}, {x=-16.421875, y=148.28125, graphics_variation=6}, {x=-7.7265625, y=148.55859375, graphics_variation=1}, {x=53.078125, y=151.1484375, graphics_variation=1}, {x=62.5625, y=150.84375, graphics_variation=3}, {x=63.58984375, y=151.30078125, graphics_variation=8}, {x=80.4921875, y=151.30078125, graphics_variation=6}, {x=91.578125, y=150.73046875, graphics_variation=8}, {x=64.9609375, y=151.64453125, graphics_variation=4}, {x=76.60546875, y=151.68359375, graphics_variation=1}, {x=82.28125, y=151.68359375, graphics_variation=8}, {x=91.12109375, y=151.64453125, graphics_variation=6}, }, + ["dead-tree-desert"] = {{x=-76.61328125, y=-126.16796875, graphics_variation=1}, {x=-86.5390625, y=-117.3125, graphics_variation=4}, {x=-27.921875, y=-117.9765625, graphics_variation=3}, {x=3.83984375, y=-106.90234375, graphics_variation=4}, {x=-53.47265625, y=-104.88671875, graphics_variation=1}, {x=-72.03515625, y=-102.9765625, graphics_variation=5}, {x=-28.3046875, y=-100.75390625, graphics_variation=7}, {x=-58.13671875, y=-99.09765625, graphics_variation=1}, {x=50.5078125, y=-100.01171875, graphics_variation=4}, {x=6.8671875, y=-97.7265625, graphics_variation=2}, {x=14.1640625, y=-96.85546875, graphics_variation=7}, {x=28.1953125, y=-95.0078125, graphics_variation=6}, {x=50.5390625, y=-91.07421875, graphics_variation=4}, {x=39.80859375, y=-88.546875, graphics_variation=5}, {x=5.38671875, y=-84.68359375, graphics_variation=6}, {x=-4.63671875, y=-82.94140625, graphics_variation=7}, {x=0.2578125, y=-83.8125, graphics_variation=3}, {x=9.87109375, y=-84.0703125, graphics_variation=8}, {x=-24.828125, y=-82.04296875, graphics_variation=8}, {x=-19.39453125, y=-81.6328125, graphics_variation=3}, {x=-14.8828125, y=-81.8125, graphics_variation=4}, {x=-10.55859375, y=-82.2734375, graphics_variation=10}, {x=-78.8125, y=-80.19921875, graphics_variation=7}, {x=-29.87890625, y=-78.9921875, graphics_variation=9}, {x=0.15625, y=-79.4296875, graphics_variation=1}, {x=5.0546875, y=-79.9921875, graphics_variation=5}, {x=-34.87890625, y=-77.5078125, graphics_variation=9}, {x=-10.1484375, y=-77.63671875, graphics_variation=3}, {x=-5.046875, y=-77.96875, graphics_variation=8}, {x=-30.0078125, y=-74.66015625, graphics_variation=4}, {x=5.2578125, y=-75.91796875, graphics_variation=8}, {x=47.265625, y=-76.24609375, graphics_variation=10}, {x=-35.16015625, y=-74.09765625, graphics_variation=1}, {x=17.87890625, y=-72.84765625, graphics_variation=8}, {x=79.125, y=-73.92578125, graphics_variation=1}, {x=84.05078125, y=-72.0859375, graphics_variation=7}, {x=84.0234375, y=-69.87890625, graphics_variation=1}, {x=-79.8046875, y=-57.1015625, graphics_variation=5}, {x=-34.421875, y=-52.30078125, graphics_variation=1}, {x=-71.98828125, y=-46.74609375, graphics_variation=3}, {x=-24.38671875, y=-41.4921875, graphics_variation=4}, {x=-73.3359375, y=-39.21875, graphics_variation=8}, {x=-76.53125, y=-36.98828125, graphics_variation=4}, {x=-74.63671875, y=-37.7890625, graphics_variation=3}, {x=-72.74609375, y=-34.21484375, graphics_variation=2}, {x=-8.51171875, y=-33.2734375, graphics_variation=2}, {x=84.41796875, y=-33.0078125, graphics_variation=2}, {x=-13.04296875, y=-30.52734375, graphics_variation=9}, {x=24.0625, y=-30.12890625, graphics_variation=4}, {x=28.51171875, y=-28.61328125, graphics_variation=4}, {x=-10.18359375, y=-25.03515625, graphics_variation=6}, {x=23.75, y=-21.1953125, graphics_variation=3}, {x=28.4765625, y=-20.43359375, graphics_variation=3}, {x=45.9140625, y=-22.171875, graphics_variation=3}, {x=26.71875, y=-16.36328125, graphics_variation=5}, {x=3.5390625, y=-13.609375, graphics_variation=7}, {x=-13.43359375, y=-6.46484375, graphics_variation=3}, {x=0.921875, y=-7.25390625, graphics_variation=3}, {x=-2.21875, y=-3.76953125, graphics_variation=6}, {x=-95.44921875, y=0.56640625, graphics_variation=9}, {x=-0.60546875, y=0.4140625, graphics_variation=8}, {x=-1.91015625, y=23.8671875, graphics_variation=3}, {x=91.125, y=53.2109375, graphics_variation=9}, {x=-57.51953125, y=141.3828125, graphics_variation=2}, {x=-45.99609375, y=141.0703125, graphics_variation=9}, {x=-50.9296875, y=141.69140625, graphics_variation=7}, {x=-59.12109375, y=146.171875, graphics_variation=8}, {x=-53.32421875, y=146.06640625, graphics_variation=1}, {x=-46.1484375, y=146.1015625, graphics_variation=10}, {x=-39.73046875, y=146.4453125, graphics_variation=7}, {x=-33.0390625, y=146.34375, graphics_variation=9}, {x=41.4453125, y=145.7734375, graphics_variation=6}, {x=48.68359375, y=146.078125, graphics_variation=3}, {x=57.140625, y=145.88671875, graphics_variation=5}, {x=67.03125, y=145.7734375, graphics_variation=9}, {x=75.4140625, y=145.7734375, graphics_variation=2}, {x=81.96484375, y=146, graphics_variation=4}, {x=-21.09765625, y=149.60546875, graphics_variation=9}, }, + ["rock-huge-beige"] = {{x=-77.51171875, y=-118.7109375, graphics_variation=15}, {x=59.4296875, y=-103.984375, graphics_variation=2}, {x=-87.66796875, y=-98.6796875, graphics_variation=4}, {x=-6.17578125, y=-95.66015625, graphics_variation=11}, {x=33.68359375, y=-95.23046875, graphics_variation=14}, {x=26.71484375, y=-92.83203125, graphics_variation=8}, {x=-73.34375, y=-86.3828125, graphics_variation=8}, {x=0.4765625, y=-87.76171875, graphics_variation=13}, {x=-38.60546875, y=-80.0390625, graphics_variation=9}, {x=-83.43359375, y=-79.10546875, graphics_variation=3}, {x=86.55078125, y=-76.5625, graphics_variation=6}, {x=21.44921875, y=-72.47265625, graphics_variation=12}, {x=74.68359375, y=-67.26953125, graphics_variation=9}, {x=-83.3046875, y=-59.4921875, graphics_variation=11}, {x=-16.5859375, y=-52.234375, graphics_variation=12}, {x=-73.1796875, y=-43.5078125, graphics_variation=9}, {x=-28.1953125, y=-42.0703125, graphics_variation=14}, {x=88.41796875, y=-35.23046875, graphics_variation=1}, {x=-46.33203125, y=-31.4296875, graphics_variation=2}, {x=25.953125, y=-27.8515625, graphics_variation=3}, {x=6.0703125, y=8.16796875, graphics_variation=2}, {x=3.484375, y=17.44921875, graphics_variation=11}, {x=3.50390625, y=28.52734375, graphics_variation=16}, {x=-94.38671875, y=44.1640625, graphics_variation=12}, {x=-84.4765625, y=80.89453125, graphics_variation=8}, {x=-69.9921875, y=85.5859375, graphics_variation=4}, {x=-84.32421875, y=87.6953125, graphics_variation=4}, {x=-61.0625, y=141.02734375, graphics_variation=10}, {x=18.68359375, y=143.18359375, graphics_variation=5}, {x=-66.6875, y=149.89453125, graphics_variation=7}, {x=86.765625, y=150.56640625, graphics_variation=13}, }, + ["sand-decal-tan-ruin"] = {{x=-76.79296875, y=-116.49609375, graphics_variation=17}, {x=3.34375, y=-103.74609375, graphics_variation=14}, {x=-81.7890625, y=-102.1640625, graphics_variation=8}, {x=66.296875, y=-101.51953125, graphics_variation=18}, {x=70.09375, y=-100.79296875, graphics_variation=24}, {x=-5.64453125, y=-97.44140625, graphics_variation=9}, {x=78.58984375, y=-97.8359375, graphics_variation=21}, {x=-1.46875, y=-87.1640625, graphics_variation=26}, {x=3.65234375, y=-87.67578125, graphics_variation=23}, {x=67.8203125, y=-87.25, graphics_variation=23}, {x=-72.16796875, y=-77.79296875, graphics_variation=18}, {x=37.703125, y=-74.49609375, graphics_variation=21}, {x=47.6875, y=-74.95703125, graphics_variation=22}, {x=19.3671875, y=-72.73828125, graphics_variation=2}, {x=-78.3125, y=-57.578125, graphics_variation=2}, {x=-65.1796875, y=-57.83984375, graphics_variation=23}, {x=66.484375, y=-57.9296875, graphics_variation=13}, {x=79.390625, y=-56.86328125, graphics_variation=20}, {x=74.97265625, y=-53.171875, graphics_variation=17}, {x=-14.0078125, y=-51.9765625, graphics_variation=8}, {x=-68.265625, y=-47.08203125, graphics_variation=29}, {x=29.5, y=-41.22265625, graphics_variation=23}, {x=33.73046875, y=-41.46875, graphics_variation=11}, {x=46.78515625, y=-41.41796875, graphics_variation=16}, {x=64.859375, y=-41.08203125, graphics_variation=29}, {x=-26.67578125, y=-40.33203125, graphics_variation=22}, {x=-76.80078125, y=-34.328125, graphics_variation=26}, {x=-44.9453125, y=-29.94140625, graphics_variation=24}, {x=-81.03125, y=-21.14453125, graphics_variation=2}, {x=-31.1953125, y=-20.80859375, graphics_variation=16}, {x=-33.47265625, y=-5.75390625, graphics_variation=23}, {x=-89.53515625, y=17.40234375, graphics_variation=30}, {x=-75.921875, y=23.42578125, graphics_variation=12}, {x=1.89453125, y=56.75, graphics_variation=18}, {x=43.38671875, y=60.5, graphics_variation=28}, {x=52.5546875, y=59.16796875, graphics_variation=11}, {x=55.33203125, y=60.92578125, graphics_variation=3}, {x=65.30078125, y=60.21875, graphics_variation=26}, {x=73.43359375, y=60.74609375, graphics_variation=11}, {x=9.44921875, y=63.5859375, graphics_variation=12}, {x=37.83203125, y=64.62890625, graphics_variation=10}, {x=-91.71875, y=71.5390625, graphics_variation=18}, {x=36.6328125, y=72.6796875, graphics_variation=26}, {x=7.7734375, y=73.26171875, graphics_variation=10}, {x=26.84765625, y=76.9609375, graphics_variation=11}, {x=-91.53125, y=77.95703125, graphics_variation=11}, {x=-83.40234375, y=78.046875, graphics_variation=30}, {x=5.24609375, y=81.41015625, graphics_variation=26}, {x=65.95703125, y=87.95703125, graphics_variation=24}, {x=26.3125, y=91.29296875, graphics_variation=24}, {x=26.5078125, y=99.3515625, graphics_variation=30}, {x=65.890625, y=101.0625, graphics_variation=6}, {x=79.5546875, y=101.8984375, graphics_variation=8}, {x=-90.55859375, y=106.26953125, graphics_variation=13}, {x=53.5703125, y=110.44140625, graphics_variation=9}, {x=26.70703125, y=114.828125, graphics_variation=21}, {x=-82.1640625, y=116.13671875, graphics_variation=7}, {x=83.88671875, y=115.421875, graphics_variation=22}, {x=-30.41796875, y=121.52734375, graphics_variation=10}, {x=-0.83203125, y=121.30859375, graphics_variation=11}, {x=26.734375, y=122.55078125, graphics_variation=13}, {x=83.3203125, y=122.796875, graphics_variation=15}, {x=-0.86328125, y=130.734375, graphics_variation=19}, {x=26.46484375, y=130.515625, graphics_variation=27}, {x=83.24609375, y=131.1953125, graphics_variation=30}, {x=-17.28515625, y=133.38671875, graphics_variation=18}, {x=65.70703125, y=137.3359375, graphics_variation=10}, {x=82.3359375, y=137.94921875, graphics_variation=12}, {x=-55.14453125, y=140.49609375, graphics_variation=23}, {x=-41.5, y=140.0546875, graphics_variation=7}, {x=49.84765625, y=141.80859375, graphics_variation=22}, {x=53.08984375, y=141.81640625, graphics_variation=8}, {x=67.50390625, y=141.609375, graphics_variation=3}, {x=83.76171875, y=141.13671875, graphics_variation=13}, {x=6.01953125, y=143.5625, graphics_variation=27}, {x=61.98046875, y=145.6796875, graphics_variation=8}, {x=63.62109375, y=145.421875, graphics_variation=5}, {x=-15.8203125, y=148.359375, graphics_variation=7}, {x=89.36328125, y=151.03515625, graphics_variation=13}, }, + ["dry-tree"] = {{x=-73.359375, y=-114.515625, graphics_variation=7}, {x=-67.890625, y=-113.9921875, graphics_variation=6}, {x=-59.7734375, y=-112.6875, graphics_variation=8}, {x=-52.8828125, y=-112.45703125, graphics_variation=6}, {x=-76.91015625, y=-111.44921875, graphics_variation=5}, {x=-71.1484375, y=-111.171875, graphics_variation=4}, {x=-66.23046875, y=-110.921875, graphics_variation=6}, {x=-45.1015625, y=-110.26953125, graphics_variation=5}, {x=-64.2109375, y=-108.50390625, graphics_variation=2}, {x=-56.03125, y=-108.54296875, graphics_variation=6}, {x=-50.71875, y=-109.0703125, graphics_variation=1}, {x=-33.328125, y=-108.5234375, graphics_variation=2}, {x=-27.29296875, y=-108.48046875, graphics_variation=9}, {x=-74.11328125, y=-106.7578125, graphics_variation=5}, {x=-68.8984375, y=-107.703125, graphics_variation=1}, {x=-38.94140625, y=-107.93359375, graphics_variation=7}, {x=-21.3203125, y=-108.1875, graphics_variation=6}, {x=-15.74609375, y=-107.28125, graphics_variation=4}, {x=-77.796875, y=-104.359375, graphics_variation=2}, {x=-66.3125, y=-104.40234375, graphics_variation=1}, {x=-62.25390625, y=-105.47265625, graphics_variation=6}, {x=-48.59375, y=-104.84375, graphics_variation=7}, {x=-42.95703125, y=-106, graphics_variation=7}, {x=-35.9765625, y=-104.67578125, graphics_variation=2}, {x=-31.22265625, y=-105.07421875, graphics_variation=2}, {x=-25.56640625, y=-105.22265625, graphics_variation=5}, {x=-45.859375, y=-102.296875, graphics_variation=5}, {x=-18.54296875, y=-103.265625, graphics_variation=4}, {x=-13.01171875, y=-102.55078125, graphics_variation=2}, {x=-64.08203125, y=-101.2890625, graphics_variation=9}, {x=-60.15234375, y=-101.4765625, graphics_variation=8}, {x=-52.0546875, y=-101.60546875, graphics_variation=4}, {x=-40.9375, y=-101.8984375, graphics_variation=1}, {x=-34.1875, y=-101.79296875, graphics_variation=9}, {x=-23.9296875, y=-101.58203125, graphics_variation=8}, {x=-11.60546875, y=-100.53125, graphics_variation=6}, {x=-79.6875, y=-100.02734375, graphics_variation=6}, {x=-74.68359375, y=-98.9765625, graphics_variation=2}, {x=-70.09765625, y=-99.125, graphics_variation=4}, {x=-39.046875, y=-98.953125, graphics_variation=4}, {x=-16.71484375, y=-99.48046875, graphics_variation=4}, {x=-62.37890625, y=-97, graphics_variation=9}, {x=-49.4453125, y=-97.484375, graphics_variation=6}, {x=-26.26171875, y=-96.89453125, graphics_variation=9}, {x=-9.69140625, y=-96.4921875, graphics_variation=6}, {x=-77.015625, y=-95.33984375, graphics_variation=5}, {x=-72.390625, y=-94.94140625, graphics_variation=3}, {x=-66.7109375, y=-94.30859375, graphics_variation=8}, {x=-48.2265625, y=-94.5390625, graphics_variation=5}, {x=-37.11328125, y=-95.80078125, graphics_variation=9}, {x=-31.49609375, y=-95.73828125, graphics_variation=8}, {x=-14.71875, y=-95.31640625, graphics_variation=7}, {x=-60.61328125, y=-93.40234375, graphics_variation=1}, {x=-29.984375, y=-92.33203125, graphics_variation=4}, {x=-24.8515625, y=-93.296875, graphics_variation=9}, {x=-19.08984375, y=-93.9921875, graphics_variation=5}, {x=-74.2421875, y=-90.87890625, graphics_variation=1}, {x=-45.7890625, y=-90.2890625, graphics_variation=1}, {x=-39.046875, y=-90.41796875, graphics_variation=2}, {x=-34.41796875, y=-91.40625, graphics_variation=2}, {x=-68.7734375, y=-89.703125, graphics_variation=9}, {x=-63.34765625, y=-89.890625, graphics_variation=5}, {x=-57.33203125, y=-89.34375, graphics_variation=5}, {x=-51.55078125, y=-89.40625, graphics_variation=3}, }, + ["rock-big-beige"] = {{x=-48.3984375, y=-114.3046875, graphics_variation=2}, {x=-4, y=-109.9765625, graphics_variation=15}, {x=-82.58203125, y=-103.1796875, graphics_variation=5}, {x=10.5234375, y=-103.25390625, graphics_variation=6}, {x=33.1640625, y=-103.04296875, graphics_variation=5}, {x=7.7578125, y=-101.3671875, graphics_variation=2}, {x=56.52734375, y=-102.05078125, graphics_variation=3}, {x=58.87890625, y=-101.21875, graphics_variation=12}, {x=-53.83203125, y=-98.9921875, graphics_variation=1}, {x=1.89453125, y=-99.984375, graphics_variation=8}, {x=-7.4453125, y=-97.921875, graphics_variation=3}, {x=25.1875, y=-95.0078125, graphics_variation=10}, {x=-53.2578125, y=-86.8203125, graphics_variation=11}, {x=-51.203125, y=-86, graphics_variation=19}, {x=13.3515625, y=-84.3125, graphics_variation=6}, {x=73.62890625, y=-81.1640625, graphics_variation=5}, {x=38.8828125, y=-76.03125, graphics_variation=5}, {x=41.2578125, y=-75.9375, graphics_variation=2}, {x=44.2890625, y=-75.1875, graphics_variation=2}, {x=38.1953125, y=-73.59375, graphics_variation=20}, {x=59.015625, y=-72.7109375, graphics_variation=10}, {x=80.953125, y=-71.7734375, graphics_variation=12}, {x=-74.2265625, y=-61.88671875, graphics_variation=15}, {x=78.26171875, y=-50.2109375, graphics_variation=16}, {x=-70.48828125, y=-42.82421875, graphics_variation=8}, {x=-70.23828125, y=-40.29296875, graphics_variation=2}, {x=52.6171875, y=-40.4375, graphics_variation=7}, {x=-88.11328125, y=-39.16796875, graphics_variation=2}, {x=-9.828125, y=-28.64453125, graphics_variation=7}, {x=7.5, y=-23.8046875, graphics_variation=6}, {x=27.5234375, y=-14.5, graphics_variation=14}, {x=52.10546875, y=-15.8359375, graphics_variation=15}, {x=3.53515625, y=-12.05078125, graphics_variation=5}, {x=-11.46875, y=9.76953125, graphics_variation=12}, {x=3.0546875, y=9.578125, graphics_variation=3}, {x=-89.20703125, y=16.45703125, graphics_variation=17}, {x=-20.95703125, y=27.21875, graphics_variation=12}, {x=-2.42578125, y=28.55859375, graphics_variation=17}, {x=-85.8515625, y=64.25, graphics_variation=8}, {x=-84.0234375, y=68.9296875, graphics_variation=14}, {x=-90.75390625, y=75.28515625, graphics_variation=13}, {x=-72.109375, y=78.75, graphics_variation=12}, {x=-11.796875, y=101.796875, graphics_variation=6}, {x=-87.12109375, y=116.73828125, graphics_variation=4}, {x=61.8046875, y=122.93359375, graphics_variation=13}, {x=10.82421875, y=146.3125, graphics_variation=6}, {x=91.13671875, y=147.31640625, graphics_variation=15}, {x=39.41796875, y=151.03515625, graphics_variation=18}, }, + ["sand-decal-white-ruin"] = {{x=3.19140625, y=-109.27734375, graphics_variation=3}, {x=-5.453125, y=-107.1328125, graphics_variation=13}, {x=57.109375, y=-96.5625, graphics_variation=7}, {x=62.65625, y=-94.84765625, graphics_variation=4}, {x=65.7578125, y=-93.16015625, graphics_variation=10}, {x=73.796875, y=-92.7734375, graphics_variation=5}, {x=23.87890625, y=-91, graphics_variation=24}, {x=75.1171875, y=-90.15625, graphics_variation=30}, {x=69.69140625, y=-71.9140625, graphics_variation=26}, {x=-79.32421875, y=-68.2890625, graphics_variation=1}, {x=-79.32421875, y=-68.2890625, graphics_variation=1}, {x=-47.73828125, y=-68.83203125, graphics_variation=23}, {x=63.1015625, y=-66.90625, graphics_variation=22}, {x=-40.85546875, y=-63.08203125, graphics_variation=3}, {x=-22.71484375, y=-63.10546875, graphics_variation=23}, {x=-11.32421875, y=-63.2421875, graphics_variation=21}, {x=4.92578125, y=-63.328125, graphics_variation=3}, {x=77.0234375, y=-63.23046875, graphics_variation=5}, {x=84.45703125, y=-63.29296875, graphics_variation=21}, {x=30.35546875, y=-60.1484375, graphics_variation=23}, {x=46.1171875, y=-59.31640625, graphics_variation=20}, {x=74.48828125, y=-59.62109375, graphics_variation=22}, {x=69.87109375, y=-57.96484375, graphics_variation=9}, {x=14.79296875, y=-56.81640625, graphics_variation=28}, {x=29.0859375, y=-55.78125, graphics_variation=8}, {x=39.65625, y=-55.83203125, graphics_variation=13}, {x=46.44921875, y=-55.98046875, graphics_variation=26}, {x=69.71875, y=-53.8046875, graphics_variation=17}, {x=32.34375, y=-49.19921875, graphics_variation=20}, {x=45.07421875, y=-47.140625, graphics_variation=20}, {x=71.27734375, y=-46.7890625, graphics_variation=23}, {x=71.61328125, y=-42.34375, graphics_variation=20}, {x=12.59375, y=-37.5234375, graphics_variation=13}, {x=60.5, y=-33.921875, graphics_variation=26}, {x=63.44140625, y=-32.96484375, graphics_variation=11}, {x=12.13671875, y=-26.375, graphics_variation=22}, {x=63.80859375, y=-25.9375, graphics_variation=11}, {x=68.37890625, y=-25.7734375, graphics_variation=15}, {x=75.76953125, y=-25.12890625, graphics_variation=22}, {x=-49.83984375, y=-21.62109375, graphics_variation=29}, {x=-38.8046875, y=-21.47265625, graphics_variation=4}, {x=-63.99609375, y=-20.6796875, graphics_variation=28}, {x=67.45703125, y=-18.640625, graphics_variation=1}, {x=-70.15625, y=-15.0625, graphics_variation=23}, {x=-38.05078125, y=-15.453125, graphics_variation=8}, {x=12.50390625, y=-15.49609375, graphics_variation=29}, {x=-59.13671875, y=-14.859375, graphics_variation=8}, {x=61.29296875, y=-14.25, graphics_variation=24}, {x=-80.02734375, y=-9.3046875, graphics_variation=1}, {x=-70.53125, y=-9.05078125, graphics_variation=3}, {x=-55.12109375, y=-10.37109375, graphics_variation=2}, {x=-39.65625, y=-9.62109375, graphics_variation=19}, {x=-26.23828125, y=-9.33984375, graphics_variation=18}, {x=26.39453125, y=-4.60546875, graphics_variation=18}, {x=-66.16796875, y=-2.734375, graphics_variation=23}, {x=-32.05859375, y=-1.29296875, graphics_variation=10}, {x=12.8359375, y=-1.21875, graphics_variation=12}, {x=41.921875, y=-1.65625, graphics_variation=1}, {x=-46.79296875, y=0.9296875, graphics_variation=7}, {x=-44.81640625, y=-0.29296875, graphics_variation=10}, {x=77.375, y=0.125, graphics_variation=20}, {x=14.78515625, y=3.70703125, graphics_variation=16}, {x=52.08203125, y=3.9609375, graphics_variation=28}, {x=-84.51171875, y=5.65625, graphics_variation=11}, {x=17.04296875, y=5.08203125, graphics_variation=26}, {x=28.62890625, y=8.3515625, graphics_variation=18}, {x=55.51171875, y=7.5625, graphics_variation=2}, {x=72.78515625, y=7.87109375, graphics_variation=28}, {x=-56.9296875, y=12.953125, graphics_variation=1}, {x=-26.42578125, y=11.71484375, graphics_variation=17}, {x=58.4296875, y=11.8203125, graphics_variation=5}, {x=-71.75, y=17.015625, graphics_variation=14}, {x=22.2265625, y=17.9921875, graphics_variation=25}, {x=46.10546875, y=18.85546875, graphics_variation=26}, {x=-39.99609375, y=20.80078125, graphics_variation=3}, {x=-31.65234375, y=20.95703125, graphics_variation=12}, {x=14.11328125, y=19.51171875, graphics_variation=19}, {x=-37.09765625, y=22.5859375, graphics_variation=6}, {x=-85.41796875, y=23.9921875, graphics_variation=29}, {x=-70.9375, y=23.94921875, graphics_variation=10}, {x=-54.53515625, y=23.67578125, graphics_variation=12}, {x=-44.4921875, y=23.9453125, graphics_variation=27}, {x=-39.9453125, y=23.57421875, graphics_variation=6}, {x=50.79296875, y=26.46484375, graphics_variation=18}, {x=14.421875, y=28.34765625, graphics_variation=1}, {x=71.76953125, y=27.9296875, graphics_variation=19}, {x=41.21875, y=33.65625, graphics_variation=29}, {x=-3.98828125, y=35.7578125, graphics_variation=3}, {x=17.40625, y=36.828125, graphics_variation=24}, {x=-72.2734375, y=38.12890625, graphics_variation=12}, {x=-42.0703125, y=38.46875, graphics_variation=16}, {x=-12.6796875, y=37.26171875, graphics_variation=20}, {x=-26.61328125, y=40.921875, graphics_variation=2}, {x=-3.91015625, y=40.50390625, graphics_variation=6}, {x=28.13671875, y=39.24609375, graphics_variation=11}, {x=-50.546875, y=41.91796875, graphics_variation=10}, {x=0.5390625, y=43.30859375, graphics_variation=28}, {x=9.015625, y=44.69921875, graphics_variation=12}, {x=18.4140625, y=43.66796875, graphics_variation=30}, {x=55.43359375, y=43.2578125, graphics_variation=4}, {x=77.98046875, y=44.80859375, graphics_variation=4}, {x=-86.62890625, y=46.27734375, graphics_variation=28}, {x=2.25, y=48.83984375, graphics_variation=27}, {x=-6.70703125, y=49.2265625, graphics_variation=21}, {x=-82.9375, y=54.9765625, graphics_variation=24}, {x=8.28515625, y=56.08203125, graphics_variation=28}, {x=-72.8828125, y=58.29296875, graphics_variation=25}, {x=-2.38671875, y=59.51953125, graphics_variation=3}, {x=9.8125, y=62.3203125, graphics_variation=12}, {x=-80.046875, y=65.203125, graphics_variation=29}, {x=-13.3359375, y=65.97265625, graphics_variation=7}, {x=-67.76171875, y=68.33984375, graphics_variation=2}, {x=2.41015625, y=67.2734375, graphics_variation=7}, {x=-58.08984375, y=69.25, graphics_variation=22}, {x=-30.140625, y=71.05859375, graphics_variation=21}, {x=14.7734375, y=72.1796875, graphics_variation=27}, {x=-83.46875, y=74.33203125, graphics_variation=24}, {x=-80.35546875, y=74.890625, graphics_variation=26}, {x=-0.578125, y=74.32421875, graphics_variation=28}, {x=6.12109375, y=73.45703125, graphics_variation=15}, {x=22.2265625, y=73.93359375, graphics_variation=24}, {x=-58.9375, y=80.42578125, graphics_variation=5}, {x=-54.33203125, y=81.75, graphics_variation=30}, {x=5.30859375, y=88.64453125, graphics_variation=10}, {x=19.15625, y=90.5859375, graphics_variation=22}, {x=-63.390625, y=94.69140625, graphics_variation=1}, {x=-81.35546875, y=95.046875, graphics_variation=21}, {x=14.91796875, y=95.26953125, graphics_variation=28}, {x=9.7578125, y=98.71484375, graphics_variation=6}, {x=20.72265625, y=100.5859375, graphics_variation=26}, {x=-72.30859375, y=101.96484375, graphics_variation=3}, {x=-73.15234375, y=106.28515625, graphics_variation=3}, {x=5.4609375, y=108.83203125, graphics_variation=20}, {x=-81.75, y=110.65625, graphics_variation=29}, {x=-62.98046875, y=113.828125, graphics_variation=20}, {x=-79.3203125, y=116.6796875, graphics_variation=20}, {x=22.25390625, y=115.45703125, graphics_variation=21}, {x=7.01953125, y=119.7109375, graphics_variation=24}, {x=-73.46484375, y=122.4375, graphics_variation=18}, {x=-68.8671875, y=122.79296875, graphics_variation=18}, {x=-55.08984375, y=122.875, graphics_variation=9}, {x=-45.875, y=122.39453125, graphics_variation=12}, {x=-35.1796875, y=122.77734375, graphics_variation=9}, {x=-21.57421875, y=122.5078125, graphics_variation=23}, {x=-15.94140625, y=122.9140625, graphics_variation=3}, {x=-38.5234375, y=126.640625, graphics_variation=29}, {x=23.5390625, y=128.5234375, graphics_variation=17}, {x=-20.26953125, y=130.3359375, graphics_variation=28}, {x=-57.68359375, y=131.515625, graphics_variation=23}, {x=-33.84375, y=131.10546875, graphics_variation=19}, {x=-3.140625, y=131.39453125, graphics_variation=26}, {x=9.41015625, y=131.58203125, graphics_variation=21}, {x=-6.9921875, y=133.10546875, graphics_variation=6}, {x=-45.09375, y=135.6328125, graphics_variation=5}, {x=13.04296875, y=135.12109375, graphics_variation=27}, {x=20.7734375, y=136.7421875, graphics_variation=29}, {x=-19.65625, y=137.8046875, graphics_variation=12}, {x=-18.94140625, y=143.85546875, graphics_variation=6}, {x=-6.84375, y=144.21875, graphics_variation=10}, {x=-14.140625, y=146.78125, graphics_variation=8}, }, + ["dead-dry-hairy-tree"] = {{x=1.546875, y=-102.47265625, graphics_variation=1}, }, + ["sand-decal-black-ruin"] = {{x=67.73046875, y=-102.39453125, graphics_variation=20}, {x=71.27734375, y=-100.0859375, graphics_variation=28}, {x=55.34765625, y=-88.1640625, graphics_variation=2}, {x=60.7734375, y=-88.70703125, graphics_variation=29}, {x=67.8203125, y=-84.3359375, graphics_variation=20}, {x=-67.6171875, y=-75.4765625, graphics_variation=23}, {x=-60.1875, y=-76.94921875, graphics_variation=27}, {x=-53.3671875, y=-76.59375, graphics_variation=23}, {x=-65.90234375, y=-70.72265625, graphics_variation=27}, {x=-58.66796875, y=-70.7578125, graphics_variation=22}, {x=-67.9375, y=-63.44140625, graphics_variation=1}, {x=-5.65234375, y=-63.5546875, graphics_variation=21}, {x=1.8828125, y=-63.80078125, graphics_variation=8}, {x=-68.09375, y=-61.953125, graphics_variation=12}, {x=-54.1015625, y=-62.640625, graphics_variation=7}, {x=-37.046875, y=-61.08984375, graphics_variation=2}, {x=-33.19921875, y=-62.73828125, graphics_variation=22}, {x=-27.58203125, y=-62.34375, graphics_variation=10}, {x=13.09375, y=-61.7734375, graphics_variation=23}, {x=62.99609375, y=-62.02734375, graphics_variation=24}, {x=66.9453125, y=-62.12890625, graphics_variation=24}, {x=-60.89453125, y=-60.6328125, graphics_variation=15}, {x=64.73828125, y=-58.42578125, graphics_variation=22}, {x=76.55859375, y=-54.3046875, graphics_variation=17}, {x=51.81640625, y=-50.93359375, graphics_variation=13}, {x=64.890625, y=-45.8984375, graphics_variation=1}, {x=66.50390625, y=-37.9609375, graphics_variation=18}, {x=71.8046875, y=-36.8125, graphics_variation=19}, {x=80.4296875, y=-30.1015625, graphics_variation=15}, {x=-82.5859375, y=-22.19921875, graphics_variation=10}, {x=-79.17578125, y=-22.12109375, graphics_variation=22}, {x=-75.5078125, y=-21.0078125, graphics_variation=7}, {x=-33.77734375, y=-21.4453125, graphics_variation=2}, {x=-30.625, y=-19.625, graphics_variation=4}, {x=80.046875, y=-20.68359375, graphics_variation=7}, {x=-80.2421875, y=-17.83203125, graphics_variation=21}, {x=-76.41015625, y=-14.72265625, graphics_variation=21}, {x=-29.8203125, y=-14.84375, graphics_variation=22}, {x=65.26953125, y=-13.0625, graphics_variation=22}, {x=80.375, y=-13.70703125, graphics_variation=27}, {x=62.90234375, y=-11.5, graphics_variation=23}, {x=63.3203125, y=-12.34765625, graphics_variation=18}, {x=14.12890625, y=-10.109375, graphics_variation=13}, {x=72.140625, y=-9.59765625, graphics_variation=2}, {x=67.2734375, y=-3.90625, graphics_variation=10}, {x=73.0234375, y=-4.94921875, graphics_variation=14}, {x=79.109375, y=-3.73828125, graphics_variation=22}, {x=58.81640625, y=-2.203125, graphics_variation=22}, {x=62.04296875, y=-2.0859375, graphics_variation=3}, {x=17.68359375, y=4.4609375, graphics_variation=13}, {x=62.015625, y=9.78125, graphics_variation=29}, {x=66.984375, y=12.88671875, graphics_variation=14}, {x=12.74609375, y=13.3046875, graphics_variation=5}, {x=78.875, y=13.48828125, graphics_variation=24}, {x=80.3046875, y=16.64453125, graphics_variation=23}, {x=62.5703125, y=20.640625, graphics_variation=3}, {x=-82.93359375, y=27.8515625, graphics_variation=3}, {x=-69.1796875, y=27.48046875, graphics_variation=11}, {x=-32.35546875, y=27.83203125, graphics_variation=21}, {x=61.859375, y=27.0859375, graphics_variation=23}, {x=-76.9453125, y=30.59765625, graphics_variation=1}, {x=-57.50390625, y=29.05859375, graphics_variation=2}, {x=-46.84765625, y=30.50390625, graphics_variation=25}, {x=-70.78125, y=31.71875, graphics_variation=21}, {x=-64.453125, y=31.7109375, graphics_variation=6}, {x=-54.63671875, y=32.43359375, graphics_variation=11}, {x=-37.05859375, y=31.07421875, graphics_variation=4}, {x=-29.2421875, y=31.1015625, graphics_variation=29}, {x=66.5859375, y=32.22265625, graphics_variation=24}, {x=-60.44140625, y=34.09375, graphics_variation=11}, {x=62.48828125, y=33.375, graphics_variation=28}, {x=-79.26953125, y=35.578125, graphics_variation=3}, {x=66.2890625, y=38.00390625, graphics_variation=1}, {x=-66.16796875, y=43.96484375, graphics_variation=9}, {x=-79.5859375, y=46.5390625, graphics_variation=12}, {x=-75.75, y=46.95703125, graphics_variation=23}, {x=-68.4609375, y=47.515625, graphics_variation=20}, {x=-18.453125, y=47.734375, graphics_variation=3}, {x=22.38671875, y=48.49609375, graphics_variation=1}, {x=37.64453125, y=48.671875, graphics_variation=28}, {x=50.53125, y=48.73046875, graphics_variation=28}, {x=66.5078125, y=48.390625, graphics_variation=17}, {x=75.37890625, y=47.125, graphics_variation=15}, {x=-76.328125, y=51.65234375, graphics_variation=26}, {x=-27.8515625, y=51.31640625, graphics_variation=24}, {x=20.07421875, y=53.80859375, graphics_variation=21}, {x=-77.8671875, y=55.61328125, graphics_variation=6}, {x=-63.4765625, y=55.07421875, graphics_variation=11}, {x=24.37109375, y=56.59375, graphics_variation=26}, {x=-80.421875, y=57.6484375, graphics_variation=5}, {x=-76.4765625, y=58.515625, graphics_variation=13}, {x=43.87109375, y=60.515625, graphics_variation=27}, {x=52.265625, y=60.453125, graphics_variation=30}, {x=63.0703125, y=60.46484375, graphics_variation=27}, {x=79.3359375, y=60.03515625, graphics_variation=21}, {x=83.57421875, y=60.8125, graphics_variation=10}, {x=37.9609375, y=61.73046875, graphics_variation=29}, {x=-25.33203125, y=65.66796875, graphics_variation=15}, {x=25.48046875, y=65.45703125, graphics_variation=29}, {x=-77.2890625, y=68.76953125, graphics_variation=30}, {x=82.0234375, y=67.046875, graphics_variation=22}, {x=-16.6171875, y=70.75390625, graphics_variation=3}, {x=-0.65234375, y=69.87109375, graphics_variation=3}, {x=5.81640625, y=69.65234375, graphics_variation=2}, {x=16.50390625, y=69.64453125, graphics_variation=2}, {x=22.3359375, y=69.82421875, graphics_variation=5}, {x=26.17578125, y=69.96484375, graphics_variation=15}, {x=82.83203125, y=70.890625, graphics_variation=7}, {x=37.859375, y=73.74609375, graphics_variation=23}, {x=71.265625, y=76.0234375, graphics_variation=17}, {x=37.84765625, y=77.79296875, graphics_variation=26}, {x=40.5546875, y=77.9921875, graphics_variation=15}, {x=45.93359375, y=77.3046875, graphics_variation=11}, {x=56.5078125, y=77.23828125, graphics_variation=2}, {x=62.22265625, y=77.2265625, graphics_variation=26}, {x=66.05078125, y=77.86328125, graphics_variation=15}, {x=76.3046875, y=77.359375, graphics_variation=11}, {x=84.1484375, y=80.03515625, graphics_variation=26}, {x=27.81640625, y=81.46875, graphics_variation=11}, {x=37.98828125, y=83.375, graphics_variation=8}, {x=79.0859375, y=83.00390625, graphics_variation=5}, {x=60.70703125, y=86.14453125, graphics_variation=18}, {x=61.33984375, y=85.95703125, graphics_variation=8}, {x=83.05078125, y=86.7265625, graphics_variation=5}, {x=-56.9140625, y=88.03125, graphics_variation=20}, {x=25.41796875, y=88.2578125, graphics_variation=7}, {x=61.97265625, y=88.7734375, graphics_variation=6}, {x=78.8203125, y=87.93359375, graphics_variation=3}, {x=5.63671875, y=90.609375, graphics_variation=11}, {x=82.21484375, y=90.00390625, graphics_variation=15}, {x=37.9375, y=91.8515625, graphics_variation=11}, {x=61.1953125, y=92.94140625, graphics_variation=30}, {x=84.0703125, y=91.62109375, graphics_variation=7}, {x=2.51953125, y=93.9609375, graphics_variation=12}, {x=23.125, y=94.61328125, graphics_variation=11}, {x=-54.765625, y=96.265625, graphics_variation=13}, {x=-31.6953125, y=96.26171875, graphics_variation=17}, {x=61.37890625, y=96.171875, graphics_variation=18}, {x=2.8515625, y=98.10546875, graphics_variation=20}, {x=37.3125, y=98.51171875, graphics_variation=28}, {x=-84.17578125, y=100.66796875, graphics_variation=24}, {x=-62.0234375, y=100.67578125, graphics_variation=14}, {x=25.80078125, y=100.67578125, graphics_variation=13}, {x=61.4296875, y=99.89453125, graphics_variation=26}, {x=84.0390625, y=100.7421875, graphics_variation=26}, {x=83.86328125, y=101.5234375, graphics_variation=8}, {x=-66.65625, y=104.05859375, graphics_variation=22}, {x=-33.39453125, y=103.5859375, graphics_variation=4}, {x=2.2421875, y=104.9375, graphics_variation=28}, {x=62.93359375, y=103.140625, graphics_variation=18}, {x=73.68359375, y=106.671875, graphics_variation=23}, {x=77.484375, y=106.125, graphics_variation=23}, {x=15.86328125, y=107.83203125, graphics_variation=25}, {x=20.5390625, y=107.1953125, graphics_variation=17}, {x=38.00390625, y=107.8671875, graphics_variation=10}, {x=49.71484375, y=107.56640625, graphics_variation=20}, {x=57.23046875, y=107.3515625, graphics_variation=3}, {x=-1.26953125, y=109.0390625, graphics_variation=23}, {x=-62.015625, y=111.40234375, graphics_variation=25}, {x=-54.73046875, y=112.28515625, graphics_variation=9}, {x=3.6640625, y=112.35546875, graphics_variation=25}, {x=83.1484375, y=111.32421875, graphics_variation=26}, {x=37.53515625, y=113.67578125, graphics_variation=22}, {x=72.6953125, y=113.40234375, graphics_variation=10}, {x=-55.56640625, y=116.3671875, graphics_variation=6}, {x=-51.41796875, y=116.57421875, graphics_variation=27}, {x=-38.21875, y=116.98046875, graphics_variation=25}, {x=54.8515625, y=116.01171875, graphics_variation=13}, {x=60.58984375, y=116.1640625, graphics_variation=26}, {x=64.0625, y=116.9375, graphics_variation=10}, {x=52.84375, y=119.62890625, graphics_variation=27}, {x=-29.7421875, y=121.47265625, graphics_variation=8}, {x=3.33984375, y=121.48828125, graphics_variation=17}, {x=37.015625, y=122.34765625, graphics_variation=18}, {x=83.08203125, y=121.33984375, graphics_variation=26}, {x=40.26953125, y=124.3984375, graphics_variation=15}, {x=43.77734375, y=124.1953125, graphics_variation=19}, {x=-8.203125, y=126.69921875, graphics_variation=5}, {x=5.23828125, y=125.59375, graphics_variation=29}, {x=-61.46875, y=128.1796875, graphics_variation=15}, {x=-27.640625, y=127.9296875, graphics_variation=21}, {x=15.50390625, y=127.71484375, graphics_variation=9}, {x=-0.38671875, y=129.93359375, graphics_variation=11}, {x=82.5859375, y=129.23046875, graphics_variation=24}, {x=2.09375, y=132.2734375, graphics_variation=18}, {x=53.64453125, y=131.5625, graphics_variation=27}, {x=61.60546875, y=134.734375, graphics_variation=3}, {x=71.04296875, y=134.07421875, graphics_variation=3}, {x=-53.61328125, y=136.01953125, graphics_variation=10}, {x=-47.0390625, y=136.53125, graphics_variation=19}, {x=-28.51953125, y=135.23046875, graphics_variation=1}, {x=-7.9609375, y=136.37890625, graphics_variation=7}, {x=-0.7421875, y=136.59765625, graphics_variation=26}, {x=7.42578125, y=135.71484375, graphics_variation=28}, {x=16.921875, y=136.8359375, graphics_variation=23}, {x=37.3203125, y=135.25, graphics_variation=30}, {x=61.13671875, y=136.63671875, graphics_variation=11}, {x=-12.53125, y=137.328125, graphics_variation=1}, {x=11.44140625, y=137.109375, graphics_variation=27}, {x=53.56640625, y=138.71875, graphics_variation=6}, {x=71.7421875, y=137.9921875, graphics_variation=18}, {x=39.0859375, y=140.7734375, graphics_variation=26}, {x=-2.99609375, y=142.3515625, graphics_variation=3}, {x=46.7109375, y=141.9765625, graphics_variation=1}, {x=61.5625, y=141.1796875, graphics_variation=28}, {x=75.36328125, y=142.60546875, graphics_variation=10}, {x=80.5546875, y=141.375, graphics_variation=27}, {x=-16.43359375, y=144.15625, graphics_variation=1}, }, + ["tree-grassland-h"] = {{x=-43.6171875, y=-98.61328125, graphics_variation=12}, {x=-32.80078125, y=-98.37109375, graphics_variation=4}, {x=-22.0703125, y=-98.40625, graphics_variation=7}, {x=-54.8984375, y=-93.5078125, graphics_variation=8}, {x=-40.6875, y=-94.6796875, graphics_variation=8}, {x=9.8359375, y=-79.28515625, graphics_variation=6}, {x=-25.03515625, y=-77.58203125, graphics_variation=2}, {x=-19.734375, y=-77.5, graphics_variation=9}, {x=-15.484375, y=-78.00390625, graphics_variation=6}, {x=-25.0546875, y=-73.83984375, graphics_variation=3}, {x=-19.921875, y=-74.57421875, graphics_variation=12}, {x=-15.19140625, y=-74.15625, graphics_variation=12}, {x=-5.24609375, y=-74.40625, graphics_variation=4}, {x=-0.11328125, y=-74.4921875, graphics_variation=2}, {x=10.06640625, y=-74.23828125, graphics_variation=6}, {x=25.7265625, y=-25.6796875, graphics_variation=4}, {x=26.48828125, y=-22.87890625, graphics_variation=4}, {x=8.98828125, y=-17.12109375, graphics_variation=9}, {x=8.76953125, y=-4.27734375, graphics_variation=2}, {x=8.14453125, y=-0.08984375, graphics_variation=7}, {x=9.61328125, y=2.28515625, graphics_variation=10}, {x=8.11328125, y=13.12890625, graphics_variation=7}, {x=6.76953125, y=17.81640625, graphics_variation=5}, {x=8.14453125, y=23.03515625, graphics_variation=6}, {x=8.14453125, y=30.37890625, graphics_variation=4}, {x=-19.63671875, y=32.09765625, graphics_variation=4}, {x=4.89453125, y=31.94140625, graphics_variation=12}, {x=1.14453125, y=34.62890625, graphics_variation=7}, {x=-59.56640625, y=48.734375, graphics_variation=1}, {x=-31.4921875, y=48.609375, graphics_variation=8}, {x=-59.38671875, y=51.11328125, graphics_variation=2}, {x=-80.91015625, y=60.6875, graphics_variation=5}, {x=-68.53125, y=74.13671875, graphics_variation=12}, {x=-66.30078125, y=76.4140625, graphics_variation=5}, {x=-23.4609375, y=76.84765625, graphics_variation=4}, {x=-74.51953125, y=77.0859375, graphics_variation=5}, {x=-56.84375, y=77.44921875, graphics_variation=1}, {x=-9.1015625, y=77.8203125, graphics_variation=8}, {x=-65.0234375, y=80.3828125, graphics_variation=3}, {x=-77.6328125, y=81.3828125, graphics_variation=10}, {x=-83.55859375, y=85.33203125, graphics_variation=11}, {x=-11.2265625, y=86.375, graphics_variation=1}, {x=-77.91015625, y=87.41796875, graphics_variation=2}, {x=-13.71484375, y=88.68359375, graphics_variation=10}, {x=-67.18359375, y=91.01953125, graphics_variation=11}, {x=-67.90234375, y=89.27734375, graphics_variation=1}, {x=-11.38671875, y=89.8046875, graphics_variation=2}, {x=-27.359375, y=94.82421875, graphics_variation=9}, {x=-5.56640625, y=99.6484375, graphics_variation=6}, {x=-85.89453125, y=104.3359375, graphics_variation=10}, {x=-17.11328125, y=107.859375, graphics_variation=10}, {x=-11.8046875, y=110.5, graphics_variation=1}, {x=-25.1015625, y=113.51953125, graphics_variation=12}, {x=-8.73046875, y=113.88671875, graphics_variation=6}, {x=65.56640625, y=124.50390625, graphics_variation=3}, {x=67.69921875, y=129.6640625, graphics_variation=12}, {x=60.59375, y=131.77734375, graphics_variation=7}, {x=67.39453125, y=131.58984375, graphics_variation=1}, {x=67.5078125, y=131.58984375, graphics_variation=10}, {x=70.8046875, y=131.51171875, graphics_variation=6}, {x=13.00390625, y=144.64453125, graphics_variation=8}, }, + ["puberty-decal-ruin"] = {{x=10.9296875, y=-98.2109375, graphics_variation=13}, {x=10.9296875, y=-98.2109375, graphics_variation=13}, {x=16.984375, y=-96.0859375, graphics_variation=25}, {x=17.01171875, y=-96.0859375, graphics_variation=21}, {x=23.96484375, y=-94.92578125, graphics_variation=11}, {x=23.96484375, y=-94.92578125, graphics_variation=11}, {x=29.29296875, y=-75.13671875, graphics_variation=2}, {x=29.29296875, y=-75.13671875, graphics_variation=2}, {x=-74.4765625, y=-74.63671875, graphics_variation=14}, {x=-74.4765625, y=-74.63671875, graphics_variation=14}, {x=-77.0859375, y=-62.60546875, graphics_variation=20}, {x=-77.0859375, y=-62.60546875, graphics_variation=20}, {x=-68.62890625, y=-42.62890625, graphics_variation=1}, {x=-22.296875, y=-41.73828125, graphics_variation=20}, {x=-69.2265625, y=-36.10546875, graphics_variation=11}, {x=-43.1875, y=-31.5, graphics_variation=21}, {x=-11.0859375, y=-31.75390625, graphics_variation=8}, {x=-12.2578125, y=-29.09375, graphics_variation=7}, {x=28.0390625, y=-26.46875, graphics_variation=3}, {x=28.0390625, y=-26.46875, graphics_variation=3}, {x=26.21875, y=-19.7421875, graphics_variation=22}, {x=26.21875, y=-19.7421875, graphics_variation=22}, {x=26.21875, y=-19.7421875, graphics_variation=22}, {x=7.46875, y=-10.7734375, graphics_variation=1}, {x=3.2578125, y=13.59375, graphics_variation=30}, {x=3.5078125, y=24.21875, graphics_variation=21}, {x=3.5078125, y=24.21875, graphics_variation=21}, }, + ["workshop-ruin"] = {{x=76.5, y=-97.5, graphics_variation=1}, {x=69.5, y=-87.5, graphics_variation=1}, {x=-19.5, y=-62.5, graphics_variation=1}, {x=8.5, y=-62.5, graphics_variation=1}, {x=66.5, y=-55.5, graphics_variation=1}, {x=73.5, y=-55.5, graphics_variation=1}, {x=78.5, y=-54.5, graphics_variation=1}, {x=13.5, y=-47.5, graphics_variation=1}, {x=66.5, y=-41.5, graphics_variation=1}, {x=80.5, y=-32.5, graphics_variation=1}, {x=13.5, y=-31.5, graphics_variation=1}, {x=80.5, y=-27.5, graphics_variation=1}, {x=80.5, y=-23.5, graphics_variation=1}, {x=13.5, y=-8.5, graphics_variation=1}, {x=77.5, y=-8.5, graphics_variation=1}, {x=13.5, y=21.5, graphics_variation=1}, {x=13.5, y=26.5, graphics_variation=1}, {x=-37.5, y=28.5, graphics_variation=1}, {x=-32.5, y=34.5, graphics_variation=1}, {x=71.5, y=34.5, graphics_variation=1}, {x=77.5, y=34.5, graphics_variation=1}, {x=68.5, y=48.5, graphics_variation=1}, {x=72.5, y=48.5, graphics_variation=1}, {x=80.5, y=48.5, graphics_variation=1}, {x=-22.5, y=51.5, graphics_variation=1}, {x=1.5, y=58.5, graphics_variation=1}, {x=41.5, y=60.5, graphics_variation=1}, {x=46.5, y=60.5, graphics_variation=1}, {x=50.5, y=60.5, graphics_variation=1}, {x=57.5, y=60.5, graphics_variation=1}, {x=61.5, y=60.5, graphics_variation=1}, {x=67.5, y=60.5, graphics_variation=1}, {x=71.5, y=60.5, graphics_variation=1}, {x=9.5, y=64.5, graphics_variation=1}, {x=37.5, y=66.5, graphics_variation=1}, {x=37.5, y=70.5, graphics_variation=1}, {x=6.5, y=75.5, graphics_variation=1}, {x=6.5, y=79.5, graphics_variation=1}, {x=26.5, y=78.5, graphics_variation=1}, {x=65.5, y=88.5, graphics_variation=1}, {x=26.5, y=93.5, graphics_variation=1}, {x=26.5, y=97.5, graphics_variation=1}, {x=37.5, y=102.5, graphics_variation=1}, {x=65.5, y=102.5, graphics_variation=1}, {x=79.5, y=102.5, graphics_variation=1}, {x=26.5, y=112.5, graphics_variation=1}, {x=53.5, y=112.5, graphics_variation=1}, {x=2.5, y=114.5, graphics_variation=1}, {x=83.5, y=117.5, graphics_variation=1}, {x=-30.5, y=123.5, graphics_variation=1}, {x=-0.5, y=123.5, graphics_variation=1}, {x=26.5, y=124.5, graphics_variation=1}, {x=83.5, y=124.5, graphics_variation=1}, {x=-0.5, y=132.5, graphics_variation=1}, {x=26.5, y=132.5, graphics_variation=1}, {x=83.5, y=133.5, graphics_variation=1}, {x=67.5, y=137.5, graphics_variation=1}, {x=83.5, y=137.5, graphics_variation=1}, {x=49.5, y=141.5, graphics_variation=1}, {x=53.5, y=141.5, graphics_variation=1}, {x=67.5, y=141.5, graphics_variation=1}, {x=83.5, y=141.5, graphics_variation=1}, {x=6.5, y=145.5, graphics_variation=1}, }, + ["wood-half-chest-right"] = {{x=79.26953125, y=-97.87890625, graphics_variation=1}, {x=66.47265625, y=-89.8515625, graphics_variation=1}, {x=56.4296875, y=-86.4296875, graphics_variation=1}, {x=-30.5234375, y=-61.625, graphics_variation=1}, {x=-1.828125, y=-61.4453125, graphics_variation=1}, {x=14.53125, y=-55.24609375, graphics_variation=1}, {x=74.1015625, y=-51.8125, graphics_variation=1}, {x=67.43359375, y=-49.60546875, graphics_variation=1}, {x=14.40625, y=-37.25390625, graphics_variation=1}, {x=14.26953125, y=-34.74609375, graphics_variation=1}, {x=14.5, y=-16.98046875, graphics_variation=1}, {x=75.37109375, y=-9.6328125, graphics_variation=1}, {x=14.46484375, y=9.11328125, graphics_variation=1}, {x=62.2890625, y=8.421875, graphics_variation=1}, {x=81.2890625, y=19.078125, graphics_variation=1}, {x=-39.5546875, y=29.3515625, graphics_variation=1}, {x=-75.6015625, y=36.375, graphics_variation=1}, {x=67.2578125, y=43.140625, graphics_variation=1}, {x=7.3359375, y=69.44140625, graphics_variation=1}, {x=80.4453125, y=77.65234375, graphics_variation=1}, {x=7.45703125, y=81.25, graphics_variation=1}, {x=7.45703125, y=81.25, graphics_variation=1}, {x=72.3515625, y=137.87890625, graphics_variation=1}, }, + ["tree-wetland-i"] = {{x=6.8984375, y=-96.2265625, graphics_variation=2}, {x=18.0078125, y=-81.125, graphics_variation=7}, {x=21.87109375, y=-81.4375, graphics_variation=5}, {x=27.66796875, y=-79.78125, graphics_variation=2}, {x=17.87109375, y=-78.67578125, graphics_variation=2}, {x=-40.71875, y=-73.85546875, graphics_variation=1}, {x=7.8984375, y=-57.89453125, graphics_variation=7}, {x=9.25390625, y=-56.109375, graphics_variation=7}, {x=7.25, y=-3.1328125, graphics_variation=1}, {x=9.21484375, y=15.53125, graphics_variation=1}, {x=7.55859375, y=24.7109375, graphics_variation=3}, {x=-16.38671875, y=30.95703125, graphics_variation=5}, {x=9.87109375, y=32.54296875, graphics_variation=2}, {x=-20.8359375, y=34.88671875, graphics_variation=1}, {x=-18.8359375, y=35.578125, graphics_variation=8}, {x=5.3515625, y=35.12890625, graphics_variation=7}, {x=9.04296875, y=35.71484375, graphics_variation=3}, {x=-83.07421875, y=45.24609375, graphics_variation=6}, {x=-60.4375, y=45.03515625, graphics_variation=6}, {x=-60.375, y=48.03515625, graphics_variation=3}, {x=-57.59375, y=47.84765625, graphics_variation=3}, {x=-32.33984375, y=47.7421875, graphics_variation=8}, {x=-30.49609375, y=47.79296875, graphics_variation=1}, {x=-60.5, y=49.22265625, graphics_variation=4}, {x=-58.5625, y=50.75390625, graphics_variation=3}, {x=-30.49609375, y=49.89453125, graphics_variation=1}, {x=-60.375, y=51.84765625, graphics_variation=5}, {x=30.98046875, y=52.85546875, graphics_variation=1}, {x=29.875, y=54.35546875, graphics_variation=7}, {x=-77.46875, y=73.8125, graphics_variation=5}, {x=-56.73828125, y=73.9140625, graphics_variation=3}, {x=-34.97265625, y=73.53125, graphics_variation=8}, {x=-33.12890625, y=73.8359375, graphics_variation=2}, {x=-64.91015625, y=75.23046875, graphics_variation=7}, {x=-58.12109375, y=75.76171875, graphics_variation=5}, {x=-34.21484375, y=75.6015625, graphics_variation=1}, {x=-32.28125, y=75.24609375, graphics_variation=1}, {x=-22.97265625, y=76.22265625, graphics_variation=7}, {x=-18.82421875, y=75.90625, graphics_variation=5}, {x=-5.81640625, y=76.4921875, graphics_variation=3}, {x=-57.6796875, y=77.640625, graphics_variation=8}, {x=-24.44921875, y=77.328125, graphics_variation=4}, {x=-16.9296875, y=77.39453125, graphics_variation=8}, {x=-4.0234375, y=79.35546875, graphics_variation=3}, {x=-0.17578125, y=79.58203125, graphics_variation=3}, {x=-18.375, y=84.83984375, graphics_variation=7}, {x=-65.9296875, y=86.12109375, graphics_variation=8}, {x=-65.9296875, y=86.1875, graphics_variation=4}, {x=-23.20703125, y=87.98828125, graphics_variation=7}, {x=-18.72265625, y=88.015625, graphics_variation=7}, {x=-0.96875, y=87.2890625, graphics_variation=4}, {x=1.9765625, y=88.1953125, graphics_variation=8}, {x=1.9765625, y=88.30859375, graphics_variation=8}, {x=-77.26171875, y=90.4609375, graphics_variation=2}, {x=-65.48828125, y=90.3671875, graphics_variation=2}, {x=-29.078125, y=90.0390625, graphics_variation=1}, {x=-29.19140625, y=89.5859375, graphics_variation=7}, {x=-24.34765625, y=90.74609375, graphics_variation=6}, {x=-84.49609375, y=92.5078125, graphics_variation=3}, {x=-70.38671875, y=91.1796875, graphics_variation=6}, {x=-27.71875, y=91.73828125, graphics_variation=7}, {x=-16.4453125, y=91.47265625, graphics_variation=5}, {x=-23.171875, y=96.78515625, graphics_variation=7}, {x=-17.515625, y=95.12890625, graphics_variation=7}, {x=-4.30859375, y=96.06640625, graphics_variation=8}, {x=-4.30859375, y=96.29296875, graphics_variation=2}, {x=-4.36328125, y=96.515625, graphics_variation=3}, {x=-4.30859375, y=95.21484375, graphics_variation=3}, {x=-4.30859375, y=95.5546875, graphics_variation=3}, {x=-4.30859375, y=95.83984375, graphics_variation=2}, {x=-27.65234375, y=98.38671875, graphics_variation=1}, {x=-4.81640625, y=97.53515625, graphics_variation=6}, {x=-6.7421875, y=99.51953125, graphics_variation=5}, {x=-27.19921875, y=102.06640625, graphics_variation=5}, {x=-25.6171875, y=102.40625, graphics_variation=2}, {x=-26.69140625, y=102.9140625, graphics_variation=8}, {x=-4.9296875, y=102.6875, graphics_variation=1}, {x=-18.7578125, y=104.4453125, graphics_variation=2}, {x=-27.59765625, y=106.25390625, graphics_variation=1}, {x=-4.53515625, y=106.6484375, graphics_variation=8}, {x=-4.4765625, y=106.8203125, graphics_variation=8}, {x=-19.34375, y=107.48046875, graphics_variation=1}, {x=-22.69140625, y=113.48046875, graphics_variation=6}, {x=-26.2421875, y=115.62109375, graphics_variation=7}, {x=-16.71875, y=116.1015625, graphics_variation=5}, {x=-15.09765625, y=117.5859375, graphics_variation=1}, {x=-14.99609375, y=117.4140625, graphics_variation=5}, {x=-65.34765625, y=120.89453125, graphics_variation=5}, {x=62.14453125, y=126.84375, graphics_variation=3}, {x=70.35546875, y=127.37890625, graphics_variation=6}, {x=62.6796875, y=132.046875, graphics_variation=2}, {x=65.8203125, y=131.64453125, graphics_variation=8}, {x=-52.4140625, y=140.93359375, graphics_variation=1}, {x=-43.6484375, y=140.5859375, graphics_variation=3}, {x=9.75, y=140.87890625, graphics_variation=2}, {x=11.2890625, y=140.5703125, graphics_variation=8}, {x=-48.515625, y=141.2421875, graphics_variation=2}, {x=-48.58203125, y=141.2421875, graphics_variation=1}, {x=16.6171875, y=141.98046875, graphics_variation=2}, {x=24, y=141.26171875, graphics_variation=5}, {x=10.515625, y=143.875, graphics_variation=1}, }, + ["tree-desert-f"] = {{x=19.2734375, y=-81.484375, graphics_variation=4}, {x=22.51171875, y=-78.58984375, graphics_variation=3}, {x=29.1015625, y=-78.4375, graphics_variation=6}, {x=25.328125, y=-76.68359375, graphics_variation=6}, {x=33.78515625, y=-76.609375, graphics_variation=4}, {x=18.28125, y=-74.7421875, graphics_variation=5}, {x=-10.0546875, y=-30.91015625, graphics_variation=4}, {x=-58.5234375, y=46.71875, graphics_variation=6}, {x=-57.72265625, y=73.953125, graphics_variation=2}, {x=-14.05859375, y=77.20703125, graphics_variation=6}, {x=-14.6796875, y=79.484375, graphics_variation=7}, {x=-14.74609375, y=79.484375, graphics_variation=5}, {x=-4.63671875, y=87.45703125, graphics_variation=5}, {x=-6.19140625, y=89.11328125, graphics_variation=2}, {x=-4.984375, y=91.390625, graphics_variation=7}, {x=-16.203125, y=98.8359375, graphics_variation=5}, {x=-17.89453125, y=100.07421875, graphics_variation=6}, {x=-23.828125, y=106.35546875, graphics_variation=2}, {x=-26.3828125, y=108.4609375, graphics_variation=7}, {x=-10.71484375, y=108.1484375, graphics_variation=6}, {x=-9.95703125, y=110.390625, graphics_variation=1}, {x=-10.02734375, y=110.359375, graphics_variation=1}, {x=-8.05859375, y=109.76953125, graphics_variation=5}, {x=-14.6171875, y=112.15234375, graphics_variation=7}, {x=-9.6484375, y=112.39453125, graphics_variation=5}, {x=-9.71484375, y=112.4296875, graphics_variation=7}, {x=-9.78515625, y=112.49609375, graphics_variation=4}, {x=-6.75, y=111.7734375, graphics_variation=2}, {x=-13.0390625, y=149.72265625, graphics_variation=6}, {x=-4.9140625, y=149.5234375, graphics_variation=6}, {x=2.7265625, y=149.3828125, graphics_variation=3}, }, + ["vase"] = {{x=26.99609375, y=-66.0390625, graphics_variation=1}, {x=29.98046875, y=-65.99609375, graphics_variation=1}, {x=33.05078125, y=-65.99609375, graphics_variation=1}, {x=42.875, y=-66.0390625, graphics_variation=1}, {x=46.02734375, y=-65.99609375, graphics_variation=1}, {x=49.03515625, y=-65.953125, graphics_variation=1}, {x=27.05859375, y=-41.6796875, graphics_variation=1}, {x=30.00390625, y=-41.73046875, graphics_variation=1}, {x=33.00390625, y=-41.70703125, graphics_variation=1}, {x=43.10546875, y=-41.70703125, graphics_variation=1}, {x=46.02734375, y=-41.65625, graphics_variation=1}, {x=49.10546875, y=-41.78125, graphics_variation=1}, {x=-18.41015625, y=43.4765625, graphics_variation=1}, {x=-16.44140625, y=43.51171875, graphics_variation=1}, {x=52.03515625, y=47.2734375, graphics_variation=1}, {x=54.01953125, y=47.3125, graphics_variation=1}, {x=56.07421875, y=47.29296875, graphics_variation=1}, {x=13.078125, y=52.375, graphics_variation=1}, {x=15.453125, y=56.578125, graphics_variation=1}, {x=21.625, y=56.53125, graphics_variation=1}, {x=-24.953125, y=58.37109375, graphics_variation=1}, {x=-21.92578125, y=58.4140625, graphics_variation=1}, {x=27.81640625, y=57.6953125, graphics_variation=1}, {x=27.81640625, y=59.671875, graphics_variation=1}, {x=15.40625, y=62.390625, graphics_variation=1}, {x=21.609375, y=62.453125, graphics_variation=1}, {x=27.87890625, y=61.6484375, graphics_variation=1}, {x=-57.96875, y=85.203125, graphics_variation=1}, {x=-54.890625, y=85.203125, graphics_variation=1}, {x=36.22265625, y=91.40625, graphics_variation=1}, {x=36.16796875, y=93.5390625, graphics_variation=1}, {x=13.5078125, y=105.984375, graphics_variation=1}, {x=15.5703125, y=105.984375, graphics_variation=1}, {x=17.50390625, y=106.06640625, graphics_variation=1}, {x=19.5234375, y=106.0234375, graphics_variation=1}, {x=70.15234375, y=107.4609375, graphics_variation=1}, {x=84.828125, y=107.55078125, graphics_variation=1}, {x=13.8671875, y=117.64453125, graphics_variation=1}, {x=23.625, y=117.5390625, graphics_variation=1}, {x=-30.484375, y=120.59765625, graphics_variation=1}, {x=-9.45703125, y=120.61328125, graphics_variation=1}, {x=13.7421875, y=125.5859375, graphics_variation=1}, {x=23.60546875, y=125.69140625, graphics_variation=1}, {x=-53.5078125, y=129.6015625, graphics_variation=1}, {x=-45.515625, y=129.70703125, graphics_variation=1}, {x=-37.421875, y=129.8125, graphics_variation=1}, {x=-29.55078125, y=129.55859375, graphics_variation=1}, {x=-9.3828125, y=129.58203125, graphics_variation=1}, {x=2.5078125, y=129.70703125, graphics_variation=1}, {x=-17.4765625, y=132.50390625, graphics_variation=1}, {x=13.67578125, y=133.703125, graphics_variation=1}, {x=23.79296875, y=133.6171875, graphics_variation=1}, }, + ["iron-wood-chest-remnants"] = {{x=-32.5, y=-63.5, graphics_variation=1}, {x=-36.5, y=-61.5, graphics_variation=1}, {x=-36.5, y=-62.5, graphics_variation=1}, {x=64.5, y=-42.5, graphics_variation=1}, {x=80.5, y=-17.5, graphics_variation=1}, {x=-80.5, y=-16.5, graphics_variation=1}, {x=-77.5, y=-16.5, graphics_variation=1}, {x=-31.5, y=-16.5, graphics_variation=1}, {x=-28.5, y=-16.5, graphics_variation=1}, {x=65.5, y=-4.5, graphics_variation=1}, {x=67.5, y=-4.5, graphics_variation=1}, {x=80.5, y=8.5, graphics_variation=1}, {x=80.5, y=10.5, graphics_variation=1}, {x=12.5, y=19.5, graphics_variation=1}, {x=80.5, y=21.5, graphics_variation=1}, {x=-84.5, y=29.5, graphics_variation=1}, {x=-24.5, y=29.5, graphics_variation=1}, {x=12.5, y=34.5, graphics_variation=1}, {x=80.5, y=38.5, graphics_variation=1}, {x=62.5, y=47.5, graphics_variation=1}, {x=62.5, y=49.5, graphics_variation=1}, {x=23.5, y=54.5, graphics_variation=1}, {x=-77.5, y=59.5, graphics_variation=1}, {x=-63.5, y=59.5, graphics_variation=1}, {x=-76.5, y=66.5, graphics_variation=1}, {x=-64.5, y=66.5, graphics_variation=1}, {x=36.5, y=76.5, graphics_variation=1}, {x=50.5, y=76.5, graphics_variation=1}, {x=72.5, y=76.5, graphics_variation=1}, {x=36.5, y=77.5, graphics_variation=1}, {x=50.5, y=78.5, graphics_variation=1}, {x=72.5, y=78.5, graphics_variation=1}, {x=74.5, y=78.5, graphics_variation=1}, {x=74.5, y=77.5, graphics_variation=1}, {x=10.5, y=86.5, graphics_variation=1}, {x=-30.5, y=94.5, graphics_variation=1}, {x=2.5, y=101.5, graphics_variation=1}, {x=1.5, y=101.5, graphics_variation=1}, {x=9.5, y=105.5, graphics_variation=1}, {x=10.5, y=105.5, graphics_variation=1}, {x=2.5, y=110.5, graphics_variation=1}, {x=3.5, y=110.5, graphics_variation=1}, {x=19.5, y=117.5, graphics_variation=1}, {x=-51.5, y=120.5, graphics_variation=1}, {x=-40.5, y=120.5, graphics_variation=1}, {x=2.5, y=124.5, graphics_variation=1}, {x=19.5, y=125.5, graphics_variation=1}, {x=19.5, y=133.5, graphics_variation=1}, }, + ["wood-half-chest-left"] = {{x=-28.65625, y=-62.71484375, graphics_variation=1}, {x=-42.58984375, y=-61.73828125, graphics_variation=1}, {x=61.30078125, y=-56.6484375, graphics_variation=1}, {x=64.41015625, y=-44.7578125, graphics_variation=1}, {x=-84.4375, y=-23.24609375, graphics_variation=1}, {x=-31.55859375, y=-23.33984375, graphics_variation=1}, {x=-31.60546875, y=-21.83203125, graphics_variation=1}, {x=-31.48828125, y=-19.99609375, graphics_variation=1}, {x=70.39453125, y=-2.9921875, graphics_variation=1}, {x=-70.66796875, y=27.59375, graphics_variation=1}, {x=5.43359375, y=62.4765625, graphics_variation=1}, {x=25.31640625, y=101.5078125, graphics_variation=1}, {x=25.69140625, y=117.2265625, graphics_variation=1}, {x=68.48828125, y=116.60546875, graphics_variation=1}, {x=-18.609375, y=133.44921875, graphics_variation=1}, {x=5.375, y=135.5390625, graphics_variation=1}, {x=5.34765625, y=137.3046875, graphics_variation=1}, {x=70.30078125, y=136.1015625, graphics_variation=1}, {x=36.33984375, y=137.69921875, graphics_variation=1}, {x=70.3671875, y=142.1875, graphics_variation=1}, }, + ["furnace-ruin"] = {{x=74, y=-59, graphics_variation=1}, {x=62, y=-55, graphics_variation=1}, {x=82, y=-56, graphics_variation=1}, {x=65, y=-52, graphics_variation=1}, {x=74, y=-49, graphics_variation=1}, {x=74, y=-37, graphics_variation=1}, {x=-75, y=-23, graphics_variation=1}, {x=-34, y=-23, graphics_variation=1}, {x=-75, y=-19, graphics_variation=1}, {x=-34, y=-19, graphics_variation=1}, {x=18, y=-4, graphics_variation=1}, {x=58, y=-4, graphics_variation=1}, {x=62, y=-4, graphics_variation=1}, {x=81, y=0, graphics_variation=1}, {x=81, y=3, graphics_variation=1}, {x=62, y=22, graphics_variation=1}, {x=81, y=24, graphics_variation=1}, {x=-84, y=27, graphics_variation=1}, {x=-78, y=27, graphics_variation=1}, {x=-31, y=27, graphics_variation=1}, {x=-25, y=27, graphics_variation=1}, {x=62, y=26, graphics_variation=1}, {x=-72, y=28, graphics_variation=1}, {x=-57, y=32, graphics_variation=1}, {x=71, y=32, graphics_variation=1}, {x=-72, y=35, graphics_variation=1}, {x=-69, y=35, graphics_variation=1}, {x=-66, y=35, graphics_variation=1}, {x=-63, y=35, graphics_variation=1}, {x=-57, y=35, graphics_variation=1}, {x=-46, y=35, graphics_variation=1}, {x=-43, y=35, graphics_variation=1}, {x=-40, y=35, graphics_variation=1}, {x=-37, y=35, graphics_variation=1}, {x=81, y=41, graphics_variation=1}, {x=-28, y=43, graphics_variation=1}, {x=-74, y=48, graphics_variation=1}, {x=65, y=49, graphics_variation=1}, {x=-64, y=52, graphics_variation=1}, {x=37, y=60, graphics_variation=1}, {x=2, y=70, graphics_variation=1}, {x=13, y=70, graphics_variation=1}, {x=2, y=73, graphics_variation=1}, {x=2, y=76, graphics_variation=1}, {x=23, y=87, graphics_variation=1}, {x=-1, y=93, graphics_variation=1}, {x=23, y=93, graphics_variation=1}, {x=-54, y=95, graphics_variation=1}, {x=-85, y=99, graphics_variation=1}, {x=-66, y=99, graphics_variation=1}, {x=-62, y=99, graphics_variation=1}, {x=-54, y=101, graphics_variation=1}, {x=-35, y=101, graphics_variation=1}, {x=10, y=100, graphics_variation=1}, {x=23, y=100, graphics_variation=1}, {x=-54, y=111, graphics_variation=1}, {x=-35, y=111, graphics_variation=1}, {x=66, y=117, graphics_variation=1}, {x=-18, y=121, graphics_variation=1}, {x=-51, y=124, graphics_variation=1}, {x=-40, y=124, graphics_variation=1}, {x=-18, y=124, graphics_variation=1}, {x=83, y=128, graphics_variation=1}, {x=-18, y=130, graphics_variation=1}, }, + ["sand-decal-ruin"] = {{x=-62.3359375, y=-40.17578125, graphics_variation=12}, {x=-12.6640625, y=-34.4921875, graphics_variation=15}, {x=-62.7890625, y=-31.546875, graphics_variation=7}, {x=4.2109375, y=-18.08203125, graphics_variation=13}, {x=3.703125, y=0.0078125, graphics_variation=11}, }, + ["wooden-barrel"] = {{x=69.6953125, y=-37.54296875, graphics_variation=1}, {x=79.3828125, y=-17.359375, graphics_variation=1}, {x=12.640625, y=3.5859375, graphics_variation=1}, {x=81.8515625, y=28.921875, graphics_variation=1}, {x=14.8515625, y=39.12109375, graphics_variation=1}, {x=14.7890625, y=40.63671875, graphics_variation=1}, {x=14.8671875, y=42.08984375, graphics_variation=1}, {x=12.2109375, y=47.21484375, graphics_variation=1}, {x=43.30078125, y=59.48046875, graphics_variation=1}, {x=48.3359375, y=76.7578125, graphics_variation=1}, {x=47.359375, y=76.64453125, graphics_variation=1}, {x=80.59765625, y=76.8203125, graphics_variation=1}, {x=48.58984375, y=77.56640625, graphics_variation=1}, {x=48.58984375, y=78.5703125, graphics_variation=1}, {x=36.33984375, y=106.6171875, graphics_variation=1}, {x=84.7890625, y=111.578125, graphics_variation=1}, }, + }, + default_under_tile = "mineral-tan-dirt-3", -- put under all minable tiles + tiles = { + ["mineral-tan-dirt-3"] = {{-96,-30}, {-96,-29}, {-96,-28}, {-96,-27}, {-96,-5}, {-96,-4}, {-96,-3}, {-96,-2}, {-96,-1}, {-96,0}, {-96,1}, {-96,2}, {-96,3}, {-95,-30}, {-93,68}, {-93,69}, {-93,70}, {-93,71}, {-93,72}, {-93,73}, {-93,74}, {-93,75}, {-93,76}, {-93,77}, {-92,68}, {-92,69}, {-92,70}, {-92,71}, {-92,72}, {-92,73}, {-92,74}, {-92,75}, {-92,76}, {-92,77}, {-91,71}, {-91,72}, {-91,73}, {-91,74}, {-91,75}, {-91,76}, {-90,-42}, {-90,-41}, {-90,-40}, {-90,-39}, {-90,-38}, {-89,-42}, {-89,-41}, {-89,-40}, {-89,-39}, {-89,-38}, {-88,-42}, {-88,-41}, {-88,-40}, {-85,83}, {-85,84}, {-85,85}, {-85,86}, {-85,87}, {-84,69}, {-84,70}, {-84,71}, {-84,72}, {-84,73}, {-84,74}, {-84,75}, {-84,76}, {-84,77}, {-84,78}, {-84,79}, {-84,80}, {-84,81}, {-84,82}, {-84,83}, {-84,84}, {-84,85}, {-84,86}, {-84,87}, {-83,-104}, {-83,-103}, {-83,-102}, {-83,-101}, {-83,-82}, {-83,-81}, {-83,-80}, {-83,-60}, {-83,-59}, {-83,-58}, {-82,-106}, {-82,-105}, {-82,-104}, {-82,-103}, {-82,-102}, {-82,-101}, {-82,-100}, {-82,-99}, {-82,-81}, {-82,-80}, {-82,-79}, {-82,-59}, {-82,-58}, {-82,-57}, {-82,-35}, {-82,-34}, {-82,-33}, {-82,-32}, {-81,-108}, {-81,-107}, {-81,-106}, {-81,-105}, {-81,-104}, {-81,-101}, {-81,-100}, {-81,-99}, {-81,-98}, {-81,-97}, {-81,-81}, {-81,-80}, {-81,-79}, {-81,-60}, {-81,-59}, {-81,-58}, {-81,-57}, {-81,-35}, {-81,-34}, {-81,-33}, {-81,-32}, {-80,-118}, {-80,-117}, {-80,-116}, {-80,-115}, {-80,-114}, {-80,-113}, {-80,-112}, {-80,-111}, {-80,-108}, {-80,-107}, {-80,-106}, {-80,-105}, {-80,-104}, {-80,-103}, {-80,-98}, {-80,-97}, {-80,-96}, {-80,-81}, {-80,-80}, {-80,-79}, {-80,-60}, {-80,-59}, {-80,-58}, {-80,-57}, {-80,-37}, {-80,-36}, {-80,-35}, {-80,-34}, {-79,-119}, {-79,-118}, {-79,-117}, {-79,-116}, {-79,-115}, {-79,-114}, {-79,-113}, {-79,-112}, {-79,-111}, {-79,-110}, {-79,-109}, {-79,-108}, {-79,-107}, {-79,-105}, {-79,-104}, {-79,-103}, {-79,-102}, {-79,-101}, {-79,-100}, {-79,-97}, {-79,-96}, {-79,-95}, {-79,-94}, {-79,-93}, {-79,-80}, {-79,-79}, {-79,-78}, {-79,-60}, {-79,-59}, {-79,-58}, {-79,-40}, {-79,-39}, {-79,-37}, {-79,-36}, {-79,-35}, {-78,-120}, {-78,-119}, {-78,-118}, {-78,-117}, {-78,-116}, {-78,-115}, {-78,-111}, {-78,-110}, {-78,-109}, {-78,-108}, {-78,-107}, {-78,-106}, {-78,-105}, {-78,-103}, {-78,-102}, {-78,-101}, {-78,-100}, {-78,-99}, {-78,-98}, {-78,-96}, {-78,-95}, {-78,-94}, {-78,-93}, {-78,-92}, {-78,-91}, {-78,-80}, {-78,-79}, {-78,-78}, {-78,-77}, {-78,-61}, {-78,-60}, {-78,-59}, {-78,-58}, {-78,-40}, {-78,-39}, {-78,-38}, {-78,-37}, {-78,-36}, {-78,76}, {-78,77}, {-78,79}, {-78,80}, {-78,81}, {-78,82}, {-77,-120}, {-77,-119}, {-77,-118}, {-77,-117}, {-77,-116}, {-77,-115}, {-77,-114}, {-77,-108}, {-77,-107}, {-77,-106}, {-77,-105}, {-77,-104}, {-77,-101}, {-77,-100}, {-77,-99}, {-77,-98}, {-77,-97}, {-77,-96}, {-77,-94}, {-77,-93}, {-77,-92}, {-77,-91}, {-77,-90}, {-77,-89}, {-77,-80}, {-77,-79}, {-77,-78}, {-77,-77}, {-77,-61}, {-77,-60}, {-77,-59}, {-77,-58}, {-77,-47}, {-77,-45}, {-77,-43}, {-77,-42}, {-77,-41}, {-77,-40}, {-77,-39}, {-77,-38}, {-77,-37}, {-77,-36}, {-77,-35}, {-77,74}, {-77,75}, {-77,76}, {-77,77}, {-77,78}, {-77,79}, {-77,80}, {-77,81}, {-77,82}, {-77,83}, {-77,84}, {-77,85}, {-77,86}, {-77,89}, {-77,90}, {-76,-120}, {-76,-119}, {-76,-118}, {-76,-117}, {-76,-116}, {-76,-115}, {-76,-114}, {-76,-113}, {-76,-112}, {-76,-107}, {-76,-106}, {-76,-105}, {-76,-104}, {-76,-99}, {-76,-98}, {-76,-97}, {-76,-96}, {-76,-95}, {-76,-94}, {-76,-91}, {-76,-90}, {-76,-89}, {-76,-88}, {-76,-87}, {-76,-80}, {-76,-79}, {-76,-78}, {-76,-77}, {-76,-76}, {-76,-62}, {-76,-61}, {-76,-60}, {-76,-59}, {-76,-50}, {-76,-49}, {-76,-48}, {-76,-47}, {-76,-46}, {-76,-45}, {-76,-44}, {-76,-43}, {-76,-42}, {-76,-41}, {-76,-40}, {-76,-39}, {-76,-38}, {-76,-37}, {-76,-36}, {-76,-35}, {-76,-34}, {-76,-33}, {-76,74}, {-76,75}, {-76,76}, {-76,77}, {-76,78}, {-76,79}, {-76,80}, {-76,81}, {-76,82}, {-76,83}, {-76,84}, {-76,85}, {-76,86}, {-76,89}, {-76,90}, {-76,91}, {-75,-120}, {-75,-119}, {-75,-118}, {-75,-117}, {-75,-115}, {-75,-114}, {-75,-113}, {-75,-112}, {-75,-111}, {-75,-110}, {-75,-109}, {-75,-105}, {-75,-104}, {-75,-103}, {-75,-102}, {-75,-97}, {-75,-96}, {-75,-95}, {-75,-94}, {-75,-93}, {-75,-92}, {-75,-90}, {-75,-89}, {-75,-88}, {-75,-87}, {-75,-86}, {-75,-80}, {-75,-79}, {-75,-78}, {-75,-77}, {-75,-76}, {-75,-63}, {-75,-62}, {-75,-61}, {-75,-60}, {-75,-59}, {-75,-51}, {-75,-50}, {-75,-49}, {-75,-48}, {-75,-47}, {-75,-46}, {-75,-45}, {-75,-44}, {-75,-43}, {-75,-42}, {-75,-41}, {-75,-40}, {-75,-39}, {-75,-38}, {-75,-37}, {-75,-36}, {-75,-35}, {-75,-34}, {-75,-33}, {-75,74}, {-75,75}, {-75,77}, {-75,78}, {-75,79}, {-75,80}, {-75,81}, {-75,82}, {-75,83}, {-75,84}, {-75,85}, {-75,86}, {-75,87}, {-75,88}, {-75,89}, {-75,90}, {-75,91}, {-74,-120}, {-74,-119}, {-74,-118}, {-74,-117}, {-74,-112}, {-74,-111}, {-74,-110}, {-74,-109}, {-74,-108}, {-74,-107}, {-74,-104}, {-74,-103}, {-74,-102}, {-74,-101}, {-74,-96}, {-74,-95}, {-74,-94}, {-74,-93}, {-74,-92}, {-74,-91}, {-74,-90}, {-74,-89}, {-74,-88}, {-74,-87}, {-74,-86}, {-74,-80}, {-74,-79}, {-74,-78}, {-74,-77}, {-74,-76}, {-74,-75}, {-74,-74}, {-74,-73}, {-74,-63}, {-74,-62}, {-74,-61}, {-74,-60}, {-74,-59}, {-74,-51}, {-74,-50}, {-74,-49}, {-74,-48}, {-74,-47}, {-74,-46}, {-74,-45}, {-74,-44}, {-74,-43}, {-74,-42}, {-74,-41}, {-74,-40}, {-74,-39}, {-74,-38}, {-74,-37}, {-74,-36}, {-74,-35}, {-74,-34}, {-74,-33}, {-74,73}, {-74,74}, {-74,75}, {-74,76}, {-74,77}, {-74,78}, {-74,79}, {-74,80}, {-74,82}, {-74,83}, {-74,84}, {-74,85}, {-74,86}, {-74,89}, {-74,90}, {-74,91}, {-73,-119}, {-73,-118}, {-73,-117}, {-73,-110}, {-73,-109}, {-73,-108}, {-73,-107}, {-73,-106}, {-73,-103}, {-73,-102}, {-73,-101}, {-73,-100}, {-73,-99}, {-73,-98}, {-73,-97}, {-73,-96}, {-73,-94}, {-73,-93}, {-73,-92}, {-73,-91}, {-73,-90}, {-73,-89}, {-73,-88}, {-73,-87}, {-73,-86}, {-73,-79}, {-73,-78}, {-73,-77}, {-73,-76}, {-73,-75}, {-73,-74}, {-73,-73}, {-73,-72}, {-73,-66}, {-73,-65}, {-73,-64}, {-73,-63}, {-73,-62}, {-73,-61}, {-73,-60}, {-73,-59}, {-73,-51}, {-73,-50}, {-73,-49}, {-73,-48}, {-73,-47}, {-73,-46}, {-73,-45}, {-73,-44}, {-73,-43}, {-73,-42}, {-73,-41}, {-73,-40}, {-73,-39}, {-73,-38}, {-73,-37}, {-73,-36}, {-73,-35}, {-73,-34}, {-73,-33}, {-73,73}, {-73,74}, {-73,75}, {-73,76}, {-73,77}, {-73,78}, {-73,79}, {-73,84}, {-73,85}, {-73,86}, {-73,87}, {-73,88}, {-73,89}, {-73,90}, {-72,-119}, {-72,-118}, {-72,-117}, {-72,-116}, {-72,-115}, {-72,-114}, {-72,-109}, {-72,-108}, {-72,-107}, {-72,-106}, {-72,-105}, {-72,-104}, {-72,-101}, {-72,-100}, {-72,-99}, {-72,-98}, {-72,-97}, {-72,-96}, {-72,-95}, {-72,-94}, {-72,-92}, {-72,-91}, {-72,-90}, {-72,-89}, {-72,-88}, {-72,-87}, {-72,-77}, {-72,-75}, {-72,-74}, {-72,-65}, {-72,-62}, {-72,-51}, {-72,-50}, {-72,-49}, {-72,-48}, {-72,-47}, {-72,-46}, {-72,-45}, {-72,-44}, {-72,-43}, {-72,-42}, {-72,-41}, {-72,-40}, {-72,-39}, {-72,-38}, {-72,-37}, {-72,-36}, {-72,-35}, {-72,-34}, {-72,-33}, {-72,-32}, {-72,73}, {-72,74}, {-72,75}, {-72,76}, {-72,77}, {-72,78}, {-72,79}, {-72,84}, {-72,85}, {-72,86}, {-72,87}, {-72,88}, {-72,89}, {-72,90}, {-71,-119}, {-71,-118}, {-71,-117}, {-71,-116}, {-71,-115}, {-71,-114}, {-71,-113}, {-71,-112}, {-71,-107}, {-71,-106}, {-71,-105}, {-71,-104}, {-71,-103}, {-71,-102}, {-71,-99}, {-71,-98}, {-71,-97}, {-71,-96}, {-71,-95}, {-71,-94}, {-71,-93}, {-71,-90}, {-71,-89}, {-71,-88}, {-71,-87}, {-71,-50}, {-71,-49}, {-71,-48}, {-71,-47}, {-71,-46}, {-71,-45}, {-71,-44}, {-71,-43}, {-71,-42}, {-71,-41}, {-71,-40}, {-71,-39}, {-71,-38}, {-71,-37}, {-71,-36}, {-71,-35}, {-71,-34}, {-71,-33}, {-71,-32}, {-71,-31}, {-71,73}, {-71,74}, {-71,75}, {-71,76}, {-71,77}, {-71,78}, {-71,81}, {-71,83}, {-71,84}, {-71,85}, {-71,86}, {-71,87}, {-71,88}, {-71,89}, {-71,90}, {-70,-119}, {-70,-118}, {-70,-117}, {-70,-116}, {-70,-115}, {-70,-114}, {-70,-113}, {-70,-112}, {-70,-111}, {-70,-106}, {-70,-105}, {-70,-104}, {-70,-103}, {-70,-102}, {-70,-101}, {-70,-100}, {-70,-97}, {-70,-96}, {-70,-95}, {-70,-94}, {-70,-93}, {-70,-92}, {-70,-90}, {-70,-89}, {-70,-88}, {-70,-87}, {-70,-50}, {-70,-49}, {-70,-48}, {-70,-47}, {-70,-46}, {-70,-45}, {-70,-44}, {-70,-43}, {-70,-42}, {-70,-41}, {-70,-40}, {-70,-39}, {-70,-38}, {-70,-37}, {-70,-36}, {-70,-35}, {-70,-34}, {-70,-32}, {-70,-31}, {-70,73}, {-70,74}, {-70,75}, {-70,76}, {-70,77}, {-70,78}, {-70,79}, {-70,80}, {-70,81}, {-70,82}, {-70,83}, {-70,84}, {-70,85}, {-70,86}, {-70,87}, {-70,88}, {-70,89}, {-70,90}, {-69,-118}, {-69,-117}, {-69,-114}, {-69,-113}, {-69,-112}, {-69,-111}, {-69,-110}, {-69,-105}, {-69,-104}, {-69,-103}, {-69,-102}, {-69,-101}, {-69,-100}, {-69,-99}, {-69,-95}, {-69,-94}, {-69,-93}, {-69,-92}, {-69,-88}, {-69,-87}, {-69,-80}, {-69,-59}, {-69,-50}, {-69,-49}, {-69,-48}, {-69,-47}, {-69,-46}, {-69,-45}, {-69,-44}, {-69,-43}, {-69,-42}, {-69,-41}, {-69,-40}, {-69,-39}, {-69,-38}, {-69,-37}, {-69,-36}, {-69,-35}, {-69,-34}, {-69,-33}, {-69,74}, {-69,75}, {-69,76}, {-69,77}, {-69,78}, {-69,79}, {-69,80}, {-69,81}, {-69,82}, {-69,83}, {-69,84}, {-69,86}, {-69,87}, {-68,-118}, {-68,-117}, {-68,-112}, {-68,-111}, {-68,-110}, {-68,-109}, {-68,-108}, {-68,-103}, {-68,-102}, {-68,-101}, {-68,-100}, {-68,-99}, {-68,-94}, {-68,-93}, {-68,-92}, {-68,-91}, {-68,-90}, {-68,-88}, {-68,-87}, {-68,-50}, {-68,-49}, {-68,-48}, {-68,-47}, {-68,-46}, {-68,-45}, {-68,-44}, {-68,-43}, {-68,-42}, {-68,-41}, {-68,-40}, {-68,-39}, {-68,-38}, {-68,-37}, {-68,-36}, {-68,-35}, {-68,-34}, {-68,-33}, {-68,-32}, {-68,-31}, {-68,74}, {-68,75}, {-68,76}, {-68,77}, {-68,78}, {-68,79}, {-68,80}, {-68,81}, {-68,82}, {-68,83}, {-68,84}, {-68,85}, {-68,86}, {-67,-118}, {-67,-117}, {-67,-116}, {-67,-115}, {-67,-111}, {-67,-110}, {-67,-109}, {-67,-108}, {-67,-107}, {-67,-106}, {-67,-102}, {-67,-101}, {-67,-100}, {-67,-99}, {-67,-98}, {-67,-97}, {-67,-93}, {-67,-92}, {-67,-91}, {-67,-90}, {-67,-89}, {-67,-88}, {-67,-87}, {-67,-50}, {-67,-49}, {-67,-48}, {-67,-47}, {-67,-46}, {-67,-45}, {-67,-44}, {-67,-43}, {-67,-42}, {-67,-41}, {-67,-40}, {-67,-39}, {-67,-38}, {-67,-37}, {-67,-36}, {-67,-35}, {-67,-34}, {-67,-33}, {-67,-32}, {-67,-31}, {-67,77}, {-67,78}, {-67,79}, {-67,81}, {-67,82}, {-67,83}, {-67,84}, {-66,-118}, {-66,-117}, {-66,-116}, {-66,-115}, {-66,-109}, {-66,-108}, {-66,-107}, {-66,-106}, {-66,-105}, {-66,-101}, {-66,-100}, {-66,-99}, {-66,-98}, {-66,-97}, {-66,-96}, {-66,-95}, {-66,-91}, {-66,-90}, {-66,-89}, {-66,-88}, {-66,-87}, {-66,-80}, {-66,-59}, {-66,-49}, {-66,-48}, {-66,-47}, {-66,-46}, {-66,-45}, {-66,-44}, {-66,-43}, {-66,-42}, {-66,-41}, {-66,-40}, {-66,-39}, {-66,-38}, {-66,-37}, {-66,-36}, {-66,-35}, {-66,-34}, {-66,-33}, {-66,-32}, {-66,-31}, {-66,78}, {-66,79}, {-66,80}, {-65,-117}, {-65,-116}, {-65,-115}, {-65,-114}, {-65,-113}, {-65,-112}, {-65,-107}, {-65,-106}, {-65,-105}, {-65,-104}, {-65,-100}, {-65,-99}, {-65,-98}, {-65,-97}, {-65,-96}, {-65,-95}, {-65,-94}, {-65,-89}, {-65,-88}, {-65,-87}, {-65,-48}, {-65,-47}, {-65,-46}, {-65,-45}, {-65,-44}, {-65,-43}, {-65,-42}, {-65,-41}, {-65,-40}, {-65,-39}, {-65,-38}, {-65,-37}, {-65,-36}, {-65,-35}, {-65,-34}, {-65,-33}, {-65,-32}, {-64,-118}, {-64,-117}, {-64,-116}, {-64,-115}, {-64,-114}, {-64,-113}, {-64,-112}, {-64,-111}, {-64,-106}, {-64,-105}, {-64,-104}, {-64,-103}, {-64,-102}, {-64,-98}, {-64,-97}, {-64,-96}, {-64,-95}, {-64,-94}, {-64,-93}, {-64,-92}, {-64,-89}, {-64,-88}, {-64,-87}, {-64,-44}, {-64,-43}, {-64,-42}, {-64,-41}, {-64,-40}, {-64,-39}, {-64,-38}, {-64,-37}, {-64,-36}, {-64,-35}, {-64,-34}, {-64,-33}, {-64,-32}, {-64,-31}, {-63,-118}, {-63,-117}, {-63,-116}, {-63,-115}, {-63,-114}, {-63,-113}, {-63,-112}, {-63,-111}, {-63,-110}, {-63,-109}, {-63,-104}, {-63,-103}, {-63,-102}, {-63,-101}, {-63,-95}, {-63,-94}, {-63,-93}, {-63,-92}, {-63,-91}, {-63,-90}, {-63,-89}, {-63,-88}, {-63,-87}, {-63,-80}, {-63,-32}, {-63,-31}, {-63,-30}, {-62,-118}, {-62,-117}, {-62,-116}, {-62,-115}, {-62,-114}, {-62,-113}, {-62,-112}, {-62,-111}, {-62,-110}, {-62,-109}, {-62,-108}, {-62,-102}, {-62,-101}, {-62,-100}, {-62,-99}, {-62,-93}, {-62,-92}, {-62,-91}, {-62,-90}, {-62,-89}, {-62,-88}, {-62,-87}, {-62,-31}, {-62,-30}, {-62,140}, {-61,-118}, {-61,-117}, {-61,-116}, {-61,-115}, {-61,-112}, {-61,-111}, {-61,-110}, {-61,-109}, {-61,-108}, {-61,-107}, {-61,-101}, {-61,-100}, {-61,-99}, {-61,-98}, {-61,-92}, {-61,-91}, {-61,-90}, {-61,-89}, {-61,-88}, {-61,-87}, {-61,140}, {-61,146}, {-60,-116}, {-60,-115}, {-60,-111}, {-60,-110}, {-60,-109}, {-60,-108}, {-60,-107}, {-60,-106}, {-60,-105}, {-60,-100}, {-60,-99}, {-60,-98}, {-60,-97}, {-60,-96}, {-60,-90}, {-60,-89}, {-60,-88}, {-60,-87}, {-60,-80}, {-60,140}, {-60,145}, {-60,146}, {-59,-116}, {-59,-115}, {-59,-114}, {-59,-113}, {-59,-110}, {-59,-109}, {-59,-108}, {-59,-107}, {-59,-106}, {-59,-105}, {-59,-104}, {-59,-103}, {-59,-98}, {-59,-97}, {-59,-96}, {-59,-95}, {-59,-94}, {-59,-89}, {-59,-88}, {-59,-87}, {-59,140}, {-59,145}, {-59,146}, {-58,-116}, {-58,-115}, {-58,-114}, {-58,-113}, {-58,-112}, {-58,-108}, {-58,-107}, {-58,-106}, {-58,-105}, {-58,-104}, {-58,-103}, {-58,-102}, {-58,-96}, {-58,-95}, {-58,-94}, {-58,-93}, {-58,-92}, {-58,-88}, {-58,-87}, {-58,140}, {-58,141}, {-58,145}, {-57,-116}, {-57,-115}, {-57,-114}, {-57,-113}, {-57,-112}, {-57,-111}, {-57,-110}, {-57,-106}, {-57,-105}, {-57,-104}, {-57,-103}, {-57,-102}, {-57,-101}, {-57,-94}, {-57,-93}, {-57,-92}, {-57,-91}, {-57,-88}, {-57,-87}, {-57,-80}, {-57,-59}, {-57,140}, {-57,141}, {-56,-116}, {-56,-115}, {-56,-114}, {-56,-113}, {-56,-112}, {-56,-111}, {-56,-110}, {-56,-109}, {-56,-104}, {-56,-103}, {-56,-102}, {-56,-101}, {-56,-100}, {-56,-99}, {-56,-98}, {-56,-93}, {-56,-92}, {-56,-91}, {-56,-90}, {-56,-89}, {-56,-88}, {-56,-87}, {-56,140}, {-56,141}, {-56,146}, {-55,-116}, {-55,-115}, {-55,-113}, {-55,-112}, {-55,-111}, {-55,-110}, {-55,-109}, {-55,-108}, {-55,-102}, {-55,-101}, {-55,-100}, {-55,-99}, {-55,-98}, {-55,-91}, {-55,-90}, {-55,-89}, {-55,-88}, {-55,-87}, {-55,140}, {-55,141}, {-55,145}, {-55,146}, {-54,-116}, {-54,-115}, {-54,-111}, {-54,-110}, {-54,-109}, {-54,-108}, {-54,-107}, {-54,-101}, {-54,-100}, {-54,-99}, {-54,-98}, {-54,-97}, {-54,-90}, {-54,-89}, {-54,-88}, {-54,-80}, {-54,-59}, {-54,140}, {-54,141}, {-54,145}, {-54,146}, {-54,147}, {-53,-116}, {-53,-115}, {-53,-110}, {-53,-109}, {-53,-108}, {-53,-107}, {-53,-106}, {-53,-100}, {-53,-99}, {-53,-98}, {-53,-97}, {-53,-96}, {-53,-95}, {-53,-94}, {-53,-89}, {-53,-88}, {-53,140}, {-53,141}, {-53,145}, {-53,146}, {-53,147}, {-52,-116}, {-52,-115}, {-52,-114}, {-52,-113}, {-52,-108}, {-52,-107}, {-52,-106}, {-52,-105}, {-52,-104}, {-52,-99}, {-52,-98}, {-52,-97}, {-52,-96}, {-52,-95}, {-52,-94}, {-52,-93}, {-52,-89}, {-52,-88}, {-52,-87}, {-52,140}, {-52,141}, {-52,146}, {-51,-116}, {-51,-115}, {-51,-114}, {-51,-113}, {-51,-107}, {-51,-106}, {-51,-105}, {-51,-104}, {-51,-103}, {-51,-102}, {-51,-97}, {-51,-96}, {-51,-95}, {-51,-94}, {-51,-93}, {-51,-92}, {-51,-91}, {-51,-89}, {-51,-88}, {-51,-87}, {-51,-78}, {-51,-77}, {-51,-74}, {-51,-65}, {-51,-62}, {-51,140}, {-51,141}, {-50,-115}, {-50,-114}, {-50,-113}, {-50,-112}, {-50,-111}, {-50,-110}, {-50,-106}, {-50,-105}, {-50,-104}, {-50,-103}, {-50,-102}, {-50,-94}, {-50,-93}, {-50,-92}, {-50,-91}, {-50,-90}, {-50,-89}, {-50,-88}, {-50,-87}, {-50,-34}, {-50,-33}, {-50,140}, {-50,141}, {-49,-115}, {-49,-114}, {-49,-113}, {-49,-112}, {-49,-111}, {-49,-110}, {-49,-109}, {-49,-104}, {-49,-103}, {-49,-102}, {-49,-101}, {-49,-100}, {-49,-92}, {-49,-91}, {-49,-90}, {-49,-89}, {-49,-88}, {-49,-87}, {-49,-34}, {-49,-33}, {-49,-32}, {-49,140}, {-49,141}, {-49,146}, {-48,-115}, {-48,-114}, {-48,-113}, {-48,-112}, {-48,-111}, {-48,-110}, {-48,-109}, {-48,-108}, {-48,-107}, {-48,-102}, {-48,-101}, {-48,-100}, {-48,-99}, {-48,-98}, {-48,-90}, {-48,-89}, {-48,-88}, {-48,-87}, {-48,-34}, {-48,-33}, {-48,-32}, {-48,-31}, {-48,-30}, {-48,140}, {-48,141}, {-48,145}, {-48,146}, {-47,-115}, {-47,-114}, {-47,-113}, {-47,-112}, {-47,-111}, {-47,-110}, {-47,-109}, {-47,-108}, {-47,-107}, {-47,-106}, {-47,-105}, {-47,-101}, {-47,-100}, {-47,-99}, {-47,-98}, {-47,-97}, {-47,-96}, {-47,-90}, {-47,-89}, {-47,-88}, {-47,-33}, {-47,-32}, {-47,-31}, {-47,-30}, {-47,140}, {-47,141}, {-47,145}, {-47,146}, {-46,-114}, {-46,-113}, {-46,-110}, {-46,-109}, {-46,-108}, {-46,-107}, {-46,-106}, {-46,-105}, {-46,-104}, {-46,-99}, {-46,-98}, {-46,-97}, {-46,-96}, {-46,-95}, {-46,-94}, {-46,-89}, {-46,-88}, {-46,-33}, {-46,-32}, {-46,-31}, {-46,-30}, {-46,140}, {-46,141}, {-46,145}, {-46,146}, {-45,-114}, {-45,-113}, {-45,-112}, {-45,-108}, {-45,-107}, {-45,-106}, {-45,-105}, {-45,-104}, {-45,-103}, {-45,-102}, {-45,-98}, {-45,-97}, {-45,-96}, {-45,-95}, {-45,-94}, {-45,-93}, {-45,-92}, {-45,-91}, {-45,-89}, {-45,-88}, {-45,-59}, {-45,-33}, {-45,-32}, {-45,140}, {-45,141}, {-45,146}, {-44,-113}, {-44,-112}, {-44,-111}, {-44,-110}, {-44,-106}, {-44,-105}, {-44,-104}, {-44,-103}, {-44,-102}, {-44,-101}, {-44,-96}, {-44,-95}, {-44,-94}, {-44,-93}, {-44,-92}, {-44,-91}, {-44,-89}, {-44,-88}, {-44,-59}, {-44,-33}, {-44,-32}, {-44,-31}, {-44,140}, {-44,141}, {-43,-113}, {-43,-112}, {-43,-111}, {-43,-110}, {-43,-109}, {-43,-108}, {-43,-104}, {-43,-103}, {-43,-102}, {-43,-101}, {-43,-100}, {-43,-95}, {-43,-94}, {-43,-93}, {-43,-92}, {-43,-91}, {-43,-90}, {-43,-89}, {-43,-88}, {-43,-76}, {-43,-75}, {-43,-74}, {-43,-32}, {-43,-31}, {-43,140}, {-43,141}, {-42,-113}, {-42,-112}, {-42,-111}, {-42,-110}, {-42,-109}, {-42,-108}, {-42,-107}, {-42,-102}, {-42,-101}, {-42,-100}, {-42,-99}, {-42,-98}, {-42,-93}, {-42,-92}, {-42,-91}, {-42,-90}, {-42,-89}, {-42,-88}, {-42,-76}, {-42,-75}, {-42,-74}, {-42,-73}, {-42,-32}, {-42,-31}, {-42,140}, {-42,141}, {-42,146}, {-41,-113}, {-41,-112}, {-41,-111}, {-41,-109}, {-41,-108}, {-41,-107}, {-41,-106}, {-41,-105}, {-41,-100}, {-41,-99}, {-41,-98}, {-41,-97}, {-41,-92}, {-41,-91}, {-41,-90}, {-41,-89}, {-41,-81}, {-41,-80}, {-41,-76}, {-41,-75}, {-41,-74}, {-41,-73}, {-41,-72}, {-41,140}, {-41,145}, {-41,146}, {-41,147}, {-40,-113}, {-40,-112}, {-40,-111}, {-40,-107}, {-40,-106}, {-40,-105}, {-40,-104}, {-40,-99}, {-40,-98}, {-40,-97}, {-40,-96}, {-40,-95}, {-40,-90}, {-40,-89}, {-40,-81}, {-40,-80}, {-40,-79}, {-40,140}, {-40,145}, {-40,146}, {-40,147}, {-39,-113}, {-39,-112}, {-39,-111}, {-39,-110}, {-39,-106}, {-39,-105}, {-39,-104}, {-39,-103}, {-39,-98}, {-39,-97}, {-39,-96}, {-39,-95}, {-39,-94}, {-39,-93}, {-39,-92}, {-39,-91}, {-39,-90}, {-39,-89}, {-39,140}, {-39,145}, {-39,146}, {-39,147}, {-38,-113}, {-38,-112}, {-38,-111}, {-38,-110}, {-38,-109}, {-38,-104}, {-38,-103}, {-38,-102}, {-38,-101}, {-38,-95}, {-38,-94}, {-38,-93}, {-38,-92}, {-38,-91}, {-38,-90}, {-38,-89}, {-38,-82}, {-38,-79}, {-38,-78}, {-38,-77}, {-38,-76}, {-38,140}, {-38,145}, {-38,146}, {-37,-113}, {-37,-112}, {-37,-111}, {-37,-110}, {-37,-109}, {-37,-108}, {-37,-107}, {-37,-103}, {-37,-102}, {-37,-101}, {-37,-100}, {-37,-94}, {-37,-93}, {-37,-92}, {-37,-91}, {-37,-90}, {-37,-89}, {-37,-82}, {-37,-81}, {-37,-80}, {-37,-79}, {-37,-78}, {-37,-77}, {-37,-76}, {-37,-53}, {-37,-52}, {-37,140}, {-36,-112}, {-36,-111}, {-36,-110}, {-36,-109}, {-36,-108}, {-36,-107}, {-36,-106}, {-36,-101}, {-36,-100}, {-36,-99}, {-36,-98}, {-36,-91}, {-36,-90}, {-36,-89}, {-36,-82}, {-36,-81}, {-36,-80}, {-36,-79}, {-36,-78}, {-36,-53}, {-36,-52}, {-36,140}, {-35,-112}, {-35,-111}, {-35,-108}, {-35,-107}, {-35,-106}, {-35,-105}, {-35,-104}, {-35,-99}, {-35,-98}, {-35,-97}, {-35,-96}, {-35,-91}, {-35,-90}, {-35,-89}, {-35,-82}, {-35,-81}, {-35,-80}, {-35,-53}, {-35,-52}, {-35,140}, {-35,146}, {-35,147}, {-34,-112}, {-34,-111}, {-34,-107}, {-34,-106}, {-34,-105}, {-34,-104}, {-34,-103}, {-34,-102}, {-34,-98}, {-34,-97}, {-34,-96}, {-34,-95}, {-34,-94}, {-34,-91}, {-34,-90}, {-34,-89}, {-34,-80}, {-34,-79}, {-34,-78}, {-34,-77}, {-34,-76}, {-34,-75}, {-34,-74}, {-34,140}, {-34,145}, {-34,146}, {-34,147}, {-33,-112}, {-33,-111}, {-33,-106}, {-33,-105}, {-33,-104}, {-33,-103}, {-33,-102}, {-33,-101}, {-33,-96}, {-33,-95}, {-33,-94}, {-33,-93}, {-33,-92}, {-33,-91}, {-33,-90}, {-33,-89}, {-33,-80}, {-33,-79}, {-33,-78}, {-33,-77}, {-33,-76}, {-33,-75}, {-33,-74}, {-33,145}, {-33,146}, {-33,147}, {-32,-112}, {-32,-111}, {-32,-110}, {-32,-104}, {-32,-103}, {-32,-102}, {-32,-101}, {-32,-100}, {-32,-99}, {-32,-95}, {-32,-94}, {-32,-93}, {-32,-92}, {-32,-91}, {-32,-90}, {-32,-83}, {-32,-82}, {-32,-81}, {-32,-80}, {-32,-79}, {-32,-78}, {-32,-77}, {-32,-74}, {-32,-44}, {-32,-43}, {-32,146}, {-32,147}, {-31,-111}, {-31,-110}, {-31,-109}, {-31,-108}, {-31,-102}, {-31,-101}, {-31,-100}, {-31,-99}, {-31,-98}, {-31,-93}, {-31,-92}, {-31,-91}, {-31,-90}, {-31,-83}, {-31,-82}, {-31,-81}, {-31,-74}, {-31,-44}, {-31,-43}, {-30,-111}, {-30,-110}, {-30,-109}, {-30,-108}, {-30,-107}, {-30,-106}, {-30,-105}, {-30,-100}, {-30,-99}, {-30,-98}, {-30,-97}, {-30,-96}, {-30,-91}, {-30,-90}, {-30,-83}, {-30,-82}, {-30,-81}, {-30,-74}, {-30,-44}, {-30,-43}, {-29,-111}, {-29,-110}, {-29,-109}, {-29,-108}, {-29,-107}, {-29,-106}, {-29,-105}, {-29,-104}, {-29,-103}, {-29,-99}, {-29,-98}, {-29,-97}, {-29,-96}, {-29,-95}, {-29,-94}, {-29,-92}, {-29,-91}, {-29,-90}, {-29,-84}, {-29,-83}, {-29,-82}, {-29,-81}, {-29,-80}, {-29,-79}, {-29,-78}, {-29,-77}, {-29,-74}, {-29,-44}, {-29,-43}, {-28,-111}, {-28,-110}, {-28,-107}, {-28,-106}, {-28,-105}, {-28,-104}, {-28,-103}, {-28,-102}, {-28,-97}, {-28,-96}, {-28,-95}, {-28,-94}, {-28,-93}, {-28,-92}, {-28,-91}, {-28,-82}, {-28,-81}, {-28,-80}, {-28,-79}, {-28,-78}, {-28,-77}, {-28,-76}, {-28,-75}, {-28,-74}, {-28,-44}, {-28,-43}, {-28,-42}, {-28,-41}, {-28,-40}, {-28,-39}, {-27,-111}, {-27,-110}, {-27,-105}, {-27,-104}, {-27,-103}, {-27,-102}, {-27,-101}, {-27,-100}, {-27,-95}, {-27,-94}, {-27,-93}, {-27,-92}, {-27,-91}, {-27,-83}, {-27,-82}, {-27,-81}, {-27,-80}, {-27,-79}, {-27,-78}, {-27,-77}, {-27,-76}, {-27,-75}, {-27,-74}, {-27,-44}, {-27,-43}, {-27,-42}, {-27,-41}, {-27,-40}, {-27,-39}, {-26,-111}, {-26,-110}, {-26,-109}, {-26,-108}, {-26,-103}, {-26,-102}, {-26,-101}, {-26,-100}, {-26,-99}, {-26,-98}, {-26,-92}, {-26,-91}, {-26,-84}, {-26,-83}, {-26,-82}, {-26,-81}, {-26,-44}, {-26,-43}, {-26,-42}, {-26,-41}, {-26,-40}, {-25,-112}, {-25,-111}, {-25,-110}, {-25,-109}, {-25,-108}, {-25,-107}, {-25,-106}, {-25,-101}, {-25,-100}, {-25,-99}, {-25,-98}, {-25,-97}, {-25,-92}, {-25,-91}, {-25,-84}, {-25,-83}, {-25,-82}, {-25,-44}, {-25,-43}, {-25,-42}, {-25,-41}, {-25,-40}, {-24,-112}, {-24,-111}, {-24,-110}, {-24,-109}, {-24,-108}, {-24,-107}, {-24,-106}, {-24,-105}, {-24,-104}, {-24,-99}, {-24,-98}, {-24,-97}, {-24,-96}, {-24,-95}, {-24,-94}, {-24,-92}, {-24,-91}, {-24,-83}, {-24,-82}, {-24,-81}, {-24,-80}, {-24,-79}, {-24,-78}, {-24,-77}, {-24,-76}, {-24,-75}, {-24,-74}, {-24,-44}, {-24,-43}, {-24,-42}, {-24,-41}, {-24,-40}, {-23,-112}, {-23,-111}, {-23,-110}, {-23,-108}, {-23,-107}, {-23,-106}, {-23,-105}, {-23,-104}, {-23,-103}, {-23,-102}, {-23,-97}, {-23,-96}, {-23,-95}, {-23,-94}, {-23,-93}, {-23,-92}, {-23,-91}, {-23,-82}, {-23,-81}, {-23,-80}, {-23,-79}, {-23,-78}, {-23,-77}, {-23,-76}, {-23,-75}, {-23,-74}, {-23,-53}, {-23,-52}, {-23,-44}, {-23,-43}, {-23,-42}, {-23,-41}, {-23,-40}, {-23,148}, {-22,-112}, {-22,-111}, {-22,-110}, {-22,-106}, {-22,-105}, {-22,-104}, {-22,-103}, {-22,-102}, {-22,-101}, {-22,-100}, {-22,-96}, {-22,-95}, {-22,-94}, {-22,-93}, {-22,-92}, {-22,-91}, {-22,-84}, {-22,-83}, {-22,-82}, {-22,-81}, {-22,-79}, {-22,-78}, {-22,-77}, {-22,-76}, {-22,-75}, {-22,-74}, {-22,-53}, {-22,-52}, {-22,-51}, {-22,-44}, {-22,-43}, {-22,-42}, {-22,-41}, {-22,-20}, {-22,-19}, {-22,-18}, {-22,-17}, {-22,-16}, {-22,-15}, {-22,-14}, {-22,-13}, {-22,-12}, {-22,-11}, {-22,26}, {-22,27}, {-22,28}, {-22,29}, {-22,30}, {-22,31}, {-22,32}, {-22,148}, {-22,149}, {-21,-111}, {-21,-110}, {-21,-109}, {-21,-104}, {-21,-103}, {-21,-102}, {-21,-101}, {-21,-100}, {-21,-99}, {-21,-98}, {-21,-95}, {-21,-94}, {-21,-93}, {-21,-92}, {-21,-91}, {-21,-85}, {-21,-84}, {-21,-83}, {-21,-53}, {-21,-52}, {-21,-51}, {-21,-44}, {-21,-43}, {-21,-42}, {-21,-17}, {-21,-16}, {-21,-15}, {-21,-14}, {-21,-13}, {-21,-12}, {-21,-11}, {-21,27}, {-21,28}, {-21,29}, {-21,30}, {-21,31}, {-21,32}, {-21,33}, {-21,148}, {-21,149}, {-20,-111}, {-20,-110}, {-20,-109}, {-20,-108}, {-20,-107}, {-20,-102}, {-20,-101}, {-20,-100}, {-20,-99}, {-20,-98}, {-20,-97}, {-20,-96}, {-20,-93}, {-20,-92}, {-20,-85}, {-20,-84}, {-20,-83}, {-20,-52}, {-20,-51}, {-20,-44}, {-20,-43}, {-20,-42}, {-20,27}, {-20,28}, {-20,29}, {-20,30}, {-20,31}, {-20,32}, {-20,33}, {-20,148}, {-20,149}, {-19,-110}, {-19,-109}, {-19,-108}, {-19,-107}, {-19,-106}, {-19,-101}, {-19,-100}, {-19,-99}, {-19,-98}, {-19,-97}, {-19,-96}, {-19,-95}, {-19,-94}, {-19,-93}, {-19,-92}, {-19,-85}, {-19,-84}, {-19,-83}, {-19,-82}, {-19,-81}, {-19,-80}, {-19,-79}, {-19,-78}, {-19,-77}, {-19,-76}, {-19,-75}, {-19,-74}, {-19,-54}, {-19,-53}, {-19,-52}, {-19,-51}, {-19,27}, {-19,28}, {-19,29}, {-19,30}, {-19,31}, {-19,32}, {-19,33}, {-19,148}, {-19,149}, {-18,-110}, {-18,-109}, {-18,-108}, {-18,-107}, {-18,-106}, {-18,-105}, {-18,-100}, {-18,-99}, {-18,-98}, {-18,-97}, {-18,-96}, {-18,-95}, {-18,-94}, {-18,-93}, {-18,-92}, {-18,-83}, {-18,-82}, {-18,-81}, {-18,-80}, {-18,-79}, {-18,-78}, {-18,-77}, {-18,-76}, {-18,-75}, {-18,-74}, {-18,-54}, {-18,-53}, {-18,-52}, {-18,-51}, {-18,28}, {-18,29}, {-18,30}, {-18,31}, {-18,32}, {-18,33}, {-18,34}, {-18,92}, {-18,94}, {-18,100}, {-18,101}, {-18,148}, {-18,149}, {-17,-111}, {-17,-110}, {-17,-109}, {-17,-107}, {-17,-106}, {-17,-105}, {-17,-104}, {-17,-103}, {-17,-99}, {-17,-98}, {-17,-97}, {-17,-96}, {-17,-95}, {-17,-94}, {-17,-93}, {-17,-85}, {-17,-84}, {-17,-83}, {-17,-82}, {-17,-81}, {-17,-80}, {-17,-79}, {-17,-78}, {-17,-77}, {-17,-76}, {-17,-75}, {-17,-74}, {-17,-54}, {-17,-53}, {-17,-52}, {-17,-51}, {-17,28}, {-17,29}, {-17,30}, {-17,31}, {-17,32}, {-17,33}, {-17,34}, {-17,89}, {-17,91}, {-17,92}, {-17,93}, {-17,94}, {-17,95}, {-17,96}, {-17,97}, {-17,99}, {-17,100}, {-17,101}, {-17,148}, {-17,149}, {-16,-111}, {-16,-110}, {-16,-109}, {-16,-108}, {-16,-105}, {-16,-104}, {-16,-103}, {-16,-102}, {-16,-101}, {-16,-95}, {-16,-94}, {-16,-93}, {-16,-85}, {-16,-84}, {-16,-83}, {-16,-53}, {-16,-52}, {-16,-51}, {-16,-33}, {-16,-32}, {-16,-31}, {-16,29}, {-16,30}, {-16,87}, {-16,88}, {-16,90}, {-16,91}, {-16,92}, {-16,93}, {-16,94}, {-16,95}, {-16,96}, {-16,98}, {-16,101}, {-16,102}, {-16,103}, {-16,104}, {-16,105}, {-16,111}, {-16,148}, {-16,149}, {-15,-111}, {-15,-110}, {-15,-109}, {-15,-108}, {-15,-107}, {-15,-105}, {-15,-104}, {-15,-103}, {-15,-102}, {-15,-101}, {-15,-100}, {-15,-94}, {-15,-93}, {-15,-85}, {-15,-84}, {-15,-83}, {-15,-53}, {-15,-52}, {-15,-51}, {-15,-33}, {-15,-32}, {-15,-31}, {-15,-30}, {-15,-29}, {-15,-28}, {-15,-27}, {-15,29}, {-15,30}, {-15,85}, {-15,86}, {-15,87}, {-15,88}, {-15,89}, {-15,90}, {-15,91}, {-15,92}, {-15,93}, {-15,94}, {-15,95}, {-15,96}, {-15,97}, {-15,98}, {-15,99}, {-15,100}, {-15,101}, {-15,102}, {-15,103}, {-15,104}, {-15,105}, {-15,106}, {-15,111}, {-15,112}, {-15,148}, {-15,149}, {-14,-109}, {-14,-108}, {-14,-107}, {-14,-106}, {-14,-102}, {-14,-101}, {-14,-100}, {-14,-99}, {-14,-98}, {-14,-94}, {-14,-93}, {-14,-85}, {-14,-84}, {-14,-83}, {-14,-82}, {-14,-81}, {-14,-80}, {-14,-79}, {-14,-78}, {-14,-77}, {-14,-76}, {-14,-75}, {-14,-74}, {-14,-52}, {-14,-51}, {-14,-34}, {-14,-33}, {-14,-32}, {-14,-31}, {-14,-30}, {-14,-29}, {-14,-28}, {-14,-27}, {-14,-26}, {-14,30}, {-14,85}, {-14,88}, {-14,89}, {-14,90}, {-14,91}, {-14,94}, {-14,95}, {-14,96}, {-14,97}, {-14,98}, {-14,99}, {-14,100}, {-14,101}, {-14,102}, {-14,103}, {-14,105}, {-14,106}, {-14,110}, {-14,111}, {-14,112}, {-14,113}, {-14,148}, {-14,149}, {-14,150}, {-13,-108}, {-13,-107}, {-13,-106}, {-13,-105}, {-13,-100}, {-13,-99}, {-13,-98}, {-13,-97}, {-13,-96}, {-13,-94}, {-13,-93}, {-13,-83}, {-13,-82}, {-13,-81}, {-13,-80}, {-13,-79}, {-13,-78}, {-13,-77}, {-13,-76}, {-13,-75}, {-13,-74}, {-13,-52}, {-13,-51}, {-13,-35}, {-13,-34}, {-13,-33}, {-13,-32}, {-13,-31}, {-13,-30}, {-13,-29}, {-13,-28}, {-13,-27}, {-13,-26}, {-13,-25}, {-13,88}, {-13,89}, {-13,90}, {-13,95}, {-13,96}, {-13,98}, {-13,99}, {-13,100}, {-13,101}, {-13,102}, {-13,103}, {-13,104}, {-13,105}, {-13,106}, {-13,112}, {-13,113}, {-13,114}, {-13,115}, {-13,148}, {-13,149}, {-13,150}, {-12,-106}, {-12,-105}, {-12,-104}, {-12,-98}, {-12,-97}, {-12,-96}, {-12,-95}, {-12,-94}, {-12,-93}, {-12,-86}, {-12,-83}, {-12,-82}, {-12,-81}, {-12,-80}, {-12,-79}, {-12,-78}, {-12,-77}, {-12,-76}, {-12,-75}, {-12,-74}, {-12,-52}, {-12,-51}, {-12,-35}, {-12,-34}, {-12,-33}, {-12,-32}, {-12,-31}, {-12,-30}, {-12,-29}, {-12,-28}, {-12,-26}, {-12,-25}, {-12,-24}, {-12,-23}, {-12,-22}, {-12,-21}, {-12,89}, {-12,90}, {-12,91}, {-12,95}, {-12,96}, {-12,97}, {-12,98}, {-12,99}, {-12,100}, {-12,101}, {-12,102}, {-12,103}, {-12,104}, {-12,105}, {-12,107}, {-12,113}, {-12,114}, {-12,115}, {-12,148}, {-12,149}, {-12,150}, {-11,-106}, {-11,-105}, {-11,-104}, {-11,-103}, {-11,-102}, {-11,-97}, {-11,-96}, {-11,-95}, {-11,-94}, {-11,-93}, {-11,-86}, {-11,-85}, {-11,-84}, {-11,-35}, {-11,-34}, {-11,-33}, {-11,-32}, {-11,-31}, {-11,-30}, {-11,-29}, {-11,-28}, {-11,-26}, {-11,-25}, {-11,-24}, {-11,-23}, {-11,-22}, {-11,-21}, {-11,87}, {-11,88}, {-11,89}, {-11,90}, {-11,91}, {-11,95}, {-11,96}, {-11,97}, {-11,98}, {-11,99}, {-11,100}, {-11,101}, {-11,102}, {-11,104}, {-11,105}, {-11,106}, {-11,107}, {-11,108}, {-11,114}, {-11,115}, {-11,116}, {-11,149}, {-11,150}, {-10,-104}, {-10,-103}, {-10,-102}, {-10,-101}, {-10,-96}, {-10,-95}, {-10,-94}, {-10,-93}, {-10,-86}, {-10,-85}, {-10,-84}, {-10,-35}, {-10,-34}, {-10,-33}, {-10,-32}, {-10,-31}, {-10,-30}, {-10,-29}, {-10,-28}, {-10,-27}, {-10,-26}, {-10,-25}, {-10,-24}, {-10,-23}, {-10,-22}, {-10,86}, {-10,87}, {-10,88}, {-10,89}, {-10,90}, {-10,91}, {-10,92}, {-10,93}, {-10,97}, {-10,98}, {-10,99}, {-10,100}, {-10,101}, {-10,102}, {-10,103}, {-10,104}, {-10,105}, {-10,106}, {-10,107}, {-10,108}, {-10,114}, {-10,116}, {-10,149}, {-10,150}, {-9,-102}, {-9,-101}, {-9,-100}, {-9,-99}, {-9,-98}, {-9,-97}, {-9,-96}, {-9,-95}, {-9,-94}, {-9,-93}, {-9,-86}, {-9,-85}, {-9,-84}, {-9,-83}, {-9,-82}, {-9,-81}, {-9,-80}, {-9,-79}, {-9,-78}, {-9,-77}, {-9,-76}, {-9,-75}, {-9,-74}, {-9,-37}, {-9,-36}, {-9,-35}, {-9,-34}, {-9,-33}, {-9,-32}, {-9,-31}, {-9,-30}, {-9,-29}, {-9,-28}, {-9,-27}, {-9,-26}, {-9,-25}, {-9,-24}, {-9,-23}, {-9,-22}, {-9,89}, {-9,90}, {-9,91}, {-9,92}, {-9,93}, {-9,94}, {-9,95}, {-9,96}, {-9,97}, {-9,98}, {-9,99}, {-9,100}, {-9,101}, {-9,102}, {-9,103}, {-9,104}, {-9,105}, {-9,106}, {-9,107}, {-9,108}, {-9,109}, {-9,114}, {-9,148}, {-9,149}, {-9,150}, {-8,-101}, {-8,-100}, {-8,-99}, {-8,-98}, {-8,-97}, {-8,-96}, {-8,-95}, {-8,-84}, {-8,-83}, {-8,-82}, {-8,-81}, {-8,-80}, {-8,-79}, {-8,-78}, {-8,-77}, {-8,-76}, {-8,-75}, {-8,-74}, {-8,-37}, {-8,-36}, {-8,-35}, {-8,-34}, {-8,-33}, {-8,-32}, {-8,-31}, {-8,-30}, {-8,-29}, {-8,-28}, {-8,87}, {-8,88}, {-8,90}, {-8,91}, {-8,92}, {-8,93}, {-8,94}, {-8,95}, {-8,96}, {-8,97}, {-8,98}, {-8,103}, {-8,104}, {-8,106}, {-8,107}, {-8,108}, {-8,148}, {-8,149}, {-8,150}, {-7,-98}, {-7,-97}, {-7,-96}, {-7,-95}, {-7,-86}, {-7,-85}, {-7,-84}, {-7,-83}, {-7,-82}, {-7,-81}, {-7,-80}, {-7,-79}, {-7,-78}, {-7,-77}, {-7,-76}, {-7,-75}, {-7,-74}, {-7,-37}, {-7,-36}, {-7,-35}, {-7,-34}, {-7,-33}, {-7,-32}, {-7,-31}, {-7,-30}, {-7,-29}, {-7,86}, {-7,87}, {-7,89}, {-7,90}, {-7,91}, {-7,92}, {-7,93}, {-7,94}, {-7,95}, {-7,96}, {-7,108}, {-7,148}, {-7,149}, {-7,150}, {-6,-97}, {-6,-96}, {-6,-95}, {-6,-87}, {-6,-86}, {-6,-85}, {-6,-37}, {-6,-36}, {-6,-35}, {-6,-34}, {-6,-33}, {-6,87}, {-6,88}, {-6,89}, {-6,90}, {-6,148}, {-6,149}, {-6,150}, {-5,-111}, {-5,-110}, {-5,-109}, {-5,-87}, {-5,-86}, {-5,-85}, {-5,-37}, {-5,-36}, {-5,-35}, {-5,87}, {-5,90}, {-5,148}, {-5,149}, {-4,-111}, {-4,-110}, {-4,-109}, {-4,-108}, {-4,-107}, {-4,-85}, {-4,-84}, {-4,-83}, {-4,-82}, {-4,-81}, {-4,-80}, {-4,-79}, {-4,-78}, {-4,-77}, {-4,-76}, {-4,-75}, {-4,-74}, {-4,28}, {-4,30}, {-4,86}, {-4,88}, {-4,89}, {-4,148}, {-4,149}, {-3,-110}, {-3,-109}, {-3,-108}, {-3,-107}, {-3,-85}, {-3,-84}, {-3,-83}, {-3,-82}, {-3,-81}, {-3,-80}, {-3,-79}, {-3,-78}, {-3,-77}, {-3,-76}, {-3,-75}, {-3,-74}, {-3,28}, {-3,30}, {-3,84}, {-3,85}, {-3,87}, {-3,148}, {-3,149}, {-2,-110}, {-2,-109}, {-2,-108}, {-2,-107}, {-2,-106}, {-2,-105}, {-2,-104}, {-2,-87}, {-2,-86}, {-2,-85}, {-2,-84}, {-2,-83}, {-2,-82}, {-2,-81}, {-2,-80}, {-2,-79}, {-2,-78}, {-2,-77}, {-2,-76}, {-2,25}, {-2,26}, {-2,27}, {-2,28}, {-2,29}, {-2,30}, {-2,84}, {-2,85}, {-2,86}, {-2,148}, {-2,149}, {-1,-109}, {-1,-108}, {-1,-107}, {-1,-106}, {-1,-105}, {-1,-104}, {-1,-103}, {-1,-87}, {-1,-86}, {-1,-85}, {-1,-1}, {-1,0}, {-1,1}, {-1,23}, {-1,24}, {-1,25}, {-1,27}, {-1,28}, {-1,29}, {-1,30}, {-1,148}, {0,-109}, {0,-108}, {0,-107}, {0,-106}, {0,-105}, {0,-104}, {0,-103}, {0,-102}, {0,-101}, {0,-87}, {0,-86}, {0,-85}, {0,-74}, {0,-1}, {0,0}, {0,1}, {0,20}, {0,21}, {0,22}, {0,23}, {0,24}, {0,25}, {0,26}, {0,27}, {0,28}, {0,29}, {0,30}, {0,31}, {0,32}, {0,33}, {0,34}, {0,148}, {1,-109}, {1,-108}, {1,-107}, {1,-106}, {1,-103}, {1,-102}, {1,-101}, {1,-100}, {1,-99}, {1,-85}, {1,-84}, {1,-83}, {1,-82}, {1,-81}, {1,-80}, {1,-79}, {1,-78}, {1,-77}, {1,-76}, {1,-75}, {1,-74}, {1,-1}, {1,0}, {1,1}, {1,18}, {1,19}, {1,20}, {1,21}, {1,22}, {1,23}, {1,24}, {1,25}, {1,26}, {1,27}, {1,28}, {1,29}, {1,30}, {1,31}, {1,32}, {1,33}, {1,34}, {1,148}, {2,-109}, {2,-108}, {2,-107}, {2,-106}, {2,-105}, {2,-103}, {2,-102}, {2,-101}, {2,-100}, {2,-99}, {2,-98}, {2,-85}, {2,-84}, {2,-83}, {2,-82}, {2,-81}, {2,-80}, {2,-79}, {2,-78}, {2,-77}, {2,-76}, {2,-75}, {2,-74}, {2,8}, {2,9}, {2,10}, {2,11}, {2,12}, {2,13}, {2,14}, {2,15}, {2,16}, {2,17}, {2,18}, {2,19}, {2,20}, {2,21}, {2,22}, {2,23}, {2,24}, {2,25}, {2,26}, {2,27}, {2,28}, {2,29}, {2,30}, {2,31}, {2,32}, {2,33}, {2,34}, {2,148}, {3,-109}, {3,-108}, {3,-107}, {3,-106}, {3,-105}, {3,-104}, {3,-101}, {3,-100}, {3,-99}, {3,-98}, {3,-87}, {3,-86}, {3,-83}, {3,-82}, {3,-81}, {3,-80}, {3,-79}, {3,-78}, {3,-77}, {3,-76}, {3,-75}, {3,-74}, {3,-17}, {3,-16}, {3,-15}, {3,-14}, {3,-13}, {3,-12}, {3,-11}, {3,-10}, {3,-9}, {3,-8}, {3,-7}, {3,1}, {3,2}, {3,7}, {3,8}, {3,9}, {3,10}, {3,11}, {3,12}, {3,13}, {3,14}, {3,15}, {3,16}, {3,17}, {3,18}, {3,19}, {3,20}, {3,21}, {3,22}, {3,23}, {3,24}, {3,25}, {3,26}, {3,27}, {3,28}, {3,29}, {3,30}, {3,31}, {3,32}, {3,33}, {3,34}, {4,-109}, {4,-108}, {4,-107}, {4,-106}, {4,-105}, {4,-98}, {4,-97}, {4,-87}, {4,-86}, {4,-18}, {4,-17}, {4,-16}, {4,-15}, {4,-14}, {4,-13}, {4,-12}, {4,-11}, {4,-10}, {4,-9}, {4,-8}, {4,-7}, {4,-6}, {4,-5}, {4,-4}, {4,-3}, {4,-2}, {4,-1}, {4,0}, {4,1}, {4,2}, {4,6}, {4,7}, {4,8}, {4,9}, {4,10}, {4,11}, {4,12}, {4,13}, {4,14}, {4,15}, {4,16}, {4,17}, {4,18}, {4,19}, {4,20}, {4,21}, {4,22}, {4,23}, {4,24}, {4,25}, {4,26}, {4,27}, {4,28}, {4,29}, {4,30}, {4,31}, {4,32}, {4,33}, {5,-109}, {5,-108}, {5,-107}, {5,-106}, {5,-105}, {5,-104}, {5,-103}, {5,-102}, {5,-101}, {5,-100}, {5,-97}, {5,-96}, {5,-87}, {5,-86}, {5,-20}, {5,-19}, {5,-18}, {5,-17}, {5,-16}, {5,-15}, {5,-14}, {5,-13}, {5,-12}, {5,-11}, {5,-10}, {5,-9}, {5,-8}, {5,-7}, {5,-6}, {5,-5}, {5,-4}, {5,-3}, {5,-2}, {5,-1}, {5,0}, {5,1}, {5,2}, {5,3}, {5,4}, {5,5}, {5,6}, {5,7}, {5,8}, {5,9}, {5,10}, {5,11}, {5,12}, {5,13}, {5,14}, {5,15}, {5,16}, {5,17}, {5,18}, {5,19}, {5,20}, {5,21}, {5,22}, {5,23}, {5,24}, {5,25}, {5,26}, {5,27}, {5,28}, {5,29}, {5,30}, {5,31}, {5,32}, {6,-109}, {6,-108}, {6,-107}, {6,-106}, {6,-105}, {6,-104}, {6,-103}, {6,-102}, {6,-101}, {6,-100}, {6,-99}, {6,-98}, {6,-96}, {6,-85}, {6,-84}, {6,-83}, {6,-82}, {6,-81}, {6,-80}, {6,-79}, {6,-78}, {6,-77}, {6,-76}, {6,-75}, {6,-74}, {6,-23}, {6,-22}, {6,-21}, {6,-20}, {6,-19}, {6,-18}, {6,-17}, {6,-16}, {6,-15}, {6,-14}, {6,-13}, {6,-12}, {6,-11}, {6,-10}, {6,-9}, {6,-8}, {6,-7}, {6,-6}, {6,-5}, {6,-4}, {6,-3}, {6,-2}, {6,-1}, {6,0}, {6,1}, {6,2}, {6,3}, {6,4}, {6,5}, {6,6}, {6,7}, {6,8}, {6,9}, {6,10}, {6,11}, {6,12}, {6,13}, {6,14}, {6,15}, {6,16}, {6,17}, {6,18}, {6,19}, {6,20}, {6,21}, {6,22}, {6,23}, {6,24}, {6,25}, {6,26}, {6,27}, {6,28}, {6,29}, {6,30}, {7,-109}, {7,-108}, {7,-107}, {7,-106}, {7,-105}, {7,-104}, {7,-103}, {7,-102}, {7,-101}, {7,-100}, {7,-99}, {7,-95}, {7,-85}, {7,-84}, {7,-83}, {7,-82}, {7,-81}, {7,-80}, {7,-79}, {7,-78}, {7,-77}, {7,-76}, {7,-75}, {7,-74}, {7,-26}, {7,-25}, {7,-24}, {7,-23}, {7,-22}, {7,-21}, {7,-20}, {7,-19}, {7,-18}, {7,-17}, {7,-16}, {7,-15}, {7,-14}, {7,-13}, {7,-12}, {7,-11}, {7,-10}, {7,-9}, {7,-8}, {7,-7}, {7,-6}, {7,-5}, {7,-4}, {7,-3}, {7,-2}, {7,-1}, {7,0}, {7,1}, {7,2}, {7,3}, {7,4}, {7,5}, {7,6}, {7,7}, {7,8}, {7,9}, {7,10}, {7,11}, {7,12}, {7,13}, {7,14}, {7,15}, {7,16}, {7,17}, {7,18}, {7,19}, {7,20}, {7,21}, {7,22}, {7,23}, {7,24}, {7,25}, {7,26}, {7,27}, {7,28}, {7,29}, {8,-101}, {8,-100}, {8,-99}, {8,-98}, {8,-95}, {8,-94}, {8,-87}, {8,-86}, {8,-85}, {8,-84}, {8,-83}, {8,-82}, {8,-81}, {8,-80}, {8,-79}, {8,-78}, {8,-77}, {8,-76}, {8,-75}, {8,-74}, {8,-30}, {8,-29}, {8,-28}, {8,-27}, {8,-26}, {8,-25}, {8,-24}, {8,-23}, {8,-22}, {8,-21}, {8,-20}, {8,-19}, {8,-17}, {8,-16}, {8,-15}, {8,-14}, {8,-13}, {8,-12}, {8,-11}, {8,-10}, {8,-9}, {8,-8}, {8,-7}, {8,-6}, {8,-5}, {8,-4}, {8,-3}, {8,-2}, {8,-1}, {8,0}, {8,1}, {8,2}, {8,3}, {8,4}, {8,5}, {8,6}, {8,7}, {8,8}, {8,9}, {8,10}, {8,11}, {8,12}, {8,13}, {8,14}, {8,15}, {8,16}, {8,17}, {8,18}, {8,19}, {8,20}, {8,21}, {8,22}, {8,25}, {8,26}, {8,27}, {8,28}, {9,-100}, {9,-99}, {9,-98}, {9,-97}, {9,-94}, {9,-87}, {9,-86}, {9,-85}, {9,-35}, {9,-34}, {9,-33}, {9,-32}, {9,-31}, {9,-30}, {9,-29}, {9,-28}, {9,-27}, {9,-26}, {9,-25}, {9,-24}, {9,-23}, {9,-22}, {9,-21}, {9,-20}, {9,-15}, {9,-14}, {9,-13}, {9,-12}, {9,-11}, {9,-10}, {9,-9}, {9,-8}, {9,-7}, {9,-6}, {9,-5}, {9,-4}, {9,-3}, {9,-2}, {9,-1}, {9,0}, {9,1}, {9,2}, {9,3}, {9,4}, {9,5}, {9,6}, {9,7}, {9,8}, {9,9}, {9,10}, {9,11}, {9,19}, {9,20}, {9,21}, {9,28}, {9,143}, {9,144}, {9,145}, {9,146}, {9,147}, {10,-99}, {10,-98}, {10,-97}, {10,-96}, {10,-94}, {10,-87}, {10,-86}, {10,-85}, {10,142}, {10,143}, {10,144}, {10,145}, {10,146}, {11,-99}, {11,-98}, {11,-97}, {11,-96}, {11,-87}, {11,-86}, {11,-85}, {11,-84}, {11,-83}, {11,-82}, {11,-81}, {11,-80}, {11,-79}, {11,-78}, {11,-77}, {11,141}, {11,142}, {11,143}, {11,144}, {11,145}, {11,146}, {12,-99}, {12,-98}, {12,-97}, {12,-96}, {12,-84}, {12,-83}, {12,-82}, {12,-81}, {12,-80}, {12,-79}, {12,-78}, {12,141}, {12,142}, {12,143}, {12,144}, {13,-99}, {13,-98}, {13,-97}, {13,-96}, {13,-95}, {13,-94}, {13,-84}, {13,-83}, {13,-82}, {13,-81}, {13,-80}, {13,-79}, {13,141}, {13,142}, {13,143}, {13,144}, {14,-99}, {14,-98}, {14,-97}, {14,-96}, {14,-95}, {14,-94}, {14,-86}, {14,-85}, {14,-84}, {14,-83}, {14,-82}, {14,-81}, {14,-80}, {14,140}, {14,141}, {14,142}, {14,143}, {14,144}, {15,-97}, {15,-96}, {15,-95}, {15,-94}, {15,-93}, {15,140}, {15,141}, {15,142}, {15,143}, {16,-97}, {16,-96}, {16,-95}, {16,-94}, {16,-93}, {16,140}, {16,141}, {16,142}, {17,-97}, {17,-96}, {17,-95}, {17,-94}, {17,-93}, {17,-92}, {17,-79}, {17,-78}, {17,-77}, {17,-76}, {17,-75}, {17,-74}, {17,-73}, {17,-72}, {17,-11}, {17,-10}, {17,-9}, {17,-8}, {17,140}, {17,141}, {17,142}, {18,-95}, {18,-94}, {18,-93}, {18,-92}, {18,-80}, {18,-79}, {18,-78}, {18,-77}, {18,-76}, {18,-75}, {18,-74}, {18,-73}, {18,-13}, {18,-10}, {18,-9}, {18,-8}, {18,141}, {18,142}, {19,-95}, {19,-94}, {19,-93}, {19,-92}, {19,-81}, {19,-80}, {19,-79}, {19,-78}, {19,-77}, {19,-76}, {19,-75}, {19,-74}, {19,-73}, {19,-9}, {19,140}, {19,141}, {19,142}, {20,-95}, {20,-94}, {20,-93}, {20,-92}, {20,-83}, {20,-82}, {20,-81}, {20,-80}, {20,-79}, {20,-78}, {20,-77}, {20,-76}, {20,-75}, {20,-74}, {20,-73}, {20,140}, {20,141}, {20,142}, {21,-95}, {21,-94}, {21,-93}, {21,-92}, {21,-83}, {21,-82}, {21,-81}, {21,-80}, {21,-79}, {21,-78}, {21,-77}, {21,-76}, {21,-75}, {21,-74}, {21,140}, {21,141}, {21,142}, {22,-83}, {22,-82}, {22,-81}, {22,-80}, {22,-79}, {22,-78}, {22,-77}, {22,-76}, {22,-75}, {22,-74}, {22,-42}, {22,-41}, {22,-30}, {22,-29}, {22,-28}, {22,-27}, {22,-26}, {22,-22}, {22,-21}, {22,-20}, {22,140}, {22,141}, {22,142}, {23,-82}, {23,-81}, {23,-80}, {23,-79}, {23,-78}, {23,-77}, {23,-76}, {23,-75}, {23,-74}, {23,-67}, {23,-42}, {23,-41}, {23,-32}, {23,-31}, {23,-30}, {23,-29}, {23,-28}, {23,-27}, {23,-26}, {23,-25}, {23,-24}, {23,-23}, {23,-22}, {23,-21}, {23,-20}, {23,140}, {23,141}, {23,142}, {24,-97}, {24,-96}, {24,-82}, {24,-81}, {24,-80}, {24,-79}, {24,-78}, {24,-77}, {24,-76}, {24,-75}, {24,-67}, {24,-42}, {24,-41}, {24,-40}, {24,-32}, {24,-31}, {24,-30}, {24,-29}, {24,-28}, {24,-27}, {24,-26}, {24,-25}, {24,-24}, {24,-23}, {24,-22}, {24,-21}, {24,-20}, {24,-19}, {24,-18}, {24,-17}, {24,140}, {24,141}, {24,142}, {25,-97}, {25,-96}, {25,-95}, {25,-94}, {25,-93}, {25,-82}, {25,-81}, {25,-80}, {25,-79}, {25,-78}, {25,-77}, {25,-76}, {25,-75}, {25,-68}, {25,-41}, {25,-40}, {25,-32}, {25,-31}, {25,-30}, {25,-29}, {25,-28}, {25,-27}, {25,-26}, {25,-25}, {25,-22}, {25,-21}, {25,-20}, {25,-19}, {25,-18}, {25,-17}, {25,-16}, {25,-15}, {25,-12}, {25,140}, {25,141}, {26,-97}, {26,-96}, {26,-95}, {26,-94}, {26,-93}, {26,-81}, {26,-80}, {26,-79}, {26,-78}, {26,-77}, {26,-76}, {26,-75}, {26,-68}, {26,-67}, {26,-41}, {26,-40}, {26,-39}, {26,-32}, {26,-31}, {26,-30}, {26,-29}, {26,-28}, {26,-26}, {26,-25}, {26,-22}, {26,-21}, {26,-20}, {26,-19}, {26,-18}, {26,-17}, {26,-16}, {26,-12}, {26,140}, {27,-97}, {27,-96}, {27,-95}, {27,-94}, {27,-81}, {27,-80}, {27,-79}, {27,-78}, {27,-77}, {27,-76}, {27,-75}, {27,-74}, {27,-68}, {27,-67}, {27,-41}, {27,-40}, {27,-39}, {27,-32}, {27,-31}, {27,-30}, {27,-29}, {27,-28}, {27,-27}, {27,-26}, {27,-25}, {27,-24}, {27,-23}, {27,-22}, {27,-21}, {27,-20}, {27,-19}, {27,-18}, {27,-17}, {27,-16}, {28,-97}, {28,-96}, {28,-95}, {28,-94}, {28,-81}, {28,-80}, {28,-79}, {28,-78}, {28,-77}, {28,-76}, {28,-75}, {28,-74}, {28,-68}, {28,-41}, {28,-40}, {28,-39}, {28,-32}, {28,-31}, {28,-30}, {28,-29}, {28,-28}, {28,-27}, {28,-26}, {28,-25}, {28,-24}, {28,-23}, {28,-22}, {28,-21}, {28,-20}, {28,-19}, {28,-18}, {28,-17}, {28,-13}, {29,-97}, {29,-96}, {29,-95}, {29,-94}, {29,-81}, {29,-80}, {29,-79}, {29,-78}, {29,-77}, {29,-76}, {29,-75}, {29,-74}, {29,-68}, {29,-67}, {29,-41}, {29,-40}, {29,-39}, {29,-31}, {29,-30}, {29,-29}, {29,-28}, {29,-27}, {29,-26}, {29,-25}, {29,-24}, {29,-23}, {29,-21}, {29,-20}, {29,-19}, {29,-18}, {29,78}, {29,79}, {29,80}, {29,81}, {30,-97}, {30,-96}, {30,-95}, {30,-94}, {30,-81}, {30,-80}, {30,-79}, {30,-78}, {30,-77}, {30,-76}, {30,-75}, {30,-74}, {30,-68}, {30,-67}, {30,-41}, {30,-40}, {30,-39}, {30,-30}, {30,-29}, {30,-28}, {30,-27}, {30,-26}, {30,-25}, {30,-24}, {31,-97}, {31,-96}, {31,-95}, {31,-94}, {31,-80}, {31,-79}, {31,-78}, {31,-77}, {31,-76}, {31,-75}, {31,-74}, {31,-41}, {31,-40}, {31,-39}, {31,-26}, {31,-25}, {32,-97}, {32,-96}, {32,-95}, {32,-94}, {32,-80}, {32,-79}, {32,-78}, {32,-77}, {32,-76}, {32,-75}, {32,-74}, {32,-67}, {32,-41}, {32,-40}, {32,-39}, {33,-97}, {33,-96}, {33,-95}, {33,-94}, {33,-80}, {33,-79}, {33,-78}, {33,-77}, {33,-76}, {33,-75}, {33,-67}, {33,-41}, {33,-40}, {33,62}, {33,63}, {33,64}, {33,65}, {33,66}, {33,67}, {33,68}, {33,69}, {33,70}, {33,71}, {34,-80}, {34,-79}, {34,-78}, {34,-77}, {34,-76}, {34,-75}, {34,-41}, {35,-80}, {35,-79}, {35,-78}, {35,-77}, {35,-76}, {35,-75}, {36,-79}, {36,-78}, {36,-77}, {36,-76}, {36,-75}, {37,-79}, {37,-78}, {37,-77}, {37,-76}, {37,-75}, {38,-79}, {38,-78}, {38,-77}, {38,-76}, {38,-75}, {39,-90}, {39,-89}, {39,-88}, {39,-79}, {39,-78}, {39,-77}, {39,-76}, {39,-10}, {40,-90}, {40,-89}, {40,-88}, {40,-78}, {40,-77}, {40,-76}, {40,-41}, {40,-40}, {41,-78}, {41,-77}, {41,-76}, {41,-41}, {41,-40}, {42,-78}, {42,-77}, {42,-76}, {42,-67}, {42,-41}, {42,-40}, {42,-39}, {43,-78}, {43,-77}, {43,-76}, {43,-75}, {43,-67}, {43,-41}, {43,-40}, {43,-39}, {43,-38}, {44,-77}, {44,-76}, {44,-75}, {44,-41}, {44,-40}, {44,-39}, {44,-38}, {45,-102}, {45,-101}, {45,-77}, {45,-76}, {45,-75}, {45,-68}, {45,-67}, {45,-41}, {45,-40}, {45,-39}, {45,-38}, {46,-102}, {46,-101}, {46,-77}, {46,-76}, {46,-75}, {46,-68}, {46,-67}, {46,-41}, {46,-40}, {46,-39}, {46,-38}, {47,-102}, {47,-101}, {47,-100}, {47,-77}, {47,-76}, {47,-75}, {47,-68}, {47,-41}, {47,-40}, {47,-39}, {47,-38}, {48,-102}, {48,-101}, {48,-100}, {48,-76}, {48,-75}, {48,-68}, {48,-67}, {48,-41}, {48,-40}, {48,-39}, {48,-38}, {49,-102}, {49,-101}, {49,-100}, {49,-90}, {49,-89}, {49,-88}, {49,-76}, {49,-75}, {49,-68}, {49,-67}, {49,-41}, {49,-40}, {49,-39}, {50,-102}, {50,-101}, {50,-100}, {50,-92}, {50,-91}, {50,-90}, {50,-89}, {50,-76}, {50,-75}, {50,-74}, {50,-68}, {50,-41}, {50,-40}, {50,-39}, {51,-102}, {51,-101}, {51,-100}, {51,-99}, {51,-93}, {51,-92}, {51,-91}, {51,-76}, {51,-75}, {51,-74}, {51,-68}, {51,-67}, {51,-42}, {51,-41}, {51,-40}, {52,-101}, {52,-100}, {52,-99}, {52,-98}, {52,-93}, {52,-92}, {52,-75}, {52,-74}, {52,-68}, {52,-67}, {52,-42}, {52,-41}, {52,-40}, {53,-75}, {53,-74}, {53,-67}, {53,-42}, {53,-41}, {54,-75}, {54,-74}, {55,-75}, {55,-74}, {56,-74}, {57,-74}, {58,-74}, {58,-73}, {59,-74}, {59,-73}, {59,122}, {59,123}, {59,124}, {59,131}, {60,-73}, {60,121}, {60,122}, {60,123}, {60,124}, {60,125}, {60,126}, {60,129}, {60,130}, {61,-73}, {61,120}, {61,121}, {61,122}, {61,123}, {61,124}, {61,125}, {61,126}, {61,127}, {61,128}, {61,129}, {61,130}, {62,-73}, {62,56}, {62,120}, {62,121}, {62,122}, {62,123}, {62,126}, {62,127}, {62,128}, {62,129}, {62,130}, {63,56}, {63,121}, {63,122}, {63,123}, {63,127}, {63,129}, {63,130}, {63,145}, {63,146}, {64,56}, {64,120}, {64,121}, {64,122}, {64,123}, {64,128}, {64,129}, {64,130}, {64,131}, {64,145}, {64,146}, {64,147}, {65,56}, {65,120}, {65,121}, {65,122}, {65,123}, {65,124}, {65,127}, {65,128}, {65,129}, {65,130}, {65,131}, {65,145}, {65,146}, {65,147}, {66,56}, {66,120}, {66,121}, {66,122}, {66,123}, {66,126}, {66,127}, {66,128}, {66,129}, {66,130}, {66,131}, {66,145}, {66,146}, {67,56}, {67,120}, {67,121}, {67,122}, {67,123}, {67,125}, {67,126}, {67,127}, {67,128}, {67,129}, {67,130}, {67,145}, {67,146}, {68,56}, {68,121}, {68,122}, {68,125}, {68,126}, {68,127}, {68,128}, {68,129}, {68,145}, {68,146}, {69,120}, {69,121}, {69,122}, {69,123}, {69,124}, {69,125}, {69,126}, {69,127}, {69,128}, {69,145}, {69,146}, {70,120}, {70,121}, {70,122}, {70,123}, {70,124}, {70,125}, {70,126}, {70,127}, {70,145}, {71,-77}, {71,120}, {71,121}, {71,122}, {71,123}, {71,124}, {71,125}, {71,126}, {71,127}, {71,145}, {72,-77}, {72,-76}, {72,52}, {72,121}, {72,122}, {72,123}, {72,124}, {72,125}, {72,145}, {73,-77}, {73,-76}, {73,-75}, {73,-68}, {73,-67}, {73,52}, {73,145}, {73,146}, {74,-76}, {74,-75}, {74,-68}, {74,-67}, {74,52}, {74,145}, {74,146}, {75,-76}, {75,-75}, {75,-67}, {75,145}, {75,146}, {76,-76}, {76,-75}, {76,145}, {76,146}, {77,-75}, {77,145}, {77,146}, {78,-75}, {78,-74}, {78,145}, {79,-75}, {79,-74}, {79,-73}, {79,145}, {80,-74}, {80,-73}, {80,-72}, {80,145}, {81,-74}, {81,-73}, {81,-72}, {81,-37}, {81,145}, {81,146}, {82,-74}, {82,-73}, {82,-72}, {82,-71}, {82,-37}, {82,145}, {82,146}, {83,-73}, {83,-72}, {83,-71}, {83,-70}, {83,145}, {84,-73}, {84,-72}, {84,-71}, {84,-70}, {84,-69}, {84,-68}, {84,-34}, {84,-33}, {84,-32}, {85,-35}, {85,-34}, {85,-33}, {85,-32}, {86,-34}, {86,-33}, {86,-32}, {87,-34}, {87,-33}, {87,-32}, {88,-34}, {88,-33}, {88,-32}, {90,51}, {90,52}, {90,53}, {91,51}, {91,52}, {91,53}, {92,51}, {92,52}, {92,53}, }, + ["mineral-tan-dirt-5"] = {{-96,-26}, {-96,-25}, {-96,-24}, {-96,-23}, {-96,-22}, {-96,-21}, {-96,-20}, {-96,-19}, {-96,-18}, {-96,-17}, {-96,-16}, {-96,-15}, {-96,-14}, {-96,-13}, {-96,-12}, {-96,-11}, {-96,-10}, {-96,-9}, {-96,-8}, {-96,-7}, {-96,-6}, {-96,4}, {-96,5}, {-96,6}, {-96,7}, {-96,8}, {-96,9}, {-96,10}, {-96,11}, {-96,12}, {-96,13}, {-96,14}, {-96,15}, {-96,16}, {-96,17}, {-96,18}, {-96,19}, {-96,20}, {-96,21}, {-96,22}, {-96,23}, {-96,24}, {-96,25}, {-96,26}, {-96,27}, {-96,28}, {-96,29}, {-96,30}, {-96,31}, {-96,32}, {-96,37}, {-96,38}, {-96,39}, {-96,40}, {-96,41}, {-96,42}, {-95,-29}, {-95,-28}, {-95,-27}, {-95,-26}, {-95,-25}, {-95,-21}, {-95,-20}, {-95,-17}, {-95,-16}, {-95,-15}, {-95,-14}, {-95,-13}, {-95,-12}, {-95,-11}, {-95,-8}, {-95,-7}, {-95,-6}, {-95,-5}, {-95,-4}, {-95,-3}, {-95,-2}, {-95,-1}, {-95,0}, {-95,1}, {-95,2}, {-95,3}, {-95,4}, {-95,5}, {-95,6}, {-95,7}, {-95,8}, {-95,18}, {-95,19}, {-95,20}, {-95,39}, {-95,40}, {-95,41}, {-95,42}, {-94,-30}, {-94,-29}, {-94,-5}, {-94,-4}, {-94,-3}, {-94,-2}, {-94,-1}, {-94,0}, {-94,1}, {-94,2}, {-94,3}, {-94,4}, {-94,5}, {-94,35}, {-94,36}, {-94,37}, {-94,42}, {-93,-30}, {-93,-29}, {-93,-28}, {-93,23}, {-93,24}, {-93,25}, {-93,26}, {-93,27}, {-93,28}, {-93,29}, {-93,30}, {-93,43}, {-93,44}, {-93,45}, {-93,46}, {-93,47}, {-93,48}, {-93,49}, {-93,50}, {-93,51}, {-93,52}, {-93,53}, {-93,54}, {-93,55}, {-93,56}, {-93,57}, {-93,58}, {-93,59}, {-93,60}, {-93,61}, {-93,62}, {-93,63}, {-93,64}, {-93,65}, {-93,66}, {-93,67}, {-93,78}, {-93,79}, {-93,80}, {-93,81}, {-93,82}, {-93,83}, {-93,84}, {-93,85}, {-93,86}, {-93,87}, {-93,88}, {-93,89}, {-93,90}, {-93,91}, {-93,92}, {-93,93}, {-93,94}, {-93,95}, {-93,96}, {-93,97}, {-93,98}, {-93,99}, {-93,100}, {-93,101}, {-93,102}, {-93,103}, {-93,104}, {-93,105}, {-93,106}, {-93,107}, {-93,108}, {-92,-30}, {-92,-10}, {-92,-9}, {-92,-8}, {-92,13}, {-92,14}, {-92,15}, {-92,16}, {-92,17}, {-92,18}, {-92,19}, {-92,24}, {-92,25}, {-92,26}, {-92,27}, {-92,28}, {-92,29}, {-92,30}, {-92,44}, {-92,45}, {-92,46}, {-92,47}, {-92,48}, {-92,49}, {-92,50}, {-92,51}, {-92,52}, {-92,53}, {-92,54}, {-92,55}, {-92,56}, {-92,57}, {-92,58}, {-92,59}, {-92,60}, {-92,61}, {-92,62}, {-92,63}, {-92,64}, {-92,65}, {-92,66}, {-92,67}, {-92,78}, {-92,79}, {-92,80}, {-92,81}, {-92,82}, {-92,83}, {-92,84}, {-92,85}, {-92,86}, {-92,87}, {-92,88}, {-92,89}, {-92,90}, {-92,91}, {-92,92}, {-92,93}, {-92,94}, {-92,95}, {-92,96}, {-92,97}, {-92,98}, {-92,99}, {-92,100}, {-92,101}, {-92,102}, {-92,103}, {-92,104}, {-92,105}, {-92,106}, {-92,107}, {-92,108}, {-91,-30}, {-91,-10}, {-91,-9}, {-91,-8}, {-91,-7}, {-91,-6}, {-91,-5}, {-91,-4}, {-91,-3}, {-91,-2}, {-91,12}, {-91,13}, {-91,14}, {-91,15}, {-91,16}, {-91,17}, {-91,18}, {-91,19}, {-91,20}, {-91,25}, {-91,26}, {-91,27}, {-91,28}, {-91,29}, {-91,30}, {-91,44}, {-91,45}, {-91,46}, {-91,47}, {-91,48}, {-91,49}, {-91,62}, {-91,63}, {-91,64}, {-91,65}, {-91,66}, {-91,67}, {-91,68}, {-91,69}, {-91,70}, {-91,77}, {-91,78}, {-91,79}, {-91,80}, {-91,81}, {-91,82}, {-91,83}, {-91,84}, {-91,85}, {-91,86}, {-91,87}, {-91,88}, {-91,89}, {-91,90}, {-91,91}, {-91,92}, {-91,93}, {-91,94}, {-91,105}, {-91,106}, {-91,107}, {-91,108}, {-90,-109}, {-90,-108}, {-90,-107}, {-90,-106}, {-90,-105}, {-90,-104}, {-90,-103}, {-90,-102}, {-90,-101}, {-90,-100}, {-90,-99}, {-90,-98}, {-90,-97}, {-90,-37}, {-90,-36}, {-90,-35}, {-90,-34}, {-90,-33}, {-90,-32}, {-90,-31}, {-90,-30}, {-90,-11}, {-90,-10}, {-90,-9}, {-90,-8}, {-90,-7}, {-90,-6}, {-90,-5}, {-90,-4}, {-90,-3}, {-90,-2}, {-90,-1}, {-90,0}, {-90,1}, {-90,10}, {-90,11}, {-90,12}, {-90,13}, {-90,14}, {-90,15}, {-90,16}, {-90,17}, {-90,18}, {-90,19}, {-90,20}, {-90,21}, {-90,29}, {-90,30}, {-90,36}, {-90,37}, {-90,38}, {-90,39}, {-90,64}, {-90,65}, {-90,66}, {-90,67}, {-90,68}, {-90,69}, {-90,70}, {-90,71}, {-90,72}, {-90,73}, {-90,74}, {-90,75}, {-90,76}, {-90,77}, {-90,78}, {-90,79}, {-90,80}, {-90,81}, {-90,82}, {-90,83}, {-90,84}, {-90,85}, {-90,86}, {-90,106}, {-90,107}, {-90,108}, {-89,-119}, {-89,-118}, {-89,-117}, {-89,-109}, {-89,-108}, {-89,-107}, {-89,-106}, {-89,-105}, {-89,-104}, {-89,-103}, {-89,-102}, {-89,-101}, {-89,-100}, {-89,-99}, {-89,-98}, {-89,-97}, {-89,-37}, {-89,-36}, {-89,-35}, {-89,-34}, {-89,-33}, {-89,-32}, {-89,-31}, {-89,-30}, {-89,-29}, {-89,-10}, {-89,-9}, {-89,-8}, {-89,-7}, {-89,-6}, {-89,-5}, {-89,-4}, {-89,-3}, {-89,-2}, {-89,-1}, {-89,0}, {-89,1}, {-89,2}, {-89,3}, {-89,9}, {-89,10}, {-89,11}, {-89,12}, {-89,13}, {-89,14}, {-89,15}, {-89,16}, {-89,17}, {-89,18}, {-89,19}, {-89,20}, {-89,21}, {-89,22}, {-89,42}, {-89,50}, {-89,53}, {-89,54}, {-89,55}, {-89,56}, {-89,57}, {-89,68}, {-89,69}, {-89,70}, {-89,71}, {-89,72}, {-89,73}, {-89,74}, {-89,75}, {-89,76}, {-89,77}, {-89,97}, {-89,98}, {-89,99}, {-89,100}, {-89,101}, {-89,102}, {-89,107}, {-89,108}, {-89,109}, {-89,110}, {-89,111}, {-89,112}, {-89,113}, {-89,114}, {-89,115}, {-89,116}, {-89,117}, {-89,118}, {-88,-120}, {-88,-119}, {-88,-118}, {-88,-117}, {-88,-116}, {-88,-109}, {-88,-108}, {-88,-107}, {-88,-106}, {-88,-105}, {-88,-100}, {-88,-99}, {-88,-98}, {-88,-97}, {-88,-39}, {-88,-38}, {-88,-37}, {-88,-36}, {-88,-35}, {-88,-34}, {-88,-33}, {-88,-32}, {-88,-31}, {-88,-30}, {-88,23}, {-88,50}, {-88,60}, {-88,62}, {-88,63}, {-88,81}, {-88,82}, {-88,83}, {-88,84}, {-88,85}, {-88,86}, {-88,87}, {-88,88}, {-88,89}, {-88,90}, {-88,91}, {-88,92}, {-88,93}, {-88,94}, {-88,95}, {-88,104}, {-88,109}, {-88,110}, {-88,111}, {-88,112}, {-88,113}, {-88,114}, {-88,115}, {-88,116}, {-88,117}, {-88,118}, {-87,-121}, {-87,-120}, {-87,-119}, {-87,-118}, {-87,-117}, {-87,-116}, {-87,-115}, {-87,-109}, {-87,-108}, {-87,-107}, {-87,-99}, {-87,-98}, {-87,-97}, {-87,-96}, {-87,-95}, {-87,-94}, {-87,-93}, {-87,-92}, {-87,-91}, {-87,-90}, {-87,-89}, {-87,-42}, {-87,-41}, {-87,-40}, {-87,-39}, {-87,-38}, {-87,-37}, {-87,-36}, {-87,-35}, {-87,-34}, {-87,-33}, {-87,-32}, {-87,60}, {-87,62}, {-87,63}, {-87,64}, {-87,65}, {-87,66}, {-87,77}, {-87,78}, {-87,79}, {-87,80}, {-87,81}, {-87,82}, {-87,83}, {-87,84}, {-87,85}, {-87,86}, {-87,87}, {-87,88}, {-87,89}, {-87,90}, {-87,91}, {-87,92}, {-87,93}, {-87,94}, {-87,95}, {-87,104}, {-87,105}, {-87,106}, {-87,114}, {-87,115}, {-87,116}, {-87,117}, {-87,118}, {-86,-122}, {-86,-121}, {-86,-120}, {-86,-119}, {-86,-118}, {-86,-117}, {-86,-116}, {-86,-115}, {-86,-114}, {-86,-113}, {-86,-112}, {-86,-111}, {-86,-110}, {-86,-109}, {-86,-103}, {-86,-97}, {-86,-96}, {-86,-95}, {-86,-94}, {-86,-93}, {-86,-92}, {-86,-91}, {-86,-90}, {-86,-89}, {-86,-88}, {-86,-52}, {-86,-51}, {-86,-50}, {-86,-49}, {-86,-48}, {-86,-47}, {-86,-46}, {-86,-45}, {-86,-44}, {-86,-43}, {-86,-42}, {-86,-41}, {-86,-40}, {-86,-39}, {-86,-38}, {-86,-37}, {-86,-36}, {-86,-35}, {-86,-27}, {-86,43}, {-86,44}, {-86,45}, {-86,46}, {-86,62}, {-86,63}, {-86,64}, {-86,65}, {-86,66}, {-86,69}, {-86,70}, {-86,71}, {-86,72}, {-86,73}, {-86,74}, {-86,75}, {-86,76}, {-86,77}, {-86,78}, {-86,79}, {-86,80}, {-86,81}, {-86,82}, {-86,83}, {-86,84}, {-86,85}, {-86,86}, {-86,87}, {-86,88}, {-86,89}, {-86,90}, {-86,91}, {-86,92}, {-86,104}, {-86,105}, {-86,106}, {-86,107}, {-86,116}, {-86,117}, {-86,118}, {-85,-123}, {-85,-122}, {-85,-121}, {-85,-120}, {-85,-119}, {-85,-118}, {-85,-117}, {-85,-116}, {-85,-115}, {-85,-114}, {-85,-113}, {-85,-112}, {-85,-111}, {-85,-110}, {-85,-104}, {-85,-103}, {-85,-102}, {-85,-95}, {-85,-94}, {-85,-93}, {-85,-92}, {-85,-91}, {-85,-90}, {-85,-89}, {-85,-88}, {-85,-52}, {-85,-51}, {-85,-50}, {-85,-49}, {-85,-48}, {-85,-47}, {-85,-46}, {-85,-45}, {-85,-44}, {-85,-43}, {-85,-42}, {-85,-41}, {-85,-40}, {-85,-39}, {-85,-27}, {-85,42}, {-85,43}, {-85,44}, {-85,45}, {-85,46}, {-85,63}, {-85,64}, {-85,65}, {-85,67}, {-85,68}, {-85,69}, {-85,70}, {-85,71}, {-85,72}, {-85,73}, {-85,74}, {-85,75}, {-85,76}, {-85,77}, {-85,78}, {-85,79}, {-85,80}, {-85,81}, {-85,82}, {-85,88}, {-85,89}, {-85,90}, {-85,91}, {-85,92}, {-85,105}, {-85,106}, {-85,107}, {-85,108}, {-85,109}, {-85,110}, {-85,111}, {-85,112}, {-85,113}, {-85,117}, {-85,118}, {-84,-124}, {-84,-123}, {-84,-122}, {-84,-106}, {-84,-105}, {-84,-104}, {-84,-103}, {-84,-102}, {-84,-101}, {-84,-100}, {-84,-93}, {-84,-92}, {-84,-91}, {-84,-90}, {-84,-89}, {-84,-88}, {-84,-52}, {-84,-51}, {-84,-50}, {-84,-49}, {-84,-48}, {-84,-47}, {-84,-46}, {-84,-44}, {-84,-43}, {-84,-42}, {-84,-34}, {-84,-33}, {-84,-32}, {-84,-31}, {-84,-30}, {-84,-27}, {-84,41}, {-84,42}, {-84,43}, {-84,44}, {-84,45}, {-84,67}, {-84,68}, {-84,88}, {-84,89}, {-84,90}, {-84,91}, {-84,117}, {-84,118}, {-83,-125}, {-83,-124}, {-83,-123}, {-83,-107}, {-83,-106}, {-83,-105}, {-83,-100}, {-83,-99}, {-83,-98}, {-83,-90}, {-83,-89}, {-83,-88}, {-83,-87}, {-83,-86}, {-83,-85}, {-83,-84}, {-83,-83}, {-83,-79}, {-83,-78}, {-83,-77}, {-83,-76}, {-83,-75}, {-83,-71}, {-83,-70}, {-83,-69}, {-83,-68}, {-83,-67}, {-83,-66}, {-83,-63}, {-83,-62}, {-83,-61}, {-83,-57}, {-83,-56}, {-83,-55}, {-83,-54}, {-83,-53}, {-83,-52}, {-83,-51}, {-83,-50}, {-83,-49}, {-83,-48}, {-83,-46}, {-83,-45}, {-83,-44}, {-83,-37}, {-83,-36}, {-83,-35}, {-83,-34}, {-83,-33}, {-83,-32}, {-83,-31}, {-83,-30}, {-83,-27}, {-83,41}, {-83,42}, {-83,43}, {-83,44}, {-83,45}, {-83,117}, {-83,118}, {-82,-126}, {-82,-125}, {-82,-124}, {-82,-119}, {-82,-118}, {-82,-117}, {-82,-116}, {-82,-115}, {-82,-114}, {-82,-113}, {-82,-112}, {-82,-111}, {-82,-110}, {-82,-109}, {-82,-108}, {-82,-107}, {-82,-98}, {-82,-97}, {-82,-96}, {-82,-95}, {-82,-89}, {-82,-88}, {-82,-87}, {-82,-86}, {-82,-85}, {-82,-84}, {-82,-83}, {-82,-82}, {-82,-78}, {-82,-77}, {-82,-76}, {-82,-75}, {-82,-74}, {-82,-73}, {-82,-72}, {-82,-66}, {-82,-65}, {-82,-64}, {-82,-63}, {-82,-62}, {-82,-61}, {-82,-60}, {-82,-56}, {-82,-55}, {-82,-54}, {-82,-53}, {-82,-52}, {-82,-51}, {-82,-50}, {-82,-49}, {-82,-48}, {-82,-47}, {-82,-46}, {-82,-41}, {-82,-40}, {-82,-39}, {-82,-38}, {-82,-37}, {-82,-36}, {-82,-31}, {-82,-30}, {-82,-27}, {-82,118}, {-81,-127}, {-81,-126}, {-81,-125}, {-81,-120}, {-81,-119}, {-81,-118}, {-81,-117}, {-81,-116}, {-81,-115}, {-81,-114}, {-81,-113}, {-81,-112}, {-81,-111}, {-81,-110}, {-81,-109}, {-81,-96}, {-81,-95}, {-81,-94}, {-81,-93}, {-81,-86}, {-81,-85}, {-81,-84}, {-81,-83}, {-81,-82}, {-81,-78}, {-81,-77}, {-81,-76}, {-81,-75}, {-81,-74}, {-81,-73}, {-81,-72}, {-81,-67}, {-81,-66}, {-81,-65}, {-81,-64}, {-81,-63}, {-81,-62}, {-81,-61}, {-81,-56}, {-81,-55}, {-81,-54}, {-81,-53}, {-81,-52}, {-81,-51}, {-81,-50}, {-81,-49}, {-81,-45}, {-81,-44}, {-81,-43}, {-81,-42}, {-81,-41}, {-81,-40}, {-81,-39}, {-81,-38}, {-81,-37}, {-81,-36}, {-81,-31}, {-81,-30}, {-81,-27}, {-81,118}, {-81,119}, {-81,120}, {-81,121}, {-80,-128}, {-80,-127}, {-80,-126}, {-80,-125}, {-80,-121}, {-80,-120}, {-80,-119}, {-80,-110}, {-80,-109}, {-80,-95}, {-80,-94}, {-80,-93}, {-80,-92}, {-80,-91}, {-80,-83}, {-80,-82}, {-80,-78}, {-80,-77}, {-80,-76}, {-80,-75}, {-80,-74}, {-80,-73}, {-80,-72}, {-80,-67}, {-80,-66}, {-80,-65}, {-80,-64}, {-80,-63}, {-80,-62}, {-80,-61}, {-80,-56}, {-80,-55}, {-80,-54}, {-80,-52}, {-80,-51}, {-80,-47}, {-80,-46}, {-80,-45}, {-80,-44}, {-80,-43}, {-80,-42}, {-80,-41}, {-80,-40}, {-80,-39}, {-80,-38}, {-80,-33}, {-80,-32}, {-80,-31}, {-80,-30}, {-80,-27}, {-80,119}, {-80,120}, {-80,121}, {-80,122}, {-80,123}, {-79,-128}, {-79,-127}, {-79,-126}, {-79,-125}, {-79,-122}, {-79,-121}, {-79,-120}, {-79,-92}, {-79,-91}, {-79,-90}, {-79,-89}, {-79,-81}, {-79,-77}, {-79,-76}, {-79,-75}, {-79,-74}, {-79,-73}, {-79,-72}, {-79,-71}, {-79,-67}, {-79,-66}, {-79,-65}, {-79,-64}, {-79,-63}, {-79,-62}, {-79,-61}, {-79,-57}, {-79,-56}, {-79,-54}, {-79,-53}, {-79,-52}, {-79,-49}, {-79,-48}, {-79,-47}, {-79,-46}, {-79,-45}, {-79,-44}, {-79,-43}, {-79,-42}, {-79,-41}, {-79,-38}, {-79,-34}, {-79,-33}, {-79,-32}, {-79,-31}, {-79,-30}, {-79,-29}, {-79,-27}, {-79,119}, {-79,120}, {-79,121}, {-79,122}, {-79,123}, {-79,124}, {-79,125}, {-78,-128}, {-78,-127}, {-78,-126}, {-78,-125}, {-78,-122}, {-78,-121}, {-78,-90}, {-78,-89}, {-78,-88}, {-78,-87}, {-78,-86}, {-78,-81}, {-78,-76}, {-78,-75}, {-78,-74}, {-78,-73}, {-78,-72}, {-78,-71}, {-78,-67}, {-78,-66}, {-78,-65}, {-78,-64}, {-78,-63}, {-78,-62}, {-78,-57}, {-78,-56}, {-78,-55}, {-78,-51}, {-78,-50}, {-78,-49}, {-78,-48}, {-78,-47}, {-78,-46}, {-78,-45}, {-78,-44}, {-78,-43}, {-78,-42}, {-78,-41}, {-78,-35}, {-78,-34}, {-78,-33}, {-78,-32}, {-78,-31}, {-78,-30}, {-78,-29}, {-78,-27}, {-78,124}, {-78,125}, {-78,126}, {-78,127}, {-77,-128}, {-77,-127}, {-77,-126}, {-77,-125}, {-77,-122}, {-77,-121}, {-77,-88}, {-77,-87}, {-77,-86}, {-77,-85}, {-77,-84}, {-77,-81}, {-77,-76}, {-77,-75}, {-77,-74}, {-77,-73}, {-77,-72}, {-77,-71}, {-77,-68}, {-77,-67}, {-77,-66}, {-77,-65}, {-77,-64}, {-77,-63}, {-77,-62}, {-77,-57}, {-77,-56}, {-77,-53}, {-77,-52}, {-77,-51}, {-77,-50}, {-77,-49}, {-77,-48}, {-77,-46}, {-77,-44}, {-77,-34}, {-77,-33}, {-77,-32}, {-77,-31}, {-77,-30}, {-77,-29}, {-77,-27}, {-77,125}, {-77,126}, {-77,127}, {-76,-128}, {-76,-127}, {-76,-126}, {-76,-125}, {-76,-122}, {-76,-121}, {-76,-86}, {-76,-85}, {-76,-84}, {-76,-81}, {-76,-75}, {-76,-74}, {-76,-73}, {-76,-72}, {-76,-71}, {-76,-68}, {-76,-67}, {-76,-66}, {-76,-65}, {-76,-64}, {-76,-63}, {-76,-58}, {-76,-57}, {-76,-56}, {-76,-54}, {-76,-53}, {-76,-52}, {-76,-51}, {-76,-32}, {-76,-31}, {-76,-30}, {-76,-29}, {-76,-27}, {-76,126}, {-76,127}, {-75,-128}, {-75,-127}, {-75,-126}, {-75,-125}, {-75,-122}, {-75,-121}, {-75,-85}, {-75,-84}, {-75,-81}, {-75,-75}, {-75,-74}, {-75,-73}, {-75,-72}, {-75,-71}, {-75,-68}, {-75,-67}, {-75,-66}, {-75,-65}, {-75,-64}, {-75,-58}, {-75,-57}, {-75,-54}, {-75,-53}, {-75,-52}, {-75,-32}, {-75,-31}, {-75,-30}, {-75,-29}, {-75,-27}, {-75,119}, {-75,126}, {-75,127}, {-74,-127}, {-74,-126}, {-74,-125}, {-74,-122}, {-74,-121}, {-74,-85}, {-74,-84}, {-74,-81}, {-74,-72}, {-74,-71}, {-74,-68}, {-74,-67}, {-74,-66}, {-74,-65}, {-74,-64}, {-74,-58}, {-74,-57}, {-74,-54}, {-74,-53}, {-74,-52}, {-74,-32}, {-74,-31}, {-74,-30}, {-74,-29}, {-74,127}, {-74,128}, {-74,129}, {-74,130}, {-74,131}, {-73,-127}, {-73,-126}, {-73,-125}, {-73,-121}, {-73,-120}, {-73,-85}, {-73,-84}, {-73,-81}, {-73,-80}, {-73,-67}, {-73,-58}, {-73,-57}, {-73,-54}, {-73,-53}, {-73,-52}, {-73,-32}, {-73,-31}, {-73,-30}, {-73,-29}, {-73,130}, {-73,131}, {-73,132}, {-73,133}, {-73,134}, {-73,135}, {-72,-127}, {-72,-126}, {-72,-125}, {-72,-121}, {-72,-120}, {-72,-86}, {-72,-85}, {-72,-84}, {-72,-81}, {-72,-58}, {-72,-57}, {-72,-54}, {-72,-53}, {-72,-52}, {-72,-31}, {-72,-30}, {-72,-29}, {-72,-28}, {-72,133}, {-72,134}, {-72,135}, {-72,136}, {-72,137}, {-72,138}, {-72,139}, {-71,-127}, {-71,-126}, {-71,-125}, {-71,-124}, {-71,-121}, {-71,-120}, {-71,-86}, {-71,-85}, {-71,-84}, {-71,-81}, {-71,-58}, {-71,-57}, {-71,-54}, {-71,-53}, {-71,-52}, {-71,-51}, {-71,-30}, {-71,-29}, {-71,-28}, {-71,137}, {-71,138}, {-71,139}, {-71,140}, {-71,141}, {-71,142}, {-71,143}, {-70,-127}, {-70,-126}, {-70,-125}, {-70,-124}, {-70,-121}, {-70,-120}, {-70,-86}, {-70,-85}, {-70,-81}, {-70,-58}, {-70,-57}, {-70,-54}, {-70,-53}, {-70,-52}, {-70,-51}, {-70,-33}, {-70,-30}, {-70,-29}, {-70,-28}, {-70,127}, {-70,128}, {-70,140}, {-70,141}, {-70,142}, {-70,143}, {-70,144}, {-70,145}, {-70,146}, {-70,147}, {-69,-127}, {-69,-126}, {-69,-125}, {-69,-124}, {-69,-120}, {-69,-119}, {-69,-86}, {-69,-85}, {-69,-81}, {-69,-58}, {-69,-57}, {-69,-54}, {-69,-53}, {-69,-52}, {-69,-51}, {-69,-32}, {-69,-31}, {-69,-30}, {-69,-29}, {-69,-28}, {-69,132}, {-69,133}, {-69,134}, {-69,135}, {-69,142}, {-69,143}, {-69,144}, {-69,145}, {-69,146}, {-69,147}, {-69,148}, {-69,149}, {-69,150}, {-69,151}, {-69,152}, {-68,-126}, {-68,-125}, {-68,-124}, {-68,-120}, {-68,-119}, {-68,-86}, {-68,-85}, {-68,-82}, {-68,-81}, {-68,-58}, {-68,-57}, {-68,-54}, {-68,-53}, {-68,-52}, {-68,-51}, {-68,-30}, {-68,-29}, {-68,-28}, {-68,133}, {-68,134}, {-68,137}, {-68,138}, {-68,139}, {-68,144}, {-68,145}, {-68,146}, {-68,147}, {-68,148}, {-68,149}, {-68,150}, {-68,151}, {-68,152}, {-67,-126}, {-67,-125}, {-67,-124}, {-67,-123}, {-67,-120}, {-67,-119}, {-67,-86}, {-67,-85}, {-67,-82}, {-67,-81}, {-67,-58}, {-67,-57}, {-67,-54}, {-67,-53}, {-67,-52}, {-67,-51}, {-67,-30}, {-67,-29}, {-67,-28}, {-67,125}, {-67,126}, {-67,137}, {-67,138}, {-67,139}, {-67,140}, {-67,146}, {-67,147}, {-67,148}, {-67,149}, {-67,150}, {-67,151}, {-67,152}, {-66,-126}, {-66,-125}, {-66,-124}, {-66,-123}, {-66,-120}, {-66,-119}, {-66,-86}, {-66,-85}, {-66,-82}, {-66,-81}, {-66,-58}, {-66,-57}, {-66,-54}, {-66,-53}, {-66,-52}, {-66,-51}, {-66,-50}, {-66,-30}, {-66,-29}, {-66,-28}, {-66,121}, {-66,123}, {-66,124}, {-66,125}, {-66,126}, {-66,127}, {-66,128}, {-66,129}, {-66,130}, {-66,131}, {-66,137}, {-66,138}, {-66,139}, {-66,140}, {-66,141}, {-66,147}, {-66,148}, {-66,149}, {-66,150}, {-66,151}, {-66,152}, {-65,-126}, {-65,-125}, {-65,-124}, {-65,-123}, {-65,-120}, {-65,-119}, {-65,-118}, {-65,-86}, {-65,-85}, {-65,-82}, {-65,-81}, {-65,-58}, {-65,-57}, {-65,-54}, {-65,-53}, {-65,-52}, {-65,-51}, {-65,-50}, {-65,-49}, {-65,-31}, {-65,-30}, {-65,-29}, {-65,-28}, {-65,140}, {-65,141}, {-65,142}, {-65,148}, {-65,149}, {-65,150}, {-65,151}, {-65,152}, {-64,-126}, {-64,-125}, {-64,-124}, {-64,-123}, {-64,-119}, {-64,-86}, {-64,-85}, {-64,-82}, {-64,-81}, {-64,-58}, {-64,-57}, {-64,-54}, {-64,-53}, {-64,-52}, {-64,-51}, {-64,-50}, {-64,-49}, {-64,-48}, {-64,-47}, {-64,-46}, {-64,-45}, {-64,-30}, {-64,-29}, {-64,-28}, {-64,140}, {-64,141}, {-64,142}, {-64,143}, {-64,145}, {-64,149}, {-64,150}, {-64,151}, {-64,152}, {-63,-126}, {-63,-125}, {-63,-124}, {-63,-123}, {-63,-122}, {-63,-119}, {-63,-86}, {-63,-85}, {-63,-81}, {-63,-54}, {-63,-53}, {-63,-52}, {-63,-51}, {-63,-50}, {-63,-49}, {-63,-48}, {-63,-47}, {-63,-46}, {-63,-45}, {-63,-44}, {-63,-43}, {-63,-42}, {-63,-41}, {-63,-40}, {-63,-39}, {-63,-38}, {-63,-37}, {-63,-36}, {-63,-35}, {-63,-34}, {-63,-33}, {-63,-29}, {-63,-28}, {-63,140}, {-63,141}, {-63,142}, {-63,143}, {-63,145}, {-63,146}, {-63,149}, {-63,150}, {-63,151}, {-63,152}, {-62,-125}, {-62,-124}, {-62,-123}, {-62,-122}, {-62,-119}, {-62,-86}, {-62,-85}, {-62,-81}, {-62,-50}, {-62,-49}, {-62,-48}, {-62,-47}, {-62,-46}, {-62,-45}, {-62,-44}, {-62,-43}, {-62,-42}, {-62,-41}, {-62,-40}, {-62,-39}, {-62,-38}, {-62,-37}, {-62,-36}, {-62,-35}, {-62,-34}, {-62,-33}, {-62,-32}, {-62,-29}, {-62,-28}, {-62,141}, {-62,142}, {-62,143}, {-62,146}, {-62,147}, {-62,150}, {-62,151}, {-62,152}, {-61,-125}, {-61,-124}, {-61,-123}, {-61,-122}, {-61,-119}, {-61,-86}, {-61,-85}, {-61,-84}, {-61,-81}, {-61,-47}, {-61,-46}, {-61,-45}, {-61,-44}, {-61,-43}, {-61,-42}, {-61,-41}, {-61,-40}, {-61,-39}, {-61,-38}, {-61,-37}, {-61,-36}, {-61,-35}, {-61,-34}, {-61,-33}, {-61,-32}, {-61,-31}, {-61,-30}, {-61,-29}, {-61,-28}, {-61,141}, {-61,142}, {-61,143}, {-61,145}, {-61,147}, {-61,150}, {-61,151}, {-61,152}, {-60,-125}, {-60,-124}, {-60,-123}, {-60,-122}, {-60,-119}, {-60,-118}, {-60,-117}, {-60,-86}, {-60,-85}, {-60,-84}, {-60,-81}, {-60,-45}, {-60,-44}, {-60,-43}, {-60,-42}, {-60,-41}, {-60,-40}, {-60,-39}, {-60,-38}, {-60,-37}, {-60,-36}, {-60,-35}, {-60,-34}, {-60,-33}, {-60,-32}, {-60,-31}, {-60,-30}, {-60,-29}, {-60,-28}, {-60,141}, {-60,142}, {-60,143}, {-60,147}, {-60,150}, {-60,151}, {-60,152}, {-59,-125}, {-59,-124}, {-59,-123}, {-59,-122}, {-59,-119}, {-59,-118}, {-59,-117}, {-59,-86}, {-59,-85}, {-59,-84}, {-59,-81}, {-59,-58}, {-59,-54}, {-59,-39}, {-59,-38}, {-59,-37}, {-59,-36}, {-59,-35}, {-59,-34}, {-59,-33}, {-59,-32}, {-59,-31}, {-59,-30}, {-59,-29}, {-59,141}, {-59,142}, {-59,143}, {-59,147}, {-59,150}, {-59,151}, {-59,152}, {-58,-125}, {-58,-124}, {-58,-123}, {-58,-122}, {-58,-118}, {-58,-117}, {-58,-86}, {-58,-85}, {-58,-84}, {-58,-81}, {-58,-58}, {-58,-57}, {-58,-54}, {-58,-53}, {-58,-34}, {-58,-33}, {-58,-32}, {-58,-31}, {-58,-30}, {-58,142}, {-58,143}, {-58,146}, {-58,147}, {-58,150}, {-58,151}, {-58,152}, {-57,-125}, {-57,-124}, {-57,-123}, {-57,-122}, {-57,-121}, {-57,-118}, {-57,-117}, {-57,-86}, {-57,-85}, {-57,-84}, {-57,-81}, {-57,-58}, {-57,-57}, {-57,-54}, {-57,-53}, {-57,-52}, {-57,142}, {-57,143}, {-57,145}, {-57,146}, {-57,147}, {-57,150}, {-57,151}, {-57,152}, {-56,-124}, {-56,-123}, {-56,-122}, {-56,-121}, {-56,-118}, {-56,-117}, {-56,-86}, {-56,-85}, {-56,-84}, {-56,-81}, {-56,-58}, {-56,-57}, {-56,-54}, {-56,-53}, {-56,-52}, {-56,-51}, {-56,-46}, {-56,-45}, {-56,-43}, {-56,142}, {-56,143}, {-56,147}, {-56,150}, {-56,151}, {-56,152}, {-55,-124}, {-55,-123}, {-55,-122}, {-55,-121}, {-55,-118}, {-55,-117}, {-55,-86}, {-55,-85}, {-55,-84}, {-55,-81}, {-55,-58}, {-55,-57}, {-55,-54}, {-55,-53}, {-55,-52}, {-55,-51}, {-55,142}, {-55,143}, {-55,147}, {-55,150}, {-55,151}, {-55,152}, {-54,-124}, {-54,-123}, {-54,-122}, {-54,-121}, {-54,-118}, {-54,-117}, {-54,-87}, {-54,-86}, {-54,-85}, {-54,-84}, {-54,-81}, {-54,-58}, {-54,-54}, {-54,-53}, {-54,-52}, {-54,-51}, {-54,-50}, {-54,142}, {-54,143}, {-54,150}, {-54,151}, {-54,152}, {-53,-124}, {-53,-123}, {-53,-122}, {-53,-121}, {-53,-118}, {-53,-117}, {-53,-87}, {-53,-86}, {-53,-85}, {-53,-84}, {-53,-81}, {-53,-58}, {-53,-54}, {-53,-53}, {-53,-52}, {-53,-37}, {-53,-36}, {-53,-35}, {-53,-34}, {-53,-33}, {-53,-32}, {-53,-31}, {-53,-30}, {-53,142}, {-53,143}, {-53,150}, {-53,151}, {-53,152}, {-52,-124}, {-52,-123}, {-52,-122}, {-52,-121}, {-52,-118}, {-52,-117}, {-52,-86}, {-52,-85}, {-52,-84}, {-52,-81}, {-52,-58}, {-52,-55}, {-52,-54}, {-52,-42}, {-52,-39}, {-52,-38}, {-52,-37}, {-52,-36}, {-52,-35}, {-52,-34}, {-52,-33}, {-52,-32}, {-52,-31}, {-52,-30}, {-52,-29}, {-52,-28}, {-52,142}, {-52,143}, {-52,145}, {-52,147}, {-52,150}, {-52,151}, {-52,152}, {-51,-124}, {-51,-123}, {-51,-122}, {-51,-121}, {-51,-118}, {-51,-117}, {-51,-86}, {-51,-85}, {-51,-58}, {-51,-44}, {-51,-43}, {-51,-42}, {-51,-41}, {-51,-39}, {-51,-38}, {-51,-37}, {-51,-36}, {-51,-35}, {-51,-34}, {-51,-33}, {-51,-32}, {-51,-31}, {-51,-30}, {-51,-29}, {-51,-28}, {-51,142}, {-51,143}, {-51,145}, {-51,146}, {-51,147}, {-51,150}, {-51,151}, {-51,152}, {-50,-123}, {-50,-122}, {-50,-121}, {-50,-118}, {-50,-117}, {-50,-116}, {-50,-86}, {-50,-85}, {-50,-79}, {-50,-78}, {-50,-77}, {-50,-76}, {-50,-75}, {-50,-74}, {-50,-73}, {-50,-72}, {-50,-52}, {-50,-51}, {-50,-50}, {-50,-43}, {-50,-42}, {-50,-41}, {-50,-39}, {-50,-38}, {-50,-37}, {-50,-36}, {-50,-35}, {-50,-32}, {-50,-31}, {-50,-30}, {-50,-29}, {-50,-28}, {-50,142}, {-50,143}, {-50,145}, {-50,146}, {-50,147}, {-50,150}, {-50,151}, {-50,152}, {-49,-123}, {-49,-122}, {-49,-121}, {-49,-117}, {-49,-116}, {-49,-86}, {-49,-85}, {-49,-77}, {-49,-76}, {-49,-75}, {-49,-74}, {-49,-73}, {-49,-72}, {-49,-71}, {-49,-52}, {-49,-51}, {-49,-50}, {-49,-43}, {-49,-42}, {-49,-41}, {-49,-40}, {-49,-38}, {-49,-37}, {-49,-36}, {-49,-35}, {-49,-31}, {-49,-30}, {-49,-29}, {-49,-28}, {-49,142}, {-49,143}, {-49,145}, {-49,147}, {-49,150}, {-49,151}, {-49,152}, {-48,-123}, {-48,-122}, {-48,-121}, {-48,-120}, {-48,-117}, {-48,-116}, {-48,-86}, {-48,-85}, {-48,-84}, {-48,-64}, {-48,-63}, {-48,-62}, {-48,-59}, {-48,-52}, {-48,-51}, {-48,-50}, {-48,-43}, {-48,-42}, {-48,-41}, {-48,-40}, {-48,-38}, {-48,-37}, {-48,-36}, {-48,-35}, {-48,-29}, {-48,-28}, {-48,142}, {-48,143}, {-48,147}, {-48,150}, {-48,151}, {-48,152}, {-47,-123}, {-47,-122}, {-47,-121}, {-47,-120}, {-47,-117}, {-47,-116}, {-47,-87}, {-47,-86}, {-47,-85}, {-47,-84}, {-47,-67}, {-47,-59}, {-47,-55}, {-47,-51}, {-47,-42}, {-47,-41}, {-47,-40}, {-47,-38}, {-47,-37}, {-47,-36}, {-47,-35}, {-47,-34}, {-47,-29}, {-47,-28}, {-47,142}, {-47,143}, {-47,147}, {-47,150}, {-47,151}, {-47,152}, {-46,-123}, {-46,-122}, {-46,-121}, {-46,-120}, {-46,-117}, {-46,-116}, {-46,-115}, {-46,-87}, {-46,-86}, {-46,-85}, {-46,-67}, {-46,-59}, {-46,-58}, {-46,-55}, {-46,-54}, {-46,-46}, {-46,-42}, {-46,-41}, {-46,-40}, {-46,-39}, {-46,-37}, {-46,-36}, {-46,-35}, {-46,-34}, {-46,-29}, {-46,-28}, {-46,142}, {-46,143}, {-46,147}, {-46,150}, {-46,151}, {-46,152}, {-45,-123}, {-45,-122}, {-45,-121}, {-45,-120}, {-45,-116}, {-45,-115}, {-45,-87}, {-45,-86}, {-45,-85}, {-45,-81}, {-45,-80}, {-45,-79}, {-45,-78}, {-45,-77}, {-45,-76}, {-45,-75}, {-45,-74}, {-45,-73}, {-45,-72}, {-45,-67}, {-45,-58}, {-45,-55}, {-45,-54}, {-45,-53}, {-45,-46}, {-45,-42}, {-45,-41}, {-45,-40}, {-45,-39}, {-45,-37}, {-45,-36}, {-45,-35}, {-45,-34}, {-45,-31}, {-45,-30}, {-45,-29}, {-45,-28}, {-45,142}, {-45,143}, {-45,145}, {-45,147}, {-45,150}, {-45,151}, {-45,152}, {-44,-122}, {-44,-121}, {-44,-120}, {-44,-116}, {-44,-115}, {-44,-114}, {-44,-87}, {-44,-86}, {-44,-85}, {-44,-82}, {-44,-81}, {-44,-80}, {-44,-79}, {-44,-78}, {-44,-77}, {-44,-76}, {-44,-75}, {-44,-74}, {-44,-73}, {-44,-72}, {-44,-71}, {-44,-67}, {-44,-58}, {-44,-55}, {-44,-54}, {-44,-53}, {-44,-47}, {-44,-46}, {-44,-45}, {-44,-41}, {-44,-40}, {-44,-39}, {-44,-36}, {-44,-35}, {-44,-34}, {-44,-30}, {-44,-29}, {-44,-28}, {-44,142}, {-44,143}, {-44,145}, {-44,146}, {-44,147}, {-44,150}, {-44,151}, {-44,152}, {-43,-122}, {-43,-121}, {-43,-120}, {-43,-119}, {-43,-116}, {-43,-115}, {-43,-114}, {-43,-87}, {-43,-86}, {-43,-85}, {-43,-82}, {-43,-73}, {-43,-72}, {-43,-71}, {-43,-70}, {-43,-67}, {-43,-59}, {-43,-58}, {-43,-55}, {-43,-54}, {-43,-53}, {-43,-52}, {-43,-47}, {-43,-46}, {-43,-45}, {-43,-41}, {-43,-40}, {-43,-39}, {-43,-38}, {-43,-36}, {-43,-35}, {-43,-34}, {-43,-33}, {-43,-30}, {-43,-29}, {-43,-28}, {-43,142}, {-43,143}, {-43,145}, {-43,146}, {-43,147}, {-43,150}, {-43,151}, {-43,152}, {-42,-122}, {-42,-121}, {-42,-120}, {-42,-119}, {-42,-116}, {-42,-115}, {-42,-114}, {-42,-87}, {-42,-86}, {-42,-82}, {-42,-72}, {-42,-71}, {-42,-70}, {-42,-67}, {-42,-59}, {-42,-55}, {-42,-54}, {-42,-53}, {-42,-52}, {-42,-47}, {-42,-46}, {-42,-45}, {-42,-44}, {-42,-41}, {-42,-40}, {-42,-39}, {-42,-38}, {-42,-36}, {-42,-35}, {-42,-34}, {-42,-33}, {-42,-30}, {-42,-29}, {-42,-28}, {-42,142}, {-42,143}, {-42,145}, {-42,147}, {-42,150}, {-42,151}, {-42,152}, {-41,-122}, {-41,-121}, {-41,-120}, {-41,-119}, {-41,-115}, {-41,-114}, {-41,-88}, {-41,-87}, {-41,-86}, {-41,-83}, {-41,-82}, {-41,-71}, {-41,-70}, {-41,-67}, {-41,-55}, {-41,-54}, {-41,-53}, {-41,-52}, {-41,-51}, {-41,-46}, {-41,-45}, {-41,-44}, {-41,-40}, {-41,-39}, {-41,-38}, {-41,-37}, {-41,-35}, {-41,-34}, {-41,-33}, {-41,-32}, {-41,-31}, {-41,-30}, {-41,-29}, {-41,-28}, {-41,141}, {-41,142}, {-41,143}, {-41,150}, {-41,151}, {-41,152}, {-40,-122}, {-40,-121}, {-40,-120}, {-40,-119}, {-40,-115}, {-40,-114}, {-40,-88}, {-40,-87}, {-40,-86}, {-40,-83}, {-40,-82}, {-40,-71}, {-40,-70}, {-40,-67}, {-40,-55}, {-40,-54}, {-40,-53}, {-40,-52}, {-40,-51}, {-40,-46}, {-40,-45}, {-40,-44}, {-40,-40}, {-40,-39}, {-40,-38}, {-40,-37}, {-40,-35}, {-40,-34}, {-40,-33}, {-40,-32}, {-40,-31}, {-40,-30}, {-40,-29}, {-40,-28}, {-40,141}, {-40,142}, {-40,143}, {-40,150}, {-40,151}, {-40,152}, {-39,-122}, {-39,-121}, {-39,-120}, {-39,-119}, {-39,-118}, {-39,-115}, {-39,-114}, {-39,-88}, {-39,-87}, {-39,-86}, {-39,-83}, {-39,-82}, {-39,-81}, {-39,-80}, {-39,-79}, {-39,-71}, {-39,-70}, {-39,-67}, {-39,-55}, {-39,-54}, {-39,-53}, {-39,-52}, {-39,-51}, {-39,-46}, {-39,-45}, {-39,-44}, {-39,-43}, {-39,-39}, {-39,-38}, {-39,-37}, {-39,-36}, {-39,-34}, {-39,-33}, {-39,-32}, {-39,-31}, {-39,-30}, {-39,-29}, {-39,-28}, {-39,141}, {-39,142}, {-39,150}, {-39,151}, {-39,152}, {-38,-121}, {-38,-120}, {-38,-119}, {-38,-118}, {-38,-115}, {-38,-114}, {-38,-88}, {-38,-87}, {-38,-86}, {-38,-83}, {-38,-81}, {-38,-80}, {-38,-71}, {-38,-70}, {-38,-67}, {-38,-59}, {-38,-58}, {-38,-55}, {-38,-54}, {-38,-53}, {-38,-52}, {-38,-51}, {-38,-50}, {-38,-46}, {-38,-45}, {-38,-44}, {-38,-43}, {-38,-39}, {-38,-38}, {-38,-37}, {-38,-36}, {-38,-34}, {-38,-33}, {-38,-32}, {-38,-31}, {-38,-30}, {-38,-29}, {-38,-28}, {-38,141}, {-38,142}, {-38,147}, {-38,150}, {-38,151}, {-38,152}, {-37,-121}, {-37,-120}, {-37,-119}, {-37,-118}, {-37,-115}, {-37,-114}, {-37,-88}, {-37,-87}, {-37,-83}, {-37,-71}, {-37,-70}, {-37,-67}, {-37,-59}, {-37,-58}, {-37,-55}, {-37,-54}, {-37,-51}, {-37,-46}, {-37,-45}, {-37,-44}, {-37,-43}, {-37,-38}, {-37,-37}, {-37,-36}, {-37,-34}, {-37,-33}, {-37,-32}, {-37,-31}, {-37,-30}, {-37,141}, {-37,142}, {-37,145}, {-37,146}, {-37,150}, {-37,151}, {-37,152}, {-36,-121}, {-36,-120}, {-36,-119}, {-36,-118}, {-36,-114}, {-36,-113}, {-36,-88}, {-36,-87}, {-36,-84}, {-36,-83}, {-36,-71}, {-36,-70}, {-36,-67}, {-36,-59}, {-36,-58}, {-36,-55}, {-36,-54}, {-36,-51}, {-36,-46}, {-36,-45}, {-36,-44}, {-36,-43}, {-36,-38}, {-36,-37}, {-36,-36}, {-36,-33}, {-36,-32}, {-36,-31}, {-36,141}, {-36,142}, {-36,145}, {-36,146}, {-36,149}, {-36,150}, {-36,151}, {-36,152}, {-35,-121}, {-35,-120}, {-35,-119}, {-35,-118}, {-35,-117}, {-35,-114}, {-35,-113}, {-35,-88}, {-35,-87}, {-35,-84}, {-35,-83}, {-35,-71}, {-35,-70}, {-35,-67}, {-35,-59}, {-35,-58}, {-35,-55}, {-35,-54}, {-35,-51}, {-35,-46}, {-35,-45}, {-35,-44}, {-35,-43}, {-35,-37}, {-35,-36}, {-35,-35}, {-35,-33}, {-35,-32}, {-35,141}, {-35,142}, {-35,145}, {-35,149}, {-35,150}, {-35,151}, {-35,152}, {-34,-121}, {-34,-120}, {-34,-119}, {-34,-118}, {-34,-117}, {-34,-114}, {-34,-113}, {-34,-88}, {-34,-87}, {-34,-84}, {-34,-83}, {-34,-82}, {-34,-81}, {-34,-71}, {-34,-70}, {-34,-67}, {-34,-55}, {-34,-54}, {-34,-53}, {-34,-52}, {-34,-51}, {-34,-46}, {-34,-45}, {-34,-44}, {-34,-43}, {-34,-42}, {-34,-37}, {-34,-36}, {-34,-35}, {-34,-33}, {-34,-32}, {-34,-28}, {-34,-27}, {-34,141}, {-34,142}, {-34,150}, {-34,151}, {-34,152}, {-33,-121}, {-33,-120}, {-33,-119}, {-33,-118}, {-33,-117}, {-33,-114}, {-33,-113}, {-33,-88}, {-33,-87}, {-33,-84}, {-33,-83}, {-33,-82}, {-33,-81}, {-33,-71}, {-33,-70}, {-33,-67}, {-33,-55}, {-33,-54}, {-33,-53}, {-33,-52}, {-33,-50}, {-33,-46}, {-33,-45}, {-33,-44}, {-33,-43}, {-33,-42}, {-33,-36}, {-33,-35}, {-33,-28}, {-33,-27}, {-33,140}, {-33,141}, {-33,142}, {-33,150}, {-33,151}, {-33,152}, {-32,-120}, {-32,-119}, {-32,-118}, {-32,-117}, {-32,-114}, {-32,-113}, {-32,-89}, {-32,-88}, {-32,-87}, {-32,-84}, {-32,-71}, {-32,-70}, {-32,-67}, {-32,-59}, {-32,-55}, {-32,-54}, {-32,-53}, {-32,-52}, {-32,-51}, {-32,-49}, {-32,-46}, {-32,-45}, {-32,-42}, {-32,-41}, {-32,-35}, {-32,-34}, {-32,-29}, {-32,-28}, {-32,-27}, {-32,140}, {-32,141}, {-32,142}, {-32,145}, {-32,148}, {-32,150}, {-32,151}, {-32,152}, {-31,-120}, {-31,-119}, {-31,-118}, {-31,-117}, {-31,-114}, {-31,-113}, {-31,-112}, {-31,-89}, {-31,-88}, {-31,-84}, {-31,-71}, {-31,-70}, {-31,-67}, {-31,-59}, {-31,-58}, {-31,-55}, {-31,-54}, {-31,-53}, {-31,-52}, {-31,-51}, {-31,-46}, {-31,-45}, {-31,-42}, {-31,-41}, {-31,-35}, {-31,-34}, {-31,-29}, {-31,-28}, {-31,-27}, {-31,140}, {-31,141}, {-31,142}, {-31,147}, {-31,148}, {-31,151}, {-31,152}, {-31,153}, {-31,154}, {-31,155}, {-30,-120}, {-30,-119}, {-30,-118}, {-30,-117}, {-30,-113}, {-30,-112}, {-30,-89}, {-30,-88}, {-30,-85}, {-30,-84}, {-30,-71}, {-30,-70}, {-30,-67}, {-30,-59}, {-30,-58}, {-30,-55}, {-30,-54}, {-30,-53}, {-30,-52}, {-30,-51}, {-30,-46}, {-30,-45}, {-30,-42}, {-30,-41}, {-30,-40}, {-30,-39}, {-30,-34}, {-30,-29}, {-30,-28}, {-30,-27}, {-30,140}, {-30,141}, {-30,142}, {-30,151}, {-30,152}, {-30,153}, {-30,154}, {-30,155}, {-29,-120}, {-29,-119}, {-29,-118}, {-29,-117}, {-29,-116}, {-29,-113}, {-29,-112}, {-29,-89}, {-29,-88}, {-29,-85}, {-29,-71}, {-29,-70}, {-29,-67}, {-29,-59}, {-29,-58}, {-29,-55}, {-29,-54}, {-29,-53}, {-29,-52}, {-29,-51}, {-29,-46}, {-29,-45}, {-29,-42}, {-29,-41}, {-29,-40}, {-29,-39}, {-29,-38}, {-29,-29}, {-29,-28}, {-29,-27}, {-29,140}, {-29,141}, {-29,152}, {-29,153}, {-29,154}, {-29,155}, {-28,-120}, {-28,-119}, {-28,-118}, {-28,-117}, {-28,-116}, {-28,-113}, {-28,-112}, {-28,-90}, {-28,-89}, {-28,-88}, {-28,-85}, {-28,-84}, {-28,-83}, {-28,-71}, {-28,-70}, {-28,-67}, {-28,-58}, {-28,-55}, {-28,-54}, {-28,-53}, {-28,-52}, {-28,-51}, {-28,-50}, {-28,-46}, {-28,-45}, {-28,-38}, {-28,-37}, {-28,-29}, {-28,-28}, {-28,-27}, {-28,140}, {-28,141}, {-28,147}, {-28,152}, {-28,153}, {-28,154}, {-28,155}, {-27,-120}, {-27,-119}, {-27,-118}, {-27,-117}, {-27,-116}, {-27,-113}, {-27,-112}, {-27,-90}, {-27,-89}, {-27,-85}, {-27,-84}, {-27,-71}, {-27,-70}, {-27,-67}, {-27,-55}, {-27,-54}, {-27,-53}, {-27,-52}, {-27,-51}, {-27,-50}, {-27,-46}, {-27,-45}, {-27,-38}, {-27,-37}, {-27,-36}, {-27,-29}, {-27,-28}, {-27,-27}, {-27,148}, {-27,149}, {-27,152}, {-27,153}, {-27,154}, {-27,155}, {-26,-119}, {-26,-118}, {-26,-117}, {-26,-116}, {-26,-113}, {-26,-112}, {-26,-90}, {-26,-89}, {-26,-86}, {-26,-85}, {-26,-71}, {-26,-70}, {-26,-67}, {-26,-54}, {-26,-53}, {-26,-52}, {-26,-51}, {-26,-50}, {-26,-46}, {-26,-45}, {-26,-39}, {-26,-38}, {-26,-37}, {-26,-28}, {-26,-27}, {-26,148}, {-26,149}, {-26,150}, {-26,153}, {-26,154}, {-26,155}, {-25,-119}, {-25,-118}, {-25,-117}, {-25,-116}, {-25,-113}, {-25,-90}, {-25,-89}, {-25,-86}, {-25,-85}, {-25,-71}, {-25,-70}, {-25,-67}, {-25,-59}, {-25,-58}, {-25,-54}, {-25,-53}, {-25,-52}, {-25,-51}, {-25,-46}, {-25,-45}, {-25,-39}, {-25,-38}, {-25,-37}, {-25,-28}, {-25,-27}, {-25,148}, {-25,149}, {-25,150}, {-25,153}, {-25,154}, {-25,155}, {-24,-119}, {-24,-118}, {-24,-117}, {-24,-116}, {-24,-113}, {-24,-90}, {-24,-89}, {-24,-86}, {-24,-85}, {-24,-84}, {-24,-71}, {-24,-70}, {-24,-67}, {-24,-59}, {-24,-58}, {-24,-55}, {-24,-54}, {-24,-53}, {-24,-52}, {-24,-51}, {-24,-46}, {-24,-45}, {-24,-39}, {-24,-38}, {-24,-27}, {-24,148}, {-24,149}, {-24,150}, {-24,154}, {-24,155}, {-23,-119}, {-23,-118}, {-23,-117}, {-23,-116}, {-23,-113}, {-23,-90}, {-23,-86}, {-23,-85}, {-23,-84}, {-23,-83}, {-23,-71}, {-23,-67}, {-23,-59}, {-23,-58}, {-23,-55}, {-23,-54}, {-23,-51}, {-23,-46}, {-23,-45}, {-23,-39}, {-23,-33}, {-23,149}, {-23,150}, {-23,151}, {-23,154}, {-23,155}, {-22,-119}, {-22,-118}, {-22,-117}, {-22,-116}, {-22,-113}, {-22,-90}, {-22,-86}, {-22,-85}, {-22,-71}, {-22,-67}, {-22,-59}, {-22,-58}, {-22,-55}, {-22,-54}, {-22,-46}, {-22,-45}, {-22,-40}, {-22,-39}, {-22,-34}, {-22,-33}, {-22,-32}, {-22,-25}, {-22,-24}, {-22,-23}, {-22,-22}, {-22,-21}, {-22,24}, {-22,25}, {-22,150}, {-22,151}, {-22,154}, {-22,155}, {-21,-119}, {-21,-118}, {-21,-117}, {-21,-116}, {-21,-113}, {-21,-112}, {-21,-90}, {-21,-87}, {-21,-86}, {-21,-71}, {-21,-67}, {-21,-59}, {-21,-58}, {-21,-55}, {-21,-54}, {-21,-50}, {-21,-46}, {-21,-45}, {-21,-41}, {-21,-40}, {-21,-34}, {-21,-33}, {-21,-32}, {-21,-31}, {-21,-24}, {-21,-23}, {-21,-22}, {-21,-21}, {-21,-20}, {-21,-19}, {-21,-18}, {-21,-10}, {-21,-9}, {-21,-8}, {-21,-7}, {-21,-6}, {-21,-5}, {-21,-4}, {-21,-3}, {-21,-2}, {-21,-1}, {-21,0}, {-21,1}, {-21,2}, {-21,3}, {-21,4}, {-21,11}, {-21,12}, {-21,13}, {-21,14}, {-21,15}, {-21,18}, {-21,19}, {-21,20}, {-21,21}, {-21,25}, {-21,26}, {-21,150}, {-21,151}, {-21,154}, {-21,155}, {-20,-118}, {-20,-117}, {-20,-116}, {-20,-113}, {-20,-112}, {-20,-91}, {-20,-90}, {-20,-87}, {-20,-86}, {-20,-71}, {-20,-67}, {-20,-59}, {-20,-58}, {-20,-55}, {-20,-54}, {-20,-53}, {-20,-50}, {-20,-45}, {-20,-41}, {-20,-40}, {-20,-35}, {-20,-34}, {-20,-33}, {-20,-32}, {-20,-31}, {-20,-30}, {-20,-20}, {-20,-19}, {-20,-18}, {-20,-17}, {-20,-16}, {-20,-15}, {-20,-14}, {-20,-13}, {-20,-12}, {-20,-11}, {-20,-10}, {-20,-9}, {-20,-8}, {-20,-7}, {-20,-6}, {-20,-5}, {-20,-4}, {-20,-3}, {-20,-2}, {-20,-1}, {-20,0}, {-20,1}, {-20,2}, {-20,3}, {-20,4}, {-20,5}, {-20,18}, {-20,19}, {-20,20}, {-20,21}, {-20,22}, {-20,25}, {-20,26}, {-20,150}, {-20,151}, {-20,154}, {-20,155}, {-19,-118}, {-19,-117}, {-19,-116}, {-19,-113}, {-19,-112}, {-19,-111}, {-19,-91}, {-19,-90}, {-19,-87}, {-19,-86}, {-19,-71}, {-19,-67}, {-19,-59}, {-19,-58}, {-19,-55}, {-19,-50}, {-19,-49}, {-19,-45}, {-19,-44}, {-19,-43}, {-19,-42}, {-19,-41}, {-19,-40}, {-19,-35}, {-19,-34}, {-19,-33}, {-19,-32}, {-19,-31}, {-19,-30}, {-19,-29}, {-19,-3}, {-19,-2}, {-19,-1}, {-19,0}, {-19,1}, {-19,2}, {-19,3}, {-19,4}, {-19,5}, {-19,6}, {-19,7}, {-19,17}, {-19,18}, {-19,19}, {-19,20}, {-19,21}, {-19,22}, {-19,25}, {-19,26}, {-19,150}, {-19,151}, {-19,154}, {-19,155}, {-18,-118}, {-18,-117}, {-18,-116}, {-18,-112}, {-18,-111}, {-18,-91}, {-18,-87}, {-18,-86}, {-18,-85}, {-18,-84}, {-18,-71}, {-18,-67}, {-18,-59}, {-18,-58}, {-18,-55}, {-18,-50}, {-18,-49}, {-18,-46}, {-18,-45}, {-18,-44}, {-18,-43}, {-18,-42}, {-18,-41}, {-18,-36}, {-18,-35}, {-18,-34}, {-18,-33}, {-18,-32}, {-18,-31}, {-18,-30}, {-18,-29}, {-18,-28}, {-18,3}, {-18,4}, {-18,5}, {-18,6}, {-18,7}, {-18,8}, {-18,16}, {-18,17}, {-18,18}, {-18,19}, {-18,20}, {-18,21}, {-18,22}, {-18,25}, {-18,26}, {-18,27}, {-18,150}, {-18,151}, {-18,154}, {-18,155}, {-17,-118}, {-17,-117}, {-17,-116}, {-17,-112}, {-17,-92}, {-17,-91}, {-17,-87}, {-17,-86}, {-17,-71}, {-17,-68}, {-17,-67}, {-17,-59}, {-17,-58}, {-17,-55}, {-17,-50}, {-17,-49}, {-17,-46}, {-17,-45}, {-17,-44}, {-17,-43}, {-17,-42}, {-17,-41}, {-17,-36}, {-17,-35}, {-17,-34}, {-17,-33}, {-17,-32}, {-17,-31}, {-17,-30}, {-17,-29}, {-17,-28}, {-17,-27}, {-17,-26}, {-17,-21}, {-17,-20}, {-17,-19}, {-17,-18}, {-17,-17}, {-17,-16}, {-17,-11}, {-17,-10}, {-17,-9}, {-17,-8}, {-17,-7}, {-17,16}, {-17,17}, {-17,18}, {-17,19}, {-17,20}, {-17,21}, {-17,22}, {-17,25}, {-17,26}, {-17,27}, {-17,150}, {-17,151}, {-17,154}, {-17,155}, {-16,-118}, {-16,-117}, {-16,-116}, {-16,-112}, {-16,-92}, {-16,-91}, {-16,-88}, {-16,-87}, {-16,-86}, {-16,-71}, {-16,-68}, {-16,-67}, {-16,-59}, {-16,-58}, {-16,-55}, {-16,-54}, {-16,-50}, {-16,-49}, {-16,-46}, {-16,-45}, {-16,-44}, {-16,-43}, {-16,-42}, {-16,-36}, {-16,-35}, {-16,-34}, {-16,-30}, {-16,-29}, {-16,-28}, {-16,-27}, {-16,-26}, {-16,-25}, {-16,-19}, {-16,-18}, {-16,-17}, {-16,-16}, {-16,-15}, {-16,-14}, {-16,-13}, {-16,-12}, {-16,-9}, {-16,-8}, {-16,-7}, {-16,-6}, {-16,-5}, {-16,-4}, {-16,-3}, {-16,-2}, {-16,-1}, {-16,0}, {-16,1}, {-16,17}, {-16,18}, {-16,19}, {-16,20}, {-16,21}, {-16,22}, {-16,25}, {-16,26}, {-16,27}, {-16,28}, {-16,150}, {-16,151}, {-16,154}, {-16,155}, {-15,-118}, {-15,-117}, {-15,-116}, {-15,-112}, {-15,-92}, {-15,-91}, {-15,-88}, {-15,-87}, {-15,-86}, {-15,-71}, {-15,-68}, {-15,-67}, {-15,-59}, {-15,-58}, {-15,-55}, {-15,-54}, {-15,-50}, {-15,-49}, {-15,-46}, {-15,-45}, {-15,-44}, {-15,-43}, {-15,-42}, {-15,-37}, {-15,-36}, {-15,-35}, {-15,-34}, {-15,-26}, {-15,-25}, {-15,-24}, {-15,-17}, {-15,-16}, {-15,-14}, {-15,-13}, {-15,-12}, {-15,-11}, {-15,-10}, {-15,-9}, {-15,-8}, {-15,-7}, {-15,-6}, {-15,-5}, {-15,-4}, {-15,-3}, {-15,-2}, {-15,-1}, {-15,0}, {-15,1}, {-15,2}, {-15,20}, {-15,21}, {-15,22}, {-15,26}, {-15,27}, {-15,28}, {-15,150}, {-15,151}, {-15,154}, {-15,155}, {-14,-117}, {-14,-116}, {-14,-111}, {-14,-110}, {-14,-92}, {-14,-91}, {-14,-88}, {-14,-87}, {-14,-86}, {-14,-71}, {-14,-68}, {-14,-67}, {-14,-59}, {-14,-58}, {-14,-55}, {-14,-54}, {-14,-53}, {-14,-50}, {-14,-49}, {-14,-46}, {-14,-45}, {-14,-44}, {-14,-43}, {-14,-42}, {-14,-38}, {-14,-37}, {-14,-36}, {-14,-35}, {-14,-25}, {-14,-24}, {-14,-23}, {-14,-22}, {-14,-14}, {-14,-13}, {-14,-12}, {-14,-11}, {-14,-10}, {-14,-9}, {-14,-8}, {-14,-7}, {-14,-6}, {-14,-5}, {-14,-4}, {-14,-3}, {-14,-2}, {-14,-1}, {-14,0}, {-14,7}, {-14,8}, {-14,9}, {-14,11}, {-14,12}, {-14,22}, {-14,26}, {-14,27}, {-14,28}, {-14,29}, {-14,151}, {-14,154}, {-14,155}, {-13,-117}, {-13,-116}, {-13,-115}, {-13,-111}, {-13,-110}, {-13,-109}, {-13,-92}, {-13,-91}, {-13,-88}, {-13,-87}, {-13,-86}, {-13,-85}, {-13,-84}, {-13,-71}, {-13,-68}, {-13,-67}, {-13,-59}, {-13,-58}, {-13,-54}, {-13,-53}, {-13,-50}, {-13,-49}, {-13,-46}, {-13,-45}, {-13,-44}, {-13,-43}, {-13,-38}, {-13,-37}, {-13,-36}, {-13,-24}, {-13,-23}, {-13,-22}, {-13,-14}, {-13,-13}, {-13,-12}, {-13,-11}, {-13,-10}, {-13,-9}, {-13,-8}, {-13,-7}, {-13,-6}, {-13,-5}, {-13,-4}, {-13,-3}, {-13,-2}, {-13,-1}, {-13,5}, {-13,6}, {-13,7}, {-13,8}, {-13,9}, {-13,10}, {-13,11}, {-13,12}, {-13,13}, {-13,14}, {-13,27}, {-13,28}, {-13,29}, {-13,30}, {-13,151}, {-13,154}, {-13,155}, {-12,-117}, {-12,-116}, {-12,-115}, {-12,-110}, {-12,-109}, {-12,-108}, {-12,-107}, {-12,-92}, {-12,-91}, {-12,-88}, {-12,-87}, {-12,-85}, {-12,-84}, {-12,-71}, {-12,-68}, {-12,-67}, {-12,-59}, {-12,-58}, {-12,-54}, {-12,-53}, {-12,-50}, {-12,-49}, {-12,-46}, {-12,-45}, {-12,-44}, {-12,-43}, {-12,-39}, {-12,-38}, {-12,-37}, {-12,-36}, {-12,-27}, {-12,-20}, {-12,-19}, {-12,-11}, {-12,-10}, {-12,-9}, {-12,-8}, {-12,-7}, {-12,-6}, {-12,-5}, {-12,-4}, {-12,4}, {-12,5}, {-12,6}, {-12,7}, {-12,8}, {-12,9}, {-12,10}, {-12,11}, {-12,12}, {-12,13}, {-12,14}, {-12,15}, {-12,28}, {-12,29}, {-12,30}, {-12,151}, {-12,154}, {-12,155}, {-11,-117}, {-11,-116}, {-11,-115}, {-11,-109}, {-11,-108}, {-11,-107}, {-11,-92}, {-11,-91}, {-11,-88}, {-11,-87}, {-11,-71}, {-11,-68}, {-11,-67}, {-11,-59}, {-11,-58}, {-11,-54}, {-11,-53}, {-11,-52}, {-11,-51}, {-11,-50}, {-11,-46}, {-11,-45}, {-11,-44}, {-11,-39}, {-11,-38}, {-11,-37}, {-11,-36}, {-11,-27}, {-11,-20}, {-11,-19}, {-11,-18}, {-11,-17}, {-11,-8}, {-11,-7}, {-11,-6}, {-11,3}, {-11,4}, {-11,5}, {-11,6}, {-11,7}, {-11,8}, {-11,9}, {-11,10}, {-11,11}, {-11,12}, {-11,13}, {-11,14}, {-11,15}, {-11,16}, {-11,17}, {-11,151}, {-11,154}, {-11,155}, {-10,-117}, {-10,-116}, {-10,-115}, {-10,-108}, {-10,-107}, {-10,-106}, {-10,-105}, {-10,-92}, {-10,-88}, {-10,-87}, {-10,-71}, {-10,-68}, {-10,-67}, {-10,-59}, {-10,-58}, {-10,-54}, {-10,-53}, {-10,-52}, {-10,-51}, {-10,-50}, {-10,-46}, {-10,-45}, {-10,-44}, {-10,-39}, {-10,-38}, {-10,-37}, {-10,-36}, {-10,-21}, {-10,-20}, {-10,-19}, {-10,-18}, {-10,-17}, {-10,-16}, {-10,-15}, {-10,-14}, {-10,1}, {-10,2}, {-10,3}, {-10,4}, {-10,5}, {-10,6}, {-10,7}, {-10,8}, {-10,14}, {-10,15}, {-10,16}, {-10,17}, {-10,18}, {-10,19}, {-10,151}, {-10,154}, {-10,155}, {-9,-117}, {-9,-116}, {-9,-115}, {-9,-112}, {-9,-107}, {-9,-106}, {-9,-105}, {-9,-104}, {-9,-103}, {-9,-88}, {-9,-87}, {-9,-71}, {-9,-68}, {-9,-67}, {-9,-59}, {-9,-58}, {-9,-54}, {-9,-53}, {-9,-52}, {-9,-51}, {-9,-50}, {-9,-47}, {-9,-46}, {-9,-45}, {-9,-44}, {-9,-40}, {-9,-39}, {-9,-38}, {-9,-21}, {-9,-20}, {-9,-19}, {-9,-18}, {-9,-17}, {-9,-13}, {-9,-12}, {-9,151}, {-9,154}, {-9,155}, {-8,-116}, {-8,-115}, {-8,-112}, {-8,-111}, {-8,-105}, {-8,-104}, {-8,-103}, {-8,-102}, {-8,-94}, {-8,-93}, {-8,-89}, {-8,-88}, {-8,-87}, {-8,-86}, {-8,-85}, {-8,-71}, {-8,-68}, {-8,-67}, {-8,-59}, {-8,-58}, {-8,-54}, {-8,-53}, {-8,-52}, {-8,-51}, {-8,-50}, {-8,-47}, {-8,-46}, {-8,-45}, {-8,-41}, {-8,-40}, {-8,-39}, {-8,-38}, {-8,-27}, {-8,-26}, {-8,-25}, {-8,-24}, {-8,-23}, {-8,-22}, {-8,-21}, {-8,-20}, {-8,-17}, {-8,-16}, {-8,-15}, {-8,-13}, {-8,-12}, {-8,151}, {-8,154}, {-8,155}, {-7,-116}, {-7,-115}, {-7,-112}, {-7,-111}, {-7,-110}, {-7,-109}, {-7,-104}, {-7,-103}, {-7,-102}, {-7,-101}, {-7,-100}, {-7,-99}, {-7,-94}, {-7,-93}, {-7,-89}, {-7,-88}, {-7,-87}, {-7,-71}, {-7,-68}, {-7,-67}, {-7,-59}, {-7,-58}, {-7,-53}, {-7,-52}, {-7,-51}, {-7,-50}, {-7,-46}, {-7,-45}, {-7,-41}, {-7,-40}, {-7,-39}, {-7,-38}, {-7,-28}, {-7,-27}, {-7,-26}, {-7,-25}, {-7,-24}, {-7,-23}, {-7,-21}, {-7,151}, {-7,154}, {-7,155}, {-6,-116}, {-6,-115}, {-6,-112}, {-6,-111}, {-6,-110}, {-6,-109}, {-6,-108}, {-6,-102}, {-6,-101}, {-6,-100}, {-6,-99}, {-6,-98}, {-6,-94}, {-6,-89}, {-6,-88}, {-6,-71}, {-6,-68}, {-6,-67}, {-6,-59}, {-6,-58}, {-6,-53}, {-6,-52}, {-6,-51}, {-6,-50}, {-6,-46}, {-6,-42}, {-6,-41}, {-6,-40}, {-6,-39}, {-6,-38}, {-6,-32}, {-6,-31}, {-6,-30}, {-6,-29}, {-6,-28}, {-6,-27}, {-6,-26}, {-6,-25}, {-6,-3}, {-6,-2}, {-6,-1}, {-6,23}, {-6,24}, {-6,25}, {-6,26}, {-6,151}, {-6,154}, {-6,155}, {-5,-116}, {-5,-115}, {-5,-112}, {-5,-108}, {-5,-107}, {-5,-106}, {-5,-100}, {-5,-99}, {-5,-98}, {-5,-97}, {-5,-96}, {-5,-95}, {-5,-94}, {-5,-89}, {-5,-88}, {-5,-71}, {-5,-68}, {-5,-67}, {-5,-59}, {-5,-58}, {-5,-53}, {-5,-52}, {-5,-46}, {-5,-42}, {-5,-41}, {-5,-40}, {-5,-39}, {-5,-38}, {-5,-34}, {-5,-33}, {-5,-32}, {-5,-31}, {-5,-30}, {-5,-29}, {-5,-28}, {-5,-7}, {-5,-6}, {-5,-5}, {-5,-4}, {-5,-3}, {-5,-2}, {-5,-1}, {-5,0}, {-5,1}, {-5,2}, {-5,3}, {-5,5}, {-5,6}, {-5,7}, {-5,9}, {-5,20}, {-5,22}, {-5,23}, {-5,24}, {-5,25}, {-5,26}, {-5,27}, {-5,28}, {-5,29}, {-5,30}, {-5,150}, {-5,151}, {-5,154}, {-5,155}, {-4,-116}, {-4,-115}, {-4,-112}, {-4,-106}, {-4,-105}, {-4,-99}, {-4,-98}, {-4,-97}, {-4,-96}, {-4,-95}, {-4,-94}, {-4,-89}, {-4,-88}, {-4,-87}, {-4,-86}, {-4,-71}, {-4,-68}, {-4,-67}, {-4,-59}, {-4,-53}, {-4,-52}, {-4,-43}, {-4,-42}, {-4,-41}, {-4,-40}, {-4,-39}, {-4,-38}, {-4,-37}, {-4,-36}, {-4,-35}, {-4,-34}, {-4,-33}, {-4,-32}, {-4,-10}, {-4,-9}, {-4,-8}, {-4,-7}, {-4,-6}, {-4,-5}, {-4,-4}, {-4,-3}, {-4,-2}, {-4,-1}, {-4,0}, {-4,1}, {-4,2}, {-4,3}, {-4,9}, {-4,10}, {-4,11}, {-4,12}, {-4,13}, {-4,14}, {-4,15}, {-4,16}, {-4,17}, {-4,18}, {-4,19}, {-4,20}, {-4,21}, {-4,22}, {-4,23}, {-4,24}, {-4,25}, {-4,26}, {-4,27}, {-4,29}, {-4,150}, {-4,154}, {-4,155}, {-3,-116}, {-3,-115}, {-3,-112}, {-3,-111}, {-3,-106}, {-3,-105}, {-3,-104}, {-3,-103}, {-3,-97}, {-3,-96}, {-3,-95}, {-3,-94}, {-3,-93}, {-3,-89}, {-3,-88}, {-3,-87}, {-3,-86}, {-3,-71}, {-3,-68}, {-3,-67}, {-3,-59}, {-3,-53}, {-3,-52}, {-3,-43}, {-3,-42}, {-3,-41}, {-3,-40}, {-3,-39}, {-3,-38}, {-3,-37}, {-3,-15}, {-3,-14}, {-3,-13}, {-3,-12}, {-3,-11}, {-3,-10}, {-3,-9}, {-3,-8}, {-3,-7}, {-3,-6}, {-3,-5}, {-3,-4}, {-3,-3}, {-3,-2}, {-3,-1}, {-3,0}, {-3,1}, {-3,2}, {-3,3}, {-3,4}, {-3,5}, {-3,6}, {-3,7}, {-3,8}, {-3,9}, {-3,10}, {-3,11}, {-3,12}, {-3,13}, {-3,14}, {-3,15}, {-3,16}, {-3,17}, {-3,18}, {-3,19}, {-3,20}, {-3,21}, {-3,22}, {-3,23}, {-3,24}, {-3,25}, {-3,26}, {-3,27}, {-3,29}, {-3,150}, {-3,154}, {-3,155}, {-2,-115}, {-2,-112}, {-2,-111}, {-2,-103}, {-2,-102}, {-2,-95}, {-2,-94}, {-2,-93}, {-2,-89}, {-2,-88}, {-2,-71}, {-2,-68}, {-2,-67}, {-2,-59}, {-2,-56}, {-2,-52}, {-2,-44}, {-2,-43}, {-2,-42}, {-2,-41}, {-2,-40}, {-2,-39}, {-2,-36}, {-2,-16}, {-2,-15}, {-2,-14}, {-2,-13}, {-2,-12}, {-2,-11}, {-2,-10}, {-2,-9}, {-2,-8}, {-2,-7}, {-2,-6}, {-2,-5}, {-2,-4}, {-2,-3}, {-2,-2}, {-2,-1}, {-2,0}, {-2,1}, {-2,2}, {-2,3}, {-2,4}, {-2,5}, {-2,6}, {-2,7}, {-2,8}, {-2,9}, {-2,10}, {-2,11}, {-2,12}, {-2,13}, {-2,14}, {-2,15}, {-2,16}, {-2,17}, {-2,18}, {-2,19}, {-2,20}, {-2,21}, {-2,22}, {-2,23}, {-2,24}, {-2,150}, {-2,153}, {-2,154}, {-2,155}, {-1,-115}, {-1,-112}, {-1,-111}, {-1,-110}, {-1,-102}, {-1,-101}, {-1,-100}, {-1,-94}, {-1,-93}, {-1,-89}, {-1,-88}, {-1,-71}, {-1,-68}, {-1,-67}, {-1,-59}, {-1,-56}, {-1,-52}, {-1,-44}, {-1,-43}, {-1,-42}, {-1,-41}, {-1,-40}, {-1,-39}, {-1,-19}, {-1,-18}, {-1,-17}, {-1,-16}, {-1,-15}, {-1,-14}, {-1,-13}, {-1,-12}, {-1,-11}, {-1,-10}, {-1,-9}, {-1,-8}, {-1,-7}, {-1,-6}, {-1,-5}, {-1,-4}, {-1,-3}, {-1,-2}, {-1,2}, {-1,3}, {-1,4}, {-1,5}, {-1,6}, {-1,7}, {-1,8}, {-1,9}, {-1,10}, {-1,11}, {-1,12}, {-1,13}, {-1,14}, {-1,15}, {-1,16}, {-1,17}, {-1,18}, {-1,19}, {-1,20}, {-1,21}, {-1,22}, {-1,26}, {-1,149}, {-1,150}, {-1,153}, {-1,154}, {-1,155}, {0,-115}, {0,-111}, {0,-110}, {0,-100}, {0,-99}, {0,-98}, {0,-89}, {0,-88}, {0,-71}, {0,-68}, {0,-67}, {0,-59}, {0,-56}, {0,-52}, {0,-45}, {0,-44}, {0,-43}, {0,-42}, {0,-22}, {0,-21}, {0,-20}, {0,-19}, {0,-18}, {0,-17}, {0,-16}, {0,-15}, {0,-14}, {0,-13}, {0,-12}, {0,-11}, {0,-10}, {0,-9}, {0,-8}, {0,-7}, {0,-6}, {0,-5}, {0,-4}, {0,-3}, {0,-2}, {0,2}, {0,3}, {0,4}, {0,5}, {0,6}, {0,7}, {0,8}, {0,9}, {0,10}, {0,11}, {0,12}, {0,13}, {0,14}, {0,15}, {0,16}, {0,17}, {0,18}, {0,19}, {0,149}, {0,150}, {0,153}, {0,154}, {0,155}, {1,-115}, {1,-111}, {1,-110}, {1,-98}, {1,-97}, {1,-89}, {1,-88}, {1,-87}, {1,-86}, {1,-71}, {1,-68}, {1,-67}, {1,-59}, {1,-56}, {1,-55}, {1,-23}, {1,-22}, {1,-21}, {1,-20}, {1,-19}, {1,-18}, {1,-17}, {1,-16}, {1,-15}, {1,-14}, {1,-13}, {1,-12}, {1,-11}, {1,-10}, {1,-9}, {1,-8}, {1,-7}, {1,-6}, {1,-5}, {1,-4}, {1,-3}, {1,-2}, {1,2}, {1,3}, {1,4}, {1,5}, {1,6}, {1,7}, {1,8}, {1,9}, {1,10}, {1,11}, {1,12}, {1,13}, {1,14}, {1,15}, {1,16}, {1,17}, {1,149}, {1,150}, {1,153}, {1,154}, {1,155}, {2,-115}, {2,-114}, {2,-111}, {2,-110}, {2,-97}, {2,-96}, {2,-95}, {2,-89}, {2,-88}, {2,-87}, {2,-86}, {2,-71}, {2,-67}, {2,-59}, {2,-56}, {2,-26}, {2,-25}, {2,-24}, {2,-23}, {2,-22}, {2,-21}, {2,-20}, {2,-19}, {2,-18}, {2,-17}, {2,-16}, {2,-15}, {2,-14}, {2,-13}, {2,-12}, {2,-11}, {2,-10}, {2,-9}, {2,-8}, {2,-7}, {2,-6}, {2,-5}, {2,-4}, {2,-3}, {2,-2}, {2,-1}, {2,0}, {2,1}, {2,2}, {2,3}, {2,4}, {2,5}, {2,6}, {2,7}, {2,149}, {2,153}, {2,154}, {2,155}, {3,-115}, {3,-114}, {3,-111}, {3,-110}, {3,-97}, {3,-96}, {3,-95}, {3,-94}, {3,-90}, {3,-89}, {3,-88}, {3,-71}, {3,-67}, {3,-55}, {3,-27}, {3,-26}, {3,-25}, {3,-24}, {3,-23}, {3,-22}, {3,-21}, {3,-20}, {3,-19}, {3,-18}, {3,-6}, {3,-5}, {3,-4}, {3,-3}, {3,-2}, {3,-1}, {3,0}, {3,3}, {3,4}, {3,5}, {3,6}, {3,148}, {3,149}, {3,153}, {3,154}, {3,155}, {4,-114}, {4,-111}, {4,-110}, {4,-96}, {4,-95}, {4,-94}, {4,-93}, {4,-90}, {4,-89}, {4,-88}, {4,-71}, {4,-67}, {4,-44}, {4,-40}, {4,-39}, {4,-38}, {4,-37}, {4,-32}, {4,-30}, {4,-29}, {4,-28}, {4,-27}, {4,-26}, {4,-25}, {4,-24}, {4,-23}, {4,-22}, {4,-21}, {4,-20}, {4,-19}, {4,3}, {4,4}, {4,5}, {4,148}, {4,149}, {4,152}, {4,153}, {4,154}, {4,155}, {5,-114}, {5,-111}, {5,-110}, {5,-95}, {5,-94}, {5,-93}, {5,-89}, {5,-88}, {5,-71}, {5,-67}, {5,-42}, {5,-41}, {5,-40}, {5,-39}, {5,-33}, {5,-31}, {5,-30}, {5,-29}, {5,-28}, {5,-27}, {5,-26}, {5,-25}, {5,-24}, {5,-23}, {5,-22}, {5,-21}, {5,148}, {5,152}, {5,153}, {5,154}, {5,155}, {6,-114}, {6,-110}, {6,-95}, {6,-94}, {6,-93}, {6,-89}, {6,-88}, {6,-87}, {6,-86}, {6,-71}, {6,-67}, {6,-45}, {6,-42}, {6,-41}, {6,-40}, {6,-36}, {6,-34}, {6,-33}, {6,-32}, {6,-31}, {6,-30}, {6,-29}, {6,-28}, {6,-27}, {6,-26}, {6,-25}, {6,-24}, {6,148}, {6,152}, {6,153}, {6,154}, {6,155}, {7,-114}, {7,-94}, {7,-93}, {7,-89}, {7,-88}, {7,-87}, {7,-86}, {7,-71}, {7,-70}, {7,-67}, {7,-47}, {7,-46}, {7,-45}, {7,-41}, {7,-36}, {7,-35}, {7,-34}, {7,-33}, {7,-32}, {7,-31}, {7,-30}, {7,-29}, {7,-28}, {7,-27}, {7,148}, {7,152}, {7,153}, {7,154}, {7,155}, {8,-114}, {8,-113}, {8,-105}, {8,-104}, {8,-103}, {8,-102}, {8,-93}, {8,-89}, {8,-88}, {8,-71}, {8,-70}, {8,-67}, {8,-48}, {8,-47}, {8,-46}, {8,-45}, {8,-44}, {8,-38}, {8,-37}, {8,-36}, {8,-35}, {8,-34}, {8,-33}, {8,-32}, {8,-31}, {8,148}, {8,151}, {8,152}, {8,153}, {8,154}, {8,155}, {9,-114}, {9,-113}, {9,-112}, {9,-104}, {9,-103}, {9,-102}, {9,-101}, {9,-93}, {9,-89}, {9,-88}, {9,-71}, {9,-70}, {9,-67}, {9,-49}, {9,-48}, {9,-47}, {9,-46}, {9,-45}, {9,-44}, {9,-40}, {9,-39}, {9,-38}, {9,-37}, {9,-36}, {9,148}, {9,151}, {9,152}, {10,-114}, {10,-113}, {10,-112}, {10,-111}, {10,-110}, {10,-109}, {10,-108}, {10,-103}, {10,-102}, {10,-101}, {10,-100}, {10,-93}, {10,-92}, {10,-88}, {10,-71}, {10,-70}, {10,-67}, {10,147}, {10,148}, {10,151}, {10,152}, {11,-108}, {11,-107}, {11,-103}, {11,-102}, {11,-101}, {11,-100}, {11,-94}, {11,-93}, {11,-92}, {11,-91}, {11,-88}, {11,-71}, {11,-70}, {11,-67}, {11,147}, {11,148}, {11,151}, {11,152}, {12,-108}, {12,-107}, {12,-106}, {12,-102}, {12,-101}, {12,-100}, {12,-93}, {12,-92}, {12,-91}, {12,-88}, {12,-87}, {12,-86}, {12,-85}, {12,-71}, {12,-70}, {12,-67}, {12,145}, {12,146}, {12,147}, {12,151}, {12,152}, {13,-108}, {13,-107}, {13,-106}, {13,-102}, {13,-101}, {13,-100}, {13,-93}, {13,-92}, {13,-91}, {13,-88}, {13,-87}, {13,-86}, {13,-85}, {13,-71}, {13,-70}, {13,-67}, {13,145}, {13,146}, {13,147}, {13,151}, {13,152}, {14,-108}, {14,-107}, {14,-106}, {14,-105}, {14,-102}, {14,-101}, {14,-100}, {14,-93}, {14,-92}, {14,-91}, {14,-88}, {14,-87}, {14,-71}, {14,-70}, {14,-67}, {14,145}, {14,146}, {14,147}, {14,151}, {14,152}, {15,-108}, {15,-107}, {15,-106}, {15,-105}, {15,-102}, {15,-101}, {15,-100}, {15,-99}, {15,-98}, {15,-92}, {15,-91}, {15,-88}, {15,-71}, {15,-67}, {15,144}, {15,145}, {15,146}, {15,147}, {15,151}, {15,152}, {16,-108}, {16,-107}, {16,-106}, {16,-105}, {16,-102}, {16,-101}, {16,-100}, {16,-99}, {16,-98}, {16,-92}, {16,-91}, {16,-88}, {16,-71}, {16,143}, {16,144}, {16,145}, {16,146}, {16,147}, {16,151}, {16,152}, {17,-107}, {17,-106}, {17,-105}, {17,-101}, {17,-100}, {17,-99}, {17,-98}, {17,-91}, {17,-87}, {17,-85}, {17,-71}, {17,-65}, {17,-64}, {17,-63}, {17,-62}, {17,-61}, {17,-60}, {17,-59}, {17,-58}, {17,-57}, {17,-56}, {17,-55}, {17,-54}, {17,-53}, {17,-13}, {17,-12}, {17,143}, {17,144}, {17,145}, {17,146}, {17,151}, {17,152}, {18,-107}, {18,-106}, {18,-105}, {18,-101}, {18,-100}, {18,-99}, {18,-98}, {18,-97}, {18,-96}, {18,-91}, {18,-87}, {18,-85}, {18,-72}, {18,-71}, {18,-68}, {18,-12}, {18,-11}, {18,143}, {18,144}, {18,145}, {18,146}, {18,151}, {18,152}, {19,-107}, {19,-106}, {19,-105}, {19,-104}, {19,-101}, {19,-100}, {19,-99}, {19,-98}, {19,-97}, {19,-96}, {19,-91}, {19,-90}, {19,-87}, {19,-85}, {19,-72}, {19,-71}, {19,-11}, {19,-10}, {19,143}, {19,144}, {19,145}, {19,146}, {19,150}, {19,151}, {19,152}, {20,-107}, {20,-106}, {20,-105}, {20,-104}, {20,-101}, {20,-100}, {20,-99}, {20,-98}, {20,-97}, {20,-96}, {20,-91}, {20,-90}, {20,-87}, {20,-72}, {20,-71}, {20,-65}, {20,-64}, {20,-63}, {20,-62}, {20,-61}, {20,-60}, {20,-59}, {20,-58}, {20,-57}, {20,-56}, {20,-55}, {20,-54}, {20,-53}, {20,-52}, {20,-51}, {20,-50}, {20,-49}, {20,-48}, {20,-47}, {20,-46}, {20,-45}, {20,-44}, {20,-43}, {20,-24}, {20,-23}, {20,-22}, {20,-21}, {20,-20}, {20,-19}, {20,-10}, {20,-9}, {20,143}, {20,144}, {20,145}, {20,146}, {20,150}, {20,151}, {20,152}, {21,-107}, {21,-106}, {21,-105}, {21,-104}, {21,-101}, {21,-100}, {21,-99}, {21,-98}, {21,-97}, {21,-96}, {21,-91}, {21,-90}, {21,-73}, {21,-72}, {21,-71}, {21,-67}, {21,-42}, {21,-37}, {21,-36}, {21,-35}, {21,-34}, {21,-33}, {21,-32}, {21,-31}, {21,-30}, {21,-29}, {21,-28}, {21,-27}, {21,-26}, {21,-25}, {21,-24}, {21,-23}, {21,-22}, {21,-21}, {21,-20}, {21,-19}, {21,-18}, {21,-17}, {21,-16}, {21,-15}, {21,143}, {21,144}, {21,145}, {21,150}, {21,151}, {21,152}, {22,-107}, {22,-106}, {22,-105}, {22,-104}, {22,-101}, {22,-100}, {22,-99}, {22,-98}, {22,-97}, {22,-96}, {22,-95}, {22,-94}, {22,-93}, {22,-92}, {22,-91}, {22,-90}, {22,-86}, {22,-73}, {22,-72}, {22,-71}, {22,-68}, {22,-67}, {22,-37}, {22,-36}, {22,-35}, {22,-34}, {22,-33}, {22,-32}, {22,-31}, {22,-25}, {22,-24}, {22,-23}, {22,-19}, {22,-18}, {22,-17}, {22,-16}, {22,-15}, {22,-14}, {22,-13}, {22,143}, {22,144}, {22,145}, {22,150}, {22,151}, {22,152}, {23,-106}, {23,-105}, {23,-104}, {23,-100}, {23,-99}, {23,-98}, {23,-97}, {23,-96}, {23,-95}, {23,-94}, {23,-93}, {23,-92}, {23,-91}, {23,-90}, {23,-86}, {23,-73}, {23,-72}, {23,-71}, {23,-68}, {23,-37}, {23,-36}, {23,-35}, {23,-34}, {23,-33}, {23,-19}, {23,-18}, {23,-17}, {23,-16}, {23,-15}, {23,-14}, {23,-13}, {23,-12}, {23,143}, {23,144}, {23,150}, {23,151}, {23,152}, {24,-106}, {24,-105}, {24,-104}, {24,-103}, {24,-100}, {24,-99}, {24,-98}, {24,-95}, {24,-94}, {24,-93}, {24,-92}, {24,-91}, {24,-90}, {24,-86}, {24,-74}, {24,-73}, {24,-72}, {24,-68}, {24,-36}, {24,-35}, {24,-34}, {24,-33}, {24,-16}, {24,-15}, {24,-14}, {24,-13}, {24,-12}, {24,-11}, {24,143}, {24,144}, {24,150}, {24,151}, {24,152}, {25,-106}, {25,-105}, {25,-104}, {25,-103}, {25,-100}, {25,-99}, {25,-98}, {25,-92}, {25,-91}, {25,-90}, {25,-86}, {25,-74}, {25,-73}, {25,-72}, {25,-69}, {25,-36}, {25,-35}, {25,-34}, {25,-33}, {25,-14}, {25,-13}, {25,-11}, {25,-10}, {25,142}, {25,143}, {25,149}, {25,150}, {25,151}, {25,152}, {26,-106}, {26,-105}, {26,-104}, {26,-103}, {26,-100}, {26,-99}, {26,-98}, {26,-92}, {26,-91}, {26,-86}, {26,-85}, {26,-74}, {26,-73}, {26,-72}, {26,-69}, {26,-35}, {26,-34}, {26,-33}, {26,-15}, {26,-14}, {26,-13}, {26,-11}, {26,-10}, {26,-9}, {26,-8}, {26,141}, {26,142}, {26,143}, {26,149}, {26,150}, {26,151}, {26,152}, {27,-106}, {27,-105}, {27,-104}, {27,-103}, {27,-100}, {27,-99}, {27,-98}, {27,-93}, {27,-92}, {27,-91}, {27,-85}, {27,-73}, {27,-72}, {27,-69}, {27,-35}, {27,-34}, {27,-33}, {27,-15}, {27,-14}, {27,-13}, {27,-12}, {27,-11}, {27,-10}, {27,-9}, {27,-8}, {27,140}, {27,141}, {27,142}, {27,147}, {27,149}, {27,150}, {27,151}, {27,152}, {28,-106}, {28,-105}, {28,-104}, {28,-103}, {28,-100}, {28,-99}, {28,-98}, {28,-93}, {28,-92}, {28,-91}, {28,-85}, {28,-73}, {28,-72}, {28,-69}, {28,-38}, {28,-35}, {28,-34}, {28,-33}, {28,-16}, {28,-15}, {28,-14}, {28,-12}, {28,-11}, {28,-10}, {28,-9}, {28,-8}, {28,140}, {28,141}, {28,146}, {28,147}, {28,149}, {28,150}, {28,151}, {28,152}, {29,-105}, {29,-104}, {29,-103}, {29,-100}, {29,-99}, {29,-98}, {29,-93}, {29,-92}, {29,-91}, {29,-85}, {29,-73}, {29,-72}, {29,-69}, {29,-38}, {29,-34}, {29,-33}, {29,-32}, {29,-22}, {29,-17}, {29,-16}, {29,-15}, {29,-14}, {29,-13}, {29,-12}, {29,-11}, {29,-10}, {29,-9}, {29,-8}, {29,54}, {29,55}, {29,56}, {29,57}, {29,58}, {29,59}, {29,60}, {29,61}, {29,62}, {29,63}, {29,64}, {29,65}, {29,66}, {29,72}, {29,73}, {29,74}, {29,75}, {29,76}, {29,77}, {29,82}, {29,83}, {29,84}, {29,85}, {29,86}, {29,87}, {29,88}, {29,89}, {29,90}, {29,91}, {29,92}, {29,93}, {29,94}, {29,95}, {29,96}, {29,97}, {29,98}, {29,99}, {29,100}, {29,101}, {29,102}, {29,103}, {29,104}, {29,105}, {29,106}, {29,107}, {29,108}, {29,109}, {29,110}, {29,111}, {29,112}, {29,113}, {29,114}, {29,115}, {29,116}, {29,117}, {29,118}, {29,119}, {29,120}, {29,121}, {29,122}, {29,123}, {29,124}, {29,125}, {29,126}, {29,127}, {29,128}, {29,129}, {29,130}, {29,131}, {29,132}, {29,133}, {29,134}, {29,135}, {29,136}, {29,137}, {29,138}, {29,139}, {29,140}, {29,145}, {29,146}, {29,147}, {29,149}, {29,150}, {29,151}, {29,152}, {30,-105}, {30,-104}, {30,-103}, {30,-99}, {30,-98}, {30,-93}, {30,-92}, {30,-91}, {30,-85}, {30,-84}, {30,-73}, {30,-72}, {30,-69}, {30,-38}, {30,-34}, {30,-33}, {30,-32}, {30,-31}, {30,-23}, {30,-22}, {30,-21}, {30,-20}, {30,-19}, {30,-18}, {30,-17}, {30,-16}, {30,-15}, {30,-14}, {30,-13}, {30,-12}, {30,-11}, {30,-10}, {30,53}, {30,54}, {30,55}, {30,56}, {30,57}, {30,75}, {30,76}, {30,77}, {30,78}, {30,79}, {30,80}, {30,81}, {30,82}, {30,83}, {30,84}, {30,85}, {30,86}, {30,87}, {30,88}, {30,102}, {30,103}, {30,104}, {30,105}, {30,106}, {30,107}, {30,108}, {30,109}, {30,110}, {30,111}, {30,112}, {30,113}, {30,114}, {30,115}, {30,116}, {30,117}, {30,118}, {30,119}, {30,120}, {30,121}, {30,122}, {30,123}, {30,124}, {30,125}, {30,126}, {30,144}, {30,145}, {30,146}, {30,147}, {30,149}, {30,150}, {30,151}, {30,152}, {31,-105}, {31,-104}, {31,-103}, {31,-99}, {31,-98}, {31,-93}, {31,-92}, {31,-85}, {31,-84}, {31,-73}, {31,-72}, {31,-69}, {31,-68}, {31,-38}, {31,-37}, {31,-33}, {31,-32}, {31,-31}, {31,-30}, {31,-29}, {31,-28}, {31,-27}, {31,-24}, {31,-23}, {31,-22}, {31,-21}, {31,-20}, {31,-19}, {31,-18}, {31,-17}, {31,-16}, {31,-15}, {31,-14}, {31,-13}, {31,53}, {31,54}, {31,55}, {31,145}, {31,146}, {31,149}, {31,150}, {31,151}, {31,152}, {32,-105}, {32,-104}, {32,-103}, {32,-102}, {32,-99}, {32,-98}, {32,-93}, {32,-92}, {32,-85}, {32,-84}, {32,-73}, {32,-72}, {32,-69}, {32,-68}, {32,-38}, {32,-37}, {32,-33}, {32,-32}, {32,-31}, {32,-30}, {32,-29}, {32,-28}, {32,-27}, {32,-26}, {32,-25}, {32,-24}, {32,-23}, {32,-22}, {32,-21}, {32,-20}, {32,-19}, {32,-18}, {32,-17}, {32,-16}, {32,-15}, {32,52}, {32,53}, {32,60}, {32,61}, {32,62}, {32,63}, {32,64}, {32,65}, {32,66}, {32,67}, {32,68}, {32,69}, {32,70}, {32,71}, {32,72}, {32,73}, {32,91}, {32,92}, {32,93}, {32,94}, {32,95}, {32,96}, {32,97}, {32,98}, {32,99}, {32,129}, {32,130}, {32,131}, {32,132}, {32,133}, {32,134}, {32,135}, {32,150}, {32,151}, {32,152}, {33,-105}, {33,-104}, {33,-103}, {33,-102}, {33,-99}, {33,-98}, {33,-93}, {33,-92}, {33,-89}, {33,-88}, {33,-85}, {33,-84}, {33,-83}, {33,-74}, {33,-73}, {33,-72}, {33,-68}, {33,-39}, {33,-38}, {33,-37}, {33,-36}, {33,-33}, {33,-32}, {33,-31}, {33,-30}, {33,-29}, {33,-28}, {33,-27}, {33,-26}, {33,-25}, {33,-24}, {33,-23}, {33,-22}, {33,-21}, {33,-20}, {33,-17}, {33,-10}, {33,-9}, {33,52}, {33,58}, {33,59}, {33,60}, {33,61}, {33,72}, {33,73}, {33,74}, {33,75}, {33,76}, {33,77}, {33,78}, {33,79}, {33,80}, {33,81}, {33,82}, {33,83}, {33,84}, {33,85}, {33,86}, {33,87}, {33,88}, {33,89}, {33,90}, {33,91}, {33,92}, {33,93}, {33,94}, {33,95}, {33,96}, {33,97}, {33,98}, {33,99}, {33,100}, {33,101}, {33,102}, {33,103}, {33,104}, {33,105}, {33,106}, {33,107}, {33,108}, {33,109}, {33,110}, {33,111}, {33,112}, {33,113}, {33,114}, {33,115}, {33,116}, {33,117}, {33,118}, {33,119}, {33,120}, {33,121}, {33,122}, {33,123}, {33,124}, {33,125}, {33,126}, {33,127}, {33,128}, {33,129}, {33,130}, {33,131}, {33,132}, {33,133}, {33,134}, {33,135}, {33,136}, {33,137}, {33,138}, {33,139}, {33,140}, {33,141}, {33,142}, {33,143}, {33,150}, {33,151}, {33,152}, {34,-105}, {34,-104}, {34,-103}, {34,-102}, {34,-99}, {34,-98}, {34,-97}, {34,-96}, {34,-95}, {34,-94}, {34,-93}, {34,-89}, {34,-88}, {34,-84}, {34,-83}, {34,-74}, {34,-73}, {34,-72}, {34,-71}, {34,-68}, {34,-40}, {34,-39}, {34,-38}, {34,-37}, {34,-36}, {34,-33}, {34,-32}, {34,-31}, {34,-30}, {34,-29}, {34,-28}, {34,-27}, {34,-26}, {34,-25}, {34,-24}, {34,-23}, {34,-22}, {34,-11}, {34,-10}, {34,-9}, {34,-8}, {34,52}, {34,56}, {34,150}, {34,151}, {34,152}, {35,-104}, {35,-103}, {35,-102}, {35,-98}, {35,-97}, {35,-96}, {35,-95}, {35,-94}, {35,-93}, {35,-89}, {35,-88}, {35,-84}, {35,-83}, {35,-74}, {35,-73}, {35,-72}, {35,-68}, {35,-40}, {35,-39}, {35,-38}, {35,-37}, {35,-36}, {35,-32}, {35,-31}, {35,-30}, {35,-29}, {35,-28}, {35,-27}, {35,-26}, {35,-13}, {35,-12}, {35,-11}, {35,-10}, {35,-9}, {35,-8}, {35,52}, {35,55}, {35,56}, {35,145}, {35,149}, {35,150}, {35,151}, {35,152}, {36,-104}, {36,-103}, {36,-102}, {36,-98}, {36,-97}, {36,-96}, {36,-95}, {36,-94}, {36,-90}, {36,-89}, {36,-88}, {36,-87}, {36,-84}, {36,-83}, {36,-74}, {36,-73}, {36,-72}, {36,-13}, {36,-12}, {36,-11}, {36,-10}, {36,-9}, {36,-8}, {36,52}, {36,55}, {36,56}, {36,145}, {36,149}, {36,150}, {36,151}, {36,152}, {37,-104}, {37,-103}, {37,-102}, {37,-101}, {37,-98}, {37,-97}, {37,-96}, {37,-95}, {37,-94}, {37,-90}, {37,-89}, {37,-88}, {37,-87}, {37,-84}, {37,-83}, {37,-74}, {37,-73}, {37,-72}, {37,-71}, {37,-16}, {37,-15}, {37,-14}, {37,-13}, {37,-12}, {37,-11}, {37,-10}, {37,-9}, {37,-8}, {37,52}, {37,55}, {37,56}, {37,145}, {37,146}, {37,149}, {37,150}, {37,151}, {37,152}, {38,-104}, {38,-103}, {38,-102}, {38,-101}, {38,-98}, {38,-97}, {38,-96}, {38,-95}, {38,-94}, {38,-91}, {38,-90}, {38,-89}, {38,-88}, {38,-87}, {38,-84}, {38,-83}, {38,-82}, {38,-74}, {38,-73}, {38,-72}, {38,-71}, {38,-18}, {38,-17}, {38,-16}, {38,-15}, {38,-14}, {38,-13}, {38,-12}, {38,-11}, {38,-10}, {38,-9}, {38,52}, {38,55}, {38,56}, {38,145}, {38,146}, {38,149}, {38,150}, {38,151}, {38,152}, {39,-104}, {39,-103}, {39,-102}, {39,-101}, {39,-98}, {39,-97}, {39,-96}, {39,-95}, {39,-91}, {39,-87}, {39,-83}, {39,-82}, {39,-75}, {39,-74}, {39,-73}, {39,-72}, {39,-17}, {39,-16}, {39,-15}, {39,-14}, {39,-13}, {39,-12}, {39,-11}, {39,-9}, {39,-8}, {39,52}, {39,55}, {39,56}, {39,145}, {39,146}, {39,149}, {39,150}, {39,151}, {39,152}, {40,-104}, {40,-103}, {40,-102}, {40,-101}, {40,-97}, {40,-96}, {40,-95}, {40,-91}, {40,-87}, {40,-86}, {40,-83}, {40,-82}, {40,-75}, {40,-74}, {40,-73}, {40,-72}, {40,-69}, {40,-68}, {40,-39}, {40,-38}, {40,-37}, {40,-36}, {40,-35}, {40,-34}, {40,-31}, {40,-30}, {40,-17}, {40,-16}, {40,-15}, {40,-14}, {40,-13}, {40,-12}, {40,-11}, {40,-10}, {40,-9}, {40,-8}, {40,52}, {40,55}, {40,56}, {40,145}, {40,146}, {40,149}, {40,150}, {40,151}, {40,152}, {41,-103}, {41,-102}, {41,-101}, {41,-97}, {41,-96}, {41,-95}, {41,-92}, {41,-91}, {41,-90}, {41,-89}, {41,-88}, {41,-87}, {41,-86}, {41,-83}, {41,-82}, {41,-81}, {41,-75}, {41,-74}, {41,-73}, {41,-72}, {41,-69}, {41,-68}, {41,-39}, {41,-38}, {41,-37}, {41,-36}, {41,-35}, {41,-34}, {41,-31}, {41,-27}, {41,-26}, {41,-15}, {41,-14}, {41,-13}, {41,-12}, {41,-11}, {41,-10}, {41,-9}, {41,-8}, {41,52}, {41,55}, {41,56}, {41,145}, {41,146}, {41,149}, {41,150}, {41,151}, {41,152}, {42,-103}, {42,-102}, {42,-101}, {42,-100}, {42,-97}, {42,-96}, {42,-95}, {42,-92}, {42,-91}, {42,-90}, {42,-89}, {42,-88}, {42,-87}, {42,-86}, {42,-83}, {42,-82}, {42,-81}, {42,-75}, {42,-74}, {42,-73}, {42,-72}, {42,-69}, {42,-68}, {42,-38}, {42,-37}, {42,-36}, {42,-35}, {42,-34}, {42,-27}, {42,-22}, {42,-21}, {42,-20}, {42,-12}, {42,-11}, {42,-10}, {42,-9}, {42,52}, {42,55}, {42,56}, {42,145}, {42,146}, {42,149}, {42,150}, {42,151}, {42,152}, {43,-103}, {43,-102}, {43,-101}, {43,-100}, {43,-97}, {43,-96}, {43,-95}, {43,-92}, {43,-91}, {43,-89}, {43,-88}, {43,-87}, {43,-86}, {43,-82}, {43,-81}, {43,-74}, {43,-73}, {43,-72}, {43,-69}, {43,-68}, {43,-37}, {43,-36}, {43,-35}, {43,-34}, {43,-24}, {43,-23}, {43,-22}, {43,-21}, {43,-20}, {43,-9}, {43,52}, {43,55}, {43,56}, {43,145}, {43,146}, {43,149}, {43,150}, {43,151}, {43,152}, {44,-103}, {44,-102}, {44,-101}, {44,-100}, {44,-97}, {44,-96}, {44,-92}, {44,-91}, {44,-90}, {44,-82}, {44,-81}, {44,-74}, {44,-73}, {44,-72}, {44,-69}, {44,-68}, {44,-37}, {44,-36}, {44,-35}, {44,-34}, {44,-29}, {44,-25}, {44,-24}, {44,-23}, {44,-22}, {44,-21}, {44,-20}, {44,-19}, {44,-18}, {44,-17}, {44,52}, {44,55}, {44,56}, {44,145}, {44,146}, {44,149}, {44,150}, {44,151}, {44,152}, {45,-103}, {45,-100}, {45,-96}, {45,-92}, {45,-91}, {45,-82}, {45,-81}, {45,-74}, {45,-73}, {45,-72}, {45,-69}, {45,-37}, {45,-36}, {45,-35}, {45,-30}, {45,-26}, {45,-25}, {45,-24}, {45,-23}, {45,-22}, {45,-21}, {45,-20}, {45,-19}, {45,-18}, {45,-17}, {45,-16}, {45,-15}, {45,52}, {45,55}, {45,56}, {45,145}, {45,146}, {45,149}, {45,150}, {45,151}, {45,152}, {46,-103}, {46,-100}, {46,-81}, {46,-80}, {46,-74}, {46,-73}, {46,-72}, {46,-69}, {46,-37}, {46,-36}, {46,-35}, {46,-34}, {46,-27}, {46,-26}, {46,-25}, {46,-24}, {46,-23}, {46,-22}, {46,-21}, {46,-20}, {46,-19}, {46,-18}, {46,-17}, {46,-16}, {46,-15}, {46,52}, {46,55}, {46,56}, {46,145}, {46,146}, {46,149}, {46,150}, {46,151}, {46,152}, {47,-99}, {47,-89}, {47,-88}, {47,-87}, {47,-86}, {47,-81}, {47,-80}, {47,-74}, {47,-73}, {47,-72}, {47,-69}, {47,-37}, {47,-36}, {47,-35}, {47,-34}, {47,-27}, {47,-26}, {47,-25}, {47,-24}, {47,-23}, {47,-22}, {47,-21}, {47,-20}, {47,-19}, {47,-9}, {47,-8}, {47,52}, {47,55}, {47,56}, {47,145}, {47,146}, {47,150}, {47,151}, {47,152}, {48,-99}, {48,-90}, {48,-89}, {48,-88}, {48,-87}, {48,-86}, {48,-85}, {48,-81}, {48,-80}, {48,-74}, {48,-73}, {48,-72}, {48,-69}, {48,-37}, {48,-36}, {48,-35}, {48,-29}, {48,-28}, {48,-27}, {48,-26}, {48,-25}, {48,-24}, {48,-23}, {48,-22}, {48,-21}, {48,-13}, {48,-12}, {48,-11}, {48,-10}, {48,-9}, {48,-8}, {48,52}, {48,55}, {48,56}, {48,145}, {48,146}, {48,150}, {48,151}, {48,152}, {49,-99}, {49,-98}, {49,-92}, {49,-91}, {49,-85}, {49,-84}, {49,-80}, {49,-74}, {49,-73}, {49,-72}, {49,-69}, {49,-38}, {49,-37}, {49,-36}, {49,-35}, {49,-30}, {49,-29}, {49,-28}, {49,-27}, {49,-26}, {49,-25}, {49,-24}, {49,-17}, {49,-16}, {49,-15}, {49,-14}, {49,-13}, {49,-12}, {49,-11}, {49,-10}, {49,-9}, {49,-8}, {49,52}, {49,55}, {49,56}, {49,145}, {49,146}, {49,150}, {49,151}, {49,152}, {50,-99}, {50,-98}, {50,-94}, {50,-93}, {50,-84}, {50,-80}, {50,-79}, {50,-73}, {50,-72}, {50,-69}, {50,-38}, {50,-37}, {50,-36}, {50,-29}, {50,-28}, {50,-27}, {50,-26}, {50,-19}, {50,-18}, {50,-17}, {50,-16}, {50,-15}, {50,-14}, {50,-13}, {50,-12}, {50,-11}, {50,-10}, {50,-9}, {50,52}, {50,55}, {50,56}, {50,145}, {50,146}, {50,150}, {50,151}, {50,152}, {51,-98}, {51,-94}, {51,-84}, {51,-83}, {51,-80}, {51,-79}, {51,-73}, {51,-72}, {51,-69}, {51,-39}, {51,-38}, {51,-37}, {51,-36}, {51,-29}, {51,-22}, {51,-21}, {51,-20}, {51,-19}, {51,-18}, {51,-17}, {51,-16}, {51,-15}, {51,-14}, {51,-13}, {51,-12}, {51,-11}, {51,52}, {51,55}, {51,56}, {51,145}, {51,146}, {51,150}, {51,151}, {51,152}, {52,-102}, {52,-94}, {52,-83}, {52,-79}, {52,-73}, {52,-72}, {52,-69}, {52,-39}, {52,-38}, {52,-32}, {52,-24}, {52,-23}, {52,-22}, {52,-21}, {52,-20}, {52,-19}, {52,-18}, {52,-17}, {52,-16}, {52,-15}, {52,-14}, {52,-13}, {52,-12}, {52,52}, {52,55}, {52,56}, {52,145}, {52,146}, {52,150}, {52,151}, {52,152}, {53,-83}, {53,-79}, {53,-78}, {53,-73}, {53,-72}, {53,-69}, {53,-68}, {53,-40}, {53,-34}, {53,-33}, {53,-32}, {53,-27}, {53,-26}, {53,-25}, {53,-24}, {53,-23}, {53,-22}, {53,-21}, {53,-20}, {53,-19}, {53,-18}, {53,-17}, {53,-16}, {53,-15}, {53,-14}, {53,-13}, {53,52}, {53,55}, {53,56}, {53,145}, {53,146}, {53,150}, {53,151}, {53,152}, {54,-83}, {54,-79}, {54,-78}, {54,-73}, {54,-72}, {54,-67}, {54,-42}, {54,-41}, {54,-40}, {54,-35}, {54,-34}, {54,-28}, {54,-27}, {54,-26}, {54,-25}, {54,-24}, {54,-23}, {54,-22}, {54,-21}, {54,-20}, {54,-19}, {54,-18}, {54,-17}, {54,-16}, {54,-15}, {54,-14}, {54,52}, {54,56}, {54,145}, {54,146}, {54,150}, {54,151}, {54,152}, {55,-82}, {55,-79}, {55,-78}, {55,-73}, {55,-72}, {55,-71}, {55,-65}, {55,-64}, {55,-63}, {55,-62}, {55,-61}, {55,-60}, {55,-59}, {55,-58}, {55,-57}, {55,-56}, {55,-55}, {55,-54}, {55,-53}, {55,-52}, {55,-51}, {55,-50}, {55,-49}, {55,-48}, {55,-47}, {55,-46}, {55,-45}, {55,-44}, {55,-43}, {55,-28}, {55,-27}, {55,-26}, {55,-25}, {55,-24}, {55,-23}, {55,-22}, {55,-21}, {55,-20}, {55,-19}, {55,-18}, {55,-17}, {55,-16}, {55,52}, {55,56}, {55,145}, {55,146}, {55,150}, {55,151}, {55,152}, {56,-82}, {56,-79}, {56,-78}, {56,-73}, {56,-72}, {56,-71}, {56,-28}, {56,-27}, {56,-26}, {56,-25}, {56,-24}, {56,-23}, {56,-22}, {56,-21}, {56,-20}, {56,52}, {56,53}, {56,56}, {56,145}, {56,146}, {56,150}, {56,151}, {56,152}, {57,-82}, {57,-78}, {57,-73}, {57,-72}, {57,-71}, {57,-28}, {57,-27}, {57,-26}, {57,-25}, {57,-24}, {57,-23}, {57,-22}, {57,-21}, {57,-17}, {57,-16}, {57,-15}, {57,-14}, {57,-13}, {57,-12}, {57,-11}, {57,-8}, {57,52}, {57,53}, {57,56}, {57,145}, {57,146}, {57,149}, {57,150}, {57,151}, {57,152}, {58,-81}, {58,-78}, {58,-77}, {58,-72}, {58,-71}, {58,-66}, {58,-65}, {58,-64}, {58,-63}, {58,-62}, {58,-54}, {58,-53}, {58,-52}, {58,-51}, {58,-50}, {58,-49}, {58,-48}, {58,-47}, {58,-46}, {58,-45}, {58,-44}, {58,-43}, {58,-42}, {58,-41}, {58,-40}, {58,-39}, {58,-17}, {58,-16}, {58,-15}, {58,-14}, {58,-13}, {58,-12}, {58,-11}, {58,-8}, {58,52}, {58,53}, {58,56}, {58,145}, {58,146}, {58,149}, {58,150}, {58,151}, {58,152}, {59,-81}, {59,-77}, {59,-72}, {59,-71}, {59,-68}, {59,-67}, {59,52}, {59,56}, {59,145}, {59,146}, {59,150}, {59,151}, {59,152}, {60,-81}, {60,-77}, {60,-72}, {60,-71}, {60,-68}, {60,-67}, {60,52}, {60,56}, {60,145}, {60,146}, {60,147}, {60,150}, {60,151}, {60,152}, {61,-77}, {61,-72}, {61,-71}, {61,-70}, {61,-68}, {61,-67}, {61,52}, {61,55}, {61,56}, {61,145}, {61,146}, {61,147}, {61,150}, {61,151}, {61,152}, {62,-80}, {62,-76}, {62,-72}, {62,-71}, {62,-70}, {62,-68}, {62,-67}, {62,52}, {62,55}, {62,145}, {62,146}, {62,147}, {62,150}, {62,151}, {62,152}, {63,-80}, {63,-76}, {63,-72}, {63,-71}, {63,-70}, {63,-68}, {63,-67}, {63,52}, {63,55}, {63,147}, {63,150}, {63,151}, {63,152}, {64,-80}, {64,-79}, {64,-76}, {64,-72}, {64,-71}, {64,-68}, {64,-67}, {64,52}, {64,55}, {64,150}, {64,151}, {64,152}, {65,-79}, {65,-76}, {65,-72}, {65,-71}, {65,-68}, {65,-67}, {65,52}, {65,55}, {65,150}, {65,151}, {65,152}, {66,-76}, {66,-75}, {66,-72}, {66,-71}, {66,-68}, {66,-67}, {66,52}, {66,55}, {66,147}, {66,150}, {66,151}, {66,152}, {67,-75}, {67,-72}, {67,-71}, {67,-68}, {67,-67}, {67,52}, {67,55}, {67,147}, {67,150}, {67,151}, {67,152}, {68,-74}, {68,-73}, {68,-72}, {68,-71}, {68,-68}, {68,-67}, {68,52}, {68,55}, {68,147}, {68,150}, {68,151}, {68,152}, {69,-78}, {69,-73}, {69,-72}, {69,52}, {69,55}, {69,56}, {69,147}, {69,150}, {69,151}, {69,152}, {70,-78}, {70,-77}, {70,52}, {70,56}, {70,146}, {70,147}, {70,150}, {70,151}, {70,152}, {71,-76}, {71,52}, {71,53}, {71,56}, {71,146}, {71,147}, {71,150}, {71,151}, {71,152}, {72,-72}, {72,-71}, {72,-70}, {72,-69}, {72,-68}, {72,-67}, {72,53}, {72,56}, {72,146}, {72,147}, {72,150}, {72,151}, {72,152}, {73,-71}, {73,-70}, {73,-69}, {73,53}, {73,56}, {73,147}, {73,150}, {73,151}, {73,152}, {74,-74}, {74,-71}, {74,-70}, {74,-69}, {74,53}, {74,56}, {74,147}, {74,150}, {74,151}, {74,152}, {75,-79}, {75,-74}, {75,-70}, {75,-69}, {75,-68}, {75,52}, {75,53}, {75,56}, {75,147}, {75,150}, {75,151}, {75,152}, {76,-106}, {76,-74}, {76,-70}, {76,-69}, {76,-68}, {76,-67}, {76,52}, {76,53}, {76,56}, {76,147}, {76,150}, {76,151}, {76,152}, {77,-74}, {77,-73}, {77,-68}, {77,-67}, {77,-66}, {77,-39}, {77,52}, {77,53}, {77,147}, {77,150}, {77,151}, {77,152}, {78,-73}, {78,-72}, {78,-67}, {78,-66}, {78,-39}, {78,-38}, {78,52}, {78,53}, {78,146}, {78,147}, {78,150}, {78,151}, {78,152}, {79,-72}, {79,-38}, {79,52}, {79,53}, {79,146}, {79,147}, {79,150}, {79,151}, {79,152}, {80,-71}, {80,-38}, {80,-37}, {80,52}, {80,56}, {80,146}, {80,147}, {80,150}, {80,151}, {80,152}, {81,-71}, {81,-70}, {81,-69}, {81,52}, {81,56}, {81,147}, {81,150}, {81,151}, {81,152}, {82,-70}, {82,-69}, {82,52}, {82,55}, {82,56}, {82,147}, {82,150}, {82,151}, {82,152}, {83,-69}, {83,-68}, {83,-67}, {83,52}, {83,55}, {83,56}, {83,146}, {83,147}, {83,150}, {83,151}, {83,152}, {84,-67}, {84,-28}, {84,-27}, {84,-26}, {84,-25}, {84,-24}, {84,-23}, {84,-22}, {84,-21}, {84,-20}, {84,-19}, {84,-18}, {84,-17}, {84,-10}, {84,-9}, {84,-8}, {84,-7}, {84,-6}, {84,-5}, {84,-4}, {84,-3}, {84,-2}, {84,-1}, {84,0}, {84,1}, {84,2}, {84,3}, {84,8}, {84,9}, {84,10}, {84,11}, {84,12}, {84,13}, {84,14}, {84,15}, {84,16}, {84,17}, {84,18}, {84,19}, {84,20}, {84,21}, {84,22}, {84,23}, {84,24}, {84,25}, {84,26}, {84,27}, {84,28}, {84,29}, {84,30}, {84,31}, {84,32}, {84,33}, {84,34}, {84,35}, {84,36}, {84,37}, {84,38}, {84,39}, {84,40}, {84,41}, {84,42}, {84,43}, {84,44}, {84,45}, {84,46}, {84,47}, {84,48}, {84,49}, {84,50}, {84,51}, {84,52}, {84,55}, {84,56}, {84,145}, {84,146}, {84,147}, {84,150}, {84,151}, {84,152}, {85,-31}, {85,-26}, {85,-25}, {85,-24}, {85,-23}, {85,-22}, {85,-21}, {85,-20}, {85,-19}, {85,-9}, {85,-8}, {85,-7}, {85,-6}, {85,-5}, {85,-4}, {85,-3}, {85,-2}, {85,-1}, {85,30}, {85,31}, {85,32}, {85,33}, {85,34}, {85,35}, {85,36}, {85,37}, {85,38}, {85,39}, {85,40}, {85,41}, {85,56}, {85,145}, {85,146}, {85,147}, {85,150}, {85,151}, {85,152}, {86,-35}, {86,-31}, {86,-30}, {86,-13}, {86,56}, {86,145}, {86,146}, {86,147}, {86,150}, {86,151}, {86,152}, {87,-31}, {87,-30}, {87,-29}, {87,-28}, {87,-15}, {87,-14}, {87,-13}, {87,-12}, {87,2}, {87,3}, {87,4}, {87,5}, {87,6}, {87,7}, {87,8}, {87,9}, {87,10}, {87,11}, {87,12}, {87,13}, {87,14}, {87,15}, {87,16}, {87,17}, {87,18}, {87,19}, {87,20}, {87,21}, {87,22}, {87,23}, {87,24}, {87,25}, {87,26}, {87,27}, {87,44}, {87,45}, {87,46}, {87,47}, {87,48}, {87,49}, {87,50}, {87,51}, {87,52}, {87,57}, {87,58}, {87,59}, {87,60}, {87,61}, {87,62}, {87,63}, {87,64}, {87,65}, {87,66}, {87,67}, {87,68}, {87,69}, {87,70}, {87,71}, {87,72}, {87,73}, {87,74}, {87,75}, {87,76}, {87,77}, {87,78}, {87,79}, {87,80}, {87,81}, {87,82}, {87,83}, {87,84}, {87,85}, {87,86}, {87,87}, {87,88}, {87,89}, {87,90}, {87,91}, {87,92}, {87,97}, {87,98}, {87,99}, {87,100}, {87,101}, {87,102}, {87,103}, {87,104}, {87,105}, {87,106}, {87,107}, {87,108}, {87,109}, {87,110}, {87,111}, {87,112}, {87,113}, {87,114}, {87,115}, {87,116}, {87,117}, {87,118}, {87,119}, {87,120}, {87,121}, {87,122}, {87,123}, {87,124}, {87,125}, {87,126}, {87,127}, {87,128}, {87,129}, {87,130}, {87,131}, {87,132}, {87,133}, {87,134}, {87,135}, {87,136}, {87,137}, {87,138}, {87,139}, {87,140}, {87,141}, {87,142}, {87,143}, {87,144}, {87,145}, {87,146}, {87,150}, {87,151}, {87,152}, {88,-31}, {88,-30}, {88,-29}, {88,-28}, {88,-27}, {88,-26}, {88,-25}, {88,-24}, {88,-23}, {88,-22}, {88,-21}, {88,-20}, {88,-19}, {88,-18}, {88,-17}, {88,-16}, {88,-15}, {88,-14}, {88,-13}, {88,-12}, {88,-11}, {88,-10}, {88,-9}, {88,-8}, {88,-7}, {88,-6}, {88,-5}, {88,-4}, {88,-3}, {88,-2}, {88,-1}, {88,0}, {88,1}, {88,2}, {88,3}, {88,4}, {88,5}, {88,6}, {88,7}, {88,8}, {88,9}, {88,10}, {88,11}, {88,12}, {88,13}, {88,14}, {88,15}, {88,16}, {88,17}, {88,18}, {88,19}, {88,20}, {88,21}, {88,22}, {88,23}, {88,24}, {88,25}, {88,26}, {88,27}, {88,28}, {88,29}, {88,30}, {88,31}, {88,32}, {88,33}, {88,34}, {88,35}, {88,36}, {88,37}, {88,38}, {88,39}, {88,40}, {88,41}, {88,42}, {88,43}, {88,44}, {88,45}, {88,46}, {88,47}, {88,48}, {88,49}, {88,50}, {88,51}, {88,52}, {88,53}, {88,59}, {88,60}, {88,61}, {88,62}, {88,67}, {88,68}, {88,69}, {88,70}, {88,71}, {88,72}, {88,73}, {88,74}, {88,80}, {88,81}, {88,82}, {88,83}, {88,84}, {88,85}, {88,86}, {88,87}, {88,88}, {88,89}, {88,90}, {88,100}, {88,101}, {88,102}, {88,103}, {88,104}, {88,105}, {88,106}, {88,107}, {88,108}, {88,109}, {88,110}, {88,111}, {88,112}, {88,127}, {88,128}, {88,129}, {88,130}, {88,131}, {88,132}, {88,133}, {88,134}, {88,135}, {88,136}, {88,137}, {88,138}, {88,139}, {88,140}, {88,141}, {88,142}, {88,150}, {88,151}, {88,152}, {89,51}, {89,52}, {89,53}, {89,54}, {89,152}, {90,54}, {90,55}, {90,56}, {90,64}, {90,77}, {90,95}, {90,114}, {90,115}, {90,116}, {90,117}, {90,118}, {90,119}, {90,120}, {90,121}, {90,122}, {90,123}, {90,124}, {90,146}, {90,147}, {90,152}, {91,54}, {91,55}, {91,56}, {91,57}, {91,58}, {91,59}, {91,60}, {91,61}, {91,62}, {91,63}, {91,64}, {91,65}, {91,66}, {91,67}, {91,68}, {91,69}, {91,70}, {91,71}, {91,72}, {91,73}, {91,74}, {91,75}, {91,76}, {91,77}, {91,78}, {91,79}, {91,80}, {91,81}, {91,82}, {91,83}, {91,84}, {91,85}, {91,86}, {91,87}, {91,88}, {91,89}, {91,90}, {91,91}, {91,92}, {91,93}, {91,94}, {91,95}, {91,96}, {91,97}, {91,98}, {91,99}, {91,100}, {91,101}, {91,102}, {91,103}, {91,104}, {91,105}, {91,106}, {91,107}, {91,108}, {91,109}, {91,110}, {91,111}, {91,112}, {91,113}, {91,114}, {91,115}, {91,116}, {91,117}, {91,118}, {91,119}, {91,120}, {91,121}, {91,122}, {91,123}, {91,124}, {91,125}, {91,126}, {91,127}, {91,128}, {91,129}, {91,130}, {91,131}, {91,132}, {91,133}, {91,134}, {91,135}, {91,136}, {91,137}, {91,138}, {91,139}, {91,140}, {91,141}, {91,142}, {91,143}, {91,144}, {91,145}, {91,146}, {91,147}, {91,152}, {92,54}, {92,55}, {92,56}, {92,57}, {92,58}, {92,59}, {92,60}, {92,61}, {92,62}, {92,63}, {92,64}, {92,65}, {92,66}, {92,67}, {92,68}, {92,69}, {92,70}, {92,71}, {92,72}, {92,73}, {92,74}, {92,75}, {92,76}, {92,77}, {92,78}, {92,79}, {92,80}, {92,81}, {92,82}, {92,83}, {92,84}, {92,85}, {92,86}, {92,87}, {92,88}, {92,89}, {92,90}, {92,91}, {92,92}, {92,93}, {92,94}, {92,95}, {92,96}, {92,97}, {92,98}, {92,99}, {92,100}, {92,101}, {92,102}, {92,103}, {92,104}, {92,105}, {92,106}, {92,107}, {92,108}, {92,109}, {92,110}, {92,111}, {92,112}, {92,113}, {92,114}, {92,115}, {92,116}, {92,117}, {92,118}, {92,119}, {92,120}, {92,121}, {92,122}, {92,123}, {92,124}, {92,125}, {92,126}, {92,127}, {92,128}, {92,129}, {92,130}, {92,131}, {92,132}, {92,133}, {92,134}, {92,135}, {92,136}, {92,137}, {92,138}, {92,139}, {92,140}, {92,141}, {92,142}, {92,143}, {92,144}, {92,145}, {92,146}, {92,147}, {92,148}, {92,149}, {92,150}, {92,151}, {92,152}, }, + ["mineral-beige-dirt-6"] = {{-96,33}, {-96,34}, {-96,35}, {-96,36}, {-95,-24}, {-95,-23}, {-95,-22}, {-95,-19}, {-95,-18}, {-95,-10}, {-95,-9}, {-95,9}, {-95,10}, {-95,11}, {-95,12}, {-95,13}, {-95,14}, {-95,15}, {-95,16}, {-95,17}, {-95,21}, {-95,22}, {-95,23}, {-95,24}, {-95,25}, {-95,26}, {-95,27}, {-95,28}, {-95,29}, {-95,30}, {-95,31}, {-95,32}, {-95,33}, {-95,34}, {-95,35}, {-95,36}, {-95,37}, {-95,38}, {-94,-28}, {-94,-27}, {-94,-26}, {-94,-25}, {-94,-24}, {-94,-23}, {-94,-22}, {-94,-21}, {-94,-20}, {-94,-19}, {-94,-18}, {-94,-17}, {-94,-16}, {-94,-15}, {-94,-14}, {-94,-13}, {-94,-12}, {-94,-11}, {-94,-10}, {-94,-9}, {-94,-8}, {-94,-7}, {-94,-6}, {-94,6}, {-94,7}, {-94,8}, {-94,9}, {-94,10}, {-94,11}, {-94,12}, {-94,13}, {-94,14}, {-94,15}, {-94,16}, {-94,17}, {-94,18}, {-94,19}, {-94,20}, {-94,21}, {-94,22}, {-94,23}, {-94,24}, {-94,25}, {-94,26}, {-94,27}, {-94,28}, {-94,29}, {-94,30}, {-94,31}, {-94,32}, {-94,33}, {-94,34}, {-94,38}, {-94,39}, {-94,40}, {-94,41}, {-93,-27}, {-93,-26}, {-93,-25}, {-93,-24}, {-93,-12}, {-93,-11}, {-93,-10}, {-93,-9}, {-93,-8}, {-93,-7}, {-93,-6}, {-93,-5}, {-93,-4}, {-93,-3}, {-93,-2}, {-93,-1}, {-93,0}, {-93,1}, {-93,2}, {-93,3}, {-93,4}, {-93,5}, {-93,6}, {-93,7}, {-93,8}, {-93,9}, {-93,10}, {-93,11}, {-93,12}, {-93,13}, {-93,14}, {-93,15}, {-93,16}, {-93,17}, {-93,18}, {-93,19}, {-93,20}, {-93,21}, {-93,22}, {-93,40}, {-93,41}, {-93,42}, {-92,-29}, {-92,-28}, {-92,-13}, {-92,-12}, {-92,-11}, {-92,-7}, {-92,-6}, {-92,-5}, {-92,-4}, {-92,-3}, {-92,-2}, {-92,-1}, {-92,0}, {-92,1}, {-92,2}, {-92,3}, {-92,4}, {-92,5}, {-92,6}, {-92,8}, {-92,9}, {-92,10}, {-92,11}, {-92,12}, {-92,20}, {-92,21}, {-92,22}, {-92,23}, {-92,40}, {-92,41}, {-92,42}, {-92,43}, {-91,-29}, {-91,-28}, {-91,-14}, {-91,-13}, {-91,-12}, {-91,-11}, {-91,-1}, {-91,0}, {-91,1}, {-91,2}, {-91,3}, {-91,4}, {-91,5}, {-91,7}, {-91,8}, {-91,9}, {-91,10}, {-91,11}, {-91,21}, {-91,22}, {-91,23}, {-91,24}, {-91,40}, {-91,41}, {-91,42}, {-91,43}, {-91,50}, {-91,51}, {-91,52}, {-91,53}, {-91,54}, {-91,55}, {-91,56}, {-91,57}, {-91,58}, {-91,59}, {-91,60}, {-91,61}, {-91,95}, {-91,96}, {-91,97}, {-91,98}, {-91,99}, {-91,100}, {-91,101}, {-91,102}, {-91,103}, {-91,104}, {-90,-29}, {-90,-28}, {-90,-16}, {-90,-15}, {-90,-14}, {-90,-13}, {-90,-12}, {-90,2}, {-90,3}, {-90,4}, {-90,5}, {-90,6}, {-90,7}, {-90,8}, {-90,9}, {-90,22}, {-90,23}, {-90,24}, {-90,25}, {-90,26}, {-90,27}, {-90,28}, {-90,31}, {-90,32}, {-90,33}, {-90,34}, {-90,35}, {-90,40}, {-90,41}, {-90,42}, {-90,43}, {-90,44}, {-90,45}, {-90,46}, {-90,47}, {-90,48}, {-90,49}, {-90,50}, {-90,51}, {-90,52}, {-90,53}, {-90,54}, {-90,55}, {-90,56}, {-90,57}, {-90,58}, {-90,59}, {-90,60}, {-90,61}, {-90,62}, {-90,63}, {-90,87}, {-90,88}, {-90,89}, {-90,90}, {-90,91}, {-90,92}, {-90,93}, {-90,94}, {-90,95}, {-90,96}, {-90,97}, {-90,98}, {-90,99}, {-90,100}, {-90,101}, {-90,102}, {-90,103}, {-90,104}, {-90,105}, {-89,-28}, {-89,-27}, {-89,-26}, {-89,-25}, {-89,-24}, {-89,-23}, {-89,-22}, {-89,-21}, {-89,-20}, {-89,-19}, {-89,-18}, {-89,-17}, {-89,-16}, {-89,-15}, {-89,-14}, {-89,-13}, {-89,-12}, {-89,-11}, {-89,4}, {-89,5}, {-89,6}, {-89,7}, {-89,8}, {-89,23}, {-89,24}, {-89,25}, {-89,26}, {-89,27}, {-89,28}, {-89,29}, {-89,30}, {-89,31}, {-89,32}, {-89,33}, {-89,34}, {-89,35}, {-89,36}, {-89,37}, {-89,38}, {-89,39}, {-89,40}, {-89,41}, {-89,43}, {-89,44}, {-89,45}, {-89,46}, {-89,47}, {-89,48}, {-89,49}, {-89,60}, {-89,61}, {-89,62}, {-89,63}, {-89,64}, {-89,65}, {-89,66}, {-89,67}, {-89,78}, {-89,79}, {-89,80}, {-89,81}, {-89,82}, {-89,83}, {-89,84}, {-89,85}, {-89,86}, {-89,87}, {-89,88}, {-89,89}, {-89,90}, {-89,91}, {-89,92}, {-89,93}, {-89,94}, {-89,95}, {-89,96}, {-89,103}, {-89,104}, {-89,105}, {-89,106}, {-88,-104}, {-88,-103}, {-88,-102}, {-88,-101}, {-88,-29}, {-88,-28}, {-88,-27}, {-88,-26}, {-88,-25}, {-88,-24}, {-88,-23}, {-88,-22}, {-88,-21}, {-88,-20}, {-88,-19}, {-88,-18}, {-88,-17}, {-88,-16}, {-88,-15}, {-88,-14}, {-88,-13}, {-88,-12}, {-88,-11}, {-88,24}, {-88,25}, {-88,26}, {-88,27}, {-88,28}, {-88,29}, {-88,30}, {-88,31}, {-88,32}, {-88,35}, {-88,36}, {-88,37}, {-88,38}, {-88,39}, {-88,40}, {-88,41}, {-88,42}, {-88,43}, {-88,44}, {-88,45}, {-88,46}, {-88,47}, {-88,48}, {-88,49}, {-88,61}, {-88,64}, {-88,65}, {-88,66}, {-88,67}, {-88,68}, {-88,69}, {-88,70}, {-88,71}, {-88,72}, {-88,73}, {-88,74}, {-88,75}, {-88,76}, {-88,77}, {-88,78}, {-88,79}, {-88,80}, {-88,105}, {-88,106}, {-88,107}, {-88,108}, {-87,-106}, {-87,-105}, {-87,-104}, {-87,-103}, {-87,-102}, {-87,-101}, {-87,-100}, {-87,-31}, {-87,-30}, {-87,-29}, {-87,-28}, {-87,-27}, {-87,40}, {-87,41}, {-87,42}, {-87,43}, {-87,44}, {-87,45}, {-87,46}, {-87,47}, {-87,48}, {-87,49}, {-87,50}, {-87,61}, {-87,67}, {-87,68}, {-87,69}, {-87,70}, {-87,71}, {-87,72}, {-87,73}, {-87,74}, {-87,75}, {-87,76}, {-87,107}, {-87,108}, {-87,109}, {-87,110}, {-87,111}, {-87,112}, {-87,113}, {-86,-108}, {-86,-107}, {-86,-106}, {-86,-105}, {-86,-104}, {-86,-102}, {-86,-101}, {-86,-100}, {-86,-99}, {-86,-98}, {-86,-34}, {-86,-33}, {-86,-32}, {-86,-31}, {-86,-30}, {-86,-29}, {-86,-28}, {-86,39}, {-86,40}, {-86,41}, {-86,42}, {-86,47}, {-86,48}, {-86,49}, {-86,50}, {-86,60}, {-86,61}, {-86,67}, {-86,68}, {-86,108}, {-86,109}, {-86,110}, {-86,111}, {-86,112}, {-86,113}, {-86,114}, {-86,115}, {-85,-109}, {-85,-108}, {-85,-107}, {-85,-106}, {-85,-105}, {-85,-101}, {-85,-100}, {-85,-99}, {-85,-98}, {-85,-97}, {-85,-96}, {-85,-38}, {-85,-37}, {-85,-36}, {-85,-35}, {-85,-34}, {-85,-33}, {-85,-32}, {-85,-31}, {-85,-30}, {-85,-29}, {-85,-28}, {-85,39}, {-85,40}, {-85,41}, {-85,47}, {-85,48}, {-85,49}, {-85,50}, {-85,60}, {-85,61}, {-85,62}, {-85,66}, {-85,114}, {-85,115}, {-85,116}, {-84,-121}, {-84,-120}, {-84,-119}, {-84,-118}, {-84,-117}, {-84,-116}, {-84,-115}, {-84,-114}, {-84,-113}, {-84,-112}, {-84,-111}, {-84,-110}, {-84,-109}, {-84,-108}, {-84,-107}, {-84,-99}, {-84,-98}, {-84,-97}, {-84,-96}, {-84,-95}, {-84,-94}, {-84,-45}, {-84,-41}, {-84,-40}, {-84,-39}, {-84,-38}, {-84,-37}, {-84,-36}, {-84,-35}, {-84,-29}, {-84,-28}, {-84,39}, {-84,40}, {-84,48}, {-84,60}, {-84,61}, {-84,62}, {-84,63}, {-84,64}, {-84,65}, {-84,66}, {-84,115}, {-84,116}, {-83,-122}, {-83,-121}, {-83,-120}, {-83,-119}, {-83,-118}, {-83,-117}, {-83,-116}, {-83,-115}, {-83,-114}, {-83,-113}, {-83,-112}, {-83,-111}, {-83,-110}, {-83,-109}, {-83,-108}, {-83,-97}, {-83,-96}, {-83,-95}, {-83,-94}, {-83,-93}, {-83,-92}, {-83,-91}, {-83,-47}, {-83,-43}, {-83,-42}, {-83,-41}, {-83,-40}, {-83,-39}, {-83,-38}, {-83,-29}, {-83,-28}, {-83,39}, {-83,40}, {-83,61}, {-83,62}, {-83,63}, {-83,64}, {-83,65}, {-83,66}, {-83,115}, {-83,116}, {-82,-123}, {-82,-122}, {-82,-121}, {-82,-120}, {-82,-94}, {-82,-93}, {-82,-92}, {-82,-91}, {-82,-90}, {-82,-71}, {-82,-70}, {-82,-69}, {-82,-68}, {-82,-67}, {-82,-45}, {-82,-44}, {-82,-43}, {-82,-42}, {-82,-29}, {-82,-28}, {-82,39}, {-82,40}, {-82,63}, {-82,64}, {-82,65}, {-82,115}, {-82,116}, {-82,117}, {-81,-124}, {-81,-123}, {-81,-122}, {-81,-121}, {-81,-92}, {-81,-91}, {-81,-90}, {-81,-89}, {-81,-88}, {-81,-87}, {-81,-71}, {-81,-70}, {-81,-69}, {-81,-68}, {-81,-48}, {-81,-47}, {-81,-46}, {-81,-29}, {-81,-28}, {-81,39}, {-81,40}, {-81,64}, {-81,65}, {-81,66}, {-80,-124}, {-80,-123}, {-80,-122}, {-80,-90}, {-80,-89}, {-80,-88}, {-80,-87}, {-80,-86}, {-80,-85}, {-80,-84}, {-80,-71}, {-80,-70}, {-80,-69}, {-80,-68}, {-80,-53}, {-80,-50}, {-80,-49}, {-80,-48}, {-80,-29}, {-80,-28}, {-80,39}, {-80,40}, {-80,118}, {-79,-124}, {-79,-123}, {-79,-88}, {-79,-87}, {-79,-86}, {-79,-85}, {-79,-84}, {-79,-83}, {-79,-82}, {-79,-70}, {-79,-69}, {-79,-68}, {-79,-55}, {-79,-51}, {-79,-50}, {-79,-28}, {-79,118}, {-78,-124}, {-78,-123}, {-78,-85}, {-78,-84}, {-78,-83}, {-78,-82}, {-78,-70}, {-78,-69}, {-78,-68}, {-78,-54}, {-78,-53}, {-78,-52}, {-78,-28}, {-78,118}, {-78,119}, {-78,120}, {-78,121}, {-78,122}, {-78,123}, {-77,-124}, {-77,-123}, {-77,-83}, {-77,-82}, {-77,-70}, {-77,-69}, {-77,-55}, {-77,-54}, {-77,-28}, {-77,119}, {-77,120}, {-77,121}, {-77,122}, {-77,123}, {-77,124}, {-76,-124}, {-76,-123}, {-76,-83}, {-76,-82}, {-76,-70}, {-76,-69}, {-76,-55}, {-76,-28}, {-76,119}, {-76,125}, {-75,-124}, {-75,-123}, {-75,-83}, {-75,-82}, {-75,-70}, {-75,-69}, {-75,-56}, {-75,-55}, {-75,-28}, {-75,125}, {-74,-124}, {-74,-123}, {-74,-83}, {-74,-82}, {-74,-70}, {-74,-69}, {-74,-56}, {-74,-55}, {-74,-28}, {-74,-27}, {-74,125}, {-74,126}, {-73,-124}, {-73,-123}, {-73,-122}, {-73,-83}, {-73,-82}, {-73,-70}, {-73,-69}, {-73,-56}, {-73,-55}, {-73,-28}, {-73,-27}, {-73,125}, {-73,126}, {-73,127}, {-73,128}, {-73,129}, {-72,-124}, {-72,-123}, {-72,-122}, {-72,-83}, {-72,-82}, {-72,-70}, {-72,-69}, {-72,-56}, {-72,-55}, {-72,125}, {-72,126}, {-72,127}, {-72,128}, {-72,129}, {-72,130}, {-72,131}, {-72,132}, {-71,-123}, {-71,-122}, {-71,-83}, {-71,-82}, {-71,-56}, {-71,-55}, {-71,125}, {-71,126}, {-71,127}, {-71,128}, {-71,129}, {-71,130}, {-71,131}, {-71,132}, {-71,133}, {-71,134}, {-71,135}, {-71,136}, {-70,-123}, {-70,-122}, {-70,-84}, {-70,-83}, {-70,-82}, {-70,-56}, {-70,-55}, {-70,125}, {-70,126}, {-70,129}, {-70,130}, {-70,131}, {-70,132}, {-70,133}, {-70,134}, {-70,135}, {-70,136}, {-70,137}, {-70,138}, {-70,139}, {-69,-123}, {-69,-122}, {-69,-121}, {-69,-84}, {-69,-83}, {-69,-82}, {-69,-56}, {-69,-55}, {-69,125}, {-69,126}, {-69,127}, {-69,128}, {-69,130}, {-69,131}, {-69,136}, {-69,137}, {-69,138}, {-69,139}, {-69,140}, {-69,141}, {-68,-123}, {-68,-122}, {-68,-121}, {-68,-84}, {-68,-83}, {-68,-56}, {-68,-55}, {-68,125}, {-68,126}, {-68,127}, {-68,128}, {-68,129}, {-68,130}, {-68,131}, {-68,132}, {-68,135}, {-68,136}, {-68,140}, {-68,141}, {-68,142}, {-68,143}, {-67,-122}, {-67,-121}, {-67,-84}, {-67,-83}, {-67,-56}, {-67,-55}, {-67,127}, {-67,128}, {-67,129}, {-67,130}, {-67,131}, {-67,132}, {-67,133}, {-67,134}, {-67,135}, {-67,141}, {-67,142}, {-67,143}, {-67,144}, {-67,145}, {-66,-122}, {-66,-121}, {-66,-84}, {-66,-83}, {-66,-56}, {-66,-55}, {-66,132}, {-66,133}, {-66,134}, {-66,135}, {-66,136}, {-66,142}, {-66,143}, {-66,144}, {-66,145}, {-66,146}, {-65,-122}, {-65,-121}, {-65,-84}, {-65,-83}, {-65,-56}, {-65,-55}, {-65,143}, {-65,144}, {-65,145}, {-65,146}, {-65,147}, {-64,-122}, {-64,-121}, {-64,-120}, {-64,-84}, {-64,-83}, {-64,-56}, {-64,-55}, {-64,144}, {-64,146}, {-64,147}, {-64,148}, {-63,-121}, {-63,-120}, {-63,-84}, {-63,-83}, {-63,-82}, {-63,-57}, {-63,-56}, {-63,-55}, {-63,144}, {-63,147}, {-63,148}, {-62,-121}, {-62,-120}, {-62,-84}, {-62,-83}, {-62,-82}, {-62,-59}, {-62,-58}, {-62,-57}, {-62,-56}, {-62,-55}, {-62,-54}, {-62,-53}, {-62,-52}, {-62,-51}, {-62,144}, {-62,145}, {-62,148}, {-62,149}, {-61,-121}, {-61,-120}, {-61,-83}, {-61,-82}, {-61,-59}, {-61,-58}, {-61,-57}, {-61,-56}, {-61,-55}, {-61,-54}, {-61,-53}, {-61,-52}, {-61,-51}, {-61,-50}, {-61,-49}, {-61,-48}, {-61,144}, {-61,148}, {-61,149}, {-60,-121}, {-60,-120}, {-60,-83}, {-60,-82}, {-60,-57}, {-60,-56}, {-60,-55}, {-60,-54}, {-60,-53}, {-60,-52}, {-60,-51}, {-60,-50}, {-60,-49}, {-60,-48}, {-60,-47}, {-60,-46}, {-60,144}, {-60,148}, {-60,149}, {-59,-121}, {-59,-120}, {-59,-83}, {-59,-82}, {-59,-57}, {-59,-56}, {-59,-55}, {-59,-53}, {-59,-52}, {-59,-51}, {-59,-50}, {-59,-49}, {-59,-48}, {-59,-47}, {-59,-46}, {-59,-45}, {-59,-44}, {-59,-43}, {-59,-42}, {-59,-41}, {-59,-40}, {-59,-28}, {-59,144}, {-59,148}, {-59,149}, {-58,-121}, {-58,-120}, {-58,-119}, {-58,-83}, {-58,-82}, {-58,-56}, {-58,-55}, {-58,-52}, {-58,-51}, {-58,-50}, {-58,-49}, {-58,-48}, {-58,-47}, {-58,-46}, {-58,-45}, {-58,-44}, {-58,-43}, {-58,-42}, {-58,-41}, {-58,-40}, {-58,-39}, {-58,-38}, {-58,-37}, {-58,-36}, {-58,-35}, {-58,-29}, {-58,-28}, {-58,144}, {-58,148}, {-58,149}, {-57,-120}, {-57,-119}, {-57,-83}, {-57,-82}, {-57,-56}, {-57,-55}, {-57,-51}, {-57,-50}, {-57,-49}, {-57,-48}, {-57,-47}, {-57,-46}, {-57,-45}, {-57,-44}, {-57,-43}, {-57,-42}, {-57,-41}, {-57,-40}, {-57,-39}, {-57,-38}, {-57,-37}, {-57,-36}, {-57,-35}, {-57,-34}, {-57,-33}, {-57,-32}, {-57,-31}, {-57,-30}, {-57,-29}, {-57,-28}, {-57,144}, {-57,148}, {-57,149}, {-56,-120}, {-56,-119}, {-56,-83}, {-56,-82}, {-56,-56}, {-56,-55}, {-56,-50}, {-56,-49}, {-56,-48}, {-56,-47}, {-56,-44}, {-56,-42}, {-56,-41}, {-56,-40}, {-56,-39}, {-56,-38}, {-56,-37}, {-56,-36}, {-56,-35}, {-56,-34}, {-56,-33}, {-56,-32}, {-56,-31}, {-56,-30}, {-56,-29}, {-56,-28}, {-56,144}, {-56,145}, {-56,148}, {-56,149}, {-55,-120}, {-55,-119}, {-55,-83}, {-55,-82}, {-55,-56}, {-55,-55}, {-55,-50}, {-55,-49}, {-55,-48}, {-55,-47}, {-55,-46}, {-55,-45}, {-55,-44}, {-55,-43}, {-55,-42}, {-55,-41}, {-55,-40}, {-55,-39}, {-55,-38}, {-55,-37}, {-55,-36}, {-55,-35}, {-55,-34}, {-55,-33}, {-55,-32}, {-55,-31}, {-55,-30}, {-55,-29}, {-55,-28}, {-55,144}, {-55,148}, {-55,149}, {-54,-120}, {-54,-119}, {-54,-83}, {-54,-82}, {-54,-57}, {-54,-56}, {-54,-55}, {-54,-49}, {-54,-48}, {-54,-47}, {-54,-46}, {-54,-45}, {-54,-44}, {-54,-43}, {-54,-42}, {-54,-41}, {-54,-40}, {-54,-39}, {-54,-38}, {-54,-37}, {-54,-36}, {-54,-35}, {-54,-34}, {-54,-33}, {-54,-32}, {-54,-31}, {-54,-30}, {-54,-29}, {-54,-28}, {-54,144}, {-54,148}, {-54,149}, {-53,-120}, {-53,-119}, {-53,-83}, {-53,-82}, {-53,-57}, {-53,-56}, {-53,-55}, {-53,-51}, {-53,-50}, {-53,-49}, {-53,-48}, {-53,-47}, {-53,-46}, {-53,-45}, {-53,-44}, {-53,-43}, {-53,-42}, {-53,-41}, {-53,-40}, {-53,-39}, {-53,-38}, {-53,-29}, {-53,-28}, {-53,144}, {-53,148}, {-53,149}, {-52,-120}, {-52,-119}, {-52,-83}, {-52,-82}, {-52,-57}, {-52,-56}, {-52,-53}, {-52,-52}, {-52,-51}, {-52,-50}, {-52,-49}, {-52,-48}, {-52,-47}, {-52,-46}, {-52,-45}, {-52,-44}, {-52,-43}, {-52,-41}, {-52,-40}, {-52,144}, {-52,148}, {-52,149}, {-51,-120}, {-51,-119}, {-51,-84}, {-51,-83}, {-51,-82}, {-51,-81}, {-51,-70}, {-51,-69}, {-51,-57}, {-51,-56}, {-51,-55}, {-51,-54}, {-51,-53}, {-51,-52}, {-51,-51}, {-51,-50}, {-51,-49}, {-51,-48}, {-51,-47}, {-51,-46}, {-51,-45}, {-51,-40}, {-51,144}, {-51,148}, {-51,149}, {-50,-120}, {-50,-119}, {-50,-84}, {-50,-83}, {-50,-82}, {-50,-81}, {-50,-80}, {-50,-70}, {-50,-69}, {-50,-67}, {-50,-66}, {-50,-65}, {-50,-64}, {-50,-63}, {-50,-62}, {-50,-61}, {-50,-60}, {-50,-59}, {-50,-58}, {-50,-57}, {-50,-56}, {-50,-55}, {-50,-54}, {-50,-53}, {-50,-49}, {-50,-48}, {-50,-47}, {-50,-46}, {-50,-45}, {-50,-44}, {-50,-40}, {-50,144}, {-50,148}, {-50,149}, {-49,-120}, {-49,-119}, {-49,-118}, {-49,-84}, {-49,-83}, {-49,-82}, {-49,-81}, {-49,-80}, {-49,-79}, {-49,-78}, {-49,-70}, {-49,-69}, {-49,-68}, {-49,-67}, {-49,-66}, {-49,-65}, {-49,-64}, {-49,-63}, {-49,-62}, {-49,-61}, {-49,-60}, {-49,-59}, {-49,-58}, {-49,-57}, {-49,-56}, {-49,-55}, {-49,-54}, {-49,-53}, {-49,-49}, {-49,-48}, {-49,-47}, {-49,-46}, {-49,-45}, {-49,-44}, {-49,-39}, {-49,144}, {-49,148}, {-49,149}, {-48,-119}, {-48,-118}, {-48,-83}, {-48,-82}, {-48,-81}, {-48,-80}, {-48,-79}, {-48,-78}, {-48,-77}, {-48,-76}, {-48,-75}, {-48,-74}, {-48,-73}, {-48,-72}, {-48,-71}, {-48,-70}, {-48,-69}, {-48,-68}, {-48,-67}, {-48,-58}, {-48,-57}, {-48,-56}, {-48,-55}, {-48,-54}, {-48,-53}, {-48,-49}, {-48,-48}, {-48,-47}, {-48,-46}, {-48,-45}, {-48,-44}, {-48,-39}, {-48,144}, {-48,148}, {-48,149}, {-47,-119}, {-47,-118}, {-47,-83}, {-47,-82}, {-47,-81}, {-47,-80}, {-47,-79}, {-47,-78}, {-47,-77}, {-47,-76}, {-47,-75}, {-47,-74}, {-47,-73}, {-47,-72}, {-47,-71}, {-47,-70}, {-47,-69}, {-47,-68}, {-47,-58}, {-47,-57}, {-47,-56}, {-47,-54}, {-47,-53}, {-47,-52}, {-47,-50}, {-47,-49}, {-47,-48}, {-47,-47}, {-47,-46}, {-47,-45}, {-47,-44}, {-47,-43}, {-47,-39}, {-47,144}, {-47,148}, {-47,149}, {-46,-119}, {-46,-118}, {-46,-84}, {-46,-83}, {-46,-82}, {-46,-81}, {-46,-80}, {-46,-79}, {-46,-78}, {-46,-77}, {-46,-76}, {-46,-75}, {-46,-74}, {-46,-73}, {-46,-72}, {-46,-71}, {-46,-70}, {-46,-69}, {-46,-68}, {-46,-57}, {-46,-56}, {-46,-53}, {-46,-52}, {-46,-51}, {-46,-50}, {-46,-49}, {-46,-48}, {-46,-47}, {-46,-45}, {-46,-44}, {-46,-43}, {-46,-38}, {-46,144}, {-46,148}, {-46,149}, {-45,-119}, {-45,-118}, {-45,-117}, {-45,-84}, {-45,-83}, {-45,-82}, {-45,-71}, {-45,-70}, {-45,-69}, {-45,-68}, {-45,-57}, {-45,-56}, {-45,-52}, {-45,-51}, {-45,-50}, {-45,-49}, {-45,-48}, {-45,-47}, {-45,-45}, {-45,-44}, {-45,-43}, {-45,-38}, {-45,144}, {-45,148}, {-45,149}, {-44,-119}, {-44,-118}, {-44,-117}, {-44,-84}, {-44,-83}, {-44,-70}, {-44,-69}, {-44,-68}, {-44,-57}, {-44,-56}, {-44,-52}, {-44,-51}, {-44,-50}, {-44,-49}, {-44,-48}, {-44,-44}, {-44,-43}, {-44,-42}, {-44,-38}, {-44,-37}, {-44,144}, {-44,148}, {-44,149}, {-43,-118}, {-43,-117}, {-43,-84}, {-43,-83}, {-43,-69}, {-43,-68}, {-43,-57}, {-43,-56}, {-43,-51}, {-43,-50}, {-43,-49}, {-43,-48}, {-43,-44}, {-43,-43}, {-43,-42}, {-43,-37}, {-43,144}, {-43,148}, {-43,149}, {-42,-118}, {-42,-117}, {-42,-85}, {-42,-84}, {-42,-83}, {-42,-69}, {-42,-68}, {-42,-58}, {-42,-57}, {-42,-56}, {-42,-51}, {-42,-50}, {-42,-49}, {-42,-48}, {-42,-43}, {-42,-42}, {-42,-37}, {-42,144}, {-42,148}, {-42,149}, {-41,-118}, {-41,-117}, {-41,-116}, {-41,-85}, {-41,-84}, {-41,-69}, {-41,-68}, {-41,-59}, {-41,-58}, {-41,-57}, {-41,-56}, {-41,-50}, {-41,-49}, {-41,-48}, {-41,-47}, {-41,-43}, {-41,-42}, {-41,-41}, {-41,-36}, {-41,144}, {-41,148}, {-41,149}, {-40,-118}, {-40,-117}, {-40,-116}, {-40,-85}, {-40,-84}, {-40,-69}, {-40,-68}, {-40,-60}, {-40,-59}, {-40,-58}, {-40,-57}, {-40,-56}, {-40,-50}, {-40,-49}, {-40,-48}, {-40,-47}, {-40,-43}, {-40,-42}, {-40,-41}, {-40,-36}, {-40,144}, {-40,148}, {-40,149}, {-39,-117}, {-39,-116}, {-39,-85}, {-39,-84}, {-39,-69}, {-39,-68}, {-39,-59}, {-39,-58}, {-39,-57}, {-39,-56}, {-39,-50}, {-39,-49}, {-39,-48}, {-39,-47}, {-39,-42}, {-39,-41}, {-39,-40}, {-39,-35}, {-39,143}, {-39,144}, {-39,148}, {-39,149}, {-38,-117}, {-38,-116}, {-38,-85}, {-38,-84}, {-38,-69}, {-38,-68}, {-38,-57}, {-38,-56}, {-38,-49}, {-38,-48}, {-38,-47}, {-38,-42}, {-38,-41}, {-38,-40}, {-38,-35}, {-38,143}, {-38,144}, {-38,148}, {-38,149}, {-37,-117}, {-37,-116}, {-37,-86}, {-37,-85}, {-37,-84}, {-37,-69}, {-37,-68}, {-37,-57}, {-37,-56}, {-37,-50}, {-37,-49}, {-37,-48}, {-37,-47}, {-37,-42}, {-37,-41}, {-37,-40}, {-37,-39}, {-37,-35}, {-37,-29}, {-37,-28}, {-37,-27}, {-37,143}, {-37,144}, {-37,147}, {-37,148}, {-37,149}, {-36,-117}, {-36,-116}, {-36,-115}, {-36,-86}, {-36,-85}, {-36,-69}, {-36,-68}, {-36,-57}, {-36,-56}, {-36,-50}, {-36,-49}, {-36,-48}, {-36,-47}, {-36,-42}, {-36,-41}, {-36,-40}, {-36,-39}, {-36,-35}, {-36,-34}, {-36,-30}, {-36,-29}, {-36,-28}, {-36,-27}, {-36,143}, {-36,144}, {-36,147}, {-36,148}, {-35,-116}, {-35,-115}, {-35,-86}, {-35,-85}, {-35,-69}, {-35,-68}, {-35,-57}, {-35,-56}, {-35,-50}, {-35,-49}, {-35,-48}, {-35,-47}, {-35,-42}, {-35,-41}, {-35,-40}, {-35,-39}, {-35,-38}, {-35,-34}, {-35,-31}, {-35,-30}, {-35,-29}, {-35,-28}, {-35,-27}, {-35,143}, {-35,144}, {-35,148}, {-34,-116}, {-34,-115}, {-34,-86}, {-34,-85}, {-34,-69}, {-34,-68}, {-34,-59}, {-34,-58}, {-34,-57}, {-34,-56}, {-34,-50}, {-34,-49}, {-34,-48}, {-34,-47}, {-34,-41}, {-34,-40}, {-34,-39}, {-34,-38}, {-34,-34}, {-34,-31}, {-34,-30}, {-34,-29}, {-34,143}, {-34,144}, {-34,148}, {-34,149}, {-33,-116}, {-33,-115}, {-33,-86}, {-33,-85}, {-33,-69}, {-33,-68}, {-33,-60}, {-33,-59}, {-33,-58}, {-33,-57}, {-33,-56}, {-33,-51}, {-33,-49}, {-33,-48}, {-33,-47}, {-33,-41}, {-33,-40}, {-33,-39}, {-33,-38}, {-33,-37}, {-33,-34}, {-33,-33}, {-33,-32}, {-33,-31}, {-33,-30}, {-33,-29}, {-33,143}, {-33,144}, {-33,148}, {-33,149}, {-32,-116}, {-32,-115}, {-32,-86}, {-32,-85}, {-32,-69}, {-32,-68}, {-32,-58}, {-32,-57}, {-32,-56}, {-32,-50}, {-32,-48}, {-32,-47}, {-32,-40}, {-32,-39}, {-32,-38}, {-32,-37}, {-32,-36}, {-32,-33}, {-32,-32}, {-32,-31}, {-32,-30}, {-32,143}, {-32,144}, {-32,149}, {-31,-116}, {-31,-115}, {-31,-87}, {-31,-86}, {-31,-85}, {-31,-69}, {-31,-68}, {-31,-57}, {-31,-56}, {-31,-50}, {-31,-49}, {-31,-48}, {-31,-47}, {-31,-40}, {-31,-39}, {-31,-38}, {-31,-37}, {-31,-36}, {-31,-33}, {-31,-32}, {-31,-31}, {-31,-30}, {-31,143}, {-31,144}, {-31,145}, {-31,146}, {-31,149}, {-31,150}, {-30,-116}, {-30,-115}, {-30,-114}, {-30,-87}, {-30,-86}, {-30,-69}, {-30,-68}, {-30,-57}, {-30,-56}, {-30,-50}, {-30,-49}, {-30,-48}, {-30,-47}, {-30,-38}, {-30,-37}, {-30,-36}, {-30,-35}, {-30,-33}, {-30,-32}, {-30,-31}, {-30,-30}, {-30,143}, {-30,144}, {-30,145}, {-30,146}, {-30,147}, {-30,148}, {-30,149}, {-30,150}, {-29,-115}, {-29,-114}, {-29,-87}, {-29,-86}, {-29,-69}, {-29,-68}, {-29,-57}, {-29,-56}, {-29,-50}, {-29,-49}, {-29,-48}, {-29,-47}, {-29,-37}, {-29,-36}, {-29,-35}, {-29,-34}, {-29,-33}, {-29,-32}, {-29,-31}, {-29,-30}, {-29,142}, {-29,143}, {-29,144}, {-29,145}, {-29,146}, {-29,147}, {-29,148}, {-29,149}, {-29,150}, {-29,151}, {-28,-115}, {-28,-114}, {-28,-87}, {-28,-86}, {-28,-69}, {-28,-68}, {-28,-59}, {-28,-57}, {-28,-56}, {-28,-49}, {-28,-48}, {-28,-47}, {-28,-36}, {-28,-35}, {-28,-34}, {-28,-33}, {-28,-32}, {-28,-31}, {-28,-30}, {-28,142}, {-28,143}, {-28,144}, {-28,145}, {-28,146}, {-28,148}, {-28,149}, {-28,150}, {-28,151}, {-27,-115}, {-27,-114}, {-27,-88}, {-27,-87}, {-27,-86}, {-27,-69}, {-27,-68}, {-27,-60}, {-27,-59}, {-27,-58}, {-27,-57}, {-27,-56}, {-27,-49}, {-27,-48}, {-27,-47}, {-27,-35}, {-27,-34}, {-27,-33}, {-27,-32}, {-27,-31}, {-27,-30}, {-27,150}, {-27,151}, {-26,-115}, {-26,-114}, {-26,-88}, {-26,-87}, {-26,-69}, {-26,-68}, {-26,-59}, {-26,-58}, {-26,-57}, {-26,-56}, {-26,-55}, {-26,-49}, {-26,-48}, {-26,-47}, {-26,-36}, {-26,-35}, {-26,-34}, {-26,-33}, {-26,-32}, {-26,-31}, {-26,-30}, {-26,-29}, {-26,151}, {-26,152}, {-25,-115}, {-25,-114}, {-25,-88}, {-25,-87}, {-25,-69}, {-25,-68}, {-25,-57}, {-25,-56}, {-25,-55}, {-25,-50}, {-25,-49}, {-25,-48}, {-25,-47}, {-25,-36}, {-25,-35}, {-25,-34}, {-25,-33}, {-25,-32}, {-25,-31}, {-25,-30}, {-25,-29}, {-25,151}, {-25,152}, {-24,-115}, {-24,-114}, {-24,-88}, {-24,-87}, {-24,-69}, {-24,-68}, {-24,-57}, {-24,-56}, {-24,-50}, {-24,-49}, {-24,-48}, {-24,-47}, {-24,-37}, {-24,-36}, {-24,-35}, {-24,-34}, {-24,-33}, {-24,-32}, {-24,-31}, {-24,-30}, {-24,-29}, {-24,-28}, {-24,151}, {-24,152}, {-24,153}, {-23,-115}, {-23,-114}, {-23,-89}, {-23,-88}, {-23,-87}, {-23,-70}, {-23,-69}, {-23,-68}, {-23,-57}, {-23,-56}, {-23,-50}, {-23,-49}, {-23,-48}, {-23,-47}, {-23,-38}, {-23,-37}, {-23,-36}, {-23,-35}, {-23,-34}, {-23,-32}, {-23,-31}, {-23,-30}, {-23,-29}, {-23,-28}, {-23,-27}, {-23,152}, {-23,153}, {-22,-115}, {-22,-114}, {-22,-89}, {-22,-88}, {-22,-87}, {-22,-70}, {-22,-69}, {-22,-68}, {-22,-57}, {-22,-56}, {-22,-50}, {-22,-49}, {-22,-48}, {-22,-47}, {-22,-38}, {-22,-37}, {-22,-36}, {-22,-35}, {-22,-31}, {-22,-30}, {-22,-29}, {-22,-28}, {-22,-27}, {-22,-26}, {-22,152}, {-22,153}, {-21,-115}, {-21,-114}, {-21,-89}, {-21,-88}, {-21,-70}, {-21,-69}, {-21,-68}, {-21,-57}, {-21,-56}, {-21,-49}, {-21,-48}, {-21,-47}, {-21,-39}, {-21,-38}, {-21,-37}, {-21,-36}, {-21,-35}, {-21,-30}, {-21,-29}, {-21,-28}, {-21,-27}, {-21,-26}, {-21,-25}, {-21,5}, {-21,6}, {-21,7}, {-21,8}, {-21,9}, {-21,10}, {-21,16}, {-21,17}, {-21,22}, {-21,23}, {-21,24}, {-21,152}, {-21,153}, {-20,-115}, {-20,-114}, {-20,-89}, {-20,-88}, {-20,-70}, {-20,-69}, {-20,-68}, {-20,-57}, {-20,-56}, {-20,-49}, {-20,-48}, {-20,-47}, {-20,-46}, {-20,-39}, {-20,-38}, {-20,-37}, {-20,-36}, {-20,-29}, {-20,-28}, {-20,-27}, {-20,-26}, {-20,-25}, {-20,-24}, {-20,-23}, {-20,-22}, {-20,-21}, {-20,6}, {-20,7}, {-20,8}, {-20,9}, {-20,10}, {-20,11}, {-20,12}, {-20,13}, {-20,14}, {-20,15}, {-20,16}, {-20,17}, {-20,23}, {-20,24}, {-20,152}, {-20,153}, {-19,-115}, {-19,-114}, {-19,-89}, {-19,-88}, {-19,-70}, {-19,-69}, {-19,-68}, {-19,-57}, {-19,-56}, {-19,-48}, {-19,-47}, {-19,-46}, {-19,-39}, {-19,-38}, {-19,-37}, {-19,-36}, {-19,-28}, {-19,-27}, {-19,-26}, {-19,-25}, {-19,-24}, {-19,-23}, {-19,-22}, {-19,-21}, {-19,-20}, {-19,-19}, {-19,-18}, {-19,-17}, {-19,-16}, {-19,-15}, {-19,-14}, {-19,-13}, {-19,-12}, {-19,-11}, {-19,-10}, {-19,-9}, {-19,-8}, {-19,-7}, {-19,-6}, {-19,-5}, {-19,-4}, {-19,8}, {-19,9}, {-19,10}, {-19,11}, {-19,12}, {-19,13}, {-19,14}, {-19,15}, {-19,16}, {-19,23}, {-19,24}, {-19,152}, {-19,153}, {-18,-115}, {-18,-114}, {-18,-113}, {-18,-90}, {-18,-89}, {-18,-88}, {-18,-70}, {-18,-69}, {-18,-68}, {-18,-57}, {-18,-56}, {-18,-48}, {-18,-47}, {-18,-40}, {-18,-39}, {-18,-38}, {-18,-37}, {-18,-27}, {-18,-26}, {-18,-25}, {-18,-24}, {-18,-23}, {-18,-22}, {-18,-21}, {-18,-20}, {-18,-19}, {-18,-18}, {-18,-17}, {-18,-16}, {-18,-15}, {-18,-14}, {-18,-13}, {-18,-12}, {-18,-11}, {-18,-10}, {-18,-9}, {-18,-8}, {-18,-7}, {-18,-6}, {-18,-5}, {-18,-4}, {-18,-3}, {-18,-2}, {-18,-1}, {-18,0}, {-18,1}, {-18,2}, {-18,9}, {-18,10}, {-18,11}, {-18,12}, {-18,13}, {-18,14}, {-18,15}, {-18,23}, {-18,24}, {-18,152}, {-18,153}, {-17,-115}, {-17,-114}, {-17,-113}, {-17,-90}, {-17,-89}, {-17,-88}, {-17,-70}, {-17,-69}, {-17,-57}, {-17,-56}, {-17,-48}, {-17,-47}, {-17,-40}, {-17,-39}, {-17,-38}, {-17,-37}, {-17,-25}, {-17,-24}, {-17,-23}, {-17,-22}, {-17,-15}, {-17,-14}, {-17,-13}, {-17,-12}, {-17,-6}, {-17,-5}, {-17,-4}, {-17,-3}, {-17,-2}, {-17,-1}, {-17,0}, {-17,1}, {-17,2}, {-17,3}, {-17,4}, {-17,5}, {-17,6}, {-17,7}, {-17,8}, {-17,9}, {-17,10}, {-17,11}, {-17,12}, {-17,13}, {-17,14}, {-17,15}, {-17,23}, {-17,24}, {-17,152}, {-17,153}, {-16,-115}, {-16,-114}, {-16,-113}, {-16,-90}, {-16,-89}, {-16,-70}, {-16,-69}, {-16,-57}, {-16,-56}, {-16,-48}, {-16,-47}, {-16,-41}, {-16,-40}, {-16,-39}, {-16,-38}, {-16,-37}, {-16,-24}, {-16,-23}, {-16,-22}, {-16,-21}, {-16,-20}, {-16,-11}, {-16,-10}, {-16,2}, {-16,3}, {-16,4}, {-16,5}, {-16,6}, {-16,7}, {-16,8}, {-16,9}, {-16,10}, {-16,11}, {-16,12}, {-16,13}, {-16,14}, {-16,15}, {-16,16}, {-16,23}, {-16,24}, {-16,152}, {-16,153}, {-15,-115}, {-15,-114}, {-15,-113}, {-15,-90}, {-15,-89}, {-15,-70}, {-15,-69}, {-15,-57}, {-15,-56}, {-15,-48}, {-15,-47}, {-15,-41}, {-15,-40}, {-15,-39}, {-15,-38}, {-15,-23}, {-15,-22}, {-15,-21}, {-15,-20}, {-15,-19}, {-15,-18}, {-15,-15}, {-15,3}, {-15,4}, {-15,5}, {-15,6}, {-15,7}, {-15,8}, {-15,9}, {-15,10}, {-15,11}, {-15,12}, {-15,13}, {-15,14}, {-15,15}, {-15,16}, {-15,17}, {-15,18}, {-15,19}, {-15,23}, {-15,24}, {-15,25}, {-15,152}, {-15,153}, {-14,-115}, {-14,-114}, {-14,-113}, {-14,-112}, {-14,-90}, {-14,-89}, {-14,-70}, {-14,-69}, {-14,-57}, {-14,-56}, {-14,-48}, {-14,-47}, {-14,-41}, {-14,-40}, {-14,-39}, {-14,-21}, {-14,-20}, {-14,-19}, {-14,-18}, {-14,-17}, {-14,-16}, {-14,-15}, {-14,1}, {-14,2}, {-14,3}, {-14,4}, {-14,5}, {-14,6}, {-14,10}, {-14,13}, {-14,14}, {-14,15}, {-14,16}, {-14,17}, {-14,18}, {-14,19}, {-14,20}, {-14,21}, {-14,23}, {-14,24}, {-14,25}, {-14,152}, {-14,153}, {-13,-114}, {-13,-113}, {-13,-112}, {-13,-90}, {-13,-89}, {-13,-70}, {-13,-69}, {-13,-57}, {-13,-56}, {-13,-55}, {-13,-48}, {-13,-47}, {-13,-42}, {-13,-41}, {-13,-40}, {-13,-39}, {-13,-21}, {-13,-20}, {-13,-19}, {-13,-18}, {-13,-17}, {-13,-16}, {-13,-15}, {-13,0}, {-13,1}, {-13,2}, {-13,3}, {-13,4}, {-13,15}, {-13,16}, {-13,17}, {-13,18}, {-13,19}, {-13,20}, {-13,21}, {-13,22}, {-13,23}, {-13,24}, {-13,25}, {-13,26}, {-13,152}, {-13,153}, {-12,-114}, {-12,-113}, {-12,-112}, {-12,-111}, {-12,-90}, {-12,-89}, {-12,-70}, {-12,-69}, {-12,-57}, {-12,-56}, {-12,-55}, {-12,-48}, {-12,-47}, {-12,-42}, {-12,-41}, {-12,-40}, {-12,-18}, {-12,-17}, {-12,-16}, {-12,-15}, {-12,-14}, {-12,-13}, {-12,-12}, {-12,-3}, {-12,-2}, {-12,-1}, {-12,0}, {-12,1}, {-12,2}, {-12,3}, {-12,16}, {-12,17}, {-12,18}, {-12,19}, {-12,20}, {-12,21}, {-12,22}, {-12,23}, {-12,24}, {-12,25}, {-12,26}, {-12,27}, {-12,152}, {-12,153}, {-11,-114}, {-11,-113}, {-11,-112}, {-11,-111}, {-11,-110}, {-11,-90}, {-11,-89}, {-11,-70}, {-11,-69}, {-11,-57}, {-11,-56}, {-11,-55}, {-11,-49}, {-11,-48}, {-11,-47}, {-11,-43}, {-11,-42}, {-11,-41}, {-11,-40}, {-11,-16}, {-11,-15}, {-11,-14}, {-11,-13}, {-11,-12}, {-11,-11}, {-11,-10}, {-11,-9}, {-11,-5}, {-11,-4}, {-11,-3}, {-11,-2}, {-11,-1}, {-11,0}, {-11,1}, {-11,2}, {-11,18}, {-11,19}, {-11,20}, {-11,21}, {-11,22}, {-11,23}, {-11,24}, {-11,25}, {-11,26}, {-11,27}, {-11,28}, {-11,29}, {-11,30}, {-11,152}, {-11,153}, {-10,-114}, {-10,-113}, {-10,-112}, {-10,-111}, {-10,-110}, {-10,-109}, {-10,-91}, {-10,-90}, {-10,-89}, {-10,-70}, {-10,-69}, {-10,-57}, {-10,-56}, {-10,-55}, {-10,-49}, {-10,-48}, {-10,-47}, {-10,-43}, {-10,-42}, {-10,-41}, {-10,-40}, {-10,-13}, {-10,-12}, {-10,-11}, {-10,-10}, {-10,-9}, {-10,-8}, {-10,-7}, {-10,-6}, {-10,-5}, {-10,-4}, {-10,-3}, {-10,-2}, {-10,-1}, {-10,0}, {-10,9}, {-10,10}, {-10,11}, {-10,12}, {-10,13}, {-10,20}, {-10,21}, {-10,22}, {-10,23}, {-10,24}, {-10,25}, {-10,26}, {-10,27}, {-10,28}, {-10,29}, {-10,30}, {-10,152}, {-10,153}, {-9,-114}, {-9,-113}, {-9,-111}, {-9,-110}, {-9,-109}, {-9,-108}, {-9,-92}, {-9,-91}, {-9,-90}, {-9,-89}, {-9,-70}, {-9,-69}, {-9,-57}, {-9,-56}, {-9,-55}, {-9,-49}, {-9,-48}, {-9,-43}, {-9,-42}, {-9,-41}, {-9,-16}, {-9,-15}, {-9,-14}, {-9,-11}, {-9,-10}, {-9,-9}, {-9,-8}, {-9,-7}, {-9,-6}, {-9,-5}, {-9,-4}, {-9,-3}, {-9,-2}, {-9,-1}, {-9,0}, {-9,1}, {-9,2}, {-9,3}, {-9,4}, {-9,5}, {-9,6}, {-9,7}, {-9,8}, {-9,9}, {-9,10}, {-9,11}, {-9,12}, {-9,13}, {-9,14}, {-9,15}, {-9,16}, {-9,17}, {-9,18}, {-9,19}, {-9,20}, {-9,21}, {-9,22}, {-9,23}, {-9,24}, {-9,25}, {-9,26}, {-9,27}, {-9,28}, {-9,29}, {-9,30}, {-9,152}, {-9,153}, {-8,-114}, {-8,-113}, {-8,-110}, {-8,-109}, {-8,-108}, {-8,-107}, {-8,-106}, {-8,-92}, {-8,-91}, {-8,-90}, {-8,-70}, {-8,-69}, {-8,-57}, {-8,-56}, {-8,-55}, {-8,-49}, {-8,-48}, {-8,-44}, {-8,-43}, {-8,-42}, {-8,-19}, {-8,-18}, {-8,-14}, {-8,-11}, {-8,-10}, {-8,-9}, {-8,-8}, {-8,-7}, {-8,-6}, {-8,-5}, {-8,-4}, {-8,-3}, {-8,-2}, {-8,-1}, {-8,0}, {-8,1}, {-8,2}, {-8,3}, {-8,4}, {-8,5}, {-8,6}, {-8,7}, {-8,8}, {-8,9}, {-8,10}, {-8,11}, {-8,12}, {-8,13}, {-8,14}, {-8,15}, {-8,16}, {-8,17}, {-8,18}, {-8,19}, {-8,20}, {-8,21}, {-8,22}, {-8,23}, {-8,24}, {-8,25}, {-8,26}, {-8,27}, {-8,28}, {-8,29}, {-8,30}, {-8,152}, {-8,153}, {-7,-114}, {-7,-113}, {-7,-108}, {-7,-107}, {-7,-106}, {-7,-105}, {-7,-92}, {-7,-91}, {-7,-90}, {-7,-70}, {-7,-69}, {-7,-57}, {-7,-56}, {-7,-55}, {-7,-54}, {-7,-49}, {-7,-48}, {-7,-47}, {-7,-44}, {-7,-43}, {-7,-42}, {-7,-22}, {-7,-20}, {-7,-19}, {-7,-18}, {-7,-17}, {-7,-16}, {-7,-15}, {-7,-14}, {-7,-13}, {-7,-12}, {-7,-11}, {-7,-10}, {-7,-9}, {-7,-8}, {-7,-7}, {-7,-6}, {-7,-5}, {-7,-4}, {-7,-3}, {-7,-2}, {-7,-1}, {-7,0}, {-7,1}, {-7,2}, {-7,3}, {-7,4}, {-7,5}, {-7,6}, {-7,7}, {-7,8}, {-7,9}, {-7,10}, {-7,11}, {-7,12}, {-7,13}, {-7,14}, {-7,15}, {-7,16}, {-7,17}, {-7,18}, {-7,19}, {-7,20}, {-7,21}, {-7,22}, {-7,23}, {-7,24}, {-7,25}, {-7,26}, {-7,27}, {-7,28}, {-7,29}, {-7,30}, {-7,152}, {-7,153}, {-6,-114}, {-6,-113}, {-6,-107}, {-6,-106}, {-6,-105}, {-6,-104}, {-6,-103}, {-6,-93}, {-6,-92}, {-6,-91}, {-6,-90}, {-6,-70}, {-6,-69}, {-6,-57}, {-6,-56}, {-6,-55}, {-6,-54}, {-6,-49}, {-6,-48}, {-6,-47}, {-6,-45}, {-6,-44}, {-6,-43}, {-6,-24}, {-6,-23}, {-6,-22}, {-6,-21}, {-6,-20}, {-6,-19}, {-6,-18}, {-6,-17}, {-6,-16}, {-6,-15}, {-6,-14}, {-6,-13}, {-6,-12}, {-6,-11}, {-6,-10}, {-6,-9}, {-6,-8}, {-6,-7}, {-6,-6}, {-6,-5}, {-6,-4}, {-6,0}, {-6,1}, {-6,2}, {-6,3}, {-6,4}, {-6,5}, {-6,6}, {-6,7}, {-6,8}, {-6,9}, {-6,10}, {-6,11}, {-6,12}, {-6,13}, {-6,14}, {-6,15}, {-6,16}, {-6,17}, {-6,18}, {-6,19}, {-6,20}, {-6,21}, {-6,22}, {-6,27}, {-6,28}, {-6,29}, {-6,30}, {-6,152}, {-6,153}, {-5,-114}, {-5,-113}, {-5,-105}, {-5,-104}, {-5,-103}, {-5,-102}, {-5,-101}, {-5,-93}, {-5,-92}, {-5,-91}, {-5,-90}, {-5,-70}, {-5,-69}, {-5,-57}, {-5,-56}, {-5,-55}, {-5,-54}, {-5,-51}, {-5,-50}, {-5,-49}, {-5,-48}, {-5,-47}, {-5,-45}, {-5,-44}, {-5,-43}, {-5,-27}, {-5,-26}, {-5,-25}, {-5,-24}, {-5,-23}, {-5,-22}, {-5,-21}, {-5,-20}, {-5,-19}, {-5,-18}, {-5,-17}, {-5,-16}, {-5,-15}, {-5,-14}, {-5,-13}, {-5,-12}, {-5,-11}, {-5,-10}, {-5,-9}, {-5,-8}, {-5,4}, {-5,8}, {-5,10}, {-5,11}, {-5,12}, {-5,13}, {-5,14}, {-5,15}, {-5,16}, {-5,17}, {-5,18}, {-5,19}, {-5,21}, {-5,152}, {-5,153}, {-4,-114}, {-4,-113}, {-4,-104}, {-4,-103}, {-4,-102}, {-4,-101}, {-4,-100}, {-4,-93}, {-4,-92}, {-4,-91}, {-4,-90}, {-4,-70}, {-4,-69}, {-4,-58}, {-4,-57}, {-4,-56}, {-4,-55}, {-4,-54}, {-4,-51}, {-4,-50}, {-4,-49}, {-4,-48}, {-4,-47}, {-4,-46}, {-4,-45}, {-4,-44}, {-4,-31}, {-4,-30}, {-4,-29}, {-4,-28}, {-4,-27}, {-4,-26}, {-4,-25}, {-4,-24}, {-4,-23}, {-4,-22}, {-4,-21}, {-4,-20}, {-4,-18}, {-4,-17}, {-4,-16}, {-4,-15}, {-4,-14}, {-4,-13}, {-4,-12}, {-4,-11}, {-4,4}, {-4,5}, {-4,6}, {-4,7}, {-4,8}, {-4,151}, {-4,152}, {-4,153}, {-3,-114}, {-3,-113}, {-3,-102}, {-3,-101}, {-3,-100}, {-3,-99}, {-3,-98}, {-3,-92}, {-3,-91}, {-3,-90}, {-3,-70}, {-3,-69}, {-3,-58}, {-3,-57}, {-3,-56}, {-3,-55}, {-3,-54}, {-3,-51}, {-3,-50}, {-3,-49}, {-3,-48}, {-3,-47}, {-3,-46}, {-3,-45}, {-3,-44}, {-3,-36}, {-3,-35}, {-3,-34}, {-3,-33}, {-3,-32}, {-3,-31}, {-3,-30}, {-3,-29}, {-3,-28}, {-3,-27}, {-3,-26}, {-3,-25}, {-3,-24}, {-3,-23}, {-3,-22}, {-3,-21}, {-3,-20}, {-3,-19}, {-3,-18}, {-3,-17}, {-3,-16}, {-3,151}, {-3,152}, {-3,153}, {-2,-114}, {-2,-113}, {-2,-101}, {-2,-100}, {-2,-99}, {-2,-98}, {-2,-97}, {-2,-96}, {-2,-92}, {-2,-91}, {-2,-90}, {-2,-70}, {-2,-69}, {-2,-58}, {-2,-57}, {-2,-55}, {-2,-54}, {-2,-53}, {-2,-51}, {-2,-50}, {-2,-49}, {-2,-48}, {-2,-47}, {-2,-46}, {-2,-45}, {-2,-38}, {-2,-37}, {-2,-35}, {-2,-34}, {-2,-33}, {-2,-32}, {-2,-31}, {-2,-30}, {-2,-29}, {-2,-28}, {-2,-26}, {-2,-25}, {-2,-24}, {-2,-23}, {-2,-22}, {-2,-21}, {-2,-20}, {-2,-19}, {-2,-18}, {-2,-17}, {-2,151}, {-2,152}, {-1,-114}, {-1,-113}, {-1,-99}, {-1,-98}, {-1,-97}, {-1,-96}, {-1,-95}, {-1,-92}, {-1,-91}, {-1,-90}, {-1,-70}, {-1,-69}, {-1,-58}, {-1,-57}, {-1,-55}, {-1,-54}, {-1,-53}, {-1,-51}, {-1,-50}, {-1,-49}, {-1,-48}, {-1,-47}, {-1,-46}, {-1,-45}, {-1,-38}, {-1,-37}, {-1,-36}, {-1,-35}, {-1,-34}, {-1,-33}, {-1,-32}, {-1,-31}, {-1,-30}, {-1,-27}, {-1,-26}, {-1,-25}, {-1,-24}, {-1,-23}, {-1,-22}, {-1,-21}, {-1,-20}, {-1,151}, {-1,152}, {0,-114}, {0,-113}, {0,-112}, {0,-97}, {0,-96}, {0,-95}, {0,-94}, {0,-93}, {0,-92}, {0,-91}, {0,-90}, {0,-70}, {0,-69}, {0,-58}, {0,-57}, {0,-55}, {0,-54}, {0,-53}, {0,-51}, {0,-50}, {0,-49}, {0,-48}, {0,-47}, {0,-46}, {0,-41}, {0,-40}, {0,-39}, {0,-38}, {0,-37}, {0,-36}, {0,-35}, {0,-34}, {0,-33}, {0,-29}, {0,-28}, {0,-27}, {0,-26}, {0,-25}, {0,-24}, {0,-23}, {0,151}, {0,152}, {1,-114}, {1,-113}, {1,-112}, {1,-96}, {1,-95}, {1,-94}, {1,-93}, {1,-92}, {1,-91}, {1,-90}, {1,-70}, {1,-69}, {1,-58}, {1,-57}, {1,-54}, {1,-53}, {1,-52}, {1,-51}, {1,-50}, {1,-49}, {1,-48}, {1,-47}, {1,-46}, {1,-45}, {1,-44}, {1,-43}, {1,-42}, {1,-41}, {1,-40}, {1,-39}, {1,-38}, {1,-37}, {1,-35}, {1,-31}, {1,-30}, {1,-29}, {1,-28}, {1,-27}, {1,-26}, {1,-25}, {1,-24}, {1,151}, {1,152}, {2,-113}, {2,-112}, {2,-94}, {2,-93}, {2,-92}, {2,-91}, {2,-90}, {2,-70}, {2,-69}, {2,-68}, {2,-58}, {2,-57}, {2,-55}, {2,-54}, {2,-53}, {2,-52}, {2,-51}, {2,-50}, {2,-49}, {2,-48}, {2,-47}, {2,-46}, {2,-45}, {2,-44}, {2,-43}, {2,-42}, {2,-41}, {2,-40}, {2,-39}, {2,-38}, {2,-37}, {2,-33}, {2,-32}, {2,-31}, {2,-30}, {2,-29}, {2,-28}, {2,-27}, {2,150}, {2,151}, {2,152}, {3,-113}, {3,-112}, {3,-93}, {3,-92}, {3,-91}, {3,-70}, {3,-69}, {3,-68}, {3,-59}, {3,-58}, {3,-57}, {3,-56}, {3,-54}, {3,-53}, {3,-52}, {3,-51}, {3,-50}, {3,-49}, {3,-48}, {3,-47}, {3,-46}, {3,-45}, {3,-44}, {3,-43}, {3,-42}, {3,-41}, {3,-40}, {3,-39}, {3,-38}, {3,-37}, {3,-36}, {3,-35}, {3,-34}, {3,-33}, {3,-32}, {3,-31}, {3,-30}, {3,-29}, {3,-28}, {3,150}, {3,151}, {3,152}, {4,-113}, {4,-112}, {4,-92}, {4,-91}, {4,-70}, {4,-69}, {4,-68}, {4,-60}, {4,-59}, {4,-58}, {4,-57}, {4,-56}, {4,-55}, {4,-54}, {4,-53}, {4,-52}, {4,-51}, {4,-50}, {4,-49}, {4,-48}, {4,-47}, {4,-46}, {4,-45}, {4,-43}, {4,-42}, {4,-41}, {4,-36}, {4,-35}, {4,-34}, {4,-33}, {4,-31}, {4,150}, {4,151}, {5,-113}, {5,-112}, {5,-92}, {5,-91}, {5,-90}, {5,-70}, {5,-69}, {5,-68}, {5,-59}, {5,-58}, {5,-57}, {5,-56}, {5,-55}, {5,-54}, {5,-53}, {5,-52}, {5,-51}, {5,-50}, {5,-49}, {5,-48}, {5,-47}, {5,-46}, {5,-45}, {5,-44}, {5,-43}, {5,-38}, {5,-37}, {5,-36}, {5,-35}, {5,-34}, {5,-32}, {5,149}, {5,150}, {5,151}, {6,-113}, {6,-112}, {6,-111}, {6,-92}, {6,-91}, {6,-90}, {6,-70}, {6,-69}, {6,-68}, {6,-57}, {6,-56}, {6,-55}, {6,-54}, {6,-53}, {6,-52}, {6,-51}, {6,-50}, {6,-49}, {6,-48}, {6,-47}, {6,-46}, {6,-44}, {6,-43}, {6,-39}, {6,-38}, {6,-37}, {6,-35}, {6,149}, {6,150}, {6,151}, {7,-113}, {7,-112}, {7,-111}, {7,-110}, {7,-92}, {7,-91}, {7,-90}, {7,-69}, {7,-68}, {7,-56}, {7,-55}, {7,-54}, {7,-53}, {7,-52}, {7,-51}, {7,-50}, {7,-49}, {7,-48}, {7,-44}, {7,-43}, {7,-42}, {7,-40}, {7,-39}, {7,-38}, {7,-37}, {7,149}, {7,150}, {7,151}, {8,-112}, {8,-111}, {8,-110}, {8,-109}, {8,-108}, {8,-107}, {8,-106}, {8,-92}, {8,-91}, {8,-90}, {8,-69}, {8,-68}, {8,-54}, {8,-53}, {8,-52}, {8,-51}, {8,-50}, {8,-49}, {8,-43}, {8,-42}, {8,-41}, {8,-40}, {8,-39}, {8,149}, {8,150}, {9,-111}, {9,-110}, {9,-109}, {9,-108}, {9,-107}, {9,-106}, {9,-105}, {9,-92}, {9,-91}, {9,-90}, {9,-69}, {9,-68}, {9,-52}, {9,-51}, {9,-50}, {9,-43}, {9,-42}, {9,-41}, {9,149}, {9,150}, {10,-107}, {10,-106}, {10,-105}, {10,-104}, {10,-91}, {10,-90}, {10,-89}, {10,-69}, {10,-68}, {10,-51}, {10,-42}, {10,149}, {10,150}, {11,-106}, {11,-105}, {11,-104}, {11,-90}, {11,-89}, {11,-69}, {11,-68}, {11,149}, {11,150}, {12,-105}, {12,-104}, {12,-103}, {12,-90}, {12,-89}, {12,-69}, {12,-68}, {12,148}, {12,149}, {12,150}, {13,-105}, {13,-104}, {13,-103}, {13,-90}, {13,-89}, {13,-69}, {13,-68}, {13,148}, {13,149}, {13,150}, {14,-104}, {14,-103}, {14,-90}, {14,-89}, {14,-69}, {14,-68}, {14,148}, {14,149}, {14,150}, {15,-104}, {15,-103}, {15,-90}, {15,-89}, {15,-70}, {15,-69}, {15,-68}, {15,148}, {15,149}, {15,150}, {16,-104}, {16,-103}, {16,-90}, {16,-89}, {16,-70}, {16,-69}, {16,-68}, {16,-67}, {16,-51}, {16,-23}, {16,-15}, {16,-14}, {16,148}, {16,149}, {16,150}, {17,-104}, {17,-103}, {17,-102}, {17,-90}, {17,-89}, {17,-88}, {17,-70}, {17,-69}, {17,-68}, {17,-67}, {17,-66}, {17,-52}, {17,-51}, {17,-50}, {17,-24}, {17,-23}, {17,-22}, {17,-21}, {17,-20}, {17,-19}, {17,-18}, {17,-17}, {17,-16}, {17,-15}, {17,-14}, {17,147}, {17,148}, {17,149}, {17,150}, {18,-104}, {18,-103}, {18,-102}, {18,-90}, {18,-89}, {18,-88}, {18,-70}, {18,-69}, {18,-67}, {18,-66}, {18,-65}, {18,-64}, {18,-63}, {18,-62}, {18,-61}, {18,-60}, {18,-59}, {18,-58}, {18,-57}, {18,-56}, {18,-55}, {18,-54}, {18,-53}, {18,-52}, {18,-51}, {18,-50}, {18,-49}, {18,-48}, {18,-47}, {18,-46}, {18,-45}, {18,-44}, {18,-43}, {18,-42}, {18,-41}, {18,-40}, {18,-39}, {18,-38}, {18,-27}, {18,-26}, {18,-25}, {18,-24}, {18,-23}, {18,-22}, {18,-21}, {18,-20}, {18,-19}, {18,-18}, {18,-17}, {18,-16}, {18,-15}, {18,-14}, {18,147}, {18,148}, {18,149}, {18,150}, {19,-103}, {19,-102}, {19,-89}, {19,-88}, {19,-70}, {19,-69}, {19,-68}, {19,-67}, {19,-66}, {19,-65}, {19,-64}, {19,-63}, {19,-62}, {19,-61}, {19,-60}, {19,-59}, {19,-58}, {19,-57}, {19,-56}, {19,-55}, {19,-54}, {19,-53}, {19,-52}, {19,-51}, {19,-50}, {19,-49}, {19,-48}, {19,-47}, {19,-46}, {19,-45}, {19,-44}, {19,-43}, {19,-42}, {19,-41}, {19,-40}, {19,-39}, {19,-38}, {19,-37}, {19,-36}, {19,-35}, {19,-34}, {19,-33}, {19,-32}, {19,-31}, {19,-30}, {19,-29}, {19,-28}, {19,-27}, {19,-26}, {19,-25}, {19,-24}, {19,-23}, {19,-22}, {19,-21}, {19,-20}, {19,-19}, {19,-18}, {19,-17}, {19,-16}, {19,-15}, {19,-14}, {19,-13}, {19,-12}, {19,147}, {19,148}, {19,149}, {20,-103}, {20,-102}, {20,-89}, {20,-88}, {20,-70}, {20,-69}, {20,-68}, {20,-67}, {20,-66}, {20,-42}, {20,-41}, {20,-40}, {20,-39}, {20,-38}, {20,-37}, {20,-36}, {20,-35}, {20,-34}, {20,-33}, {20,-32}, {20,-31}, {20,-30}, {20,-29}, {20,-28}, {20,-27}, {20,-26}, {20,-25}, {20,-18}, {20,-17}, {20,-16}, {20,-15}, {20,-14}, {20,-13}, {20,-12}, {20,-11}, {20,147}, {20,148}, {20,149}, {21,-103}, {21,-102}, {21,-89}, {21,-88}, {21,-87}, {21,-70}, {21,-69}, {21,-68}, {21,-41}, {21,-40}, {21,-39}, {21,-38}, {21,-14}, {21,-13}, {21,-12}, {21,-11}, {21,-10}, {21,-9}, {21,-8}, {21,146}, {21,147}, {21,148}, {21,149}, {22,-103}, {22,-102}, {22,-89}, {22,-88}, {22,-87}, {22,-70}, {22,-69}, {22,-40}, {22,-39}, {22,-38}, {22,-12}, {22,-11}, {22,-10}, {22,-9}, {22,-8}, {22,146}, {22,147}, {22,148}, {22,149}, {23,-103}, {23,-102}, {23,-101}, {23,-89}, {23,-88}, {23,-87}, {23,-70}, {23,-69}, {23,-40}, {23,-39}, {23,-38}, {23,-11}, {23,-10}, {23,-9}, {23,-8}, {23,145}, {23,146}, {23,147}, {23,149}, {24,-102}, {24,-101}, {24,-89}, {24,-88}, {24,-87}, {24,-71}, {24,-70}, {24,-69}, {24,-39}, {24,-38}, {24,-37}, {24,-10}, {24,-9}, {24,-8}, {24,145}, {24,146}, {24,147}, {24,149}, {25,-102}, {25,-101}, {25,-89}, {25,-88}, {25,-87}, {25,-71}, {25,-70}, {25,-39}, {25,-38}, {25,-37}, {25,-9}, {25,-8}, {25,144}, {25,145}, {25,146}, {25,148}, {26,-102}, {26,-101}, {26,-90}, {26,-89}, {26,-88}, {26,-87}, {26,-71}, {26,-70}, {26,-38}, {26,-37}, {26,-36}, {26,144}, {26,145}, {26,146}, {26,148}, {27,-102}, {27,-101}, {27,-90}, {27,-89}, {27,-88}, {27,-87}, {27,-86}, {27,-71}, {27,-70}, {27,-38}, {27,-37}, {27,-36}, {27,143}, {27,144}, {27,145}, {27,148}, {28,-102}, {28,-101}, {28,-90}, {28,-89}, {28,-88}, {28,-87}, {28,-86}, {28,-71}, {28,-70}, {28,-37}, {28,-36}, {28,142}, {28,143}, {28,144}, {28,145}, {28,148}, {29,-102}, {29,-101}, {29,-90}, {29,-89}, {29,-88}, {29,-87}, {29,-86}, {29,-71}, {29,-70}, {29,-37}, {29,-36}, {29,-35}, {29,67}, {29,68}, {29,69}, {29,70}, {29,71}, {29,141}, {29,142}, {29,143}, {29,144}, {29,148}, {30,-102}, {30,-101}, {30,-100}, {30,-90}, {30,-89}, {30,-88}, {30,-87}, {30,-86}, {30,-71}, {30,-70}, {30,-37}, {30,-36}, {30,-35}, {30,-9}, {30,-8}, {30,58}, {30,59}, {30,60}, {30,61}, {30,62}, {30,63}, {30,64}, {30,65}, {30,66}, {30,67}, {30,68}, {30,69}, {30,70}, {30,71}, {30,72}, {30,73}, {30,74}, {30,89}, {30,90}, {30,91}, {30,92}, {30,93}, {30,94}, {30,95}, {30,96}, {30,97}, {30,98}, {30,99}, {30,100}, {30,101}, {30,127}, {30,128}, {30,129}, {30,130}, {30,131}, {30,132}, {30,133}, {30,134}, {30,135}, {30,136}, {30,137}, {30,138}, {30,139}, {30,140}, {30,141}, {30,142}, {30,143}, {30,148}, {31,-102}, {31,-101}, {31,-100}, {31,-91}, {31,-90}, {31,-89}, {31,-88}, {31,-87}, {31,-86}, {31,-71}, {31,-70}, {31,-36}, {31,-35}, {31,-34}, {31,-12}, {31,-11}, {31,-10}, {31,-9}, {31,-8}, {31,56}, {31,57}, {31,58}, {31,59}, {31,60}, {31,61}, {31,62}, {31,63}, {31,64}, {31,65}, {31,66}, {31,67}, {31,68}, {31,69}, {31,70}, {31,71}, {31,72}, {31,73}, {31,74}, {31,75}, {31,76}, {31,77}, {31,78}, {31,79}, {31,80}, {31,81}, {31,82}, {31,83}, {31,84}, {31,85}, {31,86}, {31,87}, {31,88}, {31,89}, {31,90}, {31,91}, {31,92}, {31,93}, {31,94}, {31,95}, {31,96}, {31,97}, {31,98}, {31,99}, {31,100}, {31,101}, {31,102}, {31,103}, {31,104}, {31,105}, {31,106}, {31,107}, {31,108}, {31,109}, {31,110}, {31,111}, {31,112}, {31,113}, {31,114}, {31,115}, {31,116}, {31,117}, {31,118}, {31,119}, {31,120}, {31,121}, {31,122}, {31,123}, {31,124}, {31,125}, {31,126}, {31,127}, {31,128}, {31,129}, {31,130}, {31,131}, {31,132}, {31,133}, {31,134}, {31,135}, {31,136}, {31,137}, {31,138}, {31,139}, {31,140}, {31,141}, {31,142}, {31,143}, {31,144}, {31,148}, {32,-101}, {32,-100}, {32,-91}, {32,-90}, {32,-89}, {32,-88}, {32,-87}, {32,-86}, {32,-71}, {32,-70}, {32,-36}, {32,-35}, {32,-34}, {32,-14}, {32,-13}, {32,-12}, {32,-11}, {32,-10}, {32,-9}, {32,-8}, {32,54}, {32,55}, {32,56}, {32,57}, {32,58}, {32,59}, {32,74}, {32,75}, {32,76}, {32,77}, {32,78}, {32,79}, {32,80}, {32,81}, {32,82}, {32,83}, {32,84}, {32,85}, {32,86}, {32,87}, {32,88}, {32,89}, {32,90}, {32,100}, {32,101}, {32,102}, {32,103}, {32,104}, {32,105}, {32,106}, {32,107}, {32,108}, {32,109}, {32,110}, {32,111}, {32,112}, {32,113}, {32,114}, {32,115}, {32,116}, {32,117}, {32,118}, {32,119}, {32,120}, {32,121}, {32,122}, {32,123}, {32,124}, {32,125}, {32,126}, {32,127}, {32,128}, {32,136}, {32,137}, {32,138}, {32,139}, {32,140}, {32,141}, {32,142}, {32,143}, {32,144}, {32,145}, {32,146}, {32,148}, {32,149}, {33,-101}, {33,-100}, {33,-91}, {33,-90}, {33,-87}, {33,-86}, {33,-71}, {33,-70}, {33,-69}, {33,-35}, {33,-34}, {33,-19}, {33,-18}, {33,-16}, {33,-15}, {33,-14}, {33,-13}, {33,-12}, {33,-11}, {33,-8}, {33,53}, {33,54}, {33,55}, {33,56}, {33,57}, {33,144}, {33,145}, {33,146}, {33,147}, {33,148}, {33,149}, {34,-101}, {34,-100}, {34,-92}, {34,-91}, {34,-90}, {34,-87}, {34,-86}, {34,-85}, {34,-70}, {34,-69}, {34,-35}, {34,-34}, {34,-21}, {34,-20}, {34,-19}, {34,-18}, {34,-17}, {34,-16}, {34,-15}, {34,-14}, {34,-13}, {34,-12}, {34,53}, {34,54}, {34,55}, {34,145}, {34,146}, {34,147}, {34,148}, {34,149}, {35,-101}, {35,-100}, {35,-99}, {35,-92}, {35,-91}, {35,-90}, {35,-87}, {35,-86}, {35,-85}, {35,-71}, {35,-70}, {35,-69}, {35,-41}, {35,-35}, {35,-34}, {35,-33}, {35,-25}, {35,-24}, {35,-23}, {35,-22}, {35,-21}, {35,-20}, {35,-19}, {35,-18}, {35,-17}, {35,-16}, {35,-15}, {35,-14}, {35,53}, {35,54}, {35,146}, {35,147}, {35,148}, {36,-101}, {36,-100}, {36,-99}, {36,-93}, {36,-92}, {36,-91}, {36,-86}, {36,-85}, {36,-71}, {36,-70}, {36,-69}, {36,-68}, {36,-67}, {36,-42}, {36,-41}, {36,-40}, {36,-39}, {36,-38}, {36,-37}, {36,-36}, {36,-35}, {36,-34}, {36,-33}, {36,-32}, {36,-31}, {36,-30}, {36,-29}, {36,-28}, {36,-27}, {36,-26}, {36,-25}, {36,-24}, {36,-23}, {36,-22}, {36,-21}, {36,-20}, {36,-19}, {36,-18}, {36,-17}, {36,-16}, {36,-15}, {36,-14}, {36,53}, {36,54}, {36,146}, {36,147}, {36,148}, {37,-100}, {37,-99}, {37,-93}, {37,-92}, {37,-91}, {37,-86}, {37,-85}, {37,-70}, {37,-69}, {37,-68}, {37,-67}, {37,-42}, {37,-41}, {37,-40}, {37,-39}, {37,-38}, {37,-37}, {37,-36}, {37,-35}, {37,-34}, {37,-33}, {37,-32}, {37,-31}, {37,-30}, {37,-29}, {37,-28}, {37,-27}, {37,-26}, {37,-25}, {37,-24}, {37,-23}, {37,-22}, {37,-21}, {37,-20}, {37,-19}, {37,-18}, {37,-17}, {37,53}, {37,54}, {37,147}, {37,148}, {38,-100}, {38,-99}, {38,-93}, {38,-92}, {38,-86}, {38,-85}, {38,-70}, {38,-69}, {38,-68}, {38,-67}, {38,-42}, {38,-41}, {38,-40}, {38,-39}, {38,-38}, {38,-37}, {38,-36}, {38,-35}, {38,-34}, {38,-33}, {38,-32}, {38,-31}, {38,-30}, {38,-29}, {38,-28}, {38,-27}, {38,-26}, {38,-25}, {38,-24}, {38,-23}, {38,-22}, {38,-21}, {38,-20}, {38,-19}, {38,-8}, {38,53}, {38,54}, {38,147}, {38,148}, {39,-100}, {39,-99}, {39,-94}, {39,-93}, {39,-92}, {39,-86}, {39,-85}, {39,-84}, {39,-71}, {39,-70}, {39,-69}, {39,-68}, {39,-67}, {39,-42}, {39,-41}, {39,-40}, {39,-39}, {39,-38}, {39,-37}, {39,-36}, {39,-35}, {39,-34}, {39,-33}, {39,-32}, {39,-31}, {39,-30}, {39,-29}, {39,-28}, {39,-27}, {39,-26}, {39,-25}, {39,-24}, {39,-23}, {39,-22}, {39,-21}, {39,-20}, {39,-19}, {39,-18}, {39,53}, {39,54}, {39,147}, {39,148}, {40,-100}, {40,-99}, {40,-98}, {40,-94}, {40,-93}, {40,-92}, {40,-85}, {40,-84}, {40,-71}, {40,-70}, {40,-33}, {40,-32}, {40,-29}, {40,-28}, {40,-27}, {40,-26}, {40,-25}, {40,-24}, {40,-23}, {40,-22}, {40,-21}, {40,-20}, {40,-19}, {40,-18}, {40,53}, {40,54}, {40,147}, {40,148}, {41,-100}, {41,-99}, {41,-98}, {41,-94}, {41,-93}, {41,-85}, {41,-84}, {41,-71}, {41,-70}, {41,-33}, {41,-32}, {41,-30}, {41,-29}, {41,-28}, {41,-25}, {41,-24}, {41,-23}, {41,-22}, {41,-21}, {41,-20}, {41,-19}, {41,-18}, {41,-17}, {41,-16}, {41,53}, {41,54}, {41,147}, {41,148}, {42,-99}, {42,-98}, {42,-94}, {42,-93}, {42,-85}, {42,-84}, {42,-71}, {42,-70}, {42,-33}, {42,-32}, {42,-31}, {42,-30}, {42,-29}, {42,-28}, {42,-26}, {42,-25}, {42,-24}, {42,-23}, {42,-19}, {42,-18}, {42,-17}, {42,-16}, {42,-15}, {42,-14}, {42,-13}, {42,-8}, {42,53}, {42,54}, {42,147}, {42,148}, {43,-99}, {43,-98}, {43,-94}, {43,-93}, {43,-90}, {43,-85}, {43,-84}, {43,-83}, {43,-71}, {43,-70}, {43,-33}, {43,-32}, {43,-31}, {43,-30}, {43,-29}, {43,-28}, {43,-27}, {43,-26}, {43,-25}, {43,-19}, {43,-18}, {43,-17}, {43,-16}, {43,-15}, {43,-14}, {43,-13}, {43,-12}, {43,-11}, {43,-10}, {43,-8}, {43,53}, {43,54}, {43,147}, {43,148}, {44,-99}, {44,-98}, {44,-95}, {44,-94}, {44,-93}, {44,-89}, {44,-88}, {44,-87}, {44,-86}, {44,-85}, {44,-84}, {44,-83}, {44,-71}, {44,-70}, {44,-33}, {44,-32}, {44,-31}, {44,-30}, {44,-28}, {44,-27}, {44,-26}, {44,-16}, {44,-15}, {44,-14}, {44,-13}, {44,-12}, {44,-11}, {44,-10}, {44,-9}, {44,-8}, {44,53}, {44,54}, {44,147}, {44,148}, {45,-99}, {45,-98}, {45,-97}, {45,-95}, {45,-94}, {45,-93}, {45,-90}, {45,-89}, {45,-88}, {45,-87}, {45,-86}, {45,-85}, {45,-84}, {45,-83}, {45,-71}, {45,-70}, {45,-34}, {45,-33}, {45,-32}, {45,-31}, {45,-29}, {45,-28}, {45,-27}, {45,-14}, {45,-13}, {45,-12}, {45,-11}, {45,-10}, {45,-9}, {45,-8}, {45,53}, {45,54}, {45,147}, {45,148}, {46,-99}, {46,-98}, {46,-97}, {46,-96}, {46,-95}, {46,-94}, {46,-93}, {46,-92}, {46,-91}, {46,-90}, {46,-89}, {46,-88}, {46,-87}, {46,-86}, {46,-85}, {46,-84}, {46,-83}, {46,-82}, {46,-71}, {46,-70}, {46,-33}, {46,-32}, {46,-31}, {46,-30}, {46,-29}, {46,-28}, {46,-14}, {46,-13}, {46,-12}, {46,-11}, {46,-10}, {46,-9}, {46,-8}, {46,53}, {46,54}, {46,147}, {46,148}, {47,-98}, {47,-97}, {47,-96}, {47,-95}, {47,-94}, {47,-93}, {47,-92}, {47,-91}, {47,-90}, {47,-85}, {47,-84}, {47,-83}, {47,-82}, {47,-71}, {47,-70}, {47,-33}, {47,-32}, {47,-31}, {47,-30}, {47,-29}, {47,-28}, {47,-18}, {47,-17}, {47,-16}, {47,-15}, {47,-14}, {47,-13}, {47,-12}, {47,-11}, {47,-10}, {47,53}, {47,54}, {47,147}, {47,148}, {47,149}, {48,-98}, {48,-97}, {48,-96}, {48,-95}, {48,-94}, {48,-93}, {48,-92}, {48,-91}, {48,-84}, {48,-83}, {48,-82}, {48,-71}, {48,-70}, {48,-34}, {48,-33}, {48,-32}, {48,-31}, {48,-30}, {48,-20}, {48,-19}, {48,-18}, {48,-17}, {48,-16}, {48,-15}, {48,-14}, {48,53}, {48,54}, {48,147}, {48,148}, {48,149}, {49,-97}, {49,-96}, {49,-95}, {49,-94}, {49,-93}, {49,-83}, {49,-82}, {49,-81}, {49,-71}, {49,-70}, {49,-34}, {49,-33}, {49,-32}, {49,-31}, {49,-23}, {49,-22}, {49,-21}, {49,-20}, {49,-19}, {49,-18}, {49,53}, {49,54}, {49,147}, {49,148}, {49,149}, {50,-97}, {50,-96}, {50,-95}, {50,-83}, {50,-82}, {50,-81}, {50,-71}, {50,-70}, {50,-35}, {50,-34}, {50,-33}, {50,-32}, {50,-31}, {50,-30}, {50,-25}, {50,-24}, {50,-23}, {50,-22}, {50,-21}, {50,-20}, {50,-8}, {50,53}, {50,54}, {50,147}, {50,148}, {50,149}, {51,-97}, {51,-96}, {51,-95}, {51,-82}, {51,-81}, {51,-71}, {51,-70}, {51,-35}, {51,-34}, {51,-33}, {51,-32}, {51,-31}, {51,-30}, {51,-28}, {51,-27}, {51,-26}, {51,-25}, {51,-24}, {51,-23}, {51,-10}, {51,-9}, {51,-8}, {51,53}, {51,54}, {51,147}, {51,148}, {51,149}, {52,-97}, {52,-96}, {52,-95}, {52,-82}, {52,-81}, {52,-80}, {52,-71}, {52,-70}, {52,-37}, {52,-36}, {52,-35}, {52,-34}, {52,-33}, {52,-31}, {52,-30}, {52,-29}, {52,-28}, {52,-27}, {52,-26}, {52,-25}, {52,-11}, {52,-10}, {52,-9}, {52,-8}, {52,53}, {52,54}, {52,147}, {52,148}, {52,149}, {53,-96}, {53,-82}, {53,-81}, {53,-80}, {53,-71}, {53,-70}, {53,-39}, {53,-38}, {53,-37}, {53,-36}, {53,-35}, {53,-31}, {53,-30}, {53,-29}, {53,-28}, {53,-12}, {53,-11}, {53,-10}, {53,-9}, {53,-8}, {53,53}, {53,54}, {53,147}, {53,148}, {53,149}, {54,-82}, {54,-81}, {54,-80}, {54,-71}, {54,-70}, {54,-69}, {54,-68}, {54,-39}, {54,-38}, {54,-37}, {54,-36}, {54,-33}, {54,-32}, {54,-31}, {54,-30}, {54,-29}, {54,-13}, {54,-12}, {54,-11}, {54,-10}, {54,-9}, {54,-8}, {54,53}, {54,54}, {54,55}, {54,147}, {54,148}, {54,149}, {55,-81}, {55,-80}, {55,-70}, {55,-69}, {55,-68}, {55,-67}, {55,-66}, {55,-42}, {55,-41}, {55,-40}, {55,-39}, {55,-38}, {55,-37}, {55,-36}, {55,-35}, {55,-34}, {55,-33}, {55,-32}, {55,-31}, {55,-30}, {55,-29}, {55,-15}, {55,-14}, {55,-13}, {55,-12}, {55,-11}, {55,-10}, {55,-9}, {55,53}, {55,54}, {55,55}, {55,147}, {55,148}, {55,149}, {56,-81}, {56,-80}, {56,-70}, {56,-69}, {56,-68}, {56,-67}, {56,-66}, {56,-65}, {56,-64}, {56,-63}, {56,-62}, {56,-61}, {56,-60}, {56,-59}, {56,-58}, {56,-57}, {56,-56}, {56,-55}, {56,-54}, {56,-53}, {56,-52}, {56,-51}, {56,-50}, {56,-49}, {56,-48}, {56,-47}, {56,-46}, {56,-45}, {56,-44}, {56,-43}, {56,-42}, {56,-41}, {56,-40}, {56,-39}, {56,-38}, {56,-37}, {56,-36}, {56,-35}, {56,-34}, {56,-33}, {56,-31}, {56,-30}, {56,-29}, {56,-19}, {56,-18}, {56,-17}, {56,-16}, {56,-15}, {56,-14}, {56,-13}, {56,-12}, {56,-11}, {56,-10}, {56,-9}, {56,54}, {56,55}, {56,147}, {56,148}, {56,149}, {57,-81}, {57,-80}, {57,-79}, {57,-70}, {57,-69}, {57,-68}, {57,-67}, {57,-66}, {57,-65}, {57,-64}, {57,-63}, {57,-62}, {57,-61}, {57,-60}, {57,-59}, {57,-58}, {57,-57}, {57,-56}, {57,-55}, {57,-54}, {57,-53}, {57,-52}, {57,-51}, {57,-50}, {57,-49}, {57,-48}, {57,-47}, {57,-46}, {57,-45}, {57,-44}, {57,-43}, {57,-42}, {57,-41}, {57,-40}, {57,-39}, {57,-38}, {57,-37}, {57,-36}, {57,-35}, {57,-34}, {57,-30}, {57,-29}, {57,-20}, {57,-19}, {57,-18}, {57,-10}, {57,-9}, {57,54}, {57,55}, {57,147}, {57,148}, {58,-80}, {58,-79}, {58,-70}, {58,-69}, {58,-68}, {58,-67}, {58,-61}, {58,-60}, {58,-59}, {58,-58}, {58,-57}, {58,-56}, {58,-55}, {58,-38}, {58,-37}, {58,-36}, {58,-35}, {58,-10}, {58,-9}, {58,54}, {58,55}, {58,147}, {58,148}, {59,-80}, {59,-79}, {59,-78}, {59,-70}, {59,-69}, {59,-60}, {59,-10}, {59,-9}, {59,53}, {59,54}, {59,55}, {59,147}, {59,148}, {59,149}, {60,-80}, {60,-79}, {60,-78}, {60,-70}, {60,-69}, {60,53}, {60,54}, {60,55}, {60,148}, {60,149}, {61,-80}, {61,-79}, {61,-78}, {61,-69}, {61,53}, {61,54}, {61,148}, {61,149}, {62,-79}, {62,-78}, {62,-77}, {62,-69}, {62,53}, {62,54}, {62,148}, {62,149}, {63,-79}, {63,-78}, {63,-77}, {63,-69}, {63,53}, {63,54}, {63,148}, {63,149}, {64,-78}, {64,-77}, {64,-70}, {64,-69}, {64,53}, {64,54}, {64,148}, {64,149}, {65,-78}, {65,-77}, {65,-70}, {65,-69}, {65,53}, {65,54}, {65,148}, {65,149}, {66,-79}, {66,-78}, {66,-77}, {66,-70}, {66,-69}, {66,53}, {66,54}, {66,148}, {66,149}, {67,-79}, {67,-78}, {67,-77}, {67,-76}, {67,-70}, {67,-69}, {67,53}, {67,54}, {67,148}, {67,149}, {68,-78}, {68,-77}, {68,-76}, {68,-75}, {68,-70}, {68,-69}, {68,53}, {68,54}, {68,148}, {68,149}, {69,-77}, {69,-76}, {69,-75}, {69,-74}, {69,-71}, {69,-70}, {69,-69}, {69,-68}, {69,-67}, {69,53}, {69,54}, {69,148}, {69,149}, {70,-76}, {70,-75}, {70,-74}, {70,-73}, {70,-72}, {70,-71}, {70,-70}, {70,-69}, {70,-68}, {70,-67}, {70,-66}, {70,53}, {70,54}, {70,55}, {70,148}, {70,149}, {71,-75}, {71,-74}, {71,-73}, {71,-72}, {71,-71}, {71,-70}, {71,-69}, {71,-68}, {71,-67}, {71,54}, {71,55}, {71,148}, {71,149}, {72,-75}, {72,-74}, {72,-73}, {72,54}, {72,55}, {72,148}, {72,149}, {73,-74}, {73,-73}, {73,-72}, {73,54}, {73,55}, {73,148}, {73,149}, {74,-73}, {74,-72}, {74,54}, {74,55}, {74,148}, {74,149}, {75,-73}, {75,-72}, {75,-71}, {75,54}, {75,55}, {75,148}, {75,149}, {76,-73}, {76,-72}, {76,-71}, {76,54}, {76,55}, {76,148}, {76,149}, {77,-72}, {77,-71}, {77,-70}, {77,-69}, {77,54}, {77,55}, {77,56}, {77,148}, {77,149}, {78,-71}, {78,-70}, {78,-69}, {78,-68}, {78,54}, {78,55}, {78,56}, {78,57}, {78,148}, {78,149}, {79,-71}, {79,-70}, {79,-69}, {79,-68}, {79,-67}, {79,-66}, {79,54}, {79,55}, {79,56}, {79,148}, {79,149}, {80,-70}, {80,-69}, {80,-68}, {80,-67}, {80,-66}, {80,53}, {80,54}, {80,55}, {80,148}, {80,149}, {81,-68}, {81,-67}, {81,-66}, {81,53}, {81,54}, {81,55}, {81,148}, {81,149}, {82,-68}, {82,-67}, {82,-66}, {82,53}, {82,54}, {82,148}, {82,149}, {83,-66}, {83,-30}, {83,-14}, {83,53}, {83,54}, {83,148}, {83,149}, {84,-66}, {84,-31}, {84,-30}, {84,-29}, {84,-16}, {84,-15}, {84,-14}, {84,-13}, {84,-12}, {84,-11}, {84,4}, {84,5}, {84,6}, {84,7}, {84,53}, {84,54}, {84,148}, {84,149}, {85,-30}, {85,-29}, {85,-28}, {85,-27}, {85,-18}, {85,-17}, {85,-16}, {85,-15}, {85,-14}, {85,-13}, {85,-12}, {85,-11}, {85,-10}, {85,0}, {85,1}, {85,2}, {85,3}, {85,4}, {85,5}, {85,6}, {85,7}, {85,8}, {85,9}, {85,10}, {85,11}, {85,12}, {85,13}, {85,14}, {85,15}, {85,16}, {85,17}, {85,18}, {85,19}, {85,20}, {85,21}, {85,22}, {85,23}, {85,24}, {85,25}, {85,26}, {85,27}, {85,28}, {85,29}, {85,42}, {85,43}, {85,44}, {85,45}, {85,46}, {85,47}, {85,48}, {85,49}, {85,50}, {85,51}, {85,52}, {85,53}, {85,54}, {85,55}, {85,148}, {85,149}, {86,-29}, {86,-28}, {86,-27}, {86,-26}, {86,-25}, {86,-24}, {86,-23}, {86,-22}, {86,-21}, {86,-20}, {86,-19}, {86,-18}, {86,-17}, {86,-16}, {86,-15}, {86,-14}, {86,-12}, {86,-11}, {86,-10}, {86,-9}, {86,-8}, {86,-7}, {86,-6}, {86,-5}, {86,-4}, {86,-3}, {86,-2}, {86,-1}, {86,0}, {86,1}, {86,2}, {86,3}, {86,4}, {86,5}, {86,6}, {86,7}, {86,8}, {86,9}, {86,10}, {86,11}, {86,12}, {86,13}, {86,14}, {86,15}, {86,16}, {86,17}, {86,18}, {86,19}, {86,20}, {86,21}, {86,22}, {86,23}, {86,24}, {86,25}, {86,26}, {86,27}, {86,28}, {86,29}, {86,30}, {86,31}, {86,32}, {86,33}, {86,34}, {86,35}, {86,36}, {86,37}, {86,38}, {86,39}, {86,40}, {86,41}, {86,42}, {86,43}, {86,44}, {86,45}, {86,46}, {86,47}, {86,48}, {86,49}, {86,50}, {86,51}, {86,52}, {86,53}, {86,54}, {86,55}, {86,93}, {86,94}, {86,148}, {86,149}, {87,-27}, {87,-26}, {87,-25}, {87,-24}, {87,-23}, {87,-22}, {87,-21}, {87,-20}, {87,-19}, {87,-18}, {87,-17}, {87,-16}, {87,-11}, {87,-10}, {87,-9}, {87,-8}, {87,-7}, {87,-6}, {87,-5}, {87,-4}, {87,-3}, {87,-2}, {87,-1}, {87,0}, {87,1}, {87,28}, {87,29}, {87,30}, {87,31}, {87,32}, {87,33}, {87,34}, {87,35}, {87,36}, {87,37}, {87,38}, {87,39}, {87,40}, {87,41}, {87,42}, {87,43}, {87,53}, {87,54}, {87,55}, {87,56}, {87,93}, {87,94}, {87,95}, {87,96}, {87,147}, {87,148}, {87,149}, {88,54}, {88,55}, {88,56}, {88,57}, {88,58}, {88,63}, {88,64}, {88,65}, {88,66}, {88,75}, {88,76}, {88,77}, {88,78}, {88,79}, {88,91}, {88,92}, {88,93}, {88,94}, {88,95}, {88,96}, {88,97}, {88,98}, {88,99}, {88,113}, {88,114}, {88,115}, {88,116}, {88,117}, {88,118}, {88,119}, {88,120}, {88,121}, {88,122}, {88,123}, {88,124}, {88,125}, {88,126}, {88,143}, {88,144}, {88,145}, {88,146}, {88,147}, {88,148}, {88,149}, {89,55}, {89,56}, {89,57}, {89,58}, {89,59}, {89,60}, {89,61}, {89,62}, {89,63}, {89,64}, {89,65}, {89,66}, {89,67}, {89,68}, {89,69}, {89,70}, {89,71}, {89,72}, {89,73}, {89,74}, {89,75}, {89,76}, {89,77}, {89,78}, {89,79}, {89,80}, {89,81}, {89,82}, {89,83}, {89,84}, {89,85}, {89,86}, {89,87}, {89,88}, {89,89}, {89,90}, {89,91}, {89,92}, {89,93}, {89,94}, {89,95}, {89,96}, {89,97}, {89,98}, {89,99}, {89,100}, {89,101}, {89,102}, {89,103}, {89,104}, {89,105}, {89,106}, {89,107}, {89,108}, {89,109}, {89,110}, {89,111}, {89,112}, {89,113}, {89,114}, {89,115}, {89,116}, {89,117}, {89,118}, {89,119}, {89,120}, {89,121}, {89,122}, {89,123}, {89,124}, {89,125}, {89,126}, {89,127}, {89,128}, {89,129}, {89,130}, {89,131}, {89,132}, {89,133}, {89,134}, {89,135}, {89,136}, {89,137}, {89,138}, {89,139}, {89,140}, {89,141}, {89,142}, {89,143}, {89,144}, {89,145}, {89,146}, {89,147}, {89,148}, {89,149}, {89,150}, {89,151}, {90,57}, {90,58}, {90,59}, {90,60}, {90,61}, {90,62}, {90,63}, {90,65}, {90,66}, {90,67}, {90,68}, {90,69}, {90,70}, {90,71}, {90,72}, {90,73}, {90,74}, {90,75}, {90,76}, {90,78}, {90,79}, {90,80}, {90,81}, {90,82}, {90,83}, {90,84}, {90,85}, {90,86}, {90,87}, {90,88}, {90,89}, {90,90}, {90,91}, {90,92}, {90,93}, {90,94}, {90,96}, {90,97}, {90,98}, {90,99}, {90,100}, {90,101}, {90,102}, {90,103}, {90,104}, {90,105}, {90,106}, {90,107}, {90,108}, {90,109}, {90,110}, {90,111}, {90,112}, {90,113}, {90,125}, {90,126}, {90,127}, {90,128}, {90,129}, {90,130}, {90,131}, {90,132}, {90,133}, {90,134}, {90,135}, {90,136}, {90,137}, {90,138}, {90,139}, {90,140}, {90,141}, {90,142}, {90,143}, {90,144}, {90,145}, {90,148}, {90,149}, {90,150}, {90,151}, {91,148}, {91,149}, {91,150}, {91,151}, }, + ["mineral-beige-dirt-5"] = {{-93,-23}, {-93,-22}, {-93,-21}, {-93,-20}, {-93,-19}, {-93,-18}, {-93,-17}, {-93,-16}, {-93,-15}, {-93,-14}, {-93,-13}, {-92,-18}, {-92,-17}, {-92,-16}, {-92,-15}, {-92,-14}, {-92,7}, {-91,-18}, {-91,-17}, {-91,-16}, {-91,-15}, {-91,6}, {-90,-18}, {-90,-17}, {-88,33}, {-88,34}, {-87,39}, {-83,60}, {-82,60}, {-82,61}, {-82,62}, {-81,61}, {-81,62}, {-81,63}, {-4,-19}, {-2,-27}, {-1,-29}, {-1,-28}, {0,-32}, {0,-31}, {0,-30}, {1,-36}, {1,-34}, {1,-33}, {1,-32}, {2,-36}, {2,-35}, {2,-34}, {6,-59}, {6,-58}, {7,-59}, {7,-58}, {7,-57}, {8,-59}, {8,-58}, {8,-57}, {8,-56}, {8,-55}, {9,-57}, {9,-56}, {9,-55}, {9,-54}, {9,-53}, {17,-49}, {17,-48}, {17,-47}, {17,-46}, {17,-45}, {17,-44}, {17,-43}, {17,-42}, {17,-41}, {17,-40}, {17,-39}, {17,-38}, {17,-37}, {17,-36}, {17,-35}, {17,-34}, {17,-33}, {17,-32}, {17,-31}, {17,-30}, {17,-29}, {17,-28}, {17,-27}, {17,-26}, {17,-25}, {18,-37}, {18,-36}, {18,-35}, {18,-34}, {18,-33}, {18,-32}, {18,-31}, {18,-30}, {18,-29}, {18,-28}, {23,148}, {24,148}, {25,147}, {26,147}, {27,146}, {31,147}, {32,147}, {56,-32}, {57,-33}, {57,-32}, {57,-31}, }, + ["concrete"] = {{-93,31}, {-93,32}, {-93,33}, {-93,34}, {-93,35}, {-93,36}, {-93,37}, {-93,38}, {-93,39}, {-92,-27}, {-92,-26}, {-92,-25}, {-92,-24}, {-92,-23}, {-92,-22}, {-92,-21}, {-92,-20}, {-92,-19}, {-92,31}, {-92,32}, {-92,33}, {-92,34}, {-92,35}, {-92,36}, {-92,37}, {-92,38}, {-92,39}, {-91,-27}, {-91,-26}, {-91,-25}, {-91,-24}, {-91,-23}, {-91,-22}, {-91,-21}, {-91,-20}, {-91,-19}, {-91,31}, {-91,32}, {-91,33}, {-91,34}, {-91,35}, {-91,36}, {-91,37}, {-91,38}, {-91,39}, {-90,-27}, {-90,-26}, {-90,-25}, {-90,-24}, {-90,-23}, {-90,-22}, {-90,-21}, {-90,-20}, {-90,-19}, {-87,-10}, {-87,-9}, {-87,-8}, {-87,-7}, {-87,-6}, {-87,-5}, {-87,-4}, {-87,-3}, {-87,-2}, {-87,-1}, {-87,0}, {-87,1}, {-87,2}, {-87,3}, {-87,4}, {-87,5}, {-87,6}, {-87,7}, {-87,8}, {-87,9}, {-87,10}, {-87,11}, {-87,12}, {-87,13}, {-87,14}, {-87,15}, {-87,16}, {-87,17}, {-87,18}, {-87,19}, {-87,20}, {-87,21}, {-87,22}, {-86,-11}, {-86,-10}, {-86,-9}, {-86,-8}, {-86,-5}, {-86,-4}, {-86,-3}, {-86,0}, {-86,1}, {-86,2}, {-86,5}, {-86,6}, {-86,7}, {-86,10}, {-86,11}, {-86,12}, {-86,15}, {-86,16}, {-86,17}, {-86,20}, {-86,21}, {-86,22}, {-86,23}, {-86,53}, {-86,54}, {-86,55}, {-86,56}, {-86,57}, {-85,-11}, {-85,-10}, {-85,-9}, {-85,-8}, {-85,-5}, {-85,-4}, {-85,-3}, {-85,0}, {-85,1}, {-85,2}, {-85,5}, {-85,6}, {-85,7}, {-85,10}, {-85,11}, {-85,12}, {-85,15}, {-85,16}, {-85,17}, {-85,20}, {-85,21}, {-85,22}, {-85,23}, {-85,52}, {-85,53}, {-85,54}, {-85,55}, {-85,56}, {-85,57}, {-85,58}, {-84,-11}, {-84,-10}, {-84,-9}, {-84,-8}, {-84,-7}, {-84,-6}, {-84,-5}, {-84,-4}, {-84,-3}, {-84,-2}, {-84,-1}, {-84,0}, {-84,1}, {-84,2}, {-84,3}, {-84,4}, {-84,5}, {-84,6}, {-84,7}, {-84,8}, {-84,9}, {-84,10}, {-84,11}, {-84,12}, {-84,13}, {-84,14}, {-84,15}, {-84,16}, {-84,17}, {-84,18}, {-84,19}, {-84,20}, {-84,21}, {-84,22}, {-84,23}, {-84,52}, {-84,55}, {-84,57}, {-84,94}, {-84,95}, {-83,-11}, {-83,-10}, {-83,-9}, {-83,-8}, {-83,-7}, {-83,-6}, {-83,-5}, {-83,-4}, {-83,-3}, {-83,-2}, {-83,-1}, {-83,0}, {-83,1}, {-83,2}, {-83,3}, {-83,4}, {-83,5}, {-83,6}, {-83,7}, {-83,8}, {-83,9}, {-83,10}, {-83,11}, {-83,12}, {-83,13}, {-83,14}, {-83,15}, {-83,16}, {-83,17}, {-83,18}, {-83,19}, {-83,20}, {-83,21}, {-83,22}, {-83,23}, {-83,24}, {-83,51}, {-83,52}, {-83,94}, {-83,95}, {-82,-11}, {-82,-10}, {-82,-9}, {-82,-8}, {-82,-7}, {-82,-6}, {-82,-5}, {-82,-4}, {-82,-3}, {-82,-2}, {-82,-1}, {-82,0}, {-82,1}, {-82,2}, {-82,3}, {-82,4}, {-82,5}, {-82,6}, {-82,7}, {-82,8}, {-82,9}, {-82,10}, {-82,11}, {-82,12}, {-82,13}, {-82,14}, {-82,15}, {-82,16}, {-82,17}, {-82,18}, {-82,19}, {-82,20}, {-82,21}, {-82,22}, {-82,23}, {-82,51}, {-82,52}, {-82,94}, {-82,95}, {-81,-11}, {-81,-10}, {-81,-9}, {-81,-8}, {-81,-5}, {-81,-4}, {-81,-3}, {-81,0}, {-81,1}, {-81,2}, {-81,5}, {-81,6}, {-81,7}, {-81,10}, {-81,11}, {-81,12}, {-81,15}, {-81,16}, {-81,17}, {-81,20}, {-81,21}, {-81,22}, {-81,23}, {-81,51}, {-81,52}, {-81,69}, {-81,70}, {-81,71}, {-81,73}, {-81,74}, {-81,75}, {-81,76}, {-81,77}, {-81,78}, {-81,79}, {-81,80}, {-81,81}, {-81,82}, {-81,83}, {-81,84}, {-81,85}, {-81,86}, {-81,87}, {-81,88}, {-81,89}, {-81,90}, {-81,92}, {-81,93}, {-81,94}, {-81,95}, {-80,-11}, {-80,-10}, {-80,-9}, {-80,-8}, {-80,-5}, {-80,-4}, {-80,-3}, {-80,0}, {-80,1}, {-80,2}, {-80,5}, {-80,6}, {-80,7}, {-80,10}, {-80,11}, {-80,12}, {-80,15}, {-80,16}, {-80,17}, {-80,20}, {-80,21}, {-80,22}, {-80,23}, {-80,51}, {-80,52}, {-80,69}, {-80,70}, {-80,71}, {-80,73}, {-80,74}, {-80,75}, {-80,76}, {-80,77}, {-80,78}, {-80,79}, {-80,80}, {-80,81}, {-80,82}, {-80,83}, {-80,84}, {-80,85}, {-80,86}, {-80,87}, {-80,88}, {-80,89}, {-80,90}, {-80,92}, {-80,93}, {-80,94}, {-80,95}, {-80,115}, {-80,116}, {-80,117}, {-79,-11}, {-79,-10}, {-79,-9}, {-79,-8}, {-79,-7}, {-79,-6}, {-79,-5}, {-79,-4}, {-79,-3}, {-79,-2}, {-79,-1}, {-79,0}, {-79,1}, {-79,2}, {-79,3}, {-79,4}, {-79,5}, {-79,6}, {-79,7}, {-79,8}, {-79,9}, {-79,10}, {-79,11}, {-79,12}, {-79,13}, {-79,14}, {-79,15}, {-79,16}, {-79,17}, {-79,18}, {-79,19}, {-79,20}, {-79,21}, {-79,22}, {-79,23}, {-79,69}, {-79,70}, {-79,93}, {-79,94}, {-79,95}, {-79,115}, {-79,116}, {-79,117}, {-78,-11}, {-78,-10}, {-78,-9}, {-78,-8}, {-78,-7}, {-78,-6}, {-78,-5}, {-78,-4}, {-78,-3}, {-78,-2}, {-78,-1}, {-78,0}, {-78,1}, {-78,2}, {-78,3}, {-78,4}, {-78,5}, {-78,6}, {-78,7}, {-78,8}, {-78,9}, {-78,10}, {-78,11}, {-78,12}, {-78,13}, {-78,14}, {-78,15}, {-78,16}, {-78,17}, {-78,18}, {-78,19}, {-78,20}, {-78,21}, {-78,22}, {-78,23}, {-78,68}, {-78,69}, {-78,70}, {-78,93}, {-78,94}, {-78,95}, {-78,115}, {-78,116}, {-78,117}, {-77,-11}, {-77,-10}, {-77,-9}, {-77,-8}, {-77,-7}, {-77,-6}, {-77,-5}, {-77,-4}, {-77,-3}, {-77,-2}, {-77,-1}, {-77,0}, {-77,1}, {-77,2}, {-77,3}, {-77,4}, {-77,5}, {-77,6}, {-77,7}, {-77,8}, {-77,9}, {-77,10}, {-77,11}, {-77,12}, {-77,13}, {-77,14}, {-77,15}, {-77,16}, {-77,17}, {-77,18}, {-77,19}, {-77,20}, {-77,21}, {-77,22}, {-77,23}, {-77,24}, {-77,68}, {-77,69}, {-77,70}, {-77,93}, {-77,94}, {-77,95}, {-77,114}, {-77,115}, {-77,116}, {-77,117}, {-76,-11}, {-76,-10}, {-76,-9}, {-76,-8}, {-76,-7}, {-76,-6}, {-76,-5}, {-76,-4}, {-76,-3}, {-76,-2}, {-76,-1}, {-76,0}, {-76,1}, {-76,2}, {-76,3}, {-76,4}, {-76,5}, {-76,6}, {-76,7}, {-76,8}, {-76,9}, {-76,10}, {-76,11}, {-76,12}, {-76,13}, {-76,14}, {-76,15}, {-76,16}, {-76,17}, {-76,18}, {-76,19}, {-76,20}, {-76,21}, {-76,22}, {-76,23}, {-76,41}, {-76,42}, {-76,69}, {-76,70}, {-76,93}, {-76,94}, {-76,95}, {-76,115}, {-76,116}, {-76,117}, {-76,120}, {-76,121}, {-76,122}, {-76,123}, {-76,124}, {-75,5}, {-75,6}, {-75,7}, {-75,68}, {-75,69}, {-75,70}, {-75,93}, {-75,94}, {-75,95}, {-75,115}, {-75,116}, {-75,117}, {-75,120}, {-75,121}, {-75,122}, {-75,123}, {-75,124}, {-74,68}, {-74,69}, {-74,70}, {-74,93}, {-74,94}, {-74,95}, {-74,115}, {-74,116}, {-74,117}, {-74,120}, {-74,121}, {-74,122}, {-74,123}, {-74,124}, {-73,-22}, {-73,-16}, {-73,68}, {-73,69}, {-73,70}, {-73,93}, {-73,94}, {-73,95}, {-73,115}, {-73,116}, {-73,117}, {-73,120}, {-73,121}, {-73,122}, {-73,123}, {-73,124}, {-72,-26}, {-72,-25}, {-72,-24}, {-72,-23}, {-72,-22}, {-72,-21}, {-72,-20}, {-72,-19}, {-72,-18}, {-72,-17}, {-72,-16}, {-72,-15}, {-72,68}, {-72,69}, {-72,70}, {-72,93}, {-72,94}, {-72,95}, {-72,115}, {-72,116}, {-72,117}, {-72,120}, {-72,121}, {-72,122}, {-72,123}, {-72,124}, {-71,-26}, {-71,-25}, {-71,-24}, {-71,-23}, {-71,-22}, {-71,-21}, {-71,-20}, {-71,-19}, {-71,-18}, {-71,-17}, {-71,-16}, {-71,-15}, {-71,68}, {-71,69}, {-71,70}, {-71,93}, {-71,94}, {-71,95}, {-71,115}, {-71,116}, {-71,117}, {-71,120}, {-71,121}, {-71,122}, {-71,123}, {-71,124}, {-70,-26}, {-70,-25}, {-70,-24}, {-70,-23}, {-70,-22}, {-70,-21}, {-70,-20}, {-70,-19}, {-70,-18}, {-70,-17}, {-70,-16}, {-70,-15}, {-70,68}, {-70,69}, {-70,70}, {-70,93}, {-70,94}, {-70,95}, {-70,115}, {-70,116}, {-70,117}, {-70,120}, {-70,121}, {-70,122}, {-70,123}, {-70,124}, {-69,-26}, {-69,-25}, {-69,-24}, {-69,-23}, {-69,-22}, {-69,-21}, {-69,-20}, {-69,-19}, {-69,-18}, {-69,-17}, {-69,-16}, {-69,-15}, {-69,68}, {-69,69}, {-69,70}, {-69,93}, {-69,94}, {-69,95}, {-69,115}, {-69,116}, {-69,117}, {-69,120}, {-69,121}, {-69,122}, {-69,123}, {-69,124}, {-68,-26}, {-68,-23}, {-68,-22}, {-68,-21}, {-68,-18}, {-68,-17}, {-68,-16}, {-68,-15}, {-68,41}, {-68,68}, {-68,69}, {-68,70}, {-68,93}, {-68,94}, {-68,95}, {-68,115}, {-68,116}, {-68,117}, {-68,120}, {-68,121}, {-68,122}, {-68,123}, {-68,124}, {-67,-26}, {-67,-23}, {-67,-22}, {-67,-21}, {-67,-18}, {-67,-17}, {-67,-16}, {-67,-15}, {-67,68}, {-67,69}, {-67,70}, {-67,93}, {-67,94}, {-67,95}, {-67,115}, {-67,116}, {-67,117}, {-67,120}, {-67,121}, {-67,122}, {-67,123}, {-67,124}, {-66,-26}, {-66,-25}, {-66,-24}, {-66,-23}, {-66,-22}, {-66,-21}, {-66,-20}, {-66,-19}, {-66,-18}, {-66,-17}, {-66,-16}, {-66,-15}, {-66,69}, {-66,70}, {-66,93}, {-66,94}, {-66,95}, {-66,115}, {-66,116}, {-66,117}, {-65,-26}, {-65,-25}, {-65,-24}, {-65,-23}, {-65,-22}, {-65,-21}, {-65,-20}, {-65,-19}, {-65,-18}, {-65,-17}, {-65,-16}, {-65,-15}, {-65,68}, {-65,69}, {-65,70}, {-65,93}, {-65,94}, {-65,95}, {-65,116}, {-64,-26}, {-64,-25}, {-64,-24}, {-64,-23}, {-64,-22}, {-64,-21}, {-64,-20}, {-64,-19}, {-64,-18}, {-64,-17}, {-64,-16}, {-64,-15}, {-64,68}, {-64,69}, {-64,70}, {-64,71}, {-64,73}, {-64,74}, {-64,75}, {-64,76}, {-64,77}, {-64,78}, {-64,79}, {-64,80}, {-64,81}, {-64,82}, {-64,83}, {-64,84}, {-64,85}, {-64,86}, {-64,87}, {-64,88}, {-64,89}, {-64,90}, {-64,92}, {-64,93}, {-64,94}, {-64,95}, {-63,-26}, {-63,-23}, {-63,-22}, {-63,-21}, {-63,-18}, {-63,-17}, {-63,-16}, {-63,-15}, {-63,69}, {-63,70}, {-63,71}, {-63,73}, {-63,74}, {-63,75}, {-63,76}, {-63,77}, {-63,78}, {-63,79}, {-63,80}, {-63,81}, {-63,82}, {-63,83}, {-63,84}, {-63,85}, {-63,86}, {-63,87}, {-63,88}, {-63,89}, {-63,90}, {-63,92}, {-63,93}, {-63,94}, {-63,95}, {-62,-26}, {-62,-23}, {-62,-22}, {-62,-21}, {-62,-18}, {-62,-17}, {-62,-16}, {-62,-15}, {-62,81}, {-62,82}, {-62,94}, {-62,95}, {-61,-26}, {-61,-25}, {-61,-24}, {-61,-23}, {-61,-22}, {-61,-21}, {-61,-20}, {-61,-19}, {-61,-18}, {-61,-17}, {-61,-16}, {-61,-15}, {-61,-14}, {-61,37}, {-61,42}, {-61,54}, {-61,55}, {-61,57}, {-61,58}, {-61,59}, {-61,60}, {-61,61}, {-61,62}, {-61,63}, {-61,65}, {-61,66}, {-61,67}, {-61,68}, {-61,69}, {-61,70}, {-61,71}, {-60,-26}, {-60,-25}, {-60,-24}, {-60,-23}, {-60,-22}, {-60,-21}, {-60,-20}, {-60,-19}, {-60,-18}, {-60,-17}, {-60,-16}, {-60,-15}, {-60,-14}, {-60,25}, {-60,42}, {-60,53}, {-60,54}, {-60,55}, {-60,57}, {-60,58}, {-60,59}, {-60,60}, {-60,61}, {-60,62}, {-60,63}, {-60,65}, {-60,66}, {-60,67}, {-60,68}, {-60,69}, {-60,70}, {-60,71}, {-59,-26}, {-59,-25}, {-59,-24}, {-59,-23}, {-59,-22}, {-59,-21}, {-59,-20}, {-59,-19}, {-59,-18}, {-59,-17}, {-59,-16}, {-59,-15}, {-59,-14}, {-59,42}, {-59,43}, {-59,52}, {-59,53}, {-59,54}, {-59,55}, {-59,57}, {-59,58}, {-59,59}, {-59,60}, {-59,61}, {-59,62}, {-59,63}, {-59,65}, {-59,66}, {-59,67}, {-59,68}, {-59,69}, {-59,70}, {-59,71}, {-58,-26}, {-58,-23}, {-58,-22}, {-58,-21}, {-58,-18}, {-58,-17}, {-58,-16}, {-58,-15}, {-58,42}, {-58,43}, {-58,44}, {-58,51}, {-58,52}, {-58,53}, {-58,54}, {-58,55}, {-58,57}, {-58,58}, {-58,59}, {-58,60}, {-58,61}, {-58,62}, {-58,63}, {-58,65}, {-58,66}, {-58,67}, {-58,68}, {-58,69}, {-58,70}, {-58,71}, {-57,-26}, {-57,-23}, {-57,-22}, {-57,-21}, {-57,-18}, {-57,-17}, {-57,-16}, {-57,-15}, {-57,42}, {-57,43}, {-57,44}, {-57,45}, {-57,47}, {-57,48}, {-57,49}, {-57,50}, {-57,51}, {-57,52}, {-57,53}, {-57,54}, {-57,66}, {-57,67}, {-57,68}, {-57,69}, {-57,70}, {-57,71}, {-56,-26}, {-56,-25}, {-56,-24}, {-56,-23}, {-56,-22}, {-56,-21}, {-56,-20}, {-56,-19}, {-56,-18}, {-56,-17}, {-56,-16}, {-56,-15}, {-56,42}, {-56,43}, {-56,44}, {-56,45}, {-56,47}, {-56,48}, {-56,49}, {-56,50}, {-56,51}, {-56,52}, {-56,53}, {-56,67}, {-56,68}, {-56,69}, {-56,70}, {-56,71}, {-56,72}, {-55,-26}, {-55,-25}, {-55,-24}, {-55,-23}, {-55,-22}, {-55,-21}, {-55,-20}, {-55,-19}, {-55,-18}, {-55,-17}, {-55,-16}, {-55,-15}, {-55,42}, {-55,43}, {-55,44}, {-55,45}, {-55,47}, {-55,48}, {-55,49}, {-55,50}, {-55,51}, {-55,52}, {-55,68}, {-55,69}, {-55,70}, {-55,71}, {-55,72}, {-55,73}, {-54,-26}, {-54,-25}, {-54,-24}, {-54,-23}, {-54,-22}, {-54,-21}, {-54,-20}, {-54,-19}, {-54,-18}, {-54,-17}, {-54,-16}, {-54,-15}, {-54,42}, {-54,43}, {-54,44}, {-54,45}, {-54,47}, {-54,48}, {-54,49}, {-54,50}, {-54,51}, {-54,69}, {-54,70}, {-54,71}, {-54,72}, {-54,73}, {-53,-26}, {-53,-23}, {-53,-22}, {-53,-21}, {-53,-18}, {-53,-17}, {-53,-16}, {-53,-15}, {-53,42}, {-53,43}, {-53,44}, {-53,45}, {-53,47}, {-53,48}, {-53,49}, {-53,50}, {-53,70}, {-53,71}, {-53,72}, {-52,-26}, {-52,-23}, {-52,-22}, {-52,-21}, {-52,-18}, {-52,-17}, {-52,-16}, {-52,-15}, {-52,42}, {-52,43}, {-52,44}, {-52,45}, {-52,47}, {-52,48}, {-52,49}, {-52,71}, {-52,72}, {-52,75}, {-52,81}, {-52,82}, {-52,92}, {-51,-26}, {-51,-25}, {-51,-24}, {-51,-23}, {-51,-22}, {-51,-21}, {-51,-20}, {-51,-19}, {-51,-18}, {-51,-17}, {-51,-16}, {-51,-15}, {-51,-14}, {-51,42}, {-51,43}, {-51,44}, {-51,45}, {-51,71}, {-51,72}, {-51,75}, {-51,81}, {-51,82}, {-51,92}, {-50,-26}, {-50,-25}, {-50,-24}, {-50,-23}, {-50,-22}, {-50,-21}, {-50,-20}, {-50,-19}, {-50,-18}, {-50,-17}, {-50,-16}, {-50,-15}, {-50,-14}, {-50,25}, {-50,42}, {-50,43}, {-50,44}, {-50,45}, {-50,47}, {-50,48}, {-50,49}, {-50,71}, {-50,72}, {-50,73}, {-50,75}, {-50,81}, {-50,82}, {-50,92}, {-49,-26}, {-49,-25}, {-49,-24}, {-49,-23}, {-49,-22}, {-49,-21}, {-49,-20}, {-49,-19}, {-49,-18}, {-49,-17}, {-49,-16}, {-49,-15}, {-49,-14}, {-49,37}, {-49,42}, {-49,43}, {-49,44}, {-49,45}, {-49,47}, {-49,48}, {-49,49}, {-49,71}, {-49,72}, {-49,75}, {-49,92}, {-48,-26}, {-48,-23}, {-48,-22}, {-48,-21}, {-48,-18}, {-48,-17}, {-48,-16}, {-48,-15}, {-48,42}, {-48,43}, {-48,44}, {-48,45}, {-48,47}, {-48,48}, {-48,49}, {-48,74}, {-48,75}, {-48,81}, {-48,82}, {-48,92}, {-47,-26}, {-47,-23}, {-47,-22}, {-47,-21}, {-47,-18}, {-47,-17}, {-47,-16}, {-47,-15}, {-47,42}, {-47,43}, {-47,44}, {-47,45}, {-47,47}, {-47,48}, {-47,49}, {-47,69}, {-47,80}, {-47,81}, {-47,82}, {-47,83}, {-47,92}, {-46,-26}, {-46,-25}, {-46,-24}, {-46,-23}, {-46,-22}, {-46,-21}, {-46,-20}, {-46,-19}, {-46,-18}, {-46,-17}, {-46,-16}, {-46,-15}, {-46,42}, {-46,43}, {-46,44}, {-46,45}, {-46,47}, {-46,48}, {-46,49}, {-46,68}, {-46,75}, {-46,76}, {-46,77}, {-46,79}, {-46,80}, {-46,81}, {-46,82}, {-46,83}, {-46,84}, {-46,86}, {-46,87}, {-46,88}, {-46,89}, {-46,91}, {-46,92}, {-45,-26}, {-45,-25}, {-45,-24}, {-45,-23}, {-45,-22}, {-45,-21}, {-45,-20}, {-45,-19}, {-45,-18}, {-45,-17}, {-45,-16}, {-45,-15}, {-45,42}, {-45,43}, {-45,44}, {-45,45}, {-45,47}, {-45,48}, {-45,49}, {-45,68}, {-45,75}, {-45,76}, {-45,77}, {-45,79}, {-45,80}, {-45,81}, {-45,82}, {-45,83}, {-45,84}, {-45,86}, {-45,87}, {-45,88}, {-45,89}, {-45,91}, {-45,92}, {-44,-26}, {-44,-25}, {-44,-24}, {-44,-23}, {-44,-22}, {-44,-21}, {-44,-20}, {-44,-19}, {-44,-18}, {-44,-17}, {-44,-16}, {-44,-15}, {-44,42}, {-44,43}, {-44,44}, {-44,45}, {-44,47}, {-44,48}, {-44,49}, {-44,68}, {-44,75}, {-44,76}, {-44,77}, {-44,79}, {-44,80}, {-44,81}, {-44,82}, {-44,83}, {-44,84}, {-44,86}, {-44,87}, {-44,88}, {-44,89}, {-44,91}, {-44,92}, {-43,-26}, {-43,-23}, {-43,-22}, {-43,-21}, {-43,-18}, {-43,-17}, {-43,-16}, {-43,-15}, {-43,42}, {-43,43}, {-43,44}, {-43,45}, {-43,47}, {-43,48}, {-43,49}, {-43,69}, {-43,80}, {-43,81}, {-43,82}, {-43,83}, {-43,92}, {-42,-26}, {-42,-23}, {-42,-22}, {-42,-21}, {-42,-18}, {-42,-17}, {-42,-16}, {-42,-15}, {-42,42}, {-42,43}, {-42,44}, {-42,45}, {-42,47}, {-42,48}, {-42,49}, {-42,74}, {-42,75}, {-42,81}, {-42,82}, {-42,92}, {-41,-26}, {-41,-25}, {-41,-24}, {-41,-23}, {-41,-22}, {-41,-21}, {-41,-20}, {-41,-19}, {-41,-18}, {-41,-17}, {-41,-16}, {-41,-15}, {-41,42}, {-41,43}, {-41,44}, {-41,45}, {-41,47}, {-41,48}, {-41,49}, {-41,71}, {-41,72}, {-41,75}, {-41,92}, {-40,-26}, {-40,-25}, {-40,-24}, {-40,-23}, {-40,-22}, {-40,-21}, {-40,-20}, {-40,-19}, {-40,-18}, {-40,-17}, {-40,-16}, {-40,-15}, {-40,42}, {-40,43}, {-40,44}, {-40,45}, {-40,47}, {-40,48}, {-40,49}, {-40,71}, {-40,72}, {-40,73}, {-40,75}, {-40,81}, {-40,82}, {-40,92}, {-39,-26}, {-39,-25}, {-39,-24}, {-39,-23}, {-39,-22}, {-39,-21}, {-39,-20}, {-39,-19}, {-39,-18}, {-39,-17}, {-39,-16}, {-39,-15}, {-39,71}, {-39,72}, {-39,75}, {-39,81}, {-39,82}, {-39,92}, {-38,-26}, {-38,-25}, {-38,-24}, {-38,-23}, {-38,-22}, {-38,-21}, {-38,-20}, {-38,-19}, {-38,-18}, {-38,-17}, {-38,-16}, {-38,-15}, {-38,46}, {-38,47}, {-38,48}, {-38,49}, {-38,71}, {-38,72}, {-38,81}, {-38,82}, {-38,92}, {-37,-22}, {-37,-16}, {-37,46}, {-37,47}, {-37,48}, {-37,49}, {-37,50}, {-37,70}, {-37,71}, {-37,72}, {-37,81}, {-37,82}, {-36,47}, {-36,48}, {-36,49}, {-36,50}, {-36,51}, {-36,69}, {-36,70}, {-36,71}, {-36,72}, {-35,5}, {-35,6}, {-35,7}, {-35,8}, {-35,9}, {-35,10}, {-35,11}, {-35,12}, {-35,13}, {-35,14}, {-35,15}, {-35,16}, {-35,17}, {-35,18}, {-35,19}, {-35,20}, {-35,21}, {-35,22}, {-35,23}, {-35,48}, {-35,49}, {-35,50}, {-35,51}, {-35,52}, {-35,68}, {-35,69}, {-35,70}, {-35,71}, {-35,72}, {-34,-11}, {-34,-10}, {-34,-9}, {-34,-8}, {-34,-7}, {-34,-6}, {-34,-5}, {-34,-4}, {-34,-3}, {-34,-2}, {-34,-1}, {-34,0}, {-34,1}, {-34,2}, {-34,3}, {-34,4}, {-34,5}, {-34,6}, {-34,7}, {-34,8}, {-34,9}, {-34,10}, {-34,11}, {-34,12}, {-34,13}, {-34,14}, {-34,15}, {-34,16}, {-34,17}, {-34,18}, {-34,19}, {-34,20}, {-34,21}, {-34,22}, {-34,23}, {-34,49}, {-34,50}, {-34,51}, {-34,52}, {-34,53}, {-34,67}, {-34,68}, {-34,69}, {-34,70}, {-34,71}, {-34,72}, {-33,-11}, {-33,-10}, {-33,-9}, {-33,-8}, {-33,-7}, {-33,-6}, {-33,-5}, {-33,-4}, {-33,-3}, {-33,-2}, {-33,-1}, {-33,0}, {-33,1}, {-33,2}, {-33,3}, {-33,4}, {-33,5}, {-33,6}, {-33,7}, {-33,8}, {-33,9}, {-33,10}, {-33,11}, {-33,12}, {-33,13}, {-33,14}, {-33,15}, {-33,16}, {-33,17}, {-33,18}, {-33,19}, {-33,20}, {-33,21}, {-33,22}, {-33,23}, {-33,24}, {-33,50}, {-33,51}, {-33,52}, {-33,53}, {-33,54}, {-33,66}, {-33,67}, {-33,68}, {-33,69}, {-33,70}, {-33,71}, {-33,72}, {-32,-11}, {-32,-10}, {-32,-9}, {-32,-8}, {-32,-7}, {-32,-6}, {-32,-5}, {-32,-4}, {-32,-3}, {-32,-2}, {-32,-1}, {-32,0}, {-32,1}, {-32,2}, {-32,3}, {-32,4}, {-32,5}, {-32,6}, {-32,7}, {-32,8}, {-32,9}, {-32,10}, {-32,11}, {-32,12}, {-32,13}, {-32,14}, {-32,15}, {-32,16}, {-32,17}, {-32,18}, {-32,19}, {-32,20}, {-32,21}, {-32,22}, {-32,23}, {-32,51}, {-32,52}, {-32,53}, {-32,54}, {-32,55}, {-32,57}, {-32,58}, {-32,59}, {-32,60}, {-32,61}, {-32,62}, {-32,63}, {-32,65}, {-32,66}, {-32,67}, {-32,68}, {-32,69}, {-32,70}, {-32,71}, {-32,72}, {-32,73}, {-31,-11}, {-31,-10}, {-31,-9}, {-31,-8}, {-31,-7}, {-31,-6}, {-31,-5}, {-31,-4}, {-31,-3}, {-31,-2}, {-31,-1}, {-31,0}, {-31,1}, {-31,2}, {-31,3}, {-31,4}, {-31,5}, {-31,6}, {-31,7}, {-31,8}, {-31,9}, {-31,10}, {-31,11}, {-31,12}, {-31,13}, {-31,14}, {-31,15}, {-31,16}, {-31,17}, {-31,18}, {-31,19}, {-31,20}, {-31,21}, {-31,22}, {-31,23}, {-31,52}, {-31,53}, {-31,54}, {-31,55}, {-31,57}, {-31,58}, {-31,59}, {-31,60}, {-31,61}, {-31,62}, {-31,63}, {-31,65}, {-31,66}, {-31,67}, {-31,68}, {-31,69}, {-31,70}, {-31,71}, {-31,72}, {-31,73}, {-30,-11}, {-30,-10}, {-30,-9}, {-30,-8}, {-30,-5}, {-30,-4}, {-30,-3}, {-30,0}, {-30,1}, {-30,2}, {-30,5}, {-30,6}, {-30,7}, {-30,10}, {-30,11}, {-30,12}, {-30,15}, {-30,16}, {-30,17}, {-30,20}, {-30,21}, {-30,22}, {-30,23}, {-30,72}, {-30,73}, {-29,-11}, {-29,-10}, {-29,-9}, {-29,-8}, {-29,-5}, {-29,-4}, {-29,-3}, {-29,0}, {-29,1}, {-29,2}, {-29,5}, {-29,6}, {-29,7}, {-29,10}, {-29,11}, {-29,12}, {-29,15}, {-29,16}, {-29,17}, {-29,20}, {-29,21}, {-29,22}, {-29,23}, {-29,72}, {-29,73}, {-29,116}, {-28,-11}, {-28,-10}, {-28,-9}, {-28,-8}, {-28,-7}, {-28,-6}, {-28,-5}, {-28,-4}, {-28,-3}, {-28,-2}, {-28,-1}, {-28,0}, {-28,1}, {-28,2}, {-28,3}, {-28,4}, {-28,5}, {-28,6}, {-28,7}, {-28,8}, {-28,9}, {-28,10}, {-28,11}, {-28,12}, {-28,13}, {-28,14}, {-28,15}, {-28,16}, {-28,17}, {-28,18}, {-28,19}, {-28,20}, {-28,21}, {-28,22}, {-28,23}, {-28,72}, {-28,73}, {-28,116}, {-28,117}, {-28,118}, {-27,-11}, {-27,-10}, {-27,-9}, {-27,-8}, {-27,-7}, {-27,-6}, {-27,-5}, {-27,-4}, {-27,-3}, {-27,-2}, {-27,-1}, {-27,0}, {-27,1}, {-27,2}, {-27,3}, {-27,4}, {-27,5}, {-27,6}, {-27,7}, {-27,8}, {-27,9}, {-27,10}, {-27,11}, {-27,12}, {-27,13}, {-27,14}, {-27,15}, {-27,16}, {-27,17}, {-27,18}, {-27,19}, {-27,20}, {-27,21}, {-27,22}, {-27,23}, {-27,24}, {-27,72}, {-27,73}, {-27,116}, {-27,117}, {-27,118}, {-26,-11}, {-26,-10}, {-26,-9}, {-26,-8}, {-26,-7}, {-26,-6}, {-26,-5}, {-26,-4}, {-26,-3}, {-26,-2}, {-26,-1}, {-26,0}, {-26,1}, {-26,2}, {-26,3}, {-26,4}, {-26,5}, {-26,6}, {-26,7}, {-26,8}, {-26,9}, {-26,10}, {-26,11}, {-26,12}, {-26,13}, {-26,14}, {-26,15}, {-26,16}, {-26,17}, {-26,18}, {-26,19}, {-26,20}, {-26,21}, {-26,22}, {-26,23}, {-26,72}, {-26,73}, {-26,81}, {-26,82}, {-26,116}, {-26,117}, {-26,140}, {-26,141}, {-26,142}, {-26,143}, {-26,144}, {-26,146}, {-25,-11}, {-25,-10}, {-25,-9}, {-25,-8}, {-25,-5}, {-25,-4}, {-25,-3}, {-25,0}, {-25,1}, {-25,2}, {-25,5}, {-25,6}, {-25,7}, {-25,10}, {-25,11}, {-25,12}, {-25,15}, {-25,16}, {-25,17}, {-25,20}, {-25,21}, {-25,22}, {-25,23}, {-25,72}, {-25,73}, {-25,79}, {-25,80}, {-25,81}, {-25,82}, {-25,83}, {-25,84}, {-25,116}, {-25,117}, {-25,140}, {-25,141}, {-25,142}, {-25,143}, {-25,144}, {-25,146}, {-24,-11}, {-24,-10}, {-24,-9}, {-24,-8}, {-24,-5}, {-24,-4}, {-24,-3}, {-24,0}, {-24,1}, {-24,2}, {-24,5}, {-24,6}, {-24,7}, {-24,10}, {-24,11}, {-24,12}, {-24,15}, {-24,16}, {-24,17}, {-24,20}, {-24,21}, {-24,22}, {-24,23}, {-24,72}, {-24,73}, {-24,74}, {-24,79}, {-24,80}, {-24,81}, {-24,82}, {-24,83}, {-24,84}, {-24,116}, {-24,117}, {-24,140}, {-24,146}, {-23,-10}, {-23,-9}, {-23,-8}, {-23,-7}, {-23,-6}, {-23,-5}, {-23,-4}, {-23,-3}, {-23,-2}, {-23,-1}, {-23,0}, {-23,1}, {-23,2}, {-23,3}, {-23,4}, {-23,5}, {-23,6}, {-23,7}, {-23,8}, {-23,9}, {-23,10}, {-23,11}, {-23,12}, {-23,13}, {-23,14}, {-23,15}, {-23,16}, {-23,17}, {-23,18}, {-23,19}, {-23,20}, {-23,21}, {-23,22}, {-23,23}, {-23,72}, {-23,73}, {-23,74}, {-23,116}, {-23,117}, {-23,140}, {-23,141}, {-23,142}, {-23,143}, {-23,144}, {-23,145}, {-23,146}, {-22,72}, {-22,73}, {-22,74}, {-22,75}, {-22,76}, {-22,77}, {-22,78}, {-22,79}, {-22,80}, {-22,81}, {-22,82}, {-22,83}, {-22,84}, {-22,85}, {-22,86}, {-22,87}, {-22,88}, {-22,89}, {-22,90}, {-22,91}, {-22,92}, {-22,93}, {-22,94}, {-22,95}, {-22,96}, {-22,97}, {-22,98}, {-22,99}, {-22,100}, {-22,101}, {-22,102}, {-22,103}, {-22,104}, {-22,105}, {-22,106}, {-22,107}, {-22,108}, {-22,109}, {-22,110}, {-22,111}, {-22,112}, {-22,113}, {-22,114}, {-22,115}, {-22,116}, {-22,117}, {-22,146}, {-21,72}, {-21,73}, {-21,74}, {-21,75}, {-21,76}, {-21,77}, {-21,78}, {-21,79}, {-21,80}, {-21,81}, {-21,82}, {-21,83}, {-21,84}, {-21,85}, {-21,86}, {-21,87}, {-21,88}, {-21,89}, {-21,90}, {-21,91}, {-21,92}, {-21,93}, {-21,94}, {-21,95}, {-21,96}, {-21,97}, {-21,98}, {-21,99}, {-21,100}, {-21,101}, {-21,102}, {-21,103}, {-21,104}, {-21,105}, {-21,106}, {-21,107}, {-21,108}, {-21,109}, {-21,110}, {-21,111}, {-21,112}, {-21,113}, {-21,114}, {-21,115}, {-21,116}, {-21,117}, {-20,72}, {-20,73}, {-20,74}, {-20,81}, {-20,82}, {-19,72}, {-19,73}, {-19,74}, {-19,81}, {-19,82}, {-18,72}, {-18,73}, {-18,74}, {-18,81}, {-18,82}, {-17,72}, {-17,73}, {-17,74}, {-17,81}, {-17,82}, {-16,72}, {-16,73}, {-16,74}, {-16,81}, {-16,82}, {-15,62}, {-15,64}, {-15,65}, {-15,67}, {-15,72}, {-15,73}, {-15,74}, {-15,81}, {-15,82}, {-14,72}, {-14,73}, {-14,74}, {-14,81}, {-14,82}, {-13,72}, {-13,73}, {-13,74}, {-13,81}, {-13,82}, {-12,72}, {-12,73}, {-12,74}, {-12,81}, {-12,82}, {-11,72}, {-11,73}, {-11,74}, {-11,81}, {-11,82}, {-10,32}, {-10,72}, {-10,73}, {-10,74}, {-10,81}, {-10,82}, {-9,32}, {-9,42}, {-9,56}, {-9,68}, {-9,72}, {-9,73}, {-9,74}, {-9,81}, {-9,82}, {-8,32}, {-8,42}, {-8,56}, {-8,68}, {-8,72}, {-8,73}, {-8,74}, {-8,81}, {-8,82}, {-7,32}, {-7,72}, {-7,73}, {-7,74}, {-7,81}, {-7,82}, {-6,72}, {-6,73}, {-6,74}, {-6,81}, {-6,82}, {-5,74}, {-5,81}, {-5,82}, {-4,81}, {-4,82}, {-3,78}, {-3,79}, {-3,80}, {-3,81}, {-2,48}, {-2,49}, {-2,62}, {-2,64}, {-2,65}, {-2,67}, {-2,78}, {-2,79}, {-2,80}, {-1,48}, {-1,49}, {3,53}, {4,53}, {5,53}, {12,75}, {12,85}, {13,75}, {13,85}, {14,75}, {14,85}, {15,15}, {15,16}, {15,31}, {15,32}, {16,15}, {16,16}, {16,31}, {16,32}, {16,57}, {16,58}, {16,59}, {16,60}, {16,61}, {16,75}, {16,76}, {16,77}, {16,78}, {16,79}, {16,80}, {16,81}, {16,82}, {16,83}, {16,84}, {16,85}, {16,91}, {17,57}, {17,58}, {17,59}, {17,60}, {17,61}, {18,57}, {18,58}, {18,59}, {18,60}, {18,61}, {18,75}, {18,85}, {19,57}, {19,58}, {19,59}, {19,60}, {19,61}, {19,75}, {19,85}, {20,57}, {20,58}, {20,59}, {20,60}, {20,61}, {20,75}, {20,85}, {21,-7}, {22,-7}, {22,57}, {25,-7}, {26,-7}, {26,50}, {26,51}, {26,55}, {29,-7}, {29,2}, {29,46}, {30,-7}, {30,2}, {30,46}, {33,-7}, {34,-7}, {36,-66}, {36,-43}, {37,-66}, {37,-43}, {37,-7}, {38,-66}, {38,-43}, {38,-7}, {39,-66}, {39,-43}, {41,-7}, {42,-7}, {45,-7}, {45,2}, {45,46}, {46,-7}, {46,2}, {46,46}, {49,-7}, {50,-7}, {53,-7}, {54,-7}, {55,-96}, {58,119}, {58,120}, {58,121}, {58,122}, {58,123}, {58,124}, {58,125}, {58,126}, {58,127}, {58,128}, {58,129}, {58,130}, {58,131}, {59,-34}, {59,-33}, {59,-32}, {59,-31}, {59,-30}, {59,-29}, {59,-28}, {59,-27}, {59,-26}, {59,-25}, {59,-24}, {59,-23}, {59,-22}, {59,-21}, {59,-20}, {59,-19}, {59,-18}, {59,15}, {59,16}, {59,31}, {59,32}, {59,119}, {60,15}, {60,16}, {60,31}, {60,32}, {60,118}, {60,119}, {61,119}, {62,119}, {63,119}, {64,119}, {65,100}, {65,119}, {66,119}, {67,88}, {67,119}, {68,-1}, {68,20}, {68,37}, {68,92}, {68,98}, {68,119}, {69,-1}, {69,20}, {69,37}, {69,91}, {69,99}, {69,118}, {69,119}, {70,-65}, {70,2}, {70,3}, {70,4}, {70,5}, {70,6}, {70,7}, {70,8}, {70,23}, {70,24}, {70,25}, {70,26}, {70,27}, {70,28}, {70,29}, {70,36}, {70,40}, {70,41}, {70,42}, {70,43}, {70,44}, {70,45}, {70,119}, {71,2}, {71,3}, {71,4}, {71,5}, {71,6}, {71,7}, {71,8}, {71,23}, {71,24}, {71,25}, {71,26}, {71,27}, {71,28}, {71,29}, {71,40}, {71,41}, {71,42}, {71,43}, {71,44}, {71,45}, {71,46}, {71,119}, {72,2}, {72,3}, {72,4}, {72,5}, {72,6}, {72,7}, {72,8}, {72,23}, {72,24}, {72,25}, {72,26}, {72,27}, {72,28}, {72,29}, {72,36}, {72,40}, {72,41}, {72,42}, {72,43}, {72,44}, {72,45}, {72,119}, {73,2}, {73,3}, {73,4}, {73,5}, {73,6}, {73,7}, {73,8}, {73,23}, {73,24}, {73,25}, {73,26}, {73,27}, {73,28}, {73,29}, {73,36}, {73,40}, {73,41}, {73,42}, {73,43}, {73,44}, {73,45}, {73,122}, {73,123}, {73,124}, {73,125}, {73,126}, {73,127}, {73,128}, {73,129}, {73,130}, {74,2}, {74,3}, {74,4}, {74,5}, {74,6}, {74,7}, {74,8}, {74,23}, {74,24}, {74,25}, {74,26}, {74,27}, {74,28}, {74,29}, {74,30}, {74,36}, {74,40}, {74,41}, {74,42}, {74,43}, {74,44}, {74,45}, {75,-64}, {75,-63}, {75,-62}, {75,-61}, {75,2}, {75,3}, {75,4}, {75,5}, {75,6}, {75,7}, {75,8}, {75,23}, {75,24}, {75,25}, {75,26}, {75,27}, {75,28}, {75,29}, {75,40}, {75,41}, {75,42}, {75,43}, {75,44}, {75,45}, {75,91}, {75,99}, {76,-64}, {76,-63}, {76,-62}, {76,-61}, {76,-60}, {76,-59}, {76,2}, {76,3}, {76,4}, {76,5}, {76,6}, {76,7}, {76,8}, {76,23}, {76,24}, {76,25}, {76,26}, {76,27}, {76,28}, {76,29}, {76,40}, {76,41}, {76,42}, {76,43}, {76,44}, {76,45}, {76,46}, {76,92}, {76,98}, {77,-64}, {77,-63}, {77,-62}, {77,-61}, {77,-60}, {77,-59}, {77,2}, {77,3}, {77,4}, {77,5}, {77,6}, {77,7}, {77,8}, {77,23}, {77,24}, {77,25}, {77,26}, {77,27}, {77,28}, {77,29}, {77,40}, {77,41}, {77,42}, {77,43}, {77,44}, {77,45}, {78,-92}, {78,-64}, {78,-63}, {78,-62}, {78,-61}, {78,-60}, {78,-59}, {78,2}, {78,3}, {78,4}, {78,5}, {78,6}, {78,7}, {78,8}, {78,23}, {78,24}, {78,25}, {78,26}, {78,27}, {78,28}, {78,29}, {78,40}, {78,41}, {78,42}, {78,43}, {78,44}, {78,45}, {79,-64}, {79,-63}, {79,-62}, {79,-61}, {79,-60}, {79,-59}, {79,5}, {79,26}, {79,40}, {79,41}, {79,42}, {79,43}, {79,44}, {79,45}, {79,90}, {79,100}, {80,-64}, {80,-63}, {80,-62}, {80,-61}, {80,-60}, {80,-59}, {81,-64}, {81,-63}, {81,-62}, {81,-61}, {81,-60}, {81,-59}, {82,-64}, {82,-63}, {82,-62}, {82,-61}, {82,-60}, {82,-59}, {83,-64}, {83,-63}, {83,-62}, {83,-61}, {83,-60}, {83,-59}, {84,-64}, {84,-63}, {84,-62}, {84,-61}, {84,-60}, {84,-59}, }, + ["interior-divider"] = {{-89,51}, {-89,52}, {-89,58}, {-89,59}, {-88,51}, {-88,52}, {-88,53}, {-88,54}, {-88,55}, {-88,56}, {-88,57}, {-88,58}, {-88,59}, {-88,96}, {-88,97}, {-88,98}, {-88,99}, {-88,100}, {-88,101}, {-88,102}, {-88,103}, {-87,-26}, {-87,-25}, {-87,-24}, {-87,-23}, {-87,-22}, {-87,-21}, {-87,-20}, {-87,-19}, {-87,-18}, {-87,-17}, {-87,-16}, {-87,-15}, {-87,-14}, {-87,-13}, {-87,-12}, {-87,24}, {-87,25}, {-87,26}, {-87,27}, {-87,28}, {-87,29}, {-87,30}, {-87,31}, {-87,32}, {-87,33}, {-87,34}, {-87,35}, {-87,36}, {-87,37}, {-87,38}, {-87,51}, {-87,52}, {-87,53}, {-87,54}, {-87,55}, {-87,56}, {-87,57}, {-87,58}, {-87,59}, {-87,96}, {-87,97}, {-87,98}, {-87,99}, {-87,100}, {-87,101}, {-87,102}, {-87,103}, {-86,-26}, {-86,-25}, {-86,-24}, {-86,-23}, {-86,-22}, {-86,-21}, {-86,-20}, {-86,-19}, {-86,-18}, {-86,-17}, {-86,-16}, {-86,-15}, {-86,-14}, {-86,-13}, {-86,-12}, {-86,-7}, {-86,-6}, {-86,-2}, {-86,-1}, {-86,3}, {-86,4}, {-86,8}, {-86,9}, {-86,13}, {-86,14}, {-86,18}, {-86,19}, {-86,24}, {-86,25}, {-86,26}, {-86,27}, {-86,28}, {-86,29}, {-86,30}, {-86,31}, {-86,32}, {-86,33}, {-86,34}, {-86,35}, {-86,36}, {-86,37}, {-86,38}, {-86,51}, {-86,52}, {-86,58}, {-86,59}, {-86,93}, {-86,94}, {-86,95}, {-86,96}, {-86,97}, {-86,102}, {-86,103}, {-85,-26}, {-85,-25}, {-85,-13}, {-85,-12}, {-85,-7}, {-85,-6}, {-85,-2}, {-85,-1}, {-85,3}, {-85,4}, {-85,8}, {-85,9}, {-85,13}, {-85,14}, {-85,18}, {-85,19}, {-85,24}, {-85,25}, {-85,28}, {-85,30}, {-85,32}, {-85,34}, {-85,37}, {-85,38}, {-85,93}, {-85,94}, {-85,95}, {-85,96}, {-85,97}, {-85,102}, {-85,103}, {-84,-26}, {-84,-25}, {-84,-13}, {-84,-12}, {-84,24}, {-84,25}, {-84,28}, {-84,30}, {-84,32}, {-84,34}, {-84,37}, {-84,38}, {-84,46}, {-84,47}, {-84,49}, {-84,50}, {-84,53}, {-84,54}, {-84,56}, {-84,58}, {-84,59}, {-84,93}, {-84,96}, {-84,97}, {-84,98}, {-84,99}, {-84,101}, {-84,102}, {-84,103}, {-84,104}, {-84,105}, {-84,106}, {-84,107}, {-84,108}, {-84,109}, {-84,110}, {-84,111}, {-84,112}, {-84,113}, {-84,114}, {-83,-26}, {-83,-25}, {-83,-24}, {-83,-22}, {-83,-21}, {-83,-20}, {-83,-19}, {-83,-18}, {-83,-17}, {-83,-16}, {-83,-13}, {-83,-12}, {-83,28}, {-83,30}, {-83,32}, {-83,34}, {-83,37}, {-83,38}, {-83,46}, {-83,50}, {-83,53}, {-83,56}, {-83,59}, {-83,67}, {-83,68}, {-83,69}, {-83,70}, {-83,71}, {-83,72}, {-83,73}, {-83,74}, {-83,75}, {-83,76}, {-83,77}, {-83,78}, {-83,79}, {-83,80}, {-83,81}, {-83,82}, {-83,83}, {-83,84}, {-83,85}, {-83,86}, {-83,87}, {-83,88}, {-83,89}, {-83,90}, {-83,91}, {-83,92}, {-83,93}, {-83,96}, {-83,97}, {-83,98}, {-83,99}, {-83,101}, {-83,102}, {-83,103}, {-83,104}, {-83,105}, {-83,106}, {-83,107}, {-83,108}, {-83,109}, {-83,110}, {-83,111}, {-83,112}, {-83,113}, {-83,114}, {-82,-26}, {-82,-25}, {-82,-16}, {-82,-13}, {-82,-12}, {-82,24}, {-82,25}, {-82,28}, {-82,30}, {-82,32}, {-82,34}, {-82,37}, {-82,38}, {-82,41}, {-82,42}, {-82,43}, {-82,44}, {-82,45}, {-82,46}, {-82,47}, {-82,48}, {-82,49}, {-82,50}, {-82,53}, {-82,56}, {-82,59}, {-82,66}, {-82,67}, {-82,68}, {-82,69}, {-82,70}, {-82,71}, {-82,72}, {-82,73}, {-82,74}, {-82,75}, {-82,76}, {-82,77}, {-82,78}, {-82,79}, {-82,80}, {-82,81}, {-82,82}, {-82,83}, {-82,84}, {-82,85}, {-82,86}, {-82,87}, {-82,88}, {-82,89}, {-82,90}, {-82,91}, {-82,92}, {-82,93}, {-82,102}, {-82,103}, {-82,113}, {-82,114}, {-81,-26}, {-81,-25}, {-81,-16}, {-81,-13}, {-81,-12}, {-81,-7}, {-81,-6}, {-81,-2}, {-81,-1}, {-81,3}, {-81,4}, {-81,8}, {-81,9}, {-81,13}, {-81,14}, {-81,18}, {-81,19}, {-81,24}, {-81,25}, {-81,30}, {-81,32}, {-81,34}, {-81,37}, {-81,38}, {-81,41}, {-81,42}, {-81,43}, {-81,44}, {-81,45}, {-81,46}, {-81,47}, {-81,48}, {-81,49}, {-81,50}, {-81,53}, {-81,56}, {-81,59}, {-81,102}, {-81,103}, {-81,113}, {-81,114}, {-80,-26}, {-80,-25}, {-80,-24}, {-80,-22}, {-80,-21}, {-80,-20}, {-80,-19}, {-80,-18}, {-80,-17}, {-80,-16}, {-80,-13}, {-80,-12}, {-80,-7}, {-80,-6}, {-80,-2}, {-80,-1}, {-80,3}, {-80,4}, {-80,8}, {-80,9}, {-80,13}, {-80,14}, {-80,18}, {-80,19}, {-80,24}, {-80,25}, {-80,26}, {-80,27}, {-80,28}, {-80,30}, {-80,32}, {-80,34}, {-80,37}, {-80,38}, {-80,41}, {-80,42}, {-80,49}, {-80,50}, {-80,53}, {-80,54}, {-80,55}, {-80,56}, {-80,57}, {-80,58}, {-80,59}, {-80,60}, {-80,61}, {-80,62}, {-80,63}, {-80,64}, {-80,65}, {-80,66}, {-80,67}, {-80,68}, {-80,102}, {-80,103}, {-80,113}, {-80,114}, {-79,-26}, {-79,-25}, {-79,-16}, {-79,-13}, {-79,-12}, {-79,24}, {-79,25}, {-79,28}, {-79,34}, {-79,37}, {-79,38}, {-79,41}, {-79,42}, {-79,43}, {-79,44}, {-79,45}, {-79,46}, {-79,49}, {-79,50}, {-79,51}, {-79,53}, {-79,54}, {-79,55}, {-79,56}, {-79,57}, {-79,58}, {-79,59}, {-79,60}, {-79,61}, {-79,62}, {-79,63}, {-79,64}, {-79,65}, {-79,66}, {-79,67}, {-79,68}, {-79,102}, {-79,103}, {-79,113}, {-79,114}, {-78,-26}, {-78,-25}, {-78,-16}, {-78,-13}, {-78,-12}, {-78,24}, {-78,25}, {-78,28}, {-78,29}, {-78,30}, {-78,31}, {-78,32}, {-78,33}, {-78,34}, {-78,37}, {-78,38}, {-78,41}, {-78,42}, {-78,46}, {-78,49}, {-78,50}, {-78,53}, {-78,60}, {-78,61}, {-78,67}, {-78,102}, {-78,103}, {-78,113}, {-78,114}, {-77,-26}, {-77,-25}, {-77,-24}, {-77,-23}, {-77,-22}, {-77,-21}, {-77,-20}, {-77,-19}, {-77,-18}, {-77,-17}, {-77,-16}, {-77,-13}, {-77,-12}, {-77,37}, {-77,38}, {-77,41}, {-77,42}, {-77,46}, {-77,49}, {-77,50}, {-77,53}, {-77,60}, {-77,61}, {-77,67}, {-77,102}, {-77,103}, {-77,105}, {-77,106}, {-77,107}, {-76,-26}, {-76,-25}, {-76,-18}, {-76,-13}, {-76,-12}, {-76,24}, {-76,25}, {-76,37}, {-76,38}, {-76,49}, {-76,50}, {-76,53}, {-76,54}, {-76,56}, {-76,57}, {-76,58}, {-76,59}, {-76,60}, {-76,61}, {-76,62}, {-76,64}, {-76,65}, {-76,66}, {-76,67}, {-76,68}, {-76,106}, {-76,113}, {-76,114}, {-75,-26}, {-75,-25}, {-75,-18}, {-75,-13}, {-75,-12}, {-75,-11}, {-75,-10}, {-75,-9}, {-75,-8}, {-75,-7}, {-75,-6}, {-75,-5}, {-75,-4}, {-75,-3}, {-75,-2}, {-75,-1}, {-75,0}, {-75,1}, {-75,2}, {-75,3}, {-75,4}, {-75,8}, {-75,9}, {-75,10}, {-75,11}, {-75,12}, {-75,13}, {-75,14}, {-75,15}, {-75,16}, {-75,17}, {-75,18}, {-75,19}, {-75,20}, {-75,21}, {-75,22}, {-75,23}, {-75,24}, {-75,25}, {-75,26}, {-75,27}, {-75,28}, {-75,29}, {-75,30}, {-75,31}, {-75,32}, {-75,33}, {-75,34}, {-75,35}, {-75,36}, {-75,37}, {-75,38}, {-75,41}, {-75,42}, {-75,46}, {-75,49}, {-75,50}, {-75,60}, {-75,61}, {-75,67}, {-75,102}, {-75,103}, {-75,105}, {-75,106}, {-75,107}, {-75,113}, {-75,114}, {-74,-26}, {-74,-25}, {-74,-24}, {-74,-23}, {-74,-21}, {-74,-20}, {-74,-19}, {-74,-18}, {-74,-17}, {-74,-15}, {-74,-14}, {-74,-13}, {-74,-12}, {-74,-11}, {-74,-10}, {-74,-9}, {-74,-8}, {-74,-7}, {-74,-6}, {-74,-5}, {-74,-4}, {-74,-3}, {-74,-2}, {-74,-1}, {-74,0}, {-74,1}, {-74,2}, {-74,3}, {-74,4}, {-74,8}, {-74,9}, {-74,10}, {-74,11}, {-74,12}, {-74,13}, {-74,14}, {-74,15}, {-74,16}, {-74,17}, {-74,18}, {-74,19}, {-74,20}, {-74,21}, {-74,22}, {-74,23}, {-74,24}, {-74,25}, {-74,26}, {-74,27}, {-74,28}, {-74,29}, {-74,30}, {-74,31}, {-74,32}, {-74,33}, {-74,34}, {-74,35}, {-74,36}, {-74,37}, {-74,38}, {-74,41}, {-74,42}, {-74,46}, {-74,49}, {-74,50}, {-74,60}, {-74,61}, {-74,63}, {-74,65}, {-74,67}, {-74,102}, {-74,103}, {-74,113}, {-74,114}, {-73,-71}, {-73,-68}, {-73,-26}, {-73,-25}, {-73,-24}, {-73,-23}, {-73,-21}, {-73,-20}, {-73,-19}, {-73,-18}, {-73,-17}, {-73,-15}, {-73,-14}, {-73,-13}, {-73,-12}, {-73,-11}, {-73,-10}, {-73,-9}, {-73,-8}, {-73,-7}, {-73,-6}, {-73,-5}, {-73,-4}, {-73,-3}, {-73,-2}, {-73,-1}, {-73,0}, {-73,1}, {-73,2}, {-73,3}, {-73,4}, {-73,8}, {-73,9}, {-73,10}, {-73,11}, {-73,12}, {-73,13}, {-73,14}, {-73,15}, {-73,16}, {-73,17}, {-73,18}, {-73,19}, {-73,20}, {-73,21}, {-73,22}, {-73,23}, {-73,24}, {-73,25}, {-73,29}, {-73,30}, {-73,36}, {-73,37}, {-73,41}, {-73,42}, {-73,43}, {-73,44}, {-73,45}, {-73,46}, {-73,47}, {-73,48}, {-73,49}, {-73,50}, {-73,60}, {-73,61}, {-73,67}, {-73,102}, {-73,103}, {-73,110}, {-73,111}, {-73,112}, {-73,113}, {-73,114}, {-72,-80}, {-72,-79}, {-72,-78}, {-72,-76}, {-72,-73}, {-72,-72}, {-72,-71}, {-72,-68}, {-72,-67}, {-72,-66}, {-72,-64}, {-72,-63}, {-72,-61}, {-72,-60}, {-72,-59}, {-72,-14}, {-72,-13}, {-72,-12}, {-72,24}, {-72,25}, {-72,26}, {-72,29}, {-72,30}, {-72,36}, {-72,37}, {-72,41}, {-72,42}, {-72,49}, {-72,50}, {-72,60}, {-72,61}, {-72,67}, {-72,102}, {-72,103}, {-72,104}, {-72,105}, {-72,106}, {-72,107}, {-72,108}, {-72,110}, {-72,111}, {-72,112}, {-72,113}, {-72,114}, {-71,-80}, {-71,-79}, {-71,-78}, {-71,-77}, {-71,-76}, {-71,-75}, {-71,-74}, {-71,-73}, {-71,-72}, {-71,-71}, {-71,-68}, {-71,-67}, {-71,-66}, {-71,-65}, {-71,-64}, {-71,-63}, {-71,-62}, {-71,-61}, {-71,-60}, {-71,-59}, {-71,-14}, {-71,-13}, {-71,-12}, {-71,24}, {-71,25}, {-71,26}, {-71,29}, {-71,30}, {-71,32}, {-71,33}, {-71,34}, {-71,35}, {-71,36}, {-71,37}, {-71,41}, {-71,42}, {-71,43}, {-71,44}, {-71,45}, {-71,46}, {-71,47}, {-71,49}, {-71,50}, {-71,67}, {-71,102}, {-71,103}, {-71,106}, {-71,113}, {-71,114}, {-70,-80}, {-70,-79}, {-70,-78}, {-70,-77}, {-70,-76}, {-70,-75}, {-70,-74}, {-70,-73}, {-70,-72}, {-70,-71}, {-70,-68}, {-70,-67}, {-70,-66}, {-70,-65}, {-70,-64}, {-70,-63}, {-70,-62}, {-70,-61}, {-70,-60}, {-70,-59}, {-70,-14}, {-70,-13}, {-70,-12}, {-70,24}, {-70,25}, {-70,26}, {-70,29}, {-70,30}, {-70,36}, {-70,37}, {-70,41}, {-70,49}, {-70,50}, {-70,60}, {-70,61}, {-70,67}, {-70,102}, {-70,103}, {-70,106}, {-70,113}, {-70,114}, {-69,-79}, {-69,-78}, {-69,-71}, {-69,-68}, {-69,-61}, {-69,-60}, {-69,-14}, {-69,-13}, {-69,-12}, {-69,24}, {-69,25}, {-69,26}, {-69,29}, {-69,30}, {-69,36}, {-69,37}, {-69,41}, {-69,49}, {-69,50}, {-69,60}, {-69,61}, {-69,67}, {-69,96}, {-69,97}, {-69,98}, {-69,99}, {-69,101}, {-69,102}, {-69,103}, {-69,106}, {-69,113}, {-69,114}, {-68,-80}, {-68,-79}, {-68,-78}, {-68,-61}, {-68,-60}, {-68,-59}, {-68,-25}, {-68,-24}, {-68,-20}, {-68,-19}, {-68,-14}, {-68,-13}, {-68,-12}, {-68,24}, {-68,25}, {-68,26}, {-68,29}, {-68,30}, {-68,32}, {-68,33}, {-68,34}, {-68,35}, {-68,36}, {-68,37}, {-68,49}, {-68,50}, {-68,60}, {-68,61}, {-68,67}, {-68,96}, {-68,97}, {-68,98}, {-68,99}, {-68,101}, {-68,102}, {-68,103}, {-68,106}, {-68,113}, {-68,114}, {-67,-80}, {-67,-79}, {-67,-78}, {-67,-61}, {-67,-60}, {-67,-59}, {-67,-25}, {-67,-24}, {-67,-20}, {-67,-19}, {-67,-14}, {-67,-13}, {-67,-12}, {-67,24}, {-67,25}, {-67,26}, {-67,29}, {-67,30}, {-67,36}, {-67,37}, {-67,41}, {-67,49}, {-67,50}, {-67,60}, {-67,61}, {-67,67}, {-67,96}, {-67,97}, {-67,102}, {-67,103}, {-67,106}, {-67,113}, {-67,114}, {-66,-79}, {-66,-78}, {-66,-61}, {-66,-60}, {-66,-14}, {-66,-13}, {-66,-12}, {-66,24}, {-66,25}, {-66,26}, {-66,29}, {-66,30}, {-66,36}, {-66,37}, {-66,41}, {-66,49}, {-66,50}, {-66,51}, {-66,52}, {-66,53}, {-66,54}, {-66,56}, {-66,57}, {-66,58}, {-66,59}, {-66,60}, {-66,61}, {-66,62}, {-66,64}, {-66,65}, {-66,66}, {-66,67}, {-66,68}, {-66,96}, {-66,97}, {-66,102}, {-66,103}, {-66,113}, {-66,114}, {-65,-80}, {-65,-79}, {-65,-78}, {-65,-73}, {-65,-72}, {-65,-67}, {-65,-66}, {-65,-61}, {-65,-60}, {-65,-59}, {-65,-14}, {-65,-13}, {-65,-12}, {-65,24}, {-65,25}, {-65,26}, {-65,29}, {-65,30}, {-65,32}, {-65,33}, {-65,34}, {-65,35}, {-65,36}, {-65,37}, {-65,41}, {-65,42}, {-65,43}, {-65,44}, {-65,45}, {-65,46}, {-65,47}, {-65,49}, {-65,50}, {-65,53}, {-65,57}, {-65,60}, {-65,61}, {-65,67}, {-65,96}, {-65,97}, {-65,98}, {-65,99}, {-65,101}, {-65,102}, {-65,103}, {-65,104}, {-65,105}, {-65,106}, {-65,107}, {-65,108}, {-65,109}, {-65,110}, {-65,111}, {-65,112}, {-65,113}, {-65,114}, {-65,115}, {-65,117}, {-65,118}, {-65,119}, {-65,120}, {-65,121}, {-65,122}, {-65,123}, {-65,124}, {-65,125}, {-65,126}, {-65,127}, {-65,128}, {-65,129}, {-65,130}, {-65,131}, {-65,132}, {-65,133}, {-65,134}, {-65,137}, {-65,138}, {-65,139}, {-64,-80}, {-64,-79}, {-64,-78}, {-64,-73}, {-64,-72}, {-64,-67}, {-64,-66}, {-64,-61}, {-64,-60}, {-64,-59}, {-64,-14}, {-64,-13}, {-64,-12}, {-64,24}, {-64,25}, {-64,26}, {-64,36}, {-64,37}, {-64,41}, {-64,42}, {-64,49}, {-64,50}, {-64,60}, {-64,61}, {-64,67}, {-64,96}, {-64,97}, {-64,98}, {-64,99}, {-64,101}, {-64,102}, {-64,103}, {-64,104}, {-64,105}, {-64,106}, {-64,107}, {-64,108}, {-64,109}, {-64,110}, {-64,111}, {-64,112}, {-64,113}, {-64,114}, {-64,115}, {-64,117}, {-64,118}, {-64,119}, {-64,120}, {-64,121}, {-64,122}, {-64,123}, {-64,124}, {-64,125}, {-64,126}, {-64,127}, {-64,128}, {-64,129}, {-64,130}, {-64,131}, {-64,132}, {-64,133}, {-64,134}, {-64,137}, {-64,138}, {-64,139}, {-63,-79}, {-63,-78}, {-63,-62}, {-63,-61}, {-63,-60}, {-63,-59}, {-63,-58}, {-63,-25}, {-63,-24}, {-63,-20}, {-63,-19}, {-63,-14}, {-63,-13}, {-63,-12}, {-63,24}, {-63,25}, {-63,26}, {-63,29}, {-63,30}, {-63,36}, {-63,37}, {-63,41}, {-63,42}, {-63,43}, {-63,44}, {-63,45}, {-63,46}, {-63,47}, {-63,48}, {-63,49}, {-63,50}, {-63,51}, {-63,52}, {-63,53}, {-63,54}, {-63,55}, {-63,56}, {-63,57}, {-63,58}, {-63,59}, {-63,60}, {-63,61}, {-63,62}, {-63,63}, {-63,64}, {-63,65}, {-63,66}, {-63,67}, {-63,68}, {-63,96}, {-63,97}, {-63,138}, {-63,139}, {-62,-80}, {-62,-79}, {-62,-78}, {-62,-25}, {-62,-24}, {-62,-20}, {-62,-19}, {-62,-14}, {-62,-13}, {-62,-12}, {-62,24}, {-62,25}, {-62,26}, {-62,28}, {-62,29}, {-62,30}, {-62,31}, {-62,32}, {-62,33}, {-62,34}, {-62,35}, {-62,36}, {-62,37}, {-62,41}, {-62,42}, {-62,43}, {-62,44}, {-62,45}, {-62,46}, {-62,47}, {-62,48}, {-62,49}, {-62,50}, {-62,51}, {-62,52}, {-62,53}, {-62,54}, {-62,55}, {-62,56}, {-62,57}, {-62,58}, {-62,59}, {-62,60}, {-62,61}, {-62,62}, {-62,63}, {-62,64}, {-62,65}, {-62,66}, {-62,67}, {-62,68}, {-62,70}, {-62,71}, {-62,72}, {-62,73}, {-62,74}, {-62,75}, {-62,76}, {-62,77}, {-62,78}, {-62,79}, {-62,80}, {-62,83}, {-62,84}, {-62,85}, {-62,86}, {-62,87}, {-62,88}, {-62,89}, {-62,90}, {-62,91}, {-62,92}, {-62,93}, {-62,96}, {-62,97}, {-62,138}, {-62,139}, {-61,-80}, {-61,-79}, {-61,-78}, {-61,24}, {-61,25}, {-61,72}, {-61,73}, {-61,74}, {-61,75}, {-61,76}, {-61,77}, {-61,78}, {-61,79}, {-61,80}, {-61,83}, {-61,84}, {-61,85}, {-61,86}, {-61,87}, {-61,88}, {-61,89}, {-61,90}, {-61,91}, {-61,92}, {-61,93}, {-61,94}, {-61,95}, {-61,96}, {-61,97}, {-61,98}, {-61,99}, {-61,100}, {-61,101}, {-61,102}, {-61,103}, {-61,104}, {-61,105}, {-61,106}, {-61,107}, {-61,108}, {-61,109}, {-61,110}, {-61,111}, {-61,112}, {-61,113}, {-61,114}, {-61,118}, {-61,119}, {-61,120}, {-61,121}, {-61,122}, {-61,123}, {-61,124}, {-61,125}, {-61,128}, {-61,129}, {-61,130}, {-61,131}, {-61,132}, {-61,133}, {-61,134}, {-61,138}, {-61,139}, {-60,-79}, {-60,-78}, {-60,-62}, {-60,-61}, {-60,-60}, {-60,-59}, {-60,-58}, {-60,30}, {-60,32}, {-60,33}, {-60,35}, {-60,36}, {-60,37}, {-60,72}, {-60,73}, {-60,74}, {-60,75}, {-60,76}, {-60,77}, {-60,78}, {-60,79}, {-60,80}, {-60,83}, {-60,84}, {-60,85}, {-60,86}, {-60,87}, {-60,88}, {-60,89}, {-60,90}, {-60,91}, {-60,92}, {-60,93}, {-60,94}, {-60,95}, {-60,96}, {-60,97}, {-60,98}, {-60,99}, {-60,100}, {-60,101}, {-60,102}, {-60,103}, {-60,104}, {-60,105}, {-60,106}, {-60,107}, {-60,108}, {-60,109}, {-60,110}, {-60,111}, {-60,112}, {-60,113}, {-60,114}, {-60,118}, {-60,119}, {-60,125}, {-60,128}, {-60,134}, {-60,138}, {-60,139}, {-59,-80}, {-59,-79}, {-59,-78}, {-59,-73}, {-59,-72}, {-59,-67}, {-59,-66}, {-59,-61}, {-59,-60}, {-59,-59}, {-59,24}, {-59,25}, {-59,30}, {-59,33}, {-59,36}, {-59,37}, {-59,78}, {-59,79}, {-59,83}, {-59,84}, {-59,92}, {-59,93}, {-59,113}, {-59,114}, {-59,118}, {-59,119}, {-59,125}, {-59,128}, {-59,134}, {-59,138}, {-59,139}, {-58,-80}, {-58,-79}, {-58,-78}, {-58,-73}, {-58,-72}, {-58,-67}, {-58,-66}, {-58,-61}, {-58,-60}, {-58,-59}, {-58,-25}, {-58,-24}, {-58,-20}, {-58,-19}, {-58,-14}, {-58,-13}, {-58,-12}, {-58,24}, {-58,25}, {-58,26}, {-58,30}, {-58,33}, {-58,36}, {-58,37}, {-58,78}, {-58,79}, {-58,83}, {-58,84}, {-58,92}, {-58,93}, {-58,95}, {-58,96}, {-58,97}, {-58,98}, {-58,99}, {-58,101}, {-58,102}, {-58,109}, {-58,110}, {-58,111}, {-58,113}, {-58,114}, {-58,118}, {-58,119}, {-58,125}, {-58,128}, {-58,138}, {-58,139}, {-57,-79}, {-57,-78}, {-57,-61}, {-57,-60}, {-57,-25}, {-57,-24}, {-57,-20}, {-57,-19}, {-57,-14}, {-57,-13}, {-57,-12}, {-57,24}, {-57,25}, {-57,26}, {-57,30}, {-57,33}, {-57,36}, {-57,37}, {-57,78}, {-57,79}, {-57,92}, {-57,93}, {-57,98}, {-57,99}, {-57,102}, {-57,109}, {-57,113}, {-57,114}, {-57,118}, {-57,119}, {-57,125}, {-57,128}, {-57,134}, {-57,138}, {-57,139}, {-56,-80}, {-56,-79}, {-56,-78}, {-56,-61}, {-56,-60}, {-56,-59}, {-56,-14}, {-56,-13}, {-56,-12}, {-56,24}, {-56,25}, {-56,26}, {-56,30}, {-56,31}, {-56,32}, {-56,33}, {-56,34}, {-56,35}, {-56,36}, {-56,37}, {-56,78}, {-56,79}, {-56,83}, {-56,84}, {-56,92}, {-56,93}, {-56,94}, {-56,95}, {-56,96}, {-56,97}, {-56,98}, {-56,99}, {-56,102}, {-56,109}, {-56,110}, {-56,111}, {-56,113}, {-56,114}, {-56,118}, {-56,119}, {-56,128}, {-56,134}, {-56,138}, {-56,139}, {-55,-80}, {-55,-79}, {-55,-78}, {-55,-61}, {-55,-60}, {-55,-59}, {-55,-14}, {-55,-13}, {-55,-12}, {-55,24}, {-55,25}, {-55,26}, {-55,36}, {-55,37}, {-55,78}, {-55,79}, {-55,83}, {-55,84}, {-55,92}, {-55,93}, {-55,98}, {-55,99}, {-55,102}, {-55,109}, {-55,113}, {-55,114}, {-55,118}, {-55,119}, {-55,125}, {-55,128}, {-55,129}, {-55,131}, {-55,132}, {-55,133}, {-55,134}, {-55,138}, {-55,139}, {-54,-79}, {-54,-78}, {-54,-71}, {-54,-68}, {-54,-61}, {-54,-60}, {-54,-14}, {-54,-13}, {-54,-12}, {-54,24}, {-54,25}, {-54,26}, {-54,30}, {-54,32}, {-54,33}, {-54,34}, {-54,35}, {-54,36}, {-54,37}, {-54,74}, {-54,75}, {-54,76}, {-54,77}, {-54,78}, {-54,79}, {-54,80}, {-54,83}, {-54,84}, {-54,85}, {-54,86}, {-54,87}, {-54,88}, {-54,89}, {-54,90}, {-54,91}, {-54,92}, {-54,93}, {-54,98}, {-54,99}, {-54,102}, {-54,109}, {-54,113}, {-54,114}, {-54,118}, {-54,119}, {-54,125}, {-54,128}, {-54,134}, {-54,138}, {-54,139}, {-53,-80}, {-53,-79}, {-53,-78}, {-53,-77}, {-53,-76}, {-53,-75}, {-53,-74}, {-53,-73}, {-53,-72}, {-53,-71}, {-53,-68}, {-53,-67}, {-53,-66}, {-53,-65}, {-53,-64}, {-53,-63}, {-53,-62}, {-53,-61}, {-53,-60}, {-53,-59}, {-53,-25}, {-53,-24}, {-53,-20}, {-53,-19}, {-53,-14}, {-53,-13}, {-53,-12}, {-53,24}, {-53,25}, {-53,26}, {-53,30}, {-53,36}, {-53,37}, {-53,73}, {-53,74}, {-53,92}, {-53,93}, {-53,94}, {-53,95}, {-53,96}, {-53,98}, {-53,99}, {-53,100}, {-53,101}, {-53,102}, {-53,103}, {-53,104}, {-53,105}, {-53,107}, {-53,108}, {-53,109}, {-53,110}, {-53,111}, {-53,112}, {-53,113}, {-53,114}, {-53,118}, {-53,119}, {-53,120}, {-53,122}, {-53,123}, {-53,124}, {-53,125}, {-53,128}, {-53,129}, {-53,130}, {-53,131}, {-53,132}, {-53,133}, {-53,134}, {-53,138}, {-53,139}, {-52,-80}, {-52,-79}, {-52,-78}, {-52,-77}, {-52,-76}, {-52,-75}, {-52,-74}, {-52,-73}, {-52,-72}, {-52,-71}, {-52,-68}, {-52,-67}, {-52,-66}, {-52,-65}, {-52,-64}, {-52,-63}, {-52,-62}, {-52,-61}, {-52,-60}, {-52,-59}, {-52,-25}, {-52,-24}, {-52,-20}, {-52,-19}, {-52,-14}, {-52,-13}, {-52,-12}, {-52,24}, {-52,25}, {-52,26}, {-52,30}, {-52,32}, {-52,33}, {-52,34}, {-52,35}, {-52,36}, {-52,37}, {-52,73}, {-52,74}, {-52,93}, {-52,94}, {-52,95}, {-52,96}, {-52,98}, {-52,99}, {-52,100}, {-52,101}, {-52,102}, {-52,103}, {-52,104}, {-52,105}, {-52,107}, {-52,108}, {-52,109}, {-52,110}, {-52,111}, {-52,112}, {-52,113}, {-52,114}, {-52,118}, {-52,119}, {-52,125}, {-52,128}, {-52,134}, {-52,138}, {-52,139}, {-51,-80}, {-51,-79}, {-51,-76}, {-51,-75}, {-51,-73}, {-51,-72}, {-51,-71}, {-51,-68}, {-51,-67}, {-51,-66}, {-51,-64}, {-51,-63}, {-51,-61}, {-51,-60}, {-51,-59}, {-51,24}, {-51,25}, {-51,30}, {-51,36}, {-51,37}, {-51,73}, {-51,74}, {-51,98}, {-51,99}, {-51,113}, {-51,114}, {-51,118}, {-51,119}, {-51,125}, {-51,128}, {-51,134}, {-51,138}, {-51,139}, {-50,-71}, {-50,-68}, {-50,30}, {-50,31}, {-50,32}, {-50,33}, {-50,34}, {-50,35}, {-50,36}, {-50,37}, {-50,98}, {-50,99}, {-50,113}, {-50,114}, {-50,118}, {-50,119}, {-50,120}, {-50,121}, {-50,122}, {-50,123}, {-50,124}, {-50,125}, {-50,128}, {-50,138}, {-50,139}, {-49,24}, {-49,25}, {-49,113}, {-49,114}, {-49,118}, {-49,119}, {-49,125}, {-49,128}, {-49,134}, {-49,138}, {-49,139}, {-48,-66}, {-48,-65}, {-48,-61}, {-48,-60}, {-48,-25}, {-48,-24}, {-48,-20}, {-48,-19}, {-48,-14}, {-48,-13}, {-48,-12}, {-48,24}, {-48,25}, {-48,26}, {-48,30}, {-48,31}, {-48,32}, {-48,33}, {-48,34}, {-48,35}, {-48,36}, {-48,37}, {-48,98}, {-48,99}, {-48,113}, {-48,114}, {-48,118}, {-48,119}, {-48,125}, {-48,128}, {-48,134}, {-48,138}, {-48,139}, {-47,-66}, {-47,-65}, {-47,-61}, {-47,-60}, {-47,-25}, {-47,-24}, {-47,-20}, {-47,-19}, {-47,-14}, {-47,-13}, {-47,-12}, {-47,24}, {-47,25}, {-47,26}, {-47,36}, {-47,37}, {-47,98}, {-47,99}, {-47,113}, {-47,114}, {-47,118}, {-47,119}, {-47,125}, {-47,128}, {-47,129}, {-47,131}, {-47,132}, {-47,133}, {-47,134}, {-47,138}, {-47,139}, {-46,-66}, {-46,-65}, {-46,-61}, {-46,-60}, {-46,-14}, {-46,-13}, {-46,-12}, {-46,24}, {-46,25}, {-46,26}, {-46,30}, {-46,36}, {-46,37}, {-46,98}, {-46,99}, {-46,113}, {-46,114}, {-46,118}, {-46,119}, {-46,125}, {-46,128}, {-46,134}, {-46,138}, {-46,139}, {-45,-66}, {-45,-65}, {-45,-64}, {-45,-63}, {-45,-62}, {-45,-61}, {-45,-60}, {-45,-14}, {-45,-13}, {-45,-12}, {-45,24}, {-45,25}, {-45,26}, {-45,30}, {-45,32}, {-45,33}, {-45,34}, {-45,35}, {-45,36}, {-45,37}, {-45,98}, {-45,99}, {-45,128}, {-45,129}, {-45,130}, {-45,131}, {-45,132}, {-45,133}, {-45,134}, {-45,138}, {-45,139}, {-44,-66}, {-44,-65}, {-44,-64}, {-44,-63}, {-44,-62}, {-44,-61}, {-44,-60}, {-44,-14}, {-44,-13}, {-44,-12}, {-44,24}, {-44,25}, {-44,26}, {-44,30}, {-44,36}, {-44,37}, {-44,98}, {-44,99}, {-44,113}, {-44,114}, {-44,118}, {-44,119}, {-44,125}, {-44,128}, {-44,134}, {-44,138}, {-44,139}, {-43,-81}, {-43,-80}, {-43,-79}, {-43,-78}, {-43,-77}, {-43,-66}, {-43,-65}, {-43,-61}, {-43,-60}, {-43,-25}, {-43,-24}, {-43,-20}, {-43,-19}, {-43,-14}, {-43,-13}, {-43,-12}, {-43,24}, {-43,25}, {-43,26}, {-43,30}, {-43,36}, {-43,37}, {-43,98}, {-43,99}, {-43,113}, {-43,114}, {-43,118}, {-43,119}, {-43,125}, {-43,128}, {-43,134}, {-43,138}, {-43,139}, {-42,-81}, {-42,-80}, {-42,-79}, {-42,-78}, {-42,-77}, {-42,-66}, {-42,-65}, {-42,-61}, {-42,-60}, {-42,-25}, {-42,-24}, {-42,-20}, {-42,-19}, {-42,-14}, {-42,-13}, {-42,-12}, {-42,24}, {-42,25}, {-42,26}, {-42,30}, {-42,32}, {-42,33}, {-42,34}, {-42,35}, {-42,36}, {-42,37}, {-42,98}, {-42,99}, {-42,113}, {-42,114}, {-42,118}, {-42,119}, {-42,120}, {-42,122}, {-42,123}, {-42,124}, {-42,125}, {-42,128}, {-42,138}, {-42,139}, {-41,-79}, {-41,-78}, {-41,-77}, {-41,-66}, {-41,-65}, {-41,-61}, {-41,-60}, {-41,-14}, {-41,-13}, {-41,-12}, {-41,24}, {-41,25}, {-41,26}, {-41,30}, {-41,36}, {-41,37}, {-41,113}, {-41,114}, {-41,118}, {-41,119}, {-41,125}, {-41,128}, {-41,134}, {-41,138}, {-41,139}, {-40,-78}, {-40,-77}, {-40,-76}, {-40,-75}, {-40,-74}, {-40,-73}, {-40,-72}, {-40,-66}, {-40,-65}, {-40,-14}, {-40,-13}, {-40,-12}, {-40,24}, {-40,25}, {-40,26}, {-40,30}, {-40,36}, {-40,37}, {-40,98}, {-40,99}, {-40,113}, {-40,114}, {-40,118}, {-40,119}, {-40,125}, {-40,128}, {-40,134}, {-40,138}, {-40,139}, {-39,-78}, {-39,-77}, {-39,-76}, {-39,-75}, {-39,-74}, {-39,-73}, {-39,-72}, {-39,-66}, {-39,-65}, {-39,-61}, {-39,-60}, {-39,-14}, {-39,-13}, {-39,-12}, {-39,24}, {-39,25}, {-39,26}, {-39,30}, {-39,32}, {-39,33}, {-39,34}, {-39,35}, {-39,36}, {-39,37}, {-39,73}, {-39,74}, {-39,98}, {-39,99}, {-39,113}, {-39,114}, {-39,118}, {-39,119}, {-39,120}, {-39,121}, {-39,122}, {-39,123}, {-39,124}, {-39,125}, {-39,128}, {-39,129}, {-39,131}, {-39,132}, {-39,133}, {-39,134}, {-39,138}, {-39,139}, {-38,-75}, {-38,-74}, {-38,-73}, {-38,-72}, {-38,-66}, {-38,-65}, {-38,-61}, {-38,-60}, {-38,-14}, {-38,-13}, {-38,-12}, {-38,24}, {-38,25}, {-38,26}, {-38,30}, {-38,36}, {-38,37}, {-38,73}, {-38,74}, {-38,75}, {-38,93}, {-38,94}, {-38,95}, {-38,96}, {-38,98}, {-38,99}, {-38,100}, {-38,101}, {-38,102}, {-38,103}, {-38,104}, {-38,105}, {-38,107}, {-38,108}, {-38,109}, {-38,110}, {-38,111}, {-38,112}, {-38,113}, {-38,114}, {-38,118}, {-38,119}, {-38,125}, {-38,128}, {-38,134}, {-38,138}, {-38,139}, {-37,-73}, {-37,-72}, {-37,-66}, {-37,-65}, {-37,-61}, {-37,-60}, {-37,-26}, {-37,-25}, {-37,-24}, {-37,-23}, {-37,-21}, {-37,-20}, {-37,-19}, {-37,-18}, {-37,-17}, {-37,-15}, {-37,-14}, {-37,-13}, {-37,-12}, {-37,-11}, {-37,-10}, {-37,-9}, {-37,-8}, {-37,-7}, {-37,-6}, {-37,-5}, {-37,-4}, {-37,-3}, {-37,-2}, {-37,-1}, {-37,0}, {-37,1}, {-37,2}, {-37,3}, {-37,4}, {-37,24}, {-37,25}, {-37,26}, {-37,30}, {-37,36}, {-37,37}, {-37,73}, {-37,74}, {-37,75}, {-37,92}, {-37,93}, {-37,94}, {-37,95}, {-37,96}, {-37,98}, {-37,99}, {-37,100}, {-37,101}, {-37,102}, {-37,103}, {-37,104}, {-37,105}, {-37,107}, {-37,108}, {-37,109}, {-37,110}, {-37,111}, {-37,112}, {-37,113}, {-37,114}, {-37,118}, {-37,119}, {-37,125}, {-37,128}, {-37,129}, {-37,130}, {-37,131}, {-37,132}, {-37,133}, {-37,134}, {-37,138}, {-37,139}, {-36,-73}, {-36,-72}, {-36,-66}, {-36,-65}, {-36,-64}, {-36,-63}, {-36,-62}, {-36,-61}, {-36,-60}, {-36,-26}, {-36,-25}, {-36,-24}, {-36,-23}, {-36,-21}, {-36,-20}, {-36,-19}, {-36,-18}, {-36,-17}, {-36,-15}, {-36,-14}, {-36,-13}, {-36,-12}, {-36,-11}, {-36,-10}, {-36,-9}, {-36,-8}, {-36,-7}, {-36,-6}, {-36,-5}, {-36,-4}, {-36,-3}, {-36,-2}, {-36,-1}, {-36,0}, {-36,1}, {-36,2}, {-36,3}, {-36,4}, {-36,24}, {-36,25}, {-36,26}, {-36,27}, {-36,28}, {-36,29}, {-36,30}, {-36,31}, {-36,32}, {-36,33}, {-36,34}, {-36,35}, {-36,36}, {-36,37}, {-36,41}, {-36,42}, {-36,43}, {-36,44}, {-36,45}, {-36,46}, {-36,74}, {-36,75}, {-36,76}, {-36,77}, {-36,78}, {-36,79}, {-36,80}, {-36,83}, {-36,84}, {-36,85}, {-36,86}, {-36,87}, {-36,88}, {-36,89}, {-36,90}, {-36,91}, {-36,92}, {-36,93}, {-36,98}, {-36,99}, {-36,102}, {-36,109}, {-36,113}, {-36,114}, {-36,118}, {-36,119}, {-36,128}, {-36,134}, {-36,138}, {-36,139}, {-35,-73}, {-35,-72}, {-35,-66}, {-35,-65}, {-35,-61}, {-35,-60}, {-35,-26}, {-35,-25}, {-35,-18}, {-35,-13}, {-35,-12}, {-35,-11}, {-35,-10}, {-35,-9}, {-35,-8}, {-35,-7}, {-35,-6}, {-35,-5}, {-35,-4}, {-35,-3}, {-35,-2}, {-35,-1}, {-35,0}, {-35,1}, {-35,2}, {-35,3}, {-35,4}, {-35,24}, {-35,25}, {-35,26}, {-35,27}, {-35,28}, {-35,29}, {-35,30}, {-35,31}, {-35,32}, {-35,33}, {-35,34}, {-35,35}, {-35,36}, {-35,37}, {-35,41}, {-35,45}, {-35,46}, {-35,76}, {-35,77}, {-35,86}, {-35,87}, {-35,92}, {-35,93}, {-35,94}, {-35,95}, {-35,96}, {-35,98}, {-35,99}, {-35,102}, {-35,109}, {-35,113}, {-35,114}, {-35,118}, {-35,119}, {-35,125}, {-35,128}, {-35,134}, {-35,138}, {-35,139}, {-34,-73}, {-34,-72}, {-34,-66}, {-34,-65}, {-34,-61}, {-34,-60}, {-34,-26}, {-34,-25}, {-34,-18}, {-34,-13}, {-34,-12}, {-34,24}, {-34,25}, {-34,36}, {-34,37}, {-34,41}, {-34,45}, {-34,46}, {-34,76}, {-34,77}, {-34,92}, {-34,93}, {-34,98}, {-34,99}, {-34,102}, {-34,109}, {-34,110}, {-34,112}, {-34,113}, {-34,114}, {-34,118}, {-34,119}, {-34,125}, {-34,128}, {-34,138}, {-34,139}, {-33,-73}, {-33,-72}, {-33,-66}, {-33,-65}, {-33,-26}, {-33,-25}, {-33,-24}, {-33,-23}, {-33,-22}, {-33,-21}, {-33,-20}, {-33,-19}, {-33,-18}, {-33,-17}, {-33,-16}, {-33,-13}, {-33,-12}, {-33,36}, {-33,37}, {-33,41}, {-33,45}, {-33,46}, {-33,76}, {-33,77}, {-33,86}, {-33,87}, {-33,92}, {-33,93}, {-33,94}, {-33,95}, {-33,96}, {-33,97}, {-33,98}, {-33,99}, {-33,102}, {-33,109}, {-33,113}, {-33,114}, {-33,118}, {-33,119}, {-33,120}, {-33,122}, {-33,123}, {-33,124}, {-33,125}, {-33,128}, {-33,134}, {-33,138}, {-33,139}, {-32,-73}, {-32,-72}, {-32,-66}, {-32,-65}, {-32,-61}, {-32,-60}, {-32,-26}, {-32,-25}, {-32,-16}, {-32,-13}, {-32,-12}, {-32,24}, {-32,25}, {-32,28}, {-32,36}, {-32,37}, {-32,41}, {-32,45}, {-32,46}, {-32,76}, {-32,77}, {-32,86}, {-32,87}, {-32,88}, {-32,89}, {-32,90}, {-32,91}, {-32,92}, {-32,93}, {-32,98}, {-32,99}, {-32,100}, {-32,102}, {-32,109}, {-32,110}, {-32,112}, {-32,113}, {-32,114}, {-32,118}, {-32,119}, {-32,125}, {-32,128}, {-32,134}, {-32,138}, {-32,139}, {-31,-73}, {-31,-72}, {-31,-66}, {-31,-65}, {-31,-61}, {-31,-60}, {-31,-26}, {-31,-25}, {-31,-16}, {-31,-13}, {-31,-12}, {-31,24}, {-31,25}, {-31,28}, {-31,29}, {-31,30}, {-31,31}, {-31,32}, {-31,33}, {-31,34}, {-31,35}, {-31,36}, {-31,37}, {-31,41}, {-31,45}, {-31,46}, {-31,76}, {-31,77}, {-31,86}, {-31,87}, {-31,88}, {-31,89}, {-31,90}, {-31,91}, {-31,92}, {-31,93}, {-31,113}, {-31,114}, {-31,118}, {-31,119}, {-31,125}, {-31,128}, {-31,129}, {-31,131}, {-31,132}, {-31,133}, {-31,134}, {-31,138}, {-31,139}, {-30,-73}, {-30,-72}, {-30,-66}, {-30,-65}, {-30,-64}, {-30,-63}, {-30,-62}, {-30,-61}, {-30,-60}, {-30,-26}, {-30,-25}, {-30,-24}, {-30,-22}, {-30,-21}, {-30,-20}, {-30,-19}, {-30,-18}, {-30,-17}, {-30,-16}, {-30,-13}, {-30,-12}, {-30,-7}, {-30,-6}, {-30,-2}, {-30,-1}, {-30,3}, {-30,4}, {-30,8}, {-30,9}, {-30,13}, {-30,14}, {-30,18}, {-30,19}, {-30,24}, {-30,25}, {-30,26}, {-30,27}, {-30,28}, {-30,36}, {-30,37}, {-30,41}, {-30,42}, {-30,43}, {-30,45}, {-30,46}, {-30,47}, {-30,48}, {-30,49}, {-30,50}, {-30,51}, {-30,52}, {-30,53}, {-30,54}, {-30,55}, {-30,56}, {-30,57}, {-30,58}, {-30,59}, {-30,60}, {-30,61}, {-30,62}, {-30,63}, {-30,64}, {-30,65}, {-30,66}, {-30,67}, {-30,68}, {-30,69}, {-30,70}, {-30,71}, {-30,76}, {-30,77}, {-30,86}, {-30,87}, {-30,91}, {-30,92}, {-30,93}, {-30,94}, {-30,95}, {-30,96}, {-30,97}, {-30,98}, {-30,99}, {-30,100}, {-30,101}, {-30,102}, {-30,103}, {-30,104}, {-30,105}, {-30,106}, {-30,107}, {-30,108}, {-30,109}, {-30,110}, {-30,111}, {-30,112}, {-30,113}, {-30,114}, {-30,115}, {-30,117}, {-30,118}, {-30,119}, {-30,125}, {-30,128}, {-30,134}, {-30,138}, {-30,139}, {-29,-73}, {-29,-72}, {-29,-66}, {-29,-65}, {-29,-61}, {-29,-60}, {-29,-26}, {-29,-25}, {-29,-16}, {-29,-13}, {-29,-12}, {-29,-7}, {-29,-6}, {-29,-2}, {-29,-1}, {-29,3}, {-29,4}, {-29,8}, {-29,9}, {-29,13}, {-29,14}, {-29,18}, {-29,19}, {-29,24}, {-29,25}, {-29,28}, {-29,30}, {-29,32}, {-29,34}, {-29,36}, {-29,37}, {-29,41}, {-29,71}, {-29,76}, {-29,77}, {-29,86}, {-29,87}, {-29,91}, {-29,92}, {-29,93}, {-29,94}, {-29,95}, {-29,96}, {-29,97}, {-29,98}, {-29,99}, {-29,100}, {-29,101}, {-29,102}, {-29,103}, {-29,104}, {-29,105}, {-29,106}, {-29,107}, {-29,108}, {-29,109}, {-29,110}, {-29,111}, {-29,112}, {-29,113}, {-29,114}, {-29,115}, {-29,117}, {-29,118}, {-29,119}, {-29,120}, {-29,121}, {-29,122}, {-29,123}, {-29,124}, {-29,125}, {-29,128}, {-29,129}, {-29,130}, {-29,131}, {-29,132}, {-29,133}, {-29,134}, {-29,138}, {-29,139}, {-28,-73}, {-28,-72}, {-28,-66}, {-28,-65}, {-28,-61}, {-28,-60}, {-28,-26}, {-28,-25}, {-28,-16}, {-28,-13}, {-28,-12}, {-28,24}, {-28,25}, {-28,30}, {-28,32}, {-28,34}, {-28,36}, {-28,37}, {-28,41}, {-28,68}, {-28,71}, {-28,76}, {-28,77}, {-28,86}, {-28,87}, {-28,138}, {-28,139}, {-27,-73}, {-27,-72}, {-27,-66}, {-27,-65}, {-27,-26}, {-27,-25}, {-27,-24}, {-27,-22}, {-27,-21}, {-27,-20}, {-27,-19}, {-27,-18}, {-27,-17}, {-27,-16}, {-27,-13}, {-27,-12}, {-27,28}, {-27,30}, {-27,32}, {-27,34}, {-27,36}, {-27,37}, {-27,41}, {-27,42}, {-27,43}, {-27,45}, {-27,46}, {-27,47}, {-27,48}, {-27,49}, {-27,50}, {-27,51}, {-27,52}, {-27,53}, {-27,54}, {-27,55}, {-27,56}, {-27,57}, {-27,58}, {-27,59}, {-27,60}, {-27,61}, {-27,62}, {-27,63}, {-27,64}, {-27,65}, {-27,66}, {-27,67}, {-27,68}, {-27,71}, {-27,76}, {-27,77}, {-27,78}, {-27,79}, {-27,80}, {-27,83}, {-27,84}, {-27,85}, {-27,86}, {-27,87}, {-27,138}, {-27,139}, {-27,145}, {-27,146}, {-27,147}, {-26,-73}, {-26,-72}, {-26,-66}, {-26,-65}, {-26,-61}, {-26,-60}, {-26,-26}, {-26,-25}, {-26,-13}, {-26,-12}, {-26,24}, {-26,25}, {-26,28}, {-26,30}, {-26,32}, {-26,34}, {-26,36}, {-26,37}, {-26,41}, {-26,57}, {-26,61}, {-26,62}, {-26,68}, {-26,71}, {-26,76}, {-26,77}, {-26,78}, {-26,79}, {-26,80}, {-26,83}, {-26,84}, {-26,85}, {-26,86}, {-26,87}, {-26,118}, {-26,119}, {-26,120}, {-26,121}, {-26,122}, {-26,123}, {-26,124}, {-26,125}, {-26,128}, {-26,129}, {-26,130}, {-26,131}, {-26,132}, {-26,133}, {-26,134}, {-26,138}, {-26,139}, {-26,145}, {-26,147}, {-25,-73}, {-25,-72}, {-25,-66}, {-25,-65}, {-25,-61}, {-25,-60}, {-25,-26}, {-25,-25}, {-25,-13}, {-25,-12}, {-25,-7}, {-25,-6}, {-25,-2}, {-25,-1}, {-25,3}, {-25,4}, {-25,8}, {-25,9}, {-25,13}, {-25,14}, {-25,18}, {-25,19}, {-25,24}, {-25,25}, {-25,28}, {-25,30}, {-25,32}, {-25,34}, {-25,36}, {-25,37}, {-25,41}, {-25,45}, {-25,46}, {-25,47}, {-25,48}, {-25,49}, {-25,50}, {-25,51}, {-25,52}, {-25,53}, {-25,57}, {-25,61}, {-25,62}, {-25,68}, {-25,71}, {-25,78}, {-25,85}, {-25,118}, {-25,119}, {-25,125}, {-25,128}, {-25,134}, {-25,138}, {-25,139}, {-25,145}, {-25,147}, {-24,-73}, {-24,-72}, {-24,-66}, {-24,-65}, {-24,-61}, {-24,-60}, {-24,-26}, {-24,-25}, {-24,-24}, {-24,-23}, {-24,-22}, {-24,-21}, {-24,-20}, {-24,-19}, {-24,-18}, {-24,-17}, {-24,-16}, {-24,-15}, {-24,-14}, {-24,-13}, {-24,-12}, {-24,-7}, {-24,-6}, {-24,-2}, {-24,-1}, {-24,3}, {-24,4}, {-24,8}, {-24,9}, {-24,13}, {-24,14}, {-24,18}, {-24,19}, {-24,24}, {-24,25}, {-24,26}, {-24,27}, {-24,28}, {-24,29}, {-24,30}, {-24,31}, {-24,32}, {-24,33}, {-24,34}, {-24,35}, {-24,36}, {-24,37}, {-24,41}, {-24,45}, {-24,53}, {-24,57}, {-24,68}, {-24,71}, {-24,78}, {-24,85}, {-24,118}, {-24,119}, {-24,125}, {-24,128}, {-24,134}, {-24,138}, {-24,139}, {-24,141}, {-24,142}, {-24,143}, {-24,144}, {-24,145}, {-24,147}, {-23,-73}, {-23,-72}, {-23,-66}, {-23,-65}, {-23,-61}, {-23,-60}, {-23,-26}, {-23,-25}, {-23,-24}, {-23,-23}, {-23,-22}, {-23,-21}, {-23,-20}, {-23,-19}, {-23,-18}, {-23,-17}, {-23,-16}, {-23,-15}, {-23,-14}, {-23,-13}, {-23,-12}, {-23,24}, {-23,25}, {-23,26}, {-23,27}, {-23,28}, {-23,29}, {-23,30}, {-23,31}, {-23,32}, {-23,33}, {-23,34}, {-23,35}, {-23,36}, {-23,37}, {-23,41}, {-23,45}, {-23,53}, {-23,57}, {-23,61}, {-23,62}, {-23,68}, {-23,71}, {-23,78}, {-23,79}, {-23,84}, {-23,85}, {-23,118}, {-23,119}, {-23,128}, {-23,138}, {-23,139}, {-23,147}, {-22,-73}, {-22,-72}, {-22,-66}, {-22,-65}, {-22,-61}, {-22,-60}, {-22,36}, {-22,37}, {-22,41}, {-22,45}, {-22,53}, {-22,57}, {-22,61}, {-22,62}, {-22,68}, {-22,71}, {-22,118}, {-22,119}, {-22,125}, {-22,128}, {-22,134}, {-22,138}, {-22,139}, {-22,140}, {-22,141}, {-22,142}, {-22,143}, {-22,144}, {-22,145}, {-22,147}, {-21,-73}, {-21,-72}, {-21,-66}, {-21,-65}, {-21,-61}, {-21,-60}, {-21,36}, {-21,37}, {-21,38}, {-21,39}, {-21,40}, {-21,41}, {-21,42}, {-21,43}, {-21,44}, {-21,45}, {-21,46}, {-21,47}, {-21,50}, {-21,51}, {-21,52}, {-21,53}, {-21,54}, {-21,55}, {-21,56}, {-21,57}, {-21,58}, {-21,59}, {-21,60}, {-21,61}, {-21,62}, {-21,63}, {-21,64}, {-21,66}, {-21,67}, {-21,68}, {-21,71}, {-21,118}, {-21,119}, {-21,125}, {-21,128}, {-21,134}, {-21,138}, {-21,139}, {-21,141}, {-21,147}, {-20,-73}, {-20,-72}, {-20,-66}, {-20,-65}, {-20,-61}, {-20,-60}, {-20,36}, {-20,37}, {-20,38}, {-20,39}, {-20,40}, {-20,41}, {-20,42}, {-20,43}, {-20,44}, {-20,45}, {-20,46}, {-20,47}, {-20,50}, {-20,51}, {-20,52}, {-20,53}, {-20,54}, {-20,55}, {-20,56}, {-20,57}, {-20,58}, {-20,59}, {-20,60}, {-20,61}, {-20,62}, {-20,63}, {-20,64}, {-20,66}, {-20,67}, {-20,68}, {-20,71}, {-20,118}, {-20,119}, {-20,121}, {-20,122}, {-20,123}, {-20,124}, {-20,125}, {-20,128}, {-20,130}, {-20,131}, {-20,132}, {-20,133}, {-20,134}, {-20,138}, {-20,139}, {-20,141}, {-20,147}, {-19,-73}, {-19,-72}, {-19,-66}, {-19,-65}, {-19,-61}, {-19,-60}, {-19,36}, {-19,37}, {-19,41}, {-19,42}, {-19,55}, {-19,56}, {-19,60}, {-19,61}, {-19,68}, {-19,71}, {-19,118}, {-19,119}, {-19,122}, {-19,125}, {-19,128}, {-19,131}, {-19,134}, {-19,138}, {-19,139}, {-19,141}, {-19,147}, {-18,-73}, {-18,-72}, {-18,-66}, {-18,-65}, {-18,-64}, {-18,-63}, {-18,-62}, {-18,-61}, {-18,-60}, {-18,36}, {-18,37}, {-18,41}, {-18,42}, {-18,68}, {-18,71}, {-18,118}, {-18,119}, {-18,122}, {-18,125}, {-18,128}, {-18,131}, {-18,134}, {-18,138}, {-18,139}, {-18,141}, {-18,147}, {-17,-73}, {-17,-72}, {-17,-66}, {-17,-65}, {-17,-61}, {-17,-60}, {-17,36}, {-17,37}, {-17,41}, {-17,42}, {-17,55}, {-17,56}, {-17,60}, {-17,61}, {-17,68}, {-17,71}, {-17,118}, {-17,119}, {-17,120}, {-17,121}, {-17,122}, {-17,123}, {-17,125}, {-17,128}, {-17,129}, {-17,130}, {-17,131}, {-17,132}, {-17,134}, {-17,138}, {-17,139}, {-17,147}, {-16,-73}, {-16,-72}, {-16,-66}, {-16,-65}, {-16,-61}, {-16,-60}, {-16,31}, {-16,32}, {-16,33}, {-16,34}, {-16,35}, {-16,36}, {-16,37}, {-16,38}, {-16,40}, {-16,41}, {-16,42}, {-16,43}, {-16,44}, {-16,45}, {-16,46}, {-16,47}, {-16,48}, {-16,49}, {-16,50}, {-16,51}, {-16,52}, {-16,53}, {-16,54}, {-16,55}, {-16,56}, {-16,57}, {-16,58}, {-16,59}, {-16,60}, {-16,61}, {-16,68}, {-16,71}, {-16,118}, {-16,119}, {-16,125}, {-16,128}, {-16,134}, {-16,138}, {-16,139}, {-16,141}, {-16,147}, {-15,-73}, {-15,-72}, {-15,-66}, {-15,-65}, {-15,-61}, {-15,-60}, {-15,31}, {-15,33}, {-15,36}, {-15,37}, {-15,38}, {-15,40}, {-15,41}, {-15,42}, {-15,43}, {-15,44}, {-15,45}, {-15,46}, {-15,47}, {-15,48}, {-15,49}, {-15,50}, {-15,51}, {-15,52}, {-15,53}, {-15,54}, {-15,55}, {-15,56}, {-15,57}, {-15,58}, {-15,59}, {-15,60}, {-15,61}, {-15,68}, {-15,71}, {-15,118}, {-15,119}, {-15,125}, {-15,128}, {-15,134}, {-15,138}, {-15,139}, {-15,141}, {-15,147}, {-14,-73}, {-14,-72}, {-14,-66}, {-14,-65}, {-14,-61}, {-14,-60}, {-14,31}, {-14,41}, {-14,42}, {-14,55}, {-14,56}, {-14,68}, {-14,71}, {-14,118}, {-14,119}, {-14,128}, {-14,138}, {-14,139}, {-14,141}, {-14,142}, {-14,143}, {-14,144}, {-14,145}, {-14,146}, {-14,147}, {-13,-73}, {-13,-72}, {-13,-66}, {-13,-65}, {-13,-61}, {-13,-60}, {-13,31}, {-13,33}, {-13,41}, {-13,42}, {-13,55}, {-13,56}, {-13,68}, {-13,71}, {-13,118}, {-13,119}, {-13,125}, {-13,128}, {-13,134}, {-13,138}, {-13,139}, {-13,141}, {-13,147}, {-12,-73}, {-12,-72}, {-12,-66}, {-12,-65}, {-12,-61}, {-12,-60}, {-12,31}, {-12,33}, {-12,37}, {-12,38}, {-12,41}, {-12,42}, {-12,45}, {-12,46}, {-12,51}, {-12,52}, {-12,55}, {-12,56}, {-12,59}, {-12,60}, {-12,68}, {-12,71}, {-12,118}, {-12,119}, {-12,125}, {-12,128}, {-12,134}, {-12,138}, {-12,139}, {-12,141}, {-12,145}, {-12,147}, {-11,-73}, {-11,-72}, {-11,-66}, {-11,-65}, {-11,-61}, {-11,-60}, {-11,31}, {-11,32}, {-11,33}, {-11,37}, {-11,38}, {-11,41}, {-11,42}, {-11,45}, {-11,46}, {-11,51}, {-11,52}, {-11,55}, {-11,56}, {-11,59}, {-11,60}, {-11,68}, {-11,71}, {-11,118}, {-11,119}, {-11,120}, {-11,121}, {-11,122}, {-11,123}, {-11,124}, {-11,125}, {-11,128}, {-11,129}, {-11,130}, {-11,131}, {-11,132}, {-11,133}, {-11,134}, {-11,138}, {-11,139}, {-11,141}, {-11,145}, {-11,147}, {-10,-73}, {-10,-72}, {-10,-66}, {-10,-65}, {-10,-61}, {-10,-60}, {-10,41}, {-10,42}, {-10,55}, {-10,56}, {-10,68}, {-10,71}, {-10,118}, {-10,119}, {-10,125}, {-10,128}, {-10,134}, {-10,138}, {-10,139}, {-10,141}, {-10,145}, {-10,147}, {-9,-73}, {-9,-72}, {-9,-66}, {-9,-65}, {-9,-61}, {-9,-60}, {-9,118}, {-9,119}, {-9,120}, {-9,125}, {-9,128}, {-9,129}, {-9,132}, {-9,133}, {-9,134}, {-9,138}, {-9,139}, {-9,145}, {-9,147}, {-8,-73}, {-8,-72}, {-8,-66}, {-8,-65}, {-8,-61}, {-8,-60}, {-8,118}, {-8,119}, {-8,125}, {-8,128}, {-8,134}, {-8,138}, {-8,139}, {-8,141}, {-8,145}, {-8,147}, {-7,-73}, {-7,-72}, {-7,-66}, {-7,-65}, {-7,-61}, {-7,-60}, {-7,41}, {-7,42}, {-7,55}, {-7,56}, {-7,68}, {-7,71}, {-7,118}, {-7,119}, {-7,128}, {-7,134}, {-7,138}, {-7,139}, {-7,141}, {-7,145}, {-7,147}, {-6,-73}, {-6,-72}, {-6,-66}, {-6,-65}, {-6,-61}, {-6,-60}, {-6,31}, {-6,32}, {-6,33}, {-6,37}, {-6,38}, {-6,41}, {-6,42}, {-6,45}, {-6,46}, {-6,51}, {-6,52}, {-6,55}, {-6,56}, {-6,59}, {-6,60}, {-6,68}, {-6,71}, {-6,118}, {-6,119}, {-6,125}, {-6,128}, {-6,134}, {-6,141}, {-6,142}, {-6,143}, {-6,144}, {-6,145}, {-6,146}, {-6,147}, {-5,-73}, {-5,-72}, {-5,-66}, {-5,-65}, {-5,-61}, {-5,-60}, {-5,31}, {-5,33}, {-5,37}, {-5,38}, {-5,41}, {-5,42}, {-5,45}, {-5,46}, {-5,51}, {-5,52}, {-5,55}, {-5,56}, {-5,59}, {-5,60}, {-5,68}, {-5,69}, {-5,70}, {-5,71}, {-5,72}, {-5,73}, {-5,75}, {-5,76}, {-5,77}, {-5,118}, {-5,119}, {-5,125}, {-5,128}, {-5,134}, {-5,141}, {-5,147}, {-4,-73}, {-4,-72}, {-4,-66}, {-4,-65}, {-4,-61}, {-4,-60}, {-4,31}, {-4,33}, {-4,41}, {-4,42}, {-4,55}, {-4,56}, {-4,68}, {-4,71}, {-4,77}, {-4,90}, {-4,91}, {-4,92}, {-4,93}, {-4,94}, {-4,95}, {-4,96}, {-4,97}, {-4,98}, {-4,99}, {-4,100}, {-4,101}, {-4,102}, {-4,103}, {-4,104}, {-4,105}, {-4,106}, {-4,107}, {-4,108}, {-4,109}, {-4,110}, {-4,111}, {-4,112}, {-4,113}, {-4,114}, {-4,115}, {-4,116}, {-4,117}, {-4,118}, {-4,119}, {-4,125}, {-4,128}, {-4,134}, {-4,138}, {-4,139}, {-4,141}, {-4,147}, {-3,-73}, {-3,-72}, {-3,-66}, {-3,-65}, {-3,-61}, {-3,-60}, {-3,31}, {-3,41}, {-3,42}, {-3,55}, {-3,56}, {-3,68}, {-3,90}, {-3,91}, {-3,92}, {-3,93}, {-3,94}, {-3,95}, {-3,96}, {-3,97}, {-3,98}, {-3,99}, {-3,100}, {-3,101}, {-3,102}, {-3,103}, {-3,104}, {-3,105}, {-3,106}, {-3,107}, {-3,108}, {-3,109}, {-3,110}, {-3,111}, {-3,112}, {-3,113}, {-3,114}, {-3,115}, {-3,116}, {-3,117}, {-3,118}, {-3,119}, {-3,120}, {-3,121}, {-3,122}, {-3,123}, {-3,124}, {-3,125}, {-3,128}, {-3,129}, {-3,131}, {-3,132}, {-3,133}, {-3,134}, {-3,138}, {-3,139}, {-3,147}, {-2,-73}, {-2,-72}, {-2,-66}, {-2,-65}, {-2,-61}, {-2,-60}, {-2,31}, {-2,33}, {-2,36}, {-2,37}, {-2,38}, {-2,39}, {-2,40}, {-2,41}, {-2,42}, {-2,43}, {-2,44}, {-2,45}, {-2,46}, {-2,47}, {-2,50}, {-2,51}, {-2,52}, {-2,53}, {-2,54}, {-2,55}, {-2,56}, {-2,57}, {-2,58}, {-2,59}, {-2,60}, {-2,61}, {-2,68}, {-2,71}, {-2,90}, {-2,91}, {-2,94}, {-2,119}, {-2,125}, {-2,128}, {-2,134}, {-2,138}, {-2,139}, {-2,141}, {-2,147}, {-1,-73}, {-1,-72}, {-1,-66}, {-1,-65}, {-1,-64}, {-1,-62}, {-1,-61}, {-1,-60}, {-1,31}, {-1,32}, {-1,33}, {-1,34}, {-1,35}, {-1,36}, {-1,37}, {-1,38}, {-1,39}, {-1,40}, {-1,41}, {-1,42}, {-1,43}, {-1,44}, {-1,45}, {-1,46}, {-1,47}, {-1,50}, {-1,51}, {-1,52}, {-1,53}, {-1,54}, {-1,55}, {-1,56}, {-1,57}, {-1,58}, {-1,59}, {-1,60}, {-1,61}, {-1,68}, {-1,71}, {-1,72}, {-1,73}, {-1,75}, {-1,76}, {-1,77}, {-1,90}, {-1,91}, {-1,94}, {-1,125}, {-1,134}, {-1,138}, {-1,139}, {-1,141}, {-1,147}, {0,-73}, {0,-72}, {0,-66}, {0,-65}, {0,-61}, {0,-60}, {0,36}, {0,37}, {0,41}, {0,42}, {0,55}, {0,56}, {0,60}, {0,61}, {0,68}, {0,71}, {0,77}, {0,90}, {0,91}, {0,94}, {0,96}, {0,97}, {0,98}, {0,99}, {0,100}, {0,101}, {0,102}, {0,104}, {0,105}, {0,106}, {0,107}, {0,108}, {0,109}, {0,110}, {0,111}, {0,113}, {0,114}, {0,115}, {0,116}, {0,119}, {0,125}, {0,128}, {0,134}, {0,138}, {0,139}, {0,141}, {0,147}, {1,-73}, {1,-72}, {1,-66}, {1,-65}, {1,-61}, {1,-60}, {1,36}, {1,37}, {1,60}, {1,61}, {1,68}, {1,71}, {1,77}, {1,90}, {1,91}, {1,94}, {1,99}, {1,102}, {1,108}, {1,111}, {1,116}, {1,119}, {1,120}, {1,122}, {1,123}, {1,124}, {1,125}, {1,128}, {1,129}, {1,130}, {1,131}, {1,132}, {1,133}, {1,134}, {1,138}, {1,139}, {1,141}, {1,147}, {2,-73}, {2,-72}, {2,-66}, {2,-65}, {2,-61}, {2,-60}, {2,36}, {2,37}, {2,41}, {2,42}, {2,55}, {2,56}, {2,60}, {2,61}, {2,68}, {2,71}, {2,77}, {2,90}, {2,91}, {2,94}, {2,102}, {2,111}, {2,116}, {2,119}, {2,125}, {2,128}, {2,134}, {2,138}, {2,139}, {2,141}, {2,142}, {2,143}, {2,144}, {2,145}, {2,147}, {3,-73}, {3,-72}, {3,-66}, {3,-65}, {3,-61}, {3,-60}, {3,36}, {3,37}, {3,38}, {3,39}, {3,40}, {3,41}, {3,42}, {3,43}, {3,44}, {3,45}, {3,46}, {3,47}, {3,48}, {3,49}, {3,50}, {3,51}, {3,52}, {3,54}, {3,55}, {3,56}, {3,57}, {3,58}, {3,59}, {3,60}, {3,61}, {3,62}, {3,63}, {3,64}, {3,65}, {3,66}, {3,67}, {3,68}, {3,69}, {3,70}, {3,71}, {3,72}, {3,73}, {3,74}, {3,75}, {3,76}, {3,77}, {3,78}, {3,79}, {3,80}, {3,81}, {3,82}, {3,83}, {3,84}, {3,85}, {3,86}, {3,87}, {3,88}, {3,89}, {3,90}, {3,91}, {3,94}, {3,99}, {3,102}, {3,108}, {3,111}, {3,116}, {3,119}, {3,125}, {3,128}, {3,138}, {3,139}, {3,141}, {3,147}, {4,-73}, {4,-72}, {4,-66}, {4,-65}, {4,36}, {4,37}, {4,38}, {4,39}, {4,40}, {4,41}, {4,42}, {4,43}, {4,44}, {4,45}, {4,46}, {4,47}, {4,48}, {4,49}, {4,50}, {4,51}, {4,52}, {4,54}, {4,55}, {4,56}, {4,57}, {4,58}, {4,59}, {4,60}, {4,61}, {4,62}, {4,63}, {4,64}, {4,65}, {4,66}, {4,67}, {4,68}, {4,69}, {4,70}, {4,71}, {4,72}, {4,73}, {4,74}, {4,75}, {4,76}, {4,77}, {4,78}, {4,79}, {4,80}, {4,81}, {4,82}, {4,83}, {4,84}, {4,85}, {4,86}, {4,87}, {4,88}, {4,89}, {4,90}, {4,91}, {4,94}, {4,95}, {4,96}, {4,97}, {4,98}, {4,99}, {4,100}, {4,101}, {4,102}, {4,103}, {4,104}, {4,105}, {4,106}, {4,107}, {4,108}, {4,109}, {4,110}, {4,111}, {4,112}, {4,113}, {4,114}, {4,115}, {4,116}, {4,119}, {4,120}, {4,121}, {4,122}, {4,123}, {4,124}, {4,125}, {4,128}, {4,129}, {4,130}, {4,131}, {4,132}, {4,133}, {4,134}, {4,135}, {4,136}, {4,137}, {4,138}, {4,139}, {4,141}, {4,142}, {4,143}, {4,144}, {4,145}, {4,146}, {4,147}, {5,-73}, {5,-72}, {5,-66}, {5,-65}, {5,-61}, {5,-60}, {5,36}, {5,37}, {5,38}, {5,39}, {5,40}, {5,41}, {5,42}, {5,43}, {5,44}, {5,45}, {5,46}, {5,47}, {5,48}, {5,49}, {5,50}, {5,51}, {5,52}, {5,54}, {5,55}, {5,56}, {5,57}, {5,58}, {5,59}, {5,60}, {5,61}, {5,77}, {5,85}, {5,91}, {5,134}, {5,138}, {5,139}, {5,141}, {5,147}, {6,-73}, {6,-72}, {6,-66}, {6,-65}, {6,-61}, {6,-60}, {6,36}, {6,37}, {6,50}, {6,51}, {6,55}, {6,60}, {6,61}, {6,77}, {6,138}, {6,139}, {6,147}, {7,-73}, {7,-72}, {7,-66}, {7,-65}, {7,-61}, {7,-60}, {7,36}, {7,37}, {7,60}, {7,61}, {7,66}, {7,77}, {7,85}, {7,91}, {7,134}, {7,138}, {7,139}, {7,141}, {7,147}, {8,-73}, {8,-72}, {8,-66}, {8,-65}, {8,-61}, {8,-60}, {8,36}, {8,37}, {8,60}, {8,61}, {8,66}, {8,67}, {8,68}, {8,69}, {8,70}, {8,72}, {8,73}, {8,74}, {8,75}, {8,76}, {8,77}, {8,78}, {8,79}, {8,80}, {8,81}, {8,82}, {8,83}, {8,84}, {8,85}, {8,86}, {8,87}, {8,88}, {8,89}, {8,90}, {8,91}, {8,92}, {8,94}, {8,95}, {8,96}, {8,97}, {8,98}, {8,99}, {8,100}, {8,101}, {8,102}, {8,103}, {8,104}, {8,105}, {8,106}, {8,107}, {8,109}, {8,110}, {8,111}, {8,112}, {8,114}, {8,115}, {8,116}, {8,117}, {8,118}, {8,119}, {8,120}, {8,122}, {8,123}, {8,124}, {8,125}, {8,126}, {8,127}, {8,128}, {8,130}, {8,131}, {8,132}, {8,133}, {8,134}, {8,135}, {8,137}, {8,138}, {8,139}, {8,140}, {8,141}, {8,142}, {8,143}, {8,144}, {8,145}, {8,146}, {8,147}, {9,-73}, {9,-72}, {9,-66}, {9,-65}, {9,-61}, {9,-60}, {9,36}, {9,37}, {9,50}, {9,51}, {9,55}, {9,60}, {9,61}, {9,66}, {9,75}, {9,85}, {9,91}, {9,101}, {9,106}, {9,110}, {9,116}, {9,118}, {9,124}, {9,126}, {9,132}, {9,134}, {9,138}, {9,139}, {10,-73}, {10,-72}, {10,-66}, {10,-65}, {10,-64}, {10,-63}, {10,-62}, {10,-61}, {10,-60}, {10,-59}, {10,-58}, {10,-57}, {10,-56}, {10,-55}, {10,-54}, {10,-53}, {10,-52}, {10,-50}, {10,-49}, {10,-48}, {10,-47}, {10,-46}, {10,-45}, {10,-44}, {10,-43}, {10,-41}, {10,-40}, {10,-39}, {10,-38}, {10,-37}, {10,-36}, {10,-35}, {10,-34}, {10,-33}, {10,-32}, {10,-31}, {10,-30}, {10,-29}, {10,-28}, {10,-27}, {10,-26}, {10,-25}, {10,-24}, {10,-23}, {10,-22}, {10,-21}, {10,-20}, {10,-19}, {10,-18}, {10,-17}, {10,-16}, {10,-15}, {10,-14}, {10,-13}, {10,-12}, {10,-11}, {10,-10}, {10,-9}, {10,-8}, {10,-7}, {10,-6}, {10,-5}, {10,-4}, {10,-3}, {10,-2}, {10,-1}, {10,0}, {10,1}, {10,2}, {10,3}, {10,4}, {10,5}, {10,6}, {10,7}, {10,8}, {10,9}, {10,10}, {10,11}, {10,12}, {10,13}, {10,14}, {10,15}, {10,16}, {10,17}, {10,18}, {10,19}, {10,20}, {10,21}, {10,22}, {10,23}, {10,24}, {10,25}, {10,26}, {10,27}, {10,28}, {10,29}, {10,30}, {10,31}, {10,32}, {10,33}, {10,34}, {10,35}, {10,36}, {10,37}, {10,38}, {10,39}, {10,40}, {10,41}, {10,42}, {10,43}, {10,44}, {10,45}, {10,46}, {10,47}, {10,48}, {10,49}, {10,50}, {10,51}, {10,52}, {10,54}, {10,55}, {10,56}, {10,57}, {10,58}, {10,59}, {10,60}, {10,61}, {10,66}, {10,75}, {10,85}, {10,91}, {10,101}, {10,106}, {10,110}, {10,116}, {10,118}, {10,124}, {10,126}, {10,132}, {10,134}, {10,138}, {10,139}, {11,-73}, {11,-72}, {11,-66}, {11,-65}, {11,-64}, {11,-63}, {11,-62}, {11,-61}, {11,-60}, {11,-59}, {11,-58}, {11,-57}, {11,-56}, {11,-55}, {11,-54}, {11,-53}, {11,-52}, {11,-50}, {11,-49}, {11,-48}, {11,-47}, {11,-46}, {11,-45}, {11,-44}, {11,-43}, {11,-41}, {11,-40}, {11,-39}, {11,-38}, {11,-37}, {11,-36}, {11,-35}, {11,-34}, {11,-33}, {11,-32}, {11,-31}, {11,-30}, {11,-29}, {11,-28}, {11,-27}, {11,-26}, {11,-25}, {11,-24}, {11,-23}, {11,-22}, {11,-21}, {11,-20}, {11,-19}, {11,-18}, {11,-17}, {11,-16}, {11,-15}, {11,-14}, {11,-13}, {11,-12}, {11,-11}, {11,-10}, {11,-9}, {11,-8}, {11,-7}, {11,-6}, {11,-5}, {11,-4}, {11,-3}, {11,-2}, {11,-1}, {11,0}, {11,1}, {11,2}, {11,3}, {11,4}, {11,5}, {11,6}, {11,7}, {11,8}, {11,9}, {11,10}, {11,11}, {11,12}, {11,13}, {11,14}, {11,15}, {11,16}, {11,17}, {11,18}, {11,19}, {11,20}, {11,21}, {11,22}, {11,23}, {11,24}, {11,25}, {11,26}, {11,27}, {11,28}, {11,29}, {11,30}, {11,31}, {11,32}, {11,33}, {11,34}, {11,35}, {11,36}, {11,37}, {11,38}, {11,39}, {11,40}, {11,41}, {11,42}, {11,43}, {11,44}, {11,45}, {11,46}, {11,47}, {11,48}, {11,49}, {11,50}, {11,51}, {11,52}, {11,54}, {11,55}, {11,56}, {11,57}, {11,58}, {11,59}, {11,60}, {11,61}, {11,62}, {11,63}, {11,64}, {11,65}, {11,66}, {11,68}, {11,69}, {11,70}, {11,71}, {11,72}, {11,74}, {11,75}, {11,85}, {11,86}, {11,87}, {11,88}, {11,90}, {11,91}, {11,92}, {11,93}, {11,94}, {11,96}, {11,97}, {11,98}, {11,99}, {11,100}, {11,101}, {11,102}, {11,104}, {11,105}, {11,106}, {11,110}, {11,116}, {11,118}, {11,124}, {11,126}, {11,132}, {11,134}, {11,138}, {11,139}, {12,-73}, {12,-72}, {12,-66}, {12,-65}, {12,-52}, {12,-50}, {12,-30}, {12,-29}, {12,-22}, {12,-21}, {12,-7}, {12,-6}, {12,1}, {12,2}, {12,23}, {12,24}, {12,46}, {12,50}, {12,51}, {12,71}, {12,91}, {12,101}, {12,106}, {12,110}, {12,118}, {12,126}, {12,134}, {12,138}, {12,139}, {13,-73}, {13,-72}, {13,-66}, {13,-65}, {13,-50}, {13,-30}, {13,-29}, {13,-22}, {13,-21}, {13,-7}, {13,-6}, {13,1}, {13,2}, {13,23}, {13,24}, {13,50}, {13,51}, {13,71}, {13,91}, {13,101}, {13,106}, {13,110}, {13,116}, {13,118}, {13,124}, {13,126}, {13,132}, {13,134}, {13,138}, {13,139}, {14,-79}, {14,-78}, {14,-77}, {14,-76}, {14,-75}, {14,-74}, {14,-73}, {14,-72}, {14,-66}, {14,-65}, {14,-52}, {14,-50}, {14,-30}, {14,-29}, {14,-22}, {14,-21}, {14,-7}, {14,-6}, {14,1}, {14,2}, {14,23}, {14,24}, {14,46}, {14,50}, {14,51}, {14,52}, {14,54}, {14,55}, {14,56}, {14,57}, {14,58}, {14,59}, {14,60}, {14,61}, {14,62}, {14,63}, {14,64}, {14,66}, {14,67}, {14,68}, {14,69}, {14,70}, {14,71}, {14,91}, {14,106}, {14,110}, {14,111}, {14,112}, {14,113}, {14,114}, {14,115}, {14,116}, {14,117}, {14,118}, {14,119}, {14,120}, {14,121}, {14,122}, {14,123}, {14,124}, {14,125}, {14,126}, {14,127}, {14,128}, {14,129}, {14,130}, {14,131}, {14,132}, {14,133}, {14,134}, {14,138}, {14,139}, {15,-87}, {15,-86}, {15,-85}, {15,-84}, {15,-83}, {15,-82}, {15,-81}, {15,-80}, {15,-79}, {15,-78}, {15,-77}, {15,-76}, {15,-75}, {15,-74}, {15,-73}, {15,-72}, {15,-66}, {15,-65}, {15,-64}, {15,-63}, {15,-62}, {15,-61}, {15,-60}, {15,-59}, {15,-58}, {15,-57}, {15,-56}, {15,-55}, {15,-54}, {15,-53}, {15,-52}, {15,-50}, {15,-49}, {15,-48}, {15,-47}, {15,-46}, {15,-45}, {15,-44}, {15,-43}, {15,-42}, {15,-41}, {15,-40}, {15,-39}, {15,-38}, {15,-37}, {15,-36}, {15,-35}, {15,-34}, {15,-33}, {15,-32}, {15,-31}, {15,-30}, {15,-29}, {15,-28}, {15,-27}, {15,-26}, {15,-25}, {15,-24}, {15,-22}, {15,-21}, {15,-20}, {15,-19}, {15,-18}, {15,-17}, {15,-16}, {15,-13}, {15,-12}, {15,-11}, {15,-10}, {15,-9}, {15,-8}, {15,-7}, {15,-6}, {15,-5}, {15,-4}, {15,-3}, {15,-2}, {15,0}, {15,1}, {15,2}, {15,3}, {15,4}, {15,5}, {15,6}, {15,7}, {15,8}, {15,9}, {15,10}, {15,11}, {15,12}, {15,13}, {15,14}, {15,17}, {15,18}, {15,19}, {15,20}, {15,21}, {15,22}, {15,23}, {15,24}, {15,25}, {15,26}, {15,27}, {15,28}, {15,29}, {15,30}, {15,33}, {15,34}, {15,35}, {15,36}, {15,37}, {15,38}, {15,39}, {15,40}, {15,41}, {15,42}, {15,43}, {15,44}, {15,45}, {15,46}, {15,50}, {15,51}, {15,55}, {15,63}, {15,67}, {15,71}, {15,91}, {15,101}, {15,106}, {15,138}, {15,139}, {16,-87}, {16,-86}, {16,-85}, {16,-84}, {16,-83}, {16,-82}, {16,-81}, {16,-80}, {16,-79}, {16,-78}, {16,-77}, {16,-76}, {16,-75}, {16,-74}, {16,-73}, {16,-72}, {16,-66}, {16,-65}, {16,-64}, {16,-63}, {16,-62}, {16,-61}, {16,-60}, {16,-59}, {16,-58}, {16,-57}, {16,-56}, {16,-55}, {16,-54}, {16,-53}, {16,-52}, {16,-50}, {16,-49}, {16,-48}, {16,-47}, {16,-46}, {16,-45}, {16,-44}, {16,-43}, {16,-42}, {16,-41}, {16,-40}, {16,-39}, {16,-38}, {16,-37}, {16,-36}, {16,-35}, {16,-34}, {16,-33}, {16,-32}, {16,-31}, {16,-30}, {16,-29}, {16,-28}, {16,-27}, {16,-26}, {16,-25}, {16,-24}, {16,-22}, {16,-21}, {16,-20}, {16,-19}, {16,-18}, {16,-17}, {16,-16}, {16,-13}, {16,-12}, {16,-11}, {16,-10}, {16,-9}, {16,-8}, {16,-7}, {16,-6}, {16,-5}, {16,-4}, {16,-3}, {16,-2}, {16,0}, {16,1}, {16,2}, {16,3}, {16,4}, {16,5}, {16,6}, {16,7}, {16,8}, {16,9}, {16,10}, {16,11}, {16,12}, {16,13}, {16,14}, {16,17}, {16,18}, {16,19}, {16,20}, {16,21}, {16,22}, {16,23}, {16,24}, {16,25}, {16,26}, {16,27}, {16,28}, {16,29}, {16,30}, {16,33}, {16,34}, {16,35}, {16,36}, {16,37}, {16,38}, {16,39}, {16,40}, {16,41}, {16,42}, {16,43}, {16,44}, {16,45}, {16,46}, {16,50}, {16,51}, {16,55}, {16,67}, {16,71}, {16,101}, {16,106}, {16,138}, {16,139}, {17,-86}, {17,-7}, {17,-6}, {17,1}, {17,2}, {17,45}, {17,46}, {17,50}, {17,51}, {17,55}, {17,63}, {17,67}, {17,71}, {17,91}, {17,101}, {17,106}, {17,138}, {17,139}, {18,-86}, {18,-7}, {18,-6}, {18,1}, {18,2}, {18,45}, {18,46}, {18,50}, {18,51}, {18,55}, {18,63}, {18,67}, {18,71}, {18,91}, {18,101}, {18,106}, {18,110}, {18,111}, {18,112}, {18,114}, {18,115}, {18,116}, {18,117}, {18,118}, {18,119}, {18,120}, {18,122}, {18,123}, {18,124}, {18,125}, {18,126}, {18,127}, {18,128}, {18,130}, {18,131}, {18,132}, {18,133}, {18,134}, {18,138}, {18,139}, {19,-86}, {19,-8}, {19,-7}, {19,-6}, {19,-5}, {19,-4}, {19,-3}, {19,-2}, {19,0}, {19,1}, {19,2}, {19,5}, {19,6}, {19,9}, {19,10}, {19,13}, {19,14}, {19,17}, {19,18}, {19,21}, {19,22}, {19,25}, {19,26}, {19,29}, {19,30}, {19,33}, {19,34}, {19,37}, {19,38}, {19,41}, {19,42}, {19,45}, {19,46}, {19,50}, {19,51}, {19,55}, {19,63}, {19,67}, {19,71}, {19,91}, {19,101}, {19,106}, {19,110}, {19,116}, {19,118}, {19,124}, {19,126}, {19,132}, {19,134}, {19,138}, {19,139}, {20,-86}, {20,-85}, {20,-84}, {20,-8}, {20,-7}, {20,-6}, {20,-5}, {20,-4}, {20,-3}, {20,-2}, {20,0}, {20,1}, {20,2}, {20,5}, {20,6}, {20,9}, {20,10}, {20,13}, {20,14}, {20,17}, {20,18}, {20,21}, {20,22}, {20,25}, {20,26}, {20,29}, {20,30}, {20,33}, {20,34}, {20,37}, {20,38}, {20,41}, {20,42}, {20,45}, {20,46}, {20,50}, {20,51}, {20,55}, {20,63}, {20,64}, {20,65}, {20,66}, {20,67}, {20,71}, {20,91}, {20,101}, {20,106}, {20,110}, {20,116}, {20,118}, {20,124}, {20,126}, {20,132}, {20,134}, {20,138}, {20,139}, {21,-86}, {21,-85}, {21,-84}, {21,-66}, {21,-65}, {21,-64}, {21,-63}, {21,-62}, {21,-61}, {21,-60}, {21,-59}, {21,-58}, {21,-57}, {21,-56}, {21,-55}, {21,-54}, {21,-53}, {21,-52}, {21,-51}, {21,-50}, {21,-49}, {21,-48}, {21,-47}, {21,-46}, {21,-45}, {21,-44}, {21,-43}, {21,1}, {21,2}, {21,45}, {21,46}, {21,50}, {21,51}, {21,55}, {21,63}, {21,67}, {21,71}, {21,72}, {21,74}, {21,75}, {21,85}, {21,86}, {21,87}, {21,88}, {21,90}, {21,91}, {21,96}, {21,97}, {21,98}, {21,99}, {21,100}, {21,101}, {21,102}, {21,106}, {21,110}, {21,116}, {21,118}, {21,124}, {21,126}, {21,132}, {21,134}, {21,138}, {21,139}, {22,-85}, {22,-84}, {22,-66}, {22,-65}, {22,-64}, {22,-63}, {22,-62}, {22,-61}, {22,-60}, {22,-59}, {22,-58}, {22,-57}, {22,-56}, {22,-55}, {22,-54}, {22,-53}, {22,-52}, {22,-51}, {22,-50}, {22,-49}, {22,-48}, {22,-47}, {22,-46}, {22,-45}, {22,-44}, {22,-43}, {22,1}, {22,2}, {22,45}, {22,46}, {22,50}, {22,51}, {22,55}, {22,56}, {22,58}, {22,59}, {22,60}, {22,61}, {22,62}, {22,63}, {22,67}, {22,71}, {22,75}, {22,85}, {22,91}, {22,101}, {22,106}, {22,110}, {22,118}, {22,126}, {22,134}, {22,138}, {22,139}, {23,-85}, {23,-84}, {23,-66}, {23,-65}, {23,-64}, {23,-63}, {23,-62}, {23,-61}, {23,-60}, {23,-59}, {23,-58}, {23,-57}, {23,-56}, {23,-55}, {23,-54}, {23,-53}, {23,-52}, {23,-51}, {23,-50}, {23,-49}, {23,-48}, {23,-47}, {23,-46}, {23,-45}, {23,-44}, {23,-43}, {23,-7}, {23,-6}, {23,-3}, {23,-2}, {23,1}, {23,2}, {23,5}, {23,6}, {23,9}, {23,10}, {23,13}, {23,14}, {23,17}, {23,18}, {23,21}, {23,22}, {23,25}, {23,26}, {23,29}, {23,30}, {23,33}, {23,34}, {23,37}, {23,38}, {23,41}, {23,42}, {23,45}, {23,46}, {23,50}, {23,51}, {23,55}, {23,63}, {23,67}, {23,71}, {23,75}, {23,85}, {23,91}, {23,101}, {23,106}, {23,110}, {23,116}, {23,118}, {23,124}, {23,126}, {23,132}, {23,134}, {23,138}, {23,139}, {24,-85}, {24,-84}, {24,-66}, {24,-65}, {24,-64}, {24,-63}, {24,-62}, {24,-61}, {24,-60}, {24,-59}, {24,-58}, {24,-57}, {24,-56}, {24,-55}, {24,-54}, {24,-53}, {24,-52}, {24,-51}, {24,-50}, {24,-49}, {24,-48}, {24,-47}, {24,-46}, {24,-45}, {24,-44}, {24,-43}, {24,-7}, {24,-6}, {24,-3}, {24,-2}, {24,1}, {24,2}, {24,5}, {24,6}, {24,9}, {24,10}, {24,13}, {24,14}, {24,17}, {24,18}, {24,21}, {24,22}, {24,25}, {24,26}, {24,29}, {24,30}, {24,33}, {24,34}, {24,37}, {24,38}, {24,41}, {24,42}, {24,45}, {24,46}, {24,50}, {24,51}, {24,52}, {24,53}, {24,54}, {24,55}, {24,63}, {24,64}, {24,66}, {24,67}, {24,68}, {24,69}, {24,70}, {24,71}, {24,72}, {24,73}, {24,74}, {24,75}, {24,76}, {24,77}, {24,78}, {24,79}, {24,80}, {24,81}, {24,82}, {24,83}, {24,84}, {24,85}, {24,86}, {24,87}, {24,88}, {24,90}, {24,91}, {24,92}, {24,93}, {24,94}, {24,95}, {24,96}, {24,97}, {24,98}, {24,99}, {24,100}, {24,101}, {24,102}, {24,103}, {24,104}, {24,105}, {24,106}, {24,110}, {24,111}, {24,112}, {24,113}, {24,115}, {24,116}, {24,117}, {24,118}, {24,119}, {24,120}, {24,121}, {24,123}, {24,124}, {24,125}, {24,126}, {24,127}, {24,128}, {24,129}, {24,131}, {24,132}, {24,133}, {24,134}, {24,138}, {24,139}, {25,-85}, {25,-84}, {25,-83}, {25,-67}, {25,-66}, {25,-65}, {25,-64}, {25,-63}, {25,-62}, {25,-61}, {25,-60}, {25,-59}, {25,-58}, {25,-57}, {25,-56}, {25,-55}, {25,-54}, {25,-53}, {25,-52}, {25,-51}, {25,-50}, {25,-49}, {25,-48}, {25,-47}, {25,-46}, {25,-45}, {25,-44}, {25,-43}, {25,-42}, {25,1}, {25,2}, {25,45}, {25,46}, {25,50}, {25,51}, {25,55}, {25,63}, {25,75}, {25,80}, {25,95}, {25,106}, {25,110}, {25,118}, {25,126}, {25,134}, {25,138}, {25,139}, {26,-84}, {26,-83}, {26,-66}, {26,-65}, {26,-64}, {26,-63}, {26,-62}, {26,-61}, {26,-60}, {26,-59}, {26,-58}, {26,-57}, {26,-56}, {26,-55}, {26,-54}, {26,-53}, {26,-52}, {26,-51}, {26,-50}, {26,-49}, {26,-48}, {26,-47}, {26,-46}, {26,-45}, {26,-44}, {26,-43}, {26,1}, {26,2}, {26,45}, {26,46}, {26,63}, {26,80}, {26,95}, {26,110}, {26,118}, {26,126}, {26,134}, {26,138}, {26,139}, {27,-84}, {27,-83}, {27,-66}, {27,-65}, {27,-64}, {27,-63}, {27,-62}, {27,-61}, {27,-60}, {27,-59}, {27,-58}, {27,-57}, {27,-56}, {27,-55}, {27,-54}, {27,-53}, {27,-52}, {27,-51}, {27,-50}, {27,-49}, {27,-48}, {27,-47}, {27,-46}, {27,-45}, {27,-44}, {27,-43}, {27,-7}, {27,-6}, {27,-3}, {27,-2}, {27,1}, {27,2}, {27,5}, {27,6}, {27,9}, {27,10}, {27,13}, {27,14}, {27,17}, {27,18}, {27,21}, {27,22}, {27,25}, {27,26}, {27,29}, {27,30}, {27,33}, {27,34}, {27,37}, {27,38}, {27,41}, {27,42}, {27,45}, {27,46}, {27,50}, {27,51}, {27,55}, {27,63}, {27,75}, {27,80}, {27,95}, {27,106}, {27,110}, {27,118}, {27,126}, {27,134}, {27,138}, {27,139}, {28,-84}, {28,-83}, {28,-82}, {28,-67}, {28,-66}, {28,-65}, {28,-64}, {28,-63}, {28,-62}, {28,-61}, {28,-60}, {28,-59}, {28,-58}, {28,-57}, {28,-56}, {28,-55}, {28,-54}, {28,-53}, {28,-52}, {28,-51}, {28,-50}, {28,-49}, {28,-48}, {28,-47}, {28,-46}, {28,-45}, {28,-44}, {28,-43}, {28,-42}, {28,-7}, {28,-6}, {28,-3}, {28,-2}, {28,1}, {28,2}, {28,5}, {28,6}, {28,9}, {28,10}, {28,13}, {28,14}, {28,17}, {28,18}, {28,21}, {28,22}, {28,25}, {28,26}, {28,29}, {28,30}, {28,33}, {28,34}, {28,37}, {28,38}, {28,41}, {28,42}, {28,45}, {28,46}, {28,50}, {28,51}, {28,52}, {28,53}, {28,54}, {28,55}, {28,56}, {28,57}, {28,58}, {28,59}, {28,60}, {28,61}, {28,62}, {28,63}, {28,64}, {28,65}, {28,66}, {28,67}, {28,68}, {28,69}, {28,70}, {28,71}, {28,72}, {28,73}, {28,74}, {28,75}, {28,76}, {28,77}, {28,78}, {28,79}, {28,80}, {28,81}, {28,82}, {28,83}, {28,84}, {28,85}, {28,86}, {28,87}, {28,88}, {28,89}, {28,90}, {28,91}, {28,92}, {28,93}, {28,94}, {28,95}, {28,96}, {28,97}, {28,98}, {28,99}, {28,100}, {28,101}, {28,102}, {28,103}, {28,104}, {28,105}, {28,106}, {28,107}, {28,108}, {28,109}, {28,110}, {28,111}, {28,112}, {28,113}, {28,114}, {28,115}, {28,116}, {28,117}, {28,118}, {28,119}, {28,120}, {28,121}, {28,122}, {28,123}, {28,124}, {28,125}, {28,126}, {28,127}, {28,128}, {28,129}, {28,130}, {28,131}, {28,132}, {28,133}, {28,134}, {28,135}, {28,136}, {28,137}, {28,138}, {28,139}, {29,-84}, {29,-83}, {29,-82}, {29,-66}, {29,-65}, {29,-64}, {29,-63}, {29,-46}, {29,-45}, {29,-44}, {29,-43}, {29,50}, {29,51}, {30,-83}, {30,-82}, {30,-66}, {30,-65}, {30,-64}, {30,-63}, {30,-46}, {30,-45}, {30,-44}, {30,-43}, {30,50}, {30,51}, {31,-83}, {31,-82}, {31,-67}, {31,-66}, {31,-65}, {31,-64}, {31,-63}, {31,-46}, {31,-45}, {31,-44}, {31,-43}, {31,-42}, {31,-7}, {31,-6}, {31,-3}, {31,-2}, {31,1}, {31,2}, {31,5}, {31,6}, {31,9}, {31,10}, {31,13}, {31,14}, {31,17}, {31,18}, {31,21}, {31,22}, {31,25}, {31,26}, {31,29}, {31,30}, {31,33}, {31,34}, {31,37}, {31,38}, {31,41}, {31,42}, {31,45}, {31,46}, {31,50}, {31,51}, {32,-83}, {32,-82}, {32,-81}, {32,-66}, {32,-65}, {32,-64}, {32,-63}, {32,-46}, {32,-45}, {32,-44}, {32,-43}, {32,-7}, {32,-6}, {32,-3}, {32,-2}, {32,1}, {32,2}, {32,5}, {32,6}, {32,9}, {32,10}, {32,13}, {32,14}, {32,17}, {32,18}, {32,21}, {32,22}, {32,25}, {32,26}, {32,29}, {32,30}, {32,33}, {32,34}, {32,37}, {32,38}, {32,41}, {32,42}, {32,45}, {32,46}, {32,50}, {32,51}, {33,-82}, {33,-81}, {33,-66}, {33,-65}, {33,-64}, {33,-63}, {33,-59}, {33,-58}, {33,-57}, {33,-52}, {33,-51}, {33,-50}, {33,-46}, {33,-45}, {33,-44}, {33,-43}, {33,1}, {33,2}, {33,45}, {33,46}, {33,50}, {33,51}, {34,-82}, {34,-81}, {34,-67}, {34,-66}, {34,-65}, {34,-64}, {34,-63}, {34,-59}, {34,-58}, {34,-57}, {34,-52}, {34,-51}, {34,-50}, {34,-46}, {34,-45}, {34,-44}, {34,-43}, {34,-42}, {34,1}, {34,2}, {34,45}, {34,46}, {34,50}, {34,51}, {34,57}, {34,58}, {34,59}, {34,60}, {34,61}, {34,62}, {34,63}, {34,64}, {34,65}, {34,66}, {34,67}, {34,68}, {34,69}, {34,70}, {34,71}, {34,72}, {34,73}, {34,74}, {34,75}, {34,76}, {34,77}, {34,78}, {34,79}, {34,80}, {34,81}, {34,82}, {34,83}, {34,84}, {34,85}, {34,86}, {34,87}, {34,88}, {34,89}, {34,90}, {34,91}, {34,92}, {34,93}, {34,94}, {34,95}, {34,96}, {34,97}, {34,98}, {34,99}, {34,100}, {34,101}, {34,102}, {34,103}, {34,104}, {34,105}, {34,106}, {34,107}, {34,108}, {34,109}, {34,110}, {34,111}, {34,112}, {34,113}, {34,114}, {34,115}, {34,116}, {34,117}, {34,118}, {34,119}, {34,120}, {34,121}, {34,122}, {34,123}, {34,124}, {34,125}, {34,126}, {34,127}, {34,128}, {34,129}, {34,130}, {34,131}, {34,132}, {34,133}, {34,134}, {34,135}, {34,136}, {34,137}, {34,138}, {34,139}, {34,140}, {34,141}, {34,142}, {34,143}, {34,144}, {35,-82}, {35,-81}, {35,-67}, {35,-66}, {35,-65}, {35,-64}, {35,-63}, {35,-59}, {35,-58}, {35,-57}, {35,-52}, {35,-51}, {35,-50}, {35,-46}, {35,-45}, {35,-44}, {35,-43}, {35,-42}, {35,-7}, {35,-6}, {35,-3}, {35,-2}, {35,1}, {35,2}, {35,5}, {35,6}, {35,9}, {35,10}, {35,13}, {35,14}, {35,17}, {35,18}, {35,21}, {35,22}, {35,25}, {35,26}, {35,29}, {35,30}, {35,33}, {35,34}, {35,37}, {35,38}, {35,41}, {35,42}, {35,45}, {35,46}, {35,50}, {35,51}, {35,57}, {35,58}, {35,59}, {35,60}, {35,61}, {35,62}, {35,63}, {35,64}, {35,65}, {35,66}, {35,67}, {35,68}, {35,69}, {35,70}, {35,71}, {35,72}, {35,73}, {35,74}, {35,75}, {35,76}, {35,77}, {35,78}, {35,79}, {35,80}, {35,81}, {35,82}, {35,83}, {35,84}, {35,85}, {35,86}, {35,87}, {35,88}, {35,89}, {35,90}, {35,91}, {35,92}, {35,93}, {35,94}, {35,95}, {35,96}, {35,97}, {35,98}, {35,99}, {35,100}, {35,101}, {35,102}, {35,103}, {35,104}, {35,105}, {35,106}, {35,107}, {35,108}, {35,109}, {35,110}, {35,111}, {35,112}, {35,113}, {35,114}, {35,115}, {35,116}, {35,117}, {35,118}, {35,119}, {35,120}, {35,121}, {35,122}, {35,123}, {35,124}, {35,125}, {35,126}, {35,127}, {35,128}, {35,129}, {35,130}, {35,131}, {35,132}, {35,133}, {35,134}, {35,135}, {35,136}, {35,137}, {35,138}, {35,139}, {35,140}, {35,141}, {35,142}, {35,143}, {35,144}, {36,-82}, {36,-81}, {36,-80}, {36,-7}, {36,-6}, {36,-3}, {36,-2}, {36,1}, {36,2}, {36,5}, {36,6}, {36,9}, {36,10}, {36,13}, {36,14}, {36,17}, {36,18}, {36,21}, {36,22}, {36,25}, {36,26}, {36,29}, {36,30}, {36,33}, {36,34}, {36,37}, {36,38}, {36,41}, {36,42}, {36,45}, {36,46}, {36,50}, {36,51}, {36,57}, {36,58}, {36,62}, {36,68}, {36,74}, {36,75}, {36,79}, {36,80}, {36,88}, {36,96}, {36,104}, {36,105}, {36,109}, {36,127}, {36,139}, {36,143}, {36,144}, {37,-82}, {37,-81}, {37,-80}, {37,1}, {37,2}, {37,45}, {37,46}, {37,50}, {37,51}, {37,57}, {37,58}, {37,68}, {37,74}, {37,75}, {37,79}, {37,80}, {37,104}, {37,105}, {37,127}, {37,143}, {37,144}, {38,-81}, {38,-80}, {38,1}, {38,2}, {38,45}, {38,46}, {38,50}, {38,51}, {38,57}, {38,58}, {38,62}, {38,68}, {38,74}, {38,75}, {38,79}, {38,80}, {38,88}, {38,96}, {38,104}, {38,105}, {38,109}, {38,127}, {38,139}, {38,143}, {38,144}, {39,-81}, {39,-80}, {39,-7}, {39,-6}, {39,-3}, {39,-2}, {39,1}, {39,2}, {39,5}, {39,6}, {39,9}, {39,10}, {39,13}, {39,14}, {39,17}, {39,18}, {39,21}, {39,22}, {39,25}, {39,26}, {39,29}, {39,30}, {39,33}, {39,34}, {39,37}, {39,38}, {39,41}, {39,42}, {39,45}, {39,46}, {39,50}, {39,51}, {39,57}, {39,58}, {39,59}, {39,60}, {39,61}, {39,62}, {39,63}, {39,65}, {39,66}, {39,67}, {39,68}, {39,69}, {39,70}, {39,71}, {39,74}, {39,75}, {39,79}, {39,80}, {39,81}, {39,82}, {39,83}, {39,84}, {39,85}, {39,86}, {39,87}, {39,88}, {39,89}, {39,90}, {39,92}, {39,93}, {39,94}, {39,95}, {39,96}, {39,97}, {39,98}, {39,99}, {39,100}, {39,101}, {39,102}, {39,103}, {39,104}, {39,105}, {39,109}, {39,110}, {39,111}, {39,112}, {39,113}, {39,114}, {39,115}, {39,117}, {39,118}, {39,119}, {39,120}, {39,121}, {39,122}, {39,123}, {39,124}, {39,126}, {39,127}, {39,128}, {39,129}, {39,130}, {39,131}, {39,132}, {39,133}, {39,134}, {39,135}, {39,137}, {39,138}, {39,139}, {39,143}, {39,144}, {40,-81}, {40,-80}, {40,-79}, {40,-67}, {40,-66}, {40,-65}, {40,-64}, {40,-63}, {40,-59}, {40,-58}, {40,-57}, {40,-52}, {40,-51}, {40,-50}, {40,-46}, {40,-45}, {40,-44}, {40,-43}, {40,-42}, {40,-7}, {40,-6}, {40,-3}, {40,-2}, {40,1}, {40,2}, {40,5}, {40,6}, {40,9}, {40,10}, {40,13}, {40,14}, {40,17}, {40,18}, {40,21}, {40,22}, {40,25}, {40,26}, {40,29}, {40,30}, {40,33}, {40,34}, {40,37}, {40,38}, {40,41}, {40,42}, {40,45}, {40,46}, {40,50}, {40,51}, {40,57}, {40,58}, {40,62}, {40,74}, {40,75}, {40,79}, {40,80}, {40,104}, {40,105}, {40,109}, {40,123}, {40,127}, {40,139}, {40,143}, {40,144}, {41,-80}, {41,-79}, {41,-67}, {41,-66}, {41,-65}, {41,-64}, {41,-63}, {41,-59}, {41,-58}, {41,-57}, {41,-52}, {41,-51}, {41,-50}, {41,-46}, {41,-45}, {41,-44}, {41,-43}, {41,-42}, {41,1}, {41,2}, {41,45}, {41,46}, {41,50}, {41,51}, {41,57}, {41,58}, {41,62}, {41,74}, {41,75}, {41,79}, {41,80}, {41,104}, {41,105}, {41,109}, {41,123}, {41,127}, {41,137}, {41,138}, {41,139}, {41,143}, {41,144}, {42,-80}, {42,-79}, {42,-66}, {42,-65}, {42,-64}, {42,-63}, {42,-59}, {42,-58}, {42,-57}, {42,-52}, {42,-51}, {42,-50}, {42,-46}, {42,-45}, {42,-44}, {42,-43}, {42,1}, {42,2}, {42,45}, {42,46}, {42,50}, {42,51}, {42,57}, {42,58}, {42,62}, {42,74}, {42,75}, {42,123}, {42,127}, {42,139}, {42,143}, {42,144}, {43,-80}, {43,-79}, {43,-66}, {43,-65}, {43,-64}, {43,-63}, {43,-46}, {43,-45}, {43,-44}, {43,-43}, {43,-7}, {43,-6}, {43,-3}, {43,-2}, {43,1}, {43,2}, {43,5}, {43,6}, {43,9}, {43,10}, {43,13}, {43,14}, {43,17}, {43,18}, {43,21}, {43,22}, {43,25}, {43,26}, {43,29}, {43,30}, {43,33}, {43,34}, {43,37}, {43,38}, {43,41}, {43,42}, {43,45}, {43,46}, {43,50}, {43,51}, {43,57}, {43,58}, {43,62}, {43,74}, {43,75}, {43,79}, {43,80}, {43,104}, {43,105}, {43,109}, {43,123}, {43,127}, {43,137}, {43,138}, {43,139}, {43,143}, {43,144}, {44,-80}, {44,-79}, {44,-78}, {44,-67}, {44,-66}, {44,-65}, {44,-64}, {44,-63}, {44,-46}, {44,-45}, {44,-44}, {44,-43}, {44,-42}, {44,-7}, {44,-6}, {44,-3}, {44,-2}, {44,1}, {44,2}, {44,5}, {44,6}, {44,9}, {44,10}, {44,13}, {44,14}, {44,17}, {44,18}, {44,21}, {44,22}, {44,25}, {44,26}, {44,29}, {44,30}, {44,33}, {44,34}, {44,37}, {44,38}, {44,41}, {44,42}, {44,45}, {44,46}, {44,50}, {44,51}, {44,57}, {44,58}, {44,74}, {44,75}, {44,79}, {44,80}, {44,104}, {44,105}, {44,109}, {44,123}, {44,127}, {44,139}, {44,143}, {44,144}, {45,-80}, {45,-79}, {45,-78}, {45,-66}, {45,-65}, {45,-64}, {45,-63}, {45,-46}, {45,-45}, {45,-44}, {45,-43}, {45,50}, {45,51}, {45,57}, {45,58}, {45,62}, {45,74}, {45,75}, {45,79}, {45,80}, {45,104}, {45,105}, {45,109}, {45,123}, {45,127}, {45,137}, {45,138}, {45,139}, {45,143}, {45,144}, {46,-79}, {46,-78}, {46,-66}, {46,-65}, {46,-64}, {46,-63}, {46,-46}, {46,-45}, {46,-44}, {46,-43}, {46,50}, {46,51}, {46,57}, {46,58}, {46,62}, {46,74}, {46,75}, {46,79}, {46,80}, {46,104}, {46,105}, {46,109}, {46,123}, {46,127}, {46,139}, {46,143}, {46,144}, {47,-79}, {47,-78}, {47,-67}, {47,-66}, {47,-65}, {47,-64}, {47,-63}, {47,-62}, {47,-61}, {47,-59}, {47,-58}, {47,-57}, {47,-56}, {47,-55}, {47,-54}, {47,-53}, {47,-52}, {47,-51}, {47,-50}, {47,-49}, {47,-48}, {47,-47}, {47,-46}, {47,-45}, {47,-44}, {47,-43}, {47,-42}, {47,-7}, {47,-6}, {47,-3}, {47,-2}, {47,1}, {47,2}, {47,5}, {47,6}, {47,9}, {47,10}, {47,13}, {47,14}, {47,17}, {47,18}, {47,21}, {47,22}, {47,25}, {47,26}, {47,29}, {47,30}, {47,33}, {47,34}, {47,37}, {47,38}, {47,41}, {47,42}, {47,45}, {47,46}, {47,50}, {47,51}, {47,57}, {47,58}, {47,62}, {47,74}, {47,75}, {47,79}, {47,80}, {47,104}, {47,105}, {47,109}, {47,123}, {47,127}, {47,137}, {47,138}, {47,139}, {47,143}, {47,144}, {48,-79}, {48,-78}, {48,-77}, {48,-66}, {48,-65}, {48,-64}, {48,-63}, {48,-62}, {48,-61}, {48,-59}, {48,-58}, {48,-57}, {48,-56}, {48,-55}, {48,-54}, {48,-53}, {48,-52}, {48,-51}, {48,-50}, {48,-49}, {48,-48}, {48,-47}, {48,-46}, {48,-45}, {48,-44}, {48,-43}, {48,-7}, {48,-6}, {48,-3}, {48,-2}, {48,1}, {48,2}, {48,5}, {48,6}, {48,9}, {48,10}, {48,13}, {48,14}, {48,17}, {48,18}, {48,21}, {48,22}, {48,25}, {48,26}, {48,29}, {48,30}, {48,33}, {48,34}, {48,37}, {48,38}, {48,41}, {48,42}, {48,45}, {48,46}, {48,50}, {48,51}, {48,57}, {48,58}, {48,59}, {48,60}, {48,61}, {48,62}, {48,74}, {48,75}, {48,79}, {48,80}, {48,104}, {48,105}, {48,109}, {48,123}, {48,127}, {48,139}, {48,143}, {48,144}, {49,-87}, {49,-86}, {49,-79}, {49,-78}, {49,-77}, {49,-66}, {49,-65}, {49,-64}, {49,-63}, {49,-62}, {49,-61}, {49,-59}, {49,-58}, {49,-57}, {49,-56}, {49,-55}, {49,-54}, {49,-53}, {49,-52}, {49,-51}, {49,-50}, {49,-49}, {49,-48}, {49,-47}, {49,-46}, {49,-45}, {49,-44}, {49,-43}, {49,1}, {49,2}, {49,45}, {49,46}, {49,50}, {49,51}, {49,57}, {49,58}, {49,62}, {49,74}, {49,75}, {49,76}, {49,77}, {49,78}, {49,79}, {49,80}, {49,104}, {49,105}, {49,109}, {49,123}, {49,127}, {49,137}, {49,138}, {49,139}, {49,143}, {49,144}, {50,-88}, {50,-87}, {50,-86}, {50,-85}, {50,-78}, {50,-77}, {50,-67}, {50,-66}, {50,-65}, {50,-64}, {50,-63}, {50,-46}, {50,-45}, {50,-44}, {50,-43}, {50,-42}, {50,1}, {50,2}, {50,45}, {50,46}, {50,50}, {50,51}, {50,57}, {50,58}, {50,62}, {50,74}, {50,75}, {50,79}, {50,80}, {50,104}, {50,105}, {50,109}, {50,123}, {50,127}, {50,139}, {50,143}, {50,144}, {51,-90}, {51,-89}, {51,-88}, {51,-87}, {51,-86}, {51,-85}, {51,-78}, {51,-77}, {51,-66}, {51,-65}, {51,-64}, {51,-63}, {51,-46}, {51,-45}, {51,-44}, {51,-43}, {51,-7}, {51,-6}, {51,-3}, {51,-2}, {51,1}, {51,2}, {51,5}, {51,6}, {51,9}, {51,10}, {51,13}, {51,14}, {51,17}, {51,18}, {51,21}, {51,22}, {51,25}, {51,26}, {51,29}, {51,30}, {51,33}, {51,34}, {51,37}, {51,38}, {51,41}, {51,42}, {51,45}, {51,46}, {51,50}, {51,51}, {51,57}, {51,58}, {51,62}, {51,74}, {51,75}, {51,79}, {51,80}, {51,104}, {51,105}, {51,109}, {51,110}, {51,112}, {51,113}, {51,114}, {51,115}, {51,116}, {51,117}, {51,118}, {51,119}, {51,120}, {51,121}, {51,122}, {51,123}, {51,124}, {51,126}, {51,127}, {51,128}, {51,129}, {51,130}, {51,131}, {51,132}, {51,133}, {51,134}, {51,135}, {51,136}, {51,137}, {51,138}, {51,139}, {51,140}, {51,141}, {51,142}, {51,143}, {51,144}, {52,-91}, {52,-90}, {52,-89}, {52,-88}, {52,-87}, {52,-86}, {52,-85}, {52,-84}, {52,-78}, {52,-77}, {52,-76}, {52,-66}, {52,-65}, {52,-64}, {52,-63}, {52,-62}, {52,-61}, {52,-60}, {52,-59}, {52,-58}, {52,-57}, {52,-56}, {52,-55}, {52,-54}, {52,-53}, {52,-52}, {52,-51}, {52,-50}, {52,-49}, {52,-48}, {52,-47}, {52,-46}, {52,-45}, {52,-44}, {52,-43}, {52,-7}, {52,-6}, {52,-3}, {52,-2}, {52,1}, {52,2}, {52,5}, {52,6}, {52,9}, {52,10}, {52,13}, {52,14}, {52,17}, {52,18}, {52,21}, {52,22}, {52,25}, {52,26}, {52,29}, {52,30}, {52,33}, {52,34}, {52,37}, {52,38}, {52,41}, {52,42}, {52,45}, {52,46}, {52,50}, {52,51}, {52,57}, {52,58}, {52,62}, {52,74}, {52,75}, {52,79}, {52,80}, {52,104}, {52,105}, {52,109}, {52,114}, {52,118}, {52,130}, {52,135}, {52,139}, {52,143}, {52,144}, {53,-101}, {53,-100}, {53,-99}, {53,-98}, {53,-97}, {53,-95}, {53,-94}, {53,-93}, {53,-92}, {53,-91}, {53,-90}, {53,-89}, {53,-88}, {53,-87}, {53,-86}, {53,-85}, {53,-84}, {53,-77}, {53,-76}, {53,-66}, {53,-65}, {53,-64}, {53,-63}, {53,-62}, {53,-61}, {53,-60}, {53,-59}, {53,-58}, {53,-57}, {53,-56}, {53,-55}, {53,-54}, {53,-53}, {53,-52}, {53,-51}, {53,-50}, {53,-49}, {53,-48}, {53,-47}, {53,-46}, {53,-45}, {53,-44}, {53,-43}, {53,1}, {53,2}, {53,45}, {53,46}, {53,50}, {53,51}, {53,57}, {53,58}, {53,62}, {53,74}, {53,75}, {53,79}, {53,80}, {53,104}, {53,105}, {53,114}, {53,130}, {53,143}, {53,144}, {54,-101}, {54,-100}, {54,-99}, {54,-98}, {54,-97}, {54,-95}, {54,-94}, {54,-93}, {54,-92}, {54,-91}, {54,-85}, {54,-84}, {54,-77}, {54,-76}, {54,-66}, {54,-65}, {54,-64}, {54,-63}, {54,-62}, {54,-61}, {54,-60}, {54,-59}, {54,-58}, {54,-57}, {54,-56}, {54,-55}, {54,-54}, {54,-53}, {54,-52}, {54,-51}, {54,-50}, {54,-49}, {54,-48}, {54,-47}, {54,-46}, {54,-45}, {54,-44}, {54,-43}, {54,1}, {54,2}, {54,45}, {54,46}, {54,50}, {54,51}, {54,57}, {54,58}, {54,74}, {54,75}, {54,79}, {54,80}, {54,104}, {54,105}, {54,109}, {54,114}, {54,118}, {54,130}, {54,135}, {54,139}, {54,143}, {54,144}, {55,-101}, {55,-100}, {55,-99}, {55,-98}, {55,-97}, {55,-95}, {55,-94}, {55,-93}, {55,-92}, {55,-85}, {55,-84}, {55,-83}, {55,-77}, {55,-76}, {55,-8}, {55,-7}, {55,-6}, {55,-5}, {55,-4}, {55,-3}, {55,-2}, {55,0}, {55,1}, {55,2}, {55,5}, {55,6}, {55,9}, {55,10}, {55,13}, {55,14}, {55,17}, {55,18}, {55,21}, {55,22}, {55,25}, {55,26}, {55,29}, {55,30}, {55,33}, {55,34}, {55,37}, {55,38}, {55,41}, {55,42}, {55,45}, {55,46}, {55,50}, {55,51}, {55,57}, {55,58}, {55,62}, {55,74}, {55,75}, {55,79}, {55,80}, {55,104}, {55,105}, {55,106}, {55,108}, {55,109}, {55,110}, {55,111}, {55,112}, {55,113}, {55,114}, {55,115}, {55,116}, {55,117}, {55,118}, {55,119}, {55,120}, {55,121}, {55,122}, {55,123}, {55,124}, {55,126}, {55,127}, {55,128}, {55,129}, {55,130}, {55,132}, {55,133}, {55,134}, {55,135}, {55,136}, {55,137}, {55,138}, {55,139}, {55,140}, {55,141}, {55,142}, {55,143}, {55,144}, {56,-100}, {56,-99}, {56,-98}, {56,-94}, {56,-85}, {56,-84}, {56,-83}, {56,-77}, {56,-76}, {56,-75}, {56,-8}, {56,-7}, {56,-6}, {56,-5}, {56,-4}, {56,-3}, {56,-2}, {56,0}, {56,1}, {56,2}, {56,5}, {56,6}, {56,9}, {56,10}, {56,13}, {56,14}, {56,17}, {56,18}, {56,21}, {56,22}, {56,25}, {56,26}, {56,29}, {56,30}, {56,33}, {56,34}, {56,37}, {56,38}, {56,41}, {56,42}, {56,45}, {56,46}, {56,50}, {56,51}, {56,57}, {56,58}, {56,62}, {56,74}, {56,75}, {56,79}, {56,80}, {56,104}, {56,105}, {56,109}, {56,135}, {56,139}, {56,143}, {56,144}, {57,-100}, {57,-99}, {57,-98}, {57,-88}, {57,-87}, {57,-86}, {57,-85}, {57,-84}, {57,-83}, {57,-77}, {57,-76}, {57,-75}, {57,-7}, {57,-6}, {57,1}, {57,2}, {57,45}, {57,46}, {57,50}, {57,51}, {57,57}, {57,58}, {57,62}, {57,74}, {57,75}, {57,79}, {57,80}, {57,104}, {57,105}, {57,109}, {57,143}, {57,144}, {58,-100}, {58,-99}, {58,-98}, {58,-94}, {58,-91}, {58,-90}, {58,-89}, {58,-88}, {58,-84}, {58,-83}, {58,-82}, {58,-76}, {58,-75}, {58,-7}, {58,-6}, {58,1}, {58,2}, {58,45}, {58,46}, {58,50}, {58,51}, {58,57}, {58,58}, {58,62}, {58,74}, {58,75}, {58,79}, {58,80}, {58,104}, {58,105}, {58,109}, {58,115}, {58,116}, {58,117}, {58,118}, {58,132}, {58,133}, {58,134}, {58,135}, {58,139}, {58,143}, {58,144}, {59,-100}, {59,-99}, {59,-98}, {59,-97}, {59,-96}, {59,-94}, {59,-93}, {59,-92}, {59,-91}, {59,-84}, {59,-83}, {59,-82}, {59,-76}, {59,-75}, {59,-66}, {59,-65}, {59,-64}, {59,-63}, {59,-62}, {59,-61}, {59,-59}, {59,-58}, {59,-57}, {59,-56}, {59,-55}, {59,-54}, {59,-53}, {59,-52}, {59,-51}, {59,-50}, {59,-49}, {59,-48}, {59,-47}, {59,-46}, {59,-45}, {59,-44}, {59,-43}, {59,-42}, {59,-41}, {59,-40}, {59,-39}, {59,-38}, {59,-37}, {59,-36}, {59,-35}, {59,-17}, {59,-16}, {59,-15}, {59,-14}, {59,-13}, {59,-12}, {59,-11}, {59,-8}, {59,-7}, {59,-6}, {59,-5}, {59,-4}, {59,-3}, {59,-2}, {59,0}, {59,1}, {59,2}, {59,3}, {59,4}, {59,5}, {59,6}, {59,7}, {59,8}, {59,9}, {59,10}, {59,11}, {59,12}, {59,13}, {59,14}, {59,17}, {59,18}, {59,19}, {59,20}, {59,21}, {59,22}, {59,23}, {59,24}, {59,25}, {59,26}, {59,27}, {59,28}, {59,29}, {59,30}, {59,33}, {59,34}, {59,35}, {59,36}, {59,37}, {59,38}, {59,39}, {59,40}, {59,41}, {59,42}, {59,43}, {59,44}, {59,45}, {59,46}, {59,50}, {59,51}, {59,57}, {59,58}, {59,59}, {59,60}, {59,61}, {59,62}, {59,74}, {59,75}, {59,79}, {59,80}, {59,81}, {59,82}, {59,83}, {59,84}, {59,85}, {59,86}, {59,87}, {59,88}, {59,89}, {59,90}, {59,92}, {59,93}, {59,94}, {59,95}, {59,96}, {59,97}, {59,98}, {59,99}, {59,100}, {59,101}, {59,102}, {59,103}, {59,104}, {59,105}, {59,115}, {59,118}, {59,132}, {59,135}, {59,139}, {59,143}, {59,144}, {60,-102}, {60,-101}, {60,-100}, {60,-99}, {60,-98}, {60,-97}, {60,-93}, {60,-84}, {60,-83}, {60,-82}, {60,-76}, {60,-75}, {60,-74}, {60,-66}, {60,-65}, {60,-64}, {60,-63}, {60,-62}, {60,-61}, {60,-59}, {60,-58}, {60,-57}, {60,-56}, {60,-55}, {60,-54}, {60,-53}, {60,-52}, {60,-51}, {60,-50}, {60,-49}, {60,-48}, {60,-47}, {60,-46}, {60,-45}, {60,-44}, {60,-43}, {60,-42}, {60,-41}, {60,-40}, {60,-39}, {60,-38}, {60,-37}, {60,-36}, {60,-35}, {60,-17}, {60,-16}, {60,-15}, {60,-14}, {60,-13}, {60,-12}, {60,-11}, {60,-8}, {60,-7}, {60,-6}, {60,-5}, {60,-4}, {60,-3}, {60,-2}, {60,0}, {60,1}, {60,2}, {60,3}, {60,4}, {60,5}, {60,6}, {60,7}, {60,8}, {60,9}, {60,10}, {60,11}, {60,12}, {60,13}, {60,14}, {60,17}, {60,18}, {60,19}, {60,20}, {60,21}, {60,22}, {60,23}, {60,24}, {60,25}, {60,26}, {60,27}, {60,28}, {60,29}, {60,30}, {60,33}, {60,34}, {60,35}, {60,36}, {60,37}, {60,38}, {60,39}, {60,40}, {60,41}, {60,42}, {60,43}, {60,44}, {60,45}, {60,46}, {60,50}, {60,51}, {60,57}, {60,58}, {60,62}, {60,74}, {60,75}, {60,79}, {60,80}, {60,104}, {60,105}, {60,109}, {60,115}, {60,132}, {60,135}, {60,139}, {60,143}, {60,144}, {61,-106}, {61,-105}, {61,-104}, {61,-103}, {61,-102}, {61,-101}, {61,-100}, {61,-99}, {61,-98}, {61,-97}, {61,-87}, {61,-86}, {61,-85}, {61,-84}, {61,-83}, {61,-82}, {61,-81}, {61,-76}, {61,-75}, {61,-74}, {61,-66}, {61,-65}, {61,-54}, {61,-36}, {61,-35}, {61,-17}, {61,-16}, {61,-7}, {61,-6}, {61,1}, {61,2}, {61,23}, {61,24}, {61,45}, {61,46}, {61,50}, {61,51}, {61,57}, {61,58}, {61,62}, {61,109}, {61,115}, {61,118}, {61,132}, {61,135}, {61,139}, {61,143}, {61,144}, {62,-109}, {62,-108}, {62,-107}, {62,-106}, {62,-105}, {62,-104}, {62,-103}, {62,-102}, {62,-101}, {62,-100}, {62,-99}, {62,-98}, {62,-97}, {62,-93}, {62,-90}, {62,-89}, {62,-88}, {62,-87}, {62,-83}, {62,-82}, {62,-81}, {62,-75}, {62,-74}, {62,-66}, {62,-65}, {62,-54}, {62,-36}, {62,-35}, {62,-17}, {62,-16}, {62,-7}, {62,-6}, {62,1}, {62,2}, {62,23}, {62,24}, {62,45}, {62,46}, {62,50}, {62,51}, {62,57}, {62,58}, {62,62}, {62,74}, {62,75}, {62,79}, {62,80}, {62,104}, {62,105}, {62,109}, {62,115}, {62,118}, {62,132}, {62,135}, {62,139}, {62,143}, {62,144}, {63,-109}, {63,-108}, {63,-107}, {63,-106}, {63,-105}, {63,-104}, {63,-103}, {63,-102}, {63,-101}, {63,-100}, {63,-99}, {63,-98}, {63,-97}, {63,-96}, {63,-95}, {63,-93}, {63,-92}, {63,-91}, {63,-90}, {63,-83}, {63,-82}, {63,-81}, {63,-75}, {63,-74}, {63,-73}, {63,-66}, {63,-65}, {63,-64}, {63,-62}, {63,-61}, {63,-60}, {63,-59}, {63,-58}, {63,-57}, {63,-56}, {63,-55}, {63,-54}, {63,-53}, {63,-52}, {63,-51}, {63,-49}, {63,-48}, {63,-47}, {63,-46}, {63,-45}, {63,-44}, {63,-43}, {63,-42}, {63,-41}, {63,-40}, {63,-39}, {63,-38}, {63,-36}, {63,-35}, {63,-17}, {63,-16}, {63,-8}, {63,-7}, {63,-6}, {63,-5}, {63,-4}, {63,-3}, {63,-2}, {63,0}, {63,1}, {63,2}, {63,3}, {63,4}, {63,5}, {63,6}, {63,7}, {63,8}, {63,9}, {63,10}, {63,11}, {63,12}, {63,13}, {63,14}, {63,15}, {63,16}, {63,17}, {63,18}, {63,19}, {63,20}, {63,21}, {63,22}, {63,23}, {63,24}, {63,25}, {63,26}, {63,27}, {63,28}, {63,29}, {63,30}, {63,31}, {63,32}, {63,33}, {63,34}, {63,35}, {63,36}, {63,37}, {63,38}, {63,39}, {63,40}, {63,41}, {63,42}, {63,43}, {63,44}, {63,45}, {63,46}, {63,47}, {63,48}, {63,49}, {63,50}, {63,51}, {63,57}, {63,58}, {63,62}, {63,74}, {63,75}, {63,76}, {63,77}, {63,78}, {63,79}, {63,80}, {63,81}, {63,82}, {63,83}, {63,84}, {63,85}, {63,86}, {63,87}, {63,88}, {63,89}, {63,90}, {63,91}, {63,92}, {63,93}, {63,94}, {63,95}, {63,98}, {63,99}, {63,100}, {63,101}, {63,102}, {63,103}, {63,104}, {63,105}, {63,109}, {63,115}, {63,118}, {63,132}, {63,135}, {63,139}, {63,143}, {63,144}, {64,-109}, {64,-108}, {64,-107}, {64,-106}, {64,-105}, {64,-104}, {64,-103}, {64,-102}, {64,-101}, {64,-100}, {64,-99}, {64,-98}, {64,-97}, {64,-96}, {64,-92}, {64,-83}, {64,-82}, {64,-81}, {64,-75}, {64,-74}, {64,-73}, {64,-66}, {64,-65}, {64,-62}, {64,-54}, {64,-51}, {64,-49}, {64,-40}, {64,-39}, {64,-36}, {64,-35}, {64,-34}, {64,-33}, {64,-32}, {64,-31}, {64,-29}, {64,-28}, {64,-27}, {64,-26}, {64,-25}, {64,-24}, {64,-23}, {64,-21}, {64,-20}, {64,-19}, {64,-18}, {64,-17}, {64,-16}, {64,-12}, {64,-11}, {64,-10}, {64,-8}, {64,-7}, {64,-6}, {64,-5}, {64,-4}, {64,-3}, {64,-2}, {64,0}, {64,1}, {64,2}, {64,3}, {64,4}, {64,5}, {64,6}, {64,7}, {64,8}, {64,9}, {64,10}, {64,11}, {64,12}, {64,13}, {64,14}, {64,15}, {64,16}, {64,17}, {64,18}, {64,19}, {64,20}, {64,21}, {64,22}, {64,23}, {64,24}, {64,25}, {64,26}, {64,27}, {64,28}, {64,29}, {64,30}, {64,31}, {64,32}, {64,33}, {64,34}, {64,35}, {64,36}, {64,37}, {64,38}, {64,39}, {64,40}, {64,41}, {64,42}, {64,43}, {64,44}, {64,45}, {64,46}, {64,50}, {64,51}, {64,57}, {64,58}, {64,74}, {64,75}, {64,79}, {64,80}, {64,86}, {64,90}, {64,100}, {64,104}, {64,105}, {64,109}, {64,115}, {64,118}, {64,132}, {64,135}, {64,139}, {64,143}, {64,144}, {65,-108}, {65,-107}, {65,-106}, {65,-105}, {65,-99}, {65,-98}, {65,-97}, {65,-96}, {65,-86}, {65,-85}, {65,-83}, {65,-82}, {65,-81}, {65,-80}, {65,-75}, {65,-74}, {65,-73}, {65,-66}, {65,-65}, {65,-62}, {65,-54}, {65,-51}, {65,-40}, {65,-39}, {65,-36}, {65,-35}, {65,-34}, {65,-33}, {65,-32}, {65,-31}, {65,-29}, {65,-28}, {65,-27}, {65,-26}, {65,-25}, {65,-24}, {65,-23}, {65,-21}, {65,-20}, {65,-19}, {65,-18}, {65,-17}, {65,-16}, {65,-12}, {65,-11}, {65,-7}, {65,-6}, {65,46}, {65,50}, {65,51}, {65,57}, {65,58}, {65,62}, {65,74}, {65,75}, {65,90}, {65,104}, {65,105}, {65,109}, {65,115}, {65,118}, {65,132}, {65,135}, {65,139}, {65,143}, {65,144}, {66,-108}, {66,-107}, {66,-106}, {66,-105}, {66,-99}, {66,-98}, {66,-97}, {66,-96}, {66,-92}, {66,-89}, {66,-88}, {66,-87}, {66,-86}, {66,-82}, {66,-81}, {66,-80}, {66,-74}, {66,-73}, {66,-66}, {66,-65}, {66,-62}, {66,-54}, {66,-51}, {66,-40}, {66,-39}, {66,-36}, {66,-35}, {66,-17}, {66,-16}, {66,-12}, {66,-11}, {66,-7}, {66,-6}, {66,50}, {66,51}, {66,57}, {66,58}, {66,62}, {66,74}, {66,75}, {66,79}, {66,80}, {66,86}, {66,90}, {66,100}, {66,104}, {66,105}, {66,109}, {66,115}, {66,118}, {66,132}, {66,135}, {66,139}, {66,143}, {66,144}, {67,-108}, {67,-107}, {67,-106}, {67,-105}, {67,-104}, {67,-99}, {67,-98}, {67,-97}, {67,-96}, {67,-95}, {67,-94}, {67,-92}, {67,-91}, {67,-90}, {67,-89}, {67,-74}, {67,-73}, {67,-66}, {67,-65}, {67,-62}, {67,-54}, {67,-51}, {67,-49}, {67,-40}, {67,-39}, {67,-36}, {67,-35}, {67,-17}, {67,-16}, {67,-12}, {67,-11}, {67,-7}, {67,-6}, {67,46}, {67,50}, {67,51}, {67,57}, {67,58}, {67,62}, {67,74}, {67,75}, {67,79}, {67,80}, {67,86}, {67,87}, {67,89}, {67,90}, {67,100}, {67,101}, {67,102}, {67,103}, {67,104}, {67,105}, {67,109}, {67,115}, {67,116}, {67,117}, {67,118}, {67,132}, {67,135}, {67,139}, {67,143}, {67,144}, {68,-108}, {68,-107}, {68,-106}, {68,-105}, {68,-104}, {68,-99}, {68,-98}, {68,-97}, {68,-96}, {68,-95}, {68,-91}, {68,-90}, {68,-81}, {68,-80}, {68,-79}, {68,-66}, {68,-65}, {68,-64}, {68,-62}, {68,-61}, {68,-60}, {68,-59}, {68,-57}, {68,-56}, {68,-55}, {68,-54}, {68,-53}, {68,-51}, {68,-50}, {68,-49}, {68,-48}, {68,-47}, {68,-46}, {68,-44}, {68,-43}, {68,-42}, {68,-41}, {68,-40}, {68,-39}, {68,-36}, {68,-35}, {68,-17}, {68,-16}, {68,-12}, {68,-11}, {68,-10}, {68,-8}, {68,-7}, {68,-6}, {68,-5}, {68,-4}, {68,-3}, {68,-2}, {68,0}, {68,1}, {68,2}, {68,3}, {68,4}, {68,5}, {68,6}, {68,7}, {68,8}, {68,9}, {68,10}, {68,11}, {68,12}, {68,13}, {68,14}, {68,15}, {68,16}, {68,17}, {68,18}, {68,19}, {68,21}, {68,22}, {68,23}, {68,24}, {68,25}, {68,26}, {68,27}, {68,28}, {68,29}, {68,30}, {68,31}, {68,32}, {68,33}, {68,34}, {68,35}, {68,36}, {68,38}, {68,39}, {68,40}, {68,41}, {68,42}, {68,43}, {68,44}, {68,45}, {68,46}, {68,50}, {68,51}, {68,57}, {68,58}, {68,62}, {68,74}, {68,75}, {68,79}, {68,80}, {68,86}, {68,104}, {68,105}, {68,109}, {68,115}, {68,118}, {68,132}, {68,135}, {68,139}, {68,143}, {68,144}, {69,-107}, {69,-106}, {69,-105}, {69,-104}, {69,-98}, {69,-97}, {69,-96}, {69,-95}, {69,-91}, {69,-90}, {69,-84}, {69,-83}, {69,-82}, {69,-81}, {69,-80}, {69,-79}, {69,-66}, {69,-65}, {69,-40}, {69,-39}, {69,-36}, {69,-35}, {69,-17}, {69,-16}, {69,-12}, {69,-11}, {69,-8}, {69,-7}, {69,-6}, {69,-5}, {69,-4}, {69,-3}, {69,-2}, {69,0}, {69,1}, {69,2}, {69,3}, {69,4}, {69,5}, {69,6}, {69,7}, {69,8}, {69,9}, {69,10}, {69,11}, {69,12}, {69,13}, {69,14}, {69,15}, {69,16}, {69,17}, {69,18}, {69,19}, {69,21}, {69,22}, {69,23}, {69,24}, {69,25}, {69,26}, {69,27}, {69,28}, {69,29}, {69,30}, {69,31}, {69,32}, {69,33}, {69,34}, {69,35}, {69,36}, {69,38}, {69,39}, {69,40}, {69,41}, {69,42}, {69,43}, {69,44}, {69,45}, {69,46}, {69,50}, {69,51}, {69,57}, {69,58}, {69,59}, {69,60}, {69,61}, {69,62}, {69,74}, {69,75}, {69,79}, {69,80}, {69,86}, {69,104}, {69,105}, {69,106}, {69,107}, {69,108}, {69,109}, {69,110}, {69,111}, {69,112}, {69,113}, {69,114}, {69,115}, {69,132}, {69,135}, {69,136}, {69,137}, {69,138}, {69,139}, {69,140}, {69,141}, {69,142}, {69,143}, {69,144}, {70,-107}, {70,-106}, {70,-105}, {70,-104}, {70,-98}, {70,-97}, {70,-96}, {70,-95}, {70,-91}, {70,-90}, {70,-87}, {70,-86}, {70,-85}, {70,-84}, {70,-83}, {70,-82}, {70,-81}, {70,-80}, {70,-79}, {70,-40}, {70,-39}, {70,-38}, {70,-36}, {70,-35}, {70,-17}, {70,-16}, {70,-12}, {70,-11}, {70,-7}, {70,-6}, {70,-2}, {70,11}, {70,15}, {70,19}, {70,30}, {70,46}, {70,47}, {70,48}, {70,49}, {70,50}, {70,51}, {70,57}, {70,58}, {70,62}, {70,74}, {70,75}, {70,79}, {70,80}, {70,86}, {70,109}, {70,118}, {70,132}, {70,143}, {70,144}, {71,-107}, {71,-106}, {71,-105}, {71,-104}, {71,-98}, {71,-97}, {71,-96}, {71,-95}, {71,-91}, {71,-90}, {71,-89}, {71,-88}, {71,-87}, {71,-86}, {71,-85}, {71,-84}, {71,-83}, {71,-82}, {71,-81}, {71,-80}, {71,-79}, {71,-78}, {71,-66}, {71,-65}, {71,-58}, {71,-57}, {71,-56}, {71,-55}, {71,-54}, {71,-51}, {71,-50}, {71,-49}, {71,-48}, {71,-36}, {71,-35}, {71,-17}, {71,-16}, {71,-12}, {71,-11}, {71,-2}, {71,-1}, {71,0}, {71,1}, {71,11}, {71,15}, {71,19}, {71,20}, {71,21}, {71,22}, {71,30}, {71,36}, {71,37}, {71,38}, {71,39}, {71,50}, {71,51}, {71,57}, {71,58}, {71,62}, {71,74}, {71,75}, {71,79}, {71,80}, {71,86}, {71,104}, {71,105}, {71,118}, {71,132}, {71,143}, {71,144}, {72,-107}, {72,-106}, {72,-105}, {72,-104}, {72,-97}, {72,-96}, {72,-95}, {72,-94}, {72,-93}, {72,-91}, {72,-90}, {72,-89}, {72,-88}, {72,-87}, {72,-86}, {72,-85}, {72,-84}, {72,-83}, {72,-80}, {72,-79}, {72,-78}, {72,-66}, {72,-65}, {72,-58}, {72,-51}, {72,-40}, {72,-39}, {72,-36}, {72,-35}, {72,-17}, {72,-16}, {72,-12}, {72,-11}, {72,-2}, {72,11}, {72,15}, {72,19}, {72,30}, {72,46}, {72,50}, {72,51}, {72,57}, {72,58}, {72,62}, {72,74}, {72,75}, {72,79}, {72,80}, {72,86}, {72,104}, {72,105}, {72,109}, {72,118}, {72,132}, {72,143}, {72,144}, {73,-106}, {73,-105}, {73,-104}, {73,-97}, {73,-96}, {73,-95}, {73,-94}, {73,-89}, {73,-88}, {73,-87}, {73,-80}, {73,-79}, {73,-78}, {73,-66}, {73,-65}, {73,-58}, {73,-51}, {73,-40}, {73,-39}, {73,-36}, {73,-35}, {73,-17}, {73,-16}, {73,-12}, {73,-11}, {73,-7}, {73,-6}, {73,-2}, {73,11}, {73,15}, {73,19}, {73,30}, {73,46}, {73,50}, {73,51}, {73,57}, {73,58}, {73,62}, {73,74}, {73,75}, {73,79}, {73,80}, {73,86}, {73,104}, {73,105}, {73,109}, {73,110}, {73,111}, {73,112}, {73,113}, {73,114}, {73,115}, {73,116}, {73,117}, {73,118}, {73,119}, {73,120}, {73,121}, {73,131}, {73,132}, {73,133}, {73,134}, {73,135}, {73,136}, {73,137}, {73,138}, {73,139}, {73,140}, {73,142}, {73,143}, {73,144}, {74,-106}, {74,-105}, {74,-104}, {74,-103}, {74,-102}, {74,-101}, {74,-99}, {74,-98}, {74,-97}, {74,-96}, {74,-95}, {74,-94}, {74,-89}, {74,-88}, {74,-87}, {74,-86}, {74,-79}, {74,-78}, {74,-77}, {74,-66}, {74,-65}, {74,-58}, {74,-51}, {74,-40}, {74,-39}, {74,-36}, {74,-35}, {74,-17}, {74,-16}, {74,-12}, {74,-11}, {74,-7}, {74,-6}, {74,-2}, {74,11}, {74,46}, {74,47}, {74,48}, {74,49}, {74,50}, {74,51}, {74,57}, {74,58}, {74,74}, {74,75}, {74,79}, {74,80}, {74,86}, {74,104}, {74,105}, {74,109}, {74,119}, {74,139}, {74,143}, {74,144}, {75,-106}, {75,-105}, {75,-104}, {75,-103}, {75,-102}, {75,-96}, {75,-95}, {75,-94}, {75,-89}, {75,-88}, {75,-87}, {75,-86}, {75,-78}, {75,-77}, {75,-66}, {75,-65}, {75,-60}, {75,-59}, {75,-58}, {75,-57}, {75,-56}, {75,-55}, {75,-53}, {75,-52}, {75,-51}, {75,-50}, {75,-49}, {75,-48}, {75,-47}, {75,-46}, {75,-45}, {75,-44}, {75,-43}, {75,-42}, {75,-41}, {75,-40}, {75,-39}, {75,-38}, {75,-37}, {75,-36}, {75,-35}, {75,-17}, {75,-16}, {75,-12}, {75,-11}, {75,-7}, {75,-6}, {75,-2}, {75,11}, {75,15}, {75,19}, {75,30}, {75,36}, {75,46}, {75,50}, {75,51}, {75,57}, {75,58}, {75,62}, {75,74}, {75,75}, {75,79}, {75,80}, {75,86}, {75,104}, {75,105}, {75,109}, {75,143}, {75,144}, {76,-105}, {76,-104}, {76,-103}, {76,-102}, {76,-96}, {76,-95}, {76,-94}, {76,-89}, {76,-88}, {76,-87}, {76,-86}, {76,-78}, {76,-77}, {76,-66}, {76,-65}, {76,-58}, {76,-53}, {76,-52}, {76,-51}, {76,-50}, {76,-49}, {76,-48}, {76,-47}, {76,-46}, {76,-45}, {76,-44}, {76,-43}, {76,-42}, {76,-41}, {76,-40}, {76,-39}, {76,-38}, {76,-37}, {76,-36}, {76,-35}, {76,-17}, {76,-16}, {76,-12}, {76,-11}, {76,-7}, {76,-6}, {76,-2}, {76,11}, {76,15}, {76,19}, {76,30}, {76,36}, {76,50}, {76,51}, {76,57}, {76,58}, {76,59}, {76,61}, {76,62}, {76,74}, {76,75}, {76,79}, {76,80}, {76,86}, {76,104}, {76,105}, {76,109}, {76,119}, {76,139}, {76,143}, {76,144}, {77,-105}, {77,-104}, {77,-103}, {77,-102}, {77,-96}, {77,-95}, {77,-94}, {77,-93}, {77,-92}, {77,-89}, {77,-88}, {77,-78}, {77,-77}, {77,-76}, {77,-58}, {77,-53}, {77,-52}, {77,-36}, {77,-35}, {77,-34}, {77,-33}, {77,-32}, {77,-31}, {77,-29}, {77,-28}, {77,-27}, {77,-26}, {77,-25}, {77,-24}, {77,-23}, {77,-21}, {77,-20}, {77,-19}, {77,-18}, {77,-17}, {77,-16}, {77,-12}, {77,-11}, {77,-7}, {77,-6}, {77,-2}, {77,11}, {77,15}, {77,19}, {77,30}, {77,36}, {77,46}, {77,50}, {77,51}, {77,57}, {77,58}, {77,62}, {77,74}, {77,75}, {77,79}, {77,80}, {77,81}, {77,82}, {77,83}, {77,84}, {77,85}, {77,86}, {77,87}, {77,88}, {77,89}, {77,90}, {77,100}, {77,101}, {77,102}, {77,103}, {77,104}, {77,105}, {77,109}, {77,119}, {77,121}, {77,122}, {77,123}, {77,124}, {77,125}, {77,126}, {77,127}, {77,128}, {77,129}, {77,130}, {77,131}, {77,139}, {77,143}, {77,144}, {78,-105}, {78,-104}, {78,-103}, {78,-102}, {78,-101}, {78,-89}, {78,-88}, {78,-78}, {78,-77}, {78,-76}, {78,-58}, {78,-53}, {78,-52}, {78,-36}, {78,-35}, {78,-34}, {78,-33}, {78,-32}, {78,-31}, {78,-29}, {78,-28}, {78,-27}, {78,-26}, {78,-25}, {78,-24}, {78,-23}, {78,-21}, {78,-20}, {78,-19}, {78,-18}, {78,-17}, {78,-16}, {78,-12}, {78,-11}, {78,-7}, {78,-6}, {78,-2}, {78,11}, {78,15}, {78,19}, {78,30}, {78,36}, {78,46}, {78,50}, {78,51}, {78,62}, {78,74}, {78,75}, {78,79}, {78,80}, {78,86}, {78,90}, {78,100}, {78,104}, {78,105}, {78,109}, {78,119}, {78,131}, {78,139}, {78,143}, {78,144}, {79,-105}, {79,-104}, {79,-103}, {79,-102}, {79,-101}, {79,-96}, {79,-95}, {79,-94}, {79,-93}, {79,-92}, {79,-91}, {79,-90}, {79,-89}, {79,-88}, {79,-77}, {79,-76}, {79,-58}, {79,-53}, {79,-52}, {79,-36}, {79,-35}, {79,-26}, {79,-17}, {79,-16}, {79,-15}, {79,-13}, {79,-12}, {79,-11}, {79,-10}, {79,-9}, {79,-8}, {79,-7}, {79,-6}, {79,-5}, {79,-3}, {79,-2}, {79,-1}, {79,0}, {79,1}, {79,2}, {79,3}, {79,4}, {79,6}, {79,7}, {79,8}, {79,9}, {79,10}, {79,11}, {79,12}, {79,13}, {79,15}, {79,17}, {79,18}, {79,19}, {79,20}, {79,21}, {79,22}, {79,23}, {79,24}, {79,25}, {79,27}, {79,28}, {79,29}, {79,30}, {79,31}, {79,33}, {79,34}, {79,35}, {79,36}, {79,37}, {79,38}, {79,39}, {79,46}, {79,50}, {79,51}, {79,57}, {79,58}, {79,62}, {79,74}, {79,75}, {79,104}, {79,105}, {79,109}, {79,119}, {79,131}, {79,139}, {79,143}, {79,144}, {80,-105}, {80,-104}, {80,-103}, {80,-102}, {80,-101}, {80,-100}, {80,-99}, {80,-98}, {80,-97}, {80,-96}, {80,-95}, {80,-94}, {80,-93}, {80,-92}, {80,-91}, {80,-90}, {80,-89}, {80,-88}, {80,-77}, {80,-76}, {80,-75}, {80,-58}, {80,-56}, {80,-55}, {80,-54}, {80,-53}, {80,-52}, {80,-36}, {80,-35}, {80,-26}, {80,-17}, {80,-16}, {80,-12}, {80,-11}, {80,1}, {80,9}, {80,15}, {80,22}, {80,30}, {80,39}, {80,46}, {80,50}, {80,51}, {80,57}, {80,58}, {80,62}, {80,74}, {80,75}, {80,79}, {80,80}, {80,86}, {80,90}, {80,100}, {80,104}, {80,105}, {80,109}, {80,119}, {80,131}, {80,139}, {80,143}, {80,144}, {81,-104}, {81,-103}, {81,-102}, {81,-101}, {81,-100}, {81,-99}, {81,-98}, {81,-97}, {81,-96}, {81,-95}, {81,-94}, {81,-93}, {81,-92}, {81,-77}, {81,-76}, {81,-75}, {81,-58}, {81,-55}, {81,-54}, {81,-53}, {81,-52}, {81,-36}, {81,-35}, {81,-26}, {81,-17}, {81,-16}, {81,-12}, {81,-11}, {81,1}, {81,9}, {81,15}, {81,22}, {81,30}, {81,39}, {81,46}, {81,50}, {81,51}, {81,57}, {81,58}, {81,59}, {81,61}, {81,62}, {81,63}, {81,64}, {81,65}, {81,66}, {81,67}, {81,68}, {81,69}, {81,70}, {81,71}, {81,72}, {81,73}, {81,74}, {81,75}, {81,76}, {81,77}, {81,78}, {81,79}, {81,80}, {81,81}, {81,82}, {81,83}, {81,84}, {81,85}, {81,86}, {81,88}, {81,89}, {81,90}, {81,91}, {81,92}, {81,93}, {81,94}, {81,95}, {81,96}, {81,97}, {81,99}, {81,100}, {81,101}, {81,102}, {81,103}, {81,104}, {81,105}, {81,109}, {81,110}, {81,112}, {81,113}, {81,114}, {81,115}, {81,116}, {81,117}, {81,118}, {81,119}, {81,120}, {81,122}, {81,123}, {81,124}, {81,125}, {81,126}, {81,127}, {81,128}, {81,129}, {81,131}, {81,132}, {81,133}, {81,134}, {81,135}, {81,136}, {81,138}, {81,139}, {81,140}, {81,142}, {81,143}, {81,144}, {82,-104}, {82,-103}, {82,-102}, {82,-101}, {82,-100}, {82,-99}, {82,-98}, {82,-97}, {82,-96}, {82,-76}, {82,-75}, {82,-58}, {82,-55}, {82,-54}, {82,-53}, {82,-36}, {82,-35}, {82,-34}, {82,-33}, {82,-32}, {82,-31}, {82,-29}, {82,-28}, {82,-27}, {82,-26}, {82,-25}, {82,-24}, {82,-23}, {82,-22}, {82,-21}, {82,-20}, {82,-19}, {82,-18}, {82,-17}, {82,-16}, {82,-15}, {82,-13}, {82,-12}, {82,-11}, {82,-10}, {82,-9}, {82,-8}, {82,-7}, {82,-6}, {82,-5}, {82,-4}, {82,-3}, {82,-2}, {82,-1}, {82,0}, {82,1}, {82,2}, {82,3}, {82,4}, {82,5}, {82,6}, {82,7}, {82,8}, {82,9}, {82,10}, {82,11}, {82,12}, {82,13}, {82,14}, {82,15}, {82,16}, {82,17}, {82,18}, {82,19}, {82,20}, {82,21}, {82,22}, {82,23}, {82,24}, {82,25}, {82,26}, {82,27}, {82,28}, {82,29}, {82,30}, {82,31}, {82,32}, {82,33}, {82,34}, {82,35}, {82,36}, {82,37}, {82,38}, {82,39}, {82,40}, {82,41}, {82,42}, {82,43}, {82,44}, {82,45}, {82,46}, {82,47}, {82,48}, {82,49}, {82,50}, {82,51}, {82,57}, {82,58}, {82,62}, {82,74}, {82,88}, {82,96}, {82,104}, {82,105}, {82,109}, {82,115}, {82,119}, {82,126}, {82,131}, {82,135}, {82,139}, {82,143}, {82,144}, {83,-104}, {83,-103}, {83,-102}, {83,-101}, {83,-100}, {83,-76}, {83,-75}, {83,-74}, {83,-58}, {83,-57}, {83,-56}, {83,-55}, {83,-54}, {83,-53}, {83,-36}, {83,-35}, {83,-34}, {83,-33}, {83,-32}, {83,-31}, {83,-29}, {83,-28}, {83,-27}, {83,-26}, {83,-25}, {83,-24}, {83,-23}, {83,-22}, {83,-21}, {83,-20}, {83,-19}, {83,-18}, {83,-17}, {83,-16}, {83,-15}, {83,-13}, {83,-12}, {83,-11}, {83,-10}, {83,-9}, {83,-8}, {83,-7}, {83,-6}, {83,-5}, {83,-4}, {83,-3}, {83,-2}, {83,-1}, {83,0}, {83,1}, {83,2}, {83,3}, {83,4}, {83,5}, {83,6}, {83,7}, {83,8}, {83,9}, {83,10}, {83,11}, {83,12}, {83,13}, {83,14}, {83,15}, {83,16}, {83,17}, {83,18}, {83,19}, {83,20}, {83,21}, {83,22}, {83,23}, {83,24}, {83,25}, {83,26}, {83,27}, {83,28}, {83,29}, {83,30}, {83,31}, {83,32}, {83,33}, {83,34}, {83,35}, {83,36}, {83,37}, {83,38}, {83,39}, {83,40}, {83,41}, {83,42}, {83,43}, {83,44}, {83,45}, {83,46}, {83,47}, {83,48}, {83,49}, {83,50}, {83,51}, {83,57}, {83,58}, {83,88}, {83,109}, {83,119}, {83,126}, {83,135}, {83,139}, {83,143}, {83,144}, {84,-76}, {84,-75}, {84,-74}, {84,-58}, {84,-57}, {84,-56}, {84,-55}, {84,-54}, {84,-36}, {84,-35}, {84,57}, {84,58}, {84,62}, {84,74}, {84,88}, {84,96}, {84,104}, {84,105}, {84,109}, {84,115}, {84,119}, {84,126}, {84,131}, {84,135}, {84,139}, {84,143}, {84,144}, {85,-75}, {85,-74}, {85,-73}, {85,-72}, {85,-71}, {85,-70}, {85,-69}, {85,-68}, {85,-67}, {85,-66}, {85,-65}, {85,-64}, {85,-63}, {85,-62}, {85,-61}, {85,-60}, {85,-59}, {85,-58}, {85,-57}, {85,-56}, {85,-55}, {85,57}, {85,58}, {85,59}, {85,60}, {85,61}, {85,62}, {85,63}, {85,64}, {85,65}, {85,66}, {85,67}, {85,68}, {85,69}, {85,70}, {85,71}, {85,72}, {85,73}, {85,74}, {85,75}, {85,76}, {85,77}, {85,78}, {85,79}, {85,80}, {85,81}, {85,82}, {85,83}, {85,84}, {85,85}, {85,86}, {85,87}, {85,88}, {85,89}, {85,90}, {85,91}, {85,92}, {85,95}, {85,96}, {85,97}, {85,98}, {85,99}, {85,100}, {85,101}, {85,102}, {85,103}, {85,104}, {85,105}, {85,106}, {85,107}, {85,108}, {85,109}, {85,110}, {85,111}, {85,112}, {85,113}, {85,114}, {85,115}, {85,116}, {85,117}, {85,118}, {85,119}, {85,120}, {85,121}, {85,122}, {85,123}, {85,124}, {85,125}, {85,126}, {85,127}, {85,128}, {85,129}, {85,130}, {85,131}, {85,132}, {85,133}, {85,134}, {85,135}, {85,136}, {85,137}, {85,138}, {85,139}, {85,140}, {85,141}, {85,142}, {85,143}, {85,144}, {86,-75}, {86,-74}, {86,-73}, {86,-72}, {86,-71}, {86,-70}, {86,-69}, {86,-68}, {86,-67}, {86,-66}, {86,-65}, {86,-64}, {86,-63}, {86,-62}, {86,-61}, {86,-60}, {86,-59}, {86,-58}, {86,-57}, {86,57}, {86,58}, {86,59}, {86,60}, {86,61}, {86,62}, {86,63}, {86,64}, {86,65}, {86,66}, {86,67}, {86,68}, {86,69}, {86,70}, {86,71}, {86,72}, {86,73}, {86,74}, {86,75}, {86,76}, {86,77}, {86,78}, {86,79}, {86,80}, {86,81}, {86,82}, {86,83}, {86,84}, {86,85}, {86,86}, {86,87}, {86,88}, {86,89}, {86,90}, {86,91}, {86,92}, {86,95}, {86,96}, {86,97}, {86,98}, {86,99}, {86,100}, {86,101}, {86,102}, {86,103}, {86,104}, {86,105}, {86,106}, {86,107}, {86,108}, {86,109}, {86,110}, {86,111}, {86,112}, {86,113}, {86,114}, {86,115}, {86,116}, {86,117}, {86,118}, {86,119}, {86,120}, {86,121}, {86,122}, {86,123}, {86,124}, {86,125}, {86,126}, {86,127}, {86,128}, {86,129}, {86,130}, {86,131}, {86,132}, {86,133}, {86,134}, {86,135}, {86,136}, {86,137}, {86,138}, {86,139}, {86,140}, {86,141}, {86,142}, {86,143}, {86,144}, }, + ["stone-path"] = {{-88,-10}, {-88,-9}, {-88,-8}, {-88,-7}, {-88,-6}, {-88,-5}, {-88,-4}, {-88,-3}, {-88,-2}, {-88,-1}, {-88,0}, {-88,1}, {-88,2}, {-88,3}, {-88,4}, {-88,5}, {-88,6}, {-88,7}, {-88,8}, {-88,9}, {-88,10}, {-88,11}, {-88,12}, {-88,13}, {-88,14}, {-88,15}, {-88,16}, {-88,17}, {-88,18}, {-88,19}, {-88,20}, {-88,21}, {-88,22}, {-87,-11}, {-87,23}, {-85,51}, {-85,59}, {-84,51}, {-82,96}, {-81,67}, {-81,68}, {-81,72}, {-81,91}, {-81,96}, {-81,115}, {-81,116}, {-81,117}, {-80,72}, {-80,91}, {-80,96}, {-79,71}, {-79,92}, {-79,96}, {-78,71}, {-78,92}, {-78,96}, {-77,71}, {-77,92}, {-77,96}, {-77,118}, {-76,71}, {-76,92}, {-76,96}, {-75,71}, {-75,92}, {-75,96}, {-74,5}, {-74,6}, {-74,7}, {-74,71}, {-74,92}, {-74,96}, {-73,71}, {-73,92}, {-73,96}, {-72,-27}, {-72,71}, {-72,92}, {-72,96}, {-71,-27}, {-71,71}, {-71,92}, {-71,96}, {-70,-27}, {-70,71}, {-70,92}, {-70,96}, {-69,-27}, {-69,71}, {-69,92}, {-68,-27}, {-68,71}, {-68,92}, {-67,-27}, {-67,71}, {-67,92}, {-66,-27}, {-66,71}, {-66,92}, {-65,-27}, {-65,71}, {-65,92}, {-65,135}, {-65,136}, {-64,-27}, {-64,72}, {-64,91}, {-63,-27}, {-63,72}, {-63,91}, {-62,-27}, {-62,69}, {-61,-27}, {-61,-13}, {-61,56}, {-61,64}, {-60,-27}, {-60,-13}, {-60,56}, {-60,64}, {-59,-27}, {-59,-13}, {-59,56}, {-59,64}, {-58,-27}, {-57,-27}, {-57,46}, {-56,-27}, {-56,46}, {-55,-27}, {-55,46}, {-54,-27}, {-54,46}, {-53,-27}, {-53,46}, {-53,76}, {-53,77}, {-53,78}, {-53,79}, {-53,80}, {-53,83}, {-53,84}, {-53,85}, {-53,86}, {-53,87}, {-53,88}, {-53,89}, {-53,90}, {-53,91}, {-53,97}, {-53,106}, {-52,-27}, {-52,46}, {-52,97}, {-52,106}, {-51,-27}, {-51,-13}, {-51,46}, {-51,47}, {-51,48}, {-51,93}, {-50,-27}, {-50,-13}, {-50,46}, {-50,74}, {-50,93}, {-49,-27}, {-49,-13}, {-49,46}, {-49,73}, {-49,74}, {-49,81}, {-49,82}, {-49,93}, {-48,-27}, {-48,46}, {-48,72}, {-48,73}, {-48,93}, {-47,-27}, {-47,46}, {-47,68}, {-47,73}, {-47,74}, {-47,93}, {-46,-27}, {-46,46}, {-46,67}, {-46,74}, {-46,78}, {-46,85}, {-46,90}, {-46,93}, {-45,-27}, {-45,46}, {-45,67}, {-45,74}, {-45,78}, {-45,85}, {-45,90}, {-45,93}, {-45,114}, {-44,-27}, {-44,46}, {-44,67}, {-44,74}, {-44,78}, {-44,85}, {-44,90}, {-44,93}, {-43,-27}, {-43,46}, {-43,68}, {-43,73}, {-43,74}, {-43,93}, {-42,-27}, {-42,46}, {-42,72}, {-42,73}, {-42,93}, {-41,-27}, {-41,46}, {-41,73}, {-41,74}, {-41,81}, {-41,82}, {-41,93}, {-40,-27}, {-40,46}, {-40,74}, {-40,93}, {-39,-27}, {-39,41}, {-39,42}, {-39,43}, {-39,44}, {-39,45}, {-39,46}, {-39,47}, {-39,48}, {-39,93}, {-38,-27}, {-38,97}, {-38,106}, {-37,76}, {-37,77}, {-37,78}, {-37,79}, {-37,80}, {-37,83}, {-37,84}, {-37,85}, {-37,86}, {-37,87}, {-37,88}, {-37,89}, {-37,90}, {-37,91}, {-37,97}, {-37,106}, {-36,5}, {-36,6}, {-36,7}, {-36,8}, {-36,9}, {-31,56}, {-31,64}, {-28,115}, {-27,115}, {-27,140}, {-27,141}, {-27,142}, {-27,143}, {-27,144}, {-26,115}, {-25,115}, {-24,115}, {-23,-11}, {-23,80}, {-23,81}, {-23,82}, {-23,83}, {-23,115}, {-22,-10}, {-22,-9}, {-22,-8}, {-22,-7}, {-22,-6}, {-22,-5}, {-22,-4}, {-22,-3}, {-22,-2}, {-22,-1}, {-22,0}, {-22,1}, {-22,2}, {-22,3}, {-22,4}, {-22,5}, {-22,6}, {-22,7}, {-22,8}, {-22,9}, {-22,10}, {-22,11}, {-22,12}, {-22,13}, {-22,14}, {-22,15}, {-22,16}, {-22,17}, {-22,18}, {-22,19}, {-22,20}, {-22,21}, {-22,22}, {-22,23}, {-10,31}, {-9,31}, {-9,71}, {-8,31}, {-8,71}, {-7,31}, {-3,77}, {-2,77}, {9,76}, {9,84}, {10,76}, {10,84}, {11,76}, {11,84}, {12,76}, {12,84}, {13,76}, {13,84}, {19,76}, {19,84}, {20,76}, {20,84}, {21,76}, {21,84}, {22,76}, {22,84}, {23,76}, {23,84}, {54,-96}, {58,-34}, {58,-33}, {58,-32}, {58,-31}, {58,-30}, {58,-29}, {58,-28}, {58,-27}, {58,-26}, {58,-25}, {58,-24}, {58,-23}, {58,-22}, {58,-21}, {58,-20}, {58,-19}, {58,-18}, {67,-80}, {68,93}, {68,97}, {69,92}, {69,98}, {70,91}, {70,99}, {74,91}, {74,99}, {75,92}, {75,98}, {76,93}, {76,97}, {77,-65}, {78,-65}, {79,-65}, {80,-65}, {81,-65}, {82,-65}, {83,-65}, {84,-65}, }, + ["black-refined-concrete"] = {{-86,98}, {-86,99}, {-86,100}, {-86,101}, {-85,-24}, {-85,-23}, {-85,-22}, {-85,-21}, {-85,-20}, {-85,-19}, {-85,-18}, {-85,-17}, {-85,-16}, {-85,-15}, {-85,-14}, {-85,26}, {-85,27}, {-85,29}, {-85,31}, {-85,33}, {-85,35}, {-85,36}, {-85,98}, {-85,99}, {-85,100}, {-85,101}, {-84,-24}, {-84,-23}, {-84,-22}, {-84,-21}, {-84,-20}, {-84,-19}, {-84,-18}, {-84,-17}, {-84,-16}, {-84,-15}, {-84,-14}, {-84,26}, {-84,27}, {-84,29}, {-84,31}, {-84,33}, {-84,35}, {-84,36}, {-84,100}, {-83,-23}, {-83,-15}, {-83,-14}, {-83,26}, {-83,27}, {-83,29}, {-83,31}, {-83,33}, {-83,35}, {-83,36}, {-82,-24}, {-82,-23}, {-82,-22}, {-82,-21}, {-82,-20}, {-82,-19}, {-82,-18}, {-82,-17}, {-82,-15}, {-82,-14}, {-82,26}, {-82,27}, {-82,29}, {-82,31}, {-82,33}, {-82,35}, {-82,36}, {-81,-24}, {-81,-23}, {-81,-22}, {-81,-21}, {-81,-20}, {-81,-19}, {-81,-18}, {-81,-17}, {-81,-15}, {-81,-14}, {-81,26}, {-81,27}, {-81,28}, {-81,29}, {-81,31}, {-81,33}, {-81,35}, {-81,36}, {-80,-23}, {-80,-15}, {-80,-14}, {-80,29}, {-80,31}, {-80,33}, {-80,35}, {-80,36}, {-80,43}, {-80,44}, {-80,45}, {-80,46}, {-80,47}, {-80,48}, {-79,-24}, {-79,-23}, {-79,-22}, {-79,-21}, {-79,-20}, {-79,-19}, {-79,-18}, {-79,-17}, {-79,-15}, {-79,-14}, {-79,26}, {-79,27}, {-79,29}, {-79,30}, {-79,31}, {-79,32}, {-79,33}, {-79,35}, {-79,36}, {-79,47}, {-79,48}, {-79,52}, {-78,-24}, {-78,-23}, {-78,-22}, {-78,-21}, {-78,-20}, {-78,-19}, {-78,-18}, {-78,-17}, {-78,-15}, {-78,-14}, {-78,26}, {-78,27}, {-78,35}, {-78,36}, {-78,43}, {-78,44}, {-78,45}, {-78,47}, {-78,48}, {-78,51}, {-78,52}, {-78,54}, {-78,55}, {-78,56}, {-78,57}, {-78,58}, {-78,59}, {-78,62}, {-78,63}, {-78,64}, {-78,65}, {-78,66}, {-77,-15}, {-77,-14}, {-77,26}, {-77,27}, {-77,28}, {-77,29}, {-77,30}, {-77,31}, {-77,32}, {-77,33}, {-77,34}, {-77,35}, {-77,36}, {-77,43}, {-77,44}, {-77,45}, {-77,47}, {-77,48}, {-77,51}, {-77,52}, {-77,54}, {-77,55}, {-77,56}, {-77,57}, {-77,58}, {-77,59}, {-77,62}, {-77,63}, {-77,64}, {-77,65}, {-77,66}, {-76,-24}, {-76,-23}, {-76,-22}, {-76,-21}, {-76,-20}, {-76,-19}, {-76,-17}, {-76,-16}, {-76,-15}, {-76,-14}, {-76,26}, {-76,27}, {-76,28}, {-76,29}, {-76,30}, {-76,31}, {-76,32}, {-76,33}, {-76,34}, {-76,35}, {-76,36}, {-76,43}, {-76,44}, {-76,45}, {-76,46}, {-76,47}, {-76,48}, {-75,-24}, {-75,-23}, {-75,-22}, {-75,-21}, {-75,-20}, {-75,-19}, {-75,-17}, {-75,-16}, {-75,-15}, {-75,-14}, {-75,43}, {-75,44}, {-75,45}, {-75,47}, {-75,48}, {-74,43}, {-74,44}, {-74,45}, {-74,47}, {-74,48}, {-73,26}, {-73,27}, {-73,28}, {-73,31}, {-73,32}, {-73,33}, {-73,34}, {-73,35}, {-72,27}, {-72,28}, {-72,31}, {-72,32}, {-72,33}, {-72,34}, {-72,35}, {-72,43}, {-72,44}, {-72,45}, {-72,46}, {-72,47}, {-72,48}, {-71,27}, {-71,28}, {-71,31}, {-71,48}, {-71,104}, {-71,105}, {-70,-70}, {-70,-69}, {-70,27}, {-70,28}, {-70,31}, {-70,32}, {-70,33}, {-70,34}, {-70,35}, {-70,42}, {-70,43}, {-70,44}, {-70,45}, {-70,46}, {-70,47}, {-70,48}, {-70,104}, {-70,105}, {-69,-77}, {-69,-76}, {-69,-75}, {-69,-74}, {-69,-73}, {-69,-72}, {-69,-70}, {-69,-69}, {-69,-67}, {-69,-66}, {-69,-65}, {-69,-64}, {-69,-63}, {-69,-62}, {-69,27}, {-69,28}, {-69,31}, {-69,32}, {-69,33}, {-69,34}, {-69,35}, {-69,42}, {-69,43}, {-69,44}, {-69,45}, {-69,46}, {-69,47}, {-69,48}, {-69,104}, {-69,105}, {-68,-77}, {-68,-76}, {-68,-75}, {-68,-74}, {-68,-73}, {-68,-72}, {-68,-71}, {-68,-70}, {-68,-69}, {-68,-68}, {-68,-67}, {-68,-66}, {-68,-65}, {-68,-64}, {-68,-63}, {-68,-62}, {-68,27}, {-68,28}, {-68,31}, {-68,42}, {-68,43}, {-68,44}, {-68,45}, {-68,46}, {-68,47}, {-68,48}, {-68,100}, {-68,104}, {-68,105}, {-67,-77}, {-67,-76}, {-67,-74}, {-67,-73}, {-67,-71}, {-67,-70}, {-67,-69}, {-67,-68}, {-67,-66}, {-67,-65}, {-67,-63}, {-67,-62}, {-67,27}, {-67,28}, {-67,31}, {-67,32}, {-67,33}, {-67,34}, {-67,35}, {-67,42}, {-67,43}, {-67,44}, {-67,45}, {-67,46}, {-67,47}, {-67,48}, {-67,98}, {-67,99}, {-67,100}, {-67,101}, {-67,104}, {-67,105}, {-66,-77}, {-66,-76}, {-66,-75}, {-66,-74}, {-66,-73}, {-66,-72}, {-66,-71}, {-66,-70}, {-66,-69}, {-66,-68}, {-66,-67}, {-66,-66}, {-66,-65}, {-66,-64}, {-66,-63}, {-66,-62}, {-66,27}, {-66,28}, {-66,31}, {-66,32}, {-66,33}, {-66,34}, {-66,35}, {-66,42}, {-66,43}, {-66,44}, {-66,45}, {-66,46}, {-66,47}, {-66,48}, {-66,98}, {-66,99}, {-66,100}, {-66,101}, {-66,104}, {-66,105}, {-65,-77}, {-65,-76}, {-65,-75}, {-65,-74}, {-65,-71}, {-65,-70}, {-65,-69}, {-65,-68}, {-65,-65}, {-65,-64}, {-65,-63}, {-65,-62}, {-65,27}, {-65,28}, {-65,31}, {-65,48}, {-65,51}, {-65,52}, {-65,54}, {-65,55}, {-65,56}, {-65,58}, {-65,59}, {-65,62}, {-65,63}, {-65,64}, {-65,65}, {-65,66}, {-65,100}, {-64,-77}, {-64,-76}, {-64,-74}, {-64,-71}, {-64,-70}, {-64,-69}, {-64,-68}, {-64,-65}, {-64,-63}, {-64,-62}, {-64,27}, {-64,28}, {-64,29}, {-64,30}, {-64,31}, {-64,32}, {-64,33}, {-64,34}, {-64,35}, {-64,43}, {-64,44}, {-64,45}, {-64,46}, {-64,47}, {-64,48}, {-64,51}, {-64,52}, {-64,53}, {-64,54}, {-64,55}, {-64,56}, {-64,57}, {-64,58}, {-64,59}, {-64,62}, {-64,63}, {-64,64}, {-64,65}, {-64,66}, {-64,100}, {-63,-77}, {-63,-76}, {-63,-75}, {-63,-74}, {-63,-73}, {-63,-72}, {-63,-71}, {-63,-70}, {-63,-69}, {-63,-68}, {-63,-67}, {-63,-66}, {-63,-65}, {-63,-64}, {-63,-63}, {-63,27}, {-63,28}, {-63,31}, {-63,32}, {-63,33}, {-63,34}, {-63,35}, {-63,98}, {-63,99}, {-63,100}, {-63,101}, {-63,102}, {-63,103}, {-63,104}, {-63,105}, {-63,106}, {-63,107}, {-63,108}, {-63,109}, {-63,110}, {-63,111}, {-63,112}, {-63,113}, {-63,114}, {-63,115}, {-63,116}, {-63,117}, {-63,118}, {-63,119}, {-63,120}, {-63,121}, {-63,122}, {-63,123}, {-63,124}, {-63,125}, {-63,126}, {-63,127}, {-63,128}, {-63,129}, {-63,130}, {-63,131}, {-63,132}, {-63,133}, {-63,134}, {-63,135}, {-63,136}, {-63,137}, {-62,-77}, {-62,-76}, {-62,-75}, {-62,-74}, {-62,-73}, {-62,-72}, {-62,-71}, {-62,-70}, {-62,-69}, {-62,-68}, {-62,-67}, {-62,-66}, {-62,-65}, {-62,-64}, {-62,-63}, {-62,-62}, {-62,-61}, {-62,27}, {-62,98}, {-62,99}, {-62,100}, {-62,101}, {-62,102}, {-62,103}, {-62,104}, {-62,105}, {-62,106}, {-62,107}, {-62,108}, {-62,109}, {-62,110}, {-62,111}, {-62,112}, {-62,113}, {-62,114}, {-62,115}, {-62,116}, {-62,117}, {-62,118}, {-62,119}, {-62,120}, {-62,121}, {-62,122}, {-62,123}, {-62,124}, {-62,125}, {-62,126}, {-62,127}, {-62,128}, {-62,129}, {-62,130}, {-62,131}, {-62,132}, {-62,133}, {-62,134}, {-62,135}, {-62,136}, {-62,137}, {-61,-77}, {-61,-76}, {-61,-75}, {-61,-74}, {-61,-73}, {-61,-72}, {-61,-71}, {-61,-70}, {-61,-69}, {-61,-68}, {-61,-67}, {-61,-66}, {-61,-65}, {-61,-64}, {-61,-63}, {-61,-62}, {-61,-61}, {-61,26}, {-61,27}, {-61,28}, {-61,29}, {-61,30}, {-61,31}, {-61,32}, {-61,33}, {-61,34}, {-61,35}, {-61,36}, {-61,115}, {-61,116}, {-61,117}, {-61,126}, {-61,127}, {-61,135}, {-61,136}, {-61,137}, {-60,-77}, {-60,-76}, {-60,-75}, {-60,-74}, {-60,-73}, {-60,-72}, {-60,-71}, {-60,-70}, {-60,-69}, {-60,-68}, {-60,-67}, {-60,-66}, {-60,-65}, {-60,-64}, {-60,-63}, {-60,26}, {-60,27}, {-60,28}, {-60,29}, {-60,31}, {-60,34}, {-60,115}, {-60,116}, {-60,117}, {-60,126}, {-60,127}, {-60,135}, {-60,136}, {-60,137}, {-59,-77}, {-59,-76}, {-59,-74}, {-59,-71}, {-59,-70}, {-59,-69}, {-59,-68}, {-59,-65}, {-59,-63}, {-59,-62}, {-59,26}, {-59,27}, {-59,28}, {-59,29}, {-59,31}, {-59,32}, {-59,34}, {-59,35}, {-59,85}, {-59,86}, {-59,87}, {-59,88}, {-59,89}, {-59,90}, {-59,91}, {-59,94}, {-59,95}, {-59,96}, {-59,97}, {-59,98}, {-59,99}, {-59,100}, {-59,101}, {-59,102}, {-59,103}, {-59,104}, {-59,105}, {-59,106}, {-59,107}, {-59,108}, {-59,109}, {-59,110}, {-59,111}, {-59,112}, {-59,115}, {-59,116}, {-59,117}, {-59,126}, {-59,127}, {-59,135}, {-59,136}, {-59,137}, {-58,-77}, {-58,-76}, {-58,-75}, {-58,-74}, {-58,-71}, {-58,-70}, {-58,-69}, {-58,-68}, {-58,-65}, {-58,-64}, {-58,-63}, {-58,-62}, {-58,27}, {-58,28}, {-58,29}, {-58,31}, {-58,32}, {-58,34}, {-58,35}, {-58,85}, {-58,86}, {-58,87}, {-58,88}, {-58,89}, {-58,90}, {-58,91}, {-58,94}, {-58,100}, {-58,103}, {-58,104}, {-58,105}, {-58,106}, {-58,107}, {-58,108}, {-58,112}, {-58,115}, {-58,116}, {-58,117}, {-58,126}, {-58,127}, {-58,135}, {-58,136}, {-58,137}, {-57,-77}, {-57,-76}, {-57,-75}, {-57,-74}, {-57,-73}, {-57,-72}, {-57,-71}, {-57,-70}, {-57,-69}, {-57,-68}, {-57,-67}, {-57,-66}, {-57,-65}, {-57,-64}, {-57,-63}, {-57,-62}, {-57,27}, {-57,28}, {-57,29}, {-57,31}, {-57,32}, {-57,34}, {-57,35}, {-57,84}, {-57,85}, {-57,86}, {-57,87}, {-57,88}, {-57,89}, {-57,90}, {-57,91}, {-57,94}, {-57,95}, {-57,96}, {-57,97}, {-57,100}, {-57,101}, {-57,103}, {-57,104}, {-57,105}, {-57,106}, {-57,107}, {-57,108}, {-57,110}, {-57,111}, {-57,112}, {-57,115}, {-57,116}, {-57,117}, {-57,126}, {-57,127}, {-57,135}, {-57,136}, {-57,137}, {-56,-77}, {-56,-76}, {-56,-74}, {-56,-73}, {-56,-71}, {-56,-70}, {-56,-69}, {-56,-68}, {-56,-66}, {-56,-65}, {-56,-63}, {-56,-62}, {-56,27}, {-56,28}, {-56,29}, {-56,85}, {-56,86}, {-56,87}, {-56,88}, {-56,89}, {-56,90}, {-56,91}, {-56,100}, {-56,101}, {-56,103}, {-56,104}, {-56,105}, {-56,106}, {-56,107}, {-56,108}, {-56,112}, {-56,115}, {-56,116}, {-56,117}, {-56,126}, {-56,127}, {-56,135}, {-56,136}, {-56,137}, {-55,-77}, {-55,-76}, {-55,-75}, {-55,-74}, {-55,-73}, {-55,-72}, {-55,-71}, {-55,-70}, {-55,-69}, {-55,-68}, {-55,-67}, {-55,-66}, {-55,-65}, {-55,-64}, {-55,-63}, {-55,-62}, {-55,27}, {-55,28}, {-55,29}, {-55,30}, {-55,31}, {-55,32}, {-55,33}, {-55,34}, {-55,35}, {-55,85}, {-55,86}, {-55,87}, {-55,88}, {-55,89}, {-55,90}, {-55,91}, {-55,94}, {-55,95}, {-55,96}, {-55,97}, {-55,100}, {-55,101}, {-55,103}, {-55,104}, {-55,105}, {-55,106}, {-55,107}, {-55,108}, {-55,110}, {-55,111}, {-55,112}, {-55,115}, {-55,116}, {-55,117}, {-55,126}, {-55,127}, {-55,135}, {-55,136}, {-55,137}, {-54,-77}, {-54,-76}, {-54,-75}, {-54,-74}, {-54,-73}, {-54,-72}, {-54,-70}, {-54,-69}, {-54,-67}, {-54,-66}, {-54,-65}, {-54,-64}, {-54,-63}, {-54,-62}, {-54,27}, {-54,28}, {-54,29}, {-54,31}, {-54,94}, {-54,95}, {-54,96}, {-54,97}, {-54,100}, {-54,101}, {-54,103}, {-54,104}, {-54,105}, {-54,106}, {-54,107}, {-54,108}, {-54,110}, {-54,111}, {-54,112}, {-54,115}, {-54,116}, {-54,117}, {-54,126}, {-54,127}, {-54,129}, {-54,130}, {-54,131}, {-54,132}, {-54,133}, {-54,135}, {-54,136}, {-54,137}, {-53,-70}, {-53,-69}, {-53,27}, {-53,28}, {-53,29}, {-53,31}, {-53,32}, {-53,33}, {-53,34}, {-53,35}, {-53,115}, {-53,116}, {-53,117}, {-53,126}, {-53,127}, {-53,135}, {-53,136}, {-53,137}, {-52,27}, {-52,28}, {-52,29}, {-52,31}, {-52,115}, {-52,116}, {-52,117}, {-52,120}, {-52,121}, {-52,122}, {-52,123}, {-52,124}, {-52,126}, {-52,127}, {-52,135}, {-52,136}, {-52,137}, {-51,26}, {-51,27}, {-51,28}, {-51,29}, {-51,31}, {-51,32}, {-51,33}, {-51,34}, {-51,35}, {-51,115}, {-51,116}, {-51,117}, {-51,120}, {-51,121}, {-51,122}, {-51,123}, {-51,124}, {-51,126}, {-51,127}, {-51,135}, {-51,136}, {-51,137}, {-50,26}, {-50,27}, {-50,28}, {-50,29}, {-50,115}, {-50,116}, {-50,117}, {-50,126}, {-50,127}, {-50,135}, {-50,136}, {-50,137}, {-49,26}, {-49,27}, {-49,28}, {-49,29}, {-49,30}, {-49,31}, {-49,32}, {-49,33}, {-49,34}, {-49,35}, {-49,36}, {-49,115}, {-49,116}, {-49,117}, {-49,126}, {-49,127}, {-49,135}, {-49,136}, {-49,137}, {-48,27}, {-48,28}, {-48,29}, {-48,115}, {-48,116}, {-48,117}, {-48,126}, {-48,127}, {-48,135}, {-48,136}, {-48,137}, {-47,27}, {-47,28}, {-47,29}, {-47,30}, {-47,31}, {-47,32}, {-47,33}, {-47,34}, {-47,35}, {-47,115}, {-47,116}, {-47,117}, {-47,126}, {-47,127}, {-47,135}, {-47,136}, {-47,137}, {-46,27}, {-46,28}, {-46,29}, {-46,31}, {-46,32}, {-46,33}, {-46,34}, {-46,35}, {-46,115}, {-46,116}, {-46,117}, {-46,126}, {-46,127}, {-46,129}, {-46,130}, {-46,131}, {-46,132}, {-46,133}, {-46,135}, {-46,136}, {-46,137}, {-45,27}, {-45,28}, {-45,29}, {-45,31}, {-45,115}, {-45,116}, {-45,117}, {-45,118}, {-45,126}, {-45,127}, {-45,135}, {-45,136}, {-45,137}, {-44,27}, {-44,28}, {-44,29}, {-44,31}, {-44,32}, {-44,33}, {-44,34}, {-44,35}, {-44,115}, {-44,116}, {-44,117}, {-44,126}, {-44,127}, {-44,135}, {-44,136}, {-44,137}, {-43,-64}, {-43,-63}, {-43,-62}, {-43,27}, {-43,28}, {-43,29}, {-43,31}, {-43,32}, {-43,33}, {-43,34}, {-43,35}, {-43,115}, {-43,116}, {-43,117}, {-43,126}, {-43,127}, {-43,135}, {-43,136}, {-43,137}, {-42,-64}, {-42,-63}, {-42,-62}, {-42,27}, {-42,28}, {-42,29}, {-42,31}, {-42,115}, {-42,116}, {-42,117}, {-42,126}, {-42,127}, {-42,135}, {-42,136}, {-42,137}, {-41,-64}, {-41,-63}, {-41,-62}, {-41,27}, {-41,28}, {-41,29}, {-41,31}, {-41,32}, {-41,33}, {-41,34}, {-41,35}, {-41,115}, {-41,116}, {-41,117}, {-41,120}, {-41,121}, {-41,122}, {-41,123}, {-41,124}, {-41,126}, {-41,127}, {-41,135}, {-41,136}, {-41,137}, {-40,-64}, {-40,-63}, {-40,-62}, {-40,27}, {-40,28}, {-40,29}, {-40,31}, {-40,32}, {-40,33}, {-40,34}, {-40,35}, {-40,115}, {-40,116}, {-40,117}, {-40,120}, {-40,121}, {-40,122}, {-40,123}, {-40,124}, {-40,126}, {-40,127}, {-40,135}, {-40,136}, {-40,137}, {-39,-64}, {-39,-63}, {-39,-62}, {-39,27}, {-39,28}, {-39,29}, {-39,31}, {-39,115}, {-39,116}, {-39,117}, {-39,126}, {-39,127}, {-39,135}, {-39,136}, {-39,137}, {-38,-64}, {-38,-63}, {-38,-62}, {-38,27}, {-38,28}, {-38,29}, {-38,31}, {-38,32}, {-38,33}, {-38,34}, {-38,35}, {-38,115}, {-38,116}, {-38,117}, {-38,126}, {-38,127}, {-38,129}, {-38,130}, {-38,131}, {-38,132}, {-38,133}, {-38,135}, {-38,136}, {-38,137}, {-37,-64}, {-37,-63}, {-37,-62}, {-37,27}, {-37,28}, {-37,29}, {-37,31}, {-37,32}, {-37,33}, {-37,34}, {-37,35}, {-37,115}, {-37,116}, {-37,117}, {-37,126}, {-37,127}, {-37,135}, {-37,136}, {-37,137}, {-36,94}, {-36,95}, {-36,96}, {-36,97}, {-36,100}, {-36,101}, {-36,103}, {-36,104}, {-36,105}, {-36,106}, {-36,107}, {-36,108}, {-36,110}, {-36,111}, {-36,112}, {-36,115}, {-36,116}, {-36,117}, {-36,126}, {-36,127}, {-36,135}, {-36,136}, {-36,137}, {-35,-64}, {-35,-63}, {-35,-62}, {-35,-24}, {-35,-23}, {-35,-22}, {-35,-21}, {-35,-20}, {-35,-19}, {-35,-17}, {-35,-16}, {-35,-15}, {-35,-14}, {-35,42}, {-35,43}, {-35,44}, {-35,88}, {-35,89}, {-35,90}, {-35,91}, {-35,97}, {-35,100}, {-35,101}, {-35,103}, {-35,104}, {-35,105}, {-35,106}, {-35,107}, {-35,108}, {-35,110}, {-35,111}, {-35,112}, {-35,115}, {-35,116}, {-35,117}, {-35,126}, {-35,127}, {-35,135}, {-35,136}, {-35,137}, {-34,-64}, {-34,-63}, {-34,-62}, {-34,-24}, {-34,-23}, {-34,-22}, {-34,-21}, {-34,-20}, {-34,-19}, {-34,-17}, {-34,-16}, {-34,-15}, {-34,-14}, {-34,26}, {-34,27}, {-34,28}, {-34,29}, {-34,30}, {-34,31}, {-34,32}, {-34,33}, {-34,34}, {-34,35}, {-34,42}, {-34,43}, {-34,44}, {-34,87}, {-34,88}, {-34,89}, {-34,90}, {-34,91}, {-34,94}, {-34,95}, {-34,96}, {-34,97}, {-34,100}, {-34,101}, {-34,103}, {-34,104}, {-34,105}, {-34,106}, {-34,107}, {-34,108}, {-34,111}, {-34,115}, {-34,116}, {-34,117}, {-34,126}, {-34,127}, {-34,135}, {-34,136}, {-34,137}, {-33,-64}, {-33,-63}, {-33,-62}, {-33,-15}, {-33,-14}, {-33,26}, {-33,27}, {-33,28}, {-33,29}, {-33,30}, {-33,31}, {-33,32}, {-33,33}, {-33,34}, {-33,35}, {-33,42}, {-33,43}, {-33,44}, {-33,88}, {-33,89}, {-33,90}, {-33,91}, {-33,100}, {-33,101}, {-33,103}, {-33,104}, {-33,105}, {-33,106}, {-33,107}, {-33,108}, {-33,110}, {-33,111}, {-33,112}, {-33,115}, {-33,116}, {-33,117}, {-33,126}, {-33,127}, {-33,135}, {-33,136}, {-33,137}, {-32,-64}, {-32,-63}, {-32,-62}, {-32,-24}, {-32,-23}, {-32,-22}, {-32,-21}, {-32,-20}, {-32,-19}, {-32,-18}, {-32,-17}, {-32,-15}, {-32,-14}, {-32,26}, {-32,27}, {-32,29}, {-32,30}, {-32,31}, {-32,32}, {-32,33}, {-32,34}, {-32,35}, {-32,42}, {-32,43}, {-32,44}, {-32,94}, {-32,95}, {-32,96}, {-32,97}, {-32,101}, {-32,103}, {-32,104}, {-32,105}, {-32,106}, {-32,107}, {-32,108}, {-32,111}, {-32,115}, {-32,116}, {-32,117}, {-32,120}, {-32,121}, {-32,122}, {-32,123}, {-32,124}, {-32,126}, {-32,127}, {-32,135}, {-32,136}, {-32,137}, {-31,-64}, {-31,-63}, {-31,-62}, {-31,-24}, {-31,-23}, {-31,-22}, {-31,-21}, {-31,-20}, {-31,-19}, {-31,-18}, {-31,-17}, {-31,-15}, {-31,-14}, {-31,26}, {-31,27}, {-31,42}, {-31,43}, {-31,44}, {-31,94}, {-31,95}, {-31,96}, {-31,97}, {-31,98}, {-31,99}, {-31,100}, {-31,101}, {-31,102}, {-31,103}, {-31,104}, {-31,105}, {-31,106}, {-31,107}, {-31,108}, {-31,109}, {-31,110}, {-31,111}, {-31,112}, {-31,115}, {-31,116}, {-31,117}, {-31,120}, {-31,121}, {-31,122}, {-31,123}, {-31,124}, {-31,126}, {-31,127}, {-31,135}, {-31,136}, {-31,137}, {-30,-23}, {-30,-15}, {-30,-14}, {-30,29}, {-30,30}, {-30,31}, {-30,32}, {-30,33}, {-30,34}, {-30,35}, {-30,44}, {-30,120}, {-30,121}, {-30,122}, {-30,123}, {-30,124}, {-30,126}, {-30,127}, {-30,129}, {-30,130}, {-30,131}, {-30,132}, {-30,133}, {-30,135}, {-30,136}, {-30,137}, {-29,-64}, {-29,-63}, {-29,-62}, {-29,-24}, {-29,-23}, {-29,-22}, {-29,-21}, {-29,-20}, {-29,-19}, {-29,-18}, {-29,-17}, {-29,-15}, {-29,-14}, {-29,26}, {-29,27}, {-29,29}, {-29,31}, {-29,33}, {-29,35}, {-29,42}, {-29,43}, {-29,44}, {-29,45}, {-29,46}, {-29,47}, {-29,48}, {-29,49}, {-29,50}, {-29,51}, {-29,52}, {-29,53}, {-29,54}, {-29,55}, {-29,56}, {-29,57}, {-29,58}, {-29,59}, {-29,60}, {-29,61}, {-29,62}, {-29,63}, {-29,64}, {-29,65}, {-29,66}, {-29,67}, {-29,68}, {-29,69}, {-29,70}, {-29,126}, {-29,127}, {-29,135}, {-29,136}, {-29,137}, {-28,-64}, {-28,-63}, {-28,-62}, {-28,-24}, {-28,-23}, {-28,-22}, {-28,-21}, {-28,-20}, {-28,-19}, {-28,-18}, {-28,-17}, {-28,-15}, {-28,-14}, {-28,26}, {-28,27}, {-28,28}, {-28,29}, {-28,31}, {-28,33}, {-28,35}, {-28,42}, {-28,43}, {-28,44}, {-28,45}, {-28,46}, {-28,47}, {-28,48}, {-28,49}, {-28,50}, {-28,51}, {-28,52}, {-28,53}, {-28,54}, {-28,55}, {-28,56}, {-28,57}, {-28,58}, {-28,59}, {-28,60}, {-28,61}, {-28,62}, {-28,63}, {-28,64}, {-28,65}, {-28,66}, {-28,67}, {-28,69}, {-28,70}, {-28,120}, {-28,121}, {-28,122}, {-28,123}, {-28,124}, {-28,125}, {-28,126}, {-28,127}, {-28,128}, {-28,129}, {-28,130}, {-28,131}, {-28,132}, {-28,133}, {-28,134}, {-28,135}, {-28,136}, {-28,137}, {-27,-64}, {-27,-63}, {-27,-62}, {-27,-23}, {-27,-15}, {-27,-14}, {-27,26}, {-27,27}, {-27,29}, {-27,31}, {-27,33}, {-27,35}, {-27,44}, {-27,69}, {-27,70}, {-27,120}, {-27,121}, {-27,122}, {-27,123}, {-27,124}, {-27,125}, {-27,126}, {-27,127}, {-27,128}, {-27,129}, {-27,130}, {-27,131}, {-27,132}, {-27,133}, {-27,134}, {-27,135}, {-27,136}, {-27,137}, {-26,-64}, {-26,-63}, {-26,-62}, {-26,-24}, {-26,-23}, {-26,-22}, {-26,-21}, {-26,-20}, {-26,-19}, {-26,-18}, {-26,-17}, {-26,-16}, {-26,-15}, {-26,-14}, {-26,26}, {-26,27}, {-26,29}, {-26,31}, {-26,33}, {-26,35}, {-26,42}, {-26,43}, {-26,44}, {-26,45}, {-26,46}, {-26,47}, {-26,48}, {-26,49}, {-26,50}, {-26,51}, {-26,52}, {-26,53}, {-26,54}, {-26,55}, {-26,56}, {-26,58}, {-26,59}, {-26,60}, {-26,63}, {-26,64}, {-26,65}, {-26,66}, {-26,67}, {-26,69}, {-26,70}, {-26,126}, {-26,127}, {-26,135}, {-26,136}, {-26,137}, {-25,-64}, {-25,-63}, {-25,-62}, {-25,-24}, {-25,-23}, {-25,-22}, {-25,-21}, {-25,-20}, {-25,-19}, {-25,-18}, {-25,-17}, {-25,-16}, {-25,-15}, {-25,-14}, {-25,26}, {-25,27}, {-25,29}, {-25,31}, {-25,33}, {-25,35}, {-25,42}, {-25,43}, {-25,44}, {-25,54}, {-25,55}, {-25,56}, {-25,58}, {-25,59}, {-25,60}, {-25,63}, {-25,64}, {-25,65}, {-25,66}, {-25,67}, {-25,69}, {-25,70}, {-25,126}, {-25,127}, {-25,135}, {-25,136}, {-25,137}, {-24,-64}, {-24,-63}, {-24,-62}, {-24,42}, {-24,43}, {-24,44}, {-24,46}, {-24,47}, {-24,48}, {-24,49}, {-24,50}, {-24,51}, {-24,52}, {-24,54}, {-24,55}, {-24,56}, {-24,58}, {-24,59}, {-24,60}, {-24,61}, {-24,62}, {-24,63}, {-24,64}, {-24,65}, {-24,66}, {-24,67}, {-24,69}, {-24,70}, {-24,126}, {-24,127}, {-24,135}, {-24,136}, {-24,137}, {-23,-64}, {-23,-63}, {-23,-62}, {-23,42}, {-23,43}, {-23,44}, {-23,46}, {-23,47}, {-23,48}, {-23,49}, {-23,50}, {-23,51}, {-23,52}, {-23,54}, {-23,55}, {-23,56}, {-23,58}, {-23,59}, {-23,60}, {-23,63}, {-23,64}, {-23,65}, {-23,66}, {-23,67}, {-23,69}, {-23,70}, {-23,126}, {-23,127}, {-23,135}, {-23,136}, {-23,137}, {-22,-64}, {-22,-63}, {-22,-62}, {-22,42}, {-22,43}, {-22,44}, {-22,46}, {-22,47}, {-22,48}, {-22,49}, {-22,50}, {-22,51}, {-22,52}, {-22,54}, {-22,55}, {-22,56}, {-22,58}, {-22,59}, {-22,60}, {-22,63}, {-22,64}, {-22,65}, {-22,66}, {-22,67}, {-22,69}, {-22,70}, {-22,126}, {-22,127}, {-22,135}, {-22,136}, {-22,137}, {-21,-64}, {-21,-63}, {-21,-62}, {-21,48}, {-21,49}, {-21,65}, {-21,69}, {-21,70}, {-21,126}, {-21,127}, {-21,135}, {-21,136}, {-21,137}, {-21,140}, {-21,142}, {-21,143}, {-21,144}, {-21,145}, {-21,146}, {-20,-64}, {-20,-63}, {-20,-62}, {-20,48}, {-20,49}, {-20,69}, {-20,70}, {-20,126}, {-20,127}, {-20,135}, {-20,136}, {-20,137}, {-20,140}, {-20,142}, {-20,143}, {-20,144}, {-20,145}, {-20,146}, {-19,-64}, {-19,-63}, {-19,-62}, {-19,38}, {-19,39}, {-19,40}, {-19,43}, {-19,44}, {-19,45}, {-19,46}, {-19,47}, {-19,48}, {-19,49}, {-19,50}, {-19,51}, {-19,52}, {-19,53}, {-19,54}, {-19,57}, {-19,58}, {-19,59}, {-19,69}, {-19,70}, {-19,120}, {-19,121}, {-19,123}, {-19,124}, {-19,126}, {-19,127}, {-19,129}, {-19,130}, {-19,132}, {-19,133}, {-19,135}, {-19,136}, {-19,137}, {-19,140}, {-19,142}, {-19,143}, {-19,144}, {-19,145}, {-19,146}, {-18,38}, {-18,39}, {-18,40}, {-18,43}, {-18,44}, {-18,45}, {-18,46}, {-18,47}, {-18,48}, {-18,49}, {-18,50}, {-18,51}, {-18,52}, {-18,53}, {-18,54}, {-18,55}, {-18,56}, {-18,57}, {-18,58}, {-18,59}, {-18,60}, {-18,69}, {-18,70}, {-18,120}, {-18,121}, {-18,123}, {-18,124}, {-18,126}, {-18,127}, {-18,129}, {-18,130}, {-18,132}, {-18,133}, {-18,135}, {-18,136}, {-18,137}, {-18,140}, {-18,142}, {-18,143}, {-18,144}, {-18,145}, {-18,146}, {-17,-64}, {-17,-63}, {-17,-62}, {-17,38}, {-17,39}, {-17,40}, {-17,43}, {-17,44}, {-17,45}, {-17,46}, {-17,47}, {-17,48}, {-17,49}, {-17,50}, {-17,51}, {-17,52}, {-17,53}, {-17,54}, {-17,57}, {-17,58}, {-17,59}, {-17,69}, {-17,70}, {-17,124}, {-17,126}, {-17,127}, {-17,133}, {-17,135}, {-17,136}, {-17,137}, {-17,140}, {-17,141}, {-17,142}, {-17,143}, {-17,144}, {-17,145}, {-17,146}, {-16,-64}, {-16,-63}, {-16,-62}, {-16,39}, {-16,69}, {-16,70}, {-16,126}, {-16,127}, {-16,135}, {-16,136}, {-16,137}, {-16,140}, {-16,142}, {-16,143}, {-16,144}, {-16,145}, {-16,146}, {-15,-64}, {-15,-63}, {-15,-62}, {-15,69}, {-15,70}, {-15,126}, {-15,127}, {-15,135}, {-15,136}, {-15,137}, {-15,140}, {-15,142}, {-15,143}, {-15,144}, {-15,145}, {-15,146}, {-14,-64}, {-14,-63}, {-14,-62}, {-14,69}, {-14,70}, {-14,126}, {-14,127}, {-14,135}, {-14,136}, {-14,137}, {-14,140}, {-13,-64}, {-13,-63}, {-13,-62}, {-13,69}, {-13,70}, {-13,126}, {-13,127}, {-13,135}, {-13,136}, {-13,137}, {-13,140}, {-13,142}, {-13,143}, {-13,144}, {-13,145}, {-13,146}, {-12,-64}, {-12,-63}, {-12,-62}, {-12,69}, {-12,70}, {-12,126}, {-12,127}, {-12,135}, {-12,136}, {-12,137}, {-12,140}, {-12,142}, {-12,143}, {-12,144}, {-12,146}, {-11,-64}, {-11,-63}, {-11,-62}, {-11,69}, {-11,70}, {-11,126}, {-11,127}, {-11,135}, {-11,136}, {-11,137}, {-11,140}, {-11,142}, {-11,143}, {-11,144}, {-11,146}, {-10,-64}, {-10,-63}, {-10,-62}, {-10,120}, {-10,121}, {-10,122}, {-10,123}, {-10,124}, {-10,126}, {-10,127}, {-10,129}, {-10,130}, {-10,131}, {-10,132}, {-10,133}, {-10,135}, {-10,136}, {-10,137}, {-10,140}, {-10,142}, {-10,143}, {-10,144}, {-10,146}, {-9,-64}, {-9,-63}, {-9,-62}, {-9,121}, {-9,122}, {-9,123}, {-9,124}, {-9,126}, {-9,127}, {-9,130}, {-9,131}, {-9,135}, {-9,136}, {-9,137}, {-9,140}, {-9,141}, {-9,142}, {-9,143}, {-9,144}, {-9,146}, {-8,-64}, {-8,-63}, {-8,-62}, {-8,126}, {-8,127}, {-8,135}, {-8,136}, {-8,137}, {-8,140}, {-8,142}, {-8,143}, {-8,144}, {-8,146}, {-7,-64}, {-7,-63}, {-7,-62}, {-7,126}, {-7,127}, {-7,135}, {-7,136}, {-7,137}, {-7,140}, {-7,142}, {-7,143}, {-7,144}, {-7,146}, {-6,-64}, {-6,-63}, {-6,-62}, {-6,69}, {-6,70}, {-6,126}, {-6,127}, {-6,135}, {-6,136}, {-6,137}, {-6,138}, {-6,139}, {-6,140}, {-5,-64}, {-5,-63}, {-5,-62}, {-5,126}, {-5,127}, {-5,135}, {-5,136}, {-5,137}, {-5,138}, {-5,139}, {-5,140}, {-5,142}, {-5,143}, {-5,144}, {-5,145}, {-5,146}, {-4,-64}, {-4,-63}, {-4,-62}, {-4,69}, {-4,70}, {-4,126}, {-4,127}, {-4,135}, {-4,136}, {-4,137}, {-4,140}, {-4,142}, {-4,143}, {-4,144}, {-4,145}, {-4,146}, {-3,-64}, {-3,-63}, {-3,-62}, {-3,69}, {-3,70}, {-3,126}, {-3,127}, {-3,135}, {-3,136}, {-3,137}, {-3,140}, {-3,141}, {-3,142}, {-3,143}, {-3,144}, {-3,145}, {-3,146}, {-2,-64}, {-2,-63}, {-2,-62}, {-2,69}, {-2,70}, {-2,92}, {-2,93}, {-2,95}, {-2,96}, {-2,97}, {-2,98}, {-2,99}, {-2,100}, {-2,101}, {-2,102}, {-2,103}, {-2,104}, {-2,105}, {-2,106}, {-2,107}, {-2,108}, {-2,109}, {-2,110}, {-2,111}, {-2,112}, {-2,113}, {-2,114}, {-2,115}, {-2,116}, {-2,117}, {-2,118}, {-2,120}, {-2,121}, {-2,122}, {-2,123}, {-2,124}, {-2,126}, {-2,127}, {-2,129}, {-2,130}, {-2,131}, {-2,132}, {-2,133}, {-2,135}, {-2,136}, {-2,137}, {-2,140}, {-2,142}, {-2,143}, {-2,144}, {-2,145}, {-2,146}, {-1,-63}, {-1,69}, {-1,70}, {-1,92}, {-1,93}, {-1,95}, {-1,96}, {-1,97}, {-1,98}, {-1,99}, {-1,100}, {-1,101}, {-1,102}, {-1,103}, {-1,104}, {-1,105}, {-1,106}, {-1,107}, {-1,108}, {-1,109}, {-1,110}, {-1,111}, {-1,112}, {-1,113}, {-1,114}, {-1,115}, {-1,116}, {-1,117}, {-1,118}, {-1,119}, {-1,120}, {-1,121}, {-1,122}, {-1,123}, {-1,124}, {-1,126}, {-1,127}, {-1,128}, {-1,129}, {-1,130}, {-1,131}, {-1,132}, {-1,133}, {-1,135}, {-1,136}, {-1,137}, {-1,140}, {-1,142}, {-1,143}, {-1,144}, {-1,145}, {-1,146}, {0,-64}, {0,-63}, {0,-62}, {0,38}, {0,39}, {0,40}, {0,43}, {0,44}, {0,45}, {0,46}, {0,47}, {0,48}, {0,49}, {0,50}, {0,51}, {0,52}, {0,53}, {0,54}, {0,57}, {0,58}, {0,59}, {0,69}, {0,70}, {0,92}, {0,93}, {0,95}, {0,103}, {0,112}, {0,117}, {0,118}, {0,120}, {0,121}, {0,122}, {0,123}, {0,124}, {0,126}, {0,127}, {0,129}, {0,130}, {0,131}, {0,132}, {0,133}, {0,135}, {0,136}, {0,137}, {0,140}, {0,142}, {0,143}, {0,144}, {0,145}, {0,146}, {1,-64}, {1,-63}, {1,-62}, {1,38}, {1,39}, {1,40}, {1,41}, {1,42}, {1,43}, {1,44}, {1,45}, {1,46}, {1,47}, {1,48}, {1,49}, {1,50}, {1,51}, {1,52}, {1,53}, {1,54}, {1,55}, {1,56}, {1,57}, {1,58}, {1,59}, {1,69}, {1,70}, {1,92}, {1,93}, {1,95}, {1,96}, {1,97}, {1,98}, {1,100}, {1,101}, {1,103}, {1,104}, {1,105}, {1,106}, {1,107}, {1,109}, {1,110}, {1,112}, {1,113}, {1,114}, {1,115}, {1,117}, {1,118}, {1,121}, {1,126}, {1,127}, {1,135}, {1,136}, {1,137}, {1,140}, {1,142}, {1,143}, {1,144}, {1,145}, {1,146}, {2,-64}, {2,-63}, {2,-62}, {2,38}, {2,39}, {2,40}, {2,43}, {2,44}, {2,45}, {2,46}, {2,47}, {2,48}, {2,49}, {2,50}, {2,51}, {2,52}, {2,53}, {2,54}, {2,57}, {2,58}, {2,59}, {2,69}, {2,70}, {2,92}, {2,93}, {2,95}, {2,96}, {2,97}, {2,98}, {2,99}, {2,100}, {2,101}, {2,103}, {2,104}, {2,105}, {2,106}, {2,107}, {2,108}, {2,109}, {2,110}, {2,112}, {2,113}, {2,114}, {2,115}, {2,117}, {2,118}, {2,120}, {2,121}, {2,122}, {2,123}, {2,124}, {2,126}, {2,127}, {2,129}, {2,130}, {2,131}, {2,132}, {2,133}, {2,135}, {2,136}, {2,137}, {2,140}, {2,146}, {3,-64}, {3,-63}, {3,-62}, {3,92}, {3,93}, {3,95}, {3,96}, {3,97}, {3,98}, {3,100}, {3,101}, {3,103}, {3,104}, {3,105}, {3,106}, {3,107}, {3,109}, {3,110}, {3,112}, {3,113}, {3,114}, {3,115}, {3,117}, {3,118}, {3,120}, {3,121}, {3,122}, {3,123}, {3,124}, {3,126}, {3,127}, {3,129}, {3,130}, {3,131}, {3,132}, {3,133}, {3,134}, {3,135}, {3,136}, {3,137}, {3,140}, {3,142}, {3,143}, {3,144}, {3,145}, {3,146}, {4,-64}, {4,-63}, {4,-62}, {4,92}, {4,93}, {4,117}, {4,118}, {4,126}, {4,127}, {4,140}, {5,-64}, {5,-63}, {5,-62}, {5,62}, {5,63}, {5,64}, {5,65}, {5,66}, {5,67}, {5,68}, {5,69}, {5,70}, {5,71}, {5,72}, {5,73}, {5,74}, {5,75}, {5,76}, {5,78}, {5,79}, {5,80}, {5,81}, {5,82}, {5,83}, {5,84}, {5,86}, {5,87}, {5,88}, {5,89}, {5,90}, {5,92}, {5,93}, {5,94}, {5,95}, {5,96}, {5,97}, {5,98}, {5,99}, {5,100}, {5,101}, {5,102}, {5,103}, {5,104}, {5,105}, {5,106}, {5,107}, {5,108}, {5,109}, {5,110}, {5,111}, {5,112}, {5,113}, {5,114}, {5,115}, {5,116}, {5,117}, {5,118}, {5,119}, {5,120}, {5,121}, {5,122}, {5,123}, {5,124}, {5,125}, {5,126}, {5,127}, {5,128}, {5,129}, {5,130}, {5,131}, {5,132}, {5,133}, {5,135}, {5,136}, {5,137}, {5,140}, {5,142}, {5,143}, {5,144}, {5,145}, {5,146}, {6,-64}, {6,-63}, {6,-62}, {6,38}, {6,39}, {6,40}, {6,41}, {6,42}, {6,43}, {6,44}, {6,45}, {6,46}, {6,47}, {6,48}, {6,49}, {6,52}, {6,53}, {6,54}, {6,56}, {6,57}, {6,58}, {6,59}, {6,62}, {6,63}, {6,64}, {6,65}, {6,66}, {6,67}, {6,68}, {6,69}, {6,70}, {6,71}, {6,72}, {6,73}, {6,74}, {6,75}, {6,76}, {6,78}, {6,79}, {6,80}, {6,81}, {6,82}, {6,83}, {6,84}, {6,85}, {6,86}, {6,87}, {6,88}, {6,89}, {6,90}, {6,91}, {6,92}, {6,93}, {6,94}, {6,95}, {6,96}, {6,97}, {6,98}, {6,99}, {6,100}, {6,101}, {6,102}, {6,103}, {6,104}, {6,105}, {6,106}, {6,107}, {6,108}, {6,109}, {6,110}, {6,111}, {6,112}, {6,113}, {6,114}, {6,115}, {6,116}, {6,117}, {6,118}, {6,119}, {6,120}, {6,121}, {6,122}, {6,123}, {6,124}, {6,125}, {6,126}, {6,127}, {6,128}, {6,129}, {6,130}, {6,131}, {6,132}, {6,133}, {6,134}, {6,135}, {6,136}, {6,137}, {6,140}, {6,141}, {6,142}, {6,143}, {6,144}, {6,145}, {6,146}, {7,-64}, {7,-63}, {7,-62}, {7,38}, {7,39}, {7,40}, {7,41}, {7,42}, {7,43}, {7,44}, {7,45}, {7,46}, {7,47}, {7,48}, {7,49}, {7,50}, {7,51}, {7,52}, {7,53}, {7,54}, {7,55}, {7,56}, {7,57}, {7,58}, {7,59}, {7,62}, {7,63}, {7,64}, {7,65}, {7,67}, {7,68}, {7,69}, {7,70}, {7,71}, {7,72}, {7,73}, {7,74}, {7,75}, {7,76}, {7,78}, {7,79}, {7,80}, {7,81}, {7,82}, {7,83}, {7,84}, {7,86}, {7,87}, {7,88}, {7,89}, {7,90}, {7,92}, {7,93}, {7,94}, {7,95}, {7,96}, {7,97}, {7,98}, {7,99}, {7,100}, {7,101}, {7,102}, {7,103}, {7,104}, {7,105}, {7,106}, {7,107}, {7,108}, {7,109}, {7,110}, {7,111}, {7,112}, {7,113}, {7,114}, {7,115}, {7,116}, {7,117}, {7,118}, {7,119}, {7,120}, {7,121}, {7,122}, {7,123}, {7,124}, {7,125}, {7,126}, {7,127}, {7,128}, {7,129}, {7,130}, {7,131}, {7,132}, {7,133}, {7,135}, {7,136}, {7,137}, {7,140}, {7,142}, {7,143}, {7,144}, {7,145}, {7,146}, {8,-64}, {8,-63}, {8,-62}, {8,38}, {8,39}, {8,40}, {8,41}, {8,42}, {8,43}, {8,44}, {8,45}, {8,46}, {8,47}, {8,48}, {8,49}, {8,50}, {8,51}, {8,52}, {8,53}, {8,54}, {8,55}, {8,56}, {8,57}, {8,58}, {8,59}, {8,62}, {8,63}, {8,64}, {8,65}, {8,71}, {8,93}, {8,108}, {8,136}, {9,-64}, {9,-63}, {9,-62}, {9,38}, {9,39}, {9,40}, {9,41}, {9,42}, {9,43}, {9,44}, {9,45}, {9,46}, {9,47}, {9,48}, {9,49}, {9,52}, {9,53}, {9,54}, {9,56}, {9,57}, {9,58}, {9,59}, {9,62}, {9,63}, {9,64}, {9,65}, {9,67}, {9,68}, {9,69}, {9,70}, {9,71}, {9,72}, {9,73}, {9,74}, {9,86}, {9,87}, {9,88}, {9,89}, {9,90}, {9,92}, {9,93}, {9,94}, {9,95}, {9,96}, {9,97}, {9,98}, {9,99}, {9,100}, {9,102}, {9,103}, {9,104}, {9,105}, {9,107}, {9,108}, {9,109}, {9,117}, {9,125}, {9,133}, {9,135}, {9,136}, {9,137}, {10,53}, {10,62}, {10,63}, {10,64}, {10,65}, {10,67}, {10,68}, {10,69}, {10,70}, {10,71}, {10,72}, {10,73}, {10,74}, {10,86}, {10,87}, {10,88}, {10,89}, {10,90}, {10,92}, {10,93}, {10,94}, {10,95}, {10,96}, {10,97}, {10,98}, {10,99}, {10,100}, {10,102}, {10,103}, {10,104}, {10,105}, {10,107}, {10,108}, {10,109}, {10,117}, {10,125}, {10,133}, {10,135}, {10,136}, {10,137}, {11,53}, {11,67}, {11,103}, {11,107}, {11,108}, {11,109}, {11,117}, {11,125}, {11,133}, {11,135}, {11,136}, {11,137}, {12,-64}, {12,-63}, {12,-62}, {12,-61}, {12,-60}, {12,-59}, {12,-58}, {12,-57}, {12,-56}, {12,-55}, {12,-54}, {12,-53}, {12,-51}, {12,-49}, {12,-48}, {12,-47}, {12,-46}, {12,-45}, {12,-44}, {12,-43}, {12,-42}, {12,-41}, {12,-40}, {12,-39}, {12,-38}, {12,-37}, {12,-36}, {12,-35}, {12,-34}, {12,-33}, {12,-32}, {12,-31}, {12,-28}, {12,-27}, {12,-26}, {12,-25}, {12,-24}, {12,-23}, {12,-20}, {12,-19}, {12,-18}, {12,-17}, {12,-16}, {12,-15}, {12,-14}, {12,-13}, {12,-12}, {12,-11}, {12,-10}, {12,-9}, {12,-8}, {12,-5}, {12,-4}, {12,-3}, {12,-2}, {12,-1}, {12,0}, {12,3}, {12,4}, {12,5}, {12,6}, {12,7}, {12,8}, {12,9}, {12,10}, {12,11}, {12,12}, {12,13}, {12,14}, {12,15}, {12,16}, {12,17}, {12,18}, {12,19}, {12,20}, {12,21}, {12,22}, {12,25}, {12,26}, {12,27}, {12,28}, {12,29}, {12,30}, {12,31}, {12,32}, {12,33}, {12,34}, {12,35}, {12,36}, {12,37}, {12,38}, {12,39}, {12,40}, {12,41}, {12,42}, {12,43}, {12,44}, {12,45}, {12,47}, {12,48}, {12,49}, {12,52}, {12,53}, {12,54}, {12,55}, {12,56}, {12,57}, {12,58}, {12,59}, {12,60}, {12,61}, {12,62}, {12,63}, {12,64}, {12,65}, {12,66}, {12,67}, {12,68}, {12,69}, {12,70}, {12,102}, {12,103}, {12,104}, {12,105}, {12,107}, {12,108}, {12,109}, {12,117}, {12,125}, {12,133}, {12,135}, {12,136}, {12,137}, {13,-64}, {13,-63}, {13,-62}, {13,-61}, {13,-60}, {13,-59}, {13,-58}, {13,-57}, {13,-56}, {13,-55}, {13,-54}, {13,-53}, {13,-52}, {13,-51}, {13,-49}, {13,-48}, {13,-47}, {13,-46}, {13,-45}, {13,-44}, {13,-43}, {13,-42}, {13,-41}, {13,-40}, {13,-39}, {13,-38}, {13,-37}, {13,-36}, {13,-35}, {13,-34}, {13,-33}, {13,-32}, {13,-31}, {13,-28}, {13,-27}, {13,-26}, {13,-25}, {13,-24}, {13,-23}, {13,-20}, {13,-19}, {13,-18}, {13,-17}, {13,-16}, {13,-15}, {13,-14}, {13,-13}, {13,-12}, {13,-11}, {13,-10}, {13,-9}, {13,-8}, {13,-5}, {13,-4}, {13,-3}, {13,-2}, {13,-1}, {13,0}, {13,3}, {13,4}, {13,5}, {13,6}, {13,7}, {13,8}, {13,9}, {13,10}, {13,11}, {13,12}, {13,13}, {13,14}, {13,15}, {13,16}, {13,17}, {13,18}, {13,19}, {13,20}, {13,21}, {13,22}, {13,25}, {13,26}, {13,27}, {13,28}, {13,29}, {13,30}, {13,31}, {13,32}, {13,33}, {13,34}, {13,35}, {13,36}, {13,37}, {13,38}, {13,39}, {13,40}, {13,41}, {13,42}, {13,43}, {13,44}, {13,45}, {13,46}, {13,47}, {13,48}, {13,49}, {13,52}, {13,53}, {13,54}, {13,55}, {13,56}, {13,57}, {13,58}, {13,59}, {13,60}, {13,61}, {13,62}, {13,63}, {13,64}, {13,65}, {13,66}, {13,67}, {13,68}, {13,69}, {13,70}, {13,102}, {13,103}, {13,104}, {13,105}, {13,107}, {13,108}, {13,109}, {13,117}, {13,125}, {13,133}, {13,135}, {13,136}, {13,137}, {14,-64}, {14,-63}, {14,-62}, {14,-61}, {14,-60}, {14,-59}, {14,-58}, {14,-57}, {14,-56}, {14,-55}, {14,-54}, {14,-53}, {14,-51}, {14,-49}, {14,-48}, {14,-47}, {14,-46}, {14,-45}, {14,-44}, {14,-43}, {14,-42}, {14,-41}, {14,-40}, {14,-39}, {14,-38}, {14,-37}, {14,-36}, {14,-35}, {14,-34}, {14,-33}, {14,-32}, {14,-31}, {14,-28}, {14,-27}, {14,-26}, {14,-25}, {14,-24}, {14,-23}, {14,-20}, {14,-19}, {14,-18}, {14,-17}, {14,-16}, {14,-15}, {14,-14}, {14,-13}, {14,-12}, {14,-11}, {14,-10}, {14,-9}, {14,-8}, {14,-5}, {14,-4}, {14,-3}, {14,-2}, {14,-1}, {14,0}, {14,3}, {14,4}, {14,5}, {14,6}, {14,7}, {14,8}, {14,9}, {14,10}, {14,11}, {14,12}, {14,13}, {14,14}, {14,15}, {14,16}, {14,17}, {14,18}, {14,19}, {14,20}, {14,21}, {14,22}, {14,25}, {14,26}, {14,27}, {14,28}, {14,29}, {14,30}, {14,31}, {14,32}, {14,33}, {14,34}, {14,35}, {14,36}, {14,37}, {14,38}, {14,39}, {14,40}, {14,41}, {14,42}, {14,43}, {14,44}, {14,45}, {14,47}, {14,48}, {14,49}, {14,53}, {14,65}, {14,102}, {14,103}, {14,104}, {14,105}, {14,107}, {14,108}, {14,109}, {14,135}, {14,136}, {14,137}, {15,47}, {15,48}, {15,49}, {15,52}, {15,53}, {15,54}, {15,64}, {15,65}, {15,66}, {15,68}, {15,69}, {15,70}, {15,102}, {15,103}, {15,104}, {15,105}, {15,107}, {15,108}, {15,109}, {15,110}, {15,111}, {15,112}, {15,113}, {15,114}, {15,115}, {15,116}, {15,117}, {15,118}, {15,119}, {15,120}, {15,121}, {15,122}, {15,123}, {15,124}, {15,125}, {15,126}, {15,127}, {15,128}, {15,129}, {15,130}, {15,131}, {15,132}, {15,133}, {15,134}, {15,135}, {15,136}, {15,137}, {16,-1}, {16,47}, {16,48}, {16,49}, {16,52}, {16,53}, {16,54}, {16,64}, {16,65}, {16,66}, {16,68}, {16,69}, {16,70}, {16,102}, {16,103}, {16,104}, {16,105}, {16,107}, {16,108}, {16,109}, {16,110}, {16,111}, {16,112}, {16,113}, {16,114}, {16,115}, {16,116}, {16,117}, {16,118}, {16,119}, {16,120}, {16,121}, {16,122}, {16,123}, {16,124}, {16,125}, {16,126}, {16,127}, {16,128}, {16,129}, {16,130}, {16,131}, {16,132}, {16,133}, {16,134}, {16,135}, {16,136}, {16,137}, {17,-5}, {17,-4}, {17,-3}, {17,-2}, {17,-1}, {17,0}, {17,47}, {17,48}, {17,49}, {17,52}, {17,53}, {17,54}, {17,64}, {17,65}, {17,66}, {17,68}, {17,69}, {17,70}, {17,102}, {17,103}, {17,104}, {17,105}, {17,107}, {17,108}, {17,109}, {17,110}, {17,111}, {17,112}, {17,113}, {17,114}, {17,115}, {17,116}, {17,117}, {17,118}, {17,119}, {17,120}, {17,121}, {17,122}, {17,123}, {17,124}, {17,125}, {17,126}, {17,127}, {17,128}, {17,129}, {17,130}, {17,131}, {17,132}, {17,133}, {17,134}, {17,135}, {17,136}, {17,137}, {18,-5}, {18,-4}, {18,-3}, {18,-2}, {18,-1}, {18,0}, {18,47}, {18,48}, {18,49}, {18,52}, {18,53}, {18,54}, {18,64}, {18,65}, {18,66}, {18,68}, {18,69}, {18,70}, {18,102}, {18,103}, {18,104}, {18,105}, {18,107}, {18,108}, {18,109}, {18,135}, {18,136}, {18,137}, {19,-1}, {19,47}, {19,48}, {19,49}, {19,52}, {19,53}, {19,54}, {19,64}, {19,65}, {19,66}, {19,68}, {19,69}, {19,70}, {19,102}, {19,103}, {19,104}, {19,105}, {19,107}, {19,108}, {19,109}, {19,117}, {19,125}, {19,133}, {19,135}, {19,136}, {19,137}, {20,47}, {20,48}, {20,49}, {20,52}, {20,53}, {20,54}, {20,68}, {20,69}, {20,70}, {20,102}, {20,103}, {20,104}, {20,105}, {20,107}, {20,108}, {20,109}, {20,117}, {20,125}, {20,133}, {20,135}, {20,136}, {20,137}, {21,47}, {21,48}, {21,49}, {21,52}, {21,53}, {21,54}, {21,64}, {21,65}, {21,66}, {21,68}, {21,69}, {21,70}, {21,103}, {21,104}, {21,105}, {21,107}, {21,108}, {21,109}, {21,117}, {21,125}, {21,133}, {21,135}, {21,136}, {21,137}, {22,47}, {22,48}, {22,49}, {22,52}, {22,53}, {22,54}, {22,64}, {22,65}, {22,66}, {22,68}, {22,69}, {22,70}, {22,86}, {22,87}, {22,88}, {22,89}, {22,90}, {22,92}, {22,93}, {22,94}, {22,95}, {22,96}, {22,97}, {22,98}, {22,99}, {22,100}, {22,102}, {22,103}, {22,104}, {22,105}, {22,107}, {22,108}, {22,109}, {22,117}, {22,125}, {22,133}, {22,135}, {22,136}, {22,137}, {23,47}, {23,48}, {23,49}, {23,52}, {23,53}, {23,54}, {23,56}, {23,57}, {23,58}, {23,59}, {23,60}, {23,61}, {23,62}, {23,64}, {23,65}, {23,66}, {23,68}, {23,69}, {23,70}, {23,86}, {23,87}, {23,88}, {23,89}, {23,90}, {23,92}, {23,93}, {23,94}, {23,95}, {23,96}, {23,97}, {23,98}, {23,99}, {23,100}, {23,102}, {23,103}, {23,104}, {23,105}, {23,107}, {23,108}, {23,109}, {23,117}, {23,125}, {23,133}, {23,135}, {23,136}, {23,137}, {24,47}, {24,48}, {24,49}, {24,56}, {24,57}, {24,58}, {24,59}, {24,60}, {24,61}, {24,62}, {24,65}, {24,89}, {24,107}, {24,108}, {24,109}, {24,135}, {24,136}, {24,137}, {25,47}, {25,48}, {25,49}, {25,52}, {25,53}, {25,54}, {25,56}, {25,57}, {25,58}, {25,59}, {25,60}, {25,61}, {25,62}, {25,64}, {25,65}, {25,66}, {25,67}, {25,68}, {25,69}, {25,70}, {25,71}, {25,72}, {25,73}, {25,74}, {25,76}, {25,77}, {25,78}, {25,79}, {25,81}, {25,82}, {25,83}, {25,84}, {25,85}, {25,86}, {25,87}, {25,88}, {25,89}, {25,90}, {25,91}, {25,92}, {25,93}, {25,94}, {25,96}, {25,97}, {25,98}, {25,99}, {25,100}, {25,101}, {25,102}, {25,103}, {25,104}, {25,105}, {25,107}, {25,108}, {25,109}, {25,111}, {25,112}, {25,113}, {25,114}, {25,115}, {25,116}, {25,117}, {25,119}, {25,120}, {25,121}, {25,122}, {25,123}, {25,124}, {25,125}, {25,127}, {25,128}, {25,129}, {25,130}, {25,131}, {25,132}, {25,133}, {25,135}, {25,136}, {25,137}, {26,47}, {26,48}, {26,49}, {26,52}, {26,53}, {26,54}, {26,56}, {26,57}, {26,58}, {26,59}, {26,60}, {26,61}, {26,62}, {26,64}, {26,65}, {26,66}, {26,67}, {26,68}, {26,69}, {26,70}, {26,71}, {26,72}, {26,73}, {26,74}, {26,75}, {26,76}, {26,77}, {26,78}, {26,79}, {26,81}, {26,82}, {26,83}, {26,84}, {26,85}, {26,86}, {26,87}, {26,88}, {26,89}, {26,90}, {26,91}, {26,92}, {26,93}, {26,94}, {26,96}, {26,97}, {26,98}, {26,99}, {26,100}, {26,101}, {26,102}, {26,103}, {26,104}, {26,105}, {26,106}, {26,107}, {26,108}, {26,109}, {26,111}, {26,112}, {26,113}, {26,114}, {26,115}, {26,116}, {26,117}, {26,119}, {26,120}, {26,121}, {26,122}, {26,123}, {26,124}, {26,125}, {26,127}, {26,128}, {26,129}, {26,130}, {26,131}, {26,132}, {26,133}, {26,135}, {26,136}, {26,137}, {27,47}, {27,48}, {27,49}, {27,52}, {27,53}, {27,54}, {27,56}, {27,57}, {27,58}, {27,59}, {27,60}, {27,61}, {27,62}, {27,64}, {27,65}, {27,66}, {27,67}, {27,68}, {27,69}, {27,70}, {27,71}, {27,72}, {27,73}, {27,74}, {27,76}, {27,77}, {27,78}, {27,79}, {27,81}, {27,82}, {27,83}, {27,84}, {27,85}, {27,86}, {27,87}, {27,88}, {27,89}, {27,90}, {27,91}, {27,92}, {27,93}, {27,94}, {27,96}, {27,97}, {27,98}, {27,99}, {27,100}, {27,101}, {27,102}, {27,103}, {27,104}, {27,105}, {27,107}, {27,108}, {27,109}, {27,111}, {27,112}, {27,113}, {27,114}, {27,115}, {27,116}, {27,117}, {27,119}, {27,120}, {27,121}, {27,122}, {27,123}, {27,124}, {27,125}, {27,127}, {27,128}, {27,129}, {27,130}, {27,131}, {27,132}, {27,133}, {27,135}, {27,136}, {27,137}, {28,47}, {28,48}, {28,49}, {29,47}, {29,48}, {29,49}, {30,47}, {30,48}, {30,49}, {31,47}, {31,48}, {31,49}, {32,47}, {32,48}, {32,49}, {33,47}, {33,48}, {33,49}, {34,47}, {34,48}, {34,49}, {35,47}, {35,48}, {35,49}, {36,47}, {36,48}, {36,49}, {36,59}, {36,60}, {36,61}, {36,63}, {36,64}, {36,65}, {36,66}, {36,67}, {36,69}, {36,70}, {36,71}, {36,72}, {36,73}, {36,76}, {36,77}, {36,78}, {36,81}, {36,82}, {36,83}, {36,84}, {36,85}, {36,86}, {36,87}, {36,89}, {36,90}, {36,91}, {36,92}, {36,93}, {36,94}, {36,95}, {36,97}, {36,98}, {36,99}, {36,100}, {36,101}, {36,102}, {36,103}, {36,106}, {36,107}, {36,108}, {36,110}, {36,111}, {36,112}, {36,113}, {36,114}, {36,115}, {36,116}, {36,117}, {36,118}, {36,119}, {36,120}, {36,121}, {36,122}, {36,123}, {36,124}, {36,125}, {36,126}, {36,128}, {36,129}, {36,130}, {36,131}, {36,132}, {36,133}, {36,134}, {36,135}, {36,136}, {36,137}, {36,138}, {36,140}, {36,141}, {36,142}, {37,47}, {37,48}, {37,49}, {37,59}, {37,60}, {37,61}, {37,62}, {37,63}, {37,64}, {37,65}, {37,66}, {37,67}, {37,69}, {37,70}, {37,71}, {37,72}, {37,73}, {37,76}, {37,77}, {37,78}, {37,81}, {37,82}, {37,83}, {37,84}, {37,85}, {37,86}, {37,87}, {37,88}, {37,89}, {37,90}, {37,91}, {37,92}, {37,93}, {37,94}, {37,95}, {37,96}, {37,97}, {37,98}, {37,99}, {37,100}, {37,101}, {37,102}, {37,103}, {37,106}, {37,107}, {37,108}, {37,109}, {37,110}, {37,111}, {37,112}, {37,113}, {37,114}, {37,115}, {37,116}, {37,117}, {37,118}, {37,119}, {37,120}, {37,121}, {37,122}, {37,123}, {37,124}, {37,125}, {37,126}, {37,128}, {37,129}, {37,130}, {37,131}, {37,132}, {37,133}, {37,134}, {37,135}, {37,136}, {37,137}, {37,138}, {37,139}, {37,140}, {37,141}, {37,142}, {38,47}, {38,48}, {38,49}, {38,59}, {38,60}, {38,61}, {38,63}, {38,64}, {38,65}, {38,66}, {38,67}, {38,69}, {38,70}, {38,71}, {38,72}, {38,73}, {38,76}, {38,77}, {38,78}, {38,81}, {38,82}, {38,83}, {38,84}, {38,85}, {38,86}, {38,87}, {38,89}, {38,90}, {38,91}, {38,92}, {38,93}, {38,94}, {38,95}, {38,97}, {38,98}, {38,99}, {38,100}, {38,101}, {38,102}, {38,103}, {38,106}, {38,107}, {38,108}, {38,110}, {38,111}, {38,112}, {38,113}, {38,114}, {38,115}, {38,116}, {38,117}, {38,118}, {38,119}, {38,120}, {38,121}, {38,122}, {38,123}, {38,124}, {38,125}, {38,126}, {38,128}, {38,129}, {38,130}, {38,131}, {38,132}, {38,133}, {38,134}, {38,135}, {38,136}, {38,137}, {38,138}, {38,140}, {38,141}, {38,142}, {39,47}, {39,48}, {39,49}, {39,76}, {39,77}, {39,78}, {39,106}, {39,107}, {39,108}, {39,125}, {39,140}, {39,141}, {39,142}, {40,47}, {40,48}, {40,49}, {40,59}, {40,60}, {40,61}, {40,76}, {40,77}, {40,78}, {40,106}, {40,107}, {40,108}, {40,124}, {40,125}, {40,126}, {40,140}, {40,141}, {40,142}, {41,47}, {41,48}, {41,49}, {41,59}, {41,60}, {41,61}, {41,76}, {41,77}, {41,78}, {41,106}, {41,107}, {41,108}, {41,124}, {41,125}, {41,126}, {41,140}, {41,141}, {41,142}, {42,47}, {42,48}, {42,49}, {42,59}, {42,60}, {42,61}, {42,76}, {42,77}, {42,78}, {42,79}, {42,105}, {42,106}, {42,107}, {42,108}, {42,124}, {42,125}, {42,126}, {42,140}, {42,141}, {42,142}, {43,47}, {43,48}, {43,49}, {43,59}, {43,60}, {43,61}, {43,76}, {43,77}, {43,78}, {43,106}, {43,107}, {43,108}, {43,124}, {43,125}, {43,126}, {43,140}, {43,141}, {43,142}, {44,47}, {44,48}, {44,49}, {44,59}, {44,60}, {44,61}, {44,76}, {44,77}, {44,78}, {44,106}, {44,107}, {44,108}, {44,124}, {44,125}, {44,126}, {44,140}, {44,141}, {44,142}, {45,47}, {45,48}, {45,49}, {45,59}, {45,60}, {45,61}, {45,76}, {45,77}, {45,78}, {45,106}, {45,107}, {45,108}, {45,124}, {45,125}, {45,126}, {45,140}, {45,141}, {45,142}, {46,47}, {46,48}, {46,49}, {46,59}, {46,60}, {46,61}, {46,76}, {46,77}, {46,78}, {46,106}, {46,107}, {46,108}, {46,124}, {46,125}, {46,126}, {46,140}, {46,141}, {46,142}, {47,47}, {47,48}, {47,49}, {47,59}, {47,60}, {47,61}, {47,76}, {47,77}, {47,78}, {47,106}, {47,107}, {47,108}, {47,124}, {47,125}, {47,126}, {47,140}, {47,141}, {47,142}, {48,47}, {48,48}, {48,49}, {48,76}, {48,77}, {48,78}, {48,106}, {48,107}, {48,108}, {48,124}, {48,125}, {48,126}, {48,140}, {48,141}, {48,142}, {49,-60}, {49,47}, {49,48}, {49,49}, {49,59}, {49,60}, {49,61}, {49,106}, {49,107}, {49,108}, {49,124}, {49,125}, {49,126}, {49,140}, {49,141}, {49,142}, {50,-62}, {50,-61}, {50,-60}, {50,-59}, {50,-58}, {50,-57}, {50,-56}, {50,-55}, {50,-54}, {50,-53}, {50,-52}, {50,-51}, {50,-50}, {50,-49}, {50,-48}, {50,-47}, {50,47}, {50,48}, {50,49}, {50,59}, {50,60}, {50,61}, {50,76}, {50,77}, {50,78}, {50,106}, {50,107}, {50,108}, {50,124}, {50,125}, {50,126}, {50,140}, {50,141}, {50,142}, {51,-62}, {51,-61}, {51,-60}, {51,-59}, {51,-58}, {51,-57}, {51,-56}, {51,-55}, {51,-54}, {51,-53}, {51,-52}, {51,-51}, {51,-50}, {51,-49}, {51,-48}, {51,-47}, {51,47}, {51,48}, {51,49}, {51,59}, {51,60}, {51,61}, {51,76}, {51,77}, {51,78}, {51,106}, {51,107}, {51,108}, {51,125}, {52,47}, {52,48}, {52,49}, {52,59}, {52,60}, {52,61}, {52,76}, {52,77}, {52,78}, {52,106}, {52,107}, {52,108}, {52,110}, {52,111}, {52,112}, {52,113}, {52,115}, {52,116}, {52,117}, {52,119}, {52,120}, {52,121}, {52,122}, {52,123}, {52,124}, {52,125}, {52,126}, {52,127}, {52,128}, {52,129}, {52,131}, {52,132}, {52,133}, {52,134}, {52,136}, {52,137}, {52,138}, {52,140}, {52,141}, {52,142}, {53,47}, {53,48}, {53,49}, {53,59}, {53,60}, {53,61}, {53,76}, {53,77}, {53,78}, {53,106}, {53,107}, {53,108}, {53,109}, {53,110}, {53,111}, {53,112}, {53,113}, {53,115}, {53,116}, {53,117}, {53,118}, {53,119}, {53,120}, {53,121}, {53,122}, {53,123}, {53,124}, {53,125}, {53,126}, {53,127}, {53,128}, {53,129}, {53,131}, {53,132}, {53,133}, {53,134}, {53,135}, {53,136}, {53,137}, {53,138}, {53,139}, {53,140}, {53,141}, {53,142}, {54,-90}, {54,-89}, {54,-88}, {54,-87}, {54,-86}, {54,47}, {54,48}, {54,49}, {54,59}, {54,60}, {54,61}, {54,76}, {54,77}, {54,78}, {54,106}, {54,107}, {54,108}, {54,110}, {54,111}, {54,112}, {54,113}, {54,115}, {54,116}, {54,117}, {54,119}, {54,120}, {54,121}, {54,122}, {54,123}, {54,124}, {54,125}, {54,126}, {54,127}, {54,128}, {54,129}, {54,131}, {54,132}, {54,133}, {54,134}, {54,136}, {54,137}, {54,138}, {54,140}, {54,141}, {54,142}, {55,-91}, {55,-90}, {55,-89}, {55,-88}, {55,-87}, {55,-86}, {55,47}, {55,48}, {55,49}, {55,59}, {55,60}, {55,61}, {55,76}, {55,77}, {55,78}, {55,107}, {56,-93}, {56,-92}, {56,-91}, {56,-90}, {56,-89}, {56,-88}, {56,-87}, {56,-86}, {56,-1}, {56,47}, {56,48}, {56,49}, {56,59}, {56,60}, {56,61}, {56,76}, {56,77}, {56,78}, {56,106}, {56,107}, {56,108}, {56,136}, {56,137}, {56,138}, {56,140}, {56,141}, {56,142}, {57,-93}, {57,-92}, {57,-91}, {57,-90}, {57,-89}, {57,-5}, {57,-4}, {57,-3}, {57,-2}, {57,-1}, {57,0}, {57,47}, {57,48}, {57,49}, {57,59}, {57,60}, {57,61}, {57,76}, {57,77}, {57,78}, {57,106}, {57,107}, {57,108}, {57,135}, {57,136}, {57,137}, {57,138}, {57,139}, {57,140}, {57,141}, {57,142}, {58,-93}, {58,-92}, {58,-87}, {58,-86}, {58,-85}, {58,-5}, {58,-4}, {58,-3}, {58,-2}, {58,-1}, {58,0}, {58,47}, {58,48}, {58,49}, {58,59}, {58,60}, {58,61}, {58,76}, {58,77}, {58,78}, {58,106}, {58,107}, {58,108}, {58,136}, {58,137}, {58,138}, {58,140}, {58,141}, {58,142}, {59,-90}, {59,-89}, {59,-88}, {59,-87}, {59,-86}, {59,-85}, {59,-1}, {59,47}, {59,48}, {59,49}, {59,76}, {59,77}, {59,78}, {59,106}, {59,107}, {59,108}, {59,116}, {59,117}, {59,133}, {59,134}, {59,136}, {59,137}, {59,138}, {59,140}, {59,141}, {59,142}, {60,-92}, {60,-91}, {60,-90}, {60,-89}, {60,-88}, {60,-87}, {60,-86}, {60,-85}, {60,-1}, {60,47}, {60,48}, {60,49}, {60,59}, {60,60}, {60,61}, {60,76}, {60,77}, {60,78}, {60,81}, {60,82}, {60,83}, {60,84}, {60,85}, {60,86}, {60,87}, {60,88}, {60,89}, {60,90}, {60,91}, {60,92}, {60,93}, {60,94}, {60,95}, {60,96}, {60,97}, {60,98}, {60,99}, {60,100}, {60,101}, {60,102}, {60,103}, {60,106}, {60,107}, {60,108}, {60,116}, {60,117}, {60,133}, {60,134}, {60,136}, {60,137}, {60,138}, {60,140}, {60,141}, {60,142}, {61,-92}, {61,-91}, {61,-90}, {61,-89}, {61,-88}, {61,-64}, {61,-63}, {61,-62}, {61,-61}, {61,-60}, {61,-59}, {61,-58}, {61,-57}, {61,-56}, {61,-55}, {61,-53}, {61,-52}, {61,-51}, {61,-50}, {61,-49}, {61,-48}, {61,-47}, {61,-46}, {61,-45}, {61,-44}, {61,-43}, {61,-42}, {61,-41}, {61,-40}, {61,-39}, {61,-38}, {61,-37}, {61,-15}, {61,-14}, {61,-13}, {61,-12}, {61,-11}, {61,-10}, {61,-9}, {61,-8}, {61,-5}, {61,-4}, {61,-3}, {61,-2}, {61,-1}, {61,0}, {61,3}, {61,4}, {61,5}, {61,6}, {61,7}, {61,8}, {61,9}, {61,10}, {61,11}, {61,12}, {61,13}, {61,14}, {61,15}, {61,16}, {61,17}, {61,18}, {61,19}, {61,20}, {61,21}, {61,22}, {61,25}, {61,26}, {61,27}, {61,28}, {61,29}, {61,30}, {61,31}, {61,32}, {61,33}, {61,34}, {61,35}, {61,36}, {61,37}, {61,38}, {61,39}, {61,40}, {61,41}, {61,42}, {61,43}, {61,44}, {61,47}, {61,48}, {61,49}, {61,59}, {61,60}, {61,61}, {61,75}, {61,76}, {61,77}, {61,78}, {61,79}, {61,80}, {61,81}, {61,82}, {61,83}, {61,84}, {61,85}, {61,86}, {61,87}, {61,88}, {61,89}, {61,90}, {61,91}, {61,92}, {61,93}, {61,94}, {61,95}, {61,96}, {61,97}, {61,98}, {61,99}, {61,100}, {61,101}, {61,102}, {61,103}, {61,104}, {61,105}, {61,106}, {61,107}, {61,108}, {61,116}, {61,117}, {61,133}, {61,134}, {61,136}, {61,137}, {61,138}, {61,140}, {61,141}, {61,142}, {62,-92}, {62,-91}, {62,-86}, {62,-85}, {62,-84}, {62,-64}, {62,-63}, {62,-62}, {62,-61}, {62,-60}, {62,-59}, {62,-58}, {62,-57}, {62,-56}, {62,-55}, {62,-53}, {62,-52}, {62,-51}, {62,-50}, {62,-49}, {62,-48}, {62,-47}, {62,-46}, {62,-45}, {62,-44}, {62,-43}, {62,-42}, {62,-41}, {62,-40}, {62,-39}, {62,-38}, {62,-37}, {62,-15}, {62,-14}, {62,-13}, {62,-12}, {62,-11}, {62,-10}, {62,-9}, {62,-8}, {62,-5}, {62,-4}, {62,-3}, {62,-2}, {62,-1}, {62,0}, {62,3}, {62,4}, {62,5}, {62,6}, {62,7}, {62,8}, {62,9}, {62,10}, {62,11}, {62,12}, {62,13}, {62,14}, {62,15}, {62,16}, {62,17}, {62,18}, {62,19}, {62,20}, {62,21}, {62,22}, {62,25}, {62,26}, {62,27}, {62,28}, {62,29}, {62,30}, {62,31}, {62,32}, {62,33}, {62,34}, {62,35}, {62,36}, {62,37}, {62,38}, {62,39}, {62,40}, {62,41}, {62,42}, {62,43}, {62,44}, {62,47}, {62,48}, {62,49}, {62,59}, {62,60}, {62,61}, {62,76}, {62,77}, {62,78}, {62,81}, {62,82}, {62,83}, {62,84}, {62,85}, {62,86}, {62,87}, {62,88}, {62,89}, {62,90}, {62,91}, {62,92}, {62,93}, {62,94}, {62,95}, {62,96}, {62,97}, {62,98}, {62,99}, {62,100}, {62,101}, {62,102}, {62,103}, {62,106}, {62,107}, {62,108}, {62,116}, {62,117}, {62,133}, {62,134}, {62,136}, {62,137}, {62,138}, {62,140}, {62,141}, {62,142}, {63,-89}, {63,-88}, {63,-87}, {63,-86}, {63,-85}, {63,-84}, {63,-63}, {63,-50}, {63,-37}, {63,-15}, {63,-14}, {63,-13}, {63,-12}, {63,-11}, {63,-10}, {63,-9}, {63,-1}, {63,59}, {63,60}, {63,61}, {63,106}, {63,107}, {63,108}, {63,116}, {63,117}, {63,133}, {63,134}, {63,136}, {63,137}, {63,138}, {63,140}, {63,141}, {63,142}, {64,-91}, {64,-90}, {64,-89}, {64,-88}, {64,-87}, {64,-86}, {64,-85}, {64,-84}, {64,-64}, {64,-63}, {64,-61}, {64,-60}, {64,-59}, {64,-58}, {64,-57}, {64,-56}, {64,-55}, {64,-53}, {64,-52}, {64,-50}, {64,-48}, {64,-47}, {64,-46}, {64,-45}, {64,-44}, {64,-43}, {64,-42}, {64,-41}, {64,-38}, {64,-37}, {64,-15}, {64,-14}, {64,-13}, {64,-9}, {64,-1}, {64,47}, {64,48}, {64,49}, {64,59}, {64,60}, {64,61}, {64,76}, {64,77}, {64,78}, {64,87}, {64,88}, {64,89}, {64,101}, {64,102}, {64,103}, {64,106}, {64,107}, {64,108}, {64,116}, {64,117}, {64,133}, {64,134}, {64,136}, {64,137}, {64,138}, {64,140}, {64,141}, {64,142}, {65,-104}, {65,-103}, {65,-102}, {65,-101}, {65,-100}, {65,-91}, {65,-90}, {65,-89}, {65,-88}, {65,-87}, {65,-84}, {65,-64}, {65,-63}, {65,-61}, {65,-60}, {65,-59}, {65,-58}, {65,-57}, {65,-56}, {65,-55}, {65,-53}, {65,-52}, {65,-50}, {65,-49}, {65,-48}, {65,-47}, {65,-46}, {65,-45}, {65,-44}, {65,-43}, {65,-42}, {65,-41}, {65,-38}, {65,-37}, {65,-15}, {65,-14}, {65,-13}, {65,-10}, {65,-9}, {65,-8}, {65,-5}, {65,-4}, {65,-3}, {65,-2}, {65,-1}, {65,0}, {65,1}, {65,2}, {65,3}, {65,4}, {65,5}, {65,6}, {65,7}, {65,8}, {65,9}, {65,10}, {65,11}, {65,12}, {65,13}, {65,14}, {65,15}, {65,16}, {65,17}, {65,18}, {65,19}, {65,20}, {65,21}, {65,22}, {65,23}, {65,24}, {65,25}, {65,26}, {65,27}, {65,28}, {65,29}, {65,30}, {65,31}, {65,32}, {65,33}, {65,34}, {65,35}, {65,36}, {65,37}, {65,38}, {65,39}, {65,40}, {65,41}, {65,42}, {65,43}, {65,44}, {65,45}, {65,47}, {65,48}, {65,49}, {65,59}, {65,60}, {65,61}, {65,76}, {65,77}, {65,78}, {65,79}, {65,87}, {65,88}, {65,89}, {65,101}, {65,102}, {65,103}, {65,106}, {65,107}, {65,108}, {65,116}, {65,117}, {65,133}, {65,134}, {65,136}, {65,137}, {65,138}, {65,140}, {65,141}, {65,142}, {66,-104}, {66,-103}, {66,-102}, {66,-101}, {66,-100}, {66,-91}, {66,-90}, {66,-85}, {66,-84}, {66,-83}, {66,-64}, {66,-63}, {66,-61}, {66,-60}, {66,-59}, {66,-58}, {66,-57}, {66,-56}, {66,-55}, {66,-53}, {66,-52}, {66,-50}, {66,-49}, {66,-48}, {66,-47}, {66,-46}, {66,-45}, {66,-44}, {66,-43}, {66,-42}, {66,-41}, {66,-38}, {66,-37}, {66,-15}, {66,-14}, {66,-13}, {66,-10}, {66,-9}, {66,-8}, {66,-5}, {66,-4}, {66,-3}, {66,-2}, {66,-1}, {66,0}, {66,1}, {66,2}, {66,3}, {66,4}, {66,5}, {66,6}, {66,7}, {66,8}, {66,9}, {66,10}, {66,11}, {66,12}, {66,13}, {66,14}, {66,15}, {66,16}, {66,17}, {66,18}, {66,19}, {66,20}, {66,21}, {66,22}, {66,23}, {66,24}, {66,25}, {66,26}, {66,27}, {66,28}, {66,29}, {66,30}, {66,31}, {66,32}, {66,33}, {66,34}, {66,35}, {66,36}, {66,37}, {66,38}, {66,39}, {66,40}, {66,41}, {66,42}, {66,43}, {66,44}, {66,45}, {66,46}, {66,47}, {66,48}, {66,49}, {66,59}, {66,60}, {66,61}, {66,76}, {66,77}, {66,78}, {66,87}, {66,88}, {66,89}, {66,101}, {66,102}, {66,103}, {66,106}, {66,107}, {66,108}, {66,116}, {66,117}, {66,133}, {66,134}, {66,136}, {66,137}, {66,138}, {66,140}, {66,141}, {66,142}, {67,-103}, {67,-102}, {67,-101}, {67,-100}, {67,-88}, {67,-87}, {67,-86}, {67,-85}, {67,-84}, {67,-83}, {67,-82}, {67,-64}, {67,-63}, {67,-61}, {67,-60}, {67,-59}, {67,-58}, {67,-57}, {67,-56}, {67,-55}, {67,-53}, {67,-52}, {67,-50}, {67,-48}, {67,-47}, {67,-46}, {67,-45}, {67,-44}, {67,-43}, {67,-42}, {67,-41}, {67,-38}, {67,-37}, {67,-15}, {67,-14}, {67,-13}, {67,-10}, {67,-9}, {67,-8}, {67,-5}, {67,-4}, {67,-3}, {67,-2}, {67,-1}, {67,0}, {67,1}, {67,2}, {67,3}, {67,4}, {67,5}, {67,6}, {67,7}, {67,8}, {67,9}, {67,10}, {67,11}, {67,12}, {67,13}, {67,14}, {67,15}, {67,16}, {67,17}, {67,18}, {67,19}, {67,20}, {67,21}, {67,22}, {67,23}, {67,24}, {67,25}, {67,26}, {67,27}, {67,28}, {67,29}, {67,30}, {67,31}, {67,32}, {67,33}, {67,34}, {67,35}, {67,36}, {67,37}, {67,38}, {67,39}, {67,40}, {67,41}, {67,42}, {67,43}, {67,44}, {67,45}, {67,47}, {67,48}, {67,49}, {67,59}, {67,60}, {67,61}, {67,76}, {67,77}, {67,78}, {67,106}, {67,107}, {67,108}, {67,133}, {67,134}, {67,136}, {67,137}, {67,138}, {67,140}, {67,141}, {67,142}, {68,-103}, {68,-102}, {68,-101}, {68,-100}, {68,-89}, {68,-88}, {68,-87}, {68,-86}, {68,-85}, {68,-84}, {68,-83}, {68,-82}, {68,-38}, {68,-37}, {68,-15}, {68,-14}, {68,-13}, {68,-9}, {68,47}, {68,48}, {68,49}, {68,59}, {68,60}, {68,61}, {68,76}, {68,77}, {68,78}, {68,106}, {68,107}, {68,108}, {68,116}, {68,117}, {68,133}, {68,134}, {68,136}, {68,137}, {68,138}, {68,140}, {68,141}, {68,142}, {69,-103}, {69,-102}, {69,-101}, {69,-100}, {69,-99}, {69,-89}, {69,-88}, {69,-87}, {69,-86}, {69,-85}, {69,-38}, {69,-37}, {69,-15}, {69,-14}, {69,-13}, {69,-10}, {69,-9}, {69,47}, {69,48}, {69,49}, {69,76}, {69,77}, {69,78}, {69,116}, {69,117}, {69,133}, {69,134}, {70,-103}, {70,-102}, {70,-101}, {70,-100}, {70,-99}, {70,-89}, {70,-88}, {70,-37}, {70,-15}, {70,-14}, {70,-13}, {70,-10}, {70,-9}, {70,-8}, {70,-5}, {70,-4}, {70,-3}, {70,12}, {70,13}, {70,14}, {70,16}, {70,17}, {70,18}, {70,31}, {70,32}, {70,33}, {70,34}, {70,35}, {70,59}, {70,60}, {70,61}, {70,76}, {70,77}, {70,78}, {70,105}, {70,106}, {70,107}, {70,108}, {70,110}, {70,111}, {70,112}, {70,113}, {70,114}, {70,115}, {70,116}, {70,117}, {70,133}, {70,134}, {70,135}, {70,136}, {70,137}, {70,138}, {70,139}, {70,140}, {70,141}, {70,142}, {71,-103}, {71,-102}, {71,-101}, {71,-100}, {71,-99}, {71,-39}, {71,-38}, {71,-37}, {71,-15}, {71,-14}, {71,-13}, {71,-10}, {71,-9}, {71,-8}, {71,-7}, {71,-6}, {71,-5}, {71,-4}, {71,-3}, {71,12}, {71,13}, {71,14}, {71,16}, {71,17}, {71,18}, {71,31}, {71,32}, {71,33}, {71,34}, {71,35}, {71,47}, {71,48}, {71,49}, {71,59}, {71,60}, {71,61}, {71,76}, {71,77}, {71,78}, {71,106}, {71,107}, {71,108}, {71,109}, {71,110}, {71,111}, {71,112}, {71,113}, {71,114}, {71,115}, {71,116}, {71,117}, {71,133}, {71,134}, {71,135}, {71,136}, {71,137}, {71,138}, {71,139}, {71,140}, {71,141}, {71,142}, {72,-103}, {72,-102}, {72,-101}, {72,-100}, {72,-99}, {72,-98}, {72,-57}, {72,-56}, {72,-55}, {72,-54}, {72,-53}, {72,-52}, {72,-38}, {72,-37}, {72,-15}, {72,-14}, {72,-13}, {72,-10}, {72,-9}, {72,-8}, {72,-7}, {72,-6}, {72,-5}, {72,-4}, {72,-3}, {72,12}, {72,13}, {72,14}, {72,16}, {72,17}, {72,18}, {72,31}, {72,32}, {72,33}, {72,34}, {72,35}, {72,47}, {72,48}, {72,49}, {72,59}, {72,60}, {72,61}, {72,76}, {72,77}, {72,78}, {72,106}, {72,107}, {72,108}, {72,110}, {72,111}, {72,112}, {72,113}, {72,114}, {72,115}, {72,116}, {72,117}, {72,133}, {72,134}, {72,135}, {72,136}, {72,137}, {72,138}, {72,139}, {72,140}, {72,141}, {72,142}, {73,-103}, {73,-102}, {73,-101}, {73,-100}, {73,-99}, {73,-98}, {73,-57}, {73,-56}, {73,-55}, {73,-54}, {73,-53}, {73,-52}, {73,-38}, {73,-37}, {73,-15}, {73,-14}, {73,-13}, {73,-10}, {73,-9}, {73,-8}, {73,-5}, {73,-4}, {73,-3}, {73,12}, {73,13}, {73,14}, {73,16}, {73,17}, {73,18}, {73,31}, {73,32}, {73,33}, {73,34}, {73,35}, {73,47}, {73,48}, {73,49}, {73,59}, {73,60}, {73,61}, {73,76}, {73,77}, {73,78}, {73,106}, {73,107}, {73,108}, {73,141}, {74,-100}, {74,-57}, {74,-56}, {74,-55}, {74,-54}, {74,-53}, {74,-52}, {74,-38}, {74,-37}, {74,-15}, {74,-14}, {74,-13}, {74,-10}, {74,-9}, {74,-8}, {74,-5}, {74,-4}, {74,-3}, {74,12}, {74,13}, {74,14}, {74,15}, {74,16}, {74,17}, {74,18}, {74,31}, {74,32}, {74,33}, {74,34}, {74,35}, {74,59}, {74,60}, {74,61}, {74,76}, {74,77}, {74,78}, {74,106}, {74,107}, {74,108}, {74,140}, {74,141}, {74,142}, {75,-101}, {75,-100}, {75,-99}, {75,-98}, {75,-97}, {75,-54}, {75,-15}, {75,-14}, {75,-13}, {75,-10}, {75,-9}, {75,-8}, {75,-5}, {75,-4}, {75,-3}, {75,12}, {75,13}, {75,14}, {75,16}, {75,17}, {75,18}, {75,31}, {75,32}, {75,33}, {75,34}, {75,35}, {75,47}, {75,48}, {75,49}, {75,59}, {75,60}, {75,61}, {75,76}, {75,77}, {75,78}, {75,106}, {75,107}, {75,108}, {75,140}, {75,141}, {75,142}, {76,-101}, {76,-100}, {76,-99}, {76,-98}, {76,-97}, {76,-57}, {76,-56}, {76,-55}, {76,-54}, {76,-15}, {76,-14}, {76,-13}, {76,-10}, {76,-9}, {76,-8}, {76,-5}, {76,-4}, {76,-3}, {76,12}, {76,13}, {76,14}, {76,16}, {76,17}, {76,18}, {76,31}, {76,32}, {76,33}, {76,34}, {76,35}, {76,47}, {76,48}, {76,49}, {76,60}, {76,76}, {76,77}, {76,78}, {76,106}, {76,107}, {76,108}, {76,140}, {76,141}, {76,142}, {77,-101}, {77,-100}, {77,-99}, {77,-98}, {77,-97}, {77,-57}, {77,-56}, {77,-55}, {77,-54}, {77,-37}, {77,-15}, {77,-14}, {77,-13}, {77,-10}, {77,-9}, {77,-8}, {77,-5}, {77,-4}, {77,-3}, {77,12}, {77,13}, {77,14}, {77,16}, {77,17}, {77,18}, {77,31}, {77,32}, {77,33}, {77,34}, {77,35}, {77,47}, {77,48}, {77,49}, {77,59}, {77,60}, {77,61}, {77,76}, {77,77}, {77,78}, {77,106}, {77,107}, {77,108}, {77,140}, {77,141}, {77,142}, {78,-100}, {78,-99}, {78,-98}, {78,-97}, {78,-96}, {78,-95}, {78,-94}, {78,-93}, {78,-57}, {78,-56}, {78,-55}, {78,-54}, {78,-37}, {78,-30}, {78,-22}, {78,-15}, {78,-14}, {78,-13}, {78,-10}, {78,-9}, {78,-8}, {78,-5}, {78,-4}, {78,-3}, {78,12}, {78,13}, {78,14}, {78,16}, {78,17}, {78,18}, {78,31}, {78,32}, {78,33}, {78,34}, {78,35}, {78,47}, {78,48}, {78,49}, {78,58}, {78,59}, {78,60}, {78,61}, {78,76}, {78,77}, {78,78}, {78,81}, {78,82}, {78,83}, {78,84}, {78,85}, {78,87}, {78,88}, {78,89}, {78,101}, {78,102}, {78,103}, {78,106}, {78,107}, {78,108}, {78,120}, {78,121}, {78,122}, {78,123}, {78,124}, {78,125}, {78,126}, {78,127}, {78,128}, {78,129}, {78,130}, {78,140}, {78,141}, {78,142}, {79,-100}, {79,-99}, {79,-98}, {79,-97}, {79,-57}, {79,-56}, {79,-55}, {79,-54}, {79,-37}, {79,-34}, {79,-33}, {79,-32}, {79,-31}, {79,-30}, {79,-29}, {79,-28}, {79,-27}, {79,-25}, {79,-24}, {79,-23}, {79,-22}, {79,-21}, {79,-20}, {79,-19}, {79,-18}, {79,-14}, {79,-4}, {79,14}, {79,16}, {79,32}, {79,47}, {79,48}, {79,49}, {79,59}, {79,60}, {79,61}, {79,76}, {79,77}, {79,78}, {79,79}, {79,80}, {79,81}, {79,82}, {79,83}, {79,84}, {79,85}, {79,86}, {79,87}, {79,88}, {79,89}, {79,101}, {79,102}, {79,103}, {79,106}, {79,107}, {79,108}, {79,120}, {79,121}, {79,122}, {79,123}, {79,124}, {79,125}, {79,126}, {79,127}, {79,128}, {79,129}, {79,130}, {79,140}, {79,141}, {79,142}, {80,-57}, {80,-34}, {80,-33}, {80,-32}, {80,-31}, {80,-30}, {80,-29}, {80,-28}, {80,-27}, {80,-25}, {80,-24}, {80,-23}, {80,-22}, {80,-21}, {80,-20}, {80,-19}, {80,-18}, {80,-15}, {80,-14}, {80,-13}, {80,-10}, {80,-9}, {80,-8}, {80,-7}, {80,-6}, {80,-5}, {80,-4}, {80,-3}, {80,-2}, {80,-1}, {80,0}, {80,2}, {80,3}, {80,4}, {80,5}, {80,6}, {80,7}, {80,8}, {80,10}, {80,11}, {80,12}, {80,13}, {80,14}, {80,16}, {80,17}, {80,18}, {80,19}, {80,20}, {80,21}, {80,23}, {80,24}, {80,25}, {80,26}, {80,27}, {80,28}, {80,29}, {80,31}, {80,32}, {80,33}, {80,34}, {80,35}, {80,36}, {80,37}, {80,38}, {80,40}, {80,41}, {80,42}, {80,43}, {80,44}, {80,45}, {80,47}, {80,48}, {80,49}, {80,59}, {80,60}, {80,61}, {80,76}, {80,77}, {80,78}, {80,81}, {80,82}, {80,83}, {80,84}, {80,85}, {80,87}, {80,88}, {80,89}, {80,101}, {80,102}, {80,103}, {80,106}, {80,107}, {80,108}, {80,120}, {80,121}, {80,122}, {80,123}, {80,124}, {80,125}, {80,126}, {80,127}, {80,128}, {80,129}, {80,130}, {80,140}, {80,141}, {80,142}, {81,-57}, {81,-56}, {81,-34}, {81,-33}, {81,-32}, {81,-31}, {81,-30}, {81,-29}, {81,-28}, {81,-27}, {81,-25}, {81,-24}, {81,-23}, {81,-22}, {81,-21}, {81,-20}, {81,-19}, {81,-18}, {81,-15}, {81,-14}, {81,-13}, {81,-10}, {81,-9}, {81,-8}, {81,-7}, {81,-6}, {81,-5}, {81,-4}, {81,-3}, {81,-2}, {81,-1}, {81,0}, {81,2}, {81,3}, {81,4}, {81,5}, {81,6}, {81,7}, {81,8}, {81,10}, {81,11}, {81,12}, {81,13}, {81,14}, {81,16}, {81,17}, {81,18}, {81,19}, {81,20}, {81,21}, {81,23}, {81,24}, {81,25}, {81,26}, {81,27}, {81,28}, {81,29}, {81,31}, {81,32}, {81,33}, {81,34}, {81,35}, {81,36}, {81,37}, {81,38}, {81,40}, {81,41}, {81,42}, {81,43}, {81,44}, {81,45}, {81,47}, {81,48}, {81,49}, {81,60}, {81,87}, {81,106}, {81,107}, {81,108}, {81,121}, {81,130}, {81,141}, {82,-57}, {82,-56}, {82,59}, {82,60}, {82,61}, {82,63}, {82,64}, {82,65}, {82,66}, {82,67}, {82,68}, {82,69}, {82,70}, {82,71}, {82,72}, {82,73}, {82,75}, {82,76}, {82,77}, {82,78}, {82,79}, {82,80}, {82,81}, {82,82}, {82,83}, {82,84}, {82,85}, {82,86}, {82,87}, {82,89}, {82,90}, {82,91}, {82,92}, {82,93}, {82,94}, {82,95}, {82,97}, {82,98}, {82,99}, {82,100}, {82,101}, {82,102}, {82,103}, {82,106}, {82,107}, {82,108}, {82,110}, {82,111}, {82,112}, {82,113}, {82,114}, {82,116}, {82,117}, {82,118}, {82,120}, {82,121}, {82,122}, {82,123}, {82,124}, {82,125}, {82,127}, {82,128}, {82,129}, {82,130}, {82,132}, {82,133}, {82,134}, {82,136}, {82,137}, {82,138}, {82,140}, {82,141}, {82,142}, {83,59}, {83,60}, {83,61}, {83,62}, {83,63}, {83,64}, {83,65}, {83,66}, {83,67}, {83,68}, {83,69}, {83,70}, {83,71}, {83,72}, {83,73}, {83,74}, {83,75}, {83,76}, {83,77}, {83,78}, {83,79}, {83,80}, {83,81}, {83,82}, {83,83}, {83,84}, {83,85}, {83,86}, {83,87}, {83,89}, {83,90}, {83,91}, {83,92}, {83,93}, {83,94}, {83,95}, {83,96}, {83,97}, {83,98}, {83,99}, {83,100}, {83,101}, {83,102}, {83,103}, {83,104}, {83,105}, {83,106}, {83,107}, {83,108}, {83,110}, {83,111}, {83,112}, {83,113}, {83,114}, {83,115}, {83,116}, {83,117}, {83,118}, {83,120}, {83,121}, {83,122}, {83,123}, {83,124}, {83,125}, {83,127}, {83,128}, {83,129}, {83,130}, {83,131}, {83,132}, {83,133}, {83,134}, {83,136}, {83,137}, {83,138}, {83,140}, {83,141}, {83,142}, {84,59}, {84,60}, {84,61}, {84,63}, {84,64}, {84,65}, {84,66}, {84,67}, {84,68}, {84,69}, {84,70}, {84,71}, {84,72}, {84,73}, {84,75}, {84,76}, {84,77}, {84,78}, {84,79}, {84,80}, {84,81}, {84,82}, {84,83}, {84,84}, {84,85}, {84,86}, {84,87}, {84,89}, {84,90}, {84,91}, {84,92}, {84,93}, {84,94}, {84,95}, {84,97}, {84,98}, {84,99}, {84,100}, {84,101}, {84,102}, {84,103}, {84,106}, {84,107}, {84,108}, {84,110}, {84,111}, {84,112}, {84,113}, {84,114}, {84,116}, {84,117}, {84,118}, {84,120}, {84,121}, {84,122}, {84,123}, {84,124}, {84,125}, {84,127}, {84,128}, {84,129}, {84,130}, {84,132}, {84,133}, {84,134}, {84,136}, {84,137}, {84,138}, {84,140}, {84,141}, {84,142}, }, + ["vegetation-green-grass-2"] = {{-85,104}, {-84,92}, {-81,60}, {-79,72}, {-79,75}, {-79,76}, {-79,77}, {-79,78}, {-79,79}, {-79,80}, {-79,81}, {-79,82}, {-79,83}, {-79,84}, {-79,85}, {-79,86}, {-79,87}, {-79,88}, {-79,89}, {-79,90}, {-79,91}, {-78,-113}, {-78,74}, {-78,75}, {-78,78}, {-78,83}, {-78,84}, {-78,85}, {-78,86}, {-78,87}, {-78,88}, {-78,89}, {-78,90}, {-78,91}, {-77,-112}, {-77,-111}, {-77,-103}, {-77,-102}, {-77,72}, {-77,73}, {-77,88}, {-77,91}, {-76,-110}, {-76,-109}, {-76,-108}, {-76,-103}, {-76,-93}, {-76,72}, {-76,73}, {-76,88}, {-76,118}, {-75,-107}, {-75,72}, {-75,73}, {-75,76}, {-75,118}, {-74,-106}, {-74,-99}, {-74,72}, {-74,87}, {-74,118}, {-73,72}, {-73,91}, {-73,118}, {-73,119}, {-72,72}, {-72,91}, {-72,118}, {-72,119}, {-71,-91}, {-71,72}, {-71,91}, {-71,118}, {-71,119}, {-70,-98}, {-70,-91}, {-70,72}, {-70,91}, {-70,118}, {-70,119}, {-69,-109}, {-69,-108}, {-69,72}, {-69,73}, {-69,88}, {-69,89}, {-69,90}, {-69,118}, {-69,119}, {-68,-98}, {-68,-97}, {-68,-96}, {-68,72}, {-68,87}, {-68,88}, {-68,89}, {-68,118}, {-68,119}, {-67,-96}, {-67,-95}, {-67,72}, {-67,73}, {-67,74}, {-67,75}, {-67,85}, {-67,86}, {-67,87}, {-67,88}, {-67,118}, {-67,119}, {-66,-113}, {-66,-112}, {-66,72}, {-66,73}, {-66,74}, {-66,75}, {-66,82}, {-66,83}, {-66,84}, {-66,85}, {-66,86}, {-66,118}, {-66,119}, {-66,120}, {-66,122}, {-65,-111}, {-65,-110}, {-65,-101}, {-65,72}, {-65,73}, {-65,74}, {-65,75}, {-65,76}, {-65,77}, {-65,78}, {-65,79}, {-65,80}, {-65,81}, {-65,82}, {-64,-109}, {-64,-108}, {-64,-101}, {-64,-100}, {-62,-105}, {-62,-104}, {-61,-105}, {-61,-104}, {-61,43}, {-61,44}, {-61,45}, {-61,46}, {-61,47}, {-61,48}, {-61,49}, {-61,50}, {-61,51}, {-61,52}, {-61,53}, {-60,-95}, {-60,-94}, {-60,43}, {-60,44}, {-60,45}, {-60,46}, {-60,47}, {-60,48}, {-60,49}, {-60,50}, {-60,51}, {-60,52}, {-59,44}, {-59,45}, {-59,46}, {-59,47}, {-59,48}, {-59,49}, {-59,50}, {-59,51}, {-59,74}, {-58,-98}, {-58,45}, {-58,46}, {-58,47}, {-58,48}, {-58,49}, {-58,50}, {-58,74}, {-57,-108}, {-57,-107}, {-57,-98}, {-57,-97}, {-57,72}, {-57,73}, {-57,74}, {-57,75}, {-57,76}, {-56,-107}, {-56,-106}, {-56,-97}, {-56,-96}, {-56,73}, {-56,74}, {-56,75}, {-55,-105}, {-55,-104}, {-55,-95}, {-55,-94}, {-55,-93}, {-55,74}, {-55,75}, {-54,-104}, {-54,-94}, {-54,-93}, {-53,-104}, {-53,-103}, {-52,-111}, {-52,-110}, {-52,-103}, {-52,-102}, {-51,-110}, {-51,-109}, {-51,-108}, {-51,-101}, {-51,-100}, {-50,-100}, {-50,-99}, {-50,-98}, {-50,-96}, {-50,-95}, {-49,-106}, {-49,-98}, {-49,-97}, {-49,-96}, {-49,-95}, {-48,-106}, {-48,-105}, {-48,-104}, {-48,-95}, {-48,-94}, {-48,-93}, {-48,-92}, {-47,-104}, {-47,-103}, {-47,-95}, {-47,-94}, {-47,-93}, {-47,-92}, {-47,-91}, {-46,-103}, {-46,-91}, {-44,-100}, {-44,-99}, {-44,-98}, {-44,-97}, {-43,-106}, {-43,-105}, {-43,-99}, {-43,-98}, {-43,-97}, {-43,-96}, {-42,-106}, {-42,-105}, {-42,-104}, {-42,-96}, {-42,-95}, {-41,-103}, {-41,-102}, {-41,-95}, {-41,-94}, {-41,-93}, {-40,-102}, {-40,-101}, {-38,-107}, {-38,-106}, {-38,-99}, {-38,-98}, {-37,-106}, {-37,-99}, {-37,-98}, {-37,-97}, {-37,-95}, {-37,-75}, {-37,-74}, {-36,-102}, {-36,-96}, {-36,-95}, {-36,-94}, {-36,-93}, {-36,-77}, {-36,-76}, {-36,-75}, {-36,-74}, {-35,-102}, {-35,-101}, {-35,-100}, {-35,-95}, {-35,-94}, {-35,-93}, {-35,-92}, {-35,-77}, {-35,-76}, {-35,-75}, {-35,-74}, {-35,47}, {-34,-100}, {-34,-99}, {-34,-93}, {-34,47}, {-34,48}, {-34,73}, {-33,-99}, {-33,47}, {-33,48}, {-33,49}, {-33,73}, {-32,-107}, {-32,-106}, {-32,-105}, {-32,-98}, {-32,-97}, {-32,-76}, {-32,-75}, {-32,47}, {-32,48}, {-32,49}, {-32,50}, {-31,-105}, {-31,-104}, {-31,-103}, {-31,-97}, {-31,-96}, {-31,-79}, {-31,-78}, {-31,-76}, {-31,-75}, {-31,47}, {-31,48}, {-31,49}, {-31,50}, {-31,51}, {-30,-103}, {-30,-102}, {-30,-101}, {-30,-79}, {-30,-78}, {-30,-76}, {-30,-75}, {-30,74}, {-30,75}, {-29,-101}, {-29,-76}, {-29,-75}, {-29,74}, {-29,75}, {-28,-98}, {-28,74}, {-28,75}, {-28,105}, {-28,106}, {-28,107}, {-28,108}, {-28,109}, {-28,110}, {-27,-98}, {-27,-97}, {-27,-96}, {-27,74}, {-27,75}, {-27,99}, {-27,105}, {-27,106}, {-27,107}, {-27,108}, {-27,109}, {-27,110}, {-26,-107}, {-26,-106}, {-26,-105}, {-26,-96}, {-26,-95}, {-26,-79}, {-26,-78}, {-26,-77}, {-26,-76}, {-26,-75}, {-26,-74}, {-26,74}, {-26,75}, {-26,91}, {-26,92}, {-26,99}, {-26,104}, {-26,105}, {-26,106}, {-26,107}, {-26,108}, {-26,109}, {-26,110}, {-26,111}, {-26,112}, {-26,113}, {-26,114}, {-25,-104}, {-25,-103}, {-25,-79}, {-25,-78}, {-25,-77}, {-25,-76}, {-25,-75}, {-25,-74}, {-25,74}, {-25,75}, {-25,76}, {-25,77}, {-25,86}, {-25,91}, {-25,92}, {-25,94}, {-25,95}, {-25,96}, {-25,97}, {-25,99}, {-25,100}, {-25,101}, {-25,102}, {-25,103}, {-25,104}, {-25,105}, {-25,106}, {-25,107}, {-25,109}, {-25,110}, {-25,111}, {-25,112}, {-25,113}, {-25,114}, {-24,-103}, {-24,-102}, {-24,-101}, {-24,75}, {-24,76}, {-24,77}, {-24,86}, {-24,91}, {-24,92}, {-24,93}, {-24,94}, {-24,95}, {-24,96}, {-24,97}, {-24,98}, {-24,99}, {-24,100}, {-24,101}, {-24,102}, {-24,103}, {-24,104}, {-24,105}, {-24,106}, {-24,107}, {-24,108}, {-24,109}, {-24,110}, {-24,111}, {-24,112}, {-24,113}, {-24,114}, {-23,-101}, {-23,-100}, {-23,-99}, {-23,75}, {-23,76}, {-23,77}, {-23,86}, {-23,87}, {-23,88}, {-23,89}, {-23,90}, {-23,91}, {-23,92}, {-23,93}, {-23,94}, {-23,95}, {-23,96}, {-23,97}, {-23,98}, {-23,99}, {-23,100}, {-23,101}, {-23,102}, {-23,103}, {-23,104}, {-23,105}, {-23,106}, {-23,107}, {-23,108}, {-23,109}, {-23,110}, {-23,111}, {-23,112}, {-23,113}, {-23,114}, {-22,-99}, {-22,-98}, {-22,-97}, {-22,-80}, {-21,-97}, {-21,-82}, {-21,-81}, {-21,-80}, {-21,-79}, {-21,-78}, {-21,-77}, {-21,-76}, {-21,-75}, {-21,-74}, {-20,-106}, {-20,-105}, {-20,-104}, {-20,-81}, {-20,-80}, {-20,-77}, {-20,-76}, {-20,-75}, {-20,-74}, {-20,35}, {-20,75}, {-20,76}, {-20,77}, {-20,78}, {-20,79}, {-20,80}, {-20,89}, {-20,90}, {-20,91}, {-20,92}, {-20,93}, {-20,94}, {-20,95}, {-20,96}, {-20,97}, {-20,98}, {-20,99}, {-20,100}, {-20,101}, {-20,102}, {-20,103}, {-20,104}, {-20,105}, {-20,106}, {-20,107}, {-20,108}, {-20,109}, {-20,110}, {-20,111}, {-20,112}, {-20,113}, {-20,114}, {-20,115}, {-20,116}, {-20,117}, {-19,-104}, {-19,-103}, {-19,35}, {-19,75}, {-19,76}, {-19,77}, {-19,78}, {-19,79}, {-19,80}, {-19,85}, {-19,86}, {-19,87}, {-19,88}, {-19,89}, {-19,90}, {-19,91}, {-19,92}, {-19,93}, {-19,94}, {-19,95}, {-19,96}, {-19,102}, {-19,103}, {-19,104}, {-19,105}, {-19,106}, {-19,107}, {-19,108}, {-19,109}, {-19,110}, {-19,111}, {-19,112}, {-19,113}, {-19,114}, {-19,115}, {-19,116}, {-19,117}, {-18,-102}, {-18,-101}, {-18,35}, {-18,75}, {-18,80}, {-18,86}, {-18,87}, {-18,88}, {-18,89}, {-18,90}, {-18,91}, {-18,93}, {-18,104}, {-18,105}, {-18,106}, {-18,107}, {-18,108}, {-18,109}, {-18,112}, {-18,113}, {-18,114}, {-18,115}, {-18,116}, {-18,117}, {-17,-101}, {-17,-100}, {-17,35}, {-17,75}, {-17,80}, {-17,85}, {-17,86}, {-17,87}, {-17,88}, {-17,104}, {-17,105}, {-17,106}, {-17,107}, {-17,108}, {-17,109}, {-17,110}, {-17,111}, {-17,112}, {-17,113}, {-17,114}, {-17,115}, {-17,116}, {-17,117}, {-16,-100}, {-16,-99}, {-16,-80}, {-16,-79}, {-16,-78}, {-16,-77}, {-16,-76}, {-16,-75}, {-16,-74}, {-16,75}, {-16,80}, {-16,85}, {-16,86}, {-16,89}, {-16,106}, {-16,107}, {-16,108}, {-16,109}, {-16,110}, {-16,112}, {-16,113}, {-16,114}, {-16,115}, {-16,116}, {-15,-97}, {-15,-96}, {-15,-95}, {-15,-80}, {-15,-79}, {-15,-78}, {-15,-77}, {-15,-76}, {-15,-75}, {-15,-74}, {-15,75}, {-15,80}, {-15,84}, {-15,107}, {-15,108}, {-15,109}, {-15,110}, {-15,114}, {-15,115}, {-15,116}, {-14,-97}, {-14,-96}, {-14,-95}, {-14,75}, {-14,80}, {-14,83}, {-14,84}, {-14,86}, {-14,104}, {-14,107}, {-14,108}, {-14,109}, {-14,115}, {-13,-103}, {-13,-102}, {-13,75}, {-13,80}, {-13,83}, {-13,84}, {-13,85}, {-13,86}, {-13,97}, {-13,107}, {-13,108}, {-13,109}, {-13,110}, {-12,-102}, {-12,-101}, {-12,75}, {-12,76}, {-12,79}, {-12,80}, {-12,83}, {-12,84}, {-12,85}, {-12,86}, {-12,106}, {-12,108}, {-12,109}, {-11,-83}, {-11,-82}, {-11,-81}, {-11,-80}, {-11,-79}, {-11,-78}, {-11,-77}, {-11,-75}, {-11,-74}, {-11,75}, {-11,76}, {-11,79}, {-11,80}, {-11,83}, {-11,84}, {-11,85}, {-11,86}, {-11,103}, {-11,109}, {-11,148}, {-10,-83}, {-10,-82}, {-10,-81}, {-10,-80}, {-10,-79}, {-10,-78}, {-10,-77}, {-10,-75}, {-10,-74}, {-10,75}, {-10,76}, {-10,77}, {-10,78}, {-10,79}, {-10,80}, {-10,83}, {-10,84}, {-10,85}, {-10,109}, {-10,115}, {-10,148}, {-9,75}, {-9,76}, {-9,77}, {-9,78}, {-9,79}, {-9,80}, {-9,83}, {-9,84}, {-9,85}, {-9,86}, {-9,115}, {-8,77}, {-8,78}, {-8,79}, {-8,80}, {-8,83}, {-8,84}, {-8,85}, {-8,101}, {-8,102}, {-8,105}, {-8,109}, {-7,78}, {-7,79}, {-7,80}, {-7,83}, {-7,84}, {-7,85}, {-7,102}, {-7,103}, {-7,104}, {-7,105}, {-7,106}, {-7,107}, {-7,109}, {-7,110}, {-6,-80}, {-6,-79}, {-6,-77}, {-6,-76}, {-6,-75}, {-6,-74}, {-6,79}, {-6,80}, {-6,83}, {-6,84}, {-6,85}, {-6,86}, {-6,91}, {-6,92}, {-6,93}, {-6,94}, {-6,103}, {-6,104}, {-6,105}, {-6,106}, {-6,107}, {-6,108}, {-5,-83}, {-5,-80}, {-5,-79}, {-5,-77}, {-5,-76}, {-5,-75}, {-5,-74}, {-5,80}, {-5,83}, {-5,84}, {-5,85}, {-5,86}, {-5,88}, {-5,89}, {-5,91}, {-5,92}, {-4,80}, {-4,83}, {-4,84}, {-4,85}, {-4,87}, {-3,82}, {-3,83}, {-3,88}, {-3,89}, {-2,-75}, {-2,-74}, {-2,81}, {-2,82}, {-2,83}, {-2,87}, {-2,88}, {-2,89}, {-1,-83}, {-1,-82}, {-1,-79}, {-1,-78}, {-1,-77}, {-1,-76}, {-1,-75}, {-1,-74}, {-1,78}, {-1,79}, {-1,80}, {-1,81}, {-1,82}, {-1,83}, {-1,84}, {-1,85}, {0,-83}, {0,-82}, {0,-79}, {0,-78}, {0,-77}, {0,-76}, {0,35}, {0,79}, {0,80}, {0,81}, {0,82}, {0,83}, {0,84}, {0,85}, {1,79}, {1,80}, {1,81}, {1,82}, {1,83}, {1,84}, {2,83}, {2,84}, {2,85}, {3,-85}, {3,-84}, {4,-85}, {4,-84}, {4,-83}, {4,-82}, {4,-80}, {4,-79}, {4,-78}, {4,-75}, {4,-74}, {4,34}, {5,-83}, {5,-82}, {5,-80}, {5,-79}, {5,-78}, {5,-75}, {5,-74}, {5,34}, {5,35}, {6,34}, {6,35}, {7,30}, {8,30}, {9,-80}, {9,-79}, {9,-75}, {9,-74}, {9,-19}, {9,-18}, {9,-17}, {9,-16}, {9,13}, {9,14}, {9,15}, {9,16}, {9,17}, {9,18}, {9,22}, {9,23}, {9,24}, {9,26}, {9,29}, {9,30}, {9,31}, {9,140}, {9,141}, {9,142}, {10,-80}, {10,-79}, {10,-76}, {10,-75}, {10,-74}, {10,140}, {11,-76}, {11,-75}, {11,-74}, {11,140}, {12,-77}, {12,-76}, {12,-75}, {12,-74}, {12,140}, {13,-78}, {13,-77}, {13,-76}, {13,-75}, {13,-74}, {13,140}, {17,-82}, {17,-81}, {18,-83}, {18,-82}, {18,-81}, {19,-84}, {19,-83}, {19,-82}, {25,-24}, {25,-23}, {26,-27}, {26,-24}, {26,-23}, {29,52}, {29,53}, {30,52}, {59,120}, {59,121}, {60,120}, {60,127}, {60,128}, {63,120}, {68,120}, {68,130}, {69,129}, {69,130}, }, + ["refined-concrete"] = {{-83,25}, {-83,47}, {-83,48}, {-83,49}, {-83,54}, {-83,55}, {-83,57}, {-83,58}, {-83,100}, {-82,54}, {-82,55}, {-82,57}, {-82,58}, {-82,97}, {-82,98}, {-82,99}, {-82,100}, {-82,101}, {-82,104}, {-82,105}, {-82,106}, {-82,107}, {-82,108}, {-82,109}, {-82,110}, {-82,111}, {-82,112}, {-81,54}, {-81,55}, {-81,57}, {-81,58}, {-81,97}, {-81,98}, {-81,99}, {-81,100}, {-81,101}, {-81,104}, {-81,105}, {-81,106}, {-81,107}, {-81,108}, {-81,109}, {-81,110}, {-81,111}, {-81,112}, {-80,97}, {-80,98}, {-80,99}, {-80,100}, {-80,101}, {-80,104}, {-80,105}, {-80,106}, {-80,107}, {-80,108}, {-80,109}, {-80,110}, {-80,111}, {-80,112}, {-79,39}, {-79,40}, {-79,97}, {-79,98}, {-79,99}, {-79,100}, {-79,101}, {-79,104}, {-79,105}, {-79,106}, {-79,107}, {-79,108}, {-79,109}, {-79,110}, {-79,111}, {-79,112}, {-78,39}, {-78,40}, {-78,97}, {-78,98}, {-78,99}, {-78,100}, {-78,101}, {-78,104}, {-78,105}, {-78,106}, {-78,107}, {-78,108}, {-78,109}, {-78,110}, {-78,111}, {-78,112}, {-77,25}, {-77,39}, {-77,40}, {-77,97}, {-77,98}, {-77,99}, {-77,100}, {-77,101}, {-77,104}, {-77,108}, {-77,109}, {-77,110}, {-77,111}, {-77,112}, {-77,113}, {-76,39}, {-76,40}, {-76,51}, {-76,52}, {-76,55}, {-76,63}, {-76,97}, {-76,98}, {-76,99}, {-76,100}, {-76,101}, {-76,102}, {-76,103}, {-76,104}, {-76,105}, {-76,107}, {-76,108}, {-76,109}, {-76,110}, {-76,111}, {-76,112}, {-75,39}, {-75,40}, {-75,51}, {-75,52}, {-75,53}, {-75,54}, {-75,55}, {-75,56}, {-75,57}, {-75,58}, {-75,59}, {-75,62}, {-75,63}, {-75,64}, {-75,65}, {-75,66}, {-75,97}, {-75,98}, {-75,99}, {-75,100}, {-75,101}, {-75,104}, {-75,108}, {-75,109}, {-75,110}, {-75,111}, {-75,112}, {-74,-22}, {-74,-16}, {-74,39}, {-74,40}, {-74,51}, {-74,52}, {-74,53}, {-74,54}, {-74,55}, {-74,56}, {-74,57}, {-74,58}, {-74,59}, {-74,62}, {-74,64}, {-74,66}, {-74,97}, {-74,98}, {-74,99}, {-74,100}, {-74,101}, {-74,104}, {-74,105}, {-74,106}, {-74,107}, {-74,108}, {-74,109}, {-74,110}, {-74,111}, {-74,112}, {-73,5}, {-73,6}, {-73,7}, {-73,38}, {-73,39}, {-73,40}, {-73,51}, {-73,52}, {-73,53}, {-73,54}, {-73,55}, {-73,56}, {-73,57}, {-73,58}, {-73,59}, {-73,62}, {-73,63}, {-73,64}, {-73,65}, {-73,66}, {-73,97}, {-73,98}, {-73,99}, {-73,100}, {-73,101}, {-73,104}, {-73,105}, {-73,106}, {-73,107}, {-73,108}, {-73,109}, {-72,-11}, {-72,-10}, {-72,-9}, {-72,-8}, {-72,-7}, {-72,-6}, {-72,-5}, {-72,-4}, {-72,-3}, {-72,-2}, {-72,-1}, {-72,0}, {-72,1}, {-72,2}, {-72,3}, {-72,4}, {-72,5}, {-72,6}, {-72,7}, {-72,8}, {-72,9}, {-72,10}, {-72,11}, {-72,12}, {-72,13}, {-72,14}, {-72,15}, {-72,16}, {-72,17}, {-72,18}, {-72,19}, {-72,20}, {-72,21}, {-72,22}, {-72,23}, {-72,38}, {-72,39}, {-72,40}, {-72,51}, {-72,52}, {-72,53}, {-72,54}, {-72,55}, {-72,56}, {-72,57}, {-72,58}, {-72,59}, {-72,62}, {-72,63}, {-72,64}, {-72,65}, {-72,66}, {-72,97}, {-72,98}, {-72,99}, {-72,100}, {-72,101}, {-72,109}, {-71,-70}, {-71,-69}, {-71,-11}, {-71,-10}, {-71,-9}, {-71,-8}, {-71,-7}, {-71,-6}, {-71,-5}, {-71,-4}, {-71,-3}, {-71,-2}, {-71,-1}, {-71,0}, {-71,1}, {-71,2}, {-71,3}, {-71,4}, {-71,5}, {-71,6}, {-71,7}, {-71,8}, {-71,9}, {-71,10}, {-71,11}, {-71,12}, {-71,13}, {-71,14}, {-71,15}, {-71,16}, {-71,17}, {-71,18}, {-71,19}, {-71,20}, {-71,21}, {-71,22}, {-71,23}, {-71,38}, {-71,39}, {-71,40}, {-71,51}, {-71,52}, {-71,53}, {-71,54}, {-71,55}, {-71,56}, {-71,57}, {-71,58}, {-71,59}, {-71,60}, {-71,61}, {-71,62}, {-71,63}, {-71,64}, {-71,65}, {-71,66}, {-71,97}, {-71,98}, {-71,99}, {-71,100}, {-71,101}, {-71,107}, {-71,108}, {-71,109}, {-71,110}, {-71,111}, {-71,112}, {-70,-11}, {-70,-10}, {-70,-9}, {-70,-8}, {-70,-7}, {-70,-6}, {-70,-5}, {-70,-4}, {-70,-3}, {-70,-2}, {-70,-1}, {-70,0}, {-70,1}, {-70,2}, {-70,3}, {-70,4}, {-70,5}, {-70,6}, {-70,7}, {-70,8}, {-70,9}, {-70,10}, {-70,11}, {-70,12}, {-70,13}, {-70,14}, {-70,15}, {-70,16}, {-70,17}, {-70,18}, {-70,19}, {-70,20}, {-70,21}, {-70,22}, {-70,23}, {-70,38}, {-70,39}, {-70,40}, {-70,51}, {-70,52}, {-70,53}, {-70,54}, {-70,55}, {-70,56}, {-70,57}, {-70,58}, {-70,59}, {-70,62}, {-70,63}, {-70,64}, {-70,65}, {-70,66}, {-70,97}, {-70,98}, {-70,99}, {-70,100}, {-70,101}, {-70,107}, {-70,108}, {-70,109}, {-70,110}, {-70,111}, {-70,112}, {-69,-11}, {-69,-10}, {-69,-9}, {-69,-8}, {-69,-7}, {-69,-6}, {-69,-5}, {-69,-4}, {-69,-3}, {-69,-2}, {-69,-1}, {-69,0}, {-69,1}, {-69,2}, {-69,3}, {-69,4}, {-69,5}, {-69,6}, {-69,7}, {-69,8}, {-69,9}, {-69,10}, {-69,11}, {-69,12}, {-69,13}, {-69,14}, {-69,15}, {-69,16}, {-69,17}, {-69,18}, {-69,19}, {-69,20}, {-69,21}, {-69,22}, {-69,23}, {-69,38}, {-69,39}, {-69,40}, {-69,51}, {-69,52}, {-69,53}, {-69,54}, {-69,55}, {-69,56}, {-69,57}, {-69,58}, {-69,59}, {-69,62}, {-69,63}, {-69,64}, {-69,65}, {-69,66}, {-69,100}, {-69,107}, {-69,108}, {-69,109}, {-69,110}, {-69,111}, {-69,112}, {-68,-11}, {-68,-10}, {-68,-9}, {-68,-8}, {-68,-7}, {-68,-6}, {-68,-5}, {-68,-4}, {-68,-3}, {-68,-2}, {-68,-1}, {-68,0}, {-68,1}, {-68,2}, {-68,3}, {-68,4}, {-68,5}, {-68,6}, {-68,7}, {-68,8}, {-68,9}, {-68,10}, {-68,11}, {-68,12}, {-68,13}, {-68,14}, {-68,15}, {-68,16}, {-68,17}, {-68,18}, {-68,19}, {-68,20}, {-68,21}, {-68,22}, {-68,23}, {-68,38}, {-68,39}, {-68,40}, {-68,51}, {-68,52}, {-68,53}, {-68,54}, {-68,55}, {-68,56}, {-68,57}, {-68,58}, {-68,59}, {-68,62}, {-68,63}, {-68,64}, {-68,65}, {-68,66}, {-68,107}, {-68,108}, {-68,109}, {-68,110}, {-68,111}, {-68,112}, {-67,-75}, {-67,-72}, {-67,-67}, {-67,-64}, {-67,-11}, {-67,-10}, {-67,-9}, {-67,-8}, {-67,-7}, {-67,-6}, {-67,-5}, {-67,-4}, {-67,-3}, {-67,-2}, {-67,-1}, {-67,0}, {-67,1}, {-67,2}, {-67,3}, {-67,4}, {-67,5}, {-67,6}, {-67,7}, {-67,8}, {-67,9}, {-67,10}, {-67,11}, {-67,12}, {-67,13}, {-67,14}, {-67,15}, {-67,16}, {-67,17}, {-67,18}, {-67,19}, {-67,20}, {-67,21}, {-67,22}, {-67,23}, {-67,38}, {-67,39}, {-67,40}, {-67,51}, {-67,52}, {-67,53}, {-67,54}, {-67,55}, {-67,56}, {-67,57}, {-67,58}, {-67,59}, {-67,62}, {-67,63}, {-67,64}, {-67,65}, {-67,66}, {-67,107}, {-67,108}, {-67,109}, {-67,110}, {-67,111}, {-67,112}, {-66,-11}, {-66,-10}, {-66,-9}, {-66,-8}, {-66,-7}, {-66,-6}, {-66,-5}, {-66,-4}, {-66,-3}, {-66,-2}, {-66,-1}, {-66,0}, {-66,1}, {-66,2}, {-66,3}, {-66,4}, {-66,5}, {-66,6}, {-66,7}, {-66,8}, {-66,9}, {-66,10}, {-66,11}, {-66,12}, {-66,13}, {-66,14}, {-66,15}, {-66,16}, {-66,17}, {-66,18}, {-66,19}, {-66,20}, {-66,21}, {-66,22}, {-66,23}, {-66,38}, {-66,39}, {-66,40}, {-66,55}, {-66,63}, {-66,106}, {-66,107}, {-66,108}, {-66,109}, {-66,110}, {-66,111}, {-66,112}, {-65,-11}, {-65,-10}, {-65,-9}, {-65,-8}, {-65,-7}, {-65,-6}, {-65,-5}, {-65,-4}, {-65,-3}, {-65,-2}, {-65,-1}, {-65,0}, {-65,1}, {-65,2}, {-65,3}, {-65,4}, {-65,5}, {-65,6}, {-65,7}, {-65,8}, {-65,9}, {-65,10}, {-65,11}, {-65,12}, {-65,13}, {-65,14}, {-65,15}, {-65,16}, {-65,17}, {-65,18}, {-65,19}, {-65,20}, {-65,21}, {-65,22}, {-65,23}, {-65,38}, {-65,39}, {-65,40}, {-64,-75}, {-64,-64}, {-64,-11}, {-64,-10}, {-64,-9}, {-64,-8}, {-64,-7}, {-64,-6}, {-64,-5}, {-64,-4}, {-64,-3}, {-64,-2}, {-64,-1}, {-64,0}, {-64,1}, {-64,2}, {-64,3}, {-64,4}, {-64,5}, {-64,6}, {-64,7}, {-64,8}, {-64,9}, {-64,10}, {-64,11}, {-64,12}, {-64,13}, {-64,14}, {-64,15}, {-64,16}, {-64,17}, {-64,18}, {-64,19}, {-64,20}, {-64,21}, {-64,22}, {-64,23}, {-64,38}, {-64,39}, {-64,40}, {-64,116}, {-64,135}, {-64,136}, {-63,-11}, {-63,-10}, {-63,-9}, {-63,-8}, {-63,-7}, {-63,-6}, {-63,-5}, {-63,-4}, {-63,-3}, {-63,-2}, {-63,-1}, {-63,0}, {-63,1}, {-63,2}, {-63,3}, {-63,4}, {-63,5}, {-63,6}, {-63,7}, {-63,8}, {-63,9}, {-63,10}, {-63,11}, {-63,12}, {-63,13}, {-63,14}, {-63,15}, {-63,16}, {-63,17}, {-63,18}, {-63,19}, {-63,20}, {-63,21}, {-63,22}, {-63,23}, {-63,38}, {-63,39}, {-63,40}, {-62,-60}, {-62,-11}, {-62,-10}, {-62,-9}, {-62,-8}, {-62,-7}, {-62,-6}, {-62,-5}, {-62,-4}, {-62,-3}, {-62,-2}, {-62,-1}, {-62,0}, {-62,1}, {-62,2}, {-62,3}, {-62,4}, {-62,5}, {-62,6}, {-62,7}, {-62,8}, {-62,9}, {-62,10}, {-62,11}, {-62,12}, {-62,13}, {-62,14}, {-62,15}, {-62,16}, {-62,17}, {-62,18}, {-62,19}, {-62,20}, {-62,21}, {-62,22}, {-62,23}, {-62,38}, {-62,39}, {-62,40}, {-61,-60}, {-61,-12}, {-61,-11}, {-61,-10}, {-61,-9}, {-61,-8}, {-61,-7}, {-61,-6}, {-61,-5}, {-61,-4}, {-61,-3}, {-61,-2}, {-61,-1}, {-61,0}, {-61,1}, {-61,2}, {-61,3}, {-61,4}, {-61,5}, {-61,6}, {-61,7}, {-61,8}, {-61,9}, {-61,10}, {-61,11}, {-61,12}, {-61,13}, {-61,14}, {-61,15}, {-61,16}, {-61,17}, {-61,18}, {-61,19}, {-61,20}, {-61,21}, {-61,22}, {-61,23}, {-61,38}, {-61,39}, {-61,40}, {-61,41}, {-61,81}, {-61,82}, {-60,-12}, {-60,-11}, {-60,-10}, {-60,-9}, {-60,-8}, {-60,-7}, {-60,-6}, {-60,-5}, {-60,-4}, {-60,-3}, {-60,-2}, {-60,-1}, {-60,0}, {-60,1}, {-60,2}, {-60,3}, {-60,4}, {-60,5}, {-60,6}, {-60,7}, {-60,8}, {-60,9}, {-60,10}, {-60,11}, {-60,12}, {-60,13}, {-60,14}, {-60,15}, {-60,16}, {-60,17}, {-60,18}, {-60,19}, {-60,20}, {-60,21}, {-60,22}, {-60,23}, {-60,24}, {-60,38}, {-60,39}, {-60,40}, {-60,41}, {-60,81}, {-60,82}, {-60,120}, {-60,121}, {-60,122}, {-60,123}, {-60,124}, {-60,129}, {-60,130}, {-60,131}, {-60,132}, {-60,133}, {-59,-75}, {-59,-64}, {-59,-12}, {-59,-11}, {-59,-10}, {-59,-9}, {-59,-8}, {-59,-7}, {-59,-6}, {-59,-5}, {-59,-4}, {-59,-3}, {-59,-2}, {-59,-1}, {-59,0}, {-59,1}, {-59,2}, {-59,3}, {-59,4}, {-59,5}, {-59,6}, {-59,7}, {-59,8}, {-59,9}, {-59,10}, {-59,11}, {-59,12}, {-59,13}, {-59,14}, {-59,15}, {-59,16}, {-59,17}, {-59,18}, {-59,19}, {-59,20}, {-59,21}, {-59,22}, {-59,23}, {-59,38}, {-59,39}, {-59,40}, {-59,41}, {-59,80}, {-59,81}, {-59,82}, {-59,120}, {-59,121}, {-59,122}, {-59,123}, {-59,124}, {-59,129}, {-59,130}, {-59,131}, {-59,132}, {-59,133}, {-58,-11}, {-58,-10}, {-58,-9}, {-58,-8}, {-58,-7}, {-58,-6}, {-58,-5}, {-58,-4}, {-58,-3}, {-58,-2}, {-58,-1}, {-58,0}, {-58,1}, {-58,2}, {-58,3}, {-58,4}, {-58,5}, {-58,6}, {-58,7}, {-58,8}, {-58,9}, {-58,10}, {-58,11}, {-58,12}, {-58,13}, {-58,14}, {-58,15}, {-58,16}, {-58,17}, {-58,18}, {-58,19}, {-58,20}, {-58,21}, {-58,22}, {-58,23}, {-58,38}, {-58,39}, {-58,40}, {-58,41}, {-58,80}, {-58,81}, {-58,82}, {-58,120}, {-58,121}, {-58,122}, {-58,123}, {-58,124}, {-58,129}, {-58,130}, {-58,131}, {-58,132}, {-58,133}, {-58,134}, {-57,-11}, {-57,-10}, {-57,-9}, {-57,-8}, {-57,-7}, {-57,-6}, {-57,-5}, {-57,-4}, {-57,-3}, {-57,-2}, {-57,-1}, {-57,0}, {-57,1}, {-57,2}, {-57,3}, {-57,4}, {-57,5}, {-57,6}, {-57,7}, {-57,8}, {-57,9}, {-57,10}, {-57,11}, {-57,12}, {-57,13}, {-57,14}, {-57,15}, {-57,16}, {-57,17}, {-57,18}, {-57,19}, {-57,20}, {-57,21}, {-57,22}, {-57,23}, {-57,38}, {-57,39}, {-57,40}, {-57,41}, {-57,80}, {-57,81}, {-57,82}, {-57,83}, {-57,120}, {-57,121}, {-57,122}, {-57,123}, {-57,124}, {-57,129}, {-57,130}, {-57,131}, {-57,132}, {-57,133}, {-56,-75}, {-56,-72}, {-56,-67}, {-56,-64}, {-56,-11}, {-56,-10}, {-56,-9}, {-56,-8}, {-56,-7}, {-56,-6}, {-56,-5}, {-56,-4}, {-56,-3}, {-56,-2}, {-56,-1}, {-56,0}, {-56,1}, {-56,2}, {-56,3}, {-56,4}, {-56,5}, {-56,6}, {-56,7}, {-56,8}, {-56,9}, {-56,10}, {-56,11}, {-56,12}, {-56,13}, {-56,14}, {-56,15}, {-56,16}, {-56,17}, {-56,18}, {-56,19}, {-56,20}, {-56,21}, {-56,22}, {-56,23}, {-56,38}, {-56,39}, {-56,40}, {-56,41}, {-56,80}, {-56,81}, {-56,82}, {-56,120}, {-56,121}, {-56,122}, {-56,123}, {-56,124}, {-56,125}, {-56,129}, {-56,130}, {-56,131}, {-56,132}, {-56,133}, {-55,-11}, {-55,-10}, {-55,-9}, {-55,-8}, {-55,-7}, {-55,-6}, {-55,-5}, {-55,-4}, {-55,-3}, {-55,-2}, {-55,-1}, {-55,0}, {-55,1}, {-55,2}, {-55,3}, {-55,4}, {-55,5}, {-55,6}, {-55,7}, {-55,8}, {-55,9}, {-55,10}, {-55,11}, {-55,12}, {-55,13}, {-55,14}, {-55,15}, {-55,16}, {-55,17}, {-55,18}, {-55,19}, {-55,20}, {-55,21}, {-55,22}, {-55,23}, {-55,38}, {-55,39}, {-55,40}, {-55,41}, {-55,80}, {-55,81}, {-55,82}, {-55,120}, {-55,121}, {-55,122}, {-55,123}, {-55,124}, {-55,130}, {-54,-11}, {-54,-10}, {-54,-9}, {-54,-8}, {-54,-7}, {-54,-6}, {-54,-5}, {-54,-4}, {-54,-3}, {-54,-2}, {-54,-1}, {-54,0}, {-54,1}, {-54,2}, {-54,3}, {-54,4}, {-54,5}, {-54,6}, {-54,7}, {-54,8}, {-54,9}, {-54,10}, {-54,11}, {-54,12}, {-54,13}, {-54,14}, {-54,15}, {-54,16}, {-54,17}, {-54,18}, {-54,19}, {-54,20}, {-54,21}, {-54,22}, {-54,23}, {-54,38}, {-54,39}, {-54,40}, {-54,41}, {-54,81}, {-54,82}, {-54,120}, {-54,121}, {-54,122}, {-54,123}, {-54,124}, {-53,-11}, {-53,-10}, {-53,-9}, {-53,-8}, {-53,-7}, {-53,-6}, {-53,-5}, {-53,-4}, {-53,-3}, {-53,-2}, {-53,-1}, {-53,0}, {-53,1}, {-53,2}, {-53,3}, {-53,4}, {-53,5}, {-53,6}, {-53,7}, {-53,8}, {-53,9}, {-53,10}, {-53,11}, {-53,12}, {-53,13}, {-53,14}, {-53,15}, {-53,16}, {-53,17}, {-53,18}, {-53,19}, {-53,20}, {-53,21}, {-53,22}, {-53,23}, {-53,38}, {-53,39}, {-53,40}, {-53,41}, {-53,75}, {-53,81}, {-53,82}, {-53,121}, {-52,-70}, {-52,-69}, {-52,-11}, {-52,-10}, {-52,-9}, {-52,-8}, {-52,-7}, {-52,-6}, {-52,-5}, {-52,-4}, {-52,-3}, {-52,-2}, {-52,-1}, {-52,0}, {-52,1}, {-52,2}, {-52,3}, {-52,4}, {-52,5}, {-52,6}, {-52,7}, {-52,8}, {-52,9}, {-52,10}, {-52,11}, {-52,12}, {-52,13}, {-52,14}, {-52,15}, {-52,16}, {-52,17}, {-52,18}, {-52,19}, {-52,20}, {-52,21}, {-52,22}, {-52,23}, {-52,38}, {-52,39}, {-52,40}, {-52,41}, {-52,129}, {-52,130}, {-52,131}, {-52,132}, {-52,133}, {-51,-12}, {-51,-11}, {-51,-10}, {-51,-9}, {-51,-8}, {-51,-7}, {-51,-6}, {-51,-5}, {-51,-4}, {-51,-3}, {-51,-2}, {-51,-1}, {-51,0}, {-51,1}, {-51,2}, {-51,3}, {-51,4}, {-51,5}, {-51,6}, {-51,7}, {-51,8}, {-51,9}, {-51,10}, {-51,11}, {-51,12}, {-51,13}, {-51,14}, {-51,15}, {-51,16}, {-51,17}, {-51,18}, {-51,19}, {-51,20}, {-51,21}, {-51,22}, {-51,23}, {-51,38}, {-51,39}, {-51,40}, {-51,41}, {-51,94}, {-51,95}, {-51,96}, {-51,97}, {-51,100}, {-51,101}, {-51,102}, {-51,103}, {-51,104}, {-51,105}, {-51,106}, {-51,107}, {-51,108}, {-51,109}, {-51,110}, {-51,111}, {-51,112}, {-51,129}, {-51,130}, {-51,131}, {-51,132}, {-51,133}, {-50,-12}, {-50,-11}, {-50,-10}, {-50,-9}, {-50,-8}, {-50,-7}, {-50,-6}, {-50,-5}, {-50,-4}, {-50,-3}, {-50,-2}, {-50,-1}, {-50,0}, {-50,1}, {-50,2}, {-50,3}, {-50,4}, {-50,5}, {-50,6}, {-50,7}, {-50,8}, {-50,9}, {-50,10}, {-50,11}, {-50,12}, {-50,13}, {-50,14}, {-50,15}, {-50,16}, {-50,17}, {-50,18}, {-50,19}, {-50,20}, {-50,21}, {-50,22}, {-50,23}, {-50,24}, {-50,38}, {-50,39}, {-50,40}, {-50,41}, {-50,94}, {-50,95}, {-50,96}, {-50,97}, {-50,100}, {-50,101}, {-50,102}, {-50,103}, {-50,104}, {-50,105}, {-50,106}, {-50,107}, {-50,108}, {-50,109}, {-50,110}, {-50,111}, {-50,112}, {-50,129}, {-50,130}, {-50,131}, {-50,132}, {-50,133}, {-50,134}, {-49,-12}, {-49,-11}, {-49,-10}, {-49,-9}, {-49,-8}, {-49,-7}, {-49,-6}, {-49,-5}, {-49,-4}, {-49,-3}, {-49,-2}, {-49,-1}, {-49,0}, {-49,1}, {-49,2}, {-49,3}, {-49,4}, {-49,5}, {-49,6}, {-49,7}, {-49,8}, {-49,9}, {-49,10}, {-49,11}, {-49,12}, {-49,13}, {-49,14}, {-49,15}, {-49,16}, {-49,17}, {-49,18}, {-49,19}, {-49,20}, {-49,21}, {-49,22}, {-49,23}, {-49,38}, {-49,39}, {-49,40}, {-49,41}, {-49,94}, {-49,95}, {-49,96}, {-49,97}, {-49,98}, {-49,99}, {-49,100}, {-49,101}, {-49,102}, {-49,103}, {-49,104}, {-49,105}, {-49,106}, {-49,107}, {-49,108}, {-49,109}, {-49,110}, {-49,111}, {-49,112}, {-49,120}, {-49,121}, {-49,122}, {-49,123}, {-49,124}, {-49,129}, {-49,130}, {-49,131}, {-49,132}, {-49,133}, {-48,-11}, {-48,-10}, {-48,-9}, {-48,-8}, {-48,-7}, {-48,-6}, {-48,-5}, {-48,-4}, {-48,-3}, {-48,-2}, {-48,-1}, {-48,0}, {-48,1}, {-48,2}, {-48,3}, {-48,4}, {-48,5}, {-48,6}, {-48,7}, {-48,8}, {-48,9}, {-48,10}, {-48,11}, {-48,12}, {-48,13}, {-48,14}, {-48,15}, {-48,16}, {-48,17}, {-48,18}, {-48,19}, {-48,20}, {-48,21}, {-48,22}, {-48,23}, {-48,38}, {-48,39}, {-48,40}, {-48,41}, {-48,94}, {-48,95}, {-48,96}, {-48,97}, {-48,100}, {-48,101}, {-48,102}, {-48,103}, {-48,104}, {-48,105}, {-48,106}, {-48,107}, {-48,108}, {-48,109}, {-48,110}, {-48,111}, {-48,112}, {-48,120}, {-48,121}, {-48,122}, {-48,123}, {-48,124}, {-48,129}, {-48,130}, {-48,131}, {-48,132}, {-48,133}, {-47,-64}, {-47,-63}, {-47,-62}, {-47,-11}, {-47,-10}, {-47,-9}, {-47,-8}, {-47,-7}, {-47,-6}, {-47,-5}, {-47,-4}, {-47,-3}, {-47,-2}, {-47,-1}, {-47,0}, {-47,1}, {-47,2}, {-47,3}, {-47,4}, {-47,5}, {-47,6}, {-47,7}, {-47,8}, {-47,9}, {-47,10}, {-47,11}, {-47,12}, {-47,13}, {-47,14}, {-47,15}, {-47,16}, {-47,17}, {-47,18}, {-47,19}, {-47,20}, {-47,21}, {-47,22}, {-47,23}, {-47,38}, {-47,39}, {-47,40}, {-47,41}, {-47,70}, {-47,71}, {-47,72}, {-47,94}, {-47,95}, {-47,96}, {-47,97}, {-47,100}, {-47,101}, {-47,102}, {-47,103}, {-47,104}, {-47,105}, {-47,106}, {-47,107}, {-47,108}, {-47,109}, {-47,110}, {-47,111}, {-47,112}, {-47,120}, {-47,121}, {-47,122}, {-47,123}, {-47,124}, {-47,130}, {-46,-64}, {-46,-63}, {-46,-62}, {-46,-11}, {-46,-10}, {-46,-9}, {-46,-8}, {-46,-7}, {-46,-6}, {-46,-5}, {-46,-4}, {-46,-3}, {-46,-2}, {-46,-1}, {-46,0}, {-46,1}, {-46,2}, {-46,3}, {-46,4}, {-46,5}, {-46,6}, {-46,7}, {-46,8}, {-46,9}, {-46,10}, {-46,11}, {-46,12}, {-46,13}, {-46,14}, {-46,15}, {-46,16}, {-46,17}, {-46,18}, {-46,19}, {-46,20}, {-46,21}, {-46,22}, {-46,23}, {-46,38}, {-46,39}, {-46,40}, {-46,41}, {-46,69}, {-46,70}, {-46,71}, {-46,72}, {-46,73}, {-46,94}, {-46,95}, {-46,96}, {-46,97}, {-46,100}, {-46,101}, {-46,102}, {-46,103}, {-46,104}, {-46,105}, {-46,106}, {-46,107}, {-46,108}, {-46,109}, {-46,110}, {-46,111}, {-46,112}, {-46,120}, {-46,121}, {-46,122}, {-46,123}, {-46,124}, {-45,-11}, {-45,-10}, {-45,-9}, {-45,-8}, {-45,-7}, {-45,-6}, {-45,-5}, {-45,-4}, {-45,-3}, {-45,-2}, {-45,-1}, {-45,0}, {-45,1}, {-45,2}, {-45,3}, {-45,4}, {-45,5}, {-45,6}, {-45,7}, {-45,8}, {-45,9}, {-45,10}, {-45,11}, {-45,12}, {-45,13}, {-45,14}, {-45,15}, {-45,16}, {-45,17}, {-45,18}, {-45,19}, {-45,20}, {-45,21}, {-45,22}, {-45,23}, {-45,38}, {-45,39}, {-45,40}, {-45,41}, {-45,69}, {-45,70}, {-45,71}, {-45,72}, {-45,73}, {-45,94}, {-45,95}, {-45,96}, {-45,97}, {-45,100}, {-45,101}, {-45,102}, {-45,103}, {-45,104}, {-45,105}, {-45,106}, {-45,107}, {-45,108}, {-45,109}, {-45,110}, {-45,111}, {-45,112}, {-45,113}, {-45,119}, {-45,120}, {-45,121}, {-45,122}, {-45,123}, {-45,124}, {-45,125}, {-44,-11}, {-44,-10}, {-44,-9}, {-44,-8}, {-44,-7}, {-44,-6}, {-44,-5}, {-44,-4}, {-44,-3}, {-44,-2}, {-44,-1}, {-44,0}, {-44,1}, {-44,2}, {-44,3}, {-44,4}, {-44,5}, {-44,6}, {-44,7}, {-44,8}, {-44,9}, {-44,10}, {-44,11}, {-44,12}, {-44,13}, {-44,14}, {-44,15}, {-44,16}, {-44,17}, {-44,18}, {-44,19}, {-44,20}, {-44,21}, {-44,22}, {-44,23}, {-44,38}, {-44,39}, {-44,40}, {-44,41}, {-44,69}, {-44,70}, {-44,71}, {-44,72}, {-44,73}, {-44,94}, {-44,95}, {-44,96}, {-44,97}, {-44,100}, {-44,101}, {-44,102}, {-44,103}, {-44,104}, {-44,105}, {-44,106}, {-44,107}, {-44,108}, {-44,109}, {-44,110}, {-44,111}, {-44,112}, {-44,120}, {-44,121}, {-44,122}, {-44,123}, {-44,124}, {-44,129}, {-44,130}, {-44,131}, {-44,132}, {-44,133}, {-43,-11}, {-43,-10}, {-43,-9}, {-43,-8}, {-43,-7}, {-43,-6}, {-43,-5}, {-43,-4}, {-43,-3}, {-43,-2}, {-43,-1}, {-43,0}, {-43,1}, {-43,2}, {-43,3}, {-43,4}, {-43,5}, {-43,6}, {-43,7}, {-43,8}, {-43,9}, {-43,10}, {-43,11}, {-43,12}, {-43,13}, {-43,14}, {-43,15}, {-43,16}, {-43,17}, {-43,18}, {-43,19}, {-43,20}, {-43,21}, {-43,22}, {-43,23}, {-43,38}, {-43,39}, {-43,40}, {-43,41}, {-43,70}, {-43,71}, {-43,72}, {-43,94}, {-43,95}, {-43,96}, {-43,97}, {-43,100}, {-43,101}, {-43,102}, {-43,103}, {-43,104}, {-43,105}, {-43,106}, {-43,107}, {-43,108}, {-43,109}, {-43,110}, {-43,111}, {-43,112}, {-43,120}, {-43,121}, {-43,122}, {-43,123}, {-43,124}, {-43,129}, {-43,130}, {-43,131}, {-43,132}, {-43,133}, {-42,-11}, {-42,-10}, {-42,-9}, {-42,-8}, {-42,-7}, {-42,-6}, {-42,-5}, {-42,-4}, {-42,-3}, {-42,-2}, {-42,-1}, {-42,0}, {-42,1}, {-42,2}, {-42,3}, {-42,4}, {-42,5}, {-42,6}, {-42,7}, {-42,8}, {-42,9}, {-42,10}, {-42,11}, {-42,12}, {-42,13}, {-42,14}, {-42,15}, {-42,16}, {-42,17}, {-42,18}, {-42,19}, {-42,20}, {-42,21}, {-42,22}, {-42,23}, {-42,38}, {-42,39}, {-42,40}, {-42,41}, {-42,94}, {-42,95}, {-42,96}, {-42,97}, {-42,100}, {-42,101}, {-42,102}, {-42,103}, {-42,104}, {-42,105}, {-42,106}, {-42,107}, {-42,108}, {-42,109}, {-42,110}, {-42,111}, {-42,112}, {-42,121}, {-42,129}, {-42,130}, {-42,131}, {-42,132}, {-42,133}, {-42,134}, {-41,-11}, {-41,-10}, {-41,-9}, {-41,-8}, {-41,-7}, {-41,-6}, {-41,-5}, {-41,-4}, {-41,-3}, {-41,-2}, {-41,-1}, {-41,0}, {-41,1}, {-41,2}, {-41,3}, {-41,4}, {-41,5}, {-41,6}, {-41,7}, {-41,8}, {-41,9}, {-41,10}, {-41,11}, {-41,12}, {-41,13}, {-41,14}, {-41,15}, {-41,16}, {-41,17}, {-41,18}, {-41,19}, {-41,20}, {-41,21}, {-41,22}, {-41,23}, {-41,38}, {-41,39}, {-41,40}, {-41,41}, {-41,94}, {-41,95}, {-41,96}, {-41,97}, {-41,98}, {-41,99}, {-41,100}, {-41,101}, {-41,102}, {-41,103}, {-41,104}, {-41,105}, {-41,106}, {-41,107}, {-41,108}, {-41,109}, {-41,110}, {-41,111}, {-41,112}, {-41,129}, {-41,130}, {-41,131}, {-41,132}, {-41,133}, {-40,-61}, {-40,-11}, {-40,-10}, {-40,-9}, {-40,-8}, {-40,-7}, {-40,-6}, {-40,-5}, {-40,-4}, {-40,-3}, {-40,-2}, {-40,-1}, {-40,0}, {-40,1}, {-40,2}, {-40,3}, {-40,4}, {-40,5}, {-40,6}, {-40,7}, {-40,8}, {-40,9}, {-40,10}, {-40,11}, {-40,12}, {-40,13}, {-40,14}, {-40,15}, {-40,16}, {-40,17}, {-40,18}, {-40,19}, {-40,20}, {-40,21}, {-40,22}, {-40,23}, {-40,38}, {-40,39}, {-40,40}, {-40,41}, {-40,94}, {-40,95}, {-40,96}, {-40,97}, {-40,100}, {-40,101}, {-40,102}, {-40,103}, {-40,104}, {-40,105}, {-40,106}, {-40,107}, {-40,108}, {-40,109}, {-40,110}, {-40,111}, {-40,112}, {-40,129}, {-40,130}, {-40,131}, {-40,132}, {-40,133}, {-39,-11}, {-39,-10}, {-39,-9}, {-39,-8}, {-39,-7}, {-39,-6}, {-39,-5}, {-39,-4}, {-39,-3}, {-39,-2}, {-39,-1}, {-39,0}, {-39,1}, {-39,2}, {-39,3}, {-39,4}, {-39,5}, {-39,6}, {-39,7}, {-39,8}, {-39,9}, {-39,10}, {-39,11}, {-39,12}, {-39,13}, {-39,14}, {-39,15}, {-39,16}, {-39,17}, {-39,18}, {-39,19}, {-39,20}, {-39,21}, {-39,22}, {-39,23}, {-39,38}, {-39,39}, {-39,40}, {-39,94}, {-39,95}, {-39,96}, {-39,97}, {-39,100}, {-39,101}, {-39,102}, {-39,103}, {-39,104}, {-39,105}, {-39,106}, {-39,107}, {-39,108}, {-39,109}, {-39,110}, {-39,111}, {-39,112}, {-39,130}, {-38,-11}, {-38,-10}, {-38,-9}, {-38,-8}, {-38,-7}, {-38,-6}, {-38,-5}, {-38,-4}, {-38,-3}, {-38,-2}, {-38,-1}, {-38,0}, {-38,1}, {-38,2}, {-38,3}, {-38,4}, {-38,5}, {-38,6}, {-38,7}, {-38,8}, {-38,9}, {-38,10}, {-38,11}, {-38,12}, {-38,13}, {-38,14}, {-38,15}, {-38,16}, {-38,17}, {-38,18}, {-38,19}, {-38,20}, {-38,21}, {-38,22}, {-38,23}, {-38,38}, {-38,39}, {-38,40}, {-38,41}, {-38,42}, {-38,43}, {-38,44}, {-38,45}, {-38,120}, {-38,121}, {-38,122}, {-38,123}, {-38,124}, {-37,5}, {-37,6}, {-37,7}, {-37,8}, {-37,9}, {-37,10}, {-37,11}, {-37,12}, {-37,13}, {-37,14}, {-37,15}, {-37,16}, {-37,17}, {-37,18}, {-37,19}, {-37,20}, {-37,21}, {-37,22}, {-37,23}, {-37,38}, {-37,39}, {-37,40}, {-37,41}, {-37,42}, {-37,43}, {-37,44}, {-37,45}, {-37,120}, {-37,121}, {-37,122}, {-37,123}, {-37,124}, {-36,-22}, {-36,-16}, {-36,10}, {-36,11}, {-36,12}, {-36,13}, {-36,14}, {-36,15}, {-36,16}, {-36,17}, {-36,18}, {-36,19}, {-36,20}, {-36,21}, {-36,22}, {-36,23}, {-36,38}, {-36,39}, {-36,40}, {-36,81}, {-36,82}, {-36,120}, {-36,121}, {-36,122}, {-36,123}, {-36,124}, {-36,125}, {-36,129}, {-36,130}, {-36,131}, {-36,132}, {-36,133}, {-35,38}, {-35,39}, {-35,40}, {-35,78}, {-35,79}, {-35,80}, {-35,81}, {-35,82}, {-35,83}, {-35,84}, {-35,85}, {-35,120}, {-35,121}, {-35,122}, {-35,123}, {-35,124}, {-35,129}, {-35,130}, {-35,131}, {-35,132}, {-35,133}, {-34,38}, {-34,39}, {-34,40}, {-34,78}, {-34,79}, {-34,80}, {-34,81}, {-34,82}, {-34,83}, {-34,84}, {-34,85}, {-34,86}, {-34,120}, {-34,121}, {-34,122}, {-34,123}, {-34,124}, {-34,129}, {-34,130}, {-34,131}, {-34,132}, {-34,133}, {-34,134}, {-33,-61}, {-33,25}, {-33,38}, {-33,39}, {-33,40}, {-33,78}, {-33,79}, {-33,80}, {-33,81}, {-33,82}, {-33,83}, {-33,84}, {-33,85}, {-33,121}, {-33,129}, {-33,130}, {-33,131}, {-33,132}, {-33,133}, {-32,38}, {-32,39}, {-32,40}, {-32,78}, {-32,79}, {-32,80}, {-32,81}, {-32,82}, {-32,83}, {-32,84}, {-32,85}, {-32,129}, {-32,130}, {-32,131}, {-32,132}, {-32,133}, {-31,38}, {-31,39}, {-31,40}, {-31,78}, {-31,79}, {-31,80}, {-31,81}, {-31,82}, {-31,83}, {-31,84}, {-31,85}, {-31,130}, {-30,38}, {-30,39}, {-30,40}, {-30,78}, {-30,79}, {-30,80}, {-30,81}, {-30,82}, {-30,83}, {-30,84}, {-30,85}, {-30,116}, {-29,38}, {-29,39}, {-29,40}, {-29,78}, {-29,79}, {-29,80}, {-29,81}, {-29,82}, {-29,83}, {-29,84}, {-29,85}, {-28,38}, {-28,39}, {-28,40}, {-28,78}, {-28,79}, {-28,80}, {-28,81}, {-28,82}, {-28,83}, {-28,84}, {-28,85}, {-28,119}, {-27,-61}, {-27,25}, {-27,38}, {-27,39}, {-27,40}, {-27,81}, {-27,82}, {-27,119}, {-26,38}, {-26,39}, {-26,40}, {-25,38}, {-25,39}, {-25,40}, {-25,120}, {-25,121}, {-25,122}, {-25,123}, {-25,124}, {-25,129}, {-25,130}, {-25,131}, {-25,132}, {-25,133}, {-24,38}, {-24,39}, {-24,40}, {-24,120}, {-24,121}, {-24,122}, {-24,123}, {-24,124}, {-24,129}, {-24,130}, {-24,131}, {-24,132}, {-24,133}, {-23,38}, {-23,39}, {-23,40}, {-23,120}, {-23,121}, {-23,122}, {-23,123}, {-23,124}, {-23,125}, {-23,129}, {-23,130}, {-23,131}, {-23,132}, {-23,133}, {-23,134}, {-22,38}, {-22,39}, {-22,40}, {-22,120}, {-22,121}, {-22,122}, {-22,123}, {-22,124}, {-22,129}, {-22,130}, {-22,131}, {-22,132}, {-22,133}, {-21,120}, {-21,121}, {-21,122}, {-21,123}, {-21,124}, {-21,129}, {-21,130}, {-21,131}, {-21,132}, {-21,133}, {-20,65}, {-20,120}, {-20,129}, {-19,62}, {-19,63}, {-19,64}, {-19,65}, {-19,66}, {-19,67}, {-18,61}, {-18,62}, {-18,63}, {-18,64}, {-18,65}, {-18,66}, {-18,67}, {-17,62}, {-17,63}, {-17,64}, {-17,65}, {-17,66}, {-17,67}, {-16,62}, {-16,63}, {-16,64}, {-16,65}, {-16,66}, {-16,67}, {-16,120}, {-16,121}, {-16,122}, {-16,123}, {-16,124}, {-16,129}, {-16,130}, {-16,131}, {-16,132}, {-16,133}, {-15,32}, {-15,34}, {-15,35}, {-15,39}, {-15,63}, {-15,66}, {-15,120}, {-15,121}, {-15,122}, {-15,123}, {-15,124}, {-15,129}, {-15,130}, {-15,131}, {-15,132}, {-15,133}, {-14,32}, {-14,33}, {-14,34}, {-14,35}, {-14,36}, {-14,37}, {-14,38}, {-14,39}, {-14,40}, {-14,43}, {-14,44}, {-14,45}, {-14,46}, {-14,47}, {-14,48}, {-14,49}, {-14,50}, {-14,51}, {-14,52}, {-14,53}, {-14,54}, {-14,57}, {-14,58}, {-14,59}, {-14,60}, {-14,61}, {-14,62}, {-14,63}, {-14,64}, {-14,65}, {-14,66}, {-14,67}, {-14,120}, {-14,121}, {-14,122}, {-14,123}, {-14,124}, {-14,125}, {-14,129}, {-14,130}, {-14,131}, {-14,132}, {-14,133}, {-14,134}, {-13,32}, {-13,34}, {-13,35}, {-13,36}, {-13,37}, {-13,38}, {-13,39}, {-13,40}, {-13,43}, {-13,44}, {-13,45}, {-13,46}, {-13,47}, {-13,48}, {-13,49}, {-13,50}, {-13,51}, {-13,52}, {-13,53}, {-13,54}, {-13,57}, {-13,58}, {-13,59}, {-13,60}, {-13,61}, {-13,62}, {-13,63}, {-13,64}, {-13,65}, {-13,66}, {-13,67}, {-13,120}, {-13,121}, {-13,122}, {-13,123}, {-13,124}, {-13,129}, {-13,130}, {-13,131}, {-13,132}, {-13,133}, {-12,32}, {-12,34}, {-12,35}, {-12,36}, {-12,39}, {-12,40}, {-12,43}, {-12,44}, {-12,47}, {-12,48}, {-12,49}, {-12,50}, {-12,53}, {-12,54}, {-12,57}, {-12,58}, {-12,61}, {-12,62}, {-12,63}, {-12,64}, {-12,65}, {-12,66}, {-12,67}, {-12,120}, {-12,121}, {-12,122}, {-12,123}, {-12,124}, {-12,129}, {-12,130}, {-12,131}, {-12,132}, {-12,133}, {-11,34}, {-11,35}, {-11,36}, {-11,39}, {-11,40}, {-11,43}, {-11,44}, {-11,47}, {-11,48}, {-11,49}, {-11,50}, {-11,53}, {-11,54}, {-11,57}, {-11,58}, {-11,61}, {-11,62}, {-11,63}, {-11,64}, {-11,65}, {-11,66}, {-11,67}, {-10,33}, {-10,34}, {-10,35}, {-10,36}, {-10,37}, {-10,38}, {-10,39}, {-10,40}, {-10,43}, {-10,44}, {-10,45}, {-10,46}, {-10,47}, {-10,48}, {-10,49}, {-10,50}, {-10,51}, {-10,52}, {-10,53}, {-10,54}, {-10,57}, {-10,58}, {-10,59}, {-10,60}, {-10,61}, {-10,62}, {-10,63}, {-10,64}, {-10,65}, {-10,66}, {-10,67}, {-10,69}, {-10,70}, {-9,33}, {-9,34}, {-9,35}, {-9,36}, {-9,37}, {-9,38}, {-9,39}, {-9,40}, {-9,41}, {-9,43}, {-9,44}, {-9,45}, {-9,46}, {-9,47}, {-9,48}, {-9,49}, {-9,50}, {-9,51}, {-9,52}, {-9,53}, {-9,54}, {-9,55}, {-9,57}, {-9,58}, {-9,59}, {-9,60}, {-9,61}, {-9,62}, {-9,63}, {-9,64}, {-9,65}, {-9,66}, {-9,67}, {-9,69}, {-9,70}, {-8,33}, {-8,34}, {-8,35}, {-8,36}, {-8,37}, {-8,38}, {-8,39}, {-8,40}, {-8,41}, {-8,43}, {-8,44}, {-8,45}, {-8,46}, {-8,47}, {-8,48}, {-8,49}, {-8,50}, {-8,51}, {-8,52}, {-8,53}, {-8,54}, {-8,55}, {-8,57}, {-8,58}, {-8,59}, {-8,60}, {-8,61}, {-8,62}, {-8,63}, {-8,64}, {-8,65}, {-8,66}, {-8,67}, {-8,69}, {-8,70}, {-8,120}, {-8,121}, {-8,122}, {-8,123}, {-8,124}, {-8,129}, {-8,130}, {-8,131}, {-8,132}, {-8,133}, {-7,33}, {-7,34}, {-7,35}, {-7,36}, {-7,37}, {-7,38}, {-7,39}, {-7,40}, {-7,43}, {-7,44}, {-7,45}, {-7,46}, {-7,47}, {-7,48}, {-7,49}, {-7,50}, {-7,51}, {-7,52}, {-7,53}, {-7,54}, {-7,57}, {-7,58}, {-7,59}, {-7,60}, {-7,61}, {-7,62}, {-7,63}, {-7,64}, {-7,65}, {-7,66}, {-7,67}, {-7,69}, {-7,70}, {-7,120}, {-7,121}, {-7,122}, {-7,123}, {-7,124}, {-7,125}, {-7,129}, {-7,130}, {-7,131}, {-7,132}, {-7,133}, {-6,34}, {-6,35}, {-6,36}, {-6,39}, {-6,40}, {-6,43}, {-6,44}, {-6,47}, {-6,48}, {-6,49}, {-6,50}, {-6,53}, {-6,54}, {-6,57}, {-6,58}, {-6,61}, {-6,62}, {-6,63}, {-6,64}, {-6,65}, {-6,66}, {-6,67}, {-6,120}, {-6,121}, {-6,122}, {-6,123}, {-6,124}, {-6,129}, {-6,130}, {-6,131}, {-6,132}, {-6,133}, {-5,32}, {-5,34}, {-5,35}, {-5,36}, {-5,39}, {-5,40}, {-5,43}, {-5,44}, {-5,47}, {-5,48}, {-5,49}, {-5,50}, {-5,53}, {-5,54}, {-5,57}, {-5,58}, {-5,61}, {-5,62}, {-5,63}, {-5,64}, {-5,65}, {-5,66}, {-5,67}, {-5,120}, {-5,121}, {-5,122}, {-5,123}, {-5,124}, {-5,129}, {-5,130}, {-5,131}, {-5,132}, {-5,133}, {-4,32}, {-4,34}, {-4,35}, {-4,36}, {-4,37}, {-4,38}, {-4,39}, {-4,40}, {-4,43}, {-4,44}, {-4,45}, {-4,46}, {-4,47}, {-4,48}, {-4,49}, {-4,50}, {-4,51}, {-4,52}, {-4,53}, {-4,54}, {-4,57}, {-4,58}, {-4,59}, {-4,60}, {-4,61}, {-4,62}, {-4,63}, {-4,64}, {-4,65}, {-4,66}, {-4,67}, {-4,72}, {-4,73}, {-4,74}, {-4,75}, {-4,76}, {-4,120}, {-4,121}, {-4,122}, {-4,123}, {-4,124}, {-4,129}, {-4,130}, {-4,131}, {-4,132}, {-4,133}, {-3,32}, {-3,33}, {-3,34}, {-3,35}, {-3,36}, {-3,37}, {-3,38}, {-3,39}, {-3,40}, {-3,43}, {-3,44}, {-3,45}, {-3,46}, {-3,47}, {-3,48}, {-3,49}, {-3,50}, {-3,51}, {-3,52}, {-3,53}, {-3,54}, {-3,57}, {-3,58}, {-3,59}, {-3,60}, {-3,61}, {-3,62}, {-3,63}, {-3,64}, {-3,65}, {-3,66}, {-3,67}, {-3,71}, {-3,72}, {-3,73}, {-3,74}, {-3,75}, {-3,76}, {-3,130}, {-2,32}, {-2,34}, {-2,35}, {-2,63}, {-2,66}, {-2,72}, {-2,73}, {-2,74}, {-2,75}, {-2,76}, {-1,62}, {-1,63}, {-1,64}, {-1,65}, {-1,66}, {-1,67}, {-1,74}, {0,62}, {0,63}, {0,64}, {0,65}, {0,66}, {0,67}, {0,72}, {0,73}, {0,74}, {0,75}, {0,76}, {1,62}, {1,63}, {1,64}, {1,65}, {1,66}, {1,67}, {1,72}, {1,73}, {1,74}, {1,75}, {1,76}, {2,62}, {2,63}, {2,64}, {2,65}, {2,66}, {2,67}, {2,72}, {2,73}, {2,74}, {2,75}, {2,76}, {4,-61}, {8,113}, {8,121}, {8,129}, {9,111}, {9,112}, {9,113}, {9,114}, {9,115}, {9,119}, {9,120}, {9,121}, {9,122}, {9,123}, {9,127}, {9,128}, {9,129}, {9,130}, {9,131}, {10,111}, {10,112}, {10,113}, {10,114}, {10,115}, {10,119}, {10,120}, {10,121}, {10,122}, {10,123}, {10,127}, {10,128}, {10,129}, {10,130}, {10,131}, {11,-51}, {11,-42}, {11,73}, {11,89}, {11,95}, {11,111}, {11,112}, {11,113}, {11,114}, {11,115}, {11,119}, {11,120}, {11,121}, {11,122}, {11,123}, {11,127}, {11,128}, {11,129}, {11,130}, {11,131}, {12,72}, {12,73}, {12,74}, {12,86}, {12,87}, {12,88}, {12,89}, {12,90}, {12,92}, {12,93}, {12,94}, {12,95}, {12,96}, {12,97}, {12,98}, {12,99}, {12,100}, {12,111}, {12,112}, {12,113}, {12,114}, {12,115}, {12,116}, {12,119}, {12,120}, {12,121}, {12,122}, {12,123}, {12,124}, {12,127}, {12,128}, {12,129}, {12,130}, {12,131}, {12,132}, {13,72}, {13,73}, {13,74}, {13,86}, {13,87}, {13,88}, {13,89}, {13,90}, {13,92}, {13,93}, {13,94}, {13,95}, {13,96}, {13,97}, {13,98}, {13,99}, {13,100}, {13,111}, {13,112}, {13,113}, {13,114}, {13,115}, {13,119}, {13,120}, {13,121}, {13,122}, {13,123}, {13,127}, {13,128}, {13,129}, {13,130}, {13,131}, {14,72}, {14,73}, {14,74}, {14,86}, {14,87}, {14,88}, {14,89}, {14,90}, {14,92}, {14,93}, {14,94}, {14,95}, {14,96}, {14,97}, {14,98}, {14,99}, {14,100}, {14,101}, {15,-51}, {15,-23}, {15,-15}, {15,-14}, {15,-1}, {15,56}, {15,57}, {15,58}, {15,59}, {15,60}, {15,61}, {15,62}, {15,72}, {15,73}, {15,74}, {15,86}, {15,87}, {15,88}, {15,89}, {15,90}, {15,92}, {15,93}, {15,94}, {15,95}, {15,96}, {15,97}, {15,98}, {15,99}, {15,100}, {16,56}, {16,62}, {16,63}, {16,72}, {16,73}, {16,74}, {16,86}, {16,87}, {16,88}, {16,89}, {16,90}, {16,92}, {16,93}, {16,94}, {16,95}, {16,96}, {16,97}, {16,98}, {16,99}, {16,100}, {17,3}, {17,4}, {17,5}, {17,6}, {17,7}, {17,8}, {17,9}, {17,10}, {17,11}, {17,12}, {17,13}, {17,14}, {17,15}, {17,16}, {17,17}, {17,18}, {17,19}, {17,20}, {17,21}, {17,22}, {17,23}, {17,24}, {17,25}, {17,26}, {17,27}, {17,28}, {17,29}, {17,30}, {17,31}, {17,32}, {17,33}, {17,34}, {17,35}, {17,36}, {17,37}, {17,38}, {17,39}, {17,40}, {17,41}, {17,42}, {17,43}, {17,44}, {17,56}, {17,62}, {17,72}, {17,73}, {17,74}, {17,86}, {17,87}, {17,88}, {17,89}, {17,90}, {17,92}, {17,93}, {17,94}, {17,95}, {17,96}, {17,97}, {17,98}, {17,99}, {17,100}, {18,3}, {18,4}, {18,5}, {18,6}, {18,7}, {18,8}, {18,9}, {18,10}, {18,11}, {18,12}, {18,13}, {18,14}, {18,15}, {18,16}, {18,17}, {18,18}, {18,19}, {18,20}, {18,21}, {18,22}, {18,23}, {18,24}, {18,25}, {18,26}, {18,27}, {18,28}, {18,29}, {18,30}, {18,31}, {18,32}, {18,33}, {18,34}, {18,35}, {18,36}, {18,37}, {18,38}, {18,39}, {18,40}, {18,41}, {18,42}, {18,43}, {18,44}, {18,56}, {18,62}, {18,72}, {18,73}, {18,74}, {18,86}, {18,87}, {18,88}, {18,89}, {18,90}, {18,92}, {18,93}, {18,94}, {18,95}, {18,96}, {18,97}, {18,98}, {18,99}, {18,100}, {18,113}, {18,121}, {18,129}, {19,3}, {19,4}, {19,7}, {19,8}, {19,11}, {19,12}, {19,15}, {19,16}, {19,19}, {19,20}, {19,23}, {19,24}, {19,27}, {19,28}, {19,31}, {19,32}, {19,35}, {19,36}, {19,39}, {19,40}, {19,43}, {19,44}, {19,56}, {19,62}, {19,72}, {19,73}, {19,74}, {19,86}, {19,87}, {19,88}, {19,89}, {19,90}, {19,92}, {19,93}, {19,94}, {19,95}, {19,96}, {19,97}, {19,98}, {19,99}, {19,100}, {19,111}, {19,112}, {19,113}, {19,114}, {19,115}, {19,119}, {19,120}, {19,121}, {19,122}, {19,123}, {19,127}, {19,128}, {19,129}, {19,130}, {19,131}, {20,-1}, {20,3}, {20,4}, {20,7}, {20,8}, {20,11}, {20,12}, {20,15}, {20,16}, {20,19}, {20,20}, {20,23}, {20,24}, {20,27}, {20,28}, {20,31}, {20,32}, {20,35}, {20,36}, {20,39}, {20,40}, {20,43}, {20,44}, {20,56}, {20,62}, {20,72}, {20,73}, {20,74}, {20,86}, {20,87}, {20,88}, {20,89}, {20,90}, {20,92}, {20,93}, {20,94}, {20,95}, {20,96}, {20,97}, {20,98}, {20,99}, {20,100}, {20,111}, {20,112}, {20,113}, {20,114}, {20,115}, {20,119}, {20,120}, {20,121}, {20,122}, {20,123}, {20,127}, {20,128}, {20,129}, {20,130}, {20,131}, {21,-6}, {21,-5}, {21,-4}, {21,-3}, {21,-2}, {21,-1}, {21,0}, {21,3}, {21,4}, {21,5}, {21,6}, {21,7}, {21,8}, {21,9}, {21,10}, {21,11}, {21,12}, {21,13}, {21,14}, {21,15}, {21,16}, {21,17}, {21,18}, {21,19}, {21,20}, {21,21}, {21,22}, {21,23}, {21,24}, {21,25}, {21,26}, {21,27}, {21,28}, {21,29}, {21,30}, {21,31}, {21,32}, {21,33}, {21,34}, {21,35}, {21,36}, {21,37}, {21,38}, {21,39}, {21,40}, {21,41}, {21,42}, {21,43}, {21,44}, {21,56}, {21,57}, {21,58}, {21,59}, {21,60}, {21,61}, {21,62}, {21,73}, {21,89}, {21,92}, {21,93}, {21,94}, {21,95}, {21,111}, {21,112}, {21,113}, {21,114}, {21,115}, {21,119}, {21,120}, {21,121}, {21,122}, {21,123}, {21,127}, {21,128}, {21,129}, {21,130}, {21,131}, {22,-6}, {22,-5}, {22,-4}, {22,-3}, {22,-2}, {22,-1}, {22,0}, {22,3}, {22,4}, {22,5}, {22,6}, {22,7}, {22,8}, {22,9}, {22,10}, {22,11}, {22,12}, {22,13}, {22,14}, {22,15}, {22,16}, {22,17}, {22,18}, {22,19}, {22,20}, {22,21}, {22,22}, {22,23}, {22,24}, {22,25}, {22,26}, {22,27}, {22,28}, {22,29}, {22,30}, {22,31}, {22,32}, {22,33}, {22,34}, {22,35}, {22,36}, {22,37}, {22,38}, {22,39}, {22,40}, {22,41}, {22,42}, {22,43}, {22,44}, {22,72}, {22,73}, {22,74}, {22,111}, {22,112}, {22,113}, {22,114}, {22,115}, {22,116}, {22,119}, {22,120}, {22,121}, {22,122}, {22,123}, {22,124}, {22,127}, {22,128}, {22,129}, {22,130}, {22,131}, {22,132}, {23,-5}, {23,-4}, {23,-1}, {23,0}, {23,3}, {23,4}, {23,7}, {23,8}, {23,11}, {23,12}, {23,15}, {23,16}, {23,19}, {23,20}, {23,23}, {23,24}, {23,27}, {23,28}, {23,31}, {23,32}, {23,35}, {23,36}, {23,39}, {23,40}, {23,43}, {23,44}, {23,72}, {23,73}, {23,74}, {23,111}, {23,112}, {23,113}, {23,114}, {23,115}, {23,119}, {23,120}, {23,121}, {23,122}, {23,123}, {23,127}, {23,128}, {23,129}, {23,130}, {23,131}, {24,-5}, {24,-4}, {24,-1}, {24,0}, {24,3}, {24,4}, {24,7}, {24,8}, {24,11}, {24,12}, {24,15}, {24,16}, {24,19}, {24,20}, {24,23}, {24,24}, {24,27}, {24,28}, {24,31}, {24,32}, {24,35}, {24,36}, {24,39}, {24,40}, {24,43}, {24,44}, {24,114}, {24,122}, {24,130}, {25,-6}, {25,-5}, {25,-4}, {25,-3}, {25,-2}, {25,-1}, {25,0}, {25,3}, {25,4}, {25,5}, {25,6}, {25,7}, {25,8}, {25,9}, {25,10}, {25,11}, {25,12}, {25,13}, {25,14}, {25,15}, {25,16}, {25,17}, {25,18}, {25,19}, {25,20}, {25,21}, {25,22}, {25,23}, {25,24}, {25,25}, {25,26}, {25,27}, {25,28}, {25,29}, {25,30}, {25,31}, {25,32}, {25,33}, {25,34}, {25,35}, {25,36}, {25,37}, {25,38}, {25,39}, {25,40}, {25,41}, {25,42}, {25,43}, {25,44}, {26,-6}, {26,-5}, {26,-4}, {26,-3}, {26,-2}, {26,-1}, {26,0}, {26,3}, {26,4}, {26,5}, {26,6}, {26,7}, {26,8}, {26,9}, {26,10}, {26,11}, {26,12}, {26,13}, {26,14}, {26,15}, {26,16}, {26,17}, {26,18}, {26,19}, {26,20}, {26,21}, {26,22}, {26,23}, {26,24}, {26,25}, {26,26}, {26,27}, {26,28}, {26,29}, {26,30}, {26,31}, {26,32}, {26,33}, {26,34}, {26,35}, {26,36}, {26,37}, {26,38}, {26,39}, {26,40}, {26,41}, {26,42}, {26,43}, {26,44}, {27,-5}, {27,-4}, {27,-1}, {27,0}, {27,3}, {27,4}, {27,7}, {27,8}, {27,11}, {27,12}, {27,15}, {27,16}, {27,19}, {27,20}, {27,23}, {27,24}, {27,27}, {27,28}, {27,31}, {27,32}, {27,35}, {27,36}, {27,39}, {27,40}, {27,43}, {27,44}, {28,-5}, {28,-4}, {28,-1}, {28,0}, {28,3}, {28,4}, {28,7}, {28,8}, {28,11}, {28,12}, {28,15}, {28,16}, {28,19}, {28,20}, {28,23}, {28,24}, {28,27}, {28,28}, {28,31}, {28,32}, {28,35}, {28,36}, {28,39}, {28,40}, {28,43}, {28,44}, {29,-62}, {29,-61}, {29,-60}, {29,-59}, {29,-58}, {29,-57}, {29,-56}, {29,-55}, {29,-54}, {29,-53}, {29,-52}, {29,-51}, {29,-50}, {29,-49}, {29,-48}, {29,-47}, {29,-6}, {29,-5}, {29,-4}, {29,-3}, {29,-2}, {29,-1}, {29,0}, {29,1}, {29,3}, {29,4}, {29,5}, {29,6}, {29,7}, {29,8}, {29,9}, {29,10}, {29,11}, {29,12}, {29,13}, {29,14}, {29,15}, {29,16}, {29,17}, {29,18}, {29,19}, {29,20}, {29,21}, {29,22}, {29,23}, {29,24}, {29,25}, {29,26}, {29,27}, {29,28}, {29,29}, {29,30}, {29,31}, {29,32}, {29,33}, {29,34}, {29,35}, {29,36}, {29,37}, {29,38}, {29,39}, {29,40}, {29,41}, {29,42}, {29,43}, {29,44}, {29,45}, {30,-62}, {30,-61}, {30,-60}, {30,-59}, {30,-58}, {30,-57}, {30,-56}, {30,-55}, {30,-54}, {30,-53}, {30,-52}, {30,-51}, {30,-50}, {30,-49}, {30,-48}, {30,-47}, {30,-6}, {30,-5}, {30,-4}, {30,-3}, {30,-2}, {30,-1}, {30,0}, {30,1}, {30,3}, {30,4}, {30,5}, {30,6}, {30,7}, {30,8}, {30,9}, {30,10}, {30,11}, {30,12}, {30,13}, {30,14}, {30,15}, {30,16}, {30,17}, {30,18}, {30,19}, {30,20}, {30,21}, {30,22}, {30,23}, {30,24}, {30,25}, {30,26}, {30,27}, {30,28}, {30,29}, {30,30}, {30,31}, {30,32}, {30,33}, {30,34}, {30,35}, {30,36}, {30,37}, {30,38}, {30,39}, {30,40}, {30,41}, {30,42}, {30,43}, {30,44}, {30,45}, {31,-62}, {31,-61}, {31,-60}, {31,-59}, {31,-58}, {31,-57}, {31,-56}, {31,-55}, {31,-54}, {31,-53}, {31,-52}, {31,-51}, {31,-50}, {31,-49}, {31,-48}, {31,-47}, {31,-5}, {31,-4}, {31,-1}, {31,0}, {31,3}, {31,4}, {31,7}, {31,8}, {31,11}, {31,12}, {31,15}, {31,16}, {31,19}, {31,20}, {31,23}, {31,24}, {31,27}, {31,28}, {31,31}, {31,32}, {31,35}, {31,36}, {31,39}, {31,40}, {31,43}, {31,44}, {32,-62}, {32,-61}, {32,-60}, {32,-59}, {32,-58}, {32,-57}, {32,-56}, {32,-55}, {32,-54}, {32,-53}, {32,-52}, {32,-51}, {32,-50}, {32,-49}, {32,-48}, {32,-47}, {32,-5}, {32,-4}, {32,-1}, {32,0}, {32,3}, {32,4}, {32,7}, {32,8}, {32,11}, {32,12}, {32,15}, {32,16}, {32,19}, {32,20}, {32,23}, {32,24}, {32,27}, {32,28}, {32,31}, {32,32}, {32,35}, {32,36}, {32,39}, {32,40}, {32,43}, {32,44}, {33,-62}, {33,-61}, {33,-60}, {33,-56}, {33,-55}, {33,-54}, {33,-53}, {33,-49}, {33,-48}, {33,-47}, {33,-6}, {33,-5}, {33,-4}, {33,-3}, {33,-2}, {33,-1}, {33,0}, {33,3}, {33,4}, {33,5}, {33,6}, {33,7}, {33,8}, {33,9}, {33,10}, {33,11}, {33,12}, {33,13}, {33,14}, {33,15}, {33,16}, {33,17}, {33,18}, {33,19}, {33,20}, {33,21}, {33,22}, {33,23}, {33,24}, {33,25}, {33,26}, {33,27}, {33,28}, {33,29}, {33,30}, {33,31}, {33,32}, {33,33}, {33,34}, {33,35}, {33,36}, {33,37}, {33,38}, {33,39}, {33,40}, {33,41}, {33,42}, {33,43}, {33,44}, {34,-62}, {34,-61}, {34,-60}, {34,-56}, {34,-55}, {34,-54}, {34,-53}, {34,-49}, {34,-48}, {34,-47}, {34,-6}, {34,-5}, {34,-4}, {34,-3}, {34,-2}, {34,-1}, {34,0}, {34,3}, {34,4}, {34,5}, {34,6}, {34,7}, {34,8}, {34,9}, {34,10}, {34,11}, {34,12}, {34,13}, {34,14}, {34,15}, {34,16}, {34,17}, {34,18}, {34,19}, {34,20}, {34,21}, {34,22}, {34,23}, {34,24}, {34,25}, {34,26}, {34,27}, {34,28}, {34,29}, {34,30}, {34,31}, {34,32}, {34,33}, {34,34}, {34,35}, {34,36}, {34,37}, {34,38}, {34,39}, {34,40}, {34,41}, {34,42}, {34,43}, {34,44}, {35,-62}, {35,-61}, {35,-60}, {35,-56}, {35,-55}, {35,-54}, {35,-53}, {35,-49}, {35,-48}, {35,-47}, {35,-5}, {35,-4}, {35,-1}, {35,0}, {35,3}, {35,4}, {35,7}, {35,8}, {35,11}, {35,12}, {35,15}, {35,16}, {35,19}, {35,20}, {35,23}, {35,24}, {35,27}, {35,28}, {35,31}, {35,32}, {35,35}, {35,36}, {35,39}, {35,40}, {35,43}, {35,44}, {36,-65}, {36,-64}, {36,-63}, {36,-62}, {36,-61}, {36,-60}, {36,-59}, {36,-58}, {36,-57}, {36,-56}, {36,-55}, {36,-54}, {36,-53}, {36,-52}, {36,-51}, {36,-50}, {36,-49}, {36,-48}, {36,-47}, {36,-46}, {36,-45}, {36,-44}, {36,-5}, {36,-4}, {36,-1}, {36,0}, {36,3}, {36,4}, {36,7}, {36,8}, {36,11}, {36,12}, {36,15}, {36,16}, {36,19}, {36,20}, {36,23}, {36,24}, {36,27}, {36,28}, {36,31}, {36,32}, {36,35}, {36,36}, {36,39}, {36,40}, {36,43}, {36,44}, {37,-65}, {37,-64}, {37,-63}, {37,-62}, {37,-61}, {37,-60}, {37,-59}, {37,-58}, {37,-57}, {37,-56}, {37,-55}, {37,-54}, {37,-53}, {37,-52}, {37,-51}, {37,-50}, {37,-49}, {37,-48}, {37,-47}, {37,-46}, {37,-45}, {37,-44}, {37,-6}, {37,-5}, {37,-4}, {37,-3}, {37,-2}, {37,-1}, {37,0}, {37,3}, {37,4}, {37,5}, {37,6}, {37,7}, {37,8}, {37,9}, {37,10}, {37,11}, {37,12}, {37,13}, {37,14}, {37,15}, {37,16}, {37,17}, {37,18}, {37,19}, {37,20}, {37,21}, {37,22}, {37,23}, {37,24}, {37,25}, {37,26}, {37,27}, {37,28}, {37,29}, {37,30}, {37,31}, {37,32}, {37,33}, {37,34}, {37,35}, {37,36}, {37,37}, {37,38}, {37,39}, {37,40}, {37,41}, {37,42}, {37,43}, {37,44}, {38,-65}, {38,-64}, {38,-63}, {38,-62}, {38,-61}, {38,-60}, {38,-59}, {38,-58}, {38,-57}, {38,-56}, {38,-55}, {38,-54}, {38,-53}, {38,-52}, {38,-51}, {38,-50}, {38,-49}, {38,-48}, {38,-47}, {38,-46}, {38,-45}, {38,-44}, {38,-6}, {38,-5}, {38,-4}, {38,-3}, {38,-2}, {38,-1}, {38,0}, {38,3}, {38,4}, {38,5}, {38,6}, {38,7}, {38,8}, {38,9}, {38,10}, {38,11}, {38,12}, {38,13}, {38,14}, {38,15}, {38,16}, {38,17}, {38,18}, {38,19}, {38,20}, {38,21}, {38,22}, {38,23}, {38,24}, {38,25}, {38,26}, {38,27}, {38,28}, {38,29}, {38,30}, {38,31}, {38,32}, {38,33}, {38,34}, {38,35}, {38,36}, {38,37}, {38,38}, {38,39}, {38,40}, {38,41}, {38,42}, {38,43}, {38,44}, {39,-65}, {39,-64}, {39,-63}, {39,-62}, {39,-61}, {39,-60}, {39,-59}, {39,-58}, {39,-57}, {39,-56}, {39,-55}, {39,-54}, {39,-53}, {39,-52}, {39,-51}, {39,-50}, {39,-49}, {39,-48}, {39,-47}, {39,-46}, {39,-45}, {39,-44}, {39,-5}, {39,-4}, {39,-1}, {39,0}, {39,3}, {39,4}, {39,7}, {39,8}, {39,11}, {39,12}, {39,15}, {39,16}, {39,19}, {39,20}, {39,23}, {39,24}, {39,27}, {39,28}, {39,31}, {39,32}, {39,35}, {39,36}, {39,39}, {39,40}, {39,43}, {39,44}, {39,64}, {39,72}, {39,73}, {39,91}, {39,116}, {39,136}, {40,-62}, {40,-61}, {40,-60}, {40,-56}, {40,-55}, {40,-54}, {40,-53}, {40,-49}, {40,-48}, {40,-47}, {40,-5}, {40,-4}, {40,-1}, {40,0}, {40,3}, {40,4}, {40,7}, {40,8}, {40,11}, {40,12}, {40,15}, {40,16}, {40,19}, {40,20}, {40,23}, {40,24}, {40,27}, {40,28}, {40,31}, {40,32}, {40,35}, {40,36}, {40,39}, {40,40}, {40,43}, {40,44}, {40,63}, {40,64}, {40,65}, {40,66}, {40,67}, {40,68}, {40,69}, {40,70}, {40,71}, {40,72}, {40,73}, {40,81}, {40,82}, {40,83}, {40,84}, {40,85}, {40,86}, {40,87}, {40,88}, {40,89}, {40,90}, {40,91}, {40,92}, {40,93}, {40,94}, {40,95}, {40,96}, {40,97}, {40,98}, {40,99}, {40,100}, {40,101}, {40,102}, {40,103}, {40,110}, {40,111}, {40,112}, {40,113}, {40,114}, {40,115}, {40,116}, {40,117}, {40,118}, {40,119}, {40,120}, {40,121}, {40,122}, {40,128}, {40,129}, {40,130}, {40,131}, {40,132}, {40,133}, {40,134}, {40,135}, {40,136}, {40,137}, {40,138}, {41,-62}, {41,-61}, {41,-60}, {41,-56}, {41,-55}, {41,-54}, {41,-53}, {41,-49}, {41,-48}, {41,-47}, {41,-6}, {41,-5}, {41,-4}, {41,-3}, {41,-2}, {41,-1}, {41,0}, {41,3}, {41,4}, {41,5}, {41,6}, {41,7}, {41,8}, {41,9}, {41,10}, {41,11}, {41,12}, {41,13}, {41,14}, {41,15}, {41,16}, {41,17}, {41,18}, {41,19}, {41,20}, {41,21}, {41,22}, {41,23}, {41,24}, {41,25}, {41,26}, {41,27}, {41,28}, {41,29}, {41,30}, {41,31}, {41,32}, {41,33}, {41,34}, {41,35}, {41,36}, {41,37}, {41,38}, {41,39}, {41,40}, {41,41}, {41,42}, {41,43}, {41,44}, {41,63}, {41,64}, {41,65}, {41,66}, {41,67}, {41,68}, {41,69}, {41,70}, {41,71}, {41,72}, {41,73}, {41,81}, {41,82}, {41,83}, {41,84}, {41,85}, {41,86}, {41,87}, {41,88}, {41,89}, {41,90}, {41,91}, {41,92}, {41,93}, {41,94}, {41,95}, {41,96}, {41,97}, {41,98}, {41,99}, {41,100}, {41,101}, {41,102}, {41,103}, {41,110}, {41,111}, {41,112}, {41,113}, {41,114}, {41,115}, {41,116}, {41,117}, {41,118}, {41,119}, {41,120}, {41,121}, {41,122}, {41,128}, {41,129}, {41,130}, {41,131}, {41,132}, {41,133}, {41,134}, {41,135}, {41,136}, {42,-62}, {42,-61}, {42,-60}, {42,-56}, {42,-55}, {42,-54}, {42,-53}, {42,-49}, {42,-48}, {42,-47}, {42,-6}, {42,-5}, {42,-4}, {42,-3}, {42,-2}, {42,-1}, {42,0}, {42,3}, {42,4}, {42,5}, {42,6}, {42,7}, {42,8}, {42,9}, {42,10}, {42,11}, {42,12}, {42,13}, {42,14}, {42,15}, {42,16}, {42,17}, {42,18}, {42,19}, {42,20}, {42,21}, {42,22}, {42,23}, {42,24}, {42,25}, {42,26}, {42,27}, {42,28}, {42,29}, {42,30}, {42,31}, {42,32}, {42,33}, {42,34}, {42,35}, {42,36}, {42,37}, {42,38}, {42,39}, {42,40}, {42,41}, {42,42}, {42,43}, {42,44}, {42,63}, {42,64}, {42,65}, {42,66}, {42,67}, {42,68}, {42,69}, {42,70}, {42,71}, {42,72}, {42,73}, {42,80}, {42,81}, {42,82}, {42,83}, {42,84}, {42,85}, {42,86}, {42,87}, {42,88}, {42,89}, {42,90}, {42,91}, {42,92}, {42,93}, {42,94}, {42,95}, {42,96}, {42,97}, {42,98}, {42,99}, {42,100}, {42,101}, {42,102}, {42,103}, {42,104}, {42,109}, {42,110}, {42,111}, {42,112}, {42,113}, {42,114}, {42,115}, {42,116}, {42,117}, {42,118}, {42,119}, {42,120}, {42,121}, {42,122}, {42,128}, {42,129}, {42,130}, {42,131}, {42,132}, {42,133}, {42,134}, {42,135}, {42,136}, {42,137}, {42,138}, {43,-62}, {43,-61}, {43,-60}, {43,-59}, {43,-58}, {43,-57}, {43,-56}, {43,-55}, {43,-54}, {43,-53}, {43,-52}, {43,-51}, {43,-50}, {43,-49}, {43,-48}, {43,-47}, {43,-5}, {43,-4}, {43,-1}, {43,0}, {43,3}, {43,4}, {43,7}, {43,8}, {43,11}, {43,12}, {43,15}, {43,16}, {43,19}, {43,20}, {43,23}, {43,24}, {43,27}, {43,28}, {43,31}, {43,32}, {43,35}, {43,36}, {43,39}, {43,40}, {43,43}, {43,44}, {43,63}, {43,64}, {43,65}, {43,66}, {43,67}, {43,68}, {43,69}, {43,70}, {43,71}, {43,72}, {43,73}, {43,81}, {43,82}, {43,83}, {43,84}, {43,85}, {43,86}, {43,87}, {43,88}, {43,89}, {43,90}, {43,91}, {43,92}, {43,93}, {43,94}, {43,95}, {43,96}, {43,97}, {43,98}, {43,99}, {43,100}, {43,101}, {43,102}, {43,103}, {43,110}, {43,111}, {43,112}, {43,113}, {43,114}, {43,115}, {43,116}, {43,117}, {43,118}, {43,119}, {43,120}, {43,121}, {43,122}, {43,128}, {43,129}, {43,130}, {43,131}, {43,132}, {43,133}, {43,134}, {43,135}, {43,136}, {44,-62}, {44,-61}, {44,-60}, {44,-59}, {44,-58}, {44,-57}, {44,-56}, {44,-55}, {44,-54}, {44,-53}, {44,-52}, {44,-51}, {44,-50}, {44,-49}, {44,-48}, {44,-47}, {44,-5}, {44,-4}, {44,-1}, {44,0}, {44,3}, {44,4}, {44,7}, {44,8}, {44,11}, {44,12}, {44,15}, {44,16}, {44,19}, {44,20}, {44,23}, {44,24}, {44,27}, {44,28}, {44,31}, {44,32}, {44,35}, {44,36}, {44,39}, {44,40}, {44,43}, {44,44}, {44,62}, {44,63}, {44,64}, {44,65}, {44,66}, {44,67}, {44,68}, {44,69}, {44,70}, {44,71}, {44,72}, {44,73}, {44,81}, {44,82}, {44,83}, {44,84}, {44,85}, {44,86}, {44,87}, {44,88}, {44,89}, {44,90}, {44,91}, {44,92}, {44,93}, {44,94}, {44,95}, {44,96}, {44,97}, {44,98}, {44,99}, {44,100}, {44,101}, {44,102}, {44,103}, {44,110}, {44,111}, {44,112}, {44,113}, {44,114}, {44,115}, {44,116}, {44,117}, {44,118}, {44,119}, {44,120}, {44,121}, {44,122}, {44,128}, {44,129}, {44,130}, {44,131}, {44,132}, {44,133}, {44,134}, {44,135}, {44,136}, {44,137}, {44,138}, {45,-62}, {45,-61}, {45,-60}, {45,-59}, {45,-58}, {45,-57}, {45,-56}, {45,-55}, {45,-54}, {45,-53}, {45,-52}, {45,-51}, {45,-50}, {45,-49}, {45,-48}, {45,-47}, {45,-6}, {45,-5}, {45,-4}, {45,-3}, {45,-2}, {45,-1}, {45,0}, {45,1}, {45,3}, {45,4}, {45,5}, {45,6}, {45,7}, {45,8}, {45,9}, {45,10}, {45,11}, {45,12}, {45,13}, {45,14}, {45,15}, {45,16}, {45,17}, {45,18}, {45,19}, {45,20}, {45,21}, {45,22}, {45,23}, {45,24}, {45,25}, {45,26}, {45,27}, {45,28}, {45,29}, {45,30}, {45,31}, {45,32}, {45,33}, {45,34}, {45,35}, {45,36}, {45,37}, {45,38}, {45,39}, {45,40}, {45,41}, {45,42}, {45,43}, {45,44}, {45,45}, {45,63}, {45,64}, {45,65}, {45,66}, {45,67}, {45,68}, {45,69}, {45,70}, {45,71}, {45,72}, {45,73}, {45,81}, {45,82}, {45,83}, {45,84}, {45,85}, {45,86}, {45,87}, {45,88}, {45,89}, {45,90}, {45,91}, {45,92}, {45,93}, {45,94}, {45,95}, {45,96}, {45,97}, {45,98}, {45,99}, {45,100}, {45,101}, {45,102}, {45,103}, {45,110}, {45,111}, {45,112}, {45,113}, {45,114}, {45,115}, {45,116}, {45,117}, {45,118}, {45,119}, {45,120}, {45,121}, {45,122}, {45,128}, {45,129}, {45,130}, {45,131}, {45,132}, {45,133}, {45,134}, {45,135}, {45,136}, {46,-62}, {46,-61}, {46,-60}, {46,-59}, {46,-58}, {46,-57}, {46,-56}, {46,-55}, {46,-54}, {46,-53}, {46,-52}, {46,-51}, {46,-50}, {46,-49}, {46,-48}, {46,-47}, {46,-6}, {46,-5}, {46,-4}, {46,-3}, {46,-2}, {46,-1}, {46,0}, {46,1}, {46,3}, {46,4}, {46,5}, {46,6}, {46,7}, {46,8}, {46,9}, {46,10}, {46,11}, {46,12}, {46,13}, {46,14}, {46,15}, {46,16}, {46,17}, {46,18}, {46,19}, {46,20}, {46,21}, {46,22}, {46,23}, {46,24}, {46,25}, {46,26}, {46,27}, {46,28}, {46,29}, {46,30}, {46,31}, {46,32}, {46,33}, {46,34}, {46,35}, {46,36}, {46,37}, {46,38}, {46,39}, {46,40}, {46,41}, {46,42}, {46,43}, {46,44}, {46,45}, {46,63}, {46,64}, {46,65}, {46,66}, {46,67}, {46,68}, {46,69}, {46,70}, {46,71}, {46,72}, {46,73}, {46,81}, {46,82}, {46,83}, {46,84}, {46,85}, {46,86}, {46,87}, {46,88}, {46,89}, {46,90}, {46,91}, {46,92}, {46,93}, {46,94}, {46,95}, {46,96}, {46,97}, {46,98}, {46,99}, {46,100}, {46,101}, {46,102}, {46,103}, {46,110}, {46,111}, {46,112}, {46,113}, {46,114}, {46,115}, {46,116}, {46,117}, {46,118}, {46,119}, {46,120}, {46,121}, {46,122}, {46,128}, {46,129}, {46,130}, {46,131}, {46,132}, {46,133}, {46,134}, {46,135}, {46,136}, {46,137}, {46,138}, {47,-60}, {47,-5}, {47,-4}, {47,-1}, {47,0}, {47,3}, {47,4}, {47,7}, {47,8}, {47,11}, {47,12}, {47,15}, {47,16}, {47,19}, {47,20}, {47,23}, {47,24}, {47,27}, {47,28}, {47,31}, {47,32}, {47,35}, {47,36}, {47,39}, {47,40}, {47,43}, {47,44}, {47,63}, {47,64}, {47,65}, {47,66}, {47,67}, {47,68}, {47,69}, {47,70}, {47,71}, {47,72}, {47,73}, {47,81}, {47,82}, {47,83}, {47,84}, {47,85}, {47,86}, {47,87}, {47,88}, {47,89}, {47,90}, {47,91}, {47,92}, {47,93}, {47,94}, {47,95}, {47,96}, {47,97}, {47,98}, {47,99}, {47,100}, {47,101}, {47,102}, {47,103}, {47,110}, {47,111}, {47,112}, {47,113}, {47,114}, {47,115}, {47,116}, {47,117}, {47,118}, {47,119}, {47,120}, {47,121}, {47,122}, {47,128}, {47,129}, {47,130}, {47,131}, {47,132}, {47,133}, {47,134}, {47,135}, {47,136}, {48,-60}, {48,-5}, {48,-4}, {48,-1}, {48,0}, {48,3}, {48,4}, {48,7}, {48,8}, {48,11}, {48,12}, {48,15}, {48,16}, {48,19}, {48,20}, {48,23}, {48,24}, {48,27}, {48,28}, {48,31}, {48,32}, {48,35}, {48,36}, {48,39}, {48,40}, {48,43}, {48,44}, {48,63}, {48,64}, {48,65}, {48,66}, {48,67}, {48,68}, {48,69}, {48,70}, {48,71}, {48,72}, {48,73}, {48,81}, {48,82}, {48,83}, {48,84}, {48,85}, {48,86}, {48,87}, {48,88}, {48,89}, {48,90}, {48,91}, {48,92}, {48,93}, {48,94}, {48,95}, {48,96}, {48,97}, {48,98}, {48,99}, {48,100}, {48,101}, {48,102}, {48,103}, {48,110}, {48,111}, {48,112}, {48,113}, {48,114}, {48,115}, {48,116}, {48,117}, {48,118}, {48,119}, {48,120}, {48,121}, {48,122}, {48,128}, {48,129}, {48,130}, {48,131}, {48,132}, {48,133}, {48,134}, {48,135}, {48,136}, {48,137}, {48,138}, {49,-6}, {49,-5}, {49,-4}, {49,-3}, {49,-2}, {49,-1}, {49,0}, {49,3}, {49,4}, {49,5}, {49,6}, {49,7}, {49,8}, {49,9}, {49,10}, {49,11}, {49,12}, {49,13}, {49,14}, {49,15}, {49,16}, {49,17}, {49,18}, {49,19}, {49,20}, {49,21}, {49,22}, {49,23}, {49,24}, {49,25}, {49,26}, {49,27}, {49,28}, {49,29}, {49,30}, {49,31}, {49,32}, {49,33}, {49,34}, {49,35}, {49,36}, {49,37}, {49,38}, {49,39}, {49,40}, {49,41}, {49,42}, {49,43}, {49,44}, {49,63}, {49,64}, {49,65}, {49,66}, {49,67}, {49,68}, {49,69}, {49,70}, {49,71}, {49,72}, {49,73}, {49,81}, {49,82}, {49,83}, {49,84}, {49,85}, {49,86}, {49,87}, {49,88}, {49,89}, {49,90}, {49,91}, {49,92}, {49,93}, {49,94}, {49,95}, {49,96}, {49,97}, {49,98}, {49,99}, {49,100}, {49,101}, {49,102}, {49,103}, {49,110}, {49,111}, {49,112}, {49,113}, {49,114}, {49,115}, {49,116}, {49,117}, {49,118}, {49,119}, {49,120}, {49,121}, {49,122}, {49,128}, {49,129}, {49,130}, {49,131}, {49,132}, {49,133}, {49,134}, {49,135}, {49,136}, {50,-6}, {50,-5}, {50,-4}, {50,-3}, {50,-2}, {50,-1}, {50,0}, {50,3}, {50,4}, {50,5}, {50,6}, {50,7}, {50,8}, {50,9}, {50,10}, {50,11}, {50,12}, {50,13}, {50,14}, {50,15}, {50,16}, {50,17}, {50,18}, {50,19}, {50,20}, {50,21}, {50,22}, {50,23}, {50,24}, {50,25}, {50,26}, {50,27}, {50,28}, {50,29}, {50,30}, {50,31}, {50,32}, {50,33}, {50,34}, {50,35}, {50,36}, {50,37}, {50,38}, {50,39}, {50,40}, {50,41}, {50,42}, {50,43}, {50,44}, {50,63}, {50,64}, {50,65}, {50,66}, {50,67}, {50,68}, {50,69}, {50,70}, {50,71}, {50,72}, {50,73}, {50,81}, {50,82}, {50,83}, {50,84}, {50,85}, {50,86}, {50,87}, {50,88}, {50,89}, {50,90}, {50,91}, {50,92}, {50,93}, {50,94}, {50,95}, {50,96}, {50,97}, {50,98}, {50,99}, {50,100}, {50,101}, {50,102}, {50,103}, {50,110}, {50,111}, {50,112}, {50,113}, {50,114}, {50,115}, {50,116}, {50,117}, {50,118}, {50,119}, {50,120}, {50,121}, {50,122}, {50,128}, {50,129}, {50,130}, {50,131}, {50,132}, {50,133}, {50,134}, {50,135}, {50,136}, {50,137}, {50,138}, {51,-5}, {51,-4}, {51,-1}, {51,0}, {51,3}, {51,4}, {51,7}, {51,8}, {51,11}, {51,12}, {51,15}, {51,16}, {51,19}, {51,20}, {51,23}, {51,24}, {51,27}, {51,28}, {51,31}, {51,32}, {51,35}, {51,36}, {51,39}, {51,40}, {51,43}, {51,44}, {51,63}, {51,64}, {51,65}, {51,66}, {51,67}, {51,68}, {51,69}, {51,70}, {51,71}, {51,72}, {51,73}, {51,81}, {51,82}, {51,83}, {51,84}, {51,85}, {51,86}, {51,87}, {51,88}, {51,89}, {51,90}, {51,91}, {51,92}, {51,93}, {51,94}, {51,95}, {51,96}, {51,97}, {51,98}, {51,99}, {51,100}, {51,101}, {51,102}, {51,103}, {51,111}, {52,-5}, {52,-4}, {52,-1}, {52,0}, {52,3}, {52,4}, {52,7}, {52,8}, {52,11}, {52,12}, {52,15}, {52,16}, {52,19}, {52,20}, {52,23}, {52,24}, {52,27}, {52,28}, {52,31}, {52,32}, {52,35}, {52,36}, {52,39}, {52,40}, {52,43}, {52,44}, {52,63}, {52,64}, {52,65}, {52,66}, {52,67}, {52,68}, {52,69}, {52,70}, {52,71}, {52,72}, {52,73}, {52,81}, {52,82}, {52,83}, {52,84}, {52,85}, {52,86}, {52,87}, {52,88}, {52,89}, {52,90}, {52,91}, {52,92}, {52,93}, {52,94}, {52,95}, {52,96}, {52,97}, {52,98}, {52,99}, {52,100}, {52,101}, {52,102}, {52,103}, {53,-6}, {53,-5}, {53,-4}, {53,-3}, {53,-2}, {53,-1}, {53,0}, {53,3}, {53,4}, {53,5}, {53,6}, {53,7}, {53,8}, {53,9}, {53,10}, {53,11}, {53,12}, {53,13}, {53,14}, {53,15}, {53,16}, {53,17}, {53,18}, {53,19}, {53,20}, {53,21}, {53,22}, {53,23}, {53,24}, {53,25}, {53,26}, {53,27}, {53,28}, {53,29}, {53,30}, {53,31}, {53,32}, {53,33}, {53,34}, {53,35}, {53,36}, {53,37}, {53,38}, {53,39}, {53,40}, {53,41}, {53,42}, {53,43}, {53,44}, {53,63}, {53,64}, {53,65}, {53,66}, {53,67}, {53,68}, {53,69}, {53,70}, {53,71}, {53,72}, {53,73}, {53,81}, {53,82}, {53,83}, {53,84}, {53,85}, {53,86}, {53,87}, {53,88}, {53,89}, {53,90}, {53,91}, {53,92}, {53,93}, {53,94}, {53,95}, {53,96}, {53,97}, {53,98}, {53,99}, {53,100}, {53,101}, {53,102}, {53,103}, {54,-6}, {54,-5}, {54,-4}, {54,-3}, {54,-2}, {54,-1}, {54,0}, {54,3}, {54,4}, {54,5}, {54,6}, {54,7}, {54,8}, {54,9}, {54,10}, {54,11}, {54,12}, {54,13}, {54,14}, {54,15}, {54,16}, {54,17}, {54,18}, {54,19}, {54,20}, {54,21}, {54,22}, {54,23}, {54,24}, {54,25}, {54,26}, {54,27}, {54,28}, {54,29}, {54,30}, {54,31}, {54,32}, {54,33}, {54,34}, {54,35}, {54,36}, {54,37}, {54,38}, {54,39}, {54,40}, {54,41}, {54,42}, {54,43}, {54,44}, {54,62}, {54,63}, {54,64}, {54,65}, {54,66}, {54,67}, {54,68}, {54,69}, {54,70}, {54,71}, {54,72}, {54,73}, {54,81}, {54,82}, {54,83}, {54,84}, {54,85}, {54,86}, {54,87}, {54,88}, {54,89}, {54,90}, {54,91}, {54,92}, {54,93}, {54,94}, {54,95}, {54,96}, {54,97}, {54,98}, {54,99}, {54,100}, {54,101}, {54,102}, {54,103}, {55,-1}, {55,3}, {55,4}, {55,7}, {55,8}, {55,11}, {55,12}, {55,15}, {55,16}, {55,19}, {55,20}, {55,23}, {55,24}, {55,27}, {55,28}, {55,31}, {55,32}, {55,35}, {55,36}, {55,39}, {55,40}, {55,43}, {55,44}, {55,63}, {55,64}, {55,65}, {55,66}, {55,67}, {55,68}, {55,69}, {55,70}, {55,71}, {55,72}, {55,73}, {55,81}, {55,82}, {55,83}, {55,84}, {55,85}, {55,86}, {55,87}, {55,88}, {55,89}, {55,90}, {55,91}, {55,92}, {55,93}, {55,94}, {55,95}, {55,96}, {55,97}, {55,98}, {55,99}, {55,100}, {55,101}, {55,102}, {55,103}, {55,125}, {55,131}, {56,-97}, {56,-96}, {56,-95}, {56,3}, {56,4}, {56,7}, {56,8}, {56,11}, {56,12}, {56,15}, {56,16}, {56,19}, {56,20}, {56,23}, {56,24}, {56,27}, {56,28}, {56,31}, {56,32}, {56,35}, {56,36}, {56,39}, {56,40}, {56,43}, {56,44}, {56,63}, {56,64}, {56,65}, {56,66}, {56,67}, {56,68}, {56,69}, {56,70}, {56,71}, {56,72}, {56,73}, {56,81}, {56,82}, {56,83}, {56,84}, {56,85}, {56,86}, {56,87}, {56,88}, {56,89}, {56,90}, {56,91}, {56,92}, {56,93}, {56,94}, {56,95}, {56,96}, {56,97}, {56,98}, {56,99}, {56,100}, {56,101}, {56,102}, {56,103}, {56,110}, {56,111}, {56,112}, {56,113}, {56,114}, {56,115}, {56,116}, {56,117}, {56,118}, {56,119}, {56,120}, {56,121}, {56,122}, {56,123}, {56,124}, {56,125}, {56,126}, {56,127}, {56,128}, {56,129}, {56,130}, {56,131}, {56,132}, {56,133}, {56,134}, {57,-97}, {57,-96}, {57,-95}, {57,-94}, {57,3}, {57,4}, {57,5}, {57,6}, {57,7}, {57,8}, {57,9}, {57,10}, {57,11}, {57,12}, {57,13}, {57,14}, {57,15}, {57,16}, {57,17}, {57,18}, {57,19}, {57,20}, {57,21}, {57,22}, {57,23}, {57,24}, {57,25}, {57,26}, {57,27}, {57,28}, {57,29}, {57,30}, {57,31}, {57,32}, {57,33}, {57,34}, {57,35}, {57,36}, {57,37}, {57,38}, {57,39}, {57,40}, {57,41}, {57,42}, {57,43}, {57,44}, {57,63}, {57,64}, {57,65}, {57,66}, {57,67}, {57,68}, {57,69}, {57,70}, {57,71}, {57,72}, {57,73}, {57,81}, {57,82}, {57,83}, {57,84}, {57,85}, {57,86}, {57,87}, {57,88}, {57,89}, {57,90}, {57,91}, {57,92}, {57,93}, {57,94}, {57,95}, {57,96}, {57,97}, {57,98}, {57,99}, {57,100}, {57,101}, {57,102}, {57,103}, {57,110}, {57,111}, {57,112}, {57,113}, {57,114}, {57,115}, {57,116}, {57,117}, {57,118}, {57,119}, {57,120}, {57,121}, {57,122}, {57,123}, {57,124}, {57,125}, {57,126}, {57,127}, {57,128}, {57,129}, {57,130}, {57,131}, {57,132}, {57,133}, {57,134}, {58,-97}, {58,-96}, {58,-95}, {58,3}, {58,4}, {58,5}, {58,6}, {58,7}, {58,8}, {58,9}, {58,10}, {58,11}, {58,12}, {58,13}, {58,14}, {58,15}, {58,16}, {58,17}, {58,18}, {58,19}, {58,20}, {58,21}, {58,22}, {58,23}, {58,24}, {58,25}, {58,26}, {58,27}, {58,28}, {58,29}, {58,30}, {58,31}, {58,32}, {58,33}, {58,34}, {58,35}, {58,36}, {58,37}, {58,38}, {58,39}, {58,40}, {58,41}, {58,42}, {58,43}, {58,44}, {58,63}, {58,64}, {58,65}, {58,66}, {58,67}, {58,68}, {58,69}, {58,70}, {58,71}, {58,72}, {58,73}, {58,81}, {58,82}, {58,83}, {58,84}, {58,85}, {58,86}, {58,87}, {58,88}, {58,89}, {58,90}, {58,91}, {58,92}, {58,93}, {58,94}, {58,95}, {58,96}, {58,97}, {58,98}, {58,99}, {58,100}, {58,101}, {58,102}, {58,103}, {58,110}, {58,111}, {58,112}, {58,113}, {58,114}, {59,-95}, {59,63}, {59,64}, {59,65}, {59,66}, {59,67}, {59,68}, {59,69}, {59,70}, {59,71}, {59,72}, {59,73}, {59,91}, {59,109}, {59,110}, {59,111}, {59,112}, {59,113}, {59,114}, {60,-96}, {60,-95}, {60,-94}, {60,-60}, {60,-34}, {60,-33}, {60,-32}, {60,-31}, {60,-30}, {60,-29}, {60,-28}, {60,-27}, {60,-26}, {60,-25}, {60,-24}, {60,-23}, {60,-22}, {60,-21}, {60,-20}, {60,-19}, {60,-18}, {60,-10}, {60,-9}, {60,63}, {60,64}, {60,65}, {60,66}, {60,67}, {60,68}, {60,69}, {60,70}, {60,71}, {60,72}, {60,73}, {60,110}, {60,111}, {60,112}, {60,113}, {60,114}, {61,-96}, {61,-95}, {61,-94}, {61,-93}, {61,-34}, {61,-33}, {61,-32}, {61,-31}, {61,-30}, {61,-29}, {61,-28}, {61,-27}, {61,-26}, {61,-25}, {61,-24}, {61,-23}, {61,-22}, {61,-21}, {61,-20}, {61,-19}, {61,-18}, {61,63}, {61,64}, {61,65}, {61,66}, {61,67}, {61,68}, {61,69}, {61,70}, {61,71}, {61,72}, {61,73}, {61,74}, {61,110}, {61,111}, {61,112}, {61,113}, {61,114}, {62,-96}, {62,-95}, {62,-94}, {62,-34}, {62,-33}, {62,-32}, {62,-31}, {62,-30}, {62,-29}, {62,-28}, {62,-27}, {62,-26}, {62,-25}, {62,-24}, {62,-23}, {62,-22}, {62,-21}, {62,-20}, {62,-19}, {62,-18}, {62,63}, {62,64}, {62,65}, {62,66}, {62,67}, {62,68}, {62,69}, {62,70}, {62,71}, {62,72}, {62,73}, {62,110}, {62,111}, {62,112}, {62,113}, {62,114}, {63,-94}, {63,-34}, {63,-33}, {63,-32}, {63,-31}, {63,-30}, {63,-29}, {63,-28}, {63,-27}, {63,-26}, {63,-25}, {63,-24}, {63,-23}, {63,-22}, {63,-21}, {63,-20}, {63,-19}, {63,-18}, {63,63}, {63,64}, {63,65}, {63,66}, {63,67}, {63,68}, {63,69}, {63,70}, {63,71}, {63,72}, {63,73}, {63,96}, {63,97}, {63,110}, {63,111}, {63,112}, {63,113}, {63,114}, {64,-95}, {64,-94}, {64,-93}, {64,-30}, {64,-22}, {64,62}, {64,63}, {64,64}, {64,65}, {64,66}, {64,67}, {64,68}, {64,69}, {64,70}, {64,71}, {64,72}, {64,73}, {64,81}, {64,82}, {64,83}, {64,84}, {64,85}, {64,91}, {64,92}, {64,93}, {64,94}, {64,95}, {64,96}, {64,97}, {64,98}, {64,99}, {64,110}, {64,111}, {64,112}, {64,113}, {64,114}, {65,-95}, {65,-94}, {65,-93}, {65,-92}, {65,-30}, {65,-22}, {65,63}, {65,64}, {65,65}, {65,66}, {65,67}, {65,68}, {65,69}, {65,70}, {65,71}, {65,72}, {65,73}, {65,80}, {65,81}, {65,82}, {65,83}, {65,84}, {65,85}, {65,86}, {65,91}, {65,92}, {65,93}, {65,94}, {65,95}, {65,96}, {65,97}, {65,98}, {65,99}, {65,110}, {65,111}, {65,112}, {65,113}, {65,114}, {66,-95}, {66,-94}, {66,-93}, {66,-34}, {66,-33}, {66,-32}, {66,-31}, {66,-30}, {66,-29}, {66,-28}, {66,-27}, {66,-26}, {66,-25}, {66,-24}, {66,-23}, {66,-22}, {66,-21}, {66,-20}, {66,-19}, {66,-18}, {66,63}, {66,64}, {66,65}, {66,66}, {66,67}, {66,68}, {66,69}, {66,70}, {66,71}, {66,72}, {66,73}, {66,81}, {66,82}, {66,83}, {66,84}, {66,85}, {66,91}, {66,92}, {66,93}, {66,94}, {66,95}, {66,96}, {66,97}, {66,98}, {66,99}, {66,110}, {66,111}, {66,112}, {66,113}, {66,114}, {67,-93}, {67,-81}, {67,-34}, {67,-33}, {67,-32}, {67,-31}, {67,-30}, {67,-29}, {67,-28}, {67,-27}, {67,-26}, {67,-25}, {67,-24}, {67,-23}, {67,-22}, {67,-21}, {67,-20}, {67,-19}, {67,-18}, {67,63}, {67,64}, {67,65}, {67,66}, {67,67}, {67,68}, {67,69}, {67,70}, {67,71}, {67,72}, {67,73}, {67,81}, {67,82}, {67,83}, {67,84}, {67,85}, {67,91}, {67,92}, {67,93}, {67,94}, {67,95}, {67,96}, {67,97}, {67,98}, {67,99}, {67,110}, {67,111}, {67,112}, {67,113}, {67,114}, {68,-94}, {68,-93}, {68,-92}, {68,-63}, {68,-58}, {68,-52}, {68,-45}, {68,-34}, {68,-33}, {68,-32}, {68,-31}, {68,-30}, {68,-29}, {68,-28}, {68,-27}, {68,-26}, {68,-25}, {68,-24}, {68,-23}, {68,-22}, {68,-21}, {68,-20}, {68,-19}, {68,-18}, {68,63}, {68,64}, {68,65}, {68,66}, {68,67}, {68,68}, {68,69}, {68,70}, {68,71}, {68,72}, {68,73}, {68,81}, {68,82}, {68,83}, {68,84}, {68,85}, {68,87}, {68,88}, {68,89}, {68,90}, {68,91}, {68,99}, {68,100}, {68,101}, {68,102}, {68,103}, {68,110}, {68,111}, {68,112}, {68,113}, {68,114}, {69,-94}, {69,-93}, {69,-92}, {69,-64}, {69,-63}, {69,-62}, {69,-61}, {69,-60}, {69,-59}, {69,-58}, {69,-57}, {69,-56}, {69,-55}, {69,-54}, {69,-53}, {69,-52}, {69,-51}, {69,-50}, {69,-49}, {69,-48}, {69,-47}, {69,-46}, {69,-45}, {69,-44}, {69,-43}, {69,-42}, {69,-41}, {69,-34}, {69,-33}, {69,-32}, {69,-31}, {69,-30}, {69,-29}, {69,-28}, {69,-27}, {69,-26}, {69,-25}, {69,-24}, {69,-23}, {69,-22}, {69,-21}, {69,-20}, {69,-19}, {69,-18}, {69,63}, {69,64}, {69,65}, {69,66}, {69,67}, {69,68}, {69,69}, {69,70}, {69,71}, {69,72}, {69,73}, {69,81}, {69,82}, {69,83}, {69,84}, {69,85}, {69,87}, {69,88}, {69,89}, {69,90}, {69,100}, {69,101}, {69,102}, {69,103}, {70,-94}, {70,-93}, {70,-92}, {70,-64}, {70,-63}, {70,-62}, {70,-61}, {70,-60}, {70,-59}, {70,-58}, {70,-57}, {70,-56}, {70,-55}, {70,-54}, {70,-53}, {70,-52}, {70,-51}, {70,-50}, {70,-49}, {70,-48}, {70,-47}, {70,-46}, {70,-45}, {70,-44}, {70,-43}, {70,-42}, {70,-41}, {70,-34}, {70,-33}, {70,-32}, {70,-31}, {70,-30}, {70,-29}, {70,-28}, {70,-27}, {70,-26}, {70,-25}, {70,-24}, {70,-23}, {70,-22}, {70,-21}, {70,-20}, {70,-19}, {70,-18}, {70,-1}, {70,0}, {70,1}, {70,9}, {70,10}, {70,20}, {70,21}, {70,22}, {70,37}, {70,38}, {70,39}, {70,63}, {70,64}, {70,65}, {70,66}, {70,67}, {70,68}, {70,69}, {70,70}, {70,71}, {70,72}, {70,73}, {70,81}, {70,82}, {70,83}, {70,84}, {70,85}, {70,87}, {70,88}, {70,89}, {70,90}, {70,100}, {70,101}, {70,102}, {70,103}, {70,104}, {71,-94}, {71,-93}, {71,-92}, {71,-64}, {71,-63}, {71,-62}, {71,-61}, {71,-60}, {71,-59}, {71,-53}, {71,-52}, {71,-47}, {71,-46}, {71,-45}, {71,-44}, {71,-43}, {71,-42}, {71,-41}, {71,-40}, {71,-34}, {71,-33}, {71,-32}, {71,-31}, {71,-30}, {71,-29}, {71,-28}, {71,-27}, {71,-26}, {71,-25}, {71,-24}, {71,-23}, {71,-22}, {71,-21}, {71,-20}, {71,-19}, {71,-18}, {71,9}, {71,10}, {71,63}, {71,64}, {71,65}, {71,66}, {71,67}, {71,68}, {71,69}, {71,70}, {71,71}, {71,72}, {71,73}, {71,81}, {71,82}, {71,83}, {71,84}, {71,85}, {71,87}, {71,88}, {71,89}, {71,90}, {71,100}, {71,101}, {71,102}, {71,103}, {72,-92}, {72,-64}, {72,-63}, {72,-62}, {72,-61}, {72,-60}, {72,-59}, {72,-50}, {72,-49}, {72,-48}, {72,-47}, {72,-46}, {72,-45}, {72,-44}, {72,-43}, {72,-42}, {72,-41}, {72,-34}, {72,-33}, {72,-32}, {72,-31}, {72,-30}, {72,-29}, {72,-28}, {72,-27}, {72,-26}, {72,-25}, {72,-24}, {72,-23}, {72,-22}, {72,-21}, {72,-20}, {72,-19}, {72,-18}, {72,-1}, {72,0}, {72,1}, {72,9}, {72,10}, {72,20}, {72,21}, {72,22}, {72,37}, {72,38}, {72,39}, {72,63}, {72,64}, {72,65}, {72,66}, {72,67}, {72,68}, {72,69}, {72,70}, {72,71}, {72,72}, {72,73}, {72,81}, {72,82}, {72,83}, {72,84}, {72,85}, {72,87}, {72,88}, {72,89}, {72,90}, {72,100}, {72,101}, {72,102}, {72,103}, {73,-93}, {73,-92}, {73,-91}, {73,-90}, {73,-64}, {73,-63}, {73,-62}, {73,-61}, {73,-60}, {73,-59}, {73,-50}, {73,-49}, {73,-48}, {73,-47}, {73,-46}, {73,-45}, {73,-44}, {73,-43}, {73,-42}, {73,-41}, {73,-34}, {73,-33}, {73,-32}, {73,-31}, {73,-30}, {73,-29}, {73,-28}, {73,-27}, {73,-26}, {73,-25}, {73,-24}, {73,-23}, {73,-22}, {73,-21}, {73,-20}, {73,-19}, {73,-18}, {73,-1}, {73,0}, {73,1}, {73,9}, {73,10}, {73,20}, {73,21}, {73,22}, {73,37}, {73,38}, {73,39}, {73,63}, {73,64}, {73,65}, {73,66}, {73,67}, {73,68}, {73,69}, {73,70}, {73,71}, {73,72}, {73,73}, {73,81}, {73,82}, {73,83}, {73,84}, {73,85}, {73,87}, {73,88}, {73,89}, {73,90}, {73,100}, {73,101}, {73,102}, {73,103}, {74,-93}, {74,-92}, {74,-91}, {74,-90}, {74,-64}, {74,-63}, {74,-62}, {74,-61}, {74,-60}, {74,-59}, {74,-50}, {74,-49}, {74,-48}, {74,-47}, {74,-46}, {74,-45}, {74,-44}, {74,-43}, {74,-42}, {74,-41}, {74,-34}, {74,-33}, {74,-32}, {74,-31}, {74,-30}, {74,-29}, {74,-28}, {74,-27}, {74,-26}, {74,-25}, {74,-24}, {74,-23}, {74,-22}, {74,-21}, {74,-20}, {74,-19}, {74,-18}, {74,-1}, {74,0}, {74,1}, {74,9}, {74,10}, {74,19}, {74,20}, {74,21}, {74,22}, {74,37}, {74,38}, {74,39}, {74,62}, {74,63}, {74,64}, {74,65}, {74,66}, {74,67}, {74,68}, {74,69}, {74,70}, {74,71}, {74,72}, {74,73}, {74,81}, {74,82}, {74,83}, {74,84}, {74,85}, {74,87}, {74,88}, {74,89}, {74,90}, {74,100}, {74,101}, {74,102}, {74,103}, {74,110}, {74,111}, {74,112}, {74,113}, {74,114}, {74,115}, {74,116}, {74,117}, {74,118}, {74,120}, {74,121}, {74,122}, {74,123}, {74,124}, {74,125}, {74,126}, {74,127}, {74,128}, {74,129}, {74,130}, {74,131}, {74,132}, {74,133}, {74,134}, {74,135}, {74,136}, {74,137}, {74,138}, {75,-93}, {75,-92}, {75,-91}, {75,-90}, {75,-34}, {75,-33}, {75,-32}, {75,-31}, {75,-30}, {75,-29}, {75,-28}, {75,-27}, {75,-26}, {75,-25}, {75,-24}, {75,-23}, {75,-22}, {75,-21}, {75,-20}, {75,-19}, {75,-18}, {75,-1}, {75,0}, {75,1}, {75,9}, {75,10}, {75,20}, {75,21}, {75,22}, {75,37}, {75,38}, {75,39}, {75,63}, {75,64}, {75,65}, {75,66}, {75,67}, {75,68}, {75,69}, {75,70}, {75,71}, {75,72}, {75,73}, {75,81}, {75,82}, {75,83}, {75,84}, {75,85}, {75,87}, {75,88}, {75,89}, {75,90}, {75,100}, {75,101}, {75,102}, {75,103}, {75,110}, {75,111}, {75,112}, {75,113}, {75,114}, {75,115}, {75,116}, {75,117}, {75,118}, {75,119}, {75,120}, {75,121}, {75,122}, {75,123}, {75,124}, {75,125}, {75,126}, {75,127}, {75,128}, {75,129}, {75,130}, {75,131}, {75,132}, {75,133}, {75,134}, {75,135}, {75,136}, {75,137}, {75,138}, {75,139}, {76,-93}, {76,-92}, {76,-91}, {76,-90}, {76,-34}, {76,-33}, {76,-32}, {76,-31}, {76,-30}, {76,-29}, {76,-28}, {76,-27}, {76,-26}, {76,-25}, {76,-24}, {76,-23}, {76,-22}, {76,-21}, {76,-20}, {76,-19}, {76,-18}, {76,-1}, {76,0}, {76,1}, {76,9}, {76,10}, {76,20}, {76,21}, {76,22}, {76,37}, {76,38}, {76,39}, {76,63}, {76,64}, {76,65}, {76,66}, {76,67}, {76,68}, {76,69}, {76,70}, {76,71}, {76,72}, {76,73}, {76,81}, {76,82}, {76,83}, {76,84}, {76,85}, {76,87}, {76,88}, {76,89}, {76,90}, {76,91}, {76,99}, {76,100}, {76,101}, {76,102}, {76,103}, {76,110}, {76,111}, {76,112}, {76,113}, {76,114}, {76,115}, {76,116}, {76,117}, {76,118}, {76,120}, {76,121}, {76,122}, {76,123}, {76,124}, {76,125}, {76,126}, {76,127}, {76,128}, {76,129}, {76,130}, {76,131}, {76,132}, {76,133}, {76,134}, {76,135}, {76,136}, {76,137}, {76,138}, {77,-91}, {77,-90}, {77,-30}, {77,-22}, {77,-1}, {77,0}, {77,1}, {77,9}, {77,10}, {77,20}, {77,21}, {77,22}, {77,37}, {77,38}, {77,39}, {77,63}, {77,64}, {77,65}, {77,66}, {77,67}, {77,68}, {77,69}, {77,70}, {77,71}, {77,72}, {77,73}, {77,91}, {77,92}, {77,93}, {77,94}, {77,95}, {77,96}, {77,97}, {77,98}, {77,99}, {77,110}, {77,111}, {77,112}, {77,113}, {77,114}, {77,115}, {77,116}, {77,117}, {77,118}, {77,120}, {77,132}, {77,133}, {77,134}, {77,135}, {77,136}, {77,137}, {77,138}, {78,-91}, {78,-90}, {78,-1}, {78,0}, {78,1}, {78,9}, {78,10}, {78,20}, {78,21}, {78,22}, {78,37}, {78,38}, {78,39}, {78,63}, {78,64}, {78,65}, {78,66}, {78,67}, {78,68}, {78,69}, {78,70}, {78,71}, {78,72}, {78,73}, {78,91}, {78,92}, {78,93}, {78,94}, {78,95}, {78,96}, {78,97}, {78,98}, {78,99}, {78,110}, {78,111}, {78,112}, {78,113}, {78,114}, {78,115}, {78,116}, {78,117}, {78,118}, {78,132}, {78,133}, {78,134}, {78,135}, {78,136}, {78,137}, {78,138}, {79,63}, {79,64}, {79,65}, {79,66}, {79,67}, {79,68}, {79,69}, {79,70}, {79,71}, {79,72}, {79,73}, {79,91}, {79,92}, {79,93}, {79,94}, {79,95}, {79,96}, {79,97}, {79,98}, {79,99}, {79,110}, {79,111}, {79,112}, {79,113}, {79,114}, {79,115}, {79,116}, {79,117}, {79,118}, {79,132}, {79,133}, {79,134}, {79,135}, {79,136}, {79,137}, {79,138}, {80,63}, {80,64}, {80,65}, {80,66}, {80,67}, {80,68}, {80,69}, {80,70}, {80,71}, {80,72}, {80,73}, {80,91}, {80,92}, {80,93}, {80,94}, {80,95}, {80,96}, {80,97}, {80,98}, {80,99}, {80,110}, {80,111}, {80,112}, {80,113}, {80,114}, {80,115}, {80,116}, {80,117}, {80,118}, {80,132}, {80,133}, {80,134}, {80,135}, {80,136}, {80,137}, {80,138}, {81,98}, {81,111}, {81,137}, {82,-30}, {82,-14}, {85,93}, {85,94}, }, + ["vegetation-green-grass-4"] = {{-81,-103}, {-81,-102}, {-80,-102}, {-80,-101}, {-80,-100}, {-80,-99}, {-79,-106}, {-79,-99}, {-79,-98}, {-78,-114}, {-78,-112}, {-78,-104}, {-78,-97}, {-77,-113}, {-77,-110}, {-77,-109}, {-77,-95}, {-77,87}, {-76,-111}, {-76,-102}, {-76,-101}, {-76,-100}, {-76,-92}, {-76,87}, {-75,-116}, {-75,-108}, {-75,-106}, {-75,-101}, {-75,-100}, {-75,-99}, {-75,-98}, {-75,-91}, {-74,-116}, {-74,-115}, {-74,-114}, {-74,-113}, {-74,-105}, {-74,-100}, {-74,-98}, {-74,-97}, {-74,88}, {-74,119}, {-73,-116}, {-73,-115}, {-73,-114}, {-73,-113}, {-73,-112}, {-73,-111}, {-73,-105}, {-73,-104}, {-73,-95}, {-72,-113}, {-72,-112}, {-72,-111}, {-72,-110}, {-72,-103}, {-72,-102}, {-72,-93}, {-71,-111}, {-71,-110}, {-71,-109}, {-71,-108}, {-71,-101}, {-71,-100}, {-71,-92}, {-70,-110}, {-70,-109}, {-70,-108}, {-70,-107}, {-70,-99}, {-69,-116}, {-69,-115}, {-69,-107}, {-69,-106}, {-69,-98}, {-69,-97}, {-69,-96}, {-69,-91}, {-69,-90}, {-69,-89}, {-69,85}, {-69,129}, {-68,-116}, {-68,-115}, {-68,-114}, {-68,-113}, {-68,-107}, {-68,-106}, {-68,-105}, {-68,-104}, {-68,-95}, {-68,-89}, {-68,73}, {-67,-114}, {-67,-113}, {-67,-112}, {-67,-105}, {-67,-104}, {-67,-103}, {-67,-94}, {-67,76}, {-67,80}, {-67,136}, {-66,-114}, {-66,-111}, {-66,-110}, {-66,-104}, {-66,-103}, {-66,-102}, {-66,-94}, {-66,-93}, {-66,-92}, {-66,76}, {-66,77}, {-66,81}, {-65,-109}, {-65,-108}, {-65,-103}, {-65,-102}, {-65,-93}, {-65,-92}, {-65,-91}, {-65,-90}, {-64,-110}, {-64,-107}, {-64,-99}, {-64,-91}, {-64,-90}, {-63,-108}, {-63,-107}, {-63,-106}, {-63,-105}, {-63,-100}, {-63,-99}, {-63,-98}, {-63,-97}, {-63,-96}, {-62,-107}, {-62,-106}, {-62,-103}, {-62,-98}, {-62,-97}, {-62,-96}, {-62,-95}, {-62,-94}, {-61,-114}, {-61,-113}, {-61,-106}, {-61,-103}, {-61,-102}, {-61,-97}, {-61,-96}, {-61,-95}, {-61,-94}, {-61,-93}, {-60,-114}, {-60,-113}, {-60,-112}, {-60,-104}, {-60,-103}, {-60,-102}, {-60,-101}, {-60,-93}, {-60,-92}, {-60,-91}, {-59,-112}, {-59,-111}, {-59,-102}, {-59,-101}, {-59,-100}, {-59,-99}, {-59,-93}, {-59,-92}, {-59,-91}, {-59,-90}, {-58,-111}, {-58,-110}, {-58,-109}, {-58,-101}, {-58,-100}, {-58,-99}, {-58,-97}, {-58,-91}, {-58,-90}, {-58,-89}, {-57,-109}, {-57,-100}, {-57,-99}, {-57,-96}, {-57,-95}, {-57,-90}, {-57,-89}, {-56,-108}, {-56,-105}, {-56,-95}, {-56,-94}, {-55,-114}, {-55,-107}, {-55,-106}, {-55,-103}, {-55,-97}, {-55,-96}, {-55,-92}, {-54,-114}, {-54,-113}, {-54,-112}, {-54,-106}, {-54,-105}, {-54,-103}, {-54,-102}, {-54,-96}, {-54,-95}, {-54,-92}, {-54,-91}, {-53,-114}, {-53,-113}, {-53,-112}, {-53,-111}, {-53,-105}, {-53,-102}, {-53,-101}, {-53,-93}, {-53,-92}, {-53,-91}, {-53,-90}, {-52,-112}, {-52,-109}, {-52,-101}, {-52,-100}, {-52,-92}, {-52,-91}, {-52,-90}, {-51,-112}, {-51,-111}, {-51,-99}, {-51,-98}, {-51,-90}, {-50,-109}, {-50,-108}, {-50,-107}, {-50,-101}, {-50,-97}, {-49,-108}, {-49,-107}, {-49,-105}, {-49,-99}, {-49,-94}, {-49,-93}, {-48,-103}, {-48,-97}, {-48,-96}, {-48,-91}, {-47,-102}, {-46,-112}, {-46,-111}, {-46,-102}, {-46,-101}, {-46,-100}, {-46,-93}, {-46,-92}, {-46,-90}, {-45,-111}, {-45,-110}, {-45,-109}, {-45,-101}, {-45,-100}, {-45,-99}, {-45,-90}, {-44,-109}, {-44,-108}, {-44,-107}, {-44,-90}, {-43,-107}, {-42,-103}, {-42,-97}, {-42,-94}, {-41,-110}, {-41,-104}, {-41,-101}, {-41,-96}, {-40,-110}, {-40,-109}, {-40,-108}, {-40,-103}, {-40,-100}, {-40,-94}, {-40,-93}, {-40,-92}, {-40,-91}, {-39,-109}, {-39,-108}, {-39,-107}, {-39,-102}, {-39,-101}, {-39,-100}, {-39,-99}, {-38,-108}, {-38,-105}, {-38,-100}, {-38,-97}, {-38,-96}, {-37,-105}, {-37,-104}, {-37,-96}, {-36,-105}, {-36,-104}, {-36,-103}, {-36,-97}, {-36,-92}, {-35,-110}, {-35,-109}, {-35,-103}, {-35,-79}, {-35,-78}, {-34,-110}, {-34,-109}, {-34,-108}, {-34,-101}, {-34,-92}, {-33,-110}, {-33,-109}, {-33,-108}, {-33,-107}, {-33,-100}, {-33,-98}, {-33,-97}, {-32,-109}, {-32,-108}, {-32,-96}, {-31,-107}, {-31,-106}, {-31,-95}, {-31,-94}, {-31,-80}, {-31,-77}, {-30,-104}, {-30,-95}, {-30,-94}, {-30,-93}, {-30,-92}, {-30,-80}, {-30,-77}, {-29,-102}, {-29,-100}, {-29,-93}, {-28,-109}, {-28,-108}, {-28,-101}, {-28,-100}, {-28,-99}, {-27,-109}, {-27,-108}, {-27,-107}, {-27,-106}, {-27,-99}, {-26,-104}, {-26,-97}, {-26,-94}, {-26,-93}, {-26,-80}, {-26,97}, {-26,98}, {-25,-105}, {-25,-102}, {-25,-96}, {-25,-95}, {-25,-94}, {-25,-93}, {-25,-81}, {-25,-80}, {-25,93}, {-25,98}, {-25,108}, {-24,-100}, {-24,-93}, {-23,-109}, {-23,-98}, {-22,-109}, {-22,-108}, {-22,-107}, {-21,-108}, {-21,-107}, {-21,-106}, {-21,-105}, {-21,-96}, {-20,-103}, {-20,-95}, {-20,-94}, {-20,-82}, {-20,-79}, {-20,-78}, {-20,34}, {-19,-105}, {-19,-102}, {-19,34}, {-18,-104}, {-18,-103}, {-18,110}, {-18,111}, {-17,-108}, {-17,-102}, {-16,-107}, {-16,-106}, {-16,-98}, {-16,-97}, {-16,-96}, {-16,-82}, {-16,-81}, {-15,-106}, {-15,-99}, {-15,-98}, {-15,-82}, {-15,-81}, {-15,113}, {-14,-105}, {-14,-104}, {-14,-103}, {-14,114}, {-13,-104}, {-13,-101}, {-13,-95}, {-12,-103}, {-12,-100}, {-12,-99}, {-11,-101}, {-11,-100}, {-11,-99}, {-11,-98}, {-11,-76}, {-10,-100}, {-10,-99}, {-10,-98}, {-10,-97}, {-10,-76}, {-6,-84}, {-6,-83}, {-6,-82}, {-6,-81}, {-6,-78}, {-5,-84}, {-5,-82}, {-5,-81}, {-5,-78}, {-3,86}, {-1,-84}, {-1,-81}, {-1,-80}, {0,-84}, {0,-81}, {0,-80}, {0,-75}, {1,-105}, {1,-104}, {2,-104}, {3,-103}, {3,-102}, {4,-104}, {4,-103}, {4,-102}, {4,-101}, {4,-100}, {4,-99}, {4,-81}, {4,-77}, {4,-76}, {5,-99}, {5,-98}, {5,-85}, {5,-84}, {5,-81}, {5,-77}, {5,-76}, {5,33}, {6,-97}, {6,31}, {6,32}, {6,33}, {7,-98}, {7,-97}, {7,-96}, {7,31}, {8,-97}, {8,-96}, {8,-18}, {8,23}, {8,24}, {8,29}, {9,-96}, {9,-95}, {9,-84}, {9,-83}, {9,-82}, {9,-81}, {9,-78}, {9,-77}, {9,-76}, {9,12}, {9,25}, {10,-95}, {10,-84}, {10,-83}, {10,-82}, {10,-81}, {10,-78}, {10,-77}, {10,141}, {11,-95}, {12,-95}, {12,-94}, {17,-80}, {18,140}, {23,-83}, {24,-83}, {26,-82}, {26,-42}, {27,-82}, {27,-42}, {29,-42}, {30,-42}, {31,-81}, {31,52}, {32,-42}, {33,-42}, {42,-42}, {43,-42}, {45,-42}, {46,-42}, {48,-42}, {49,-42}, {62,131}, {63,131}, {67,131}, {70,129}, }, + ["vegetation-green-grass-1"] = {{-79,73}, {-79,74}, {-78,72}, {-78,73}, {-69,91}, {-68,90}, {-68,91}, {-67,89}, {-67,90}, {-67,91}, {-66,87}, {-66,88}, {-66,89}, {-66,90}, {-66,91}, {-65,83}, {-65,84}, {-65,85}, {-65,86}, {-65,87}, {-65,88}, {-65,89}, {-65,90}, {-65,91}, {-59,72}, {-59,73}, {-59,75}, {-59,76}, {-59,77}, {-58,72}, {-58,73}, {-58,75}, {-58,76}, {-58,77}, {-57,77}, {-56,76}, {-56,77}, {-55,76}, {-55,77}, {-36,73}, {-35,73}, {-35,74}, {-35,75}, {-34,74}, {-34,75}, {-33,74}, {-33,75}, {-32,74}, {-32,75}, {-31,74}, {-31,75}, {-30,88}, {-30,89}, {-30,90}, {-29,88}, {-29,89}, {-29,90}, {-28,88}, {-28,89}, {-28,90}, {-28,91}, {-28,92}, {-28,93}, {-28,94}, {-28,95}, {-28,96}, {-28,97}, {-28,98}, {-28,99}, {-28,100}, {-28,101}, {-28,102}, {-28,103}, {-28,104}, {-28,111}, {-28,112}, {-28,113}, {-28,114}, {-27,88}, {-27,89}, {-27,90}, {-27,91}, {-27,92}, {-27,93}, {-27,94}, {-27,95}, {-27,96}, {-27,97}, {-27,98}, {-27,100}, {-27,101}, {-27,102}, {-27,103}, {-27,104}, {-27,111}, {-27,112}, {-27,113}, {-27,114}, {-26,88}, {-26,89}, {-26,90}, {-26,93}, {-26,94}, {-26,95}, {-26,96}, {-26,100}, {-26,101}, {-26,102}, {-26,103}, {-25,87}, {-25,88}, {-25,89}, {-25,90}, {-24,87}, {-24,88}, {-24,89}, {-24,90}, {-22,33}, {-22,34}, {-22,35}, {-21,34}, {-21,35}, {-20,83}, {-20,84}, {-20,85}, {-20,86}, {-20,87}, {-20,88}, {-19,83}, {-19,84}, {-19,97}, {-19,98}, {-19,99}, {-19,100}, {-19,101}, {-18,76}, {-18,77}, {-18,78}, {-18,79}, {-18,83}, {-18,84}, {-18,85}, {-18,95}, {-18,96}, {-18,97}, {-18,98}, {-18,99}, {-18,102}, {-18,103}, {-17,76}, {-17,77}, {-17,78}, {-17,79}, {-17,83}, {-17,84}, {-17,90}, {-17,98}, {-17,102}, {-17,103}, {-16,76}, {-16,77}, {-16,78}, {-16,79}, {-16,83}, {-16,84}, {-16,97}, {-16,99}, {-16,100}, {-16,117}, {-15,76}, {-15,77}, {-15,78}, {-15,79}, {-15,83}, {-15,117}, {-14,76}, {-14,77}, {-14,78}, {-14,79}, {-14,87}, {-14,116}, {-14,117}, {-13,76}, {-13,77}, {-13,78}, {-13,79}, {-13,87}, {-13,111}, {-13,116}, {-13,117}, {-12,77}, {-12,78}, {-12,87}, {-12,88}, {-12,110}, {-12,111}, {-12,112}, {-12,116}, {-12,117}, {-11,77}, {-11,78}, {-11,110}, {-11,111}, {-11,112}, {-11,113}, {-11,117}, {-10,110}, {-10,111}, {-10,112}, {-10,113}, {-10,117}, {-9,87}, {-9,88}, {-9,110}, {-9,111}, {-9,112}, {-9,113}, {-9,116}, {-9,117}, {-8,75}, {-8,76}, {-8,86}, {-8,89}, {-8,99}, {-8,100}, {-8,110}, {-8,111}, {-8,112}, {-8,113}, {-8,114}, {-8,115}, {-8,116}, {-8,117}, {-7,75}, {-7,76}, {-7,77}, {-7,88}, {-7,97}, {-7,98}, {-7,99}, {-7,100}, {-7,101}, {-7,111}, {-7,112}, {-7,113}, {-7,114}, {-7,115}, {-7,116}, {-7,117}, {-6,75}, {-6,76}, {-6,77}, {-6,78}, {-6,95}, {-6,96}, {-6,97}, {-6,98}, {-6,99}, {-6,100}, {-6,101}, {-6,102}, {-6,109}, {-6,110}, {-6,111}, {-6,112}, {-6,113}, {-6,114}, {-6,115}, {-6,116}, {-6,117}, {-5,78}, {-5,79}, {-5,93}, {-5,94}, {-5,95}, {-5,96}, {-5,97}, {-5,98}, {-5,99}, {-5,100}, {-5,101}, {-5,102}, {-5,103}, {-5,104}, {-5,105}, {-5,106}, {-5,107}, {-5,108}, {-5,109}, {-5,110}, {-5,111}, {-5,112}, {-5,113}, {-5,114}, {-5,115}, {-5,116}, {-5,117}, {-4,78}, {-4,79}, {-1,86}, {-1,87}, {-1,88}, {-1,89}, {0,78}, {0,86}, {0,87}, {0,88}, {0,89}, {1,35}, {1,78}, {1,85}, {1,86}, {1,87}, {1,88}, {1,89}, {2,35}, {2,78}, {2,79}, {2,80}, {2,81}, {2,82}, {2,86}, {2,87}, {2,88}, {2,89}, {3,35}, {4,35}, {7,32}, {7,33}, {7,34}, {7,35}, {8,31}, {8,32}, {8,33}, {8,34}, {8,35}, {9,-59}, {9,-58}, {9,27}, {9,32}, {9,33}, {9,34}, {9,35}, {17,-84}, {17,-83}, {18,-84}, {59,125}, {59,126}, {59,127}, {59,128}, {59,129}, {59,130}, {60,131}, {61,131}, {68,131}, {69,131}, {70,128}, {70,130}, {70,131}, {71,128}, {71,129}, {71,130}, {71,131}, {72,120}, {72,126}, {72,127}, {72,128}, {72,129}, {72,130}, {72,131}, }, + ["water-mud"] = {{-74,81}, {-73,80}, {-73,81}, {-73,82}, {-73,83}, {-72,80}, {-72,81}, {-72,82}, {-72,83}, {-71,79}, {-71,80}, {-71,82}, {-14,92}, {-14,93}, {-13,91}, {-13,92}, {-13,93}, {-13,94}, {-12,92}, {-12,93}, {-12,94}, {-11,92}, {-11,93}, {-11,94}, {-10,94}, {-10,95}, {-10,96}, {62,124}, {62,125}, {63,124}, {63,125}, {63,126}, {63,128}, {64,124}, {64,125}, {64,126}, {64,127}, {65,125}, {65,126}, {66,124}, {66,125}, {67,124}, {68,123}, {68,124}, }, + ["water"] = {{-58,56}, {-58,64}, {-57,57}, {-57,58}, {-57,59}, {-57,60}, {-57,61}, {-57,62}, {-57,63}, {-57,64}, {-57,65}, {-56,57}, {-56,58}, {-56,60}, {-56,61}, {-56,62}, {-56,63}, {-56,64}, {-56,65}, {-56,66}, {-55,59}, {-55,60}, {-55,61}, {-55,63}, {-55,64}, {-55,65}, {-55,66}, {-55,67}, {-54,59}, {-54,60}, {-54,61}, {-54,62}, {-54,63}, {-54,64}, {-54,65}, {-54,66}, {-54,67}, {-54,68}, {-53,62}, {-53,63}, {-53,64}, {-53,65}, {-53,66}, {-53,67}, {-53,68}, {-53,69}, {-52,62}, {-52,64}, {-52,65}, {-52,66}, {-52,67}, {-52,68}, {-52,69}, {-52,70}, {-52,76}, {-52,77}, {-52,78}, {-52,79}, {-52,80}, {-52,83}, {-52,84}, {-52,85}, {-52,86}, {-52,87}, {-52,88}, {-52,89}, {-52,90}, {-52,91}, {-51,49}, {-51,62}, {-51,65}, {-51,66}, {-51,67}, {-51,68}, {-51,69}, {-51,70}, {-51,76}, {-51,77}, {-51,78}, {-51,79}, {-51,80}, {-51,83}, {-51,84}, {-51,85}, {-51,86}, {-51,87}, {-51,88}, {-51,89}, {-51,90}, {-51,91}, {-50,62}, {-50,63}, {-50,64}, {-50,65}, {-50,66}, {-50,67}, {-50,68}, {-50,69}, {-50,70}, {-50,76}, {-50,77}, {-50,78}, {-50,79}, {-50,80}, {-50,83}, {-50,84}, {-50,85}, {-50,86}, {-50,87}, {-50,88}, {-50,89}, {-50,90}, {-50,91}, {-49,62}, {-49,64}, {-49,66}, {-49,67}, {-49,68}, {-49,69}, {-49,70}, {-49,76}, {-49,77}, {-49,78}, {-49,79}, {-49,80}, {-49,83}, {-49,84}, {-49,85}, {-49,86}, {-49,87}, {-49,88}, {-49,89}, {-49,90}, {-49,91}, {-48,64}, {-48,67}, {-48,68}, {-48,69}, {-48,70}, {-48,71}, {-48,76}, {-48,77}, {-48,78}, {-48,79}, {-48,80}, {-48,83}, {-48,84}, {-48,85}, {-48,86}, {-48,87}, {-48,88}, {-48,89}, {-48,90}, {-48,91}, {-47,64}, {-47,65}, {-47,66}, {-47,67}, {-47,75}, {-47,76}, {-47,77}, {-47,78}, {-47,79}, {-47,84}, {-47,85}, {-47,86}, {-47,87}, {-47,88}, {-47,89}, {-47,90}, {-47,91}, {-46,62}, {-46,66}, {-45,64}, {-45,66}, {-44,64}, {-44,65}, {-44,66}, {-43,65}, {-43,66}, {-43,67}, {-43,75}, {-43,76}, {-43,77}, {-43,78}, {-43,79}, {-43,84}, {-43,85}, {-43,86}, {-43,87}, {-43,88}, {-43,89}, {-43,90}, {-43,91}, {-42,63}, {-42,64}, {-42,66}, {-42,68}, {-42,69}, {-42,70}, {-42,71}, {-42,76}, {-42,77}, {-42,78}, {-42,79}, {-42,80}, {-42,83}, {-42,84}, {-42,85}, {-42,86}, {-42,87}, {-42,88}, {-42,89}, {-42,90}, {-42,91}, {-41,64}, {-41,66}, {-41,67}, {-41,68}, {-41,69}, {-41,70}, {-41,76}, {-41,77}, {-41,78}, {-41,79}, {-41,80}, {-41,83}, {-41,84}, {-41,85}, {-41,86}, {-41,87}, {-41,88}, {-41,89}, {-41,90}, {-41,91}, {-40,63}, {-40,64}, {-40,65}, {-40,66}, {-40,67}, {-40,68}, {-40,69}, {-40,70}, {-40,76}, {-40,77}, {-40,78}, {-40,79}, {-40,80}, {-40,83}, {-40,84}, {-40,85}, {-40,86}, {-40,87}, {-40,88}, {-40,89}, {-40,90}, {-40,91}, {-39,49}, {-39,62}, {-39,63}, {-39,65}, {-39,66}, {-39,67}, {-39,68}, {-39,69}, {-39,70}, {-39,76}, {-39,77}, {-39,78}, {-39,79}, {-39,80}, {-39,83}, {-39,84}, {-39,85}, {-39,86}, {-39,87}, {-39,88}, {-39,89}, {-39,90}, {-39,91}, {-38,62}, {-38,63}, {-38,64}, {-38,65}, {-38,66}, {-38,67}, {-38,68}, {-38,69}, {-38,70}, {-38,76}, {-38,77}, {-38,78}, {-38,79}, {-38,80}, {-38,83}, {-38,84}, {-38,85}, {-38,86}, {-38,87}, {-38,88}, {-38,89}, {-38,90}, {-38,91}, {-37,62}, {-37,64}, {-37,65}, {-37,66}, {-37,67}, {-37,68}, {-37,69}, {-36,61}, {-36,62}, {-36,63}, {-36,64}, {-36,65}, {-36,66}, {-36,67}, {-36,68}, {-35,59}, {-35,60}, {-35,64}, {-35,65}, {-35,66}, {-35,67}, {-34,57}, {-34,58}, {-34,61}, {-34,62}, {-34,63}, {-34,64}, {-34,65}, {-34,66}, {-33,56}, {-33,57}, {-33,58}, {-33,59}, {-33,60}, {-33,61}, {-33,62}, {-33,63}, {-33,64}, {-33,65}, {-32,56}, {-32,64}, {9,77}, {9,78}, {9,79}, {9,80}, {9,81}, {9,82}, {9,83}, {10,77}, {10,78}, {10,79}, {10,80}, {10,81}, {10,82}, {10,83}, {11,77}, {11,78}, {11,79}, {11,80}, {11,81}, {11,82}, {11,83}, {12,78}, {12,79}, {12,80}, {12,81}, {12,82}, {13,78}, {13,79}, {13,80}, {13,81}, {13,82}, {14,78}, {14,79}, {14,80}, {14,81}, {14,82}, {15,75}, {15,76}, {15,77}, {15,78}, {15,79}, {15,80}, {15,81}, {15,82}, {15,83}, {15,84}, {15,85}, {17,75}, {17,76}, {17,77}, {17,78}, {17,79}, {17,80}, {17,81}, {17,82}, {17,83}, {17,84}, {17,85}, {18,78}, {18,79}, {18,80}, {18,81}, {18,82}, {19,78}, {19,79}, {19,80}, {19,81}, {19,82}, {20,78}, {20,79}, {20,80}, {20,81}, {20,82}, {21,77}, {21,78}, {21,79}, {21,80}, {21,81}, {21,82}, {21,83}, {22,77}, {22,78}, {22,79}, {22,80}, {22,81}, {22,82}, {22,83}, {23,77}, {23,78}, {23,79}, {23,80}, {23,81}, {23,82}, {23,83}, {69,94}, {69,95}, {69,96}, {70,93}, {70,94}, {70,95}, {70,96}, {70,97}, {71,92}, {71,93}, {71,94}, {71,95}, {71,96}, {71,97}, {71,98}, {72,92}, {72,93}, {72,94}, {72,95}, {72,96}, {72,97}, {72,98}, {73,92}, {73,93}, {73,94}, {73,95}, {73,96}, {73,97}, {73,98}, {74,93}, {74,94}, {74,95}, {74,96}, {74,97}, {75,94}, {75,95}, {75,96}, }, + ["deepwater"] = {{-57,55}, {-57,56}, {-56,54}, {-56,55}, {-56,56}, {-56,59}, {-55,53}, {-55,54}, {-55,55}, {-55,56}, {-55,57}, {-55,58}, {-55,62}, {-54,52}, {-54,53}, {-54,54}, {-54,55}, {-54,56}, {-54,57}, {-54,58}, {-53,51}, {-53,52}, {-53,53}, {-53,54}, {-53,55}, {-53,56}, {-53,57}, {-53,58}, {-53,59}, {-53,60}, {-53,61}, {-52,50}, {-52,51}, {-52,52}, {-52,53}, {-52,54}, {-52,55}, {-52,56}, {-52,57}, {-52,58}, {-52,59}, {-52,60}, {-52,61}, {-52,63}, {-51,50}, {-51,51}, {-51,52}, {-51,53}, {-51,54}, {-51,55}, {-51,56}, {-51,57}, {-51,58}, {-51,59}, {-51,60}, {-51,61}, {-51,63}, {-51,64}, {-50,50}, {-50,51}, {-50,52}, {-50,53}, {-50,54}, {-50,55}, {-50,56}, {-50,57}, {-50,58}, {-50,59}, {-50,60}, {-50,61}, {-49,50}, {-49,51}, {-49,52}, {-49,53}, {-49,54}, {-49,55}, {-49,56}, {-49,57}, {-49,58}, {-49,59}, {-49,60}, {-49,61}, {-49,63}, {-49,65}, {-48,50}, {-48,51}, {-48,52}, {-48,53}, {-48,54}, {-48,55}, {-48,56}, {-48,57}, {-48,58}, {-48,59}, {-48,60}, {-48,61}, {-48,62}, {-48,63}, {-48,65}, {-48,66}, {-47,50}, {-47,51}, {-47,52}, {-47,53}, {-47,54}, {-47,55}, {-47,56}, {-47,57}, {-47,58}, {-47,59}, {-47,60}, {-47,61}, {-47,62}, {-47,63}, {-46,50}, {-46,51}, {-46,52}, {-46,53}, {-46,54}, {-46,55}, {-46,56}, {-46,57}, {-46,58}, {-46,59}, {-46,60}, {-46,61}, {-46,63}, {-46,64}, {-46,65}, {-45,50}, {-45,51}, {-45,52}, {-45,53}, {-45,54}, {-45,55}, {-45,56}, {-45,57}, {-45,58}, {-45,59}, {-45,60}, {-45,61}, {-45,62}, {-45,63}, {-45,65}, {-44,50}, {-44,51}, {-44,52}, {-44,53}, {-44,54}, {-44,55}, {-44,56}, {-44,57}, {-44,58}, {-44,59}, {-44,60}, {-44,61}, {-44,62}, {-44,63}, {-43,50}, {-43,51}, {-43,52}, {-43,53}, {-43,54}, {-43,55}, {-43,56}, {-43,57}, {-43,58}, {-43,59}, {-43,60}, {-43,61}, {-43,62}, {-43,63}, {-43,64}, {-42,50}, {-42,51}, {-42,52}, {-42,53}, {-42,54}, {-42,55}, {-42,56}, {-42,57}, {-42,58}, {-42,59}, {-42,60}, {-42,61}, {-42,62}, {-42,65}, {-42,67}, {-41,50}, {-41,51}, {-41,52}, {-41,53}, {-41,54}, {-41,55}, {-41,56}, {-41,57}, {-41,58}, {-41,59}, {-41,60}, {-41,61}, {-41,62}, {-41,63}, {-41,65}, {-40,50}, {-40,51}, {-40,52}, {-40,53}, {-40,54}, {-40,55}, {-40,56}, {-40,57}, {-40,58}, {-40,59}, {-40,60}, {-40,61}, {-40,62}, {-39,50}, {-39,51}, {-39,52}, {-39,53}, {-39,54}, {-39,55}, {-39,56}, {-39,57}, {-39,58}, {-39,59}, {-39,60}, {-39,61}, {-39,64}, {-38,50}, {-38,51}, {-38,52}, {-38,53}, {-38,54}, {-38,55}, {-38,56}, {-38,57}, {-38,58}, {-38,59}, {-38,60}, {-38,61}, {-37,51}, {-37,52}, {-37,53}, {-37,54}, {-37,55}, {-37,56}, {-37,57}, {-37,58}, {-37,59}, {-37,60}, {-37,61}, {-37,63}, {-36,52}, {-36,53}, {-36,54}, {-36,55}, {-36,56}, {-36,57}, {-36,58}, {-36,59}, {-36,60}, {-35,53}, {-35,54}, {-35,55}, {-35,56}, {-35,57}, {-35,58}, {-35,61}, {-35,62}, {-35,63}, {-34,54}, {-34,55}, {-34,56}, {-34,59}, {-34,60}, {-33,55}, }, + ["water-shallow"] = {{12,77}, {12,83}, {13,77}, {13,83}, {14,76}, {14,77}, {14,83}, {14,84}, {18,76}, {18,77}, {18,83}, {18,84}, {19,77}, {19,83}, {20,77}, {20,83}, {68,94}, {68,95}, {68,96}, {69,93}, {69,97}, {70,92}, {70,98}, {71,91}, {71,99}, {72,91}, {72,99}, {73,91}, {73,99}, {74,92}, {74,98}, {75,93}, {75,97}, {76,94}, {76,95}, {76,96}, }, + }, + blueprint_strings = { + { xadj = -2, yadj = 14, force_override = "ignore", + string = "0eNqcvdvOLcl1ZvcudS02Vmac9SqGYagl2iKgZjVICnKjoXc32Qb4L9ocEfGNy71Re9Q3V2ZEZMzj//zlv/7bv//2v//hd7//0y//+D9/+d0///r7P/7yj//b//zlj7/7v37/T//2l7/70//477/95R9/+d2ffvvffvmHX37/T//tL3/6459+/f1vf/Mf//Rv//bLf/7DL7/7/b/89v/+5R+f//zf/+GX3/7+T7/70+9++/9S/tcf/sf/8ft//2//9bd/+PN/8Hf+/W/+8O+/+/2fwf/91z/++d/9+vu//C//wvp81n9p//DL//jlH3/zvP2/tP/8z3/4//HehPc8R16JeJ8jr0a8cuS1iPceeT3i1SNvRM93/PDq3+fNiDePvGXfv/b3ec/HCiRgtEKedga+9hETMFsj4wzMFkk/A7NVcvGUs2Vy8ZSjdfI+x/f6iRbK+zkDlwWCyW+0Ut5yVPhGK+V9z8BopbztDIxWylvPwGilvP0MjFbK58vkF4DRSvn0M1CfKAWA0yokYLZSzgrLxz5lAmYrZZ2B2UqZZ2C0UspzBkYrpXzOwGillHJ8sUu0Usp7Bg4LJJOjlVLOm0OJVkqpR2CNVkoZZ2C0Usp5+6rRSinzDIxWyufrPfwAMFopn3oG6jPlAWC3CgmYrZR1Bk77lAkYrZT6HIEtWin1cwZGK6WWMzBaKfU9A6OVUtvxxW7RSqnnldKaBZLJ0Uqp46wwWim1n4HRSqnrDMxWyjwCe7RS2ucMzHxeP2v5L/fIvwuMVsrnPQPtmfKXq/PfBVarkIDRSmnPGdjlU0ZgtFLaxW8YrZR28RtGK6W1I3BkK6WegdFKaeP4Yo9opbR+BhYLJJOjldLWWWG2UuYZGK2Uft6+RrRS+ucMjFZKP++HI/MSfykEr/j82CNgAPCxCgkYrZRezsBiHwoBo5XS2xkYrZRez8BspYwzMFsp/QzMVso6v9jRSunzCFwfCwSTV7RSxnNWGK2Ucd4cVrRSRjkDo5Uy3jMwWimjnoHd7ocU1hsWCNGKNe0GS8BlP4kpQPOJlspoR4nP57HPGYnZYhkXxGy19AtitlzWBTFbL/OCGC2Y+Vy8PdGKmZ8L4rREtDpaM7OcNWbh+nmxCrN4/WwXxGjNzHpBjNbM7BfEaj0GLxGbJRYidrvjIjFbM+OCOO2TQWK2ZtaZmAXu57wgRmtmPRfEaM2szwUxWjPr4g3PgvfrvSA2S0SrozWz2oXGaM2sekGM1swaF8Rozax+JmYh/LUuiNmamRfE1+64HyJqP/JDxGp/R9TYLBE1dmn1ZxJxWOIi4pS7GWtclkgas2D+196DGrNo/tfew8TXakSri9WIxCp3M7a6WSJq7HIVssZhiagxWDPrG9gJuCRwUJqrdSsz0fqVmWhPGSYW+V3PxCrvcPios8j+1x2OiV3ePZg45N2DifqUwSez7H5LGrPw/rp4Mll8/1sjWZ0F+L81IrHYHRyJ9suMf0f7ZcYakzXzfO+PqHFExM8FcUbEckFcEfE9E6NA//O5WIVRpP/5XKzCKNT/tItnHcX6/4ZI72MU7H/axbOOov1Pu3nW3WpEq4fViMRozbSb9zFaM+3ifYxC/k+7OK+jmP/TLs7rJOj/Nx+kWIRUJJAiAFN/mSFRf5khUX+Z4c+ov8yQOK1GtHpZjUTMQv/z4nXMYv9fnmsmvlYjWl2sRiRW6V1nq5v0rjOxW41o9bAakahvM2j1kv56Ir4f7TNDovaZIVH7zLCSVPvMkFjtFy4Soy+zz7ggZreZfkHMbjPrgpjdZuYFMfoye8672RvlAPwNkTRGOQDP87kgRreZp1xYHd1mnou9J8oBeJ6LvSfKAXiei70nygF4nnFBjNbM0y+I094zkZjdZs7n9ft+rEZ6w9/H3jNR42vvmUgsViNaXa1GJDZ7F0aru70LI3FYjWj1tBqRuOx9HZs/fOx9HYmP1UhWl9dqRGK2ZtaF1dmamRfEZjWi1d1qRGK0ZvrFqRDlADz94lSIcgD+RiNZHeUA/I1GJEZrpl+cM1EOwNMvzpkoB+DpF3t4lAPw9Is9PMkB+BvXHvV1SVIA/gZIbVjCDIDngjitTwGJOmuGfsYsB+CbSBqzHIBvLwUSdTwTrS7Wp4Aaq9WIxGbvHkjMbjMXa6Zlt5l5QYxOmfdiFUY5AM97sQqjHIDnvViFUQ7A3xBRY3TKvBerMMoBeL7am7HV0SnzXqzrKAfg+eqlxcRozXw102JitGbei6MwywH4aqfFxGXv69iG7WN9Ckh8rEZ6w8McgIudYmgPAFqtPQBIbFYjWt2tRiT+f9fM//nvf/j9P/3zb//+/f+vFv99lo7+ozod/ccegzr6T0/ZR/+R+FqNaHWxGpFY7U0drW72po7EbjWi1cNqROK0N3W0etmbOhHXx2rExpyP1YjE13oT0OpivQlIrFYjWt2sRiR26/FAq4f1eCBxWo1o9bIasVNstmbO50z5ZGumXxBfqxGtLlYjErM1sy6sztbMvCB2qxGtHlYjEqM1M54Lq6M1M87nTMni/+O9ID7SlfkhoE3MfAhoq5lZoq1mZmKzGtHqbn16qNFWM7PGab0JSIxWzFcvbSRm0f+vZtpMjE6ZcvGss+j/V/drJkanzFf7a3x7suj/NxE1RqdMuXgfs+j/V0tttjo6Zb56ajMxWjPlYsPNov9fDZyRmEX/vzo4MzFaM18tnJkYrZl68TsWXTODxGp9ekhsViOtmTD6f7E/ZtH/dnFeZ9H/dnFeZ9H/drGHZ9H/drGH//+i/zu/4/or7e+zXuufQHXF+ieQqO/+9JRrs0TU2K03AYnD3tTR6mlv6khcViNZ3T5WIxIfe1Mnq9trb+pILFYjWl2tRiQ2e1NHq7u9qSNxWI1o9bQakbisN4GsziL/4+JrIov8j4tTIYv8j4tTIYv8j4uzP4v8j4s9vLv8sjWJ59LL1iLecN4JFjidA4WBMrcMTc76+38pRKCsLWPg6y5ZDIxWSj0/5SzcX89POYv214un3KVCBEYny8/cHTY5Olh+xuQwcEkgmZyF+3/m7qDCLNr/M3eHgfKqz8BspcwzsEqF+FDkPZ8Vyms+A4dUiCZPqRCB8o6PJi95xWegrCNDk5csI2Pgz0r53R9+/f1v/vlff/vHP+0Ti9haeb9ncc1dpxgoo5RssryosEJ5T2GgvKaQyfUjbykMlJcUMrl+5B2FgfKKwibLGworlBeUTjx5QRnEk+UvLFD2v2CgbH+BwEfWvuBv+MjSFwa+8msdTS7yax2BVSpEk5tUiMAu7xNo8pCf/wicUiGabC8oBHztBYVMfu0FBYGvVIgmF6kQgfaCgiY3eYVCYJcK0eQhFSJQ9rpgk2WrCwQW2ekCTQ6L9j9n4CtvPGhykTceBMo+l2yybHPJwO5qSNjk4UpIGCirXNhkWeSCwCprXNDkKktcGCgrXNhkWeDCQFnfwibL8hYG9lvvxXn3/4rT/y/Wf/z6678wsJ93/ypbWjBwSf8KAcMg/XkrDGP05zcmDNGfPxqyCP04P+UsQD/OTzmLz4/zGZ+F58f5jE+i89/OgUa86SZFMFCOSEZg1pf/pw/6qgR8JBAVvm7uBAOL9NigybLzKyuUKfmssEsHCwJtWB5NtmF5BMoRFmjykBMsGPi44RAMtF4v+g2H9XohsEoHCwLtXR5/Q3uXR4X2Lo9Ae5dHoL3LEzCswj9vX2ER/nn7mvYujybbuzwCq7yHoslN3kMRaO/yaLK9yyNwynsomrzkPZSAy97lyeRl7/IIfOVNGU0u8qaMQHuXR5PtXR6B3VUwsMlD3r8RKPtUsMmyTQUB28de6CsBH1cOwUDZo4JNli0qGFhdLQSb3FwpBAO7qwlgoM1iQaDNYkHgkgrpKYd19sfdpmVt9sfnDHylQjS5SIUIrNKJ8RKwSWAhoJzkwkB7o0egvdEj0N7o6aG8cooLKnxtoj0CXzdznU2WAykZWKVCNFkOPWagnHnMJg83Ep6BUypEk5dUSMAsOv/lxyaTs+j8lx8bga8EosnFDQhlhdXNB2Vgc8M8Gdil/xCBQ/oPETilQnzKSyokYBadr+dDKovO1/NTzqLz9XxIZdH5ej6ksuh8PW+w1eaxoMldullQ4ZCOIFQ4pUIELulmIWAWom/nQyoM0Z8PqSY7T7BC2XiCgbYuBU2WLScZ2KVCNHlIhQiU/SbZZNluEoFZ9Xw/31Oy4vl+PgK67DfBJstWk6xQdppkhbLRJANtBReaLNtMMnBKNwuaLJtMosJhs1k+BLTZLA8BX3nXQ2CRVzMEVnmTQmCTNyl8KF0CUeGQVzMETjfXlk1e8q5HwCxG/6WQTM5i9F8KEfi6Sb5scnGDfBlYpUI0uUmFCOxu0jCbPNygYQbKycVsshxcjAqzGP3PlGEGPrJ7CgJt3hcCbd4XAm21Iz3lZasdEdilVwRNttWOqHBKrwgqXDLVDRT2LEZf5xkoRxUx0OZ9fQho874QKOcUsclyUDErtL4vBMqRq2zylJdHVLgkkBRmMfp+PJd7FqPv8wy05SlocpEKEWjLU9DkJoGosLvL45wEHBK4CDjdFywDl/vgRGBWQf/zfcjAx30fMvB134cMLO77EF+bsIL+cwY2qRBNlpFHVigjjwyUkUc2WUYeEVhkrwk0OWx8f94cwr7357Vs296zyfLri4Ey8sgmdxcoZIXDfc4xUGbds8ky6x6BYQX9OpocVtDPM1Bm3bPJMuuegdV9tLPJzcVGGSiz7tlkmXXPwOm+sdnk5b6xEdjkPQVNbvKewsBXfhJ3AhYJHATMconbWWGWS1zPwOyeMs7A7J7Sz0A5eYiBS37BEjCL0X99YyNQeonxPcxi9F8KESi9xGyybNrNCpv8gkWF3TU3Y+CQCtFkWR3MCuVIe1QYTrQ/74fhQPt2VvjKD04EFvkpgiZX+SmCwCYVosldKkTgcIlkbPJ0iWQMlE2M0OQsRt/P+2EWo+/npZfF6Pv5UySL0ffzWs5i9F8KESg7d7PJsuaRgUMqRJNlPIWBsuYRTQ5n2M8zULb7QpPDCfbzDCzyo70SsEpgI2BzKUassLsUIwYOqRBNnlIhApcM0IDJI4vRf13NEPjIiA8CXxnxQWCRARoEVnkbRWBzY3AZ2KXCRsAhFSJwyustmrzk9ZaAj5wkjCY/cpAwA9+kr+dXTApNtjd6BNobPZrc5AUcFdobPSocrpsWK7Q3elQo+30h8LU3ejI5i9G3ega+UiGaXGSABhXKLkas0N7oUaG90SNQ5n2xybItMQPtjZ5MLrKLESossosRA195AUeTi7yAI1B2MWKTZRcjBtp4ykvAIYGFgLI+hRXK+hQEVlmfgiZXWZ/CQFmfwkBZn8LAKq9m+FCaBKLCLu96CBwyuw9NnvLyiEBZn4ImN1mfwsAsQ7IcTc7q6J/3DCxSIZpcpUIERivlOW+wWR39c95gszr657wfZjH653zqZTH6px+BWYz+mWfgI90s9Bt2OVibFdpcYlRoc4kRKAdrs8lysDYDh1SIJk+pEIHLNR1Ck7MYfT3vNlmMvp4/54bsYsTAEjnTzp9zYa/78344rO8Lgdb3hSYPV1HICmXNIwOt74uAYa/78344re8LgTaXGE22ucQItL4vNNn6vlCh9X0h0Pq+0GTr+0Lgkj4HKK8b6yOBDwEf6SJAha90ESCwSIVocpUKEdjkTQqBXV58EGjvKQi09xR8yksCQeHMYvRfFx8EZjf6dTJ5ZjH6r5sUAotUiCZXqRCB0Up5n7PJ0Up5P2fgkArR5CkVIjBaKW85mpzF6N/3DHwkkEzO6ujfdlYYrZS3noHRSnn7GdjkXQ9/Q9mbhYE26x5NnhKICpe8mhEwnER/PgLCSfTnIyCcRH8+AsI6+vMREMboz0dAFqNv5yMgi9G38xHw2mwWBE7XgYdNXrLCmoBFTq9Dk4ucXsdAm82CJhfpc0BglUA0uUkXASrs0omBwCEVoslTKkSgnMmFJmcx+n7ebbIYfT/vNvV1PocxCSiz7sciYJR1/1wojKqDf25SDIyyWX5uUgyMsll+7ikMjOan/Hy0MzDyff18tCMwitF/fj7aGRj1JX7Pr01WR/+en3JWR1/OTzmroy+fMzBaKaWcgdFKKRdPOVop5eIpRyul9DMwWinl/Npk8+jr2eRsHn09m5zNo6/nIyCbR/+lEIHVuZ3ZZDlpiIFdKkSTh1SIwOmcaQyUvi8EDun7YuDjXFX4lIf0fbFC6ftiYOb7Ou82WYz+Pe82WYz+Pe82WYz+Pe82WYz+PX9wZjH6i0+RLEb/pZBMzmL0XwoRGK2Ui4+lLEZ/8bGUxei/gGhyVvN4/vrKYvTlfAvIYvQXn3NTVnLxbyizWRC4pO+LgdL3xUDp+8KHsqTvi4FVKkSTm1SIQNlDkk2W0+tY4XTONFa4nDONgOsje0iSyesje0gyUE6vY5Pl9DoGyi5GbLKcXscKZSXXGATMKrnWGRjd6H8qaBgY3eh/6lMQGMXoPz/1KQyMbvQ/OUsMjG70P9UfDIxu9D9JUAzMvMT1DGzS7dwJ2CUQFUYr5ScJioFTOsbR5CUd4wTM5tE/580hm0f/nDeHbB79l1cETY5Wyk+KEQOrVIgmN6kQgdFK+XIEoclDhj8QOKVCNHlJhQQsHxmgIZPLIwM0CHylQjS5SIUIrDKEhCZnK6WfgV0qRJOHVIjAbKWcz5SyZBiOgPUjFZLJ9ZEKEfjKQCGaXGSgEIFVKkSTm1SIwC5DmWhyFnk8nylZjL6cz5QsRl/OZ0oWoy/nMyWL0ZfzmZLF6Mv5TAlj9OczJYzRn8+UMEZ/PlPCGP35TAlj9OczJYzRn48AHaMnhTpGTwp1jB6BNkaPJtsYPQKjlVLPXw5RjP5Tz69NFKP/BqLJ0Upp53M5i9F/zqdeFqP/nA+pIbsYocIhuxgx8JUK0eQiFSKwyugtApsMtiKwy9goAoeMjeJTnhKICpcMthIwi9FffH1lMfqLr68wRn9eKWGM/rxSwhj9+VwOY/TnczmM0Z/P5TBGfz6Xp5w0xCYv1zkZgVmM/uJzzs6jZ4Vy0hADZV9iBlYZsMbfUNanMFDWpzBQdpzg31B2nGDgkgrB5OeTBen754L4uAauZPSfia+MWTOxSI1sdZUamdhcE9eN1d11cd0QhySy1dNNZtlolJPpmRiG6380ViQ+MqzJxFfGNZlYpMaGxCo1MrFJ1xVb3aXviom2YoWttiUrTLT+MLT6tQ4x1PhajxgTX+lwYquLJLLGKl1OTGzS58RWd0lkjUN6nVijdYyxxiXdRKgxK7P/8hMxUfYDY6uLbAi2IRZ5AWaiHEa0IcppRBtilzdMftZDElnjlJdWJi7XN5atzgruv+7BTHykRrQ6a4v/pZGJxfUT2lhdXUOhDVH2PNpYLZsebYiy69HG6um6FG2Isu8RW91k4yPW2GTnow3xlXU8TLQ+AP4d5diVDVHOXdkQu7xf8+845P2aidYHwFZbHwASs0b5/WLNZJ3y+8WayVrl94vvnqxXfr/47skK8cfFd09WiT8udoqsFH9cfPdktfjj4rsnC/SPi++evqSXqxBx2OT9F4k2e5+Jr9TIVhepkYk2hYyttjlkTLRJZGy1zSJjok0jY+KS/h78HedHElFjFPX/fJVYs8ZX+nuYWKRGtrpKjUxs0oPEVndJZI1yevdGoxzfvSFavxlavazfjIlyNsuG+MqbJhOLvBcyscp7IT7rLAfgZjfLkgDqxR4eVupf7I9hqf7F/hjW6p/3x+cjh7RsiI9slPEi8ZWdMphYpEa2ukqNTGyyWQZb3WW3DCYOSWSrp0w/Yo3Zmjl/4z6P9QGg1Vlv/XGxrrPm+uNiXWfd9cfFus7a64+LdZ311x8X6zprsD8u1nXWYX9crOusxf64WNdZj/1x/u55sib742KnCCv4f3aKDxJfSXyQaHNnWKPNnWGi7YrMVtu2yEwcsmScrZ6yZpyJtjMyWl1sa2QmPrJcF63Oivm/CjyYaLsjs9W2PTITbb4ZW23zzZho883YaptvxkSbb4ZWZ0X95WLvyar668UeXm2+GWu0fjPWaP1mTGxSI1tt882YmNVhlgurozXzdS9k4pIa0eqsvP9LIxMzX/PFeZ0V+LeL8zqr8G8X53VW4t8uzuusxr9dnDNZkX+7OGeyKv92cc5kZf7t4pzJ6vzbxR6eFfq3i5Mrq/RvF6dCVurfLs7CrNa/X5wzWbF/vzhnsmr/fnHOZOX+/eKcyer9+8U5E+UBfPrFOZPlAfSLcybLA+gX50yWB9AvzpksD6BfnDNZHkC/OGeyPIB+cc5keQD94pzJ8gD6xTmT5QH0i3MmywPoF+dMlgfQL86ZLA+gX5wzWR5AvzhnsjyAfnHOZHkA4+KcyfIAxsU5E+UBfGtkq7vUyMRozYyLcybKA/iMi3MmygP41ohWR3kA3xqZGK2ZcXHORHkAn3FxzqwiNbLVVWpkYrZmLs6Zla2Zi3NmDamRrZ5SIxOzNXM+Z95PtmbmBfGRGh8kvlIjE6M1M58Lq6M1Mz8XxCY1stVdamRitGZmubA6WjPzvSAuqRGtzvoBzPeCGK2ZeT5n3qwfwKwXxCI1stVVamRitmbGhdXZmukXxCE1stVTamRitmYuzpmsH8C8OGeyPIB5cc5keQDz4pzJ8gDWxTmT5QGsi3MmywNYF+dMlgewLs6ZLA9gXZwzWR7AujhnsjyAdXHOZHkA6+KcyfIA1sU5k+UBrItzJssDWBfnTJYHsC7OmSwPYF2cM1kewLo4Z7I8gHVxzmR5AOvinMnyANbFOZPlAayLcybLA1gX50yWB7AuzpmsH8Dn4pzJ+gF8Ls6ZrB/A5+KcyfoBfC7OmWr7zrDVWf3MxTlTbUdmtDrrB/C5OGea7TuDVjfbd4aJRWpkq6vUyMQm6xWY2GW9AhOHrFdg4pTVBUxcsroAiVk/gItchbfbaZdMfGU2N66ZrB/Ahff6DfsBXLw9YT+Ai7eny0F+fSFRTvLbEOUovw1RzvJjYpYH8DM3bkN83PiXDfF12bMbYnHZsxtiltd88azDfgA3z7q7dd0nEodb1xvilBrZ6iU1InHK3rO9I/GRew8TZQ+NDVH20NgQq9x7mNjk3sNE2UNjQ5Q9NDbEKfceJspaACZm/QDGxZPJ+gF8rWsmym+zPpAov802xCr3nopEOWO5NyR2ufewxiH3HibabzO22n6bEbF85PhYtLp85PzYDVEOkN1YLSfIbohyMObGajkZc0PsUiNbPaRGJk55FrLVS56FSMzyAMp5NytZHsCXRia+8nRlq4skssasx/nFmsnyAH56+G6I2ei/94IYrZl6seNmeQD1YsfN8gDqxSoM5wJcrMJX1mluiK/rub8hyjrNDVHWaW6IzdUXbojd1RduiMPV7m2I09XubYjL1cUxMcsDaBdrpsiasw1R1pxtiLLmbEOUNWcbYnO1Uhtid7VSG+JwdUgb4nR1SBvicjU+TMzyAPrFmqmyfmZDlPUzG6Ksn9kQZf3Mhthc3ceG2F3dx4Y4XE3FhjhdTcWGuFy9AhOzfgDjYs00WQuwIcpagA1R1gJsiLIWYENsLod9Q+wuh31DHC4/fEOcLj98Q1wu95qJWT+AebFmusxr3hBlXvOGKPOaN0SZ17whNpePuyF2l4+7IQ6X67ohTpfruiEul0fKxCwPYF2smSFzNDdEmaO5IcoczQ1R5mhuiLLH+YbYXW7hhih7nG+Issf5hhjlATwXzzrKA/izyAtiFNN8Lp51lAfwPBfPOsoDeJ6LZx3lATzPxbPO5gI8FzGkbC7ARdy1ZHMBnosdN5sLcBHJLdlcgItIbsnyAC4iuSXLA3gv1nWWB/BerOssD+C9iMVlcwHei50imwvwXuwU2VyAL41sdbRmbuLX2VyAm2hzNhfgPa+Zms0FeM+5CjWbC3AREa/ZXICLiHjN5gJcxK9rNheglAuN2Qza94LYpUa2OlozpV1ojNZMqRfE5eYNMzGbC3CRWVCzuQAXeQA1mwtQLnaKbC7ARWZBfeTc5o3Vzc1E3mjsbibyhjjcvOENcbp5wxvicnN8mJjNBbiIsdf3cTNyNkQ5g3ZDlPNnNkQ5f2ZDlPNnNkQ5f2ZDHK6ea0Ocrp5rQ1yunouJJZs/c/GGl2wG7cUbXl43ZXlDzGbQXrzhRc5t3hDl3OYNUc5t3hDl3OYN0dbPMNHWzyCx2loA/KaothaAiXL+TH+RKOfPbIhy/syGKOfP9IJEOX9mQ5SzNDZWy1kaG+KSGtHqLA/gSyMTH5kzjFZneQBfX/asscicYSZWmTPMxCZzhvl37DJnmIk2r5mttnnNTLR5zUjsNq+ZiTavmYk2r5mJNq+ZiTavmYk/a+Z3f/j197/5j19//Zff/PO//vaPfzpkIeMbnuUBfN3imCjnz2yslvNnNsQlc6+RmOUBtIt1neUBtIt1neUBtIt1nfUDaBffZlk/gHaxU2T9ANrFThHOBbjYKcK5ABc7RTgX4GIVhnMBLlZhOBfgYhWGcwEuVmE4F+BiFWb9APrFKsz6AfSLNZP1A+gXayacC/Ccd4pwLsDFKgznAlyswq88gIvzelyc1+FcgIt1Hc4FuFjX4VyAi3UdzgW4WNfhXICLdR3OBbhY1+FcgIt1Hc4FuFjXWT+AebEKs34A87wKW9YPYJYL4iMzzpn4yoxzJhaZcc7EKjPOmdhkxjkTu8wPf5E4ZA47a5xSIxOXzGFHYtYPYF2swqwfwLpYhVk/gHWxCh/Zr3lDlP2aN0TZr3lDlP2aN8Qhc9hxFWb9ANbFKsz6AayLVZjlAXzlsKPVWR7A52JdZ3kAn4t1/ZUHcP7G/c6KZ6urzNxnjU1m7jOxy8x9tnrIzH0mTqmRrV5SIxKzPIDnfC9sWR7Ac7EKszyA52IVZnkAz8UqzPIAnnJhdZMVEEzsUiNbPaRGJk5ZpcFWL1lTgcQsD+C5WNdZHsBzsa7rK2sq2Ooi6z6YWKVGtrpJjUzsspKErR6ykoSJU2pkq5fUiMRsLsB7cc5kcwHei3MmmwvwXpwzzdbPMNHWz7DVtn6GibZ+hq0eUiMTbf0MW70kETV2Wz+DGrO5AO/FTpHNBSgX67rb+hkmVqmRrW5SIxNt/QxbPWSNDxOn1MhWL6kRieMjq4bQ6vHIqiEmvlIjW12kRiZWWdnEVjdZh8TELjWy1UNqZOKUdUhs9ZK1UkjM+gGUi1Mh6wdQLr4fs34A9eKcyfoB1ItzJusHcJFH2rJ+APXinMn6AdSLcybrB1AvzpmsH8BF9mzL+gFcZM+2rB9AvVjXWT+AerGus34AF1mfLesHcJH12bJ+ABdZny3rB3CR9dmWnHO2eTJD1u6xxik1MnHJ2j0i9qwfwEWOZs/6AbTzV0rP+gFcZH32rB/ARdZnz/oBXGRU9qwfwEVGZc/6AVxkVPasH8BFRmXP+gFcZFT2rB/ARUZlz/oBXGRU9qwfwDjfkHrWD2DUC2KRGtnqKjUy0c6feZBo5898kGjnzzDRzp9hq+38GSRmcwHefrY6mwvwXjyZ184GZKKdDcjEKjXyk2lSIxO7rAZkoq0549/R1pwxcUmNaHU2F+BLIxMfWYeEVodzAcqFRls/wxpt/QxrbDLPnjXaWgDWOGSePROnJLLVS2Z9IjGbC7Au3p5qe8/i71htvhlrLJLIGqvMk2KNTeZJMdHmm7HVNt+MiVPmSbHVS+ZJIbHZfDO0utl8Mya+Mk+KrS4yT4qJNt+Mrbb5ZkzsMk+KrR4yT4qJNt+Mrbb5ZkjM8gCei7tClgfwXNwVus03Y6ttvhkTq8yTYmKTeVJM7DIHiYlD5iAxccr8HiYumd+DxCwP4L1YhcPmzjDR5s4w0ebOMNH2nmWi7T3LxC7zKZg4ZD4FE6fMVcAdN8wDuNjDwzyAiz182t6zTHxlZgFbXWT2A2usUiMTbe9ZtrpLImscMleBiTYPgK22eQBIDPMALvbHMA/gYn/UeQBstc0DYGKVGtnqJjUyscuoPVs9ZNSeiVNG7Zm4ZNSeiCPMAxgXxEfG2Jn4yggkE4uMQDKxSo0PEpvUyMTI1/z567P+S9YCEKP4zGddEKP4zGdeELOY5nMmZv0AfrxcG2Lka/7xIG2IWe/Z94KY9Z5tF8Ss92y9IMo8gA0xywPoF8QhNS4kyjyAjUaZB8DELA/gSyNaneUBfGlkYrRm3oudIssDeC92iiwP4EsjW92kRiZGa+a92M2yPID3YjfL8gC+NLLVS2pEYpYH8F7suFkewHux42Z5AF8a2eoiNTKxuhykjdVNElljd1lNG41DEllj1uP8Yn/M8gDKxf6Y5QGUi/0xywMoF/tjNhegXOyP2VyAcrE/ZnMBysX+mM0FKBf7YzYXoFzsj+FcgIv9MZwLcLE/hnMBLvbHcC7AxVdzOBfgYsdtMkdzY7XM0dwQq8t/3FjdJJE1djdfYaNxSCJrnG5iw0bjchMbmBjOBbjYH8O5ABf7YzgX4GJ/zOYC1Iv9MZsLUC/2x96kRiZ2N1ViY/VwUyU2xCk1stVLakRiNhegXuyP2VyAerE/hnMBLvbHcC7AxTduOBfgYscN5wJcfOMOOUtjY/Vwky82xCk1stVLakRiNhegXezh2VyAdrGHZ3MB2sUens0FaBd7eDYXoF3s4dlcgHax42ZzAdqFDyCbC9AudtxsLkC78CrMJTUiMZsL0C/28GwuQL/Yw7O5AP1iD8/mAvSLPTybC9Av9vBsLkC/2HGzuQD9Yn/M5gL0i/0xmwvQL/bHbC5AP++PM5sL0M/748zmAvR+QZTzZzZWy/kzG6KcP7OxWs6f2RC71MhWD6mRidPVxW2sXm6iDROzPIBx3sNnlgcwPhfE183I2Vhd3IycDbFKjWx1kxqZ2N0cn43Vw83x2RCn1MhWL6kRiVkewLg4Z7I8gHFxzmR5AOPinMnyAMbFOZPlAYyLcybLAxgX58wrZzZtrJYzmzZEObNpY7Wc2cTELA9gXpwzWR7AvDhnsjyAeXHOZHkA8+KcyfIA5sU5k+UBzItzJssDmBfnTJYHMC/OmSwPYF6cM2E/gItzJssDmBfnTJYHMC/OmSwPYF6cM1kewLw4Z7I8gHlxzmR5APPinMnyAObFOZPlAcyLcybLA1gX50yWB7AuzpksD2BdnDNZHsC6OGeanHO2sbpIImusbnLaRmNzk9M2xC41stVDamTidNPdNlYvN92NiVkewLrYw7M8gHWxh2d5AOtiD8/yANbFHp7lAayLPTzLA1gXe3jWD+BzseNm/QA+F/tjl3PONhrlnDMmZv0APhd7T9YP4HOx9ww552xjtZxztiFWqZGtblIjE+Wcs43Vcs7ZhjilRrZ6SY1InHLOGVs95ZyzDfGVGtnqIjUyUc4521gt55xtiF1qZKuH1MhE2UNjQ5Q9NJiY9QO4yJ6dYT+Ai1NhyVkaG43FdUHYaKyuC8KG2KRGtrpLjUwcrgvChjhdF4QNcbmeBfhkVtgP4Pw7LjsXYKNRzgXYaCyus/tGo+wHsCHKfgAbYpca+XccUiMTp+xZ0JG4JHEQMewHcEN8ZLU0E19ZLc3EIiuRmVhlBS0Tm6xOZWKX1alMHLKWFN/wLA/gi8gal6wlRY3hXICLNzzLAygX72M4F+BzQSyyqpKJVVYDMrHJSjsmdllpx8Qh6+KYOKX/kd/wJYmosXyktxA1lkcSWeMrfXussUjfHhNlj/ON1bLH+YbYpW+PrR7St8dE2eN8Y7Xscc7E+pG+PbS6PtK3x0TZ43xjtexxviFW6dtjq5v07TFR9jjfWC17nG+IU/r22OolfXtIbLLHOVvdZI/zDfF1fa83VhfX93pDrFIjW92kRiZ215t7Y/WQRNY4XbfvjcYliagxmwtQLs7rbC5AuTivu+xxvrFa9jjfEOWs843Vctb5hihnnW+slrPON8QpYx9stZx1zhqzPIB6sWaGjc+wxldGKlhjkZEKJlapka1uUiMTu4ymsNVDRlOYOKVGtnpJjUicNj6DVmd5AO3iWU8bn2FicTORN1ZXNxN5Q2xuJvKG2N1M5A1xuJnIG+KUkTMmLknEtyfLA+gX3xRZHkC/+KbI8gD6xf6Y5QH0i/0xywMYF6swywMYF6swywMYF6swywMYF6swywMYF6swywMYx1X4frI8gHH0pfyZ+EiNTHxlJLcisUhiQ6LNa2aNTRJZo81rZo02r5k12rxm1mjzmpH42LxmtPqxec1MtHnNbLXNa2aizWtmq21eMxNtXjNbbfOamWjzmtlqm9eMxNfmNaPVr81rZqLNa2arbV4zE21eM1tt85qZaPOa2Wqb18xEOU9zQ5TzNJlY5DzNDVHO09wQra+ZidbXzETra8Y3vFhfMxOtr5mttr5mJlpfM1ttfc2osVpfM2qs1tfMGq2vmTVaXzMTra+Zrba+ZiZaXzNbbX3NTLS+Zrba+pqR2KyvGa1u1tfMGq2vmTUWSWSN1tfMGpskssYuva6scUgia5zSR8oal/QWIjHLAxgXaybLAxgXO26WBzAuVmGX8zQ3Vtv6GdZo62eYaOdpvkgckliQaPOaWaPNa0aNw+Y1o8Zh85pZo81rZo02r5mJNq+ZrbZ5zUy0ec1stc1rZqLNa2arbV4zEqfNa0arp81rZqLNa2arbV4zE21eM1tt85qZaPOa2Wqb18xEm9fMVtu8ZiQum9eMVi+b18zEV/p72Ooi/T1MtH4zttr6zZjYpQeJrR6SyBqn9CCxxiWJpPHJ8gDq+Zx5sjyA+l4Qrd+MrbZ+MyZW6e9hq5v09zDR+s3Yaus3Y2K0ZtpzYXXWQ+P8/fh85QH87g+//v43//Hrr//ym3/+19/+8U9/l3jxPmZ5AO1iFWZ5AO1iFWZ5AO1izWR5AK1daIzWTKsXxC69hUyM1kzrF8QpNfKTWdL/iBqzPIB+viE9WR5ArxdEm6PJVhdJZI1VZlQyscmsT7a6S41MHFIjWz2l15U1Lul1RWKWBzAuzpksD2Bc7OFZHsC4WIXF5mh+kFgl8UGizdFkjV0SWWOWo/lcaJzS68rEJYlodZYH8ClnjVkewJfXlYmv9LoysUiN/DtWqZGJTXpd2eouva5MHFIjWz2lRiYu6XVFq8N+AO8F8ZEa0eosD+BLIxOL9Lqy1VV6XZnYpEa2ukuNTBzS68pWT+l1ZeKSGtHqLA/gSyMTH5mZilZneQDvxbrO8gDeizc8ywN4L76kwn4AF+dM2A/g4pwJ+wFcrJmwH8DFmgn7AVysmSwPoFysmSwP4Mtnj1ZneQBfRNZYpM+eNVZJZI22XzNrtP2amTikRrZ6So1MXNLDjlZneQD14g3P8gDqxU0zywOoF2vmKw/gxsN+8dX8lQdwQ7xYM1keQLt4w7M8gHbxPmZ5AO1iDw/7Adw8mSV7FuDvGPYDuPhKCfsBXHyHh/0ALr7Dw34AF98UWR5Av/imyPIA+sX7mOUB9ItviiwPoF/s4VkeQL/Yw7M8gH7ew98sD6DPC+IjowAfJL4yCsAai9TIxCo97EyMfM0/Hs06kdglcSExy2tuF8RsLkC9IMq5AEzM5gJ8+gXxcVEAftZZHsBPFGBDLM5nvyFW57PfELO85veC2J2HfUMczsO+Icq85g1R5jUzMewH8JzXTNgP4HNBlHnNG6tlXvOGWKVGtrpJjUyUec0bq2Ve84Y4pUa2ekmNSCwyr5mtLjKveUN8pUa2ukiNTJT9mjdWy37NG2KXGtnqITUycboowMbqJYmoMcsDeC++pKrsobHRKHtobDTKHhobYpUa2eomNTJR9tDYWC17aGyIcp7mxmo5T5OJTc7TZKubjM9sNMp5mhuNMj6z0Sh7aGw0yh4aG2KXGtnqITUyUfbQ2Fgte2gwMcsDqBenQpYHUC/WTJYH0C6edZe1ABuirAXYEGUtwIYoawE2b4+Mz2w0TlddsCHKWgC2OssD6Bc7bpYH0C++KbI8gH6xZrI8gH6xZrI8gH5xv87yAPrFl32WB9Av1vWQfWc2xCn94R2JSxKpF/Ib5QF8e4ZR47S+Ztb4Ss8wa7S+ZtYoe2hsNMoeGhui9TWz1dbXzETra2arra8Zicv6mtHqZX3NTLS+Zrba+pqZaH3NbLX1NTPR+prZautrZqL1NbPV1tdMxPKxvuaOROtrZqL1NbPV1tfMRNlDY2O17KGxIVq/GVtt/WZMlL1nN1bL3rOs8ZG9Z1njI3vPbjTKHhobjbKHxoZo/WZstfWbMVH20NhYLXtobIjWb8ZWW78ZEl/Ze5atfmUPjY1G2UNjQ5S9ZzdWV0lkjU16kJjYpXeGrR6SyBqn9FOwRjnnjIlZHkA/fz+WIntobIiv9HxUJBZJbEiUM5s2GmU/gI1GObNpo1HObNpolDObNhrlzCYmVjmzia2ucmbThihnNm2sljObNkQ5s2ljtZzZtCHKmU0bq+XMpg1RzmzaWC1nNjGxyZlNbHWTM5s2RDmzaWO1nNm0IcqZTRur5cymDVHObNpYLWc2bYjZmrk4r8N+APNMzPIA3os9POwHcLGHh/0ALvbHsB/Axf4Y9gO42CmyPID34u0J+wHcPOshc+KYmPnNbp515je7eNZhP4CLcybsB3Dx9gzZr3lDlP2aN0Tra8Ydd1hfMxN7Un9dLm5IWR5AuVjXw/qamWh9zWj1jHrP1ouv5ml9zWh12A/gYjebNkeTrba+ZtZofc1MtDmabLXN0WSi9TWz1dbXjMRlczTR6mVzNJlofc1stc3RZI3W18wamySyRptvxhptvhkTra+Zrba+ZiLWz0d6XV8kPpJYkPhKrytrLJLIGqv0urLGJoms0eabsUabb8ZE62tmq62vGYmPzTdDqx+bb8ZE62tmq62vmYk234yttvlmTLS+Zrba+pqZaPPN2Gqbb4bE1/qa0erX+pqZaPPN2Gqbb8ZE62tmq62vmYld+nHZ6iH9uEy0vma22vqakVisrxmtLtbXzMRXamSri9TIRNsPgK22/QCYaPsBsNW2HwATbT8Attr2A0CNuh8AatT9AFij7QfAGm0/ACbafgBste0HwMQuYx9s9ZCxDyba+AxbbeMzSGw2PoNWNxufYeIrNbLVRWpkoo3PsNU2PsNEWwvAVttaACZOGfFhq218BolZHkC5OBW67aHBRNtDg60uMuLDRNnjfGN1kxqZaOMzbLWNzzBxSo1s9ZIakThsfAatHjY+w8RXamSri9TIxCojPmy17HG+0Wh7aLDGIaMpTJwymsJE2eOcf8cpe5xviMGaWV+hjw8Cs1KA54KYlQJ8LohVBqWYmLVrfi+Itl3zg8Qhw1xMlKMBN8QlAz74O2ZpAF8BHybK0YBs9ZKjATfEIgM+TKwy4MPEJoMpTOwymMJE2w6A3x4bnmGNNjxDxKbbAXyQ+Egia3xloIKJRQYBmFhlEICJTbrD+cl06bJnjUNqZOKU7nC2ekkiaszSAN73gvhIdzhanaUBvBc7RZYG8K4LjXI04EajdTWzRlsKwBptKQATrauZrV6SiBqzNIBysWayNIDSLoivdAwz0ZYC4JN5rauZNVpXMxO7dJGy1bYUgDXaUgAmLunQRGKWBlAvdoosDaBerOssDaBerOssDaBevD1ZGsCXI46JTWpkq7vUyMQhXXts9ZRE1riksxA1ZmkA7WJ/rHI04EajHA24IRapka2uUiMTm3I/lonA7oALgdJrtpE4JZE1LueHY41ZEsAXETU26TXbaJResw2xSI1sdZUamShPmY3V8pTZEIfUyFZPqZGJKxoNXM7ELAngi4i/Y5YE8HO2boiy4GxjdXEt/Dcaq2vhvyHKgrMNsbt2aRuiHAqweTLZl9nFTpElAbSLncIOBdgQH9fCf0N8XQv/DVF+mW2I8stsQ2xSI76P4VCAi7MwSQL4/tjrCJwOOBC45LceSrQjAVhj1grg61uPNcqRABuN9suMNdovMyY2qZGt7lIjE+2XGVttv8yYuKRGtDpsBTAviPbLDK1eclzTRqNsBbAhynFNG6Ic17QhylSzDXHIbz0m2i8zfnuWJJLGnuUAtHlBfOS3HhPluKYNUY5r2hDluCZ81v0jxzVtiLJ9xsZq2T5jQ8zSM8eF1Vl6Zj8TsxyAft57epYD0PsFMVsz68LqbM3MC2J1n+EVgdLN3BDY5Vc4S7R+ZtYoszM3Gq2fGTW+slEza3xlo+YN8ZUa2eoiNTKxym9mtrrJb2YmyiEaG6vlEI0NMfsyey6szr7MLlZhsX5mJtrbDBNfeVNgYpE3BSbKxmYbohyisSF2+V3PxCG/65k45Xc9E+XwWSZmGQD9Ys2EGQAXaybMALhYM2EGwMWaqfY2gztutbcZJnb5Fc5WD/kVzkR7m2Gr7W0GiVkOQL/Ye7IcgH6x9zR7m2Gr7W2GidGaGRf7Y5YDMC72xywH4EsjWz2kRiZGa2Zc7OFZI4BxsYcnOQDfF80Xga4+sxQEyvaZG4myfeZGo2yfudEo22duNMr2mRuNsn3mhijbZ26slu0zmWjbAGyIsg3AhvjKWyETi7wVMrHKWyG+PWEbgHKhsct7JhOHvBWy1VPeXFnjkhqROGU+84b4yJsrE195c2VikTdXJlZ5c2VikzdXJnZ5c2XikDdXJsrW5huibG3OxGVjM7hTLBubYeIrNbLVRWpkYpU3LiY2eeNior3N8JMZksgap7wfMdHeZsjqkeUAjPPeM7IcgPFeEKM1M9qF1UUSWWPmAagXxMwDMC6sztZMvyDK7MwPAmV25oNAm52JEh+bnYkaH5udyRptdiZrtNmZrNFmZzLRZmey1TY7k4k2nsnEKe+ZTFzyVohP5rXxTNSY5QC0i7cnywFoF886ywH4usMxscobFxObvB8x0d5mmDjkNzM/6ym/mZm4pEa0OssB+NLIxEd+4aLVWQ7AuHh7shyAr69H1lglkTXaLzPW2CWRNUZfZn9dhO9EYPRl9l4AVwJsZ2CNAjP1AhgFZsYF8E2A/QJY1OfyBhilZc4LoEvLfBcCZVrmRqJMy9xozIIyz4VGmZbJRFv+z1Z/hf4vyq1/GqRuiNk15mIXC8v/L7axsPz/Yh/LQv+fi42syUDm5snIQOaGKIvMNkSZlslEW/6/IcprzIb4ukvHhljcpWNDlEGZDbG5S8eGKFPMNkSZYrYhTvf5vSFKBzMTs+D/uPiKyoL/4+LJjNd923YEFgccCKzyG4UlNklkjV1+UbDGIb+jWKMsmNkQl/zqQauz0P/XVw9qDMv/L97HKQtmNlbLgpkN0X6ZsdX2y4yJsjHThjjkVw8Tp/zq4ScjHcysMQv9t4u3Z9kvM9Zov8yYaL/MmGi/zJhov8yYaL/M+FnbLzMmyuT/jdUy+R+JMwz9P0er50c6mDcaX/k9yhqlg3mjscrvUdYoHcwbjd19kFYEDgdsCJzO2crA5TyPCMwC/1/fZfgjRoH/r5FCG2I2mqldELPRTPWCmI1mGhfEbDRTvyBmo5nWBTHyMn/mBTFqMvszAGhDjJJlfgYAMTEK/H+eizUTBf4/z8WaiQL/n+dizUSB/89zsWaiwP/nuXjDo8D/p908mWjNtJsnE62ZdvNkojXTbp5MtGbaxW4WBf4/7eJZR4H/T7vYzaLA/6dd7GZR4P/TL3azKPD/6Re7WRT4//SLNRMF/j/9Ys1Exf+ffrFmouL/T79YM1Hx/6dfvOFVJmVuiI8k4vdjlUmZG41FElmj9ZmxRuszY6KNZrLVNprJRBvNZKKNZiKx2WgmPpms+P+LyBplUuZGo2wys9Eom8xsiE369ZjYpV+PiUP69ZhofWb8rK3PDIldlpix1V2WmG2IsmHGxmrZMGNDlA0zNkTZMGNDlCVmmyczpO+RNU5JZI1L+h5Ro84AQI3jcc7HF4EyAaAgsDhvJgNdv8wNsElvJv+IXXozmTikRrZ6So1MXNLjisSs/f/X1ygTH+kfxSczX+nDZY1FamRilT5ctrpJImvs0ivMxCG9wkyc0ivMxCV9uPhklvUzo8Zl/cxMtH5mtrpIImus0nPNxCY912x1l0TWGK2ZnwHpG41TElljtGbe85pZUfz/m1iQGK2Zd1xojNbM2y+IRWpkq6vUyMRozZTnwuouiawxWjPl5n2cksgaozVTLt7HLAegXLyPWQ5AuXgfsxyAcvE+ZjkA9eJ9zHIA6sX7mOUA1Iv3McsBqBfvY5YDUG/ex2jN1Jv3cUmNaHWWA1Av3scsB6Cd764rywFoF29PlgPQyoXVVWpkYpPxdSZ2GV9n4pDRcH4yU0bsWeOSGpEY5gCc765L5wCwRpsDwESbA8BEmwPAxCYj9vxkuswqYI1DamTilFkFbPWSRNSY5QD0i70nywHoF3tPlAPwTWSNsjXzRqOtNWONsjXzRqOtNWONQ2YVsMYpswqYuKRGtDrsAnCxZppszbwhvjLzgYlF5ingk2myNfNGoxybudHYJZE1yoHmG6Icm7khLpn5gMQuB81siI/MKsBnHeYAXJxcYQ7AxbMOuwBcnIVhDsCFn0LnALBGmwPAGm0OAGu0OQCoUecAoEabA/BBoMwBeBAocwAYKHMAGGhzAPhHtDkATLQ5AGy1zQFg4pKxa7Q6zAFYF0Qbz2TiK4n4O04bz2SirZthoq2bYaKtm2Gi9Znxs56SyBqX9EehxiwHoF+84VkOwJePgomvJOLvmOUA9ItnneUA9ItnvWyvGdZouwCyRttrhjXaXjNMtF0Awery+dheMx8k2l4zTLS9Zphoe80wsUqvBz+ZJr0eTOzSR8FEOZppQ5zSo8DEJT0KSHw+0qPAxEd6FJgox8xsiHLMzIZoawBwFT72/s8au7xbs0Z7/2eNU96tWaO9/6PG96Mu189EoLv+PwuBr7tnbiQWd8/cEKvUyFY3qZGJ3d2FN1YPSWSN092uNxqXJKLGLAPguXh7ivQAbDTKjOaNRukB2GiUHoCNRpnRvNHYXbbwRuNwub0b4nR5sxvicnmzTMwyAMrF75hlAJSL3zHLACgXv2OWAVBufkeZnbkhyuzMDbG7PMUNcbg8xQ1xOl/hhricr5CJ7SM14m7WHqmRia/zPm6sLpLIGqvzZ240NklkjbLbzEajzDTbaJSZZhuNMtOMNfaP85Cyxi4zzTYaX+ch3WiUmWYbjdX5Mzcam/PibjTKTLMNcbiO4Rurp/PibjQu58VlYpYB8LlY19kcgB8v7oYoPc0bq6WneUOUnuYNUXqaN0Tpad48mSGJrHE63/VG45JE1JhNAvjxhm+Ij/OGb4iv84ZviMV5wzfE6rzh/KyzSQA3XwBTdjXfWC27mm+Ict7MxuoliagxmwQwLk7XJQeabzS+zr++0VgkkTVW52DvCGwOOBDYVX7dBuimmW+AU/rr+Udc0l9PxOcju5qj1c9HdjXfEF8ZAWCrZbeZjUbZbWajUXab2WjsrkvKRuOQMQUmTklkq5eMKaDGrAvAT5eUDfGRGtHqrAvAc7Fmsi4Az8WayboAfMU9mNhk3IOJXcY9mDhk3IOJU8Y9mLhk3AOJWReAcvE7Zl0AysXvmOUA1IvfMcsBqDe/Y5VxDyY2GfdgYpcxBdx7wi4AF+fMa2MzbLWNzSAx7AJwcXKFXQAuTq5iYzNMtLEZ/h1tbIY12tgMa7SxGdZoYzOs0cZmWKONzaDGamMzqNF2AdhotLEZ1mhjM6zRxmZYo+wCsNEoJwFsNMpJABvilBrZ6iU1IjHrAvAVU2DiI2MKTHxlBACfjO0CsNFYZQSANcouABuNXcYUmDhkTIGJU8YUmLhkTAGJdhIAP2s7CWBDlFUAG6tlFcCGWJNo+Lg4Z2wXgA1RdgHYWC2rADYaZReAjUZZBcAabRcA1ii7ADwVga4LwNMQWKR/nSVW6V9nouwDsLFa9gHYEJOsma+O8xvidD3sN7+j7APAxLAPQD9bHc4CWBcaX9fDfkMsUiNbnZwyXz3sN8Tm+uxvrO6uz/6GaKMzTLTRGf4dbXQGieEsgIs1s2S/2Q1R9pvdEIvrasrPOusD0C52s6wPQLt5Mj1Z1z89SDfEIT17bPV0fVI3RNk7A61+v7IALn7HrxsXEx/XyxWtfrMsgP65IBbpIWVilUT+HZv0kLLGLomscUgPKWucksgal/SQosZHzpxljVkfgM/FG/7ImbMbjUX6M1ljlf5MJjapka3uUiMTIw9AvXkf5czZDXFJjWj1az3NTMw8zRfnzCv7zW6IRWpkq6vUyMQmveFsdeZpvjhdX1sFwFZPqZGJWRXAxf5YPjIGwMRHakSri5zTvCEWGadgq7M1c/GVUprUyFZ3qZGJNjrDVmdr5uKcKbJHE1tdP1IjEx8Zk0KraxaduThnapEa2eoqNTKxyUgcW51VzlycM1XONt9YPaVGJmYRzYtzJssC6BfnTJYFcHPTzLIA+sU502Rf843Vsq/5htikRra6S41MHG7q/Mbq6abOb4hLakSrwyyAi3MmywIYF+dMlgUwLs6ZLAtgXJwzWSeAcXHOhFkAF6dCl70ANxqHjIezRtkLcKNxuYD4S8AhWwEWBD4yes0SXxm9ZqLNAmCrbRYAE5uMxLHVXRJZYxbRHBcap4wWMnFJIlqdZQE866wxnAYwL4ivrOViYjap+XNBzOrNLnaKaevNmJjVm12swiwL4K0XRNsLkIm2FyASl+0FyMSs3uzi7cmyAMrF25NlAZSLtyfLAigXb0+WBVAu3p5sGkC5eXuGrARkYjap+ebtWbK2kIgl6wVQ2wUxWjO1XhBfWf/IxCLrH5mY1WiuC2JWozkviFmN5nNBzDJnPhdEW6PJRFujicTH9s8sSLT9M5kop85srC6SyBrl1JmNxiaJrFFOndloHJLIGuXUmY1GOXWGNb62FyATbS9AJr4y9wF/xywL4GYPz7IA6sXbk2UBfGlkYpceUiYO6X1koq2dYaKtncFnXWztDGossnbmg0BZO/Mg0HrNWKL1mjHR1s6w1bZ2honZBI12YXVWO1MviEtqRKuzTgBfGpn4yIohtLrazmZMLFIjW12lRibazmZsdZc1SEwcUiNbPaVGJi5Zg4RWZ9MAvmqQmPhIjWh1Ng3gSyMTi+yLx1ZXWSfFxCY1stVdamTikPEetnrKTntMtPVmaHW33QCZ+MgoF1rdbTdAJhapka22k5qY2GTcjK3uMm7GxCE1stVTamTikrE9tDrqBPAd22PiIzWi1VkWwHtxzmRZAO/FOZNlAbwX50yWBfBenDNZFsB7cc5kWQDvxTmTZQG8F+dMlgXwXpwzWRbAe3HOZFkA78U5E2YBXJwzYRbAxTkTZgFcnDNZFkC52B+zLIBysZtlWQDlYu/JsgDKxd6TZQGUi70nzAK42HvCLICLvSfMArjYe3QWAFttswCYaLMA2GqbBcDEITWy1VNqZOKSmQpkdQ2zAM57Tw2zAMqFxlfmPjCxSI1sdZUamdhkfgZb3WV+BhOH1MhWT6mRiUvmkKDVWRZA7RfER2pEq7MsgNoviEXmubDVVea5MLFJjWx1lxqZOGQuDls9ZS4OE5fUiFZnEwHa54Jo+zSh1a/t08TEIjWy1VVqZGKTfefZ6i77zjNxSI1s9ZQambhkTy60OpwIcHHOhBMBLs4ZPRGAiUX2u2Krq+zJxUQ7EYCt7lIjE4fsycVWT9mTi4lLakSrw4kAF+dMOBHg4pzJ8gD6xTmT5QH0i3Om2t5mTLS9zdjqrLfZxTmT5QH0i3MmywPoF+dMlgfQL06FZqdooMYsD2Bd7OHNTtFgjUVmurJGO0WDNdreZqzR9jZj4pAa2eopNTLR9jZDq7vtbcbER2pEq7NeADd3126naLDVVXanYqKdosFEO0WDiUN2fmLilF2VmLhkVyUkZhMBbr5IxyM7FjHxld2AmFhkNyAmVtlph4lNdtphop1wzkQ74ZyJU3aIYeKS9Q9InLbnDO7h0/acYY225wwTbc8ZtrrKqg/WaHvOsMYuqz5Yo+05wxqnKvuYyHMdZ2iSfQ3nAbSjwCwF4Cfhk4GvU8gmF6eQgTI3k01uDsgK5cxZVihHzjJQVjOzybKYmYAti/y344vdPnLcLCuUd35WKAdnskJ542eFcmwmK5RTM1mhHJrJQDkzk02WIzMR+HzczZyBj7uYM1DOy8SH8siLPiuU93wGyms+A+Utn3/D4YCscDqvAQNlK2YEvrITMwNlI2YGyj7MDCzOYcDA6vwFDGzOXcDA7rwFDBzOWcDA6XwFDFzJ4NJ+/hQp8l7PwMc5M9DkrMt/P6/lr8B+NPyVTa7OS8BAOUyWTe7OM8JAOUqWTZbdMFihbIaBCqvshYEKq2uF0ZHnOmEM5BXnIGCB1TkIGCibx7LJ3Slk4HAeBzZZdo5lhcs5CFBhFsVv5/e6yQRLNLnJ/EoGFudxYJOrA7LC5jwOrFB2JWOFw3kcWKHsScYKl3MQoMIsdv85vzZZ6P5z3g+zyP3n/B5mgfvP+T3M4vY//U0YmDUju3jK0bdXvXjKcogfA+UMPwYu57VBYBaxvzhTsoD9j0+Ega/zODCwuGsPA6sD4loe8pbCCrsDskJ5S2GF8pbCCuUtBRVOeUtBhdPdUiry3C2lIU+262OB1QFZYXMt4Vhhd0BWKNuOsULZdYyByylEk7P4/I9CBj7uLoomh/H582uz5H2eTZb3eQbK+Dyb3B2QFQ7X8IcVTgdkhcs1viGFPYvPv8cdu39kAxhWKPu/MFC2f2GTZfcXBsrmL2yy7P3CCodrgsIKZecXVrhcow1UmNXjl/N7mJXjl/N7mFXjl/N7GBbjn9/DsBb//B6Gpfjn9zCsxD+/h1khfr14D6frucBA2boCTX5l5woGSh8xmmxr8BkoS/DZZFmBz8DmnM5ssqy/Z4XDlTuzwumArHC5sl9UWGQdMSrMSu97Oyt8XWUpA+WYFza5OoUMlNEUNllGU1hhFk05n8tFRlMYuJxCNDmLz3/OK6Vm0ZTzmVKzaMr5TKnFKWSTq1PIQFk4zCbLumEGyrJhNllWDTMwWynn78OWrZTz92F7nEI0ub1OIQNl3JFNlnFHBjankE3uTiEDo5XynPfDLEL/nPfDLEL/nPfDLEL/nPfDLEL/nNdyFqE/u0x7FqF/zms5i9CffbA9i9CffbA9i9C/52+bLEJ/dur2LEL/nr9tsgj9ez6Xswj9ez6Xswj9ez6Xswj9ez6Xswj9ez5Tsgj9ez5Tsgj9ez5Tsgj9ez5Tsgh9OZ8pWYT+wu2cRejL+UzJIvQXfuyskP7Cj53V0V/4sbMy+gs/dlZFf+HHzoroL/zYWQ19PZ8pWQn9hWN8TqeQgctlzqHJ6+My5xj4OIVo8nqdQgZm41rPa3ll01rPa3k1p5BN7k4hA2V+JJss8yMZKNuAkcnjI7uAMTDLjzzuh+OT5Ud+zsDiFLLJ1SlkYHNZsGxyd1mwDBxOIZs8nUIGLleujSZnNfTnINfIaujb8UwZYQ19PQOLy3Vmk6ur/2ZgcwrZ5O4UMnC4CnU2ebp8cQbKGno02dbQM/BxFepoclhDf94PbQ09myxr6Bkoa+jZZFlDz8DhFLLJ0ylk4HJV/mhyWEN/3g/DGvrzfhjW0J/3wyKrU9hkWZ3CCmV1CiuU1SmsUFansEJZncIKZXUKKrQ19KhQ1tC/yHPVKQV5MueeBcqcewbKGno2WdbQM1DW0LPJsoaeFcoaelRoa+gZKPMj0WRbQ89AWUPPJssaelYos75Yocz6YoWyhp4VyqwvVhj1L/qcX5uwhv68wYY19Of3MKyhP2+wYQ39+cUOa+jPL3YWof9JPWFgdwrZ5OEUMnC60AKbvFxoAYFZhL6e38MsQl/P72EWoa/n9zCL0Nfze5hF6Ov5Pcwi9PX8HmYR+otPkSxCf/EpkkXoLz5Fsgj9xafIV4T+4pBq55UyZbcJ/A2zCP0PkBUW5+xjhdUBWWFzDgIGyvs8mzwckBXK+zwrXA6ICpe8z6PCLEI/zi/2chf6D/KK4j3Ik90mWKDsNsHA7lovMHC41gsMnM6FwcDlXBgEnB85DeJBoJwGwcDX+UTY5OKArLC6TgmssLnGBgzsrm0AA4drG8DA6ar8GbhcUT4Cwxr6828Y1tCff8Nwov35Nwxr6C9+w+rKtRnYXLk2A+XcFAbKuSkMlHNTcPt65NwUBL5ybgqa/Mq5KazwddXVrLC4YmgGVldqzMDmSo0ZKH3EDBxygC0CpY+YFS45vpaARfqIUWGRPmIGSh8xmyx9xAyUPmI2WfqIGSh9xGyy9BEzcLryRDZ5ufJEBGbx+ed86mU19M/51Mtq6J/zt01WQ39x8clq6H8UssnNKWRgd+WJbPJw5YkMnE4hm7ycQgRmNfTv+UzJaujf85mS1dC/5zMlq6F/z2dKVkP/ns+UrIb+PZ8pWQ39ez5Tsgj9ez5Tsgh9OZ8pWQ39xY0+i9CX85mSRejL+UzJIvQXPocsQn/hc8gi9OV8pmQR+nI+U8Iu9+czJexyfz5Twgj9+UwJI/TnM8VG6NFkG6Fn4OsUssnFKWSgjNCzyTJCz8DuFLLJwylkoIzQs8kyQo/ArIb+wjsXRujPZ4qN0LPJsoqLFVZXMMQKmwv5M7A7IJs83BRPVjjdFE8GLleBhMAsQt/PSy+L0F+4TLMa+guXaVZD389LL6uh7+fPuSVzWRjYHRBXypK5LKxwOiArlLkspHBlNfTjeASsj8xlYYWvA7JClczCuGpwbG5TqTHMc2NTmOempjDPDU1h3lJJJ/h4s9D8X3NOmOcmpqC9jxuYwjyXwcL2VsVjfU0lxDCvq3wY5g2VDsO8qbJhmLdUMgzysoB8Of5+r5v+wDw3/IF5bvYD86rKg2FeU2kwzOsqC4Z5Q6WY4P4SNrM/Huevq2pEe4sramSey1dBe7NG9u14fmR97Nvx+yBsY/858ppKfmFeV7kvzHOZKvx8p+KxPpengvpkA3vUV900YNbnhgEzz/XkZp5ryc08NwmYeW4QMPNcnzvmuTZ3zHNTgJHX3BBg5rmqLOa5EcDMK8q5yLyqeLi/NOfFYn3OicX6nA+L9TkXFutzHizU150DC/V1579ifc59xfqU96ogTnmvXsS5viosz7VVYd5Q+tjeqfQxbylvCdo7PoqH+obrqML6XEMV5rl5c2yvGzfHPDdtju11w+ZYn7t9sD53+2B9bn4W6pvu9sG8R+lDe7OA+l/1Mc/NzmJ73egs5jWlj+3tSh/z3NwstteNzWLeUvrQ3iyQ/jnuL8vNzEJ7lxuZxbyi9LG9VeljnpuXxfa6cVnMG0of2zuVPuZltSOH86N+svD58znyHqXvRd6r9DGvqFIZtreqShnmNaWP7e1KH/OyaXLtaG9WXFWPvKX0ob1Z4/nT/ejPPDdJDu193CA55rk5cmyvGyPHPDdFju11Q+SY52bIsb1uhBzzsoqq4/6XtZt/j/tf1m3+Pe5/WbP597j/Zb3m3+P+l7Waf4/7X9Zp/j3uf1mj+fe4/2V95t/j/peVsb/H/S+rYn+P+19WxP4e97+shv1dJ3uzEvZ3HnluuiLb64YrMi+roDqeH1n5ejmeH1n1ejmeH1nxejmeH8XNVUR7qxuryLxH6UN7s+h5OZ4f1c1UZHvdSEXmNaWP7e1KH/Oy9XHc/7LoeTnuf1n0vBz3vyx6Xo77XxY9r8f9L4ue1+P+l0XP63H/y6Ln9bj/ZdHzetz/suh5Pe5/WfS8Hve/LHpej/tfc9NG0d7uho0yz80aRXu7GzXKPDdplO11g0aZ5+aMsr1uzCjzXPYV2+uyr5jnZoyivcONGGWemzCK9g43YJR5br4o2+vGizLPTRdle91wUea52aJsrxstyrylsv/Q3rAk/bhfhRXpx/1guuxE1ueyE5nnRiUyr6myYuZ1VQTMvKGyHfn5ZqXox/0+rEQ/vi9hq/jjfh92ij/uz1n8fBzf5yx+Po77aRY/H8f1kcXPx3H/y+Ln47j/JfHzn3TMhrhpcBVxS9Umk7wnaxD/V15F3qNqnVnfq3isr6jaadZXVe0085rSx/Z2pY95LnuX7XXZu8xztedor6w9Z96jsoHR3seNT2B9RdV2sz43PIH1udkJrM/VnrM+V3vO+lztOfOW0of2ZrXn7/H9C2vPj+9fWHt+fP+y2vNyfP+y2vNyfP+y2vNyfP+y2vNyfP+y2vNyfv+m0se8pXoLoL1Z7Xk9vn9Z7Xk9vn9Z7Xk9vn9Z7Xk9vn9Z7Xk9vn/F9WZge11vBua53gxsr+vNwDzXmwHtra43A/Ncbwa0t7reDKzP9WZgfVXxWF9TvR5YX1c81jdU7wjWN1XvCOYtpQ/tzQay9+P7l81jX8f3LxvHvo7vXxY9/xzfvyx6/jm+f1/R82SOOPO6qhZie4eqFmLeVPrY3qX0IS+Mnh/f5zB6fvTndDdamu11k6WZV6ORw8f10aP10Y7fu92Nlebn4aZKM8+1rGZ7Xcdq5A0XHUR7h+tdwvpcdJD1uXnSrK+qaBTrc71LWJ8bJs36XO8S1udGSbM+17sE9U03SBr1Tde7hPWpMdIDcap1SUdcVV9/LK8pHuvr6uuP9Q3FY33u64r1ua8r5C03wBDtXW5+IfNeVevM9hZV68w8N7yQ7XWzC5nXVa0u2ztUrS7z3OBCttfNLSTeG9aej4O9b1h73o88N7SQ7XUzC5lXVa0p29tUrSnz3MBCttfNK2TeVLWSbO9StZLIe9ywQrT3cbMKmfeqWj+2t6haP+a5QYVsr5tTyLyuatXY3qFq1ZjnhhSyvW5GIfKy2vNyPD+y2vNyPD9eN6CQ7XXzCZlXVa0V29tUrRXz3HBCttfNJmTeVLVCbO9StULIK24wIdpb3FxC5jnvLtvrvLvMc0MJ2V43k5B5zrvL9jrvLvOcd5ftdd5d5FXn3UV7q/Pusj7n3WV9zrvL+px3l/U15T1lnvPusr1DeU9Zn/Pusr6lvKeorznvLupLouc/7tOFOOXcnYgrKpef5VWVe888l9vOPJfbzjyX2848l9vOPNeZGnn9o3KzmfeoXGrmvSpXmXlF5Sozr6rcYuY1lQvMvK5ybZk3VK4t86bKjWXeUrmsyMs6t9fj75d1bq/H3y/s3H7c78PO7effr6rcSeY1levIPJebyDyXm8g8l5vIvKWiq8iLYuc/PPx+CTu3H5+H7NzO+oqKhrK+qqKhzGtKH9vblT7muc4lbK/rXMI817kE7V2ucwnzHuWNQHuz6Pl5v8+i53/Vx/ZWpY95TXk32N6ueKxvKO8G65uKx/pcZwbSV7LoeT/pK1/R84vc0/E56nuV94V5RfHYXteZgfU1xWN9rjMD6xuKx/pUa4bnQd5SvA/xHtebYQN0zRk2wFd5dDbAolw6G2B1s+jxIWcF6D/D6BnYnUI2eTiFDJxuHj2b7BxZrPB1nqwN0LmyNkDny9oAnTNrA3TerA3QubM2QOfP2gCdQ2sDdB6tDdC5tBhYnE9rA3ROrQ3QebV4tynOrbUBVqeQTW5OIQPdTMKNycMBWeFUvrwNcClnHgOzyvR+Ppez0vR+/g2rq73lp5wVp6/zQ6mu+najsDkgK3T1txuFrgB3A3Q1IhuTXZEIA7Mo++f8HmYt3n9uAQx0dSIbk12hyAZYVaXDxuSmSh02QFcrsjHZFYtsgFNVO2xMXqrcgYHd1Yuwyd0VjGyAr6p42JhcVMnDBuhqRjYmu6KRDbCrqoeNyUOVPWyArm5kY7IrHGFgVrf+ns+UrHD9PZ8pw9WObEx2xSMbYFXVDxuTmyp/2ABd/cjGZFdAsgFOVQGxMXmpEggGTldDwiZPV0SyAb6qCmJjclFlEBugqyPZmOwKSTbAriohNiYPVQqxAbpako3JrpiEgcv1CmKTl2sWtAG6epKNya6gZAOsKsa/MbmpIP8G6GpKNia7opINcKq8gY3JbqQIKqxZZL4dX+z6cUNFNgpfNQVkAyxqDMgGWNUckA2wqUEgG2BX+RebpzzUKJCNwukUMnCpFBE2+XHTRTZAN16ETX7cfJEN0A0Y2Zjs8lg2Ct2IkY1Cl8myUaiGjDwFeS6V5UWeG6PAAl83R2EDfJxCNDmL0P8oZGBxWQ5scnVAVthcIJMVdhfIZKBrh70x2fXD3gCXi4yiyVmEvp3fw+Ja/m4UyrgjK3RNfzcKZdyRFbrU+o1Cl1u/AQ6nkE2eTiEDXXo9m1xdfv0G+DiFaHJW//6jkIEuxX5jssux3wDdeNCNyW4+6AY43G2ZTZb3eVa43G0ZFWYR+nZ+sZu8zzMwu88/Z6AbE7oBZvf584udRej7+cXOIvT9fARkEfp+PgKyCH0/r5QsQt/Pn8Td1aTw0ssi9P28UrqrStkodGUpG4XyPs8KXWHKRqG8z7NCV5qyUegu9A15rjaF+lLXIWtTUGBWHP8DZIVucuhGYXFAVlhd9QwrbK56hoHdKWSTh1PIwOncQGzycm4gBGZV8j8K0eT5OIUMdDNENyZLzxcrdFNENwqbA7JCN0d0o3A4ICucrgKJFS5XgYTA9XEK0eT1OIUMdNNENyYXB2SFbp7oRqGs4mKFsoqLFcoqLgZOp5BNXk4hAdvHTRVFk1s2tr0+Z4VuruhGYXFAVlhdJRwrbK4SjoHdKWSTh1PIwOnCM2zycuEZBGY19O14rWhZDX07v4ePmzC6Mbk4ICt0M0Y3Cl0jr41C18lro3A4ICucrpqQFS5XTYjAV9Y7osmvrHdkoIw7ssmy3pEVyrgjK5T1jqxQ1juyQlnvyEBZ78gmy3pHBBZZ74gmF1nvyEBZ78gmy3pHBsp6RzZZ1jsyUNY7ssmy3pGBst6RTZb1jgisst4RTa6y3pGBst6RTZb1jgyU9Y5ssqx3ZKCsd2STZb0jA2W9I5ss6x0R2GS9I5rcZL0jA2W9I5ss6x0ZKOsd2WRZ78hAWe/IJst6RwbKekc2WdY7IrDLekc0uct6RwbKekc2WdY7MlDWO7LJst6RgbLekU2W9Y4MlPWObLKsd0TgkPWOaPKQ9Y4MlPWObLKsd2SgrHdkk2W9IwNlvSObLOsdGSjzI9lkWe+ICqesd0SFU+ZHskJZ78hAWe/IQFnvyEBZ78hAWe/IwOEy5/i1mQ7ICpfLnEOFWQ39OL82WQ39OG8OWQ39OG8OSYz+K3VuIK8qXkdecwlGLLC7BCMGusFaG5PdZK0NUHYkJpN7FqH/AXYEPi6QyQpfF8hkYHEK2eTqFDKwucgomyz7rLLC4SJSrHA6ICtcLiKFCrMK+h8gKnzcmJSNQjcnZQOUVVxssqziYqAblbIx2c1K2Sh0w1I2CqerkWKFsooLgdm0+J8aKQY+7lLBwNddKhhYXEkTA+UthYHNlTQxsLtrDwNlVxYGyq4sDFzu2oNruciuLKgwi9CP80rJIvTjfKYU2ZWFFVZ3j2KFsisLK+zqIrWQ55qyTORNV9LEAperQEJg1uP+J0+EgY+r72Hg666ODCzu6shAOWEIX5sqJwwxsLu7KJs8HJAVTleOwwqXq55BYJO1KQyUtSkMlLUpDCyu8oOB1dVVMLC5ugoGdlcGwcDhqhYYOF1NAAOXqwlAYJcZ9wyUGfcMlBOGcPvqcsIQA93k7I3J0vPFCrtL4WeFMuOegTLjnoEy4x6Bw83P3gBlpy98ysNN0N4olJ2+WGF12eKssLlscQbKjHs2WWbcM3C6bHE2eblscQROmXGPJk+Zcc/A12WLs8nFZYszUGbcs8ky456B3WWLs8nDZYszUGbcs8ky4x6BWXz+4iaVxeff8xGwZMY9mywz7hlYXbY4m9xctjgDZcY9mywz7hk4XbY4m7xctjgBx0dm3E8Eyox7Br4uW5xNLi5bnIEy455Nlhn3DOwuW5xNHi5bnIEy455Nlhn3CMwi9GevyMgi9PVzBsqMezZZZtwzsLpscTa5uWxxBsqMezZZZtwzcLpscTZ5uWxxBL4y4x5NfmXGPQNfl3rCJheXesJAmXHPJsuMewbKXBY2WXYkZoXTpZ6wQpnLggqzCH0/b7BZhL6fn3IWoe/n7SuL0PfzuZxF6Pv5KWcR+n7xlLvLw2CFMuOeFU6XNsEKZcY9Ksxq6Md5t6ky454VviZv4n2QpxLu3w/yqsrD2ACbysPYAF2f1Q3Q9VndAF2f1c1Ddn1WGdhcn1U2ubk+qxug67O6Mdn1Wd0odH1WN8Cm8jA2wK7yMDbAofIwNsCp8jA2wKXyMBiYRejL+TfMIvTl/BtmEfp6/g276x65AbrukRug6x65AXaV5cC7TRahb+dzvrvukRuTXfdIBg43i4tNziL07XymZF3u2/nLIety/9eL2QZYVR7GBthUHsYG2FXaxOYpuyqujcKp0iY2Cl0VFysMI/Tn78MwQn9eelmE/nN+D7MI/cUtIJxCf34Pwyn08wzsTiGbPJxCBk7lPdyYvJT3kIFZhP7i1Msi9BenXhahb+dvmyxCf3FIhVPoz69NFqHv5w02i9D38xdsFqG/OJezCH2/eG2WqtVD4Mwi9OeDfmYR+j7OwFe5dDfAojyw+B7Oj/MRbxQ25YHdKHQ+4o3CoTywG4XOR7xRuJQHlhU+zkfMCpMI/ZcLtiDPuYhf5BXn7GOB1Tn7GOi6smxMdl1ZNkBXxbUxeTogK1zOQYAKsx737fxev64rC5v8uq4sG6CbBrEx2dWmbBQ2d1tmhfI+zwqHuy2zQnmfZ4XLXW5RYdjj/vzahD3uz/th2OP+/B6GPe7P72E4hX6egc0pZJO7U8jAoYoMNiZPVWSwAS6nEE0Oe9yfd+ywx/04mpz1uL846LMe9z8K2eTqFDKwqSKDjcldFRlsgMMpZJOnU8jApYoM2OSwx/35TAl73J/PlLDH/flMCXvcn8+UrMf9ez5Tsh737/lMyXrcv+czJexxfz5Twh735zMl7HF/PlPCHvfnMyXscX8+U7Ie9+V8pmQ97sv5TMl63JfzmRL2uD+fKWGP+/OZEva4P58pYY/785kS9rg/nylhj/vzmRL2uD+fKWGP+/OZEva4P58pWQ19PZ8pWQ19PZ8pWQ19PZ8pYY/785kS9rg/nylhj/vzmRL2uD+fKWGP+/OZMmXckRUWFyZkhTLuyApl3JEVdgdkhcOFCVnhdFE9Bi4XhENgFqHv5w02i9D383uYRej7+T38itD/7g+//v43//Hrr//ym3/+19/+8U/b/pYbYHVRPTa5qQ6cG6CMO7LJMu7ICmXckRXKuCMpXB8Zd3wR6OKODXku7liRV1wpCQvMalMuLM5qU9oZ2F2xCwOz2pRxBk5XPcPA5apnEJhNoX+eMzCrTfmcgVltyvnFthF6BsoIPQNlhB43BxuhZ2AWoT+vFBuhZ6Cbm8ImZxH657yWswj9c17LWYT+Pa/lLEL/ntdyFqF/z2v5lVVcDMyquM6bw5tVcZ03h3e6OjMGLldnhsCSdSQ+v9jlcYVrDMw6Ep9f7JJ1JD6/2KW60joGZh2Jzy92FKH/lPOLHUXov4r/GDhd8R8Ds3rH84uddbmv5xc763Jfzy921uW+nl/sKusdGZjVO55f7KyGvp5f7KyGvp5f7KyGvp5f7KyGvp6/bbIa+npeKVkNfTuvlKyGvp1XSnO9uzdA17t7A6xOIX4SZzX07ezEyGro23ktZzX07byWsxr6dr5JZTX07bw5hF3uz2s57HJ/XstZDX0/r+UuK4MZmFUGn9dyVkPfzy92VkPfzy922OX+fKZ0N99xA1wOiEsvi9B/zu9hFqH/nN/DsMv9czbZdbnfALNM4vNKCbvcn0+9sMv9+dQLu9yfT72whv68OYQ19OfNwdbQo8m2hp6Br0vsYJOLS+xgoKyhZ5NlDT0Ds+6R5/0wi9BffGOHNfTn/TCsoT/vh7aGHk22NfQMdH1WNya7PqsbYHXZNmyymxm8Udhdtg0rdDODNwrdJNSNwuWAoLB9Pm4SKin8M/BxQFboJqFuFLpJqBuFbhLqRqGbhLpRqCahvgN5ahLq25HnJqFuBC6XNoHALEL/oxBNziL0n/NvmEXof74OGVhcYgcDq0vsYGBziR38lGWfVVYo+6wycLpMEQYulymCwDBCf14pYYS+HZ9yFqH/ycNgoMxlYZNlLgsDm8sUYZPdzOANUOaysMkyl4WBy6WeoMlZhP4n9YSBj1OIJmcR+ue8fWUR+p/kGDa5uuQYBjankE3uTiEDh0vfYZOnS99h4HIK0eQsQv+eP5ayCP17PlOyCP17PlOyCP17PlOyCP17PlOyCP17PlOyCP17PlOyCP17PlPCOfTnMyWcQ3/eYLMIfTlvsE1mfbFCmfXFQJn1xSbLrC8GNqeQTe5OIQOHy0tjk6fLS2PgcgrR5LDL/Xk/DLvcn/fDLEJfzvthFqEv5/0wi9CX836YRejLeT/MIvT1vB9mEfp63g+zCH0974dZhL6e98Osy30974dZl/t63g+zLvf1vB9mXe7reT/MutzX836Ydbmv5/0w63Jfz/th1uW+nvfDMV3CJQOXU4gmz49TyMDHpYSiyfN1KaEMLE4hm1ydQgY2l7TKJneXtMrA4RSyydMpZKDstIomL9lplYGy0yqavGSnVQbKTqtscnV5uqywOYUM7C6tloHDpdXybzgdkBUul6dLwCeK0H/l6TLwcXm6DHxdni4Di8vTHQiUM4ZYoZwxxMDuEn/ZZJlJzAplJjErlJnEqDDrcv85nsvPIzOJWaGcMcQK5YwhBlankE1uTiEDu2tyzCYP1+SYgdMpZJOXU4jAbA79c/yce7I59M97Br5OIZtcnEIGVtfkmE1urskxA7tTyCYPp5CB0zU5ZpOXa3KMwKzP/Tkc/GR97s/h4Cfrc38OZT5Zn/tzKPPJ+tyfQ5lP1uf+HMp8sj737/lMyfrcv+czJetz/57PlKzP/Tny+GR97s9huCfrc38Owz1Zn/tzGO7J+tyfw3BP1uf+HEJ6sj735xDSk/W5P4eQnqzP/TmE9GR97s8Rnyfrc1/PZ0rW5/4cQnqyPvfnENKT9bk/hz+erM/9OfzxZH3uz+GPJ+tzfw5/PE3OQmWT5SxUBk6nkE1eTiECu6zjQpO7rONioKzjYpNlHRcDZR0XmyzruFihrONihbKOixXKOi4GLlclhSYPWceFCrMq+nFeKUPWcbHC4qqkWKGs42KFTZVJLeS5Mq6JvOGKmljgdEVNDFxOIZqcReg/598wi9D/OEzR5CxC/+MwZWBxZVcMzOq4+hko67gYKOu4+CkPV3bFCqcru2LgcjVICMwi9M/5PVyyjgsfypJ1XAwsLl+cTZa9vhjYHJBN7i7kzwplry9WOF0OAStcLuRPwDeL0P98bjLwcQonAl8X8meFxYX8GZhF6N8zUPb6YqDs9cXA4RTyU54u5M8KlwOiwqyKfp2XXlZFv84r5StCfzHo5POcFcpeXwysDsgmNxfyZ4XdhfwZOJxCNnk6hQxczpWGJmcR+no+U7IIfT2vlCxC/6OQgcW50tjk6lxpDGxOIZvcnUIGDuebY5OnA7LC5XxzqDCL0Lfze1jkNC5WKKdxscLinH2sUE7jYoXNOftYYXdAVjics48VTgdkhct4+/5Sgfv3eUmA/ov3Qd6jfHMbga/yzW2AbhrXxmQ3jWsDdNO4Nia7aVwboJvGtQFO5T3cAJdy9jEwq6H/a7rlBvgo7+EG+DogvofNdTDaKHQdjDZAN41rY7KbxrUBug5GG5NdB6MNcDmFaHJWQ/+jkIGugxGb3F0How2wOIVscnUKGeg6GG1Mdh2MNsDhFLLJ0ylkoOtgxCYP18FoA3ycQjQ5q6F/z982WQ39ez4ChutgtFHoOhhtFLoORhug62C0Mdl1MNoAs5Vy3rGn62C0AT6q4dAG+Kp2PhtgUe18NsCqmuVsgE11jtkAu+ocswFmHYwu3sOpWtFsgEt1jmFgFqGv5/cwi9DX82uTRejr+QjIIvT1/B5mEfp6fg+zCH09v4dZhL6e38Pluk1sgK7bxAbouk0gsHxct4kN0HWbwGO0ZBH6Vs8KXbeJjcKqshw2CpsDssKuOiVsFA6VNrEBTpU2sQEulTbBwCxC39sZ+Ki0iQ3wdQrxtcn63Pd+VlgdkBU2leWwUdgdkBUOlZSwUTgdkBUulUPACrMI/dnTXrII/ef8YmcR+s/5CMgi9GdPe8ki9GdPe8ki9J/zi51F6D/nQyqsoT8fAVmE/jkfAVmE/jl/22QR+uc9Ax/V2IBNziL0Z097ySL0Z097ySL0Z097CWvozx9LYQ39+QgIa+ifs8nTKWTgUo0N2OSshv7sMi1ZDf17PlOyGvqzD7ZkNfRn/2HJaujf85mS1dC/5zMlq6F/z2dKWEN/PlOyGvqzQ7JkNfTlfKZkNfTlfKZkNfRnD2fJaujPHs6S1dCX85mS1dCX85kS1tCfz5Swhv58poQ19OczJayhP58pYQ39+UzJaujPPtiS1dDX85mS1dDX85mS1dCffbAlq6E/+2BLVkNfz2dKVkNfz2dKWEN/PlOyGvoLH2xWQ3/hg81q6Nv5TMlq6Nv5TMlq6Nv5CMhq6Nt5pWQ19Bde4mwS/YWXOJtEf+ElzibRX3iJs0n0F07dbBL9hVM3m0R/4dTNJtH380rJJtFfOHWzSfT9vFKySfT9vFKySfT9vFKySfTjvFKySfTjvFKySfTj/DmXTaIf56WXTaIf5zMlm0Q/zislm0Q/zmdKEqP/qjMoyKuK9yIv6srSz7yoK8s881xXls0P6LqybICuKwuaXD+uK8sG+ARlvF9lEAx007XxN6wfN117A3TTtTfA5go1GOi6smyAbrr2Buima2+AywHxPczi88/5Pczi88/5Pczi8z8K2eTiFDJQZtyzyTLjnoHdZTozUOYRM3A6ID8UmUeMCrM59KWcgY8DosnZHPpyXsuvm++4AVaXVMvA5oD8G7r5jhuFbr7jRuF0ObCs0E2tY2A2h/4nf5OBMjuSga8D4kMpMjuSFVYHZIUyO5IVdgdkhcOlW7LC6dItGbhcuiUCszn0/T0Do3tKP782VWZHssLi8jcZ6GZxbUxuLt2SFbpZXBuF0UoZF+/hdEBWGK2UcX4oWQ39OL/YWQ39OH9wZjX04/yUsxr6cd6xsxr6cd6xsxr6eX4Psxr6eX4Psxr6efEeRitlXryH0UqZ5/cwq6Gf5/cwq6Gf5/cwq6Gf5/cwq6Ff52tFVkO/zteKLD7/OX+KZPH5HyArlPF5Vijj8wyU8Xk02cbnGSjj82iyjc+zwuKi36xQxudZoYw6MlBGHdnk4YCscLqYHiuUUUdUmMXnx/nFnjLqyApfFdRryHNBx4q86kJcLLC5EBcDu1PIJg+nkIHTBeEYuFwQDn/DrIL+RyEDHxeEY+DrgnAMLC4Ix8DqgnAMbC5mxsCuZi1sgG4aBL/YWYT+uXixl4uZEbB9ZNyxIlDGHRkoO32xycUBWWF1YUJWKOOOrFDGHVnhcEBWKOOOrHA5ICrMIvQ/gUwGPq4hEgNf1xCJgcVFRvGhZBH6Us4Km+uwxMDuYrds8nBAVjhdMJgVLgdEhWGE/vgp0sII/XnpZRH6et6xswh9Pa/lLEJfzzt2FqGv5x07jNCf38MwQn/xHsr+RaxwOSAqDCP05w3WRuhZoexfxAplhJ4Vyv5FrFBG6Fmh7F/ECmX/IgbK/kUMlP2LEPgVoY8C6vhQsi73/XzQhxH680oJI/TnL4cq+xexQhmhZ4Xdxb9ZoYzQs8Lp4t8MXC7+jcAwQn9+KGGE/rwfZhH6eX4oWYR+nldKFqGf56ccRugvnnJ3sVtcKWGE/uIpTxe7ZYXLAVFhVkH/OR+jWQX95/x9mFXQnx3jLaugPzvGW1ZB/zkvvTBCf156YYT+/B5mEfqzY7xlEfrPxYu9nEIEZhH653wuZxH65/x9mEXon/OZkkXon7NnKYvQP+f7chahf86fc1mE/jkfUlmE/jl/imQR+gtPexahf89HQBahv3DdZxH693ymZBX07/lMySroL4ILWQX9ez5Tsgr6i2hFVkH/ns+UrIL+PZ8pWQX9RbQiq6B/z2dKVkF/EVzIKujL+UzJKugvohWrOIUMrK51GJvcXOswBnankE0eTiEDp2sdxiYv1zqMgP3zcQorAh+nkIGvax3GJhfXOoyB1Slkk5tTyMDuWoexycO1DmPgdArZ5OUUIvD5uNRkNPl5XGoyA1+nkE0uTiEDq8t1ZpObA7LC7nKdWeFwQFY4XfI0K1wOiAqzLvfjeOr1rMv9OB9SWZf7cV56WZf7cV4pWZf7cV4pWZf7cyygv11lTw/kDcXryJuqZRPzlmrZhLwsPv+Ti40/YBaf/5yfSBaf/1HIJhenkIHVZYuzyc0BWWF3ObCscLgcWAbKPGI2WeYRIzCroP/xHaLJWXz+x3fIwNcN+GWgzCNmoOxfxA9F5hGzQjkxmIFyYjCbPN34XFa43PhcBGbx+fe822Tx+fe822Tx+fe8OWTx+fe8OWTx+fe8OTQ5MZhN7i5bnBUOB2SF06Wfs8Ll0s8R2GWnLwY+LlucgXJiMD6Ur/j8xbdNOS+9LicGs8lZxv15t+ky455NHtFveL5VdJlxzyYvNyQZgdkU+nLevkbUv6icP0WyKfTlvB9mU+jL+etryJ54bHJzNQGsUPbEY4XDDZpmhVlPvPMGm02hr+ftK5tCX8/bVzaFvp537GwKfT3vNtkU+nrebbIa+nrebaacrc0K5WxtBsrZ2gyUtSkMlLUp+FCWrE1BhVkNfTtvDkt2j2STs9qU826zZPdIBjYHZJN7ctC388dSOIX+vH2FU+jP21c4hf6424xwCv08Ax8H7Ah8XQUSKyyuAomB1VUgMbC5CiQGdleBxA9luPoeVjhdBRIDl1OIJodT6I+bwwin0Pcz8HVANjlbKefdJpxCf95tshr6cd4cshr6cd4cHlnFxcCsiuu8OWQ19OP4KTJe2WcVFWY19PO89LIa+nl+sbMa+nl+sbMa+nk+RrMa+nVeKVkN/TqvlKyGfp1XSlZDf04hGFkN/TqfelmMfp1XShajX+eVksXo1/mQKrLPKgOzPqvnpZfV0K+jM20U2WeVFQ4HZIXTVcKxwuUq4RCYTaH/nD/nsin050yMkU2hPzuCRjaF/uwIGtkU+np+sbMp9PV8SGVT6M9+m5FNoT/7bUY2hf7stxnZFPp2zFka2RT6sxNjNNmRmBW+bsAvK5QdiRkoOxKzyc0N+GWF3Q34ZeBwA34ZON2AXwYuN+AXgVkN/cWNPquhv7jRZzX0F/flrIa+n1/srIb+4gKe1dCP56ywu9RpVjgckBVOlzrNCpcDosIkRv+VO72Q9yjeRN6rcrGZV1QuNvNk527+AWXnbgbKzt1ssuzczcDpGm2zycs12kZgFp//UYgmZ/H5H4UMfF0rcDa5uFbgDJQTg9lkOTGYgXJiMJssJwYzcDqFbPJyChGYxed/mpWjyVl8/qedOgNfp5BNLk4hA7OM+/OZEva4P58pYY/785kS9rg/nym2xz2bLGtTCDhtj/uJQNnjnoGvq55hYHHVMwysrnqGgc0VuzCwu1ISBg5X7MJAWZvCQFmbgsBH1qb8P5y9Xa7FSo9cOaIGlP+Zwykb9pNRDwXU/LuuDXxno9tBMtYEFoJbSukcMRjUQDibooGdDWpo4GCjJBo42aCGBi42qKGBmw1qaOBhYxAaeNmghgY+NmQggWbGfX5jmxn3+Y1tbqHPb2xzC31+Y5tb6PNXQIeOew3czCCvgYcZ5DXwMoO8Bj7mZ5dArz8/8xvb68/P/Mb2+vMzv7G9/vzMb2wz4z6/sc2M+/wVYG6hz0+KN0O/8pPizdCv/KR4M/QrPyneDP3KT4o3Q7/yk+LN0K/8pHgz9Cs/KWbGfX5SzIz7/KSYW+jzk+LN0O/8pHgz9Ds/Kd4M/c5PyoI+Yg2EPmIN7Mz2Kz9ieDP0++bAyRTqkhdTqIGbGZM18DBjsgZeZvvVFwX6iKVCb4b+5A8Hb4b+5F/nvBn6kz8cvC305+QKJwNqhYtt1NAKNwNqhYet6NAKLwNqhY+t6JAKvRn6m9+HBzrutcLOgFohdNxrhZPNBGiFiynUQGuK6315yYfNBGiFl80EaOBjMwGyZK9Hn1tZrtejf/nDwevR5+aY6/XoX/608Xr0L/8b2+vRv/zxdb2TsvOSrVyWlz8PvR79y5+HXo8+90Bdr0f/8v8CvB79yx+wXo8+t2ldL+P+yx+wXsb9lz8PvYz73AR1vYz73AR1vYz73AR1vYz73AR1vYz73MDzvIz73MDzvIz73MDzvIz73MDzvIz73HzyvIz73HzyvIz73HzyvIz73HzyvIz7dvKSL1tZpIGPKZQlexn3ubXjeRn3PTWSPS/jvn85cDCFuuTJFGrgYiuLdMmbrSzSwMMU6pIvU6iBj60skiV7Gfc9f6d4Gfe5teN5Gfc9f6d4Gfcjf6d4Gfcjf6d4Gfe5V+T1zRRq4GEri3TJl60s0sDHFMqSx8cUamBjK4tkyaOzlUUaOJhCXfJkCjVwsZVFuuTNVhZp4GEKdcmXKdTAx8a1ZcneDP3M3yneDH1uPnnmDH3+TvFm6Ff+TvFm6Ff+TvFm6HPzyTNn6PN3ijlDn79TzBn6wn342DC0BHoz9Llx4nkz9HkH/C04GawVOund7RR+QzgZrIFwMliXDCeDtUI4GawVwslgrRBOBkuFG00G//MnieChyeB//iIRPDQZHPDQZHDAm8i/GfyALI84ULiR1yZQeJDXJgBeplCX/JhCCfzpzxfaR/96uAbAhrw2+jc8zMkSAAdq+AfAyYD6N2T9+UDhZkCtkCXiBQpZIl4AZP15XTLszwfAhnrLumSzPz9zhSwRL1A4GVArXKiNGShkiXiBQtZ1DBSyrmMAfEyhLNnbQf/l9+Fj/83rkh/7bz4ADqZQlzyZQg1k/80HJbP/5gPgYQp1yZcp1MCHvjeokvf3sUQ8pfC/gA19wAgUdgbUCgf6gBEAJ4qHC4ALpbkFwI3C1wLgQZ9YgqvsJeK9XCHbrK2BjW3W1iU3tlk7UOht1s5v7MY2awclTwbUCtlm7UDhZkCt0Fqt/a9XypC8iz4Cad5DvK543frotVJ93froNXMe++ileQOFcgVAlvIVXJGFIq8ChRtFXgXAwxTqki9TqIEPRV7pkr3p+X9FXgXAxhTKkr3p+T+FGjhQQlVQ8mRArXChQKlA4UaBUgHwMIW65MsUauBDkVe6ZHMDff7ENjfQ5w9YcwP9zoFsA31QMkv5ChSylK8AyDbQB8CDQrkC4EWhXAHwoVAufZXNDfT508bcQJ8/beAG+gDINtAHJbMN9AGQbaAPSt5MoQayDfQBkG2gD4AP5ZBpoLmBPr+xN0v5CoBsr3YAHChDKwBOlKEVABeKvAqAGyVUBcDD/AMayLYF66fNZtuCtcLDtgVrhV53fuW3jdedX/lt43XnV/6S8rrzK78Pve78yl8BXnd+5Z8IvO78yk+K151f+R+cXnd+589Drzu/86Pnded3/v+y153f+dHzuvM7/5PY687v/Cx70/M7P8tewv3Oz7KXcL/zs3yh40vfNtDxJYHe9PzOHw7e9PzOHw7e9PzJP/d5Cfcnf9F7Cfcnf3x5Cfcnf3x5Cfcn/8vBS7g/+fPwsZSvoOTHFCpg8xLuT/qJoH0s5SsAdqZQlzyYQg1kKV9Byd5J2TlwM4W65MMUaqB3Ul5e8kPBZhroJdyf9J3SvIT7c3NgR0lpQcmei7jnwMkU6pIXU6iBnos4fx56Cfc3fx56Cfc3fx42loengV7C/c2fh+YG+vx52FkeXlDyYAo1kOXhBSVDv70GbqZQl3yYQg28KGAvKPkxoFRobqDPn9jmBvr8iW1uoM+f2OYG+vyJbW6gzx+wg+XhBQo3mwjQCg8DaoWXTQRohY8BpUK4gV4rhBvoA2BnCnXJgynUwImCzYKSFwo2C4CbKdQlH6ZQAy8KNgtKfijYTAO96fmWP7G96fncBNW86fncwNO8DfS5gad50/O5gad50/O5gad50/M9/9vGm57v+SvAm57v+R9L3vR8buBp3gb63B7TvA30uT2meRvoc3tM8zbQ5/aY5m2g7/k7xdtA3/N3ireBPjefNG8Dfc/fKd4G+pG/U7wN9CN/p5yPKZQlWz36H4Ua2FGwWVDyQMFmAXAyhbrkxRRq4EbBZkHJBwWbBcDLFOqSH1MogfdDwWa65NtQsFkA7EyhLnkwhRo42aCxLnmxQWMN3EyhLvkwhRp42aCxLvmxQWMJ9Cboc5tW8yboV/5O8SboV/5O8Sboc5tW8yboV35jmxP0+X3oTdDvgkI4F6wVXjYkqxU+BlQKuzdBn9sSujdBn7sIujdBn3fAuzdBnzesu9Oj/xnKXJK3EG9K3mYzmVrgYUCt8DopWn/f5jTwsRFKWbLXof8DSoVeh/5vQFErhBOPWiGceNQKJ5vW08Dl3DYtvw+9Dn3Lj7LXoW/5WfY69K1wYz8GlAq9Dn3Pb2yvQ9/z+/CnQ1+4bf6+fOmSBxsM0wonA2qFcI5LK4RzXBp4mEJd8mUKNRBOp8iSvQ79yp/YA06naIWdAbXCwcZdNHA6Z3nlV9ncQZ/fhwNOp2gg26wdAK2/vnbhorDN2hroTdHv/Cp7U/R/Jn55Urwp+p2/l70p+p3fNuYO+vxFP62/vv7+F9VA6LnXv+FhQK3wMnu3VvgYUCpc0B8pFS62LzhQ2JkVTytk+4IDhZP50rTCxXxpGriZQl3yYQo18DKjmy75MaBUuNkWVK1wsy2ogcLOjG5aIduCGiiczJemFS7mS9PAzRTqkg9TqIGX9Xt0yY/1eyTQ69DP/Mb2OvQzf2If5z/6VvjX7Fg7U1bLgZN1pDRwsY6UBm6mUF+UwxRq4GUtLl0yzCOWCr0O/cqP3oV5xFoh2y4UKBwMqBWy7UKBQrZdKFDItgsFCtl2oUAh2y4UKGTbhbTC96Ee15G8hnhb8qz/Uv7+btACYdKqBnpJq4WfcDGF+jeESata4WFArfCy2FGt8LEmnAKODyatbglsrKunFXYW6qmBg7UJNXCyJpwGLgbUF2WzJpxWeBhQK7ysq6cVPtbVk8AG8yM1sDGg/A29Dn0/ucLBWlwaOJlCXfJiCjVws56ZLvkwoFZ4Wc9MK3wMKBV6HfqVP7G9Dv3Kj16HqXi6ZJiKp4EwFU+XDFPxNHAzhbrkwxRq4GWdUV3yYzF7Emh26F9astmhz9/LXod+56/RAVPxtMLJustaIUzF08DNcvt0yYcp1MDLcvs08LGGugROmIonL8qEqXga2JlCXfJgCjVwsna1LnkxoFa4WbtaKzwMqBVelkamFT4GlAq9Dv3Jb+wFs760Qpj1pRUOBtQKJ4uV0goXA2qFm9kmtMLDgFrhZbYJrfAxoFS4YYKRVLhhgpEGwgQjXTJMMNJAmGCkS4YJRlohTDDSCmGCkVboJRi1XCFMMJJAr0P/5R8xvA79lx+9AxOMNBAmGGkg9LLo3xB6WTTQ87Lk7xSvQ5+3kIbXoc9bSMPr0H/5/yleh/7LnzZehz5vcg2vQ//ljy+vQ593zYbXoc+7ZsPr0Be6Zl6H/k+hLvkwhRoIs750yTDrSwIfzPqSJT+Y9aWBXtZX/k7xZugLnUdvhr7l7xRvhr7l7xRvhr7l7xRvhr7QbPVm6Fv+TvFm6PPu7fRm6Hv6PJzeDH3ebJ3eDH1vecmDKdRAL+tr5CV7WV89B26mUJd8mEINvCzRTZf8WKKbBDaYiidLbjAVTwO9k3Lykr2TsnPgZAp1yYsp1ECYiqdLhql4GniZQl3yYwolsHupePk7pXupePk7pXemUJc8mEINnCxZUJe8WLKgBm6mUJd8mEINvCxZUJf8WLKgBI6PKZQlj8YUaqB3UvLn4fBOSv48HJMp1CUvplADYX6kLhnmR2ogzI/UJcP8SAn0cu5n/jz0cu5n/jz0cu5n/jz0cu5n/jz0cu5n/je2l3M/87+xvZz7mf+N7eXcz/xvbC/nfubvFC/nfubvFC/nfubvFC/nfubvFC/nfubvFC/nfubvlAWTVnXJMGlVA72Jx/yd4uXc5+bk6eXcr/yd4uXc527nuWHSqix5w6RVDexMoS55MIUa6M0G568Ab4o+NydPb4o+NydPb4o+NydPr0efe4mn16PPvcTzwNlgWbLXo9/548vr0e/8LHs9+tycPL0efW79nV6PfucnxevR7/ykeD363Fg7vR79LtzYMJNYAr0e/clfo16P/uSvUa9Hf/Ib2+vRn/ydYk7R5ze2OUWfP7GdHv3PxPaTvIN4V/IumwDXwMfmq2XF3ib6P6BU6G2i/3OKaIWdAbXCwSZvtUI4G6wVLjZ5q4GbjaFqIExa1b8hTFrVwMcUqpKXN0Xfdw5sbDDsSWBnQK0QznFphZMBtUI4x6UVbgbUCg8bGdLAy0aGNPCxCR/5G5qb6Eeq0NxEn19lb4r+5FfZ3ESfP23MTfT5Vfam6F/hKm82ZqCBhynUJV+mUANhfqQs2Zuif/l92GF+pFbYGVArhPmRWuFkQK1wsdw+rXCzj30aCFPxdMnwy5dW+BhQKvQ69Dt/fHkd+p0/bbwO/clvG69D/wfUCif7QKAVLgbUCjf7QKAVHgbUCi/5QvDPQ0LwHuJ9iufN0P/ri4MW6M3Q/wG1wo6+OAQKBwqxC4CTKdQle6l4L1fIUvEC4GEKdcmXKdTAh2L2dMmLpeIFwMYUypIX28YVAL0vXyMveaIgwAC4mEJd8mYKNfCgqMKg5IuiCgPgYwplyd4M/Z9CDfROSv4K8GboW/4K8GboW/4K2OwbcQD0Tkr+TtksPzIAHqZQl8z21gVA7xtx/k45bG9dAGxMoSz5dKZQA738yPydciYK9QyAiynUJW+mUAO9bkr+TjkX9XsC4GMKZcmXJa0GwIb6Pbrk21G/JwAOplCXPJlCDVyogRSUzPbWBQrZ3rpA4WVArZDtrdMKvQ79zk/KY3vrAoVsb10AHKiBFABZKl7wGy7UQAoUslS8QCHL+goUsqyvAPhQv0cCt9ehfz0HNqbwk8DOFGqgl/W18pJZ1lcAZFlfQcks6ytQ6PUdbw68TKEu+aHwMK2wsayvANgYUJbszdB/+cPBm6H/8odDY1lfAZBlfQVAlvUVAFnWVwC8KKcqAD6UU6WB3gx9/tl5ezP0+Wfn7c3Q5x91t9ehzz/qbq9Dn3/h3N4Mff79cHsd+vz74fY69PnXue116Fvhxn4ozkcDvQ59/u1rex36/MvS9jr0+Zel7XXo8+822+vQ599tttehz7+KbK9Dn38V2V6HvucnxZuh7/lJ8WboR35SvBn6kZ8Ub4Z+5CfFm6Ef+UnxZuhHflK8GfqRnxRvhn7kJ8WboR/5SfFm6Ed+UrwZ+pGfFHOGPj8p5gx9flLMGfr8pJgz9PlJMWfo85NiztDnJ8Wcoc9PijdDP/OT4s3Qz/ykeDP0Mz8p5gx9flLMGfr8pJgz9PlJMWfo85MCZ+j1Nwdzhj4/euYMfX70zBn6/OiZM/T50fvp0VfM0ze/KMxJrBXCGfoA2JhCWbI5Q58/HMwZ+vzhYM7Q5w8Hc4Y+fziYM/T5p3tzhj5/OJgz9PnDwZuh3/nDwZuh3/nDwZuhzzuPG26iD4DDeXyd/Ds23EQfKFwo2CAAbqZQl8w20QcKLwNqhWwTvVbo5dyf1Nqx2Sr6f/4KE7yOeF3yPM99ywV6nvsvBy6mUJe8mUIN9Dz3Iy/Z89z3HPiYQlXy8Tr0fwo1sLG5BQ2EnnsNhJ57DZzM3j0kcDGvswZuZvzVwMNcsBp4mSVUAx8DyqtsbqLPL4q5iX7nQLaJPiiZbaIPgJO5D3XJ0B+pFW7mPtQKoT9SK7zMfagVQn+kVNjZ1mCtsLOtwQGQbQ0OSmZbgwMg9EfqktnW4EAh9EdqhWxrcKCQbQ0OFLKtwVrhYFuDtcLBtgYHCtnW4EAh2xocKGRbgwOFbGtwoJBtDQ4UQiexVgidxFoh2xqsFU62NVgrnGxrcABkW4ODktnW4AAIncS65MW8zlrhZgo1kG0NDkqGTmKt8DGvswQu6CSWJXsd+vy7zfE69Pl3m+N16PPvNsfr0Bc+s3gd+sJnFq9D/+VHz+vQf/nRW2xrcABkW4M1cLOtwQGQbQ0OgJ15nTVwMK+zBk6nPdPy16jXoW/5WfY69IXPfV6HvuVn2Uu5b/nR8zr0he+HXoe+5WfZ69C3/Cx7HfqWn2WvQ9/ys+x16Ht+lr0Ofc/P8mG7UAMg24UaANku1ADIdqFqoNehL3yD9Tr0hW+wXoe+5yfFS7nv+UnxOvQjPyleh37kJ+WyDY8BkG14DICX2bs18DF7twQ+tuExALINjwGQbXgMgGzDYwCczN6tgYvZuzVwM3u3Bh5m79bAy+zdGviYvVsB78f21gVAtrcuALK9dQGQ7a0LgJPZuzVwMXu3Bm5m79ZAlkkcAC9zY2vgY25sCfSm6Fd+Urwp+pWfFG+KPm9YX2+KfuUnxZui3/lJ8abod35SGnQSa+BhXmcNvMyarIGPWZMl0Jui3/lJ8abod35SvCn6vEd/vSn6vEd/O3QSayB0EmvgZj5dDWTp3QHQcxIXrrLnJM6vsjdFf1Or2/Wm6G9+23hT9De/bZwe/Y83eUneRLwpedBJrAVuBtQKD7PVaoXQSawVPpYiLxXSnHup8P/Xof+f//kf//5v//1//N/jyv8PbAsUTLjX2mDCvQZOZpvWlwMm3GuFMOFeAw8zduuSL4t71wofUyiBZsL9SEs2E+5HrrCzdHYNHMwcr0uezByvgTC3WwM3M8dr4GFedg2Ebnt9lR8LD5bADd32suQN3fYaCN32umTottdA6LbXJUO3vVYI3fZaIXTba4We2z7/q2ZDt70Eegn3O78PvYT7nd+HB7rt5VU+0G2vgZMp1CUvplADN7Pv65IPA2qFl9n3tcLHgFKhl3B/83eKl3B/86PnJdzf/Mb2Eu5vfh96Cfcvvw+9hPuXvwIu9BBrIPQQa+Bl/lcNfMyuKoE/vXnL1SdvG683X/jH58GMVa1wMIubVjgZUCtc7LuhVrgZUCs86DvfkTy22nFL3mOf+ZTAZ07Pt0zhM6fne66wM6BWONhnPq0Q7nbUwMW+zWngZp/SNPCwT2kaeJlCfZXhly+psMHdjlJhg1++tMLOPlRpINxYp4GTfajSwMU+VGngZt+VNPCwjywaeNlHFg18TKG8sb3p+b5zYGNfbWTJ3vT8yp825vR8/tbzpud3/tazNtD/fAbSwM0+A2ngYV9tNPCybyL6ojz2TUQCB8yZkCUPmDOhgdZJOflr1JueP/lrdMCcCa3Qy5nIz/KAX750yYcp1EDvy1f+l8OAX74k0OvNn/zx5U3Pn/zx5XXoT/6i9zr0J3/Rex36k7/ovQ79yZ/YXof+5E9sr0N/8ie216E/+RPb69Cf/Intdehv/jz0OvQ3fx4umMiiSx5MoQZ6iSz583DBRBYN3EyhLvkwhRp4WWtBl+wlsuTPww27KbJkr0N/8+eh16G/+fNww26KBk6mUJe8mEIN9Lop+ScCr0P/8k+mXof+5U9sr0P/8if2gdlFsuQDs4s0sLOemS4ZbkHVCmF2kQYu1tXTJcMtqFoh3IKqgbDvqEt+DCgVetPzX36Wven5Lz963vT8l9/Y3vT8l9/Y3vT8l7+Xven5L38ve9PzhW6FNz3/5SfF69C3/K3ndehb/tbzpucL/RTaodfAzmJyNHCwmBwNhB16eZUf3IKqFcItqBp4WMtfl3wZUCt8qOf//u+88zkt+h/elbzGWv5aYGdbDDQQboLQJU+2dEArXMyUoIGbAXXJh7kctELYodfAx4CyZNqhlwrNDv2XK+ys5a8Vwk0QWuFk0zMauJgpQZe8mSlBAw8zJWjgZaYEDYSbICTQ7NDnt43Xof+bntFAOJuiS4azKRo4mUJd8mIKNXAzl4Mu+TCgVniZy0Er9Dr0+Y1tdujz5+FPh97yYciSvQ79H1ArHMzYoYGTzfdo4GJOEQ3czIehL8phPgwNhF4WXTL0skig2aHPX1Jmhz4/y2aHfuYKBwNqhZN1pLTCxYBa4WbtGa3wMKBWCLspWiHspkjggt0UWfKC3RQNhN0UXfJgQK1wsl6FVgi7KVrhZq0FrfAwoFZ4WWtBK4RTXFLhT4f+v/3nf/z7//iP/+d//dt/C5sA+5Osxj5gy2rNaPv8kGw4wKWB8POwvh6L5WtrhTCwWys8LF9bK7wsX1sDH1MoS/ai7Qv/e3vR9oX/vb1o+8L/3l60feF/bzPaPv+Pwoy2z99PZrR9/oeXGW2fv/DMaPv8LzmvOT/yJ7bXnB/5K9lrzo+8UeE150f+jvea8yN/YpvR9vlfw2a0ff4KMKPt87+GzWj7/J1iRtvn7xQz2j5/p5jR9vk7xYy2z98pZrR9/k4xo+3zd4rXnB/5O8Vrzo/8neI150f+TvGa8yN/p3jN+ZG/U8xo+/Sd0sxo+y8HNqbwSmBnCjVwsI0IuuTJNiJo4GIKdcmbKdTAw3Y26JIv29mggY8plCV70fZz5sDGtkrIkr1o+7lz4GAKdcmTKdTAxfZe6JI323uhgYcp1CVfplADH9vMIUv2ou1X/k7xou1X/k7xou1X/k7xou1X/k7xou1X/k7xou1X/k7xou1X/k7xou1X/k7xou1X/k7xou1X/k7xou1X/k7xou1X/k7xou1X/k4ZgynUJU+mUAMX2xCjS95sQ4wGHqZQl3yZQg18bIeNLHl+bIeNBjamUJY8O1OogYNt2dElT7ZlRwMXU6hL3kyhBh62B0iXfNkeIA18TKEs2Vs/n/uf2oKLhWTJ3vr53P/UvPXzuf+peevnc/9T89bP5/6n5rXnc/9T89rzJ39ie+35kz+xvfb8yZ/Y3vr5kz+xvR597iFrXo/+5E9sr0efm9Ka16M/+RPb69Gf/Int9ehz21zzevQnf2J7Pfrch9e8Hv3Nz/KBK7ikQqdH/zcU9s9fYYLXEe+TPDbCFQAnGjILgAvNhAVANsIVANkIVwC8KKg2AD4UVKuBXsD9v2bC9H3tBdz/AbXCjpJvA+BAO5+CkieaWguAiwF1yduZgWj5SfEC7v81BheUfNEYXAB8TKEs+X1ork4rfN6w48yBHQ3qBUDvpOQvvcfiiAMgiyMOgF4ccX6WH1vEFQC9Ycf8pDw27ChPSv+cVRB/s4kB0Bt2TI9e9wbo+8yBA80mBsCJZhMD4GIK9UXZTKEGsmHHoOTLgFrhQ7OJWmFjw45aoTdAv/Pf0Bug/9dXmwA4mEJd8mQKNXChwOSgZBZHHABZHHEAvEyh/g1ZHLFW6A3Qn/yd4g3Qn/yJ3VkccaBwoKDaQOFkQK1woVzZQOFmQK2QhawGCi8DaoUPDYxqhYOFrGqFXsT9zd8pg62sC4AsZDUoeTp/wb4vBy4UYRqU7EVH5i8pb4D+5WfZG6B/+UvKG6B/+cPBG6B/+V9f3gD9y/9PmWwsOACyseCgZO+k5E+baa1NyT+Md2+A/uUPWG+APm8FdHOAPn/AmgP0+QPWHKDP/2j3OvRf/vjyOvR5t6J7Hfovfx56Hfq8/dG9Dn3+Hbt7HfrWcoUHDWwHCi+arw6AjwFlyV6HPv/c170OfeHrnNehL3z78jr0hc99Xoe+548vc4o+//vQ69CP/D70OvSjcB8yz32g8DGgVOh16Feu0JuiXwWFHRndAuBA9p0AOJGxI/gNFzJ2BMDNFOqSD1OogSyOOCiZeVm0wovyiP8xrwoes7J0yeus5a8FDgbUCmGHXitczEOgFW6mUANhh16XfBlQK3ys5S+BtEOvgbBDr4GwQ6+BsEOvgbBDr4GwQ6+BsEOvgbBDL0+K2aHPT4rZoU9PyvCW0PeVA1kccQBkccTyooyPxREHQBZHHJTM4ogDIIsjDkqGHXqt8KL04EAh7NBLoNmhT8/yMDv0+Vk2O/QzL5nFEQcKWRxxoJDFEQfAzRTqktlq7QDI4oiDklkcsQZ2tlpbl9zZau0AyFZrB8DBbBMaOJmxQwMXs01o4GbdZQ08rLusgZc1gzXwsd6tBHod+pffh16H/uWvUa9D//LXqNehf/lJ8SLuX35SzA59/iex2aHPj57Zoc+Pntmhz19SPx36Su82f0lN2HeUCs0Off5wmLDvqEseDKgVwr6jVrgYUCuEfUet8DCgVgj7jloh7DtKhQv2HaXCBfuOWmFHMcyBQth31MDJgLrkhVKTA4UbRQgHwMM6oxrIMomD35BlEmuFm2USB8CG4m8DYEfhsgFwoHDZADhZu1oDF4puDYCwQy/vw82SVgOFLGk1ALKkVQ08LGk1ADYU6hkAO4rMDIADRWYGwIkCKQPgQoGUAXCjuMcAeJhTRAOhl0We5cPyI7XCy/IjA2BDUYUBsKMgwAA4UBBgAJwoZi8ALhSzFwA3CrELgIc5ljSQpeLpk3JZKp5W+FgqXgBsKIAtAELXlwYOFG8WACdTKK+yl3NfaNB4OfeFBo2Xc19of3g594X2x2NZXxI4P5b1FQAbA3YJ7CiaK1A4mFlQAyczC2ogy/oKfkOW9RUAD3Mf6pKhP1IrfMh+uBSvMXvklDyYYKQFQn+kVjiYWVArhP5IrXAxs6BWuJm3Tys8zIqngZc55zTwMeecBMIl9PqimEvoTw7szAKlgTCXRf+GMJdFAxfzVOmSoetLKzzMsaQVsiX0gcLHHEtSobmEPr8PB8xl0UCYy6KBMJdFXpQBc1k0EHpZNBB6WTQQztDriwJn6DUQztDLkukMvQbCyWBZMu3Qa4VwMlgrhB16rdDr0OcnxevQf/lJ8Tr0X/4a9Tr0hT/avQ594Y92r0P/5c/DxfZrB0Bvv3Z+UrwOfeG/AK9D3/KTYs7Q548vc4Y+/z+FztBrIPSy6IsCvSxSodehb/nDgc7Qy5LNGfr8PqQz9Foh9LJohXCGXgM382Hokg/zYWgg2xocAB9zOUig16Ef+X8BZoc+vyhmhz6/KLRDr4Fsw2MAXKxdrYGbdZc18LDusgayvXUB8LHerQRemDahgY01MjWws0amBsK+owZO1tXTwMWacBq4WYtLAw8Dyree16H/ayBphY81kCTQ69Cf/C9Yr0Nf+G7jdej/OlK65MGAWuFELakjeQvxtuRttpdECzysxaWBlwF1ydZsyt9/y0rh8mbo//5b1sDGgFsCO2vCaYWDAbXCybp6GrhYV08DN+vqaeBhXT0NhGkT+irDfRBSYfP2QaxUYYN9Rw2EfUcNhH1H/RvCvqMGwr6jLhn2HbVC2HfUCmHfUSuEfUepsMO+owbCvqMGwr6jBg7W1dPAybp6GrhYz0wDN+uZaSDsO8obu8O+owY+NgwtSzZn6POrbM7Q50fPnKHPj545Q58fPW8P/Zf/Bevtof/yv2C9PfRffvS8PfRf4aLAvqMu2fk/pRX+C/D20Bf+C/A69C0/el6HvvBHu9ehL/xJ7HXoC38Sex36nj8PvQ79H1ArhJPBWiGcDNYKH2sgSYVeh37k72WvQz/yq+x16Ef+kvI69CO/yl6HfhYuymINJA3crIGkgYc1kDQQzjtq4GMNJAn0OvQrvyheh37lF8Xr0K/8ongd+pVfFK9DvwsXZbEGkgZu1kDSwMMaSBoIp7g08LF+jwQeOMUl33peh/7kH9O8Dn3hH/ADp7h0yXCKSwMX6/fokjcDaoUHNXye5F3Eu5L3WANJCjT30OcVm3voT1qymXKf/4Y05V6XPBlQK4R76LXCzWLztcLDFGogTLnXJcM99FKhmXLfc2BjTTgN7Cw2XwMH6+pp4GSx+Rq4WJtQA72TcnMg7Dtq4GU5/BoI+47q6O0PzjteCWwsh18DO8vh18DBcvg1EKbc64sCU+41cDOFuuTDFGog3EOvS34MKBWaKfctVWim3Odn2Uy57zlwMKD+Db15x5UrXKy7rIEw5V4DYcq9BsKUew2EKfcSSFPu5W1DU+410Eu5z8+y2aH/cuBksfkauFhsvgZaJ+XkZ9nr0J/8LHsd+pOfZa9Df/Kz7HXoT36WvQ79yc+yuYc+vw/NPfT5fejN0N/8PvRm6G9+H9IZeg309kEU7sPLFkxo4GMLJiTQnKHPn9hmyn3+xDb30OcnxdxDn5+UOZlC+RqdiynUQLiHXpcM90FohZfZd7TCx+w7EmjO0OdX2dxDn/8Dbu6hz/8BN/fQ51fZ3EOf/3vrdejzz87b69B/+Z/EC+6D0MDLkhI00HN95c/DDV1fGtgYUJbsdejz79jb69C3/AHrdejzz87bnKEvXJTNgFrhYUs6tMLLfGka+BhQlux16AtfOL0OfeELp9eh7/kfnF6HvucPWK9DP/K/HLwO/cifh16HfuT3oTdDPwpXGe6D0MDHrHgS6M3Qz/yieDP0M78o3gz9zC+KN0M/84tiptwXLspiVjwN3MyKp4GHWfE0EKbca+BjVjwJNFPu84tiptznF8VMuc8viplyn18UL+W+8NnZS7k/+R/tXsp94Suxl3Jf+Er8YNqELhmmTSjg8VLub/rt63gp97flCjuxzv3TVxG8gXif5E1kdAsELmR0C4AsbSIo+TCFGniRhyAomXXoNdDr0P8BZcleh/5fnYBAYWdArZDtDA4Usp3BAZBNBgcls8ngAMi+EQclXwbUCh/66KwV9o8BpcLe0EfnQGFnQK2Q5awGClnOaqBwoU9pgcLNgFrhQZ/SAoWXAbVC9uVLKxwfA0qFo6HvSoFC9uUrUDjQh6pA4UQfqgLgQh+qAuBGH6oC4EEfqgLgRR+qAuBDH6o00Juhn/lF8WboZ35RvBn6mV8Ub4Z+5RfFm6FfhYuy0IeqALjRh6oAyPY7BsCLPlQFwIc+VGmg16Hf+UXxOvQ7vyheh37nF8Xr0J/8oiz25Uu/9RbbWhcoZFvrAuBhCnXJlynUwIe+K+mSN/vypRU6HfqfD0tD8tiHry55g30G0gIn+wykgYsp1CVvplADD/tQpUuGX760Qm+K66UKjzfFdXNgY5/SZMmno+mZAOjNpnw5cKJxnAC40PRMANxoeiYAHjQ9EwAvmp4JgA9Nz2jgZbMpAZDNpgRANpsSANlsSgBksykBkM2mBEA2mxIA2WxKAGSzKQGQzaZo4GOzKQGQzaYEQDabEgDZbEoAnKzfI9/L3gz9zW9sb4b+5je2N0N/8xvbm6G/+d823gz9TW/s683Q35sDGxp2CYAdDbsEQNh3HBII+44aCPuOumTYd9RA2HfUJbPZlADo9R3z+7DBvqMGwr6jBnp9x/wqt4GGXQLgRMMuAXChYZcAuNGwSwA8aNglALLZFH1SvA59y0+K16Fv+UnpbDZFl+x16Ft+9MwOfX70OptNCUqGHXqtkM2mBAphh14rZLMpgULYoZcKzQ59/nDwOvQjfzh4HfqR/21jdujzi2J26HcOXKz/rYGb9b818LD+twZe1v/WwMf63xJodujzi+J16Fd+UbwO/covitmhzy+K2aEvXJTF+t8auFn/WwMP639r4GX9bw18rP8tgWaHPr8oXof+5BfF69DnH3XvYonEgUKWSBwAYYdelww79Bp4WLtal3wZUCt8qF+ttoJep0H/w5uSxxKJA4EskTgAwg69Lhl26DVwsXa1LpmlRwYKD+t/a4WX9b81EHboZcm0Q6+B1kkZKy3Z69CP/LbxOvQjP3peh37k96HXoR/50fM69CO/D70O/SjcNl7OassVelNcXwr0OvR/CmXJXof+T6EGWidljbxk66T8/dujgZMBdcksEy8AbtYz00C23zH4Ddl+xwD4mEJZstehf/lV9jr0L38FeB36lz+xvQn6L3/aeBP0X36VvQn6v36PBm7WntFA2E3RQNhN0cDHWgsK+D6W9CXvw/ex/Y6BQrbfMVDI9jsGCtl+x0DhQjlagUK23zEAHgbUJV+UoxUofChHSwO9Dn3+r9lrcN5RA+G8o7woXod+tFwhS/oKgF43JT/LXod+9BzozTvmZ9nr0I/8LHsd+vzf2+d16PN/b5/XoR/50fM69Pl/o8/r0M/8pHS2CTUAeptQ85PidehnflK8Dv3MT0qHfUcN9PqO+UnxOvQzPyleh37mJ2XAyWAN9PqO+UnxOvT5N4c3WCZeAPQmg/Mb2+vQr/zG9jr0q3BjP9YMlkCvQ7/yG9vs0Oc3tteh3/mN7XXod/4K8Dr0Oz8pk+0MDoBehz4/KWaHPj8pZoc+Pym0Qy+BZoc+PynmDH1+UswOfX5S6Ay9BsIZevmflNmhz4/eYumRAZClRwZAlh4Z/IYsPVID6Qy9LHmz9MhAIRuiP5LH0iO35MH0SC0QpkdqIEyP1CXD9EgNhDP0uuTHgFKh2aF/qUKvQ//3oUoDO1OoSx5MoQZOZkrQJS8G1Ao3a/lrhYeZErTCyxRq4GMNdQk0O/Qj/Q3NDn3PgbBDr0uGHXoN9Dr0+UnxOvR//y1roHVSVv7E9jr0Kz96l+0MDoDeScmf2I/tDA6AjaWeaGBnqScayHYGB0A4Q6+B0Msiz/KDXhat8DCgVniZ9UQrfMx6IoD382boX/bE/i9gYwo1sBvrx7638pIHM8do4GRAXbI3Q/9yoDdDf3PgYX4gDbxskFcDHzPHSGCDXhZ52zQ4GawVsq11AdCbDJ45EE4G698QTgZrhV52986BcDJYlwyzu7VCOBksFXod+r5ShV6Hvuf3odeh7/lt43Xoe37beB36nr8CvA59z18BXod+5E9sr0M/8ie216Ef+UnxOvQjf8B6HfqRnxRzhj4/KeYMfX5SzBn6/KSYM/Q3fXyZM/T50TNT7vOjZ87Q50ePptxr4GN+IAmcbL9jAGzMD6SBnfmBNHAwP5AGTuYH0sDF/EAauJkfSAMP8wNp4GX2Hfm08Tr0Kz8pXod+5SfF69Cv/KR4HfqVnxSvQ7/yk7Jg2oQGLmYw0sDNDEYaeJjBSAPhPggNtPbQ7/w/qc02oQbAxixQsmRvD/3Oz7K3h37nZ9nbQ7/zs+ztod/5Wfb20O/8LHt76Hd+lr099Ds/y94e+vOlN7a3h/7kZ9nbQ3/yj7reHvqTf8Q4MJdFlwxzWTRwMT+QLnkzoFZ4kCHoSd5FvCt5j9l3pECvQ//lFV+YyyJLvjCXRQMH8wPpkicDaoWL2Xe0ws3sOxoIc1l0yTCXRQOtk/L3sU+W7HXo/z72aaCXyzJyoJfL0nPgYJ4qDfRcXzMHQteXvG0edH1phYcBtcLLHEta4WOOJQVsH3R9XQmEri8N7MxTpYGDeao0cDJPlQYu5qnSwM08VRp4mKdKAy/zVGngY54qCfT20O/0LDdvD/3Oz3KDri9dMnR9aeBku650yYvtutLAzVZTaeBhu130b3iZ0U0DH9vtIoH9Y6tYNLAx55wGdraKRQMHW8WigZM55+R92BdzzmngZgp1yYcp1EDPH5kfve75I/OjNz7m7ZMXZcCsL63QOyn5nyJeh77lN7bXoW/5fTig60sr3AyoFULXl1YIXV9aodVN6fmL3uvQ9/xFP6HrS5Y8HSfxj7FDAwczduiSoZdFK4RpE1rhZkCt8FhdvfxFb87QF0qGe+ilwgW7KVIhTbnXCjtrfmiFgzU/NHAyhbrkxRRqIOym6JJhyr1WiNopt0keCrm/n+LtDzU/tEAz5T6v2Ey5P3nJgynUQNZNCUpmKfeBwo2aH4HCg5ofAfAyhbrkxxRKoDdD/6/2TABsqD0TADtqzwTAgdozAZDN0OvbBs7QBwo36vcEQNZNCUpmM/SBwoeaH1qhOUPfc2BjCmXJ5gx9fmObM/T5VTZn6PMntteh34WrvNFn8QB4mEJ9US5TqIEPfRbXwMcmg/Vv+NhkcADsTKEueTCFGsgmg4OSFwNqhRt9mwsUHgbUCr3J4Py9bKbczwzYzZT7kwMbGkINgCzlXl6UDlPuA4Us5T5QyFLuA4Us5T4AHqZQl8x2BgfAh8Zkdclmyn1+Y5sp9/mNbabc7xw40CBvUPJEg7wBcDGFuuTNFGogmwwOSr4MqBU+NGqsFZop9z0HNqZQltzZdu0AONAwdFDyRMPQAXAxhbrkzRRq4EHj2kHJF41rB0C2D0KXPNg+iADI9kHokgfbBxEAB1OoS2Z9xwC40IR6UDLbQx8A2Qx9UDKboQ+AbIZelwxn6ANgYwplyeYMff5OMWfo83eKOUOfv1PMGfr8nWLO0OfvFG+GfubvFK9DP/N3ymSbU3TJi21OCYBsc4ouebHNKQFwMIW65MkUauBCWQ5ByZsBtcKDshwChSxtIgCytAld8mZpEwGQpU3okr0Z+pU/YDdLmwgUsrSJALiYQl3yZgo18KA8jKDki/IwAuBjCmXJ3gz9yp+H3gz9zp+H3gz9zv/G9mbod/6A9Wbod/43tjdDn3ceuzdDn3ce+zlMoS6Z+SMD4EOZIrrk+6FMkQDYmEJZ8u1MoQYOlHoSlDxR6kkAZLksQckslyUAslyWoOTLgFohy2XRCh9zEmuFj+WyBApZLksAZLksQckslyUAslyWoGTmJA4UolyWOySPGYm75LFcFilwfCyXJQCyXBZZ8vhYLksAHMwco0uezByjgYsp1CVvplADD3Pb6JIvA2qFj7ltpEKYcq8V/nToC/M9f/YdDYReFl3yYECtEHpZtMLFgFoh9LJohYcBtcJrjSfmz0Mz5f6mJZsp9zdVaHbov1wh7NBr4GDtag2crHergYs1MjUQ9h018LAWlwayPfQB8LHmhwSae+jzi2Luoc+PntehX/lFMffQ53+KmHvoV64QfiPWwM0+mGogSyQOgJd9StNAtl1bA70O/c7fepNNBgcKOwNqhfD/ea0Q/j+vgYsp1CVvplAD2WRwUPJlQK2QjQYvxXMa9D+8KXnw/3ktEP4/r4GDKdQlT6ZQA+FksC55M6BWyHJWA4UsZzUAPqZQluzN0P8p1MDGRo1lyd4M/d+/PRo4mEJd8mQKNXCxYWhd8mZArfCw2WWt8LLZZQ18TKEs2ZyhnzmwsWFoWbI5Q58/sb0Z+pXfh94M/d+/PRq4mEJd8mYKNZBt1w6AbLt2AHxsdlleFG+GfudX2Zuh3/lV9mbod36VvRn6nZ/ly9IjAyBLjwyALD0y+A1ZemQAhN0UXfJjQKnwwW6KVPjYzuBAIeymaIWwm6IVwm6KVgi7KVoh7KZohbCbohVe1qvQCmE3RSmc3gx9/l/A9GboR8+BnTU/NJBtQg2AcIpLAxdrfmjgZs0PDTys+aGBcDZFAx/rVUhgg90UefS8Gfr8j/bZYDdFKxys+aEVTtb80EC23zEAbtb80EDoI9bAy3oVGgi7KfK26dAdKRV22E3RClnOaqCQ5awGQJazGpTMclYDIHRH6pJhN0UrZPbII3msmaLW9M0Bc1alwAFzVjUQ5qzqkmHOqgbCnFVdMuymaIUwZ1UrhDmrGghzVnXJMGdVAufHPjrLkmdjQK0QfiPWCgcDaoWTfdLVChf7pKuBmynUJR+mUAMvWpAWlPzQgjQNXB/7LK6BjX0W18COFqQFwIEWpAXAiRakBUCYs6qBMGdVA2HOqjwpC+asauBDC9I00OvQ/80SamBjvQoNhDmr8ipvmLOqgbCbokuG3RQN3GgxVQCEsyn6N4TdFK3wocVUGvjToc9nAr6XP7G9Dv3L/+D0OvQv/4PTm6D/8leAN0H/B9QKrf/nv/wsexP0X/63jTdBX/hv1Jug/wr3oTfFlV9lb4K+tfQqexP0Lb9tvAn6lr9TLttaFyj0ttblrwBvgr7lr4DLttYFv+FhQK3wsiBrDXysdytL9jr0Pb9tHttaFyjsDKgVDta71QphIrFWuFgzWCvcrBmsgYc1gzUQ5qxq4GPNYAVcXod+fjmwsWawBnbWDNbAwZrBGggz8TRwMeCWwM0C4rTCw5rBGggz8XTJj3WXpUKvQ59/TFtmhz6/D80O/cuBg4WbaeBk/W8NXCw6TAM3a6hr4GHBXBp4WeyVBj4WeyWBXod+5yfF69Dv/KR4Hfr8Y9ryOvQ7P3pmhz6/sc0O/ZeXvJmHQCs8zEOggZcp1CU/plACvRn6mz8PvRn623KFHbkSnuQNxLuSN5mHQAtczEOggZsp1CUfplADLzMl6JIfA0qFXof+z0MgFXod+r9/bjWwM4W65MEUaiDchKpLhptQtcLNTAlaIdyEqhVe5iHQCh/zEEig2aEfaclmh77nwM5cDho4mMtB/4aTAbXCxWwTGriZy0GXfJgPQyu8TKEGPubDkECzQ//lQDjvqIFw3lEDYXqkvG02TI/UQJgeqUuG6ZEaCDv0umTYodcKH2sGS4Vexv2XnxQv4/7Lbxsv4/6vu6yBg3WXNXCy7rIGLta71cDNgPoqw53BWuFlQK3wsc6oVHjhzmCp0OvQ9/w39Dr0Pf8NvQ59z/+t8Dr0PT/LXoe+539weh36wv/LXoe+8N/ohZPBuuTHerdS4YObUDWwsd6tBnbWu9XAwXq3GjhZ71YDF+vdaiDcWqeBh/VuNfCyVqsGwslgdfT2B3dxPQmEk8FaYWeNTA0crD2jS4Z7U7RCr5vScoWbtWc00OumjBzodVMK9+Fj7RkJ9Dr0Z+ZAuDdF3jYN7k3RwMH6PbrkyYBa4SINn9ckbyPeJ3kHtWcCgRe1ZwIg25uiS+5sb0oAbKjfo0vunQG1woHaM4HCidozAXAxhbrkzRRqIEuPDEq+DKgVPtTv0Qq9GfqRnxRvhv5f7ZlAYUftmQDI0iODkll6ZABcqD0TlLwZUCs8qPkRKGTdlEChdVJufpa9Dv3NL4rXob/5WfY69Dd/BXgd+ptfZa9D/1oO9LopXw5k6ZEBkKVHBsDLFMqT4nXoX/748jr0Lz8pXof+5Y8vbwv9l9823hb6VgBO1AkIgAt9uA+AbIoruCgHfbgPFF4G1Aof+s6uFXpb6P+AUqG3hb7wR7u3hb7wN7a3hX7kJ8XbQj/yB6y3hX4UrvJG39kD4EHf2QPgRd/ZA+BD39k10OvQz/yieB36mV8Ur0M/84videhnfvS8Dn3hXzOvQ1/418zr0Bf+k/I69Cv/L8Dr0K/CffhQa0EDvQ79yv+j9zr0hf/1zC30+dPG3EKf34fmFvr8KsMt9AGQbaEPgIcB9W3DttAHCtkWeg2EW+h1yXALfaCQdVMCINtaF5TMttYFQLaFPiiZ5awGCtEW+jckD8Wsvi55sJuiBB64hT4Asq11suQDt9AHwMHaM7pklrMaKITdFK0QdlM0kG2tC0pmW+sC4EMb13TJ7UMb1wKgs4X++/vnVpbcOtq4Fij0clZ7Dpxon1kAZFNcAXAzoL4oXt8xf9p4HfqRP7Eb7DvKkr0O/cqPXod9Rw2EfUcNhH1H/RvCvqMGen3H/KR4HfqVn2WvQ7/yk+J16Fd+UjpLJNYXxevQr/xFb3bo8xe92aHPX/Rmhz5/0Q+WSByUvBhQK9ysXa0VHgbUCi9rV2uFjzXUpUKzQ5+/pMwOfX5jmx36/Mb2OvR/DXUNnKyhroFs3jEAsnnHAHhQxHEAZPOO+qRMtt9RKzQ79PlJWSyROACyROIAyBKJ9UXxOvRffvS8Dv2XHz2vQ//lR8/r0H/50fM69F9+9LwOfeHLktehL3xZ8jr0X35SvA79l5+UDb0s8qR4HfqWn5TNJoMD4GZuG10ymwwOFF6U6hwA2WSwLvmwyWCt8LDJ4EAhmwwOFA5m39EK2WRwoHAx+45WuJl9RwMPs+9o4GX2HQ18zL4jgV6HfuQXxevQz/yieB36mV8Ur0M/84videhn4aKwROIACL0sGsgSifXDwevQF759XbYJVQNph14D2SZU/Rs+tgk1UMg2oQZAtgk1KJltQg2AsEOvS2abUAOFrEW/JA9tQn1qU+s1O/QjE3jNDv3IFf5/z8n//M//+Pd/++//4//en/8/sC1Q3g7UmRfrJayuvNjFFGogS1gNgCxhNQCyhNUA+Jh7QF5lrzf/96ewBjamUJbs9eb/FGrgYP4GDZzM36CBi9kR9EXZDKgVHuZv0EA4E6yBjxkmJNDrzf/ZEeRF8XrzY+fAzhTqktm24ADonZT88eX15mfLgdZJmfnR83rzc+VA66TMwn1onZSZX5QBXSwa2BhQ3oc/vfmCgWzlV9nszfccyPZqByWzvdoBcFu/YX5jm9Pz+V+w5vR8/k7xevMrf6dMawfqys+y15tf+TvF682v/J3i9eZX/k4xN9Dnjy9zA33+F+xkqd0B8DCfjS75MqBWCHMmpEKvN3/zs+z15m9+9Lze/M2Pnpdvf/OT4uXb3/ykePn2N//n0cu3f/lfDl6+/ctPyoI5ExoIcyYkcMOcCQ1szIGhgTBnQt7YXm/+K/yGkzkwNHAxw4QGbuZv0MDD3AMaeBlQX+XH3ANSodmbz//GPs5cyt+C5EBhZ+4BDRwMqEuezD2gFS4G1Ao3cw9ohYcBtUKW2h0ofAwoFZq9+fzh4PXmR/7E9nrzI7/KXm++8HXO682P/CqbvfnCRdnM36CBh/kbNPAyf4MGstRuDfR68zM/eo+ldgcKOwNqhYMZJrRCltodANkO1ADIUruD3xD25rXCy4BaIWvOq42lz2nO//C25Hm9+ZYL7KzZr4Feh77nwMkU6t9wsZa/VrhZy18DDwPqkmFqt1bodejz+9Ds0H850OvQ5ze22aHPb2yvQ9/z+9Dr0Pf8PvQ69H/GDg30ciby+7DBnAkNhDkTGgi9LPIsd+hl0cDGnCKyZLND33KFgxk7tMLJgFrhYqYErZBtCw6AMGdClwxzJjTwMduELNnr0M/8xvY69DO/D73p+Zm/ArwO/czvQ69DPwsXZTGXgwZuBpT3odmhz1/0Zoe+5wphh14q9KbnV/4HJ+3Qa4WdAbXCwfrfWiHs0GuFMGdCK9wMqBXCnAmt8DKgVvhYd1kqXDBnQipcMGdCK+ysd6uBbK92UPJkvVutcDGgVrhZ71YrhNPzGgin5zXwsd6tBJrT8/l/Ul6HvuUXxevQt/ykmNPz+Ukxp+fz56E5PZ+/6DfcBKF/w8OAWqHXoc+f2F6HvvBlyevQ9/y2Mafn8/eyOT2fP23o9LwueaKt1YFCOD2vgZsBdcmHtau1wsva1Rr4WLtaAs0Off6SMjv0+VU2p+fzi2JOz+cXxZyeL1yUxdrVGrhZd1kDDwPKo2dOzxcuymNAqfDBTRBSodeh3wVgR0umA+Bg7WoNnAyoL8pCW6sDhZvN92vgYfP9GniZQv0bPqZQAN/nbaC/2X34X8DGgFphRyaCJ3kD8a7kTWZK0AIXA2qFm5kStMLDTAla4WUKNfAxl4Ms2evQ/wGlQq9D//cJQwPhJghd8mBArdA7KTcHWifl75uIBlonpeX3odehb4WrbJ2UVrgo1klp+UUxO/T589DcQP/lwM4U6pIHU6iBk9l3NHAx+44Gbmbf0RflMPuOBl6mUJf8mEIJ9Dr0f19tNLAxg5EGdmbfkRfF69D/fQbSwMkU6pIXU6iBm/mBdMmHAbXCy1btaOBjBiNZstehH/lfsF6HfuQPWK9DP/LnodehH/nz0OvQ/1mgNHAxC5QGbmaB0kDvpORPG69DP/Oz7HXoZ35SvA79zE+K16Gf+Y3tdehnfmMv6PrSQM/1ld/YXod+5jf2gq4vDfRcX/nf2N4M/Src2I/ZyCTQm6Ff+Y29G7ORaSDMZdFAmMuigZMB5Wt0w1wWrXAzoFYIc1m0QpjLohXCXBap8MBcFqnwNGYj0wphLotWOJgvTSuEuSxaIdwupBVuBtQKD/OlaYVwu5BW+JjRTSr0OvRffpa9Dn3h073Xof/yl5TXoS98dvY69F/+R/uFO1M0cDOgvspwZ4pWeBlQK4Q7U6TCB3emSIUP7kzRCuHOFK0Qur60QrgzRSuEri+tELq+tELo+tIKoetLA6HrSwHbB11fGghdXxoIXV8aCF1fGghdXxoIXV8aCF1fGghdX1cCoetLK3zMpCWBVo/+x6SlgXBnivwNG9yZohXCnSkaCHem6JLhzhQNhDtTdMkwl0UrRDtT/veiTAF8DPgpoNej/5fFKJDYGyRqjR15giKNAxK1RrY/JSIuZLqJiBu5biLiQbabiHiR7yYiPmS8CYhet74VrozXrm+FKzOYsyUiMmtLRJzIlxERFzJmRMSNXAXBs8dr2vdbIF6oUVf9oEZJNPv2hfsRNu4jYkfegog4kBcgIk5kBoiILLIluB8ny2yJiAdq1FVfqFETWWxLQPQ6+KNwCs0WfuEUmj38wik0m/iFU2h28Qun0GzjF06h18efhTvca+TPwh3udfJn5Q5/yL0QPCn2B4lSo9nML/zdY3bzC//PmO38wik0+/mFU2g29Feh6g2JWiNbShQRLUflKrwLvab+Kryvva7+Kjx7Dos9iogduTeiqgckao0T+TcijQsStcaNHByRxgOJWuNFHo5I44NEqfF+yMURaLwNErXGjtbhREQWgRRVPSFRa1xoxU5E3MhtElV9IFFrvMhvEml8kCg1mp3+gsbXIFFrZFlIkcYBiVrjRI6JSOOCRK1xI89EpPFAotZ4kWsi0vggUWnsXs+/8LWwe03/wre97nX9x1fQOJAXIyJOZMaIiAu5MSLiRnaMiHiQHyMiXmTIiIgPOTICotf9n4Ur47X/Z+HKeP3/WTiFngFgjYLGiXweEXFBoq7aOjOFrwrdMwGsyt3j+WUqd491Zgr/afbuOWYK17p7QUmFc235ANo+BeJAPqGI6G0zegUiW2cUETckylPYD/IKRRovMgtFxAc1yqotH8CvRk1kkUlB1ZYP4JeoNQ5mQRoSOBmwS+CCDiQtcUOi1nic78LfKBAvimKKqn7QJSWJngvghyir9lwAP74rrbGjOKaIOKBGXbXnNjsFjdRtpokbEnXVXtjYK2i80BGniZ7brPDs8VwAP9+4NLFBj50mWmemFU6h5wJohVPouQBa4cx4LoBWODOeC6AV7nDPBdAKd7jnAuiVO/xBZ6Ek7g9qlM+e3aBGTewo2SuqeqBor4hIHZqaSB2amrihRn1lDtSoidShqaumDk1J9FwAPxpl1Z4L4EejJnboItVVD0jUGifK0IqICzpdddUbOl018UCNuuoLvbNa44PeWUn0XACj8DeF5wIYhb8pPBfAj0Z5ZTwXwCj8Ze+5AEbh2eO5AGbhXHsugFm4wz0XwCy8ue6FLlJNfNDzKYmPOjTlHf4aJGqNHfoptcYB/ZSaSB2aumrq0NQaN/RTauKBXkVNvNCrqIkPOgsVcXwfJHZJbNBZqDV2SNQaB3QWao0TErXGBZ2FWuOGRK3xQGeh1nghUWu0zszL3wrDy+l/hTv8xwVQ+Mv+5U/c0Tp0P2qNA7ofNZE6NHXVC7oftUbq0NQaPYdm4Q738vrfLRCpQ1P+jp4LoNDnGp4L4Cu8FTwXQKGHNDwXQKE/MzwXwDcLRMsF8BXucM8FUOjPDM8F8BXOjOcC+ApnxnMBFLopw3MBtMKZGdTVrInU1ayrpq5mrdFzNRfO9aCuZl31hkStkbqatcYLiVojdTVLjfODRKlxUlez1tghUWsc0CetNU7ok9bEBX3SmrihT1oTD/RJa+KFPmlNfNAnLYnrgz5pTWzQJ62J1NWsiQMS5Slc1NWsNVJXs9a4oQdZa6SuZq3xQu+s1vggUWrcH3S6So27QaLW2KEvVWsc0JeqiRNq1FUvqFETN3S66qoPJGqNMA9wSSDMA5wKeGgeoCY26EvVRJoHqInUoSkvzKF5gFrjgr5UTaQOTV31gb5UrfFCjZr4oItUEj0XwM9XCk1s0EWqiR26SDVxQBepJk7oItXEBV2kmrihi1SeGc8F0Apn5l7oS9XEB32pkui5AFrhzHgugF44M54LoBfOjOcC6IV3oecC6IVT6LkAeuFd6LkAfr72aOKBGnXVF2rUxAf9lKrq6bkAfr5IaWKDGqckdqhRE6lDU1dNMzQ1kWZoaiLN0NREmqGprwzN0NREmqEpiZ4LYLYCsUEfoCZ26APUxAF9gJo4oQ9QExd07ck7vG1I1BoP9NhpjRcStcYHPXZSY6d5gJrYoH9NE2keoPwdvZ0AP/41rZHmAWqNC/rXtEaaB6g1Huhf0xppHqDW+KB/TWr0dgL8uKQ0sUGirNrbCfAK59rbCfAK7xnPBfAVTuFY0E2hiRt6HzTxQKL+HS90KmiNDxKlRtMFUPgdZ4NErdFzARSeuHNA74MmTkjUVS/D6dp64YnruQB64X70XAC98J7xXACV/9g9F0DlP/ZF8wDllfFcAKPwfPRcAKNwrhfNA9REzzlTONeLOmc00XPOFM6M5wKofFXwXACjcGY8F8AonBnPBTAL/2l6LoBZODOeC2AWzswe0IGkid7uzMKZ8VwAs3BmPBfALJwZzwUwC2dme26zwpnZD7qkJPF8kCjfM5YPoFW+91g+gN/ES00c0MmlidRtpn/HBRMvtUbPbVY4hcdzmxVO4bnQv6aJDxLllbF8AL85n1Lj9TI0C2fmdpgcqolehmbhFN4Js0g10Tozu3BmLB/Ab7qpJh6YbqqJ1KGpidShKc+MtxNgF96F3k6AXTiF3k6AUziF3k6AUziF3k6AU/jW7O0EOIVz7e0EOIVT6O0EOIVT6O0EOIXv4d5OgJN/nVneToCb34/ro7mzWmNnxtQjgTB2dksgdWhqiQsStUbq0NQaDyRqjTRDUxMf9CpKoucC+Pm+Ln/HRjM0NbFDoq6aZmhqjRMStcYF3Y9aI3Voao1WVnMr3OGeC+DHT6mrftBPKYmeC+BHo6y6U4em1kgdmpo4oEZdNXVoao3UoamJ1KGpidShqX9H6tDUROrQlFUP6tDUROrQlFUP6tDUxAGdhZo4obNQExd0Fmrihs5CTTzQWaiJFzoLNfFBZ6EkejsBZuHKTJoHqIl0Y7Mm0u2z8knh7QRYld+Rbp/VGjckao10+6zWeCFRa6TbZ6VGbyfALTwfF90+qzV2SNQa6fZZrZFmm2mNNNtMa6TZZlojzTbTGmm2mSY+mEQmiZ4L4Cs8zTbNNpNXxnMBfIU73HMBfIX/PjwXQOW7mecC+Ar/fXgugK9wCj0XQOVLnOcC+Aqn0HMBfIVT+OMCKPgAW+EvKc8F0Arn2nMBtMK59lwAle+P1k6AVvm257kAKl80PRdA5Yvmoa5mXbXnai48KQ51NUui5wJohSeF5wKofNH0XAC9cPd4LoBeuNaXupq1xgW93Frjhho18UCftCZe6JPWxAd90pL4qKtZE6mrWROpq1kTqatZE6mrWROpq1kTqatZE6mrWROpq1kTqatZEfdHXc2aSF3NmkhdzZpIXc2aOKEH+Ujigj5prXFDjZp4oE9aEy/0SWvigz5pSWzU1ayJ1NWsidTVrInU1ayJE3qQNXFBD7ImbuhB1kSaoamJFzqG5bPH2wmwCne4txNgF+5wbydAoQuwvZ0Au3BmvJ0Au3BmvJ0Au3BmvJ0Au3BmvJ0Au3BmvJ0Au3BmvJ0Au/BW8HYC7MKZ8XYCnMKZGTR3VhM79Pdq4oDeWfk089IATuFvMy8N4BROoZcGcAqncNDcWV31hUSt0Qqe/XtQPAV0bAC//l4NbAx4JdCyNL+CQsvSfAtAz9L8FYjU0qyJGxL1daGWZq2Rhs5qjQ+apCXRswD8NCk0kVqaNbFDu7AmDmjuldfaswD8ELXGBY2zWuOGFlJNpPZMTaT2TE18UKO8MvuDGjWR2jNl1ZvaMzVxQI266gk1auKCIZ+auGHIpybSAE19ZWiApiY+qFFW7S0EGIV3obcQYBTuR28hwCzcPd5CgJ8P15o4oRVXExe04mrihlZcTTzQiivvcG8hwKpc6wfNvVKjtxBgFf6S8hYCrMLTzFsIsAp3z6WWZv07Ukuz1kgtzVojtTRrjdTSrDVSS7PWSC3NUuOjlmap8VFLs9ZILc1a44BLqrVGamnWxAVXSmvihhr173igSVoTaYCmrppazZTG89EAzSeJNEBTa+zQIqU10gBNrZFaALRGK0BzVa71ho09rfFAotZIwzO0RhqeIYmeBeDk78LjWQBO4X70LAC3FaoekKg1wm/N/1i6BXFB4ieJ8FtzoPFAotYIvzUHGh8kSo0dLjgLiI19vQ6IMD4jIML4jIAIvzXra+1FAbTC3WNGARTOjBkFMAvECzXqK/OgRkk0owBeXrUZBXALxA416qoH1KiJk30ZDqqG35oDjdsJiPkzcgcavW/No0C8kKir9r41F564XhTAKJxrLwpgFM61FwUwCs9wLwpgFJ7hng/gR6OuekGNmrhZFyAgHtYFCIiXdQEC4mNdAE30fACzcK09H8AsXBnPB7AKz3DPB7AK19rzAazCM9zzAazC3eP5AFbhiev5AFbhrz3PB7AqdzhccKaJ2xlr/lbhiev5AFbhrbBhfyao2jszhWf4hv2ZoOoFiVoj7M8EGg8kao2wPxNofJAoNR7Yn9EaPR/ALdyPB/ZnAo0DErVGJwrgp+MTaFysmxIQYX8mqBr2ZwKNFxK1xsdicbRGzwfwCv+xe1EAX+EvKS8KoPId14sC+Ar3oxcF8BX+NvOiAL7C/ehFAXyVu+ewOJeAeFn4SkB8LCpFE70ogFa4e7wogFa4e7wogFZ4X3tRAK3wjdSLAqh8a/aiACrfmr0ogFZ4hntRAL1y91xI1Bof619Ljdf0AeR/7V3TBzALxM6CTQLiYKEhwe84WbBJoHFBjZq4WbBJQDws2CQgXhZsEhAfCzbRRM8HUPgyfD0fQOGr6/V8AIWvrtfzARS+ul4vCmAU7nAvCmDmf1NcLwqg8GX4elEAs3AKvSiAwrfm60UBzMJ7xosCKHy9vl4UwCycQi8KoPA9/HpRALNwCr0ogMIX9utFARS+h18vCmAV7nAvCqDwPfx6UQCF7+HXiwIofL2+XhRA4ev19aIACl+GrxcFUPgyfL0ogFX428yLAih8Gb5eFMAqvLm8KIBdOIVeFMDuhd/xsqiUQOODGiVxfiwqJSA2FpUSEDuLSgmIg0WlBMTJolIC4mJRKQFxs2ATfYfPw8JXAo0XatTEx8JXNHF5vubCKVyNOaX1lVmdOaUDIoycCaqGkTMBcTHvdVD1hkSt8UDv9ZDEC4ldEh/0XkuNXh7AD1Fq9HwAP95rrbFDotY4oJtbEyd0c2vigm5uTdzQza2JB7q59bW+0M2tiQ9qlFV7PoBWuB89H8BfXkpA7CwvJSAO6DiXV8bLA/j5wq6JcC1gUDVcCxgQD3Sc66ovdJxrIlwLqKu+cC1gQGzQw66JHfrDNRGuBdRX5sK1gAFxQY266g01auKBTmlNvNAprYkPOqUl0csDmIWnmZcHMAvX2ssDmIUr86ivWd7hXh7AKlxrLw/g56ur1kh9zVoj9TVrjRf6cTXxQa+rIr7vg8QuiQ16XbXGDola44BeV61xQqLWuKDXVWvckKg1Huh11UTPo9kKxMfyUjSxfdDrKq+M5QP4JWqNnSWwBMQB3bO66gmJWuOCflytcUP3rCYe6HXVxAuJ+nd80OsqNXo+gK9wrT0fwFe41p4PoBWutecDaIVr7fkAWuFaez6AVrnW1KOpNVKPptZIPZpaI/VoSo2eD6DwLeV5PoDCl4/n+QAK3yme5wMYhfe15wMYhXfhgCvOAuKGvj1NPNBlp4kXOtj03UP9ZpLo+QBm4cp4PoBZeD56PoBV+B09H8AqPB89H8Aq/PcxqXdGE2G+WXCtqXdGa7yQqDU+6HSRGj0fwC7c4QuungmIHXbtNXHArr0mTqhRXmvPB3AKTzPsA9BVw9UzgUbqA1iS+CBxKiL2AUiNpg9gFTR6PoBT0Digs0ATJ9Soq15QoyZ6mYCvUPWBfgpNvFCjrhrun9FE0wfQ8qoPzQTUxA416qoH1KiJnndmFKpekKg1et6ZwvPR8wH8uHE08UKNuuoHNUqi5wNohWe45wNohWe45wNohWe45wNohWe45wNohWe45wNohWe45wNohWe45wNohWe45wPohWe45wPohWe45wPohWe45wPohWe45wPohWe45wP4cbBp4oQaddULatREmj2rq6bZs5pIs2d11TR7VhD/+Z+Hhs8ujaTpswGSxs8GhdP82QBJA2iDwj3X2VdBbqgyKPxAlQGShtAGhdMUWo30LAFjFAr3PAGjV5AdhuUGhQ+YlhsgJ1QZFL6gygC5oQ00KPxAH2iAvFBlUPiDKjXSWxYwKu8eb1vAqLx7vHUBo/Lu8fYFjMq7x1sYMCvvHm9jwKy8e7yVAbPy7vF2BszKu6fTMOegcM/1XHn3eGsDZuXd4+0NmJV3j7c4YFbePd7mgFl5UXirA2blqe7tDpiVp/rYUGVQ+IEqA+SFVvegcO/0VJ7q3gKBWXmqexsEZuWpPmkcelC4NzdQeapPOjgQFL6gygC5Ych6UPiB0wgB8kKVQeFwa22A9FYJrMpTfcG9tRGyQ5VB4QOqDJATjosEhS+Y3x4gN1QZFH6gygB54VhLULh3eirvnk2Hb3Th5laByrtn0/GboPABkYFKOoATqFwQGaikIziBygORgcoLx3oClQ8itcpDx3C0ykPncAKVHQ65BCoHnHIJkBOOuQTIBadSAuSGyODyHDiXEqi8cDAlQD44maKRl4am69/S2zTQKr+lt2qgVf7a8HYN9Mp96S0b6KXfcsHZj0DlhshA5YHTH4HKC5GBygcnSjTSWzlQas54OwdKPYpHw6AD5IBTJQFywqhlfRM9mgcdIDdEBoUfmN8cqPRGdCofIh6d0ZHI9tEhnamRDc6CBCo7RAYqB5wGCVROiAxULjhhEqjccMQkQB44YxIgaWhn8Fs+OBOiVXprCE7lQDaa26kLbzS4M0AOOGkSFD4hMlC54KzJ0cgNkVsjD/SkBcgLTWkBkubdaKTnNdiV39LzGvx8J9JX3PMa3Mrl8bwGP9+JApUTIgOVC34nClRuiAxUHphSE6i8MKYmQD74NUsjPa/BT6xMgKTf3PTlGfSbW6CSpt8EKif8jBeoXHB7ZIDccNljgKQJOAHywnWPAfJBlfqKTxqCo1V66QRf5b704gm+yn3p5RN8lfvSCyholfvSSyholfvSiyholfvSyyhopfvywq+sgcoHkVqlF1PQK5fHyynold/SCyr4+Ss4UDkgMlA54VfWALngV9YAueFX1gB54FfWAHnhV9YA+eBXVo3cH/x+qe/L3SAyUNmNVee/3y8D5IAfG4PCJ0QGKhdMGQpUbogMVB64hS5Ael+sS7f6g5vtNPJ8MLIpQDaY2RQgO1xuFyAH3G4XICdcbxcgF0yr0qfH8xqsyunxvAar8qLwvAarcnoO3c2mf0vPa7Ar96XnNdiVb26XrmcLkAM2FALkhKvKgt9yQZUBcsNlZQHywB5F8Fte2KMIkLTfowt/tN8TIBtse+jCPa/BrdyXXqLBjyntaeSEnZQASfs9VyO9fs+oqPQSp3oFeWFgWYD0MqdmjuxersHPB7IASTe2BcgO47sCJN3ZFiAnDMcKkAumYwXIDcOsAuSBSVEB8sKoqABJN7dpZKOr2wIk3d0WIDuMOQqQA2YIBcgJQ4QC5IIJPQFyw4ieAEm9BgGSeg0C5IMq5Xu8e16DH5UBssEAHF245zXoldNj5hpUTo/nNRiV0+N5DUbl9Hheg1E5PZ7XYFROj+c1GJXT43kNRuXd43kNRuXd43kNRuX0eF6DUTk9Zq5B5fSYuQaV02PmGlROj5lrUDk9Zq5B5fSYuQalW/3B9AWNxLkGAZLmGgRImmsQIGmuQYCccBY/QNKNiAFywyn3AHnglHuApEsRA+SD8+MauehkdoCkk9kBskOV+u/LRSezA5UTIgOV1unZlQPp5Rrsyunxcg125fR4uQa7cnq8XINdOT1ersGunB4v12BXTo+Xa3Aq7x4v1+BUTo+Xa3Aqt7qXa3Aq7x4v1+BUTo+Xa3Aqp8fLNTiV0+PlGpzK6fFyDU7l9Hi5Bqdyerxcg1s5PV6uwa2cHm9Vwq2cHm9Xwq2cHm9Zwq2cHm9bwq2cHm9dwq18IPP2JdzK6fEWJvwgtUpvY8KrPDYunVAIVA7DOvfr/Q+QdEIhKJxOKARIuqI3QB449BAg6ZLeAPng0INGel6DH5X6Jnp0QiFQ2SEyUDng0EOgcsKhhwC5YA5MgNxwjiJA0gmFAHnhHEWAfFClvImGl2tQaRMPL9eg0iYen+WxbrtS+IDTHoFKb75nV5B003VQ+IYDJIFKuus6UHnhAEmgkm671iq9XINKH3I0uu86UNnhmEuAHHDMJUBOOOYSIBcccwmQG465BMgDw4SCm4iuvQ6QDyJ14f2DYUJaZW9wzCVAdogMCh9wzCVQOSEyULngmEugcsMxlwB54JhLgLxwzCVAPjjmopHjg2MuAbLBMZcA2eFMSoAccCYlQNLV8fr0DG++51VUeolUldPj5RpUemdj0PXxAZLO9+jL4+UaVNoeY9IN8oFK6/+eSttjeLkGlbbH8HINKm2P4eUanFX5LTdUGSDpHvmg8AuRgUq4Ffsfh7BAel6DH+SnkY1Z4COVnTnBI+RgTvAIOZl7OUIu5guOkJv5giMk9FhHNxH0WEfIx6zGQeEb7i0NVG64tzRCdmaIjpCDGaIj5GSG6Ai5mCE6Qm5miI6QhxmiI+Rl7uXoVoce60DlgR7rCNmcPuSonPEDNy9GyAGRQeGTOcEj5GJO8Ai5mRM8Qh5m246QcPNihHzMCR4gPa/B33ei4L70vAazcsY9r8GsnHHPazArB9LzGszKgfS8BrNyIO9m5vKo8MMs8JHKC1UGyMcs8AHyfcwCHyEbs8BHyM4s8BFyML96cBM9uDsuUgl3x0XIzfzqEfIwV32EvMyvHl2eB5FS5fRyDXbhX/zp5RrsUVHZmas+Qg7mqo+Qk7nqI+RirvoIuZmrPkIe5qqPkJe56iPkY676AOnlGpzCd6Lp5Rqcyunxcg1OryAHM+pHyMmM+hFyMaN+hNzMqB8hD3PVRzfRZd7/SOWDKjXSyzW4hTfkNHcoVB4b5g6FymPD3KFQOePmDoXKGe9wb2mE3GycIELCvaXRTeRNKFQeGx1OKARIL9fgVs64uUOhciDNHQqVA2nuUKgcSHOHQuWvYHOHQuWMe7kGr3LGvVyDdyqFX4gMVD42QBKoNHcotAqysaGHCNkhUv+W5g6FyhX3vAZf5Yp7XoOvdMU3G3qIkHBCIUJeiAx+y8eM+gHS26HQKjfRglt/I5WdWeAjlXDrb6RyMgt8pBJu/Y1UbmaBj1TCrb+Rystc9RHyMVd9gPR2KFTaxNPboVBpwM7dmas+Qg7mVw9uInOHQuWKmzsUKgfS3KFQuuKH+S8jlZ5LtPJw29AlGiC9HQqlb8HeDoXSh1tvh0Lpw623Q6H04dbboVD6cHtgCnxwX3o7FErfgg/c+hshL8uqj5BeCnzl9Hg7FE7Bhji9HQqn8rz0diiUPi+bOxQqj+ALt/5GhS+IDFRulgn+zx+vCnkgsmvkhe7lAPmge1kX/mCOdYSEOdYRskP3coAc0BccICf0BQdI6rHWN9GjHusAeaAvOCj8QmSg8kFfsEQuz2vw869UgGzQcRsgO/SyDo2kLtEAOSEyKJy6RAPkhv7LAAmTeCMkTOKNLs+D1jmN9LwGq3IgPa/BqhzIRn1uAZL63ILfEmaJRsgFkUHhGxqpApUHIgOVF3qzAuSDRiqN7DBLNPgtPa/BrjyCO8wSjVTCLNEIOaGfKEDCLNHot9zQTxQgDzT/BMgLbTXBb0mdOlrloE4drdLzGtzKFfe8BrdyxT2vwa1ccc9rcCuvM9NrULo8G9oXAuSByOC3pF6DQCX1Gmgk9hoESOo1CJDUa6AvD/YaBConNAYESJiGGCE37OIHv+WB/fFA5YXIQOWD/XGt0vMa9Mpv6XkNKp+eluk1qLx7TK9B5U8D02tQ+dPA8xqUvhN5XoPSdyLPa1D6TmR6DSp/Gpheg8rl8bwGs/Kngec1mJUrvmGeW6RyQGSgcsJmdoBcsE0cFL4hMlB5YJs4QF7YgA0KhzuzA+SBO7MjZIMq9W/peQ1K/+l6XoNb+Zvo0G5poHLBPuTUyM0WCf/TTFLIA5GBygtbm4HKB1ubGunlGvy0NgNkg63NANlh0zBADtg0DJATqtQ3kZdr8KMyQG7YhwwKp93SQOWFrc0A+WBrUyM9r8GoXB7PazAqZ/zRbmmgknZLA5W0WxqopN3SAEm7pQGSdksDJO2WBpfnQaRUuT/aLV0a2SAyUNlhAzZADtiADZATNmCD35KmggQqtxMmtF5F5YE93QBJU0GCwh/s6WqVjaaCaJWe12CvCrLDNnGAHLCnG/yWEyIDlbRbGiBptzRA0m5pgLzOGT+ly0O7pRrpeQ1O4U/WbeYaVJ5EONcgUDlgTzdATtjTDZALNmCD33JDZKDywJ5uoPJCZKDyWdsCC/+Pb89r8CqvMzPXoPI6G3DzYqRyQGSgEm5ejFTCzYsRcrM1iRHywGZ2gLxsTWKEfFClvuKm16ByX064eTFS2WEXP1A52JrECDnZTsMIuaAxIEButtMwQtJcg+CKU69BoPJBpFaJvQZapek1qPyW2GsQqBwQGaikXoNApZdrUPlXCucaBEjPa9AqSJprECA9r0HlvjRzDSp//pu5BpWvBmauQeVW97wGo/Ik8rwGle/q2/MaVD6C7w03L0bIA90l+rGx4ebFSOWD7hKt0vMazMp9aeYaVA4kzjUICh8QGaikuQYBkuYaBIVviAxUHuguCVRe6C4JkNSpowu/1KkTIBs0rOjCvVyDW/nTwPMa/LiXj0ZOiNwauaAHJkBu6IgICj/QEREgL1QZFP6gSo18dPtVgKTbrwIk3X4VIOn2qwA5oRUkQC64qipAbuguCZAH7pUKkHT7VYB80AoikcfMNbgVZIPukgDZ4camADmgYSVATrgEKkAu6IEJkBsaVgLkgeuVAuSFu5AC5IO7kDTSzDWo3OqNOnUCJHXqBMgBtwwFyAnNPwFywZVAAXJD80+APHAlUIC8cCVQgKT7ezSyU6dOgKROnQDZ4bKdADmg+SdAUqdOgFxwM06A3DAjIkAemBERIC9cYxMgH3Q9aaTnNTiV+9LzGpzKfel5DU7leel5DU7lVve8Bqdyq3teg1u51b1cg1u51b1cg1u51b1cg1t5BHu5Brdyq88P7kkJkA0aqQJkh3tSAqTnc6vc6nPCPSkBkqaCBEiaChIgD1xqEiBpKsjRyAeRWuWP16BinavcRKtBu5cufHVo9wqQA8ahBMgJHWQBckFvVoDc0EEWIKnPLbiJLrR7BSofRGqVntfgq9zqntfgq9zqnteg0pw5ntegVW51z2vQKre65zVolVt900yd4CbyfG6rotLzuc0KkvrcNNLzGvwMewdIur9HX55D9/cEKun+nkAl3d8TqKT7ewKV1OcWqKROnQB5oQcmQNINJPq39LwGu3J6PK/Brvzf43kNSp+ezB0KldeZt0PhVG6iS506QeHObGkrfc26B64LCQq/cF1IgKROHY181KkTIGmmjr48j2bqBEiaqRMUTjN1ApULmn+uRm6YVhMgvUydXkF6mTp/N9HTyAeRUuX1vAY/f18GSLqB5Glkh8hAJd1AEqikG0gCJN1AEhRON5AEyAPtXkHhdANJgHzQ7qWRntfgx+4VIL1MnVFBduggC5ADOsgC5IQOsgC5oIMsQG7oIAuQBzrIAuSFDrIA+aCDTCM9r8GsnB7PazArp8fzGszK6fG8BrNyejyvwaycHs9rMCunx/MazMrp8bwGs3J6PK/BrJwez2uwKqdn0ESqAOn53CqnZ1CfW4CkPrcASX1uAZL63AIk9bkFSOpzC5DU5xYgqc9NIyf1uQVI6nMLkNTnFiCpzy1Aej63yn3peQ125b70vAa7cl96XoNTeap7XoNTutUftM5p5PqgdS5Aej63yunxvAancnrWgG68ADmhGy9ALujGC5AbuvEC5IFuvAB5oRsvQD7oxtPI/cFYswDZoMEvQNLtVwFyQINfgKTbrwLkgga/ALmhGy9A0jy3AHmhGy9APujG08jzQetcgGwQqT+Jng6tc4FK6nMLkBPavQIk9bkFv+WGdq9A5YHIQOWFDrJA5YN2L430vAatcsU9r0GlHXd/vAaF/viPnyhADugnCgqfEBmoXNBPFKjcEBmoPNBPFKi0Tk+p0eV5DUqNrud4rP93Vzwt3PMa9MpN5HkNeuX0PLo7Lih8wvC1QOWCKgPkhuFrAfLA8LUAeWH4WoB8MHxNIt/3wfC1ANlg+FqA7DB8LUAOGL4WICcMXwuQC4avBcgNLZ1PI6lLNFBJXaKBSprnplW2DxpPAyR1ierCG81zC1QOaDwNkNQlGhROXaKBSuoSDZA0zy0onOa5BUjqEtWFd+oSDZA0z00X3mmeW6ByMM/gP3/KKOSEyE8jFzP4RSo3RAYqPZ/bV1EJ89wiJMxzC5Ce16BXrrjnNfhRGSA78wxGhQ+IDFRO5hmMVC5m8IuQMM8tKvww61ykEua5RSofs84FKif0uUXIxkxpQeGe12BWHhue12BWbiLPazArN5HnNZilK76ZNysq/DAjVaTyQmSg8jEjVaDS8xqsyhX3vAar8lT3vAa7csY9r8Gu3ESe1+DP9RSpXBAZqNzMSBWpPMz1FCEvsyhFSJhIFSA3dOoEl8fzGpzKGd8wkSpCDmZYiZAwkSr6LRczrETIzdwlUeGHWUEi5GW+jajwxxwRgUrTa1C5PD9eA2vDXYTszLcRFT4gMlA5mckiUrmYySJCbmayiJAwUydCXogMLg/M1AlUXpipEyEbc0REyM7sC8FvSb0GkUroNYhUQq9BpBJ6DSKV0GsQqbwQGah8rPMcqPRyDUqfnjyvwai8zjyvwai8zjyvQenT04PbryIk7JZGSK9bWnm4PdgtjZBw+1VUuLP1txW+ZrXP8xrM/OH2X0jr9MxeQXbWJo6QAyKD33KyznOEXKxNHBW+ITJQeVjnOUJe1iaOkLBbGvyWDXZLIyTM1AkKbzBTJ0LCTJ2ocJipE6lcsAHbNdLrlv6dnqGRByIDlRc2YAOVDyK1yk67pVplp93SANmhyqDwAVUGyAkbsEHhCyIDlRv2dAOVB/Z0A+SFPd0A+SBS/5ae12BUnkSe12BUnkSe12BU7kvPazArN9GA268i5ILI4LfcsE0cqDwQGai8sPMcqITbrwLkhKkgERJuvwp+ywlTQSKVAyIDlTAVJFK5YDM7QG7YzA6QByKD3/LCZnagEqaCBCoXTAUJVHpegx9koLLD/nigEqaCREi4/SpCwlSQ6Ld0PNY/eRuRSpgKEqmEqSARknoNdOHYa6BVYq9BoJJ6DQIk9RoESOo1CH5L6jUIVMLtV5HKA+0LgcoL7QsB8kH7gkZ6XoNb+SfFzDWoXHHTa1C54thrEKicEBmoXNC+EKjcEBmoPNAREai8bGNThHxsvVKANL0GlZvI8xp8lSeR5zX4Kvel5zX4Kvel5zX4Kvel5zX4Kvel5zX4Kvel5zVopfvyQndJgHxsF1KAfDAVJLjiD+7viVR2iAxUwv09kcoJkYFKuL8nUrkhMlB5oGElUHkhMlD5oAdGIpuZa9ArSJhrECE79MAEyAE9MAFyQnfJ0MgFkYHKDU0WgUrPqXMqSM+p8ypIL9egcMab5zX4i8aOkNbpqXwEb57XYI0K0jo9lY/gzfMarFVBWqen8hG8WV6Dtiq3updrUPmu3rxcg1U5PV6uQeVTffNyDXbl9Hi5BpVP9c3LNdiVW70PiNRP9e753E4FSX1uAdLzub0KkvrcAiT1uQVX/LFtgYHK8UGVAbKxPXwRskPrnP4tx4DWuQA5ocqg8AVVBsgN3XhB4QciA5UXWueWRj6InBLpeQ16K6j0vAY/brwA2SEyKBzujotUwt1xERLujosKh7vjIiTcHRcVDnfHRcgHkbrwBXfHBSoX3B0XIeHuuAg5nJb7qNyXntdgVA6k5zUYlQO5aKZOUPhhG+4ilTRTJ0A+iNSFe16DUTnjntdgVl5nntdgVs74tk7Pz2BT8FtOtjQvUkldogFyQ2RQ+GF7+CKVFxpPA+SDSF245zWYlTPueQ1m5T3ueQ1m5Ywf6/T8fGwMfsvJVvtFKhd03AZImkgVFH7YtsBIJU2kCpAPInXh94O+YK3yNrYtMEJ2aDUOkN7peZXfcrIFhJHKBd3LAZJ6rIPCD3QvByqpxzpQ+aB7Wat81GOtVT64eTFSCTcvRkjqsQ6Q1GMdIBdbkxghN1QZXHHqsQ5UUo91gISbFzWyf9RjHSCpxzpAdrYmMUIOaNsOkNPy/hfuy/7BzYuRSrh5MUIeiAwKv2yZY6TyQXO5RrYPInXhrbH9kJHKDi3wAXKw/ZARckJXfYBcbD9khNzQVR8gD0QGN9FlKycjld7pqTw2vFyDVznjnU4oBEg6oaAvT6cTCoFKOqEQqPQmFCoHstMJhQDpTShUDqSXa/CjMvgtn5XSWXlDerkGr3LGvVyDVznjntfgq5xxz2vwVc74gHtLI+SC0x4BckOVwU0E95ZGKi9EBiofnPbQKucHpz0CJM0SDZAdDpAEyAFHMwLkhAMkAXJBlfomsrwGrVX+ZJ3efE/lDTkvnEkJkN58T+UNuT6oUl+e1eCYS6CyQ2SgcsAxl0DlhMhAJdxbGqncEBmohHtLI+SFkzMB8sHJGY3cH5ycCZANTs4EyA7HXPRNtGmWaICcEBkUvuDkTKByQ2Sg8lgZt5Uz/uM18JCBygdd9VrlgXtLA5XHm1Co3ESnQwt8gBzQXB78lnBvaaRysSWjkcoNneAB8kAneIC8UGXwWz6oUiO9XIPSd/UL95ZGKq1vbj9/Xx6NHBC5NXJCC3yAXNACHxS+ITJQeeDHxkDlhchA5YOf8TTyx2tQeLj9XHFdOM41CJA01yAonOYaBCpprkGgkuYaBCpprkGgkuYaBMgL/5UKkA/+KyWRw8w1mBVkg/9KBcgO/5UKkAP+K3U0csLdHoFKmmsQIDfcmhEgD/yHL/gtvVyDVVH5oEqN9HIN5qkgGwx0CJAdBjoEyAEDHQLkhIEOAXLBQIcAuWGgQ4A8MNAhQF4Y6BAgHwx00Egv12BVXhRersGPiVc/ibxcg1U5PTjXIFBJ9/cEKhf8EBGo3HC8P1B5oMoAeeF4f4D0vhpULo+Za7AKl8fMNai8x3GuQVA4zTUIkHR/T1D4gshA5YafS55GHoi8Gnnht40A6U1mjwLSzDXoFWSDs/j68pi5BrOCpLkGQeE01yBAet/cKre6mWuwK0iaaxAgaa5BgPQms1sBiXMNAiTNNQiQNNcgQA4YQhAgJ0wMCJALJgYEyA3H+wOkl2tQOT1mrkHl9Hi5BrNyerxcg1k5PWauQeX0mLkGldPj7VCYldNj5hpUTo+Za1A5PWauQeX0mLkGldNj5hpUTo+Xa7Aqp+fQ7VcBssEp9wBJt18FSG/7VeX0HLr9KkAuOOUeIDeccg+QB46kB8gL58cDpDeZXTk9Xq7BrpyeS7dfBUhvMrtyejyvwa6cHs9rsCunx/Ma7Mrp8bwGu3J6zFyDyukxcw0qp8fzGpzK6fFyDU7l9Hi5Bqdyerxcg1M5PV6uwamcHi/X4FROj5drcCqnx8s1OJXTY+YaVE6PmWtQOT1ersEtnJ750cnsANngGHWA7HCMOkAOOPMcICccUA6QCw4oB8gNB5QD5IEDygHywmniAPmgdU4jvVyDV7nVvVyDV/iuPr1cg1c5PV6uwZsV5IQ2xAC54MxzgKST2cHlobvjApV0d1yAfHBAWSM9r8FXOeOe1+CrnHHPa/BVzrjnNfgqB9LzGnyVA+l5Db7KgfS8Bl/lQHpeg69yejyvwVc5PZ7XoFVOj+c1aJXT43kNWuX0eF6DVjk9ntegVU6P5zVoldPjeQ0qxoDp5Rq0yunxcg0qXoPp5Rr00k30IFKr9HINKl386eUaVFru08s1qHSep5dr8IMMVE7oqg9ULogMVG5o1A9UHogMVF7o/Q9U0slsrXLRyWytctEJhUAlnVAIVNLNi4FKunkxUEknFAKVdPNioJJOKAQqrcnsVXmdLbo7Thfu5Rqsyk3k5RpUmjNz091xgcoB58cD5ITz4wGSeqyD35JOZgdIOpkdIOlkdvBb0slsjTx0MlsXfuhkdqASTmb/8zBWSG8y+1+3+j/+J4WcEBmohNuvIiTcfhUhD/OyRsjLvKwR8jEva4D0vAa9csU9r8GflzVCduZljZCDeVkj5GRe1gi5mJc1QsLtVxESbr+KkHD7VYR8zMsaIB/cfhUh4farCAm3X0XIwbysEXIyL2uEXMzLGiE387JGyMO8rBHyMi9rhHzMy6qRy/MazFtBNuZljZCdeVkj5GBe1gg5mZc1Qi7mZY2Qm3lZI+RhXtYIeZmXNUI+5mUNkJ7XYFVOj+c12JXT43kNduX0eF6DXTk9ntdgV06P5zXYldPjeQ125fR4XoM/L6v+H3J5XoNdOZDeDoVdOZDdSaT68bIGhXs7FHbljHs7FHbljHs7FE7ljHs7FE7ljHs7FE7ljHs7FE7ljHs7FE7ljHs7FE7ljPfHHLcB0tuhcCoH0tuhcCqnZ3TmuI2QgzluI+RkjtsIuZjjNkJu5riNkIc5biPkZY7bCPmY4zZAerkGt3JferkGr3JfTri/J0LC/T0RcjLHbYRczB4bITezx0bIw4ynwR8wE+7viVQ+5rgNkAvu74mQcH9PhIT7eyIk3N8TIeH+nggJ9/dEyM3ssRHyMHtshIT7eyLkY/bYAOl5Db7K6fG8Bl/l9Hheg1Y5PZ7XoFVOj+c1aJXT43kNWuX0bLi/J0LC/T0REu7viZBwf0+A9LwGf8bT4KV74P6eSGVnxtNIpecSrdxEB+7viZBejnXlJvJ2KFRa7uvAHOsI6blEK89Lb4dCpeW+vB0KlZb78nYoVFru63ou0cqtfgdz3EZIz2NdudXvYo7bCOl5rCun5x7muI2Ql9ljg+flfSxmPFD5PqgyQDYWMx4hOzPxBr+lt0Oh0sVfD26/ipBw+1WE3CxmPEIeFjMeIS+LGY+Qj8WMa+T2dihUWu7b26FQablvb4dCpeW+vR0KlZb79nYoVFru29uhUGm5b2+Hwip0+La3Q6HSct/eDoWfznOg0tsdV7nVG9wdFyG9CYXKre7tUKh0nre3Q6HSed7eDoVKm3h7OxQqbeLt7VA4hb+JtrdDodJ53t4OhUrneXu5BpXO8/ZyDSqd5+3lGvx0nvXl8XINzqwgB1QZFD6hygAJU+CjwjdEBioPHM0YGnn/387OHdduIwiie3HsgOT8F+PEgAIBtmHIn0x7t+TkEQK6UKcWoIMevVu3yb7VNSHyqZEn9GbVSOY1eDWK+uDMa/BCiiqf0PUkqmwhUlTZQ4uSQI7QoiSQM7QoCeQKLUoCuUOLkkCe0E9Uf4iY12A5H3XmNXh9BQvkE1qUBLKFFiWB7KFFSSBHaFESyBlalASSOXWa87ncIVJUeULXU41kXoPtqId5DbajHnaHwnbUw+5Q2M5Hnd2hsJ2POrtD4eV6qj+X7A6F46iH3aFwnN6Dcg3eridx8DANUSDZHQrH0Ti7Q+E4Gmd3KBxHkOwOheM8DM4wDVFVGaYhKuQMf8wWB18hUlS5w1+eRZUnRNZVLnRndnO+gpnX4PUTUn1w5jXozpfby2tgHLw7X24r/b1HIEeIFAefWVqNQqYTa3HwHSJFlSccL9dVMq/Bcj7qL6+B8eexXvh2ePOiqjK8eVEhe1ilOPgIqxTIdOYmDr5CpKiSzdw+vtVHjTwhspdIlmvwmgwKZHgDiUI+4Riv/r884Q0kqsoejvFEleENJKrKGU4GBXKFYzyBTGduApnO3Mo/z7rSmVuvkXc4IBPIJ5xmCWS6HSeQPZwTiT/PCJGiynQ7TiDT7TiB3OFQRyBPOC6p/zzwDgXnQ5TeoaCqfEKkqDKdGogq06mBqHKE7+OiynRqIKpcoV9dVJlODQTyhFXWB3/CHGuFvENXfX1w5jV4ZeMJZAurFAfvYZUCOcJ1AnHwGa4TCOQKqxQH32GVAnnCpYf64OwOhdfSg0DeYZX1wdkdCq8qBbKFqxni4D1czRDIEVYpDh6mwCvkChdIxMHDFHiFPGGV9cHZHQrN6T3sDoXm9B52h0Jzeg+7Q6E5vQfeoeD0HniHgtN74B0KTu+Bdyg4vQfeoeD0np7u99QHH+l+j0DeYZX1wUf6e49AtnALSRyc/d7j9B54h4LTe+AdCk7vgXcoOL2H5Rp0p/ewXIPu9B6Wa9Cd3sNyDbrTe1iuQXd6D8s16E7vYbkG3ek9LNegO72HeQ2603uY16A7vYd5DbrTe5jXYDi9h+UaDKf3MK/BcHoP8xoMp/ewXIPh9B7mNRhO72Feg+H0HpZrMJzeA70GTu+BXgOn9zCvwXB6D/MaDKf3sFyD4fQe5jUYTu9hXoPh9B7mNRhO72Feg+H0np3ulgrkCqsUB0+dOgLJnDpO72G5BtPpPSzXYDq9h+UaTKf3sFyD6fQelmswnd7Dcg0c38ZiuQbT6T0s18CxgiyWazCd3sNyDRx3yWa5BrM7yDtcox418gnXqAWyhVWKg/ewSoEc4bK3OPgMl70FcoVVioPvsEqBPOH+eH3wO3WJCuQdVlkfnOUarMtBtnDLXRy8h1vuAjnCKsXBZ1ilQK7QHisOvkN7rECesMr64DDXwOk9T3jzojg48xo4prTN7lB4OW5XjewhctbIEV5qIqqcoYlXVLnCKgVyhyZegTzh1Ss1EuYaLAeZ3kAikE9o4hXIFpp4BbKHjtv6o85yDZbzIYK5BtZffIUmXoHc4Uq6QJ7QF1wj4R0Kl4Mk+z3v/fH6Q8RyDV5WY4FsIVIcvIeL8wI5QkO0QM7QEC2QKzREC+QO3csCmW5m1x+ikW5m11UOpJ7jfAWzXIOXe1kgU4+1OHgPny9FlWkilahyhs+Xu0ayO7M/voJPjdwhUlSZJlLVSJZr8HpkFcg0kUogn/CRVSDTRCqB7OHVfgI5wqdggZxhyJVApttxArnDkCuBPOGzeo1cV3gPn0De4bO6QD5hyJVAtvDxXyB7GHIlkCN8oxDIGb5RCOQK3ygEcodvFAJ5wmf1Grmv8FldIO/wWV0gnzDkSiBb+PgvkD28LVAgR/hGIZAzzM0SyBW+pAjkDkOuBDJ976mRLNfgOOphuQbHUc9JE6kEMn3vEcgexkcJZPreU79RnDQVRFQZvveMu0aG7z3jqpEnO3hd5WFegxfyqpFIPc8HstXIJ/y/FMgWIp8aidTzsfOsqkS953kcJOo9HwvKCsnU0x0kU89ykKj3fKz+CiTLNfhYqlVIpp7tIJF6miNIlmvQHEGyXIPmqAd5Da7mqAd5Da7mqAd5Da7mqAd5Da7mqAd5Da7mqAd5Da7mqAd5Da7mqAd5Da7uqId5DbqjHuY16I56mNegO+phXoPuqId5DbqjHuY16I56mNegO+phXoPuqId5DbqjHuY1GI56mNdgOOphXoPhqId5DYajHuY1GI56mNdgOOphXoPhqId5DYajHuY1GM5Hnd2hcJyDM6/BcTTOvAbHOji7cd7ROMs1uByNs1yDy9E4yzW4HI2zXIPL0TjLNbgcjbNcg8v5qLNcg8vROMs1uBz1sFyDy1EP8xrcjnqY1+B21MNyDW5HPSzX4HbUw3INbkc9LNfgdtTDcg1uRz0s1+B21MNyDW5HPSzX4HbUw3INrGEjyzWwho3pHQoKyfLcHPXAOxQc9aR3KAgkyzWwJoMs18CaDLJcA2syyHINrMkgyzWwJoMs18CaDLJcA2syyHINrMkgyzWwJoMs18CaDLJcA2syyHINrMkgyzWwJoMs18CaDLJcA2syyHINrMkgyzWwJoMs18CaDLJcA2syyHINrMkgyzWwJoMs18CaDLJcA2syyHINrMkgyzWwJoPMa2BNBpnXwJoMslwDazLIcg2sySDzGhiTwediXgNjMvgNeWfRMgr5ZKEtCtmy0BaF7FkcikKOLA5FIWcWNKKQKwsaUcidRXgo5MkiPASS5RpMRz0s12A66mG5BtNRD8s1mI56YK6Box6Ya+CoB+YaOOqBuQaOemCugaMemGvgqAfmGjjqYbkGy1EPyzVYjnrYHQrLUc8TbscpJHOJOup5QpdoafD7hlzhj4ajRu4Q2WvkCX+HrKtkXoMXsq6SeQ1ej1mzRj7h/6VAsu2420Gy7bjLQY5sH1IhZ7YPqZAr24dUyJ3tQyrkyfYhBZJ5DV6PWQIZpoIo5JPtQypky/YhFbJn+5AKObJ9SIWc2T6kQq5sH1Ihd7YPqZAn24cUSJZrsBz1jDvbh1TIJ9uHVMjw5kWF7Nk+pEKGNy8q5Mz2IRVyZfuQCrmzfUiFPNk+pECyXIPtqIflGmxHPSzXYDvqYbkGx1EPyzU4jnpYrsFx1MNyDY6jHpZrcBz1sFyD46hnpu89NZLlGpwf1PPLzz99/vvT79/+8a+//fPpzy+f//iem/Pvpy9//f+vnn331c+a6/vT7vz69T+s29Lr" + } + } +} +return persepolis diff --git a/space-exploration_0.5.80/space-exploration/scripts/ruins/satellite.lua b/space-exploration_0.5.80/space-exploration/scripts/ruins/satellite.lua new file mode 100644 index 0000000..0ed08d3 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/ruins/satellite.lua @@ -0,0 +1,92 @@ +-- Note: Default entity force will be 'capture', if a player character get near and there are no enemies the player will capture the entity. +local satellite = { + center = {x = 0, y = 0}, + landing_offset = {1,5}, -- only used in the satelliet blueprint, not normal ruins + force_name = "friendly", + insert_list = { + {x=4, y=2, items={{name = "se-space-science-lab", min = 1, max = 1}, + {name = "automation-science-pack", min = 1000, max = 1000}, + {name = "logistic-science-pack", min = 1000, max = 1000}, + {name = "chemical-science-pack", min = 1000, max = 1000}, + {name = mod_prefix.."rocket-science-pack", min = 500, max = 500}, + }}, + {x=4, y=4, items={{name = "se-space-manufactory", min = 1, max = 1}, + {name = "iron-plate", min = 1000, max = 1000}, + {name = "copper-plate", min = 1000, max = 1000}, + {name = mod_prefix.."beryllium-plate", min = 1000, max = 1000}, + {name = mod_prefix.."vulcanite-block", min = 100, max = 100}, + }}, + {x=4, y=6, items={{name = mod_prefix.."space-platform-plating", min = 200, max = 200}, + {name = mod_prefix.."space-platform-scaffold", min = 200, max = 200}, + {name = mod_prefix.."deep-space-transport-belt-yellow", min = 200, max = 200}, + {name = mod_prefix.."deep-space-splitter-yellow", min = 10, max = 10}, + {name = mod_prefix.."deep-space-underground-belt-yellow", min = 20, max = 20}, + {name = mod_prefix.."space-rail", min = 100, max = 100}, + }}, + {x=-3, y=2, items={{name = "solar-panel", min = 10, max = 10}, + {name = mod_prefix.."pylon", min = 1, max = 1}, + {name = mod_prefix.."pylon-substation", min = 1, max = 1}, + {name = mod_prefix.."pylon-construction", min = 1, max = 1}, + {name = mod_prefix.."space-capsule"}, + {name = mod_prefix.."rocket-landing-pad"}, + {name = mod_prefix.."delivery-cannon-chest"}, + }}, + {x=-3, y=4, items={ + {name = "water-barrel", min = 200, max = 200}, + {name = "lubricant-barrel", min = 10, max = 10}, + {name = "heavy-oil-barrel", min = 100, max = 100}, + }}, + {x=-3, y=6, items={ -- weapons added here + {name = "raw-fish", min = 10, max = 10}, + {name = mod_prefix.."medpack-4"}, + }}, + }, + prebuild = function(surface, ruin_position, ruin) -- surface, position, self (DO NOT MODFY SELF) + -- function that runs before tiles and entities are added + end, + postbuild = function(surface, ruin_position, ruin) + local ruin_position_center_offset = Util.vectors_delta(ruin.center, ruin_position) + local pos = Util.vectors_add(ruin_position_center_offset, {x=-3+0.5, y=6+0.5}) + local weapons_chest = surface.find_entity("steel-chest", pos) + + if weapons_chest then + local r = math.random(1,2) + if r == 1 then + weapons_chest.insert({name=mod_prefix.."tesla-gun", count=1}) + weapons_chest.insert({name=mod_prefix.."tesla-ammo", count=200}) + weapons_chest.insert({name=mod_prefix.."cryogun", count=1}) + weapons_chest.insert({name=mod_prefix.."cryogun-ammo", count=200}) + elseif r == 2 then + weapons_chest.insert({name=mod_prefix.."cryogun", count=1}) + weapons_chest.insert({name=mod_prefix.."cryogun-ammo", count=200}) + weapons_chest.insert({name=mod_prefix.."biogun", count=1}) + weapons_chest.insert({name=mod_prefix.."bloater-ammo", count=200}) + end + end + --surface.create_entity({name="iron-chest",position={x=ruin_position.x - ruin.center.x, y=ruin_position.y - ruin.center.y}}) + -- surface, position, self (maybe modified) + -- function that runs after tiles and entities are added + -- maybe required to set conditions + --[[local accumulator = surface.find_entity("accumulator", + { + x = 10.5 + ruin_position.x - ruin.center.x, + y = 8.5 + ruin_position.y - ruin.center.y + } + ) + local control = accumulator.get_or_create_control_behavior() -- https://lua-api.factorio.com/latest/LuaControlBehavior.html#LuaAccumulatorControlBehavior + control.output_signal = {type = "virtual", name = "signal-B"} + game.print("test end") + ]] + end, + blueprint_strings = { + { -- tiles + xadj = 1, yadj = 2, + string = "0eNqt2stu2lAUheF3OWMinYsvwKtUGVBiIktgUEyqRoh3bwgMOiml/jrKTXuDf7ZPlvdap/B9+94d3vrhGJan0K/3wxiW305h7F+H1fbyu+PHoQvL0B+7XZiFYbW7/DR2T+Nhte6eDtvVcbN/23190w+v4TwL/fDS/QzLdH6ehWO/7a4dD/uxP/b74dLz869PaTELH59fm/NDXf/coJ7cYH5t0GqDRhvwJVSTG7TKoFUGrTJolUGjDBpl0CiDRhnUyqBWBrUyqJVBpQwqZVApg0oZFGVQlEFRBkUZZGWQlUFWBlkZJGWQlEFSBkkZRGUQlUFUBhEZLBCBijzVeAu8fpWIqhBVIKo+VHmo6lDFoWpDVXYq7B5RVeN6tdnsty/3GtSTG6imUUlzq09Wj+VlarmqIRVD5QF6dz/+8nd8D9SXyfVZb4CsN8CtQZ76EWQc4Gt9tHJ8dbz4YuXTFZzqL5VfD/z3uTt7twYF30DG+mT10crx1fHikT3O7tTRwycPfO6IOPfRxj7a1Ecb+kgzH2nkI018pIGPNO+Rxj2hSkgoEvCcxWPWTlk7ZO2MtSPWTlhc0uGKLqMwz6bLs8lyfKzBp5pit0uhgS80shUeVBUeVOjSoEeDRhsuY5r/8uanHje4ScNFGu7RcI2GW1RcouIOFVeouEHHBTruz3F9rg6KGijqn6h9oi6ammjqoamFpk6qGqnqo6qNqm66munqpauVrokKDVRonkLjFJqq0VCNZmo0UqPJKg1Waa5KY1WartNwnWbrNFqnAcl/y0c+z64p1eVvodZZ+NG9jV8d8zxV7SK3ad5WdZPO51+3bUmJ" + }, + { -- entities + xadj = 1, yadj = 1, + string = "0eNqV1N1qwyAUB/B3OddaYr6bVyljmPSwCVZFzVgIvvtMerFCGzdvFMXz4y9+rDDKGY0VysOwgpi0cjBcVnDiQ3G5zfnFIAwgPN6AgOK3beSQOsOn2GrJLTVcoYRAQKgrfsPAwhsBVF54gXdvHyzvar6NaOOCtETAaBeLtdoSRJCylsAS+yYE8qSV2VqZ0KpcrU9gdSaWsppMK7nLNhdLHUD3iJlFakW3m+TtPG0EtfwaZatHbbT1z3iRsPtf2yNKOn2ie0HQ6tTcleL00jn/z/mLYUVmHnbgsLw8R0yZGac6cKq8ODsTH/n+LQwPvwiBL7RuLyh7VnfnsmN9VzctC+EH8v50bA==" + }} +} + +return satellite diff --git a/space-exploration_0.5.80/space-exploration/scripts/sha2.lua b/space-exploration_0.5.80/space-exploration/scripts/sha2.lua new file mode 100644 index 0000000..be3c15b --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/sha2.lua @@ -0,0 +1,241 @@ +-- SHA-256 code in Lua 5.2; based on the pseudo-code from +-- Wikipedia (http://en.wikipedia.org/wiki/SHA-2) + + +local band, rrotate, bxor, rshift, bnot = + bit32.band, bit32.rrotate, bit32.bxor, bit32.rshift, bit32.bnot + +local string, setmetatable, assert = string, setmetatable, assert + +_ENV = nil + +-- Initialize table of round constants +-- (first 32 bits of the fractional parts of the cube roots of the first +-- 64 primes 2..311): +local k = { + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, + 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, + 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, + 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, + 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, + 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, + 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, + 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, + 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2, +} + + +-- transform a string of bytes in a string of hexadecimal digits +local function str2hexa (s) + local h = string.gsub(s, ".", function(c) + return string.format("%02x", string.byte(c)) + end) + return h +end + + +-- transform number 'l' in a big-endian sequence of 'n' bytes +-- (coded as a string) +local function num2s (l, n) + local s = "" + for i = 1, n do + local rem = l % 256 + s = string.char(rem) .. s + l = (l - rem) / 256 + end + return s +end + +-- transform the big-endian sequence of four bytes starting at +-- index 'i' in 's' into a number +local function s232num (s, i) + local n = 0 + for i = i, i + 3 do + n = n*256 + string.byte(s, i) + end + return n +end + + +-- append the bit '1' to the message +-- append k bits '0', where k is the minimum number >= 0 such that the +-- resulting message length (in bits) is congruent to 448 (mod 512) +-- append length of message (before pre-processing), in bits, as 64-bit +-- big-endian integer +local function preproc (msg, len) + local extra = -(len + 1 + 8) % 64 + len = num2s(8 * len, 8) -- original len in bits, coded + msg = msg .. "\128" .. string.rep("\0", extra) .. len + assert(#msg % 64 == 0) + return msg +end + + +local function initH224 (H) + -- (second 32 bits of the fractional parts of the square roots of the + -- 9th through 16th primes 23..53) + H[1] = 0xc1059ed8 + H[2] = 0x367cd507 + H[3] = 0x3070dd17 + H[4] = 0xf70e5939 + H[5] = 0xffc00b31 + H[6] = 0x68581511 + H[7] = 0x64f98fa7 + H[8] = 0xbefa4fa4 + return H +end + + +local function initH256 (H) + -- (first 32 bits of the fractional parts of the square roots of the + -- first 8 primes 2..19): + H[1] = 0x6a09e667 + H[2] = 0xbb67ae85 + H[3] = 0x3c6ef372 + H[4] = 0xa54ff53a + H[5] = 0x510e527f + H[6] = 0x9b05688c + H[7] = 0x1f83d9ab + H[8] = 0x5be0cd19 + return H +end + + +local function digestblock (msg, i, H) + + -- break chunk into sixteen 32-bit big-endian words w[1..16] + local w = {} + for j = 1, 16 do + w[j] = s232num(msg, i + (j - 1)*4) + end + + -- Extend the sixteen 32-bit words into sixty-four 32-bit words: + for j = 17, 64 do + local v = w[j - 15] + local s0 = bxor(rrotate(v, 7), rrotate(v, 18), rshift(v, 3)) + v = w[j - 2] + local s1 = bxor(rrotate(v, 17), rrotate(v, 19), rshift(v, 10)) + w[j] = w[j - 16] + s0 + w[j - 7] + s1 + end + + -- Initialize hash value for this chunk: + local a, b, c, d, e, f, g, h = + H[1], H[2], H[3], H[4], H[5], H[6], H[7], H[8] + + -- Main loop: + for i = 1, 64 do + local s0 = bxor(rrotate(a, 2), rrotate(a, 13), rrotate(a, 22)) + local maj = bxor(band(a, b), band(a, c), band(b, c)) + local t2 = s0 + maj + local s1 = bxor(rrotate(e, 6), rrotate(e, 11), rrotate(e, 25)) + local ch = bxor (band(e, f), band(bnot(e), g)) + local t1 = h + s1 + ch + k[i] + w[i] + + h = g + g = f + f = e + e = d + t1 + d = c + c = b + b = a + a = t1 + t2 + end + + -- Add (mod 2^32) this chunk's hash to result so far: + H[1] = band(H[1] + a) + H[2] = band(H[2] + b) + H[3] = band(H[3] + c) + H[4] = band(H[4] + d) + H[5] = band(H[5] + e) + H[6] = band(H[6] + f) + H[7] = band(H[7] + g) + H[8] = band(H[8] + h) + +end + + +local function finalresult224 (H) + -- Produce the final hash value (big-endian): + return + str2hexa(num2s(H[1], 4)..num2s(H[2], 4)..num2s(H[3], 4)..num2s(H[4], 4).. + num2s(H[5], 4)..num2s(H[6], 4)..num2s(H[7], 4)) +end + + +local function finalresult256 (H) + -- Produce the final hash value (big-endian): + return + str2hexa(num2s(H[1], 4)..num2s(H[2], 4)..num2s(H[3], 4)..num2s(H[4], 4).. + num2s(H[5], 4)..num2s(H[6], 4)..num2s(H[7], 4)..num2s(H[8], 4)) +end + + +---------------------------------------------------------------------- +local HH = {} -- to reuse + +local function hash224 (msg) + msg = preproc(msg, #msg) + local H = initH224(HH) + + -- Process the message in successive 512-bit (64 bytes) chunks: + for i = 1, #msg, 64 do + digestblock(msg, i, H) + end + + return finalresult224(H) +end + + +local function hash256 (msg) + msg = preproc(msg, #msg) + local H = initH256(HH) + + -- Process the message in successive 512-bit (64 bytes) chunks: + for i = 1, #msg, 64 do + digestblock(msg, i, H) + end + + return finalresult256(H) +end +---------------------------------------------------------------------- +local mt = {} + +local function new256 () + local o = {H = initH256({}), msg = "", len = 0} + setmetatable(o, mt) + return o +end + +mt.__index = mt + +function mt:add (m) + self.msg = self.msg .. m + self.len = self.len + #m + local t = 0 + while #self.msg - t >= 64 do + digestblock(self.msg, t + 1, self.H) + t = t + 64 + end + self.msg = self.msg:sub(t + 1, -1) +end + + +function mt:close () + self.msg = preproc(self.msg, self.len) + self:add("") + return finalresult256(self.H) +end +---------------------------------------------------------------------- + +return { + hash224 = hash224, + hash256 = hash256, + new256 = new256, +} diff --git a/space-exploration_0.5.80/space-exploration/scripts/solar-flare.lua b/space-exploration_0.5.80/space-exploration/scripts/solar-flare.lua new file mode 100644 index 0000000..19586e2 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/solar-flare.lua @@ -0,0 +1,394 @@ +local SolarFlare = {} + +SolarFlare.name_glaive_beam = mod_prefix.."energy-glaive-beam" -- projectile +SolarFlare.name_glaive_beam_sprite = mod_prefix.."energy-glaive-beam-sprite" -- sprite +SolarFlare.name_glaive_path_fx = mod_prefix.."energy-glaive-path-fx" +SolarFlare.name_glaive_damage_projectile = mod_prefix.."energy-glaive-damage-projectile" +SolarFlare.name_glaive_damage_aoe = mod_prefix.."energy-glaive-damage-aoe" +SolarFlare.name_glaive_damage_aoe_large = mod_prefix.."energy-glaive-damage-aoe-large" +SolarFlare.name_fire = mod_prefix .. "fire-flame-on-tree-no-pollution" + +SolarFlare.max_age = 60*60*2 -- 5 minutes +SolarFlare.speed = 0.10 +SolarFlare.damage_interval = 20 +SolarFlare.warning_time = 60*60*60*24 -- 24 hours +SolarFlare.base_power = 2000000000 + +function SolarFlare.default_flare_power(zone) + local power_multiplier = Zone.get_solar(zone) + if zone.radius then + power_multiplier = power_multiplier * zone.radius / 5000 + else + power_multiplier = 0.2 * power_multiplier + end + return power_multiplier +end + +function SolarFlare.begin_flare(zone, targeting, power_multiplier, delay, max_age) + if not power_multiplier then + power_multiplier = SolarFlare.default_flare_power(zone) + end + delay = delay or 0 + local tick_task = new_tick_task("solar-flare") + tick_task.zone = zone + tick_task.start_tick = game.tick + delay + tick_task.beams = {} + tick_task.power_multiplier = power_multiplier + tick_task.targeting = targeting + tick_task.max_age = max_age or SolarFlare.max_age + Log.trace("SolarFlare on zone: " .. zone.name.." power: "..power_multiplier) +end + +function SolarFlare.tick_flare(tick_task) + if game.tick < tick_task.start_tick then return end + + if not tick_task.pressure_applied then + tick_task.pressure_applied = true + EnergyBeamDefence.zone_add_pressure(tick_task.zone, tick_task) + tick_task.defended = EnergyBeamDefence.zone_is_defended(tick_task.zone) + end + + if not tick_task.start_warning_sent then + tick_task.start_warning_sent = true + for _, force in pairs(game.forces) do + if Zone.is_visible_to_force(tick_task.zone, force.name) then + force.print({"space-exploration.alert-cme-arrived", tick_task.zone.name}) + end + end + end + + if game.tick > tick_task.start_tick + (tick_task.max_age or SolarFlare.max_age) or settings.global["se-cmes-max-frequency"].value == 0 then + for _, beam in pairs(tick_task.beams) do + if beam.beam and beam.beam.valid then + beam.beam.destroy() + end + if beam.markers then + for _, marker in pairs(beam.markers) do + if marker and marker.valid then + marker.destroy() + end + end + end + end + tick_task.valid = false + Log.trace("SolarFlare end") + local surface = Zone.get_surface(tick_task.zone) + surface.print({"space-exploration.alert-cme-passed"}) + return + end + + local age = game.tick - tick_task.start_tick + local age_p = age / (tick_task.max_age or SolarFlare.max_age) + --tick_task.age_peak = math.min(age_p, 1-age_p) * 2 + tick_task.age_peak = math.sin(age_p*math.pi) + + if game.tick % 60 == 0 then + tick_task.defended = EnergyBeamDefence.zone_is_defended(tick_task.zone) + end + + if tick_task.defended then + while #tick_task.beams > 0 do + local beam = tick_task.beams[#tick_task.beams] + if beam.beam and beam.beam.valid then + beam.beam.destroy() + end + if beam.markers then + for _, marker in pairs(beam.markers) do + if marker and marker.valid then + marker.destroy() + end + end + end + table.remove(tick_task.beams, #tick_task.beams) + end + return + end + + local surface = Zone.get_surface(tick_task.zone) + if not surface then + Log.trace("SolarFlare.begin_flare: No surface") + tick_task.valid = false + return + end + + if not tick_task.chunk_count then + tick_task.chunk_count = 0 + for chunk in surface.get_chunks() do + tick_task.chunk_count = tick_task.chunk_count + 1 + end + end + -- tiny -> 2 + -- 5k small = 1.9 -> 4 + -- 50k medium = 11.18 -> 14 + local target_beams = math.min(20, math.ceil(tick_task.age_peak * (2 + math.pow(tick_task.chunk_count / 2000, 0.75)))) + + while #tick_task.beams < target_beams do + local chunk = surface.get_random_chunk() + local position = {x = (chunk.x+math.random())*32, y = (chunk.y+math.random())*32} + chunk = surface.get_random_chunk() + local target_position = {x = (chunk.x+math.random())*32, y = (chunk.y+math.random())*32} + if #tick_task.beams == 0 then + if tick_task.targeting == "basic" then + local entities = surface.find_entities_filtered{type={"furnace","electric-pole","roboport","reactor"}} + if entities and #entities > 0 then + position = entities[math.random(#entities)].position + end + elseif tick_task.targeting == "crash" then + position = Util.vector_set_length(position, 80) + target_position = {x = 0, y = 0} + end + end + local beam = { + position = position, + target_position = target_position + } + beam.beam = surface.create_entity{ + name = SolarFlare.name_glaive_beam, + position = position, + target = {0,0}, + speed = 0, + force = "neutral" + } + if not (beam.beam_sprite_id and rendering.is_valid(beam.beam_sprite_id)) then + beam.beam_sprite_id = rendering.draw_sprite{ + target = beam.beam, + sprite = SolarFlare.name_glaive_beam_sprite, + surface = surface, + } + end + rendering.set_y_scale(beam.beam_sprite_id, 1.5) + rendering.set_x_scale(beam.beam_sprite_id, 2) + rendering.set_color(beam.beam_sprite_id, { + r = 1, + g = 0.7, + b = 0.7 + }) + surface.create_entity{ + name = SolarFlare.name_fire, + position = position, + } + table.insert(tick_task.beams, beam) + Log.trace("SolarFlare "..#tick_task.beams.." for tick_task " .. tick_task.id) + surface.print({"space-exploration.alert-cme-stream", "[gps="..math.floor(position.x)..","..math.floor(position.y)..","..surface.name.."]"}) + end + + while #tick_task.beams > target_beams do + local beam = tick_task.beams[#tick_task.beams] + if beam.beam and beam.beam.valid then + beam.beam.destroy() + end + if beam.markers then + for _, marker in pairs(beam.markers) do + if marker and marker.valid then + marker.destroy() + end + end + end + table.remove(tick_task.beams, #tick_task.beams) + end + + if game.tick % 60 == 0 then + for i, beam in pairs(tick_task.beams) do + if beam.markers then + for _, marker in pairs(beam.markers) do + if marker and marker.valid then + marker.destroy() + end + end + end + beam.markers = {} + for force_name, forcedata in pairs(global.forces) do + if game.forces[force_name] and force_name ~= "friendly" and force_name ~= "ignore" and force_name ~= "capture" then + beam.markers[force_name] = game.forces[force_name].add_chart_tag(surface, { + icon = {type = "virtual", name = mod_prefix.."heat"}, + position = beam.position, + text = "CME" + }) + end + end + if (tick_task.targeting == "basic" or tick_task.targeting == "crash") and (i == 1 or i == 3) then + local chunk = surface.get_random_chunk() + beam.target_position = {x = (chunk.x+math.random())*32, y = (chunk.y+math.random())*32} + if math.random() < 0.1 then + local entities = surface.find_entities_filtered{type={"character", "furnace","electric-pole","roboport","reactor"}} + if entities and #entities > 0 and math.random() < 0.1 then + beam.target_position = entities[math.random(#entities)].position + end + end + else + if math.random() < 0.4 then + beam.target_position = Util.vectors_add(beam.beam.position, {x = (math.random()-0.5)*64, y = (math.random()-0.5)*64}) + else + local chunk = surface.get_random_chunk() + beam.target_position = {x = (chunk.x+math.random())*32, y = (chunk.y+math.random())*32} + end + end + end + end + + for _, beam in pairs(tick_task.beams) do + if not(beam.beam and beam.beam.valid) then + beam.beam = surface.create_entity{ + name = SolarFlare.name_glaive_beam, + position = beam.position, + target = {0,0}, + speed = 0, + force = "neutral" + } + end + if not (beam.beam_sprite_id and rendering.is_valid(beam.beam_sprite_id)) then + beam.beam_sprite_id = rendering.draw_sprite{ + target = beam.beam, + sprite = SolarFlare.name_glaive_beam_sprite, + surface = surface, + } + end + rendering.set_y_scale(beam.beam_sprite_id, 1.5) + rendering.set_x_scale(beam.beam_sprite_id, 2) + rendering.set_color(beam.beam_sprite_id, { + r = 1, + g = 0.7, + b = 0.7 + }) + local new_position = util.move_to(beam.position, beam.target_position, SolarFlare.speed, false) + beam.position = new_position + beam.beam.teleport(new_position) + if math.random() < 0.1 then + surface.create_entity{ + name = SolarFlare.name_fire, + position = new_position, + } + surface.create_entity{ + name = SolarFlare.name_glaive_path_fx, + position = new_position, + force = "neutral" + } + end + if game.tick % math.ceil(SolarFlare.damage_interval / math.min(tick_task.power_multiplier or 1, 2)) == 0 then + surface.create_entity{ + name = SolarFlare.name_glaive_damage_aoe_large, + position = new_position, + force = "neutral" + } + end + end + +end + +function SolarFlare.arrival_snap(zone, arrival_tick) + + if Zone.is_solid(zone) then + local targeted_time_of_day = (arrival_tick / zone.ticks_per_day) % 1 + -- target morning (0.75), snapped to the next minute + arrival_tick = arrival_tick + (0.75 - targeted_time_of_day) * zone.ticks_per_day + end + -- snap to minute so timer does not have a random delay + arrival_tick = math.ceil(arrival_tick / 3600) * 3600 + + return arrival_tick +end + +function SolarFlare.on_nth_tick_3600() + if settings.global["se-cmes-max-frequency"].value == 0 then + if global.forces then + for force_name, forcedata in pairs(global.forces) do + if forcedata.solar_flare then + forcedata.solar_flare = nil + end + end + end + else + if game.tick == 0 then + local entities = game.surfaces[1].find_entities_filtered{ + area = {{-64,-64},{64,64}} + } + for _, entity in pairs(entities) do + if string.find(entity.name, "wreck", 1, true) or string.find(entity.name, "crash", 1, true)then + entity.destructible = false + end + end + SolarFlare.begin_flare(Zone.from_name("Nauvis"), "crash", 0.25, 60*13, 45*60) -- 13s delay + end + if global.forces then + for force_name, forcedata in pairs(global.forces) do + local force = game.forces[force_name] + if force and forcedata.has_players and forcedata.homeworld_index + and force_name ~= "friendly" and force_name ~= "ignore" and force_name ~= "capture" then + --Log.trace("SolarFlare.on_nth_tick_3600 "..force_name) + + if not forcedata.solar_flare then + -- first one, on homeworld, has a 48 hour delay + 1 hour warning + local arrival_tick = math.max( + 48*60*60*60 + math.random()*60*60*60, -- 48 hours + up to 1 hour + game.tick + settings.global["se-cmes-max-frequency"].value * (0.5 + 0.5 * math.random()) * 60*60*60 ) -- 12 to 24 hours normally + local zone = Zone.from_zone_index(forcedata.homeworld_index) + arrival_tick = SolarFlare.arrival_snap(zone, arrival_tick) + forcedata.solar_flare = { + type = "solar-flare", + zone = zone, + tick = arrival_tick + } + end + if forcedata.solar_flare then + if SolarFlare.warning_time + game.tick >= forcedata.solar_flare.tick + and forcedata.solar_flare.tick - game.tick >= 0 + and (forcedata.solar_flare.last_warned == nil or game.tick - forcedata.solar_flare.last_warned >= forcedata.solar_flare.tick - game.tick) then + for force_name, force in pairs(game.forces) do + if Zone.is_visible_to_force(forcedata.solar_flare.zone, force.name) then + force.print({"space-exploration.alert-cme-eta", forcedata.solar_flare.zone.name, Util.seconds_to_clock((forcedata.solar_flare.tick - game.tick)/60, true)}) + end + end + forcedata.solar_flare.last_warned = game.tick + end + if game.tick >= forcedata.solar_flare.tick then + -- do the solar flare tick task setup + SolarFlare.begin_flare(forcedata.solar_flare.zone, forcedata.solar_flare.targeting) + -- set the next one + local zone_options = {forcedata.homeworld_index} + if forcedata.zone_assets then + for zone_index, force_zone_assets in pairs(forcedata.zone_assets) do + if (force_zone_assets.rocket_launch_pad_names and table_size(force_zone_assets.rocket_launch_pad_names) > 0) or + (force_zone_assets.rocket_landing_pad_names and table_size(force_zone_assets.rocket_landing_pad_names) > 0) then + local try_zone = Zone.from_zone_index(zone_index) + if try_zone.type ~= "asteroid-field" and try_zone.type ~= "anomaly" and try_zone.type ~= "spaceship" then + table.insert(zone_options, zone_index) + end + end + end + end + if (#zone_options <= 1 and math.random() < 0.6) or math.random() < 0.3 then + for zone_index, discovered_data in pairs(forcedata.zones_discovered) do + local try_zone = Zone.from_zone_index(zone_index) + if try_zone.type ~= "asteroid-field" and try_zone.type ~= "anomaly" and try_zone.type ~= "spaceship" then + table.insert(zone_options, zone_index) + end + end + end + local zone = Zone.from_zone_index(zone_options[math.random(#zone_options)]) + + -- other solar flares have 12-24 hour interval + local arrival_tick = game.tick + settings.global["se-cmes-max-frequency"].value * (0.5 + 0.5 * math.random()) * 60*60*60 -- 12-24 hours + arrival_tick = SolarFlare.arrival_snap(zone, arrival_tick) + + forcedata.solar_flare = { + type = "solar-flare", + zone = zone, + tick = arrival_tick + } + if forcedata.solar_flare.zone.type == "star" then forcedata.solar_flare.zone = forcedata.solar_flare.zone.orbit end + if forcedata.solar_flare.zone.index == forcedata.homeworld_index then + forcedata.solar_flare.targeting = "basic" + end + end + end + else + forcedata.solar_flare = nil + end + + end + end + end +end +Event.addListener("on_nth_tick_3600", SolarFlare.on_nth_tick_3600) -- 1 minute + +return SolarFlare diff --git a/space-exploration_0.5.80/space-exploration/scripts/spaceship-clamp.lua b/space-exploration_0.5.80/space-exploration/scripts/spaceship-clamp.lua new file mode 100644 index 0000000..4692ad6 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/spaceship-clamp.lua @@ -0,0 +1,590 @@ +local SpaceshipClamp = {} + +SpaceshipClamp.name_spaceship_clamp_keep = mod_prefix .. "spaceship-clamp" +SpaceshipClamp.name_spaceship_clamp_place = mod_prefix .. "spaceship-clamp-place" +SpaceshipClamp.name_spaceship_clamp_internal_power_pole = mod_prefix .. "spaceship-clamp-power-pole-internal" +SpaceshipClamp.name_spaceship_clamp_external_power_pole_east = mod_prefix .. "spaceship-clamp-power-pole-external-east" +SpaceshipClamp.name_spaceship_clamp_external_power_pole_west = mod_prefix .. "spaceship-clamp-power-pole-external-west" + +SpaceshipClamp.internal_power_pole_offsets = { + [defines.direction.east] = { x = 0.35, y = 0}, + [defines.direction.west] = { x = -0.35, y = 0} +} + +SpaceshipClamp.external_power_pole_names = { + [defines.direction.east] = SpaceshipClamp.name_spaceship_clamp_external_power_pole_east, + [defines.direction.west] = SpaceshipClamp.name_spaceship_clamp_external_power_pole_west +} + +SpaceshipClamp.external_power_pole_offsets = { + [defines.direction.east] = { x = -0.75, y = -0.5}, + [defines.direction.west] = { x = 0.75, y = -0.5} +} + +SpaceshipClamp.other_clamp_offsets = { + [defines.direction.east] = { x = 2, y = 0}, + [defines.direction.west] = { x = -2, y = 0} +} + +SpaceshipClamp.signal_for_disable = {type = "virtual", name = "signal-red"} + +---@class SpaceshipClamp All data necessary to maintain the state of a spaceship clamp + +--- Gets the SpaceshipClamp for this unit_number +---@param unit_number number +function SpaceshipClamp.from_unit_number (unit_number) + if not unit_number then Log.trace("SpaceshipClamp.from_unit_number: invalid unit_number: nil") return end + unit_number = tonumber(unit_number) + -- NOTE: only supports container as the entity + if global.spaceship_clamps[unit_number] then + return global.spaceship_clamps[unit_number] + else + Log.trace("SpaceshipClamp.from_unit_number: invalid unit_number: " .. unit_number) + end +end + +--- Gets the SpaceshipClamp for this entity +---@param entity LuaEntity +function SpaceshipClamp.from_entity (entity) + if not(entity and entity.valid) then + Log.trace("SpaceshipClamp.from_entity: invalid entity") + return + end + -- NOTE: only suppors container as the entity + return SpaceshipClamp.from_unit_number(entity.unit_number) +end + +--[[======================================================================================== +Lifecycle methods for maintaining state of composite entity +]]-- + +function SpaceshipClamp.get_make_internal_power_pole(entity) + local offset = SpaceshipClamp.internal_power_pole_offsets[entity.direction] + if not offset then return Log.trace('could not get offset for clamp external power pole because the direction of ' .. entity.direction .. ' does not match') end + local power_pole_position = util.vectors_add(entity.position, offset) + local power_pole = entity.surface.find_entity(SpaceshipClamp.name_spaceship_clamp_internal_power_pole, power_pole_position) + if power_pole then + return power_pole + end + local power_pole_ghosts = entity.surface.find_entities_filtered{ + ghost_name = SpaceshipClamp.name_spaceship_clamp_internal_power_pole, + position = power_pole_position} + -- take the first one, delete the rest + for _, power_pole_ghost in pairs(power_pole_ghosts) do + if power_pole_ghost.valid then + if not power_pole then + local collisions, power_pole = power_pole_ghosts[1].revive({}) + if power_pole_ghost.valid and not power_pole then + power_pole_ghost.destroy() + end + else + power_pole_ghost.destroy() + end + end + end + if power_pole then + return power_pole + end + power_pole = entity.surface.create_entity{ + name = SpaceshipClamp.name_spaceship_clamp_internal_power_pole, + position = power_pole_position, + force = entity.force + } + return power_pole +end + +function SpaceshipClamp.delete_internal_power_pole(entity) + local power_poles = entity.surface.find_entities_filtered{ + name = SpaceshipClamp.name_spaceship_clamp_internal_power_pole, + area = entity.bounding_box + } + for _, power_pole in pairs(power_poles) do + if power_pole.valid then + power_pole.destroy() + end + end + local power_pole_ghosts = entity.surface.find_entities_filtered{ + ghost_name = SpaceshipClamp.name_spaceship_clamp_internal_power_pole, + area = entity.bounding_box + } + for _, power_pole_ghost in pairs(power_pole_ghosts) do + if power_pole_ghost.valid then + power_pole_ghost.destroy() + end + end +end + +function SpaceshipClamp.get_make_external_power_pole(entity) + local offset = SpaceshipClamp.external_power_pole_offsets[entity.direction] + if not offset then return Log.trace('could not get offset for clamp external power pole because the direction of ' .. entity.direction .. ' does not match') end + local name = SpaceshipClamp.external_power_pole_names[entity.direction] + local power_pole_position = util.vectors_add(entity.position, offset) + + local invalid_pole = nil + + -- try to find the power pole *anywhere* inside the main entity + -- because it is not centered on the main entity and the entity can be rotated + local power_poles = entity.surface.find_entities_filtered{ + name = {SpaceshipClamp.name_spaceship_clamp_external_power_pole_east, SpaceshipClamp.name_spaceship_clamp_external_power_pole_west}, + area = entity.bounding_box + } + for _, power_pole in pairs(power_poles) do + if power_pole.valid and util.area_contains_position(entity.bounding_box, power_pole.position) then + -- if the name is correct for the direction, reuse as-is + if power_pole.name == name and util.position_equal(power_pole.position, power_pole_position) then + return power_pole + else + -- otherwise the circuit connections have to be recorded, the entity deleted + -- the correct direction entity created, and circuit connections restored + invalid_pole = power_pole + end + end + end + + -- try to find the power pole ghost *anywhere* inside the main entity + -- because it is not centered on the main entity and the entity can be rotated + local power_pole_ghosts = entity.surface.find_entities_filtered{ + ghost_name = {SpaceshipClamp.name_spaceship_clamp_external_power_pole_east, SpaceshipClamp.name_spaceship_clamp_external_power_pole_west}, + area = entity.bounding_box + } + if not invalid_pole then + for _, power_pole_ghost in pairs(power_pole_ghosts) do + if power_pole_ghost.valid and util.area_contains_position(entity.bounding_box, power_pole_ghost.position) then + local collisions, power_pole = power_pole_ghost.revive({}) + if power_pole then + -- if the name is correct for the direction, reuse as-is + if power_pole.name == name and util.position_equal(power_pole.position, power_pole_position) then + return power_pole + else + -- otherwise the circuit connections have to be recorded, the entity deleted + -- the correct direction entity created, and circuit connections restored + invalid_pole = power_pole + end + end + end + end + end + + -- it's not anywhere inside the clamp so make a new one + local power_pole = entity.surface.create_entity{ + name = name, + position = power_pole_position, + force = entity.force + } + + -- if there was an invalid clamp placement, copy the circuit connections, and destroy the bad pole + if invalid_pole then + -- I couldn't figure out how to copy the circuit connections but someone else is welcome to try + invalid_pole.destroy() + end + + return power_pole +end + +function SpaceshipClamp.delete_external_power_pole(entity) + local power_poles = entity.surface.find_entities_filtered{ + name = {SpaceshipClamp.name_spaceship_clamp_external_power_pole_east, SpaceshipClamp.name_spaceship_clamp_external_power_pole_west}, + area = entity.bounding_box + } + for _, power_pole in pairs(power_poles) do + if power_pole.valid then + power_pole.destroy() + end + end + local power_pole_ghosts = entity.surface.find_entities_filtered{ + ghost_name = {SpaceshipClamp.name_spaceship_clamp_external_power_pole_east, SpaceshipClamp.name_spaceship_clamp_external_power_pole_west}, + area = entity.bounding_box + } + for _, power_pole_ghost in pairs(power_pole_ghosts) do + if power_pole_ghost.valid then + power_pole_ghost.destroy() + end + end +end + +function SpaceshipClamp.on_entity_created(event) + local entity = util.get_entity_from_event(event) + + if not entity then return end + local entity_name = entity.name + if entity_name == SpaceshipClamp.name_spaceship_clamp_place or entity_name == SpaceshipClamp.name_spaceship_clamp_keep then + + if entity.position.x % 2 ~= 1 or entity.position.y % 2 ~= 1 then + -- TODO: Add locale. + SpaceshipClamp.delete_internal_power_pole(entity) + SpaceshipClamp.delete_external_power_pole(entity) + return cancel_entity_creation(entity, event.player_index, {"space-exploration.clamp_must_be_on_grid"}) + end + + -- find spaceship at tile + local direction + if entity_name == SpaceshipClamp.name_spaceship_clamp_place then + direction = (entity.direction == defines.direction.east or entity.direction == defines.direction.west ) and defines.direction.west or defines.direction.east + else + direction = (entity.direction == defines.direction.west or entity.direction == defines.direction.north ) and defines.direction.west or defines.direction.east + entity.direction = direction + end + local surface = entity.surface + + local check_positions = {} + if direction == defines.direction.west then + table.insert(check_positions, util.vectors_add(entity.position, {x=0, y=-1})) -- top right over + table.insert(check_positions, util.vectors_add(entity.position, {x=0, y=0})) -- bottom right behind + else + table.insert(check_positions, util.vectors_add(entity.position, {x=-1, y=-1})) -- top left over + table.insert(check_positions, util.vectors_add(entity.position, {x=-1, y=0})) -- bottom left behind + end + + local space_tiles = 0 + for _, pos in pairs(check_positions) do + if tile_is_space(surface.get_tile(pos)) then + space_tiles = space_tiles + 1 + Spaceship.flash_tile(surface, pos, {r=255,g=0,b=0, a = 0.25}, 10) + end + end + + if space_tiles >= 1 then + SpaceshipClamp.delete_internal_power_pole(entity) + SpaceshipClamp.delete_external_power_pole(entity) + cancel_entity_creation(entity, event.player_index, {"space-exploration.clamp_invalid_empty_space"}) + return + end + + local force_name = entity.force.name + + local keep + if entity_name == SpaceshipClamp.name_spaceship_clamp_place then + keep = entity.surface.create_entity{ + name = SpaceshipClamp.name_spaceship_clamp_keep, + position = entity.position, + force = entity.force, + direction = direction + } + entity.destroy() + else + keep = entity + end + keep.rotatable = false + + local spaceship_clamp = { + force_name = force_name, + unit_number = keep.unit_number, + main = keep, + surface_name = keep.surface.name + } + + global.spaceship_clamps[spaceship_clamp.unit_number] = spaceship_clamp + global.spaceship_clamps_by_surface[spaceship_clamp.surface_name] = global.spaceship_clamps_by_surface[spaceship_clamp.surface_name] or {} + global.spaceship_clamps_by_surface[spaceship_clamp.surface_name][spaceship_clamp.unit_number] = spaceship_clamp + Log.trace("SpaceshipClamp: spaceship_clamp added") + + -- spawn internal power pole + spaceship_clamp.internal_power_pole = SpaceshipClamp.get_make_internal_power_pole(keep) + spaceship_clamp.internal_power_pole.destructible = false + + -- spawn external power pole + spaceship_clamp.external_power_pole = SpaceshipClamp.get_make_external_power_pole(keep) + spaceship_clamp.external_power_pole.destructible = false + + -- connect the internal poles + spaceship_clamp.internal_power_pole.connect_neighbour({ + wire = defines.wire_type.red, + target_entity = spaceship_clamp.external_power_pole + }) + spaceship_clamp.internal_power_pole.connect_neighbour({ + wire = defines.wire_type.green, + target_entity = spaceship_clamp.external_power_pole + }) + spaceship_clamp.internal_power_pole.connect_neighbour(spaceship_clamp.external_power_pole) + + if entity_name == SpaceshipClamp.name_spaceship_clamp_place then + local id = SpaceshipClamp.find_unique_clamp_id(direction, keep.surface, keep) + local comb = keep.get_or_create_control_behavior() + if direction == defines.direction.west then + comb.set_signal(1, {signal={type="virtual", name=mod_prefix.."anchor-using-left-clamp"}, count=id}) + else + comb.set_signal(1, {signal={type="virtual", name=mod_prefix.."anchor-using-right-clamp"}, count=id}) + end + end + -- attempt to connect this clamp to the one next to it + SpaceshipClamp.attempt_connect_clamp(keep) + end +end +Event.addListener(defines.events.on_entity_cloned, SpaceshipClamp.on_entity_created) +Event.addListener(defines.events.on_built_entity, SpaceshipClamp.on_entity_created) +Event.addListener(defines.events.on_robot_built_entity, SpaceshipClamp.on_entity_created) +Event.addListener(defines.events.script_raised_built, SpaceshipClamp.on_entity_created) +Event.addListener(defines.events.script_raised_revive, SpaceshipClamp.on_entity_created) + +function SpaceshipClamp.destroy_sub(spaceship_clamp, key) + if spaceship_clamp[key] and spaceship_clamp[key].valid then + spaceship_clamp[key].destroy() + spaceship_clamp[key] = nil + end +end + +function SpaceshipClamp.destroy(spaceship_clamp) + if not spaceship_clamp then + Log.trace("spaceship_clamp_destroy: not spaceship_clamp") + return + end + + spaceship_clamp.valid = false + SpaceshipClamp.destroy_sub(spaceship_clamp, 'main') + SpaceshipClamp.destroy_sub(spaceship_clamp, 'internal_power_pole') + SpaceshipClamp.destroy_sub(spaceship_clamp, 'external_power_pole') + + global.spaceship_clamps[spaceship_clamp.unit_number] = nil + global.spaceship_clamps_by_surface[spaceship_clamp.surface_name][spaceship_clamp.unit_number] = nil +end + +function SpaceshipClamp.on_entity_removed(event) + local entity = event.entity + if entity and entity.valid then + if entity.name == SpaceshipClamp.name_spaceship_clamp_keep then + SpaceshipClamp.destroy(SpaceshipClamp.from_entity(entity)) + elseif entity.type == "entity-ghost" and entity.ghost_name == SpaceshipClamp.name_spaceship_clamp_keep then + Log.trace("remove") + SpaceshipClamp.delete_internal_power_pole(entity) + SpaceshipClamp.delete_external_power_pole(entity) + end + end +end +Event.addListener(defines.events.on_entity_died, SpaceshipClamp.on_entity_removed) +Event.addListener(defines.events.on_robot_mined_entity, SpaceshipClamp.on_entity_removed) +Event.addListener(defines.events.on_player_mined_entity, SpaceshipClamp.on_entity_removed) +Event.addListener(defines.events.script_raised_destroy, SpaceshipClamp.on_entity_removed) + +--- Reconnects the internal_power_pole to the external_power_pole +---@param spaceship_clamp any +function SpaceshipClamp.attempt_validate_internal_poles(spaceship_clamp) + if spaceship_clamp and spaceship_clamp.main and spaceship_clamp.main.valid + and spaceship_clamp.external_power_pole and spaceship_clamp.external_power_pole.valid + and spaceship_clamp.internal_power_pole and spaceship_clamp.internal_power_pole.valid then + spaceship_clamp.internal_power_pole.connect_neighbour({ + wire = defines.wire_type.red, + target_entity = spaceship_clamp.external_power_pole + }) + spaceship_clamp.internal_power_pole.connect_neighbour({ + wire = defines.wire_type.green, + target_entity = spaceship_clamp.external_power_pole + }) + spaceship_clamp.internal_power_pole.connect_neighbour(spaceship_clamp.external_power_pole) + end +end + +--- Attempts to connect a clamp to the other clamp it is anchored to +--- Also reconnects each clamps internal power poles in case the player +--- managed to disconnect them by accident (for example shift clicking the external power pole) +---@param entity any +function SpaceshipClamp.attempt_connect_clamp(entity) + local spaceship_clamp = SpaceshipClamp.from_entity(entity) + SpaceshipClamp.attempt_validate_internal_poles(spaceship_clamp) + local offset = SpaceshipClamp.other_clamp_offsets[entity.direction] + if not offset then return Log.trace('could not get offset for clamp external power pole because the direction of ' .. entity.direction .. ' does not match') end + local other_clamp_position = util.vectors_add(spaceship_clamp.main.position, offset) + local other_clamp_entity = spaceship_clamp.main.surface.find_entity(SpaceshipClamp.name_spaceship_clamp_keep, other_clamp_position) + if not other_clamp_entity then return end + local other_clamp = SpaceshipClamp.from_entity(other_clamp_entity) + if other_clamp then + SpaceshipClamp.attempt_validate_internal_poles(other_clamp) + local external_power_pole = spaceship_clamp.external_power_pole + local other_external_power_pole = other_clamp.external_power_pole + if external_power_pole and external_power_pole.valid and other_external_power_pole and other_external_power_pole.valid then + external_power_pole.disconnect_neighbour(other_external_power_pole) + end + local internal_power_pole = spaceship_clamp.internal_power_pole + local other_internal_power_pole = other_clamp.internal_power_pole + if internal_power_pole and internal_power_pole.valid and other_internal_power_pole and other_internal_power_pole.valid then + spaceship_clamp.internal_power_pole.connect_neighbour({ + wire = defines.wire_type.red, + target_entity = other_clamp.internal_power_pole + }) + spaceship_clamp.internal_power_pole.connect_neighbour({ + wire = defines.wire_type.green, + target_entity = other_clamp.internal_power_pole + }) + spaceship_clamp.internal_power_pole.connect_neighbour(other_clamp.internal_power_pole) + end + end +end + +function SpaceshipClamp.is_clamp_enabled(spaceship_clamp) + if not spaceship_clamp.main.valid then return false end + + local red_network = spaceship_clamp.main.get_circuit_network(defines.wire_type.red) + local green_network = spaceship_clamp.main.get_circuit_network(defines.wire_type.green) + local red_signal_count = 0 + if red_network then + red_signal_count = red_signal_count + red_network.get_signal(SpaceshipClamp.signal_for_disable) + end + if green_network then + red_signal_count = red_signal_count + green_network.get_signal(SpaceshipClamp.signal_for_disable) + end + return red_signal_count <= 0 +end + +function SpaceshipClamp.find_matches(spaceship_clamps, destination_clamps, using_id, to_id, using_direction, to_direction) + -- find a *single* clamp on the spaceship that matches the ID + local matching_spaceship_clamp + for _, spaceship_clamp in pairs(spaceship_clamps) do + if spaceship_clamp.main.valid then + if spaceship_clamp.main.direction == using_direction then + local comb = spaceship_clamp.main.get_or_create_control_behavior() + local signal = comb.get_signal(1) + if signal and signal.count == using_id then + matching_spaceship_clamp = spaceship_clamp.main + end + end + else + SpaceshipClamp.destroy(spaceship_clamp) + end + end + + -- find *all* clamps at the destination that match the ID *and* are empty, + -- empty clamps being defined as not having another clamp docked next to it + local matching_destination_clamps = {} + for _, destination_clamp in pairs(destination_clamps) do + if destination_clamp.main.valid then + if destination_clamp.main.direction == to_direction then + local comb = destination_clamp.main.get_or_create_control_behavior() + local signal = comb.get_signal(1) + if signal and signal.count == to_id then + local offset = SpaceshipClamp.other_clamp_offsets[destination_clamp.main.direction] + -- check for another clamp already docked + local other_clamp_position = util.vectors_add(destination_clamp.main.position, offset) + local other_clamp_entity = destination_clamp.main.surface.find_entity(SpaceshipClamp.name_spaceship_clamp_keep, other_clamp_position) + local other_clamp + if other_clamp_entity then other_clamp = SpaceshipClamp.from_entity(other_clamp_entity) end + if not other_clamp then + -- check for signal to switch clamp off. + if SpaceshipClamp.is_clamp_enabled(destination_clamp) then + table.insert(matching_destination_clamps, destination_clamp.main) + end + end + end + end + else + SpaceshipClamp.destroy(destination_clamp) + end + end + + return matching_spaceship_clamp, matching_destination_clamps +end + +function SpaceshipClamp.attempt_anchor_spaceship(spaceship, red, green) + local using_left = util.signal_from_wires(red, green, Spaceship.signal_for_anchor_using_left) + local to_right = util.signal_from_wires(red, green, Spaceship.signal_for_anchor_to_right) + local using_right = util.signal_from_wires(red, green, Spaceship.signal_for_anchor_using_right) + local to_left = util.signal_from_wires(red, green, Spaceship.signal_for_anchor_to_left) + + local try_anchor_using_left = using_left ~= 0 and to_right ~= 0 + local try_anchor_using_right = using_right ~= 0 and to_left ~= 0 + if not try_anchor_using_left and not try_anchor_using_right then return end + + local spaceship_surface = spaceship.console.surface + local destination_surface = Zone.get_surface(Zone.from_zone_index(spaceship.destination.index)) + if not destination_surface then return end + + local spaceship_clamps = global.spaceship_clamps_by_surface[spaceship_surface.name] + local destination_clamps = global.spaceship_clamps_by_surface[destination_surface.name] + if not spaceship_clamps or not destination_clamps then return end + + if try_anchor_using_left then + local matching_spaceship_clamp, matching_destination_clamps = + SpaceshipClamp.find_matches(spaceship_clamps, destination_clamps, using_left, to_right, defines.direction.west, defines.direction.east) + if matching_spaceship_clamp and #matching_destination_clamps > 0 then + -- try to land based on the relative offsets + local position = { + x = -1 * matching_spaceship_clamp.position.x + 2, + y = -1 * matching_spaceship_clamp.position.y + } + position = util.vectors_add(position, matching_destination_clamps[1].position) + Spaceship.land_at_position(spaceship, position, true) + return + end + end + if try_anchor_using_right then + local matching_spaceship_clamp, matching_destination_clamps = + SpaceshipClamp.find_matches(spaceship_clamps, destination_clamps, using_right, to_left, defines.direction.east, defines.direction.west) + if matching_spaceship_clamp and #matching_destination_clamps > 0 then + -- try to land based on the relative offsets + local position = { + x = -1 * matching_spaceship_clamp.position.x - 2, + y = -1 * matching_spaceship_clamp.position.y + } + position = util.vectors_add(position, matching_destination_clamps[1].position) + Spaceship.land_at_position(spaceship, position, true) + return + end + end +end + +--- Finds an id value that is unused by any clamp on the given surface +---@param direction any direction of clamp +---@param surface LuaSurface surface on which to find the unique id +---@param exclude_clamp LuaEntity entity to exlude from search +function SpaceshipClamp.find_unique_clamp_id(direction, surface, exclude_clamp) + local spaceship_clamps = global.spaceship_clamps_by_surface[surface.name] + local used_ids = {} + for _, spaceship_clamp in pairs(spaceship_clamps) do + local entity = spaceship_clamp.main + if entity.valid then + if entity ~= exclude_clamp and entity.direction == direction then + local value = 0 + local comb = entity.get_or_create_control_behavior() + local signal = comb.get_signal(1) + if signal then value = signal.count end + used_ids[value] = value + end + else + SpaceshipClamp.destroy(spaceship_clamp) + end + end + local i = 1 + while used_ids[i] do + i = i + 1 + end + return i +end + +--- Validates the type of a clamp signal +---@param entity LuaEntity +function SpaceshipClamp.validate_clamp_signal(spaceship_clamp_entity) + -- make sure it still has the correct signal. + local value = 1 + local comb = spaceship_clamp_entity.get_or_create_control_behavior() + local signal = comb.get_signal(1) + if signal then value = signal.count end + if spaceship_clamp_entity.direction == defines.direction.west then + comb.set_signal(1, {signal={type="virtual", name=mod_prefix.."anchor-using-left-clamp"}, count=value}) + else + comb.set_signal(1, {signal={type="virtual", name=mod_prefix.."anchor-using-right-clamp"}, count=value}) + end +end + +--- GUI closed so need to validate clamp signal +---@param event any +function SpaceshipClamp.on_gui_closed(event) + if event.entity and event.entity.valid and event.entity.name == SpaceshipClamp.name_spaceship_clamp_keep then + SpaceshipClamp.validate_clamp_signal(event.entity) + end +end +Event.addListener(defines.events.on_gui_closed, SpaceshipClamp.on_gui_closed) + +--- Combinator settings pasted so need to valdiate clamp signal +---@param event any +function SpaceshipClamp.on_entity_settings_pasted(event) + if event.destination and event.destination.valid and event.destination.name == SpaceshipClamp.name_spaceship_clamp_keep then + SpaceshipClamp.validate_clamp_signal(event.destination) + end +end +Event.addListener(defines.events.on_entity_settings_pasted, SpaceshipClamp.on_entity_settings_pasted) + +function SpaceshipClamp.on_init(event) + global.spaceship_clamps = {} + global.spaceship_clamps_by_surface = {} +end +Event.addListener("on_init", SpaceshipClamp.on_init, true) + +return SpaceshipClamp diff --git a/space-exploration_0.5.80/space-exploration/scripts/spaceship-clone.lua b/space-exploration_0.5.80/space-exploration/scripts/spaceship-clone.lua new file mode 100644 index 0000000..007dcb1 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/spaceship-clone.lua @@ -0,0 +1,431 @@ +local SpaceshipClone = {} + +SpaceshipClone.types_excluded = { + "rocket-silo-rocket", "cliff", "tile-ghost" +} + +SpaceshipClone.types_vehicles = { -- move players inside these vehicles when ships teleport + "car", "spider-vehicle", "locomotive", "cargo-wagon", "fluid-wagon" +} + +SpaceshipClone.types_passengers = { -- move players that are passengers of these vehicles when ships teleport + "car", "spider-vehicle" +} + +--- Builds the arrays of entities that are cared about +--- for the purposes of grounding/spacing - intended to be +--- cached but not done yet +function SpaceshipClone.build_spaced_grounded_table() + SpaceshipClone.spaced_names = {} + SpaceshipClone.unspaced_names = {} + SpaceshipClone.grounded_names = {} + SpaceshipClone.ungrounded_names = {} + for name, prototype in pairs(game.entity_prototypes) do + if string.find(name, name_suffix_spaced, 1, true) then + table.insert(SpaceshipClone.spaced_names, name) + table.insert(SpaceshipClone.unspaced_names, util.replace(name, name_suffix_spaced, "")) + elseif string.find(name, name_suffix_grounded, 1, true) then + table.insert(SpaceshipClone.grounded_names, name) + table.insert(SpaceshipClone.ungrounded_names, util.replace(name, name_suffix_grounded, "")) + end + end +end + +--- Grounds or ungrounds entities +--- Used to ensure that entities space buildings can't have space recipes on the ground +--- and similar things. Swaps entities betweened normal, spaced, and grounded versions +---@param from_surface any surface the clone is coming from +---@param to_surface any surface the clone is going to +---@param from_zone any zone the clone is coming from +---@param to_zone any zone the clone is going to +---@param from_area any area on the from_surface the clone is coming from +---@param to_area any area on the to_surface the clone is going to +function SpaceshipClone.ground_unground_entities(from_surface, to_surface, from_zone, to_zone, from_area, to_area) + SpaceshipClone.build_spaced_grounded_table() + if Zone.is_space(from_zone) ~= Zone.is_space(to_zone) then + if Zone.is_space(to_zone) then + local entities_for_unspaced = to_surface.find_entities_filtered{name = SpaceshipClone.unspaced_names, area = to_area} + for _, entity in pairs(entities_for_unspaced) do + swap_structure(entity, entity.name..name_suffix_spaced) + end + local entities_for_grounded = to_surface.find_entities_filtered{name = SpaceshipClone.grounded_names, area = to_area} + for _, entity in pairs(entities_for_grounded) do + swap_structure(entity, util.replace(entity.name, name_suffix_grounded, "")) + end + else + local entities_for_ungrounded = to_surface.find_entities_filtered{name = SpaceshipClone.ungrounded_names, area = to_area} + for _, entity in pairs(entities_for_ungrounded) do + swap_structure(entity, entity.name..name_suffix_grounded) + end + local entities_for_spaced = to_surface.find_entities_filtered{name = SpaceshipClone.spaced_names, area = to_area} + for _, entity in pairs(entities_for_spaced) do + swap_structure(entity, util.replace(entity.name, name_suffix_spaced, "")) + end + end + end +end + +--- Enqueues chunk generation requests for the area being cloned to +---@param spaceship Spaceship the spaceship data +---@param clone_from LuaSurface surface to clone from +---@param clone_to LuaSurface surface to clone to +---@param clone_delta any the delta between the spaceship's position on clone_from and the target spaceship position on clone_to +function SpaceshipClone.enqueue_generate_clone_to_area(spaceship, clone_from, clone_to, clone_delta) + local clone_to_area = { + left_top = {x = spaceship.known_bounds.left_top.x + clone_delta.dx, y = spaceship.known_bounds.left_top.y + clone_delta.dy}, + right_bottom = {x = spaceship.known_bounds.right_bottom.x + clone_delta.dx, y = spaceship.known_bounds.right_bottom.y + clone_delta.dy}, + } + + local clone_from_zone = Zone.from_surface(clone_from) + local clone_to_zone = Zone.from_surface(clone_to) + + -- force generate chunks in the area being cloned to + local x_force_gen_modifier = 0 + if clone_to_zone and clone_to_zone.type == "spaceship" then + x_force_gen_modifier = SpaceshipObstacles.particle_spawn_range + end + local y_force_gen_modifier_sub = 0 + local y_force_gen_modifier_add = 0 + if clone_to_zone and clone_to_zone.type == "spaceship" then + y_force_gen_modifier_sub = SpaceshipObstacles.particle_spawn_range + 20 + y_force_gen_modifier_add = SpaceshipObstacles.particle_spawn_range + 32 + end + local requests_made = 0 + for x=clone_to_area.left_top.x-32-x_force_gen_modifier,clone_to_area.right_bottom.x+32+x_force_gen_modifier,32 do + for y=clone_to_area.left_top.y-32-y_force_gen_modifier_sub,clone_to_area.right_bottom.y+32+y_force_gen_modifier_add,32 do + clone_to.request_to_generate_chunks({x=x,y=y},1) + requests_made = requests_made + 1 + end + end + return requests_made +end + +--- Clones a spaceship from its current location to a new location (deletes the original as part of the cloning) +---@param spaceship Spaceship the spaceship data +---@param clone_from LuaSurface surface to clone from +---@param clone_to LuaSurface surface to clone to +---@param clone_delta any the delta between the spaceship's position on clone_from and the target spaceship position on clone_to +---@param post_clone_to any the callback function to call once the clone completes +function SpaceshipClone.clone(spaceship, clone_from, clone_to, clone_delta, post_clone_cb) + local clone_from_area = { + left_top = {x = spaceship.known_bounds.left_top.x, y = spaceship.known_bounds.left_top.y}, + right_bottom = {x = spaceship.known_bounds.right_bottom.x, y = spaceship.known_bounds.right_bottom.y}, + } + local clone_to_area = { + left_top = {x = spaceship.known_bounds.left_top.x + clone_delta.dx, y = spaceship.known_bounds.left_top.y + clone_delta.dy}, + right_bottom = {x = spaceship.known_bounds.right_bottom.x + clone_delta.dx, y = spaceship.known_bounds.right_bottom.y + clone_delta.dy}, + } + local clone_from_zone = Zone.from_surface(clone_from) + local clone_to_zone = Zone.from_surface(clone_to) + + -- flag for cloning in progress + spaceship.is_cloning = true + + -- if somehow we didn't generate all of the chunks before this call is made, forcibly create them + clone_to.force_generate_chunk_requests() + + -- get players out of vehicles + local vehicle_drivers = {} + local vehicle_passengers = {} + local vehicles = clone_from.find_entities_filtered{ + type = SpaceshipClone.types_vehicles, + area = clone_from_area + } + for _, vehicle in pairs(vehicles) do + local vehicle_x = math.floor(vehicle.position.x) + local vehicle_y = math.floor(vehicle.position.y) + local value = spaceship.known_tiles[vehicle_x] and spaceship.known_tiles[vehicle_x][vehicle_y] + if value == Spaceship.tile_status.floor_console_connected then + local driver = vehicle.get_driver() + vehicle.set_driver(nil) + if driver then + if driver.is_player() then driver = driver.character end -- sets to nil if required + end + if driver and driver.valid then + table.insert(vehicle_drivers, { + vehicle_name = vehicle.name, + vehicle_position = vehicle.position, + driver_name = driver.name, + driver_position = driver.position + }) + end + if util.table_contains(SpaceshipClone.types_passengers, vehicle.type) then + local passenger = vehicle.get_passenger() + vehicle.set_passenger(nil) + if passenger then + if passenger.is_player() then passenger = passenger.character end -- sets to nil if required + end + if passenger and passenger.valid then + table.insert(vehicle_passengers, { + vehicle_name = vehicle.name, + vehicle_position = vehicle.position, + passenger_name = passenger.name, + passenger_position = passenger.position + }) + end + end + end + end + + -- store locomotive status (automatic vs normal) + local locomotive_settings = {} + for _, locomotive in pairs(clone_from.find_entities_filtered{ + type = "locomotive", + area = clone_from_area + }) do + local locomotive_x = math.floor(locomotive.position.x) + local locomotive_y = math.floor(locomotive.position.y) + local value = spaceship.known_tiles[locomotive_x] and spaceship.known_tiles[locomotive_x][locomotive_y] + if value == Spaceship.tile_status.floor_console_connected then + table.insert(locomotive_settings, { + name = locomotive.name, + position = locomotive.position, + manual_mode = locomotive.train.manual_mode + }) + end + end + + -- copy the ship tiles + local change_tiles_zone = {} + for x=spaceship.known_bounds.left_top.x,spaceship.known_bounds.right_bottom.x do + for y=spaceship.known_bounds.left_top.y,spaceship.known_bounds.right_bottom.y do + local value = spaceship.known_tiles[x] and spaceship.known_tiles[x][y] + if value == Spaceship.tile_status.floor_console_connected + or value == Spaceship.tile_status.bulkhead_console_connected then + local position = { + x = x + clone_delta.dx, + y = y + clone_delta.dy + } + table.insert(change_tiles_zone, {name = "se-spaceship-floor", position = position}) + end + end + end + clone_to.set_tiles(change_tiles_zone, true) + + -- destroy the shield projections + local destroy_names = {} + for _, name in pairs(remote.call("shield-projector", "get_sub_entity_names")) do + table.insert(destroy_names, name) + end + -- check nearby the ship since we need to capture all shield projector barriers which don't count towards the known_bounds + local expanded_clone_from_area = util.area_extend(clone_from_area, 15) + local destroy_entities = clone_from.find_entities_filtered{ + name = destroy_names, + area = expanded_clone_from_area -- shield projector barriers can be outside the range of the ship bounding box + } + for _, entity in pairs(destroy_entities) do + entity.destroy() + end + + -- clone spaceship to new position + local clone_positions = {} + for x=spaceship.known_bounds.left_top.x,spaceship.known_bounds.right_bottom.x do + for y=spaceship.known_bounds.left_top.y,spaceship.known_bounds.right_bottom.y do + local value = spaceship.known_tiles[x] and spaceship.known_tiles[x][y] + if value == Spaceship.tile_status.floor_console_connected + or value == Spaceship.tile_status.bulkhead_console_connected then + table.insert(clone_positions, {x=x,y=y}) + end + end + end + clone_from.clone_brush{ + source_offset = {0,0}, + destination_offset = {clone_delta.dx,clone_delta.dy}, + destination_surface = clone_to, + clone_tiles = false, + clone_entities = true, + clone_decoratives = false, + clear_destination_entities = false, + clear_destination_decoratives = false, + expand_map = true, + source_positions = clone_positions + } + + -- Pause inserters, workaround for https://forums.factorio.com/viewtopic.php?f=58&t=89035 + local condition_entities = clone_to.find_entities_filtered{ + type = Spaceship.types_to_restore, + area = clone_to_area + } + spaceship.entities_to_restore = spaceship.entities_to_restore or {} + spaceship.entities_to_restore_tick = game.tick + Spaceship.time_to_restore + for _, entity in pairs(condition_entities) do + table.insert(spaceship.entities_to_restore, { + entity = entity, + active=entity.active + }) + entity.active = false + end + + -- clean out of map tiles in the clone area + local bad_tiles = clone_to.find_tiles_filtered{ + name = {name_out_of_map_tile}, + area = clone_to_area + } + local set_tiles = {} + for _, tile in pairs(bad_tiles) do + table.insert(set_tiles, { + position = tile.position, + name = name_space_tile + }) + clone_to.set_hidden_tile(tile.position, name_space_tile) + end + clone_to.set_tiles(set_tiles) + + -- transfer the ship console + local old_console = spaceship.console + local clone_console_position = { + x = spaceship.console.position.x + clone_delta.dx, + y = spaceship.console.position.y + clone_delta.dy + } + local console_clone = clone_to.find_entity(Spaceship.name_spaceship_console, clone_console_position) + spaceship.console = console_clone + spaceship.console_output = nil + old_console.destroy() + + -- using safe_destroy (which raises the script_raised_destroy) even causes the destruction part of the code take ~10x longer + -- but if we don't do this (and silently destroy the entities) we can break mod compatibility + local change_tiles_from = {} + local change_tiles_to = {} + local area_table = {left_top = {}, right_bottom = {}} + for _, clone_position in pairs(clone_positions) do + local x = clone_position.x + local y = clone_position.y + -- part of the spaceship so remove from clone_from surface + local under_tile = clone_from.get_hidden_tile({x=x,y=y}) + if under_tile == nil or Spaceship.is_floor(under_tile) then + under_tile = "landfill" -- fallback + end + table.insert(change_tiles_from, {name = under_tile, position = {x=x,y=y}}) + local left_top = area_table.left_top + local right_bottom = area_table.right_bottom + left_top.x = x + left_top.y = y + right_bottom.x = x + 1 + right_bottom.y = y + 1 + local entities = clone_from.find_entities_filtered{area = area_table} + for _, entity in pairs(entities) do + if entity.valid then + if entity.type == "character" then + local position = { + x = entity.position.x + clone_delta.dx, + y = entity.position.y + clone_delta.dy + } + local clone = clone_to.find_entity(entity.name, position) + if clone and entity.player then + entity.player.teleport(clone.position, clone_to) + util.safe_destroy(clone) + else + for _, playerdata in pairs(global.playerdata) do + if playerdata.character == entity then + playerdata.character = clone + end + end + util.safe_destroy(entity) + end + elseif util.table_contains(SpaceshipClone.types_excluded, entity.type) then + -- this is a cliff, rocket, tile ghost, or something that should not change surfaces. + -- remove the copy from the target surface instead of destroying the original + local position = { + x = entity.position.x + clone_delta.dx, + y = entity.position.y + clone_delta.dy + } + local clone = clone_to.find_entity(entity.name, position) + if clone then + util.safe_destroy(clone) + end + elseif entity.name == mod_prefix .. "spaceship-wall" then + -- this does not raise any event! + -- it will silently destroy the entity + -- if any mod was tracking the ship walls, it will get borked by this + -- why do potentially other-mod breaking thing? + -- we do this for performance reasons because raising events is expensive + entity.destroy() + else + util.safe_destroy(entity) + end + end + end + end + clone_from.set_tiles(change_tiles_from, true) + clone_to.set_tiles(change_tiles_to, true) + + -- non-space vehicles must be deactivated in space, and reactivated on land + local cars = clone_to.find_entities_filtered{ + type = {"car"}, + area = clone_to_area + } + for _, car in pairs(cars) do + if not string.find(car.name, mod_prefix.."space") then + car.active = Zone.is_space(clone_to_zone) + end + end + + -- turn off engines since the ship is no longer moving immediately after cloning + Spaceship.deactivate_engines(spaceship) + + -- fix some composite entities that don't clone nicely + CondenserTurbine.reset_surface(clone_to, clone_to_area) + Nexus.reset_surface(clone_to, clone_to_area) + LinkedContainer.update() + + -- ground and unground entities + SpaceshipClone.ground_unground_entities(clone_from, clone_to, clone_from_zone, clone_to_zone, clone_from_area, clone_to_area) + + -- put players back in vehicles + for _, vehicle_driver in pairs(vehicle_drivers) do + local vehicle_position = {x=vehicle_driver.vehicle_position.x+clone_delta.dx,y=vehicle_driver.vehicle_position.y+clone_delta.dy} + local driver_position = {x=vehicle_driver.driver_position.x+clone_delta.dx,y=vehicle_driver.driver_position.y+clone_delta.dy} + local vehicle = clone_to.find_entity(vehicle_driver.vehicle_name, vehicle_position) + local driver = clone_to.find_entity(vehicle_driver.driver_name, driver_position) + if vehicle and driver then + vehicle.set_driver(driver) + end + end + for _, vehicle_passenger in pairs(vehicle_passengers) do + local vehicle_position = {x=vehicle_passenger.vehicle_position.x+clone_delta.dx,y=vehicle_passenger.vehicle_position.y+clone_delta.dy} + local passenger_position = {x=vehicle_passenger.passenger_position.x+clone_delta.dx,y=vehicle_passenger.passenger_position.y+clone_delta.dy} + local vehicle = clone_to.find_entity(vehicle_passenger.vehicle_name, vehicle_position) + local passenger = clone_to.find_entity(vehicle_passenger.passenger_name, passenger_position) + if vehicle and passenger then + vehicle.set_passenger(passenger) + end + end + + -- set locomotive status (automatic vs normal) + for _, locomotive in pairs(locomotive_settings) do + local locomotive_x = math.floor(locomotive.position.x) + local locomotive_y = math.floor(locomotive.position.y) + local value = spaceship.known_tiles[locomotive_x] and spaceship.known_tiles[locomotive_x][locomotive_y] + if value == Spaceship.tile_status.floor_console_connected then + local position = {x=locomotive.position.x+clone_delta.dx,y=locomotive.position.y+clone_delta.dy} + local other = clone_to.find_entity(locomotive.name, position) + if other and other.valid and other.train then + other.train.manual_mode = locomotive.manual_mode + end + end + end + + -- turn on the new shield projectors + remote.call("shield-projector", "find_on_surface", { + surface = clone_to, + area = clone_to_area + }) + + -- play ship whooshing sound + for _, player in pairs(game.connected_players) do + if player.surface.index == clone_from.index or player.surface.index == clone_to.index then + player.play_sound{path = "se-spaceship-woosh", volume = 1} + end + end + + -- flag for cloning in progress + spaceship.is_cloning = false + + Spaceship.start_integrity_check(spaceship) + Spaceship.update_output_combinator(spaceship) + + -- clean up for after the clone completes + if post_clone_cb then post_clone_cb(spaceship, clone_from, clone_to, clone_delta) end +end + +return SpaceshipClone diff --git a/space-exploration_0.5.80/space-exploration/scripts/spaceship-gui.lua b/space-exploration_0.5.80/space-exploration/scripts/spaceship-gui.lua new file mode 100644 index 0000000..37e6d29 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/spaceship-gui.lua @@ -0,0 +1,1032 @@ +local SpaceshipGUI = {} + +SpaceshipGUI.name_spaceship_gui_root = mod_prefix.."spaceship-gui" +SpaceshipGUI.name_window_close = "spaceship_close_button" + +function SpaceshipGUI.gui_open_panel(player, spaceship, flow, name) + if name == "integrity" then + SpaceshipGUI.gui_open_panel_integrity(player, spaceship, flow) + elseif name == "speed" then + SpaceshipGUI.gui_open_panel_speed(player, spaceship, flow) + elseif name == "position" then + SpaceshipGUI.gui_open_panel_position(player, spaceship, flow) + elseif name == "destination" then + SpaceshipGUI.gui_open_panel_destination(player, spaceship, flow) + else + Log.trace('SpaceshipGUI.gui_open_panel invalid name '..name) + end +end + +function SpaceshipGUI.gui_open_panel_integrity(player, spaceship, flow_integrity) + if flow_integrity['panel_integrity'] then return end + + local panel_integrity = flow_integrity.add{ type="frame", name="panel_integrity", direction="vertical", style="b_inner_frame"} + panel_integrity.style.horizontally_stretchable = true + + local bar = panel_integrity.add{ type="progressbar", name="structural_integrity_progress", size = 300, value=0, style="spaceship_progressbar_integrity"} + bar.style.horizontally_stretchable = true + local label = panel_integrity.add{ type="label", name="structural_integrity", caption={"space-exploration.spaceship-structural-stress-hull", ""}} + label.style.top_margin = -26 + label.style.left_margin = 5 + label.style.font = "default-bold" + label.style.font_color = {} + + local bar = panel_integrity.add{ type="progressbar", name="container_integrity_progress", size = 300, value=0, style="spaceship_progressbar_integrity"} + bar.style.horizontally_stretchable = true + local label = panel_integrity.add{ type="label", name="container_integrity", caption={"space-exploration.spaceship-structural-stress-container", ""}} + label.style.top_margin = -26 + label.style.left_margin = 5 + label.style.font = "default-bold" + label.style.font_color = {} + + local integrity_status = panel_integrity.add{ type="label", name="integrity-status", caption=""} + integrity_status.style.width = 300 + integrity_status.style.single_line = false + + panel_integrity.add{ type="button", name="start-integrity-check", caption={"space-exploration.spaceship-button-start-integrity-check"}} +end + +function SpaceshipGUI.gui_open_panel_speed(player, spaceship, flow_speed) + if flow_speed['panel_speed'] then return end + + local panel_speed = flow_speed.add{ type="frame", name="panel_speed", direction="vertical", style="b_inner_frame"} + panel_speed.style.horizontally_stretchable = true + + local target_speed_flow = panel_speed.add{ type="flow", name="target-speed-flow"} + local label = target_speed_flow.add{type="label", name="target-speed-label", caption={"space-exploration.spaceship-target-speed"}} + local target_speed_control_flow = panel_speed.add{ type="flow", name="target-speed-control-flow"} + + local textfield + + local normal_flow = target_speed_control_flow.add{type="flow", name="target-speed-normal-flow", direction="horizontal", + tooltip={"space-exploration.spaceship-target-speed-normal-tooltip", SpaceshipObstacles.default_asteroid_density*100}} + normal_flow.add{type="sprite", sprite="virtual-signal/se-star", + tooltip={"space-exploration.spaceship-target-speed-normal-tooltip", SpaceshipObstacles.default_asteroid_density*100}} + normal_flow.style.left_margin = 5 + textfield = normal_flow.add{type="textfield", name="normal-speed-textfield", numeric="true", + tooltip={"space-exploration.spaceship-target-speed-normal-tooltip", SpaceshipObstacles.default_asteroid_density*100}} + textfield.style.natural_width = 40 + textfield.style.width = 40 + + local belt_flow = target_speed_control_flow.add{type="flow", name="target-speed-asteroid-belt-flow", direction="horizontal", + tooltip={"space-exploration.spaceship-target-speed-asteroid-belt-tooltip", SpaceshipObstacles.asteroid_density_by_zone_type["asteroid-belt"]*100}} + belt_flow.add{type="sprite", sprite="virtual-signal/se-asteroid-belt", + tooltip={"space-exploration.spaceship-target-speed-asteroid-belt-tooltip", SpaceshipObstacles.asteroid_density_by_zone_type["asteroid-belt"]*100}} + belt_flow.style.left_margin = 5 + textfield = belt_flow.add{type="textfield", name="belt-speed-textfield", numeric="true", + tooltip={"space-exploration.spaceship-target-speed-asteroid-belt-tooltip", SpaceshipObstacles.asteroid_density_by_zone_type["asteroid-belt"]*100}} + textfield.style.natural_width = 40 + textfield.style.width = 40 + + local field_flow = target_speed_control_flow.add{type="flow", name="target-speed-asteroid-field-flow", direction="horizontal", + tooltip={"space-exploration.spaceship-target-speed-asteroid-field-tooltip", SpaceshipObstacles.asteroid_density_by_zone_type["asteroid-field"]*100}} + field_flow.add{type="sprite", sprite="virtual-signal/se-asteroid-field", + tooltip={"space-exploration.spaceship-target-speed-asteroid-field-tooltip", SpaceshipObstacles.asteroid_density_by_zone_type["asteroid-field"]*100}} + field_flow.style.left_margin = 5 + textfield = field_flow.add{type="textfield", name="field-speed-textfield", numeric="true", + tooltip={"space-exploration.spaceship-target-speed-asteroid-field-tooltip", SpaceshipObstacles.asteroid_density_by_zone_type["asteroid-field"]*100}} + textfield.style.natural_width = 40 + textfield.style.width = 40 + + local root = panel_speed + if spaceship.target_speed_normal and root['target-speed-control-flow'] and root['target-speed-control-flow']['target-speed-normal-flow'] and root['target-speed-control-flow']['target-speed-normal-flow']['normal-speed-textfield'] then + root['target-speed-control-flow']['target-speed-normal-flow']['normal-speed-textfield'].text = tostring(spaceship.target_speed_normal) + end + if spaceship.target_speed_belt and root['target-speed-control-flow'] and root['target-speed-control-flow']['target-speed-asteroid-belt-flow'] and root['target-speed-control-flow']['target-speed-asteroid-belt-flow']['belt-speed-textfield'] then + root['target-speed-control-flow']['target-speed-asteroid-belt-flow']['belt-speed-textfield'].text = tostring(spaceship.target_speed_belt) + end + if spaceship.target_speed_field and root['target-speed-control-flow'] and root['target-speed-control-flow']['target-speed-asteroid-field-flow'] and root['target-speed-control-flow']['target-speed-asteroid-field-flow']['field-speed-textfield'] then + root['target-speed-control-flow']['target-speed-asteroid-field-flow']['field-speed-textfield'].text = tostring(spaceship.target_speed_field) + end + + local bar = panel_speed.add{ type="progressbar", name="launch_energy_progress", size = 300, value=0, style="spaceship_progressbar_energy"} + bar.style.horizontally_stretchable = true + local label = panel_speed.add{ type="label", name="launch_energy", caption={"space-exploration.spaceship-launch-energy", ""}} + label.style.top_margin = -26 + label.style.left_margin = 5 + label.style.font = "default-bold" + label.style.font_color = {} + + local bar = panel_speed.add{ type="progressbar", name="streamline_progress", size = 300, value=0, style="spaceship_progressbar_streamline"} + bar.style.horizontally_stretchable = true + local label = panel_speed.add{ type="label", name="streamline", caption={"space-exploration.spaceship-streamline", ""}} + label.style.top_margin = -26 + label.style.left_margin = 5 + label.style.font = "default-bold" + label.style.font_color = {} +end + +function SpaceshipGUI.gui_open_panel_position(player, spaceship, flow_position) + if flow_position['panel_position'] then return end + + local panel_position = flow_position.add{ type="frame", name="panel_position", direction="vertical", style="b_inner_frame"} + panel_position.style.horizontally_stretchable = true + + local space_distortion = panel_position.add{ type="label", name="anomaly-distance", caption=""} + space_distortion.style.width = 300 + space_distortion.style.single_line = false + + local stellar_x = panel_position.add{ type="label", name="stellar-x", caption=""} + stellar_x.style.width = 300 + stellar_x.style.single_line = false + + local stellar_y = panel_position.add{ type="label", name="stellar-y", caption=""} + stellar_y.style.width = 300 + stellar_y.style.single_line = false + + local star_gravity = panel_position.add{ type="label", name="star-gravity", caption=""} + star_gravity.style.width = 300 + star_gravity.style.single_line = false + + local planet_gravity = panel_position.add{ type="label", name="planet-gravity", caption=""} + planet_gravity.style.width = 300 + planet_gravity.style.single_line = false + + local closest_location = panel_position.add{ type="label", name="closest-location", caption=""} + closest_location.style.width = 300 + closest_location.style.single_line = false + + local asteroid_density = panel_position.add{ type="label", name="asteroid-density", caption=""} + asteroid_density.style.width = 300 + asteroid_density.style.single_line = false +end + +function SpaceshipGUI.gui_open_panel_destination(player, spaceship, flow_destination) + if flow_destination['panel_destination'] then return end + + local playerdata = get_make_playerdata(player) + + local panel_destination = flow_destination.add{ type="frame", name="panel_destination", direction="vertical", style="b_inner_frame"} + panel_destination.style.horizontally_stretchable = true + + + panel_destination.add{ type="label", name="destination-label", caption={"space-exploration.spaceship-heading-destination"}, style="space_platform_title"} + + panel_destination.add{type="checkbox", name="list-zones-alphabetical", caption={"space-exploration.list-destinations-alphabetically"}, state=playerdata.zones_alphabetical and true or false} + + local filter_container = panel_destination.add{ type="flow", name="filter_flow", direction="horizontal"} + local filter_field = filter_container.add{ type="textfield", name="filter_list"} + filter_field.style.width = 275 + local filter_button = filter_container.add{ type = "sprite-button", name="clear_filter", sprite="utility/search_icon", tooltip={"space-exploration.clear-filter"},} + filter_button.style.left_margin = 5 + filter_button.style.width = 28 + filter_button.style.height = 28 + + local destination_zone = Spaceship.get_destination_zone(spaceship) + if not destination_zone then destination_zone = Zone.from_zone_index(spaceship.zone_index) end + if not destination_zone then destination_zone = Zone.find_nearest_zone( + spaceship.space_distortion, + spaceship.stellar_position, + spaceship.star_gravity_well, + spaceship.planet_gravity_well) + end + local list, selected_index, values = Zone.dropdown_list_zone_destinations(spaceship.force_name, destination_zone, playerdata.zones_alphabetical) + local zones_dropdown = panel_destination.add{ type="drop-down", name="spaceship-list-zones", items=list, selected_index=selected_index} + zones_dropdown.style.horizontally_stretchable = true + player_set_dropdown_values(player, "spaceship-list-zones", values) + + panel_destination.add{ type="label", name="travel-time", caption=""} + + local travel_status = panel_destination.add{ type="label", name="travel-status", caption=""} + travel_status.style.width = 300 + travel_status.style.single_line = false + + spaceship.distance_to_destination = Spaceship.get_distance_to_destination(spaceship) +end + +--- Opens the spaceship gui for a player for a certain spaceship +---@param player any the player +---@param spaceship any the spaceship +function SpaceshipGUI.gui_open(player, spaceship) + SpaceshipGUI.gui_close(player) + if not spaceship then + player.print({"space-exploration.spaceship_try_replace_console"}) + return + end + local gui = player.gui.left + + local container = gui.add{ + type = "frame", + name = SpaceshipGUI.name_spaceship_gui_root, + style="space_platform_container", + direction="vertical", + -- use gui element tags to store a reference to what spaceship this gui is displaying/controls + tags = { + index = spaceship.index + } + } + + + local spaceship_title_table = container.add { + type = "table", + name = "spaceship_title_table", + column_count = 3, + draw_horizontal_lines = false, + } + spaceship_title_table.style.horizontally_stretchable = true + spaceship_title_table.style.column_alignments[1] = "left" + spaceship_title_table.style.column_alignments[2] = "right" + spaceship_title_table.style.column_alignments[3] = "right" + + local spaceship_title_flow = spaceship_title_table.add { + type = "flow", + name="spaceship_title_flow", + direction = "horizontal" + } + spaceship_title_flow.style.vertically_stretchable = false + + local spaceship_icon = spaceship_title_flow.add { + type = "label", + caption = "[img=virtual-signal/se-spaceship] ", + style = "frame_title", + ignored_by_interaction = true + } + local spaceship_title_label = spaceship_title_flow.add { + type = "label", + name = "show-name", + caption = {"space-exploration.spaceship-name-the", spaceship.name}, + style = "frame_title", + ignored_by_interaction = true + } + spaceship_title_label.style.vertically_stretchable = true + spaceship_title_label.style.horizontally_squashable = true + + local spaceship_title_empty = spaceship_title_table.add { + type = "empty-widget", + style = "draggable_space", + ignored_by_interaction = true + } + spaceship_title_empty.style.horizontally_stretchable = true + spaceship_title_empty.style.left_margin = 4 + spaceship_title_empty.style.right_margin = 0 + spaceship_title_empty.style.height = 24 + + local spaceship_title_buttons = spaceship_title_table.add { + type = "flow", + name = "spaceship_title_buttons", + direction = "horizontal" + } + local spaceship_title_rename = spaceship_title_buttons.add { + type="sprite-button", + name="rename", + sprite = "utility/rename_icon_normal", + style="informatron_close_button", + tooltip={"space-exploration.rename-something", {"entity-name.se-spaceship-console"}}, + } + spaceship_title_rename.style.width = 28 + spaceship_title_rename.style.height = 28 + + local spaceship_title_informatron = spaceship_title_buttons.add { + type="sprite-button", + name="goto_informatron_spaceships", + sprite = "virtual-signal/informatron", + style="informatron_close_button", + tooltip={"space-exploration.informatron-open-help"} + } + spaceship_title_informatron.style.width = 28 + spaceship_title_informatron.style.height = 28 + + local spaceship_title_close = spaceship_title_buttons.add { + type="sprite-button", + name=SpaceshipGUI.name_window_close, + sprite = "utility/close_white", + style="informatron_close_button", + tooltip={"space-exploration.close-instruction-only-confirm"} + } + spaceship_title_close.style.width = 28 + spaceship_title_close.style.height = 28 + + + local flow_integrity = container.add{ type="flow", name="flow_integrity", direction="vertical"} + local button_integrity = flow_integrity.add{ type="button", name="button_integrity", tags={collapse="panel_integrity"}, style = "se_generic_button"} + button_integrity.style.horizontally_stretchable = true + button_integrity.style.top_margin = 10 + button_integrity.style.padding = 0 + button_integrity.style.left_padding = 5 + button_integrity.style.horizontal_align = "left" + + + local flow_speed = container.add{ type="flow", name="flow_speed", direction="vertical"} + local button_speed = flow_speed.add{ type="button", name="button_speed", tags={collapse="panel_speed"}, style = "se_generic_button"} + button_speed.style.horizontally_stretchable = true + button_speed.style.top_margin = 10 + button_speed.style.padding = 0 + button_speed.style.left_padding = 5 + button_speed.style.horizontal_align = "left" + + local flow_position = container.add{ type="flow", name="flow_position", direction="vertical"} + local button_position = flow_position.add{ type="button", name="button_position", tags={collapse="panel_position"}, style = "se_generic_button"} + button_position.style.horizontally_stretchable = true + button_position.style.top_margin = 10 + button_position.style.padding = 0 + button_position.style.left_padding = 5 + button_position.style.horizontal_align = "left" + + + + local flow_destination = container.add{ type="flow", name="flow_destination", direction="vertical"} + local button_destination = flow_destination.add{ type="button", name="button_destination", tags={collapse="panel_destination"}, style = "se_generic_button"} + button_destination.style.horizontally_stretchable = true + button_destination.style.top_margin = 10 + button_destination.style.padding = 0 + button_destination.style.left_padding = 5 + button_destination.style.horizontal_align = "left" + + + container.add{ type="flow", name="action-flow", direction="horizontal"} + + container.add{ type="flow", name="back-flow", direction="horizontal"} + + SpaceshipGUI.update_panel_states(player, spaceship, container) + SpaceshipGUI.gui_update(player) +end + +function SpaceshipGUI.gui_update(player) + local root = player.gui.left[SpaceshipGUI.name_spaceship_gui_root] + if root and root.tags and root.tags.index then + local spaceship = Spaceship.from_index(root.tags.index) + + if spaceship then + local playerdata = get_make_playerdata(player) + local energy_required = Spaceship.get_launch_energy_cost(spaceship) + + if root["flow_integrity"] and root["flow_integrity"]["panel_integrity"] then + local panel = root["flow_integrity"]["panel_integrity"] + if panel["structural_integrity"] and panel["structural_integrity_progress"] then + if spaceship.integrity_stress_structure and spaceship.integrity_stress_structure_max and spaceship.integrity_limit then + panel["structural_integrity"].caption={"space-exploration.spaceship-structural-stress-hull", string.format("%.2f", spaceship.integrity_stress_structure) .. " ["..string.format("%.2f", spaceship.integrity_stress_structure_max) .. "] / " .. spaceship.integrity_limit} + panel["structural_integrity_progress"].value = math.min(1, spaceship.integrity_stress_structure / spaceship.integrity_limit) + + local structural_integrity_tooltip = {"space-exploration.spaceship-structural-stress-hull-tooltip", string.format("%.2f", spaceship.integrity_stress_structure), string.format("%.2f", spaceship.integrity_stress_structure_max), spaceship.integrity_limit} + panel["structural_integrity"].tooltip=structural_integrity_tooltip + panel["structural_integrity_progress"].tooltip=structural_integrity_tooltip + else + panel["structural_integrity"].caption={"space-exploration.spaceship-structural-stress-hull-invalid"} + panel["structural_integrity_progress"].value = 0 + panel["structural_integrity"].tooltip=nil + panel["structural_integrity_progress"].tooltip=nil + end + end + + if panel["container_integrity"] and panel["container_integrity_progress"] then + if spaceship.integrity_stress_container and spaceship.integrity_limit then + panel["container_integrity"].caption={"space-exploration.spaceship-structural-stress-container", string.format("%.2f", spaceship.integrity_stress_container).. " / " .. spaceship.integrity_limit} + panel["container_integrity_progress"].value = math.min(1, spaceship.integrity_stress_container / spaceship.integrity_limit) + + local container_integrity_tooltip = {"space-exploration.spaceship-structural-stress-container-tooltip", string.format("%.2f", spaceship.integrity_stress_container), spaceship.integrity_limit} + panel["container_integrity"].tooltip=container_integrity_tooltip + panel["container_integrity_progress"].tooltip=container_integrity_tooltip + else + panel["container_integrity"].caption={"space-exploration.spaceship-structural-stress-container-invalid"} + panel["container_integrity_progress"].value = 0 + panel["container_integrity"].tooltip=nil + panel["container_integrity_progress"].tooltip=nil + end + end + + if panel["integrity-status"] then + --root["integrity-status"].caption="Integrity Status: " + -- .. (spaceship.integrity_valid and "Valid: " or "Invalid: ") + -- .. (spaceship.check_message or "") + if spaceship.integrity_valid then + panel["integrity-status"].caption = {"space-exploration.spaceship-integrity-status-valid", (spaceship.check_message or "")} + else + panel["integrity-status"].caption = {"space-exploration.spaceship-integrity-status-invalid", (spaceship.check_message or "")} + end + end + end + + if root["flow_speed"] and root["flow_speed"]["panel_speed"] then + local panel = root["flow_speed"]["panel_speed"] + + if panel["target-speed-flow"] and panel["target-speed-flow"]["target-speed-label"] then + if spaceship.target_speed_source == "manual-override" then + panel["target-speed-flow"]["target-speed-label"].caption = {"space-exploration.spaceship-target-speed-manual-override", "0"} + elseif not spaceship.target_speed then + panel["target-speed-flow"]["target-speed-label"].caption = {"space-exploration.spaceship-target-speed-unlimited"} + else + if spaceship.target_speed_source == "circuit" then + panel["target-speed-flow"]["target-speed-label"].caption = {"space-exploration.spaceship-target-speed-circuit", math.floor(spaceship.target_speed)} + elseif spaceship.target_speed_source == "asteroid-belt" then + panel["target-speed-flow"]["target-speed-label"].caption = {"space-exploration.spaceship-target-speed-asteroid-belt", spaceship.target_speed} + elseif spaceship.target_speed_source == "asteroid-field" then + panel["target-speed-flow"]["target-speed-label"].caption = {"space-exploration.spaceship-target-speed-asteroid-field", spaceship.target_speed} + else + panel["target-speed-flow"]["target-speed-label"].caption = {"space-exploration.spaceship-target-speed-normal", spaceship.target_speed} + end + end + end + if panel["target-speed-control-flow"] then + if panel['target-speed-control-flow']['target-speed-normal-flow'] and panel['target-speed-control-flow']['target-speed-normal-flow']['normal-speed-textfield'] then + local text = spaceship.target_speed_normal and tostring(spaceship.target_speed_normal) or "" + if panel['target-speed-control-flow']['target-speed-normal-flow']['normal-speed-textfield'].text ~= text then + panel['target-speed-control-flow']['target-speed-normal-flow']['normal-speed-textfield'].text = text + end + end + if panel['target-speed-control-flow']['target-speed-asteroid-belt-flow'] and panel['target-speed-control-flow']['target-speed-asteroid-belt-flow']['belt-speed-textfield'] then + local text = spaceship.target_speed_belt and tostring(spaceship.target_speed_belt) or "" + if panel['target-speed-control-flow']['target-speed-asteroid-belt-flow']['belt-speed-textfield'].text ~= text then + panel['target-speed-control-flow']['target-speed-asteroid-belt-flow']['belt-speed-textfield'].text = text + end + end + if panel['target-speed-control-flow']['target-speed-asteroid-field-flow'] and panel['target-speed-control-flow']['target-speed-asteroid-field-flow']['field-speed-textfield'] then + local text = spaceship.target_speed_field and tostring(spaceship.target_speed_field) or "" + if panel['target-speed-control-flow']['target-speed-asteroid-field-flow']['field-speed-textfield'].text ~= text then + panel['target-speed-control-flow']['target-speed-asteroid-field-flow']['field-speed-textfield'].text = text + end + end + end + + if panel["launch_energy"] then + if spaceship.zone_index then + if energy_required and spaceship.launch_energy then + panel["launch_energy"].caption={"space-exploration.spaceship-launch-energy", Util.format_energy(spaceship.launch_energy) .. " / " .. Util.format_energy(energy_required, true)} + panel["launch_energy_progress"].value = math.min(1, spaceship.launch_energy / energy_required) + + local launch_energy_tooltip = {"space-exploration.spaceship-launch-energy-tooltip", Util.format_energy(spaceship.launch_energy), Util.format_energy(energy_required, true)} + panel["launch_energy"].tooltip=launch_energy_tooltip + panel["launch_energy_progress"].tooltip=launch_energy_tooltip + else + panel["launch_energy"].caption={"space-exploration.spaceship-launch-energy-invalid"} + panel["launch_energy_progress"].value = 0 + panel["launch_energy"].tooltip=nil + panel["launch_energy_progress"].tooltip=nil + end + else + -- repurpose for speed + if spaceship.speed > 0 then + panel["launch_energy"].caption={"space-exploration.spaceship-speed", string.format("%.2f", spaceship.speed or 0) .. " / " .. string.format("%.2f", spaceship.max_speed or 0)} + panel["launch_energy_progress"].value = math.min(1, spaceship.speed / (spaceship.max_speed or spaceship.speed)) + else + panel["launch_energy"].caption={"space-exploration.spaceship-speed", " 0 / " .. string.format("%.2f", spaceship.max_speed or 0)} + panel["launch_energy_progress"].value = 0 + end + end + end + if panel["streamline"] and panel["streamline_progress"] then + if spaceship.streamline then + panel["streamline"].caption={"space-exploration.spaceship-streamline", string.format("%.2f",(spaceship.streamline or 0) * 100).."%"} + panel["streamline_progress"].value = spaceship.streamline or 0 + + local streamline_tooltip = {"space-exploration.spaceship-streamline-tooltip", string.format("%.2f",(spaceship.streamline or 0) * 100).."%", "100.00%"} + panel["streamline"].tooltip=streamline_tooltip + panel["streamline_progress"].tooltip=streamline_tooltip + end + end + end + + if root["flow_position"] and root["flow_position"]["panel_position"] then + local panel = root["flow_position"]["panel_position"] + if spaceship.space_distortion > 0 then + --root["anomaly-distance"].caption = "Spacial Distortion: " .. string.format("%.2f", spaceship.space_distortion * Zone.travel_cost_space_distortion) + panel["anomaly-distance"].caption = {"space-exploration.spaceship-location-spatial-distortion", string.format("%.2f", spaceship.space_distortion * Zone.travel_cost_space_distortion)} + else + panel["anomaly-distance"].caption = "" + end + if spaceship.space_distortion > 0.05 then + panel["stellar-x"].caption = "" + panel["stellar-y"].caption = "" + panel["star-gravity"].caption = "" + panel["planet-gravity"].caption = "" + else + --root["stellar-x"].caption = "Quadrant X: " .. string.format("%.2f", spaceship.stellar_position.x * Zone.travel_cost_interstellar) + --root["stellar-y"].caption = "Quadrant Y: " .. string.format("%.2f", spaceship.stellar_position.y * Zone.travel_cost_interstellar) + panel["stellar-x"].caption = {"space-exploration.spaceship-location-stellar-x", string.format("%.2f", spaceship.stellar_position.x * Zone.travel_cost_interstellar)} + panel["stellar-y"].caption = {"space-exploration.spaceship-location-stellar-y", string.format("%.2f", spaceship.stellar_position.y * Zone.travel_cost_interstellar)} + if spaceship.star_gravity_well > 0 then + --root["star-gravity"].caption = "Star gravity well: " .. string.format("%.2f", spaceship.star_gravity_well * Zone.travel_cost_star_gravity) + panel["star-gravity"].caption = {"space-exploration.spaceship-location-star-gravity-well", string.format("%.2f", spaceship.star_gravity_well * Zone.travel_cost_star_gravity)} + else + panel["star-gravity"].caption = "" + end + if spaceship.planet_gravity_well > 0 then + --root["planet-gravity"].caption = "Planet gravity well: " .. string.format("%.2f", spaceship.planet_gravity_well * Zone.travel_cost_planet_gravity) + panel["planet-gravity"].caption = {"space-exploration.spaceship-location-planet-gravity-well", string.format("%.2f", spaceship.planet_gravity_well * Zone.travel_cost_planet_gravity)} + else + panel["planet-gravity"].caption = "" + end + end + + if panel["closest-location"] and ((game.tick + 30) % 60 == 0 or panel["closest-location"].caption == "") then + local closest = Zone.find_nearest_zone( + spaceship.space_distortion, + spaceship.stellar_position, + spaceship.star_gravity_well, + spaceship.planet_gravity_well) + if Zone.is_visible_to_force(closest, player.force.name) then + panel["closest-location"].caption = {"space-exploration.spaceship-closest-location", closest.name} + else + local closest_type = "" + if closest.type == "asteroid-belt" then + closest_type = {"space-exploration.asteroid-belt"} + elseif closest.type == "asteroid-field" then + closest_type = {"space-exploration.asteroid-field"} + end + panel["closest-location"].caption = {"space-exploration.spaceship-closest-location-unknown", closest_type} + end + end + + if spaceship.asteroid_density and panel["asteroid-density"] then + panel["asteroid-density"].caption = {"space-exploration.spaceship-asteroid-density", SpaceshipObstacles.get_asteroid_density_caption(spaceship)} + end + end + + if root["flow_destination"] and root["flow_destination"]["panel_destination"] then + local panel = root["flow_destination"]["panel_destination"] + if game.tick % 60 == 0 then + spaceship.distance_to_destination = Spaceship.get_distance_to_destination(spaceship) + spaceship.distance_to_destination_tick = game.tick + end + if spaceship.distance_to_destination and spaceship.speed then + if spaceship.speed == 0 then + if not spaceship.max_speed or spaceship.max_speed == 0 then + --root["travel-time"].caption = "Travel time: Unknown. Test max speed for estimate." + panel["travel-time"].caption = {"space-exploration.spaceship-travel-time-unknown"} + else + --root["travel-time"].caption = "Travel time: ".. + -- Util.seconds_to_clock(spaceship.distance_to_destination / ((spaceship.max_speed or 1) * Spaceship.travel_speed_multiplier) / 60) + -- .. "s at max speed" + panel["travel-time"].caption = {"space-exploration.spaceship-travel-time-max", Util.seconds_to_clock(spaceship.distance_to_destination / ((spaceship.max_speed or 1) * Spaceship.travel_speed_multiplier) / 60)} + end + else + panel["travel-time"].caption = {"space-exploration.spaceship-travel-time-current", Util.seconds_to_clock(spaceship.distance_to_destination / ((spaceship.speed or 1) * Spaceship.travel_speed_multiplier) / 60)} + end + else + panel["travel-time"].caption = {"space-exploration.spaceship-travel-time-current", 0} + end + + if panel["travel-status"] then + --root["travel-status"].caption="Travel Status: " .. (spaceship.travel_message or "") + panel["travel-status"].caption={"space-exploration.spaceship-travel-status", (spaceship.travel_message or "")} + end + + end + + + -- button modes: + --[[ + launch when on a surface + Anchor when near a surface the is the destination + Stop when moving. + Engage when in space and: + a destination is selected + or not near a surface + ]]-- + + local button + if spaceship.zone_index then + -- launch + if not root["action-flow"]["launch"] then + root["action-flow"].clear() + root["action-flow"].add{ type="button", name="launch", caption={"space-exploration.spaceship-button-launch"}, style="confirm_button"} + end + button = root["action-flow"]["launch"] + if spaceship.integrity_valid then + if energy_required and spaceship.launch_energy and spaceship.launch_energy >= energy_required then + --button.caption = "Launch" + button.caption = {"space-exploration.spaceship-button-launch"} + --button.tooltip = "Ready to launch" + button.tooltip = {"space-exploration.spaceship-button-launch-tooltip"} + button.style = "confirm_button" + else + --button.caption = "Launch (disabled)" + button.caption = {"space-exploration.spaceship-button-launch-disabled"} + --button.tooltip = "Requires fuel in booster tanks" + button.tooltip = {"space-exploration.spaceship-button-launch-disabled-fuel-tooltip"} + button.style = "red_confirm_button" + end + else + --button.caption = "Launch (disabled)" + button.caption = {"space-exploration.spaceship-button-launch-disabled"} + --button.tooltip = "Requires valid integrity check" + button.tooltip = {"space-exploration.spaceship-button-launch-disabled-integrity-tooltip"} + button.style = "red_confirm_button" + end + + elseif spaceship.awaiting_requests then + -- launch in progress + if not root["action-flow"]["launch"] then + root["action-flow"].clear() + root["action-flow"].add{ type="button", name="launch", caption={"space-exploration.spaceship-button-launching"}, style="confirm_button"} + end + button = root["action-flow"]["launch"] + button.caption = {"space-exploration.spaceship-button-launching"} + button.tooltip = {"space-exploration.spaceship-button-launching-tooltip"} + button.style = "yellow_confirm_button" + elseif spaceship.near and + (spaceship.destination == nil + or (spaceship.near.type == "zone" and spaceship.destination.index == spaceship.near.index)) then + -- anchor + local zone = Zone.from_zone_index(spaceship.near.index) + if not root["action-flow"]["button_anchor"] then + root["action-flow"].clear() + root["action-flow"].add{ type="button", name="button_anchor", caption={"space-exploration.spaceship-button-anchor"}, style="confirm_button"} + end + button = root["action-flow"]["button_anchor"] + if playerdata.anchor_scouting_for_spaceship_index then + --button.caption = "Confirm Anchor" + button.caption = {"space-exploration.spaceship-button-confirm-anchor"} + button.style = "confirm_button" + else + --local context = Zone.is_solid(zone) and "on" or "to" + --button.caption = "Anchor "..context.." "..zone.name + if Zone.is_solid(zone) then + button.caption = {"space-exploration.spaceship-button-anchor-on", zone.name} + else + button.caption = {"space-exploration.spaceship-button-anchor-to", zone.name} + end + button.style = "confirm_button" + end + + elseif spaceship.near and spaceship.near.type == "spaceship" and spaceship.destination + and spaceship.destination.type == "spaceship" and spaceship.destination.index == spaceship.near.index then + + -- board + local othership = Spaceship.from_index(spaceship.near.index) + if not othership then + spaceship.destination = nil + end + local name = othership and othership.name or "MISSING" + if not root["action-flow"]["board"] then + root["action-flow"].clear() + root["action-flow"].add{ type="button", name="board", caption={"space-exploration.spaceship-button-board", name}, style="confirm_button"} + end + button = root["action-flow"]["board"] + + + elseif spaceship.destination and not spaceship.stopped then + + if not root["action-flow"]["stop"] then + root["action-flow"].clear() + root["action-flow"].add{ type="button", name="stop", caption={"space-exploration.spaceship-button-stop"}, style="confirm_button"} + end + button = root["action-flow"]["stop"] + + else + + if not root["action-flow"]["start"] then + root["action-flow"].clear() + root["action-flow"].add{ type="button", name="start", caption={"space-exploration.spaceship-button-start"}, style="confirm_button"} + end + button = root["action-flow"]["start"] + + end + + button.style.top_margin = 10 + button.style.horizontally_stretchable = true + button.style.horizontal_align = "left" + + if playerdata.anchor_scouting_for_spaceship_index then + if not root["back-flow"]["cancel_anchor_scouting"] then + local back = root["back-flow"].add{type = "button", name = "cancel_anchor_scouting", + caption = {"space-exploration.spaceship-button-scouting-back"}, style="back_button", tooltip={"space-exploration.spaceship-button-scouting-back-tooltip"}} + back.style.top_margin = 10 + end + elseif root["back-flow"]["cancel_anchor_scouting"] then + root["back-flow"]["cancel_anchor_scouting"].destroy() + end + end + end +end + +--- Updates the state for a particular collapsible panel to reflect its state in playerdata +---@param player LuaPlayer the player to modify the GUI for +---@param spaceship Spaceship the spaceship data +---@param root LuaGuiElement the root gui element in which the panel is +---@param name string name of the panel +function SpaceshipGUI.update_panel_state(player, spaceship, root, name) + local flow = root['flow_' .. name] + if not flow then return end + local element = flow['panel_' .. name] + local button = flow['button_' .. name] + local playerdata = get_make_playerdata(player) + playerdata.collapse_map = playerdata.collapse_map or {position = true} + if playerdata.collapse_map[name] then + if element then element.destroy() end + button.caption={"space-exploration.panel-closed", {"space-exploration.panel-"..name.."-name"}} + else + SpaceshipGUI.gui_open_panel(player, spaceship, flow, name) + button.caption={"space-exploration.panel-open", {"space-exploration.panel-"..name.."-name"}} + end +end + +--- Updates the state for all collapsible panels to reflect their states in playerdata +---@param player any +---@param spaceship any +---@param root any +function SpaceshipGUI.update_panel_states(player, spaceship, root) + SpaceshipGUI.update_panel_state(player, spaceship, root, "integrity") + SpaceshipGUI.update_panel_state(player, spaceship, root, "speed") + SpaceshipGUI.update_panel_state(player, spaceship, root, "position") + SpaceshipGUI.update_panel_state(player, spaceship, root, "destination") + SpaceshipGUI.gui_update(player) -- force GUI update immediately +end + +function SpaceshipGUI.on_gui_click(event) + if not (event.element and event.element.valid) then return end + local element = event.element + local player = game.players[event.player_index] + local root = gui_element_or_parent(element, SpaceshipGUI.name_spaceship_gui_root) + if not (root and root.tags and root.tags.index) then return end + local playerdata = get_make_playerdata(player) + local spaceship = Spaceship.from_index(root.tags.index) + if not spaceship then + if playerdata.anchor_scouting_for_spaceship_index then + Spaceship.stop_anchor_scouting(player) + end + return + end + + if element.tags and element.tags.collapse then + playerdata.collapse_map = playerdata.collapse_map or {position = true} + if element.tags.collapse == "panel_integrity" then + playerdata.collapse_map['integrity'] = not playerdata.collapse_map['integrity'] + elseif element.tags.collapse == "panel_speed" then + playerdata.collapse_map['speed'] = not playerdata.collapse_map['speed'] + elseif element.tags.collapse == "panel_position" then + playerdata.collapse_map['position'] = not playerdata.collapse_map['position'] + elseif element.tags.collapse == "panel_destination" then + playerdata.collapse_map['destination'] = not playerdata.collapse_map['destination'] + end + SpaceshipGUI.update_panel_states(player, spaceship, root) + end + if element.name == "launch" then + + if spaceship.zone_index and not spaceship.entities_to_restore then + spaceship.is_launching = true + spaceship.is_landing = false + Spaceship.start_integrity_check(spaceship) + spaceship.is_doing_check_slowly = nil -- never slowly if the player asks for the check + end + + elseif element.name == "button_anchor" then + + if spaceship.near and spaceship.near.type == "zone" and not spaceship.entities_to_restore then + if playerdata.anchor_scouting_for_spaceship_index then + local position = table.deepcopy(player.position) + Spaceship.stop_anchor_scouting(player) + Spaceship.land_at_position(spaceship, position) + else + spaceship.is_launching = false + spaceship.is_landing = true + Spaceship.start_anchor_scouting(spaceship, player) + Spaceship.start_integrity_check(spaceship) + end + elseif playerdata.anchor_scouting_for_spaceship_index then + Spaceship.stop_anchor_scouting(player) + end + + elseif element.name == "board" then + if spaceship.near and spaceship.near.type == "spaceship" then + local othership = Spaceship.from_index(spaceship.near.index) + if othership and Zone.get_travel_delta_v_sub(spaceship, othership) < 1 then + if not othership.own_surface_index then + player.print({"space-exploration.fail-board-target-anchored"}) + else + local character = player.character + if not character then + local playerdata = get_make_playerdata(player) + character = playerdata.character + end + if not character then + player.print({"space-exploration.fail-board-no-character"}) + else + if character.surface.index ~= spaceship.own_surface_index then + player.print({"space-exploration.fail-board-remote-character"}) + else + local surface = Spaceship.get_current_surface(othership) + local boarding_position = Spaceship.get_boarding_position(othership) + --teleport_non_colliding_player(player, boarding_position, surface) + teleport_character_to_surface(character, surface, boarding_position) + SpaceshipGUI.gui_close(player) + end + end + end + end + end + + elseif element.name == "stop" then + + spaceship.stopped = true + spaceship.target_speed = nil + spaceship.target_speed_source = 'manual-override' + + elseif element.name == "start" then + + spaceship.stopped = false + spaceship.target_speed = nil + spaceship.target_speed_source = nil + Spaceship.start_integrity_check(spaceship) + + elseif element.name == "cancel_anchor_scouting" then + + Spaceship.stop_anchor_scouting(player) + + elseif element.name == "start-integrity-check" then + + spaceship.max_speed = 0 + Spaceship.start_integrity_check(spaceship, 0.1) + + elseif element.name == "rename" then + + if not root["spaceship_title_table"]["spaceship_title_flow"] then + SpaceshipGUI.gui_close(player) + return + end + if root["spaceship_title_table"]["spaceship_title_flow"]["show-name"] then + root["spaceship_title_table"]["spaceship_title_flow"]["show-name"].destroy() + local textfield = root["spaceship_title_table"]["spaceship_title_flow"].add{ type = "textfield", name="write-name", text=spaceship.name, style="space_platform_textfield_short"} + textfield.style.horizontally_squashable = true + textfield.style.maximal_width = 180 + element.sprite = "utility/enter" + elseif root["spaceship_title_table"]["spaceship_title_flow"]["write-name"] then + local new_name = string.trim(root["spaceship_title_table"]["spaceship_title_flow"]["write-name"].text) + if newname ~= "" and new_name ~= spaceship.name then + spaceship.name = new_name + end + root["spaceship_title_table"]["spaceship_title_flow"]["write-name"].destroy() + local spaceship_title_label = root["spaceship_title_table"]["spaceship_title_flow"].add { + type = "label", + name = "show-name", + caption = {"space-exploration.spaceship-name-the", spaceship.name}, + style = "frame_title", + ignored_by_interaction = true + } + spaceship_title_label.style.vertically_stretchable = true + spaceship_title_label.style.horizontally_squashable = true + element.sprite = "utility/rename_icon_normal" + else + SpaceshipGUI.gui_close(player) + return + end + elseif element.name == "spaceship-list-zones" then + + local value = player_get_dropdown_value(player, element.name, element.selected_index) + if type(value) == "table" then + if value.type == "zone" then + local zone_index = value.index + local zone = Zone.from_zone_index(zone_index) + if zone then + spaceship.destination = {type = "zone", index = zone_index} + spaceship.travel_message = {"space-exploration.spaceship-travel-message-new-course-plotted"} + --spaceship.destination_zone_index = zone_index + Log.trace("set destination to location: " .. zone.name ) + end + + elseif value.type == "spaceship" then + local spaceship_index = value.index + local destination_spaceship = Spaceship.from_index(spaceship_index) + if destination_spaceship == spaceship then + player.print({"space-exploration.spaceship-cannot-set-destination-to-self"}) + else + spaceship.destination = {type = "spaceship", index = spaceship_index} + spaceship.travel_message = {"space-exploration.spaceship-travel-message-new-course-plotted"} + Log.trace("set destination to spaceship : " .. spaceship.name ) + end + end + Spaceship.update_output_combinator(spaceship) + else + SpaceshipGUI.gui_close(player) + Log.trace("Error: Non-table value ") + end + + elseif element.name == "clear_filter" then + element.parent.filter_list.text = "" + SpaceshipGUI.gui_update_destinations_list(player) + elseif element.name == SpaceshipGUI.name_window_close then + SpaceshipGUI.gui_close(player) + elseif element.name == "goto_informatron_spaceships" then + remote.call("informatron", "informatron_open_to_page", { + player_index = event.player_index, + interface = "space-exploration", + page_name = "spaceships" + }) + end +end +Event.addListener(defines.events.on_gui_click, SpaceshipGUI.on_gui_click) +Event.addListener(defines.events.on_gui_selection_state_changed, SpaceshipGUI.on_gui_click) + + +function SpaceshipGUI.on_gui_checked_state_changed(event) + if not (event.element and event.element.valid) then return end + local element = event.element + local player = game.players[event.player_index] + local root = gui_element_or_parent(element, SpaceshipGUI.name_spaceship_gui_root) + if not (root and root.tags and root.tags.index) then return end + local spaceship = Spaceship.from_index(root.tags.index) + if not spaceship then return end + if element.name == "list-zones-alphabetical" then + local playerdata = get_make_playerdata(player) + playerdata.zones_alphabetical = element.state + SpaceshipGUI.gui_update_destinations_list(player) + end +end +Event.addListener(defines.events.on_gui_checked_state_changed, SpaceshipGUI.on_gui_checked_state_changed) + +function SpaceshipGUI.gui_update_destinations_list(player) + + local playerdata = get_make_playerdata(player) + local root = player.gui.left[SpaceshipGUI.name_spaceship_gui_root] + if not (root and root.tags and root.tags.index) then return end + local spaceship = Spaceship.from_index(root.tags.index) + if not spaceship then return end + if root then + local panel = root["flow_destination"]["panel_destination"] + if panel then + + local filter = nil + if panel.filter_flow and panel.filter_flow.filter_list then + filter = string.trim(panel.filter_flow.filter_list.text) + if filter == "" then + filter = nil + end + end + + -- update the list + local destination_zone = Spaceship.get_destination_zone(spaceship) + if not destination_zone then destination_zone = Zone.from_zone_index(spaceship.zone_index) end + + local list, selected_index, values = Zone.dropdown_list_zone_destinations(spaceship.force_name, destination_zone, playerdata.zones_alphabetical, filter) + panel["spaceship-list-zones"].items = list + panel["spaceship-list-zones"].selected_index = selected_index or 1 + player_set_dropdown_values(player, "spaceship-list-zones", values) + end + end +end + +function SpaceshipGUI.on_gui_text_changed(event) + if not (event.element and event.element.valid) then return end + local element = event.element + local player = game.players[event.player_index] + local root = gui_element_or_parent(element, SpaceshipGUI.name_spaceship_gui_root) + if root then -- remote view + if element.name == "filter_list" then + SpaceshipGUI.gui_update_destinations_list(player) + else + if root.tags and root.tags.index then + local spaceship = Spaceship.from_index(root.tags.index) + if element.name == "normal-speed-textfield" then + local target = 0 + if element.text and element.text ~= "" then + target = tonumber(element.text) + end + if target > 0 then + spaceship.target_speed_normal = target + else + spaceship.target_speed_normal = nil + end + elseif element.name == "belt-speed-textfield" then + local target = 0 + if element.text and element.text ~= "" then + target = tonumber(element.text) + end + if target > 0 then + spaceship.target_speed_belt = target + else + spaceship.target_speed_belt = nil + end + elseif element.name == "field-speed-textfield" then + local target = 0 + if element.text and element.text ~= "" then + target = tonumber(element.text) + end + if target > 0 then + spaceship.target_speed_field = target + else + spaceship.target_speed_field = nil + end + end + end + end + end +end +Event.addListener(defines.events.on_gui_text_changed, SpaceshipGUI.on_gui_text_changed) + +--- Close the spaceship gui for a player +---@param player any +function SpaceshipGUI.gui_close(player) + if player.gui.left[SpaceshipGUI.name_spaceship_gui_root] then + player.gui.left[SpaceshipGUI.name_spaceship_gui_root].destroy() + end + Spaceship.stop_anchor_scouting(player) +end + +--- Opens the spaceship gui when a spaceship console is clicked +--- Closes the spaceship gui when another gui is opened +---@param event any +function SpaceshipGUI.on_gui_opened(event) + local player = game.players[event.player_index] + if event.entity and event.entity.valid and event.entity.name == Spaceship.name_spaceship_console then + SpaceshipGUI.gui_open(player, Spaceship.from_entity(event.entity)) + player.opened = nil -- don't display the vanilla GUI for an accumulator + else + -- when the crafting menu is opened we close the gui and then close the crafting menu + if player.gui.left[SpaceshipGUI.name_spaceship_gui_root] and player.opened_self then + player.opened = nil + end + SpaceshipGUI.gui_close(player) + end +end +Event.addListener(defines.events.on_gui_opened, SpaceshipGUI.on_gui_opened) + +return SpaceshipGUI diff --git a/space-exploration_0.5.80/space-exploration/scripts/spaceship-obstacles.lua b/space-exploration_0.5.80/space-exploration/scripts/spaceship-obstacles.lua new file mode 100644 index 0000000..14a29ba --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/spaceship-obstacles.lua @@ -0,0 +1,747 @@ +local SpaceshipObstacles = {} + +SpaceshipObstacles.particle_enemy_proxy = mod_prefix .. "spaceship-enemy-proxy" +SpaceshipObstacles.particle_travel_anchor = mod_prefix .. "spaceship-travel-anchor" +SpaceshipObstacles.particle_hp_multiplier = 300 +SpaceshipObstacles.bounding_box_buffer = 2 + +-- This dictates how much sideways velocity the asteroids get +-- (0.00 is purely vertical) +--SpaceshipObstacles.particle_orientation_variance = 0.00 +SpaceshipObstacles.particle_orientation_variance = 0.03 + +-- sprite_prefix: append variation index, used by rendering api +-- vehicle_name: the actual vehicle being used to move the asteroid +-- Speed values are not true speed, asteroid areas have a multiplier. +SpaceshipObstacles.particles = { + ["speck"] = { multiplier = 1/1000, speed = 1/100, min_speed = 0, max_effective_speed = 50, + sprite_name = mod_prefix.."spaceship-speck-graphic" + }, + ["small"] = { + multiplier = 1/8000, speed = 1/400, min_speed = 5, + variations = 16, scale = 0.25, max_effective_speed = 100, + sprite_prefix = mod_prefix .. "spaceship-obstacle-small-sprite-", + vehicle_name = mod_prefix .. "spaceship-obstacle-small-vehicle", + }, + ["medium"] = { + multiplier = 1/60000, speed = 1/450, min_speed = 25, destroys_floor = true, + variations = 16, scale = 0.5, max_effective_speed = 200, + sprite_prefix = mod_prefix .. "spaceship-obstacle-medium-sprite-", + vehicle_name = mod_prefix .. "spaceship-obstacle-medium-vehicle", + }, + ["large"] = { + multiplier = 1/3000000, speed = 1/500, min_speed = 100, min_size = 1000, destroys_floor = true, + variations = 16, scale = 1, + sprite_prefix = mod_prefix .. "spaceship-obstacle-large-sprite-", + vehicle_name = mod_prefix .. "spaceship-obstacle-large-vehicle", + }, +} + +SpaceshipObstacles.entity_particle_templates = { + ["ice"] = {speed = 1/300}, + ["small"] = { + speed = 1/300, + projectile_name = mod_prefix.."spaceship-obstacle-entity-small-projectile", + targetable_name = mod_prefix.."spaceship-obstacle-entity-small-targetable", + }, + ["large"] = { + speed = 1/600, + projectile_name = mod_prefix.."spaceship-obstacle-entity-large-projectile", + targetable_name = mod_prefix.."spaceship-obstacle-entity-large-targetable", + } +} + +-- names of the entities used to make the asteroids mineable when a ship is stopped +SpaceshipObstacles.mineable_particles = {} +for x=1,16 do + table.insert(SpaceshipObstacles.mineable_particles, mod_prefix .. "spaceship-obstacle-small-static-"..x) + table.insert(SpaceshipObstacles.mineable_particles, mod_prefix .. "spaceship-obstacle-medium-static-"..x) + table.insert(SpaceshipObstacles.mineable_particles, mod_prefix .. "spaceship-obstacle-large-static-"..x) +end + +SpaceshipObstacles.collision_slowdown_factor = 0.98 -- slow down the ship when an obstacle collides with it +SpaceshipObstacles.particle_spawn_range = 32 -- same as laser turret prepare range + +SpaceshipObstacles.all_targetables = {} +for _, particle in pairs(SpaceshipObstacles.particles) do + if particle.vehicle_name then + table.insert(SpaceshipObstacles.all_targetables, particle.vehicle_name) + end +end +SpaceshipObstacles.obstacle_damage_multipliers = { + ["electric-turret"] = 120, + ["ammo-turret"] = 12 +} + +SpaceshipObstacles.default_asteroid_density = 1 +SpaceshipObstacles.asteroid_density_by_zone_type = { + ["asteroid-belt"] = 2, + ["asteroid-field"] = 3 +} +SpaceshipObstacles.near_enough_by_zone_type = { + ["asteroid-belt"] = 300, + ["asteroid-field"] = 4500 +} + +function SpaceshipObstacles.particle_speed_factor(spaceship_speed) -- particle speed from spaceship speed + return spaceship_speed > 0 and math.pow(spaceship_speed / Spaceship.speed_taper, Spaceship.particle_speed_power) * Spaceship.speed_taper or 0 +end + +--- Gets the asteroid density caption for a spaceship +---@param spaceship Spaceship the spaceship data +function SpaceshipObstacles.get_asteroid_density_caption(spaceship) + if not spaceship.asteroid_density then return {"space-exploration.spaceship-asteroid-density-default"} end + if spaceship.asteroid_density < SpaceshipObstacles.asteroid_density_by_zone_type["asteroid-belt"] then return {"space-exploration.spaceship-asteroid-density-default"} end + if spaceship.asteroid_density < SpaceshipObstacles.asteroid_density_by_zone_type["asteroid-field"] then return {"space-exploration.spaceship-asteroid-density-belt"} end + return {"space-exploration.spaceship-asteroid-density-field"} +end + +--- Gets the asteroid density for a spaceship +---@param spaceship Spaceship the spaceship data +function SpaceshipObstacles.get_asteroid_density(spaceship) + local density = SpaceshipObstacles.default_asteroid_density + local zone = Zone.find_nearest_zone( + spaceship.space_distortion, + spaceship.stellar_position, + spaceship.star_gravity_well, + spaceship.planet_gravity_well + ) + local delta_v = Zone.get_travel_delta_v_sub(spaceship, zone) + if zone and zone.type and SpaceshipObstacles.asteroid_density_by_zone_type[zone.type] and delta_v < SpaceshipObstacles.near_enough_by_zone_type[zone.type] then + density = SpaceshipObstacles.asteroid_density_by_zone_type[zone.type] + end + return density +end + +--[[ +Destroys all particles on a surface +]] +function SpaceshipObstacles.destroy(spaceship, surface) + if spaceship.particle_object_ids then + for _, ids in pairs(spaceship.particle_object_ids) do + for _, id in pairs(ids) do + rendering.destroy(id) + end + end + spaceship.particle_object_ids = nil + end + + local destroy_names = {} + table.insert(destroy_names, SpaceshipObstacles.particle_travel_anchor) + for _, particle in pairs(SpaceshipObstacles.particles) do + if particle.vehicle_name then + table.insert(destroy_names, particle.vehicle_name) + end + end + for _, mineable_particle in pairs(SpaceshipObstacles.mineable_particles) do + table.insert(destroy_names, mineable_particle) + end + local destroy_entities = surface.find_entities_filtered{name = destroy_names} + for _, entity in pairs(destroy_entities) do + -- this does not raise any event! + -- it will silently destroy the entity + -- if any mod was tracking the space rocks, it will get borked by this + -- why do potentially other-mod breaking thing? + -- we do this for performance reasons because raising events is expensive + entity.destroy() + end + for _, proxy in pairs(surface.find_entities_filtered{name = SpaceshipObstacles.particle_enemy_proxy}) do + util.safe_destroy(proxy) + end +end + +--[[ +Travel anchor particles are used for visual only particles that move exactly downward. +One particle may have many sprites attached to it. +As such, travel anchor particles are reused based on speed and position along the y-axis. +This will get the travel anchor particle for a speed and position, or create it if it does not exist. +]] +function SpaceshipObstacles.get_make_travel_anchor_particle(spaceship, surface, y, particle_template) + local speed = particle_template.speed + if not (spaceship.travel_anchor_particles + and spaceship.travel_anchor_particles[speed] + and spaceship.travel_anchor_particles[speed].valid + and y + 10 > spaceship.travel_anchor_particles[speed].position.y) then + spaceship.travel_anchor_particles = spaceship.travel_anchor_particles or {} + spaceship.travel_anchor_particles[speed] = surface.create_entity({ + name = SpaceshipObstacles.particle_travel_anchor, + position = { + x = spaceship.known_bounds.left_top.x - SpaceshipObstacles.particle_spawn_range, + y = spaceship.known_bounds.left_top.y - SpaceshipObstacles.particle_spawn_range - 10 - 10 + }, + direction = defines.direction.south + }) + + table.insert(spaceship.particles, { + valid = true, + vehicle = spaceship.travel_anchor_particles[speed], + speed = speed, + }) + end + return spaceship.travel_anchor_particles[speed] +end + +--[[ +Computes the number of asteroids to spawn for a certain template. +The number of asteroids to spawn is based on the spaceship's speed and the time passed. +]] +function SpaceshipObstacles.get_num_particles_to_spawn(spaceship, time_passed, particle_template) + local density = spaceship.asteroid_density or SpaceshipObstacles.default_asteroid_density + local effective_speed = spaceship.speed * density + if particle_template.max_effective_speed then + effective_speed = math.min(effective_speed, particle_template.max_effective_speed) + end + local spawn_particles_quota = (Spaceship.minimum_mass + spaceship.integrity_stress) * effective_speed / 60 * particle_template.multiplier * time_passed + local spawn_particles_whole = math.floor(spawn_particles_quota) + + -- we can only ever spawn a whole number of particles so use math.random() to average out the decimal part of spawn_particles_quota + local spawn_particles_chance = spawn_particles_quota - spawn_particles_whole + if math.random() <= spawn_particles_chance then + spawn_particles_whole = spawn_particles_whole + 1 + end + + return spawn_particles_whole +end + +--[[ +Determines if a surface has no players on it. Useful for optimizing away visual particles if no one can see them. +]] +function SpaceshipObstacles.surface_has_no_players(surface) + local no_players = true + for _, player in pairs(game.players) do + if player.valid and player.surface.index == surface.index then + no_players = false + end + end + return no_players +end + +--[[ +Spawns a visual only particle. +These particles are always just sprites attached to a travel anchor particle by LuaRendering.draw_sprite +]] +function SpaceshipObstacles.spawn_particles_visual_only(spaceship, surface, time_passed, particle_template) + local spawn_particles_whole = SpaceshipObstacles.get_num_particles_to_spawn(spaceship, time_passed, particle_template) + if spawn_particles_whole > 0 then + local speed_factor = SpaceshipObstacles.particle_speed_factor(spaceship.speed) + local x_min = spaceship.known_bounds.left_top.x - SpaceshipObstacles.particle_spawn_range + local x_max = spaceship.known_bounds.right_bottom.x + SpaceshipObstacles.particle_spawn_range + local spawn_y = spaceship.known_bounds.left_top.y - SpaceshipObstacles.particle_spawn_range - 20 + local travel_anchor_particle = SpaceshipObstacles.get_make_travel_anchor_particle(spaceship, surface, spawn_y, particle_template) + spaceship.particle_object_ids = spaceship.particle_object_ids or {} + spaceship.particle_object_ids[travel_anchor_particle.unit_number] = spaceship.particle_object_ids[travel_anchor_particle.unit_number] or {} + travel_anchor_particle.speed = particle_template.speed * spaceship.speed + local x_delta = x_max - x_min + local y_factor = time_passed * speed_factor * particle_template.speed + for i = 1, spawn_particles_whole do + local spawn_x = x_min + math.random() * x_delta + local this_spawn_y = spawn_y - math.random() * y_factor + local object_id = rendering.draw_sprite({ + surface = surface, + sprite = particle_template.sprite_name, + target = travel_anchor_particle, + target_offset = { + x = spawn_x - travel_anchor_particle.position.x, + y = this_spawn_y - travel_anchor_particle.position.y + } + }) + table.insert(spaceship.particle_object_ids[travel_anchor_particle.unit_number], object_id) + end + end +end + +--[[ +Spawns a non-visual only particle. +Asteroids are invisible vehicles, with an invisible enemy character riding them that have a graphic attached with LuaRendering.draw_sprite +]] +function SpaceshipObstacles.spawn_particles_non_visual(spaceship, surface, time_passed, particle_template, no_players) + local spawn_particles_whole = SpaceshipObstacles.get_num_particles_to_spawn(spaceship, time_passed, particle_template) + if spawn_particles_whole > 0 then + local speed_factor = SpaceshipObstacles.particle_speed_factor(spaceship.speed) + local x_min = spaceship.known_bounds.left_top.x - SpaceshipObstacles.particle_spawn_range + local x_max = spaceship.known_bounds.right_bottom.x + SpaceshipObstacles.particle_spawn_range + local spawn_y = spaceship.known_bounds.left_top.y - SpaceshipObstacles.particle_spawn_range - 20 + -- aabb cannot be exactly the ship bounds since asteroids are not points (they have a rectangular bounding box) + local aabb = { + min_x = spaceship.known_bounds.left_top.x - SpaceshipObstacles.bounding_box_buffer, + max_x = spaceship.known_bounds.right_bottom.x + SpaceshipObstacles.bounding_box_buffer, + min_y = spaceship.known_bounds.left_top.y - SpaceshipObstacles.bounding_box_buffer, + max_y = spaceship.known_bounds.right_bottom.y + SpaceshipObstacles.bounding_box_buffer + } + local speed = particle_template.speed * spaceship.speed + local x_delta = x_max - x_min + local y_factor = time_passed * speed_factor * particle_template.speed + for i = 1, spawn_particles_whole do + local spawn_x = x_min + math.random() * x_delta + local this_spawn_y = spawn_y - math.random() * y_factor + local spawn_orientation = 0.5 - SpaceshipObstacles.particle_orientation_variance * (math.random() - math.random()) + local intersects = util.intersects_ray_aabb({x=spawn_x,y=spawn_y}, spawn_orientation, aabb) + if not no_players or intersects then + local particle = table.deepcopy(particle_template) + particle.valid = true + particle.variation = math.random(particle.variations) + particle.vehicle = surface.create_entity{ + name = particle_template.vehicle_name, + position = {x = spawn_x, y = this_spawn_y }, + create_build_effect_smoke = false, + } + particle.vehicle.orientation = spawn_orientation + -- smart turrets only attack asteroids that will hit the ship + if intersects then + particle.enemy_proxy = surface.create_entity{ + name = SpaceshipObstacles.particle_enemy_proxy, + position = {x = spawn_x, y = this_spawn_y }, + } + particle.vehicle.set_driver(particle.enemy_proxy) + end + rendering.draw_sprite{ + sprite = particle.sprite_prefix..particle.variation, + surface = surface, + target = particle.vehicle, + scale = particle.scale + } + particle.vehicle.speed = speed + table.insert(spaceship.particles, particle) + end + end + end +end + +--[[ +Spawns particles from a particle_template. +]] +function SpaceshipObstacles.spawn_particles_speed_size(spaceship, surface, time_passed, particle_template) + -- only spawn the asteroids if the conditions on their template are met + if spaceship.speed > (particle_template.min_speed or 0) + and spaceship.integrity_stress > (particle_template.min_size or 0) then + local no_players = SpaceshipObstacles.surface_has_no_players(surface) + if particle_template.sprite_name then + -- visual particles are only spawned if players are on that surface + if not no_players then + SpaceshipObstacles.spawn_particles_visual_only(spaceship, surface, time_passed, particle_template) + end + else + SpaceshipObstacles.spawn_particles_non_visual(spaceship, surface, time_passed, particle_template, no_players) + end + end +end + +--[[ +Resolves a collision between a particle and an obstacle it collided with. +Either the particle or the obstacle will survive, not both. +If the particle has enough effective health to kill the obstacle, the obstacle dies and the particle loses hp +Otherwise, the obstacle has enough effective health to kill the particle, so the particle dies and the obstacle loses hp +]] +function SpaceshipObstacles.smash_particle_to_entity(particle_entity, other_entity) + local particle_effective_health = particle_entity.health / SpaceshipObstacles.particle_hp_multiplier + if particle_effective_health > other_entity.health then + -- the particle "wins" the collision + local other_effective_health = other_entity.health * SpaceshipObstacles.particle_hp_multiplier + particle_entity.health = particle_entity.health - other_effective_health + other_entity.die() + else + -- the obstacle "wins" the collision + other_entity.health = other_entity.health - particle_effective_health + if particle_entity.type == "car" and particle_entity.get_driver() then + particle_entity.get_driver().destroy() + end + particle_entity.die() + end +end + +--[[ +Listen to the event when an entity is damaged. Necessary in order to modify the damage done to/from particles +]] +function SpaceshipObstacles.on_entity_damaged(event) + --[[ + In a vehicle collision: + the struck object takes damage first with the vehicle as the cause. + Then the striking vehile takes damage with no cause. (may be the crash trigger damage?) + ]] + if event.entity and event.entity.valid then + if Util.table_contains(SpaceshipObstacles.all_targetables, event.entity.name) then + if event.cause and event.cause.valid then + if SpaceshipObstacles.obstacle_damage_multipliers[event.cause.type] then -- take more damage from certain sources. + event.entity.health = event.entity.health - event.final_damage_amount * (SpaceshipObstacles.obstacle_damage_multipliers[event.cause.type] - 1) + end + end + event.entity.surface.create_trivial_smoke{name = "smoke", position = event.entity.position } + elseif event.cause and event.cause.valid and Util.table_contains(SpaceshipObstacles.all_targetables, event.cause.name) then + if event.damage_type.name == "impact" then + if event.entity.name ~= "shield-projector-barrier" then + local spaceship = Spaceship.from_own_surface_index(event.entity.surface.index) + if spaceship then spaceship.speed = spaceship.speed * SpaceshipObstacles.collision_slowdown_factor end + end + SpaceshipObstacles.smash_particle_to_entity(event.cause, event.entity) + if event.cause.valid then + global.spaceship_projectile_speeds = global.spaceship_projectile_speeds or {} + table.insert(global.spaceship_projectile_speeds, {entity = event.cause, speed = event.cause.speed}) + end + end + end + end +end +Event.addListener(defines.events.on_entity_damaged, SpaceshipObstacles.on_entity_damaged) + +function SpaceshipObstacles.tick_projectile_speeds() + if global.spaceship_projectile_speeds then + for _, ps in pairs(global.spaceship_projectile_speeds) do + if ps.entity and ps.entity.valid and ps.entity.type == "car" then + ps.entity.speed = ps.speed + end + end + global.spaceship_projectile_speeds = nil + end +end + +--[[ +Listen for when vehicles are destroyed so we can destroy their dummy drivers. +]] +function SpaceshipObstacles.on_removed_entity(event) + if event.entity and event.entity.valid then + if event.entity.type == "car" and Util.table_contains(SpaceshipObstacles.all_targetables, event.entity.name) then + local driver = event.entity.get_driver() + if driver then driver.destroy() end + end + end +end +Event.addListener(defines.events.on_entity_died, SpaceshipObstacles.on_removed_entity) +Event.addListener(defines.events.on_robot_mined_entity, SpaceshipObstacles.on_removed_entity) +Event.addListener(defines.events.on_player_mined_entity, SpaceshipObstacles.on_removed_entity) +Event.addListener(defines.events.script_raised_destroy, SpaceshipObstacles.on_removed_entity) + +--- Adds an entity to the pool of moveable entities. +--- Moveable entities act like obstacles in that: +--- 1. they move downwards +--- 2. they are targetted by turrets +--- 3. they get destroyed by shields +--- They are dissimilar in that: +--- 1. they don't damage anything on the ship +--- 2. they suck for UPS +---@param spaceship any +---@param entity any +function SpaceshipObstacles.add_moveable_entity(spaceship, entity, name) + if spaceship and entity then + spaceship.entity_particles = spaceship.entity_particles or {} + local entity_particle = table.deepcopy(SpaceshipObstacles.entity_particle_templates[name]) + entity_particle.graphic = entity + entity_particle.valid = true + table.insert(spaceship.entity_particles, entity_particle) + end +end + +--- Debris needs to be moved. This trigger listens for when that is created on a spaceship surface, +--- and if so, puts it in the list of things that need to move. +---@param event any +function SpaceshipObstacles.on_trigger_created_entity(event) + if event.entity and event.entity.valid and event.entity.name == mod_prefix.."trigger-movable-debris" then + local surface = event.entity.surface + local spaceship = Spaceship.from_own_surface_index(surface.index) + if spaceship then + local entities = surface.find_entities_filtered{type = "simple-entity", area = Util.position_to_area(event.entity.position, 0.5)} + for _, entity in pairs(entities) do + if string.find(entity.name, "meteor") then + SpaceshipObstacles.add_moveable_entity(spaceship, entity, "large") + else + SpaceshipObstacles.add_moveable_entity(spaceship, entity, "small") + end + end + end + end +end +Event.addListener(defines.events.on_trigger_created_entity, SpaceshipObstacles.on_trigger_created_entity) + +--- Moves the moveable entities. Handles destroying them safely if one of the component entities is destroyed or if they get offscreen. +---@param spaceship Spaceship spaceship data +---@param surface LuaSurface spaceship surface +function SpaceshipObstacles.tick_entity_obstacles(spaceship, surface) + spaceship.entity_particles = spaceship.entity_particles or {} + local speed_factor = SpaceshipObstacles.particle_speed_factor(spaceship.speed) + local upper_bound = spaceship.known_bounds.right_bottom.y + SpaceshipObstacles.particle_spawn_range + 32 + for _, entity_particle in pairs(spaceship.entity_particles) do + if not (entity_particle.graphic and entity_particle.graphic.valid) then -- killed or mined + entity_particle.valid = false + elseif entity_particle.graphic.position.y > upper_bound then -- out of range + entity_particle.valid = false + elseif entity_particle.projectile and entity_particle.projectile.valid == false then -- projectile was there but detonated + entity_particle.valid = false + elseif entity_particle.targetable and entity_particle.targetable.valid == false then -- projectile detonated + entity_particle.valid = false + end + + if not entity_particle.valid then + -- destroy invalid entity particles + if entity_particle.graphic and entity_particle.graphic.valid then + entity_particle.graphic.destroy() + entity_particle.graphic = nil + end + if entity_particle.projectile and entity_particle.projectile.valid then + entity_particle.projectile.destroy() + entity_particle.projectile = nil + end + if entity_particle.targetable and entity_particle.targetable.valid then + entity_particle.targetable.destroy() + entity_particle.targetable = nil + end + spaceship.entity_particles[_] = nil + else + -- update the speed and move valid entity particles + local position = entity_particle.graphic.position + position.y = position.y + entity_particle.speed * speed_factor + + if spaceship.speed > 0.001 then + entity_particle.graphic.teleport(position) + + if entity_particle.projectile then + entity_particle.projectile.speed = entity_particle.speed * speed_factor + elseif entity_particle.projectile_name then + entity_particle.projectile = surface.create_entity{ + name = entity_particle.projectile_name, + -- particle would overtake the rest if we didn't subtract the current vector + position = util.vectors_add(position, {x = 0, y = -entity_particle.speed * speed_factor}), + speed = entity_particle.speed * speed_factor, + target = {x = position.x, y = position.y + 100}, + force="enemy" + } + end + if entity_particle.targetable then + entity_particle.targetable.teleport(position) + elseif entity_particle.targetable_name then + entity_particle.targetable = surface.create_entity{ + name = entity_particle.targetable_name, + position = position, + target = {x = position.x, y = position.y + 100}, + force="enemy" + } + end + else + if entity_particle.projectile and entity_particle.projectile.valid then + entity_particle.projectile.destroy() + entity_particle.projectile = nil + end + if entity_particle.targetable and entity_particle.targetable.valid then + entity_particle.targetable.destroy() + entity_particle.targetable = nil + end + end + end + end +end + +function SpaceshipObstacles.tick_obstacles(spaceship, surface, time_passed) + spaceship.particles = spaceship.particles or {} + spaceship.mineables = spaceship.mineables or {} + + -- spawn particles of each template + for _, particle_template in pairs(SpaceshipObstacles.particles) do + SpaceshipObstacles.spawn_particles_speed_size(spaceship, surface, time_passed, particle_template) + end + + -- update particles + if spaceship.particles then + local speed_factor = SpaceshipObstacles.particle_speed_factor(spaceship.speed) + local upper_bound = spaceship.known_bounds.right_bottom.y + SpaceshipObstacles.particle_spawn_range + 32 + for _, particle in pairs(spaceship.particles) do + if not (particle.vehicle and particle.vehicle.valid + and particle.vehicle.position.y < upper_bound) then -- the particle is in bounds + particle.valid = false + end + + if not particle.valid then + if particle.vehicle and particle.vehicle.valid then + particle.vehicle.destroy() + particle.vehicle = nil + end + if particle.enemy_proxy and particle.enemy_proxy.valid then + particle.enemy_proxy.destroy() + particle.enemy_proxy = nil + end + spaceship.particles[_] = nil + end + + if particle and particle.valid then -- particle is still valid + particle.vehicle.speed = particle.speed * speed_factor + + local targetable = particle.vehicle + local position = targetable.position + + if targetable and particle.destroys_floor then + -- destroy floor + local x = math.floor(position.x) + local y = math.floor(position.y) + if spaceship.known_tiles[x] and spaceship.known_tiles[x][y] then + + spaceship.known_tiles[x][y] = nil + + local tile = surface.get_tile(x, y) + local tile_name = tile.name + if tile_name ~= name_space_tile then + + targetable.damage(50, "neutral", "explosion") -- damage the particle + + local entities = surface.find_entities_filtered{ -- destroy entities on the floor + area = util.tile_to_area({x=x,y=y}), + collision_mask = { + global.named_collision_masks.space_collision_layer, + "object-layer", + "resource-layer" + } + } + for _, entity in pairs(entities) do + if entity and entity.valid then entity.die() end + end + + surface.set_tiles( + {{name=name_space_tile, position = {x,y}}}, + false, -- corect tiles + true, -- remove_colliding_entities + true, -- remove_colliding_decoratives + true -- raise_event + ) + + if Util.table_contains(Spaceship.names_spaceship_floors, tile_name) then + -- make blueprint for the tile. + surface.create_entity{name = "tile-ghost", inner_name = tile_name, force = spaceship.force_name, position = {x=x,y=y}} + end + + Spaceship.start_integrity_check(spaceship) + end + end + end + end + end + end + + -- swap vehicles with mineables and vice-versa when the spaceship changes between stopped and moving + SpaceshipObstacles.maybe_swap_vehicles_mineables(spaceship, surface) +end + +--[[ +Converts name + variation from vehicle asteroids to mineable asteroids +]] +function SpaceshipObstacles.static_name_for_vehicle_name_and_variation(vehicle_name, variation) + if vehicle_name == mod_prefix .. "spaceship-obstacle-small-vehicle" then + return mod_prefix .. "spaceship-obstacle-small-static-"..variation + elseif vehicle_name == mod_prefix .. "spaceship-obstacle-medium-vehicle" then + return mod_prefix .. "spaceship-obstacle-medium-static-"..variation + elseif vehicle_name == mod_prefix .. "spaceship-obstacle-large-vehicle" then + return mod_prefix .. "spaceship-obstacle-large-static-"..variation + else + return nil + end +end + +--[[ +Converts name + variation from mineable asteroids to vehicle asteroids +]] +function SpaceshipObstacles.particle_template_for_static_name(static_name, variation) + if string.find(static_name,"spaceship-obstacle-small-static-", 1, true) then + return SpaceshipObstacles.particles["small"], variation + elseif string.find(static_name,"spaceship-obstacle-medium-static-", 1, true) then + return SpaceshipObstacles.particles["medium"], variation + elseif string.find(static_name,"spaceship-obstacle-large-static-", 1, true) then + return SpaceshipObstacles.particles["large"], variation + else + return nil, 1 + end +end + +--[[ +Tries to swap vehicles asteroids with mineable asteroids when the spaceship's speed goes from moving to stopped +Tries to swap mineable asteroids with vehicle asteroids when the spaceship's speed goes from stopped to moving +]] +function SpaceshipObstacles.maybe_swap_vehicles_mineables(spaceship, surface) + if spaceship.speed and spaceship.last_speed then + if spaceship.speed == 0 and spaceship.speed ~= spaceship.last_speed then + -- spaceship came to a stop, replace vehicles with mineables + for _, particle in pairs(spaceship.particles) do + if particle.valid and particle.vehicle.valid then + -- make the mineable + local mineable_name = SpaceshipObstacles.static_name_for_vehicle_name_and_variation(particle.vehicle.name, particle.variation) + if mineable_name then + local mineable = { + mineable = surface.create_entity{ + name=mineable_name, + position=particle.vehicle.position, + force="enemy" + }, + variation=particle.variation + } + table.insert(spaceship.mineables, mineable) + end + -- destroy the vehicle + if particle.vehicle and particle.vehicle.valid then + particle.vehicle.destroy() + particle.vehicle = nil + end + if particle.enemy_proxy and particle.enemy_proxy.valid then + particle.enemy_proxy.destroy() + particle.enemy_proxy = nil + end + spaceship.particles[_] = nil + end + end + elseif spaceship.last_speed == 0 and spaceship.speed ~= spaceship.last_speed then + -- spaceship is starting moving, replaces mineables with vehicles + local aabb = { + min_x = spaceship.known_bounds.left_top.x, + max_x = spaceship.known_bounds.right_bottom.x, + min_y = spaceship.known_bounds.left_top.y, + max_y = spaceship.known_bounds.right_bottom.y + } + local no_players = true + for _, player in pairs(game.players) do + if player.valid and player.surface.index == surface.index then + no_players = false + end + end + for _, mineable in pairs(spaceship.mineables) do + if mineable.mineable and mineable.mineable.valid then + -- make the vehicle + local particle_template, variation = SpaceshipObstacles.particle_template_for_static_name(mineable.mineable.name, mineable.variation) + if particle_template then + local speed = particle_template.speed * spaceship.speed + local spawn_orientation = 0.5 - SpaceshipObstacles.particle_orientation_variance * (math.random() - math.random()) + local intersects = util.intersects_ray_aabb({x=mineable.mineable.position.x,y=mineable.mineable.position.y}, spawn_orientation, aabb) + if not no_players or intersects then + local particle = table.deepcopy(particle_template) + particle.valid = true + particle.variation = variation + particle.vehicle = surface.create_entity{ + name = particle_template.vehicle_name, + position = {x = mineable.mineable.position.x, y = mineable.mineable.position.y }, + create_build_effect_smoke = false, + } + particle.vehicle.orientation = spawn_orientation + -- smart turrets only attack asteroids that will hit the ship + if intersects then + particle.enemy_proxy = surface.create_entity{ + name = SpaceshipObstacles.particle_enemy_proxy, + position = {x = mineable.mineable.position.x, y = mineable.mineable.position.y }, + } + particle.vehicle.set_driver(particle.enemy_proxy) + end + rendering.draw_sprite{ + sprite = particle.sprite_prefix..particle.variation, + surface = surface, + target = particle.vehicle, + scale = particle.scale + } + particle.vehicle.speed = speed + table.insert(spaceship.particles, particle) + end + end + -- destroy the mineable + if mineable.mineable and mineable.mineable.valid then + mineable.mineable.destroy() + end + spaceship.mineables[_] = nil + end + end + end + end + + spaceship.last_speed = spaceship.speed +end + +return SpaceshipObstacles diff --git a/space-exploration_0.5.80/space-exploration/scripts/spaceship.lua b/space-exploration_0.5.80/space-exploration/scripts/spaceship.lua new file mode 100644 index 0000000..1e15def --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/spaceship.lua @@ -0,0 +1,2635 @@ +local Spaceship = {} + +Spaceship.names_tech_integrity = { + {name = mod_prefix.."spaceship-integrity", bonus_per_level = 100, infinite = false}, + {name = mod_prefix.."factory-spaceship", bonus_per_level = 500, infinite = true} +} +Spaceship.integrity_base = 300 + +Spaceship.name_spaceship_console = mod_prefix .. "spaceship-console" +Spaceship.name_spaceship_console_output = mod_prefix .. "spaceship-console-output" +Spaceship.console_output_offset = {x = 1.5, y = -1} + +Spaceship.engine_efficiency_blocked = 0.60 +Spaceship.engine_efficiency_unblocked = 1 +Spaceship.engine_efficiency_unblocked_taper = 20 +Spaceship.engine_efficiency_side = 0.01 +Spaceship.engines = { + [mod_prefix .. "spaceship-rocket-engine"] = { name = mod_prefix .. "spaceship-rocket-engine", thrust = 100 / 5, max_energy = 1837, smoke_trigger = mod_prefix .. "spaceship-engine-smoke" }, + [mod_prefix .. "spaceship-ion-engine"] = { name = mod_prefix .. "spaceship-ion-engine", thrust = 250 / 5, max_energy = 183700, smoke_trigger = mod_prefix .. "spaceship-engine-smoke" }, + [mod_prefix .. "spaceship-antimatter-engine"]= { name = mod_prefix .. "spaceship-antimatter-engine", thrust = 500 / 5, max_energy = 18370, smoke_trigger = mod_prefix .. "spaceship-engine-smoke" } +} +Spaceship.names_engines = {} +Spaceship.names_smoke_trigger = {} + +Spaceship.names_booster_tanks = { + mod_prefix .. "spaceship-rocket-booster-tank", + mod_prefix .. "spaceship-ion-booster-tank", + mod_prefix .. "spaceship-antimatter-booster-tank" +} +Spaceship.ion_stream_energy = 4000000 -- 2x rocket fuel + +Spaceship.names_spaceship_floors = {mod_prefix .. "spaceship-floor"} +Spaceship.names_spaceship_walls = {mod_prefix .. "spaceship-wall"} +Spaceship.names_spaceship_gates = {mod_prefix .. "spaceship-gate"} +Spaceship.names_spaceship_bulkheads = { + mod_prefix .. "spaceship-wall", + mod_prefix .. "spaceship-gate", + SpaceshipClamp.name_spaceship_clamp_keep, +} +for _, engine in pairs(Spaceship.engines) do + table.insert(Spaceship.names_engines, engine.name) + table.insert(Spaceship.names_spaceship_bulkheads, engine.name) + if engine.smoke_trigger then + table.insert(Spaceship.names_smoke_trigger, engine.smoke_trigger) + end +end + +Spaceship.integrity_affecting_types = { + {type = "linked-container", integrity_stress_container = 1000}, +} +Spaceship.integrity_affecting_names = { + {name = mod_prefix.."nexus", integrity_stress_container = 2000}, + {mod = "Krastorio2", name = "kr-antimatter-reactor", integrity_stress_structure = 100, integrity_stress_container = 100, max_speed_multiplier = 0.5}, +} + +Spaceship.signal_for_own_spaceship_id = {type = "item", name = Spaceship.name_spaceship_console} +Spaceship.signal_for_destination_spaceship = {type = "virtual", name = mod_prefix.."spaceship"} +Spaceship.signal_for_speed = {type = "virtual", name = "signal-speed"} +Spaceship.signal_for_distance = {type = "virtual", name = "signal-distance"} +Spaceship.signal_for_launch = {type = "virtual", name = mod_prefix.."spaceship-launch"} +Spaceship.signal_for_anchor_using_left = {type = "virtual", name = mod_prefix.."anchor-using-left-clamp"} +Spaceship.signal_for_anchor_using_right = {type = "virtual", name = mod_prefix.."anchor-using-right-clamp"} +Spaceship.signal_for_anchor_to_left = {type = "virtual", name = mod_prefix.."anchor-to-left-clamp"} +Spaceship.signal_for_anchor_to_right = {type = "virtual", name = mod_prefix.."anchor-to-right-clamp"} + +Spaceship.energy_per_launch_integrity_delta_v = 135 * 1000 +Spaceship.tick_interval_density = 60 -- must coincide with %60 +Spaceship.tick_interval_move = 20 -- must coincide with %60 +Spaceship.tick_interval_anchor = 5 -- must coincide with %60 +Spaceship.tick_interval_gui = 5 -- must coincide with %60 + +Spaceship.tick_max_await = 60 * 10 -- 10 seconds + +Spaceship.types_to_restore = {-- after surface change/area clone + "inserter", + "pump", + --"transport-belt" -- entity.active does not work on belts +} + +-- Note: production machines should NOT be included as some are supposed to be disabled on specific surfaces. +Spaceship.time_to_restore = 1 + +---@class Spaceship All data necessary to maintain the state of a spaceship + +Spaceship.particle_speed_power = 0.75 -- 0.5 would be sqrt, 0 is static, 1 is linear with speed. +Spaceship.space_drag = 0.00135 +Spaceship.minimum_impulse = 1/100 +Spaceship.minimum_mass = 100 +Spaceship.speed_taper = 250 +Spaceship.travel_speed_multiplier = 1/200 +Spaceship.integrity_pulse_interval = 60 * 60 * 10 +Spaceship.tile_status = {} + +--[[ +change to: +{ + outer = 0 or 1. outer skin of tiles including diagonals + floor = 0 or 1, has floor otherwise exterior + exposed = 0 for contained, or higher for any tile exposed to space + wall = 0 or 1, walls only + bulkhead = 0 or 1, any bulkhead + connection nil or distance to console. +} + +]]-- + +Spaceship.tile_status.exterior = 1 -- any tile not with flooring (without bulkhead) +Spaceship.tile_status.wall_exterior = 2 -- bulkeahd outside of flooring +Spaceship.tile_status.bulkhead_exterior = 3 -- bulkeahd outside of flooring +Spaceship.tile_status.floor = 4 -- unknown floor +Spaceship.tile_status.wall = 5 -- unknown bulkhead +Spaceship.tile_status.bulkhead = 6 -- unknown bulkhead +Spaceship.tile_status.floor_exterior = 7 -- outside floor +Spaceship.tile_status.floor_interior = 8 -- contained floor +Spaceship.tile_status.floor_console_disconnected = 9 -- disconnected floor +Spaceship.tile_status.wall_console_disconnected = 10 -- disconnected bulkhead +Spaceship.tile_status.bulkhead_console_disconnected = 11 -- disconnected bulkhead +Spaceship.tile_status.floor_console_connected = 12 -- connected floor +Spaceship.tile_status.wall_console_connected = 13 -- connected bulkhead +Spaceship.tile_status.bulkhead_console_connected = 14 -- connected bulkhead + + + + --[[ tile statuses + 1 = exterior + 2 = floor_pending (on the edge of checking, used for next tick) + 3 = unknown floor (exists but unknown containment statis) + 4 = exterior floor + 5 = bulkhead (floor with wall or gate) + 6 = interior (contained) floor + ]]-- + +--[[ +console sends out a pule over all connected spaceship tiles (with a max based on tech) +then consider all tiles with wall or gate. +divide tiles into groups, ones that touch the outside are not part of the ship. +]]-- + +Spaceship.names = { + "Abaddon", "Ackbar", "Aegis", "Albatross", "Alchemist", "Albion", "Alexander", + "Angler", "Apparition", "ArchAngel", "Assassin", "Avenger", "Axe", + "Bade", "Bardiche", "Battleth", "Blackbird", "Bounty Hunter", "Breaker", + "Brigandine","Bullfinch", "Buzzard", + "Cartographer", "Catface", "Calamari", "Canary", "Caravel", "Carrak", "Citadel", "Clockwerk", + "Chimera", "Coot", "Cormorant", "Crane", "Crossbill", "Crow", "Cuckoo", + "Darkstar", "Dauntless", "Desby", "Dragon", "Drake", "Dream", "Doombringer", + "Dolphin", "Devourer", "Dunn", + "Eagle", "Earthshaker", "Earl Grey", "Egret", "Eider", "Ember", "Enigma", "Eris", "Excalibur", + "Falcon", "Falx", "Feral Pigeon", "Firecrest", "Firefly", "Flying Duckman", + "Fountain", "Fulmar", + "Gadwall", "Gannet", "Garganey", "Gigantosaurus", "Ghast", "Ghoul", "Ghost", + "Glaive", "Goldcrest", "Goldeneye", "Goldfinch", "Goosander", "Goose", + "Goshawk", "Grasshopper", "Greenfinch", "Griffon", "Grouse", "Guillemot", + "Halberd", "Hammer", "Hammerhead", "Harrier", "Hawk", "Harking", "Heron", "Hippogryph", "Honeybadger", "Honeybear", + "Iron Cordon", "Ingot", "Intrepid", "Invoker", "Isabella", + "Jack Snipe", "Jackdaw", "Jay", + "Kamsta", "Katherine", "Kestrel", "Kingfisher", "Kite", "Knight", "Kraken", + "Lapwing", "Lance", "Lancer", "Lick", "Linnet", "Lucas", + "Magi", "Magpie", "Mallard", "Mangonel", "Medusa", "Memento", "Merlin", + "Mistress", "Mocking Jay", "Monstrosity", "Moorhen", "Musk", + "Naga", "Narwhal", "Nebulon", "Nemesis", "Newton", "Nexela", "Nial", "Nicholas", + "Nightjar", "Nissa", "Nightingale", "Night Stalker", + "Oracle", "Orca", "Ostricth", "Outrider", "Owl", + "Partridge", "Pangolin", "Penguin", "Peregrine", "Petrel", "Phantom", + "Pheasant", "Phoenix", "Piccard", "Pintail", "Pioneer", + "Pipit", "Plover", "Prophet", "Prowler", "Pochard", "Puffin", + "Quail", + "Radiance", "Raptor", "Raven", "Razor", "Razorbill", "Red Kite", "Redshank", + "Redstart", "Redwing", "Requiem", + "Riccardo", "Robin", "Roc", "Rook", "Rossi", "Rogue", "Ruff", + "Sanderling", "Sawfish", "Scythe", "Seraph", "Serenity", "Sickle", "Shadow", + "Shag", "Sharknado", "Shelduck", "Sherrif", "Shoveler", "Sin Eater", "Siren", + "Siskin", "Skylark", "Skyshark", "Skywalker", "Skywrath", "Smew", "Snek", + "Snipe", "Sparrowhawk", "Spear", "Spectre", "Spinosaur", "Spynx", + "Starchaser", "Starling", "Stonechat", "Swallow", "Swan", "Swift", "Swordfish", + "Tachyon", "Tali", "Tantive", "Teal", "Templar", "Terrorblade", "Tesla", "Thanatos", + "Throne", "Thrush", "Tigress", "Tin Can", "Titan", "Trebuchet", + "Trimaran", "Turnstone", "Turing", "Tusk", "Twite", + "Ursa", "Undertaker", "Undying Dodo", "Underlord", + "Vengeance", "Viper", "Virtue", "Visage", "Void Hunter", "Volt", "Vulture", + "Wagtail", "Warbird", "Warbler", "Warcry", "Warden", "Warlock", "Warlord", "Warrunner", + "Waxwing", "Weaver", "Wheatear", "Whimbrel", "Whinchat", "Whitestar", + "Wigeon", "Windranger", "Woodcock", "Wraith", "Wrath", "Wren", "Wyvern", "Wyrm", + "Xena", "Xenon", "Xylem", + "Yacht", "Yellowhammer", "Yettie", + "Zenith", "Zilla", "Zombie", "Zweihander" +} + +--[[======================================================================================== +Helper functions for identifying if a tile or entity is a certain type of spaceship thing. +]]-- + +function Spaceship.is_floor(tile_name) + return Util.table_contains(Spaceship.names_spaceship_floors, tile_name) +end + +function Spaceship.is_wall(entity_name) + return Util.table_contains(Spaceship.names_spaceship_walls, entity_name) +end + +function Spaceship.is_gate(entity_name) + return Util.table_contains(Spaceship.names_spaceship_gates, entity_name) +end + +function Spaceship.is_wall_or_gate(entity_name) + return Spaceship.is_wall(entity_name) or Spaceship.is_gate(entity_name) +end + +--[[======================================================================================== +Helper functions for getting spaceship references. +]]-- + +function Spaceship.from_index(spaceship_index) + if global.spaceships then return global.spaceships[tonumber(spaceship_index)] end +end + +function Spaceship.from_entity(entity) + if not entity then return end + for _, spaceship in pairs(global.spaceships) do + if spaceship.console and spaceship.console.valid and spaceship.console.unit_number == entity.unit_number then + return spaceship + end + end +end + +function Spaceship.from_name(name) + for _, spaceship in pairs(global.spaceships) do + if spaceship.name == name then + return spaceship + end + end +end + +function Spaceship.from_own_surface_index(surface_index) -- can't be a zone + if global.spaceships then + for _, spaceship in pairs(global.spaceships) do + if spaceship.own_surface_index == surface_index then + return spaceship + end + end + end +end + +function Spaceship.from_surface_position(surface, position) + local x = math.floor(position.x or position[1]) + local y = math.floor(position.y or position[2]) + -- TODO allow multiple spaceships per surface + for _, spaceship in pairs(global.spaceships) do + if spaceship.own_surface_index then + if spaceship.own_surface_index == surface.index then + return spaceship + end + elseif spaceship.console and spaceship.console.valid and spaceship.console.surface == surface then + -- check tiles + if spaceship.known_tiles and spaceship.known_tiles[x] and spaceship.known_tiles[x][y] and + (spaceship.known_tiles[x][y] == Spaceship.tile_status.floor_console_connected + or spaceship.known_tiles[x][y] == Spaceship.tile_status.bulkhead_console_connected) then + return spaceship + end + end + end +end + +--[[======================================================================================== +Helper functions for spaceship states +]] +function Spaceship.is_on_own_surface(spaceship) + return spaceship.own_surface_index and not spaceship.awaiting_requests +end + +--[[======================================================================================== +Helper functions for getting the surfaces a spaceship cares about. +]] +function Spaceship.get_own_surface(spaceship) + return game.surfaces["spaceship-"..spaceship.index] +end + +function Spaceship.get_current_surface(spaceship) + if spaceship.zone_index then + local zone = Zone.from_zone_index(spaceship.zone_index) + if zone then + return Zone.get_make_surface(zone) + end + end + return Spaceship.get_own_surface(spaceship) +end + +--[[ +Computes the spaceship integrity limit for a force. +]] +function Spaceship.get_integrity_limit(force) + local integrity = Spaceship.integrity_base + for _, tech_branch in pairs(Spaceship.names_tech_integrity) do + local i = 1 + while i > 0 do + local tech = force.technologies[tech_branch.name.."-"..i] + if (not tech) and i == 1 then + tech = force.technologies[tech_branch.name] + end + if not tech then + i = -1 + else + local levels = tech.level - tech.prototype.level + (tech.researched and 1 or 0) + integrity = integrity + levels * tech_branch.bonus_per_level + i = i + 1 + end + end + end + return integrity +end + +--[[ +Computes the cost (in fuel) of launching a spaceship from its current surface. +]] +function Spaceship.get_launch_energy_cost(spaceship) + if spaceship.zone_index and spaceship.integrity_stress then + local zone = Zone.from_zone_index(spaceship.zone_index) + if zone then + if Zone.is_space(zone) then + return 250 * spaceship.integrity_stress * Spaceship.energy_per_launch_integrity_delta_v + end + local delta_v = Zone.get_launch_delta_v(zone) + local energy_cost = delta_v * spaceship.integrity_stress * Spaceship.energy_per_launch_integrity_delta_v + return energy_cost + end + end +end + +--- Computes and returns the launch energy needed for a spaceship. Also stores the value in spaceship.launch_energy +--- Returns reference to all the tanks used to make the calculation +---@param spaceship Spaceship spaceship data +function Spaceship.get_compute_launch_energy(spaceship) + spaceship.launch_energy = nil + local tanks = nil + local zone + if spaceship.zone_index then + zone = Zone.from_zone_index(spaceship.zone_index) + end + if spaceship.zone_index and spaceship.console and spaceship.console.valid and spaceship.known_tiles then + spaceship.launch_energy = 0 + local surface = spaceship.console.surface + tanks = surface.find_entities_filtered{name = Spaceship.names_booster_tanks, area = spaceship.known_bounds} + for _, tank in pairs(tanks) do + local tank_x = math.floor(tank.position.x) + local tank_y = math.floor(tank.position.y) + + if spaceship.known_tiles[tank_x] and spaceship.known_tiles[tank_x][tank_y] + and spaceship.known_tiles[tank_x][tank_y] == Spaceship.tile_status.floor_console_connected + and #tank.fluidbox > 0 then + local fluidbox = tank.fluidbox[1] or {amount = 0} + if fluidbox.amount > 0 then + if zone and Zone.is_space(zone) and fluidbox.name == "se-ion-stream" then + spaceship.launch_energy = spaceship.launch_energy + fluidbox.amount * Spaceship.ion_stream_energy + else + spaceship.launch_energy = spaceship.launch_energy + fluidbox.amount * game.fluid_prototypes[fluidbox.name].fuel_value + end + end + end + end + end + return spaceship.launch_energy, tanks +end + +function Spaceship.get_console_or_middle_position(spaceship) + if spaceship.console and spaceship.console.valid then + return spaceship.console.position + end + if spaceship.known_tiles_average_x and spaceship.known_tiles_average_y then + return {x = spaceship.known_tiles_average_x, y = spaceship.known_tiles_average_y} + end +end + +function Spaceship.get_boarding_position(spaceship) + if spaceship.known_tiles_average_x and spaceship.known_bounds then + return { + x = spaceship.known_bounds.left_top.x + math.random() * (spaceship.known_bounds.right_bottom.x - spaceship.known_bounds.left_top.x), + y = spaceship.known_bounds.right_bottom.y + 32 + } + end + if spaceship.console and spaceship.console.valid then + return Util.vectors_add(spaceship.console.position, {x = 64 * ( math.random() - 0.5), y = 64}) + end +end + +function Spaceship.destroy(spaceship) + if spaceship.zone_index or not Spaceship.is_on_own_surface(spaceship) then -- don't remove the whole surface if in space + global.spaceships[spaceship.index] = nil + spaceship.valid = false + + -- if a player has this gui open then close it + local gui_name = SpaceshipGUI.name_spaceship_gui_root + for _, player in pairs(game.connected_players) do + local root = player.gui.left[gui_name] + if root and root.tags and root.tags.index == spaceship.index then + root.destroy() + end + end + if spaceship.own_surface_index then + game.delete_surface(spaceship.own_surface_index) + spaceship.own_surface_index = nil + end + + -- make sure that history references to this spaceship are cleaned up + for _, player in pairs(game.players) do + RemoteView.make_history_valid(player) + end + end +end + +--[[======================================================================================== +Helper functions for getting information about a spaceship's target destination +]] +function Spaceship.get_destination_zone(spaceship) + if spaceship.destination then + if spaceship.destination.type == "spaceship" then + return Spaceship.from_index(spaceship.destination.index) + else + return Zone.from_zone_index(spaceship.destination.index) + end + end +end + +function Spaceship.is_near_destination(spaceship) + if spaceship.near then + if not spaceship.destination then + return true + elseif spaceship.near.type == spaceship.destination.type + and spaceship.near.index == spaceship.destination.index then + return true + end + end + return false +end + +function Spaceship.is_at_destination(spaceship) + if spaceship.destination and spaceship.destination.type ~= "spaceship" and spaceship.zone_index and spaceship.zone_index == spaceship.destination.index then + return true + end + return false +end + +--- Gets or makes the spaceship's own surface +---@param spaceship Spaceship spaceship data +function Spaceship.get_make_spaceship_surface(spaceship) + local current_surface = spaceship.console.surface + local ship_surface + if spaceship.own_surface_index then + ship_surface = game.surfaces["spaceship-" .. spaceship.index] + end + if not ship_surface then + local map_gen_settings = { + autoplace_controls = { + ["planet-size"] = { frequency = 1/1000, size = 1 } + } + } + map_gen_settings.autoplace_settings={ + ["decorative"]={ + treat_missing_as_default=false, + settings={ + } + }, + ["entity"]={ + treat_missing_as_default=false, + settings={ + } + }, + ["tile"]={ + treat_missing_as_default=false, + settings={ + ["se-space"]={} + } + }, + } + ship_surface = game.create_surface("spaceship-"..spaceship.index, map_gen_settings) + + ship_surface.freeze_daytime = true + ship_surface.daytime = 0.4 -- dark but not midnight + spaceship.own_surface_index = ship_surface.index + end + if not ship_surface then + game.print("Error creating ship surface") + elseif current_surface == ship_surface then + Log.trace("Same surface") + end + return ship_surface +end + +--- Launch a spaceship +---@param spaceship Spaceship the spaceship data +function Spaceship.launch(spaceship) + if not spaceship.is_launching then Log.trace("Abort launch not is_launching") return end + + local automated_launch = spaceship.is_launching_automatically + spaceship.is_launching = false + spaceship.is_launching_automatically = false + + if not spaceship.zone_index then Log.trace("Abort launch no zone_index") return end + if not spaceship.integrity_valid then Log.trace("Abort launch not integrity_valid") return end + if not spaceship.known_tiles then Log.trace("Abort launch not known_tiles") return end + if not spaceship.console and spaceship.console.valid then Log.trace("Abort launch not known_tiles") return end + + local current_surface = spaceship.console.surface + local current_zone = Zone.from_surface(current_surface) + + local required_energy = Spaceship.get_launch_energy_cost(spaceship) + local _, tanks = Spaceship.get_compute_launch_energy(spaceship) + if not (required_energy and spaceship.launch_energy and spaceship.launch_energy >= required_energy) then return end + + -- point of no return + log("spaceship launch start") + local ship_surface = Spaceship.get_make_spaceship_surface(spaceship) + + local linked_containers = current_surface.find_entities_filtered{ + area=spaceship.known_bounds, + type="linked-container" + } + for _, linked_container in pairs(linked_containers) do + linked_container.link_id = 0 + end + + local valid_tanks = {} + local valid_tank_fuel = {} + local total_energy = 0 + local zone = Zone.from_zone_index(spaceship.zone_index) + for _, tank in pairs(tanks) do + local tank_x = math.floor(tank.position.x) + local tank_y = math.floor(tank.position.y) + + if spaceship.known_tiles[tank_x] and spaceship.known_tiles[tank_x][tank_y] + and spaceship.known_tiles[tank_x][tank_y] == Spaceship.tile_status.floor_console_connected + and #tank.fluidbox > 0 then + local fluidbox = tank.fluidbox[1] or {amount = 0} + if fluidbox.amount > 0 and required_energy > 0 then + local amount = fluidbox.amount + local energy_per_fuel = (Zone.is_space(zone) and fluidbox.name == "se-ion-stream") and Spaceship.ion_stream_energy or game.fluid_prototypes[fluidbox.name].fuel_value + table.insert(valid_tanks, tank) + table.insert(valid_tank_fuel, fluidbox.amount) + total_energy = total_energy + amount * energy_per_fuel + end + end + end + + for i, tank in pairs(valid_tanks) do + local percent_required = required_energy / total_energy -- Remove x% from all booster tanks + local consume = math.min(valid_tank_fuel[i], math.ceil(percent_required * valid_tank_fuel[i])) + local fluidbox = tank.fluidbox[1] or {amount = 0} + fluidbox.amount = fluidbox.amount - consume + if fluidbox.amount > 0 then + tank.fluidbox[1] = fluidbox + else + tank.fluidbox[1] = nil + end + end + + -- set the ship's location to the new statuses + spaceship.near = {type="zone", index= spaceship.zone_index} + spaceship.stopped = true + spaceship.zone_index = nil + spaceship.near_star = Zone.get_star_from_child(current_zone) or Zone.get_star_from_position(spaceship) + Spaceship.set_light(spaceship, ship_surface) + + -- start generating chunks at the destination + spaceship.requests_made = SpaceshipClone.enqueue_generate_clone_to_area(spaceship, current_surface, ship_surface, {dx=0,dy=0}) + + if automated_launch then + -- await chunk generation before completing the launch + spaceship.await_start_tick = game.tick + spaceship.awaiting_requests = true + spaceship.clone_params = { + clone_from = current_surface, + clone_to = ship_surface, + clone_delta = {dx=0,dy=0} + } + else + -- immediate launch + SpaceshipClone.clone(spaceship, current_surface, ship_surface, {dx=0,dy=0}) + end + log("spaceship launch end") +end + +--- Land a spaceship +---@param spaceship Spaceship spaceship data +---@param position any the position at which to land +---@param ignore_average any if we are cloning based on the corner of the ship or its center +function Spaceship.land_at_position(spaceship, position, ignore_average) + if not (Spaceship.is_on_own_surface(spaceship) and spaceship.near and spaceship.near.type == "zone" and spaceship.known_tiles) then return end + local destination_zone = Zone.from_zone_index(spaceship.near.index) + if not destination_zone then return end + + local ship_surface = game.surfaces["spaceship-" .. spaceship.index] + local target_surface = Zone.get_make_surface(destination_zone) + + local offset_x = util.to_rail_grid(position.x - spaceship.known_tiles_average_x) + local offset_y = util.to_rail_grid(position.y - spaceship.known_tiles_average_y) + if ignore_average then + offset_x = util.to_rail_grid(position.x) + offset_y = util.to_rail_grid(position.y) + end + + local destination_area = { + left_top = { + x = spaceship.known_bounds.left_top.x + offset_x, + y = spaceship.known_bounds.left_top.y + offset_y + }, + right_bottom = { + x = spaceship.known_bounds.right_bottom.x + offset_x, + y = spaceship.known_bounds.right_bottom.y + offset_y + }, + } + local dont_land_on = table.deepcopy(Ancient.vault_entrance_structures) + table.insert(dont_land_on, Ancient.name_gate_blocker) + table.insert(dont_land_on, Ancient.name_gate_blocker_void) + for name, stuff in pairs(Ancient.gate_fragments) do + table.insert(dont_land_on, name) + end + if target_surface.count_entities_filtered{name = dont_land_on, area = destination_area} > 0 then + ship_surface.print({"cant-build-reason.entity-in-the-way", {"space-exploration.ruin"}}) + return + end + + local landing_area_entities = {} + for x = spaceship.known_bounds.left_top.x, spaceship.known_bounds.right_bottom.x do + for y = spaceship.known_bounds.left_top.y, spaceship.known_bounds.right_bottom.y do + if spaceship.known_tiles[x] and spaceship.known_tiles[x][y] and + (spaceship.known_tiles[x][y] == Spaceship.tile_status.floor_console_connected + or spaceship.known_tiles[x][y] == Spaceship.tile_status.bulkhead_console_connected) then + local area = { + left_top={ + x=x + offset_x, + y=y + offset_y}, + right_bottom={ + x=x+31/32 + offset_x, + y=y+31/32 + offset_y}} + local entities = target_surface.find_entities_filtered{ area = area } + for _, entity in pairs(entities) do + if entity.force.name ~= "neutral" and entity.type ~= "entity-ghost" and entity.type ~= "tile-ghost" + and entity.type ~= "logistic-robot" and entity.type ~= "construction-robot" and entity.type ~= "deconstructible-tile-proxy" then + ship_surface.print({"cant-build-reason.entity-in-the-way", {"entity-name."..entity.name}}) + return + end + table.insert(landing_area_entities, entity) + end + end + end + end + + -- point of no return + log('spaceship land start') + Spaceship.deactivate_engines(spaceship) + + local linked_containers = ship_surface.find_entities_filtered{ + area=spaceship.known_bounds, + type="linked-container" + } + for _, linked_container in pairs(linked_containers) do + linked_container.link_id = 0 + end + + Spaceship.destroy_all_smoke_triggers(ship_surface) + SpaceshipObstacles.destroy(spaceship, ship_surface) -- destroy all the obstacles on the ship's surface + Zone.apply_markers(destination_zone) -- in case the surface exists + + -- clear the target area + for _, entity in pairs(landing_area_entities) do + if entity.valid then + if entity.type == "character" then + entity.health = entity.health * 0.1 + else + util.safe_destroy(entity)-- maybe use die? + end + end + end + + -- request chunk generation at destination and then immediately land there + local clone_delta = {dx=offset_x,dy=offset_y} + SpaceshipClone.enqueue_generate_clone_to_area(spaceship, ship_surface, target_surface, clone_delta) + SpaceshipClone.clone(spaceship, ship_surface, target_surface, clone_delta, Spaceship.post_land_at_position) + log('spaceship land end') +end + +--- Finishes landing the spaceship after the cloning procedure finishes +---@param spaceship any +---@param clone_from any +---@param clone_to any +---@param clone_delta any +function Spaceship.post_land_at_position(spaceship, clone_from, clone_to, clone_delta) + -- move non-character players before deleting the surface the ship was on + for _, player in pairs(game.connected_players) do + if player.surface == clone_from then + player.teleport({ + x = player.position.x + clone_delta.dx, + y = player.position.y + clone_delta.dy + }, clone_to) + RemoteView.gui_update(player) + end + end + game.delete_surface(clone_from) + + -- set the ship's location to the new statuses + spaceship.own_surface_index = nil + spaceship.particles = {} + spaceship.mineables = {} + spaceship.zone_index = spaceship.near.index + spaceship.near = nil + spaceship.stopped = true + spaceship.is_moving = false + spaceship.speed = 0 +end + +--- Decrements the number of requests being waited upon for a spaceship surface transfer whenever a chunk is generated +---@param event any +function Spaceship.on_chunk_generated(event) + if event.surface and string.find(event.surface.name, "spaceship-") then + for _, spaceship in pairs(global.spaceships) do + if spaceship.clone_params and spaceship.requests_made and spaceship.clone_params.clone_to == event.surface then + spaceship.requests_made = spaceship.requests_made - 1 + end + end + end +end +Event.addListener(defines.events.on_chunk_generated, Spaceship.on_chunk_generated) + +--- Determines the rectangles necessary to somewhat quickly draw an image of the spaceship +--- that this player is anchor scouting. Necessary because drawing each individual tile +--- as a separate rectangle lags the game. +---@param player any +---@param spaceship Spaceship spaceship data +function Spaceship.get_make_anchor_scouting_cache(player, spaceship) + local playerdata = get_make_playerdata(player) + if not playerdata.anchor_scouting_cache then + playerdata.anchor_scouting_cache = {} + + if spaceship.known_tiles and spaceship.known_bounds then + local aabb + for x = spaceship.known_bounds.left_top.x, spaceship.known_bounds.right_bottom.x do + for y = spaceship.known_bounds.left_top.y, spaceship.known_bounds.right_bottom.y do + local value = spaceship.known_tiles[x] and spaceship.known_tiles[x][y] + if value == Spaceship.tile_status.floor_console_connected + or value == Spaceship.tile_status.bulkhead_console_connected then + if not aabb then + aabb = {min_x=x,max_x=x+1,min_y=y,max_y=y+1} + else + aabb.max_y = aabb.max_y + 1 + end + else + if aabb then + table.insert(playerdata.anchor_scouting_cache, aabb) + aabb = nil + end + end + end + if aabb then + table.insert(playerdata.anchor_scouting_cache, aabb) + aabb = nil + end + end + end + end + return playerdata.anchor_scouting_cache +end + +--- While anchoring scouting we need to draw rectangles at the position the ship would land +--- if the player were to confirm the landing location +---@param player any +---@param spaceship Spaceship spaceship data +function Spaceship.anchor_scouting_tick(player, spaceship) + local anchor_scouting_cache = Spaceship.get_make_anchor_scouting_cache(player, spaceship) + if anchor_scouting_cache then + local offset_x = util.to_rail_grid(player.position.x - spaceship.known_tiles_average_x) + local offset_y = util.to_rail_grid(player.position.y - spaceship.known_tiles_average_y) + for _, aabb in pairs(anchor_scouting_cache) do + rendering.draw_rectangle{ + color = {r = 0.125, g = 0.125, b = 0, a = 0.01}, + filled = true, + left_top = {x=aabb.min_x+offset_x,y=aabb.min_y+offset_y}, + right_bottom = {x=aabb.max_x+offset_x,y=aabb.max_y+offset_y}, + surface = player.surface, + time_to_live = Spaceship.tick_interval_anchor + 1, -- tll must be 1 greater than the interval at which we draw to not flicker + } + end + end +end + +--- Starts anchor scouting at the location the spaceship is currently at +---@param spaceship Spaceship spaceship data +---@param player any +function Spaceship.start_anchor_scouting(spaceship, player) + if not spaceship.near and spaceship.near.type == "zone" then return end + local zone = Zone.from_zone_index(spaceship.near.index) + if not zone then return end + + local playerdata = get_make_playerdata(player) + -- enter remote view + playerdata.anchor_scouting_for_spaceship_index = spaceship.index + + local character = player.character + if character then + playerdata.character = character + end + player.set_controller{type = defines.controllers.ghost} + --player.set_controller{type = defines.controllers.spectator} + + if character then + -- stop the character from continuing input action (running to doom) + character.walking_state = {walking = false, direction = defines.direction.south} + character.riding_state = {acceleration = defines.riding.acceleration.braking, direction = defines.riding.direction.straight} + character.shooting_state = {state = defines.shooting.not_shooting, position=character.position} + end + + local surface = Zone.get_make_surface(zone) + local position = {x=0,y=0} + if playerdata.surface_positions and playerdata.surface_positions[surface.index] then + position = playerdata.surface_positions[surface.index] + end + + player.teleport(position, surface) + +end + +--- Stops any in progress anchor scouting for the given player +---@param player any +function Spaceship.stop_anchor_scouting(player) + local playerdata = get_make_playerdata(player) + if playerdata.anchor_scouting_for_spaceship_index then + playerdata.anchor_scouting_for_spaceship_index = nil + if playerdata.remote_view_active then + local surface = player.surface + local position = player.position + RemoteView.stop(player) + RemoteView.start(player) + player.teleport(position, surface) + else + if playerdata.character and playerdata.character.valid then + player.teleport(playerdata.character.position, playerdata.character.surface) + player.set_controller{type = defines.controllers.character, character = playerdata.character} + elseif not player.character then + Respawn.die(player) + end + end + end + playerdata.anchor_scouting_cache = nil +end + +--- When an equipment grid is changed, we have to recalculate integrity costs +---@param event any +function Spaceship.on_equipment_grid_changed(event) + local player = game.players[event.player_index] + local spaceship = Spaceship.from_own_surface_index(player.surface.index) + if spaceship then + Spaceship.start_integrity_check(spaceship) + end +end +Event.addListener(defines.events.on_player_placed_equipment, Spaceship.on_equipment_grid_changed) +Event.addListener(defines.events.on_player_removed_equipment, Spaceship.on_equipment_grid_changed) + +function Spaceship.on_entity_created(event) + local entity + if event.entity and event.entity.valid then + entity = event.entity + end + if event.created_entity and event.created_entity.valid then + entity = event.created_entity + end + if not entity then return end + if entity.type == "entity-ghost" or entity.type == "tile-ghost" then return end + + local surface = entity.surface + + local spaceship = Spaceship.from_own_surface_index(entity.surface.index) + if spaceship and not spaceship.is_cloning then + Spaceship.start_integrity_check(spaceship) + end + + for _, name in pairs(Spaceship.names_engines) do + if entity.name == name then + if spaceship and spaceship.is_moving then + -- sets smoke + Spaceship.find_own_surface_engines(spaceship) + else + entity.active = false + end + end + end + + if entity.name == Spaceship.name_spaceship_console then + global.spaceships = global.spaceships or {} + local console = entity + + if spaceship then + if not (spaceship.console and spaceship.console.valid) then + spaceship.console = entity + spaceship.console_output = nil + + if event.player_index and game.players[event.player_index] then + SpaceshipGUI.gui_open(game.players[event.player_index], spaceship) + end + + Spaceship.start_integrity_check(spaceship, 0.1) + end + else + local zone = Zone.from_surface(entity.surface) + if not zone then + entity.surface.create_entity{ + name = "item-on-ground", + position = entity.position, + ["item-entity"] = {name = Spaceship.name_spaceship_console, count = 1} + } + entity.destroy() + game.print({"space-exploration.construction-denied-se-surface"}) + return + end + local fn = entity.force.name + + local spaceship_index = global.next_spaceship_index or 1 + global.next_spaceship_index = spaceship_index + 1 + + local available_names = {} + for _, name in pairs(Spaceship.names) do + local found = false + for _, spaceship in pairs(global.spaceships) do + if name == spaceship.name then + found = true + break + end + end + if not found then + table.insert(available_names, name) + end + end + + local name = "Spaceship " .. spaceship_index + if #available_names > 0 then + name = available_names[math.random(#available_names)] + end + + local spaceship = { + type = "spaceship", + index = spaceship_index, + valid = true, + force_name = fn, + unit_number = entity.unit_number, + console = entity, + name = name, + zone_index = zone.index, -- this is dynamic and can be nil + speed = 1, + destination_zone_index = zone.index, + space_distortion = Zone.get_space_distortion(zone), + stellar_position = Zone.get_stellar_position(zone), + star_gravity_well = Zone.get_star_gravity_well(zone), + planet_gravity_well = Zone.get_planet_gravity_well(zone), + near_stellar_object = Zone.get_stellar_object_from_child(zone), + } + global.spaceships[spaceship_index] = spaceship + + Spaceship.start_integrity_check(spaceship, 0.1) + + if event.player_index and game.players[event.player_index] then + SpaceshipGUI.gui_open(game.players[event.player_index], spaceship) + end + end + end + if spaceship then + Spaceship.check_integrity_stress(spaceship) + end +end +Event.addListener(defines.events.on_built_entity, Spaceship.on_entity_created) +Event.addListener(defines.events.on_robot_built_entity, Spaceship.on_entity_created) +Event.addListener(defines.events.script_raised_built, Spaceship.on_entity_created) +Event.addListener(defines.events.script_raised_revive, Spaceship.on_entity_created) + +function Spaceship.on_built_tile(event) + local surface = game.surfaces[event.surface_index] + if surface and string.find(surface.name, "spaceship-") then + local spaceship = Spaceship.from_own_surface_index(surface.index) + if not spaceship.is_cloning then + Spaceship.check_integrity_stress(spaceship) + Spaceship.start_integrity_check(spaceship) + end + end +end +Event.addListener(defines.events.on_player_built_tile, Spaceship.on_built_tile) +Event.addListener(defines.events.on_robot_built_tile, Spaceship.on_built_tile) + +function Spaceship.on_removed_tile(event) + local surface + if event.player_index and game.players[event.player_index] and game.players[event.player_index].connected then + surface = game.players[event.player_index].surface + end + if event.robot and event.robot.valid then + surface = event.robot.surface + end + if surface and string.find(surface.name, "spaceship-") then + local spaceship = Spaceship.from_own_surface_index(surface.index) + if not spaceship.is_cloning then + Spaceship.check_integrity_stress(spaceship) + Spaceship.start_integrity_check(spaceship) + end + end +end +Event.addListener(defines.events.on_robot_mined_tile, Spaceship.on_removed_tile) +Event.addListener(defines.events.on_player_mined_tile, Spaceship.on_removed_tile) + +function Spaceship.on_removed_entity(event) + if event.entity and event.entity.valid then + if event.entity.name == Spaceship.name_spaceship_console then + local outputs = event.entity.surface.find_entities_filtered{name = Spaceship.name_spaceship_console_output, area = util.position_to_area(event.entity.position, 2)} + for _, output in pairs(outputs) do + output.destroy() + end + elseif event.entity.surface and Util.table_contains(Spaceship.names_spaceship_bulkheads, event.entity.name) then + -- this check is *not* appropriate if we can have multiple spaceships on a spaceship surface + -- when implementing multiple ships per spaceship surface, the way of handling not responding to events raised by cloning must be changed to work with that + if string.find(event.entity.surface.name, "spaceship-") then + local spaceship = Spaceship.from_own_surface_index(event.entity.surface.index) + if not spaceship.is_cloning then + spaceship.speed = spaceship.speed * 0.9 + Spaceship.check_integrity_stress(spaceship) + Spaceship.start_integrity_check(spaceship) + end + end + end + end +end +Event.addListener(defines.events.on_entity_died, Spaceship.on_removed_entity) +Event.addListener(defines.events.on_robot_mined_entity, Spaceship.on_removed_entity) +Event.addListener(defines.events.on_player_mined_entity, Spaceship.on_removed_entity) +Event.addListener(defines.events.script_raised_destroy, Spaceship.on_removed_entity) + +function Spaceship.get_distance_to_destination(spaceship) + if (not spaceship.destination) or Spaceship.is_near_destination(spaceship) then + return 0 + end + + local target_zone = Spaceship.get_destination_zone(spaceship) + if target_zone then + + local destination_space_distorion = Zone.get_space_distortion(target_zone) + local destination_stellar_position = Zone.get_stellar_position(target_zone) + local destination_star_gravity_well = Zone.get_star_gravity_well(target_zone) + local destination_planet_gravity_well = Zone.get_planet_gravity_well(target_zone) + + local distortion_distance = 0 + local interstellar_distance = 0 + local star_gravity_distance = 0 + local planet_gravity_distance = 0 + + distortion_distance = math.abs(spaceship.space_distortion - destination_space_distorion) + + interstellar_distance = Util.vectors_delta_length(spaceship.stellar_position, destination_stellar_position) + --if distortion_distance == 1 then + if distortion_distance >= 1 or (spaceship.space_distortion == 1 and destination_space_distorion == 1) then + interstellar_distance = 0 + end + if interstellar_distance == 0 then + -- same solar system + star_gravity_distance = math.abs(spaceship.star_gravity_well - destination_star_gravity_well) + else + star_gravity_distance = spaceship.star_gravity_well + destination_star_gravity_well + end + + if star_gravity_distance == 0 then + -- same solar system + planet_gravity_distance = math.abs(spaceship.planet_gravity_well - destination_planet_gravity_well) + else + planet_gravity_distance = spaceship.planet_gravity_well + destination_planet_gravity_well + end + + if target_zone.type == "anomaly" and star_gravity_distance == 0 and planet_gravity_distance == 0 and distortion_distance > 0 then + return math.random(Zone.travel_cost_space_distortion - 1000) * 4 + 1000 + -- actual distance calculation: return distortion_distance * Zone.travel_cost_space_distortion + else + return distortion_distance * Zone.travel_cost_space_distortion + + interstellar_distance * Zone.travel_cost_interstellar + + star_gravity_distance * Zone.travel_cost_star_gravity + + planet_gravity_distance * Zone.travel_cost_planet_gravity + end + end +end + +--- Finds the engines for this spaceship +---@param spaceship Spaceship +---@param start_position {x=int, y=int} +function Spaceship.get_space_behind(spaceship, start_position) + -- spaceship must be on own surface + local space_behind = math.huge + if spaceship.known_tiles and spaceship.known_tiles[start_position.x] then + -- there's no way this is efficient but it needs to be profiled to see if this actually + -- meaningfully contributes to the UPS cost of ships (probably contributes more to integrity + -- checks than anything else) + for y = start_position.y, spaceship.known_bounds.right_bottom.y, 1 do + if spaceship.known_tiles[start_position.x][y] + and (spaceship.known_tiles[start_position.x][y] == Spaceship.tile_status.floor_console_connected + or spaceship.known_tiles[start_position.x][y] == Spaceship.tile_status.bulkhead_console_connected) then + space_behind = y - start_position.y + break + end + end + end + return space_behind +end + +---@param spaceship Spaceship the spaceship data +---@param engine Spaceship engine +function Spaceship.update_smoke(spaceship, engine) + if engine.entity.active then + if (not engine.smoke_trigger) and Spaceship.engines[engine.entity.name].smoke_trigger then + engine.smoke_trigger = engine.entity.surface.create_entity{ + name = Spaceship.engines[engine.entity.name].smoke_trigger, + position = {x = engine.entity.position.x, y = engine.entity.bounding_box.right_bottom.y} + } + end + elseif engine.smoke_trigger and engine.smoke_trigger.valid then + engine.smoke_trigger.destroy() + engine.smoke_trigger = nil + end +end + +function Spaceship.destroy_all_smoke_triggers(surface) + local smoke_triggers = surface.find_entities_filtered{ + type = "smoke-with-trigger", + name = Spaceship.names_smoke_trigger + -- do not restrict area, + } + for _, smoke_trigger in pairs(smoke_triggers) do + smoke_trigger.destroy() + end +end + +--- Finds the engines for this spaceship +---@param spaceship Spaceship the spaceship data +function Spaceship.find_own_surface_engines(spaceship) + spaceship.engines = nil + local surface = Spaceship.get_own_surface(spaceship) + if surface then + Spaceship.destroy_all_smoke_triggers(surface) + end + if surface and spaceship.known_tiles and spaceship.known_bounds then + spaceship.engines = {} + local engines = surface.find_entities_filtered{ + name = Spaceship.names_engines, + area = spaceship.known_bounds + } + local y_engines = {} -- thrust harmonics + for _, entity in pairs(engines) do + local efficiency = Spaceship.engine_efficiency_blocked + local box = entity.bounding_box + local engine_y_behind = math.floor(box.right_bottom.y) + 1 + local engine_x = math.floor((box.left_top.x + box.right_bottom.x)/2) + local space_behind + if entity.position.x % 1 < 0.25 or entity.position.x % 1 > 0.75 then + -- 2-wide trail + space_behind = math.min( + Spaceship.get_space_behind(spaceship, {x = engine_x - 1, y = engine_y_behind}), + Spaceship.get_space_behind(spaceship, {x = engine_x, y = engine_y_behind}) + ) + else + -- 1-wide trail + space_behind = Spaceship.get_space_behind(spaceship, {x = engine_x, y = engine_y_behind}) + end + if space_behind < 0 then + efficiency = Spaceship.engine_efficiency_unblocked + else + efficiency = 1-(1-Spaceship.engine_efficiency_blocked) / (space_behind + Spaceship.engine_efficiency_unblocked_taper) * Spaceship.engine_efficiency_unblocked_taper + end + efficiency = efficiency - Spaceship.engine_efficiency_side + local engine = {entity = entity, efficiency = efficiency} + if not y_engines[engine_y_behind] then + y_engines[engine_y_behind] = {left = engine, right = engine} + else + if entity.position.x < y_engines[engine_y_behind].left.entity.position.x then + y_engines[engine_y_behind].left = engine + end + if entity.position.x > y_engines[engine_y_behind].right.entity.position.x then + y_engines[engine_y_behind].right = engine + end + end + table.insert(spaceship.engines, engine) + end + + -- thrust harmonics + -- the left-most and right-most engines get a bonus + -- there is a 1% incentive to have engines on different Y values. + -- You waste integrity building this way, but it means more interesting designs are penalised less by the forced grid. + for y, left_right in pairs(y_engines) do + left_right.left.efficiency = left_right.left.efficiency + Spaceship.engine_efficiency_side + if left_right.left ~= left_right.right then + left_right.right.efficiency = left_right.right.efficiency + Spaceship.engine_efficiency_side + end + end + + -- Show the result + for _, engine in pairs(spaceship.engines) do + engine.entity.surface.create_entity{ + name = "flying-text", + position = util.vectors_add({x=0, y=1}, engine.entity.position), + text = math.ceil(engine.efficiency*100).."%" + } + Spaceship.update_smoke(spaceship, engine) + end + end +end + +--- Activates the engines on this spaceship +---@param spaceship Spaceship the spaceship data +function Spaceship.activate_engines(spaceship) + if not spaceship.engines then + Spaceship.find_own_surface_engines(spaceship) + end + if spaceship.engines then + for _, engine in pairs(spaceship.engines) do + if engine.entity and engine.entity.valid then + engine.entity.active = true + Spaceship.update_smoke(spaceship, engine) + else + spaceship.engines = nil + Spaceship.activate_engines(spaceship) + return + end + end + end +end + +--- Deactivates the engines on this spaceship +---@param spaceship Spaceship the spaceship data +function Spaceship.deactivate_engines(spaceship) + if not spaceship.engines then + Spaceship.find_own_surface_engines(spaceship) + end + if spaceship.engines then + for _, engine in pairs(spaceship.engines) do + if engine.smoke_trigger and engine.smoke_trigger.valid then + engine.smoke_trigger.destroy() + engine.smoke_trigger = nil + end + if engine.entity and engine.entity.valid then + engine.entity.active = false + Spaceship.update_smoke(spaceship, engine) + else + spaceship.engines = nil + Spaceship.deactivate_engines(spaceship) + return + end + end + end +end + +function Spaceship.surface_tick(spaceship, time_passed) + -- actions that apply to maintaining a spaceship surface + spaceship.speed = spaceship.speed or 0 + local surface = Spaceship.get_own_surface(spaceship) + if spaceship.speed > 1 then + surface.wind_orientation = 0.5 + end + + local speed_factor = SpaceshipObstacles.particle_speed_factor(spaceship.speed) + surface.wind_speed = 0.01 + 0.005 * speed_factor + + -- floating characters + if remote.interfaces["jetpack"] and remote.interfaces["jetpack"]["get_jetpacks"] then + local jetpacks = remote.call("jetpack", "get_jetpacks", {surface_index = spaceship.own_surface_index}) + for _, jetpack in pairs(jetpacks) do + jetpack.velocity.y = jetpack.velocity.y + + 0.000005 * time_passed * math.pow(spaceship.speed / Spaceship.speed_taper, Spaceship.particle_speed_power) * Spaceship.speed_taper + if remote.interfaces["jetpack"]["set_velocity"] then + remote.call("jetpack", "set_velocity", {unit_number = jetpack.unit_number, velocity = jetpack.velocity}) + end + end + end + + -- obstacles + SpaceshipObstacles.tick_obstacles(spaceship, surface, time_passed) +end + +--- Sets the lighting of a spaceship surface. This dictates both how bright the player's screen is and solar power +---@param spaceship Spaceship spaceship data +---@param surface LuaSurface the spaceship's surface +function Spaceship.set_light(spaceship, surface) + -- expect 15 is the max, 10 + 5 planets but reduced start position + local light_percent = Zone.get_solar(spaceship) + + surface.freeze_daytime = true + + if light_percent >= 0.5 then + surface.daytime = 0.35 -- half light + surface.solar_power_multiplier = Zone.solar_multiplier * light_percent * 2 -- x2 compensate for half light + else + surface.daytime = 0.45 - 0.2 * light_percent + surface.solar_power_multiplier = Zone.solar_multiplier -- x2 compensate for half light max + -- light_percent of 1 would be 0.35 (half-light), + -- light_percent of 0 would be 0.45 (dark) + end +end + +function Spaceship.apply_engine_thust(spaceship, time_passed) + -- Apply engines to speed. + if spaceship.engines then + for _, engine_table in pairs(spaceship.engines) do + local engine = engine_table.entity + if engine and engine.valid then + if engine.active and engine.is_crafting() then + for _, engine_proto in pairs(Spaceship.engines) do + if engine.name == engine_proto.name then + spaceship.speed = spaceship.speed + + (spaceship.speed_multiplier or 1) * engine_table.efficiency * engine_proto.thrust + * (engine.energy / engine_proto.max_energy) / (Spaceship.minimum_mass + spaceship.integrity_stress) + * (Spaceship.speed_taper / (Spaceship.speed_taper + spaceship.speed)) + * time_passed + end + end + end + else + spaceship.engines[_] = nil + end + end + end + +end + +function Spaceship.apply_drag(spaceship, time_passed) + -- space_drag from imperfect vacuum + -- streamline 0 = 110.45 + -- streamline 1 = 181.25 + local drag = Spaceship.space_drag * (2 - (spaceship.streamline or 0)) * time_passed + spaceship.speed = spaceship.speed * (1 - drag) + Spaceship.minimum_impulse + + -- brake + if spaceship.target_speed and spaceship.speed > spaceship.target_speed then + spaceship.speed = math.min(spaceship.speed, math.max(spaceship.target_speed + 1, spaceship.speed - 0.001 * time_passed)) + spaceship.speed = math.min(spaceship.speed, math.max(spaceship.target_speed + 0.5, spaceship.speed - (spaceship.speed + 0.5 - spaceship.target_speed) * (1 - math.pow(0.999, time_passed)))) + end + spaceship.max_speed = math.max(spaceship.speed, spaceship.max_speed or 0) +end + +--- Move away from the current planet +---@param spaceship Spaceship the spaceship +---@param travel_speed number speed at which to move +function Spaceship.move_from_planet(spaceship, travel_speed) + spaceship.planet_gravity_well = math.max(0, spaceship.planet_gravity_well - travel_speed / Zone.travel_cost_planet_gravity) + spaceship.travel_message = {"space-exploration.spaceship-travel-message-exiting-planet-gravity"} +end + +--- Move away from the current star +---@param spaceship Spaceship the spaceship +---@param travel_speed number speed at which to move +function Spaceship.move_from_star(spaceship, travel_speed) + spaceship.star_gravity_well = math.max(0, spaceship.star_gravity_well - travel_speed / Zone.travel_cost_star_gravity) + spaceship.travel_message = {"space-exploration.spaceship-travel-message-exiting-star-gravity"} +end + +--- Move towards a particular position in intestellar space +---@param spaceship Spaceship the spaceship +---@param travel_speed number speed at which to move +---@param destination_stellar_position Position the target location +function Spaceship.move_towards_interstellar_position(spaceship, travel_speed, destination_stellar_position) + spaceship.near_stellar_object = nil + spaceship.stellar_position = Util.move_to(spaceship.stellar_position, destination_stellar_position, + travel_speed / Zone.travel_cost_interstellar) + spaceship.travel_message = {"space-exploration.spaceship-travel-message-navigating-interstellar"} +end + +--- Move towards a particular position in intestellar space instantly +---@param spaceship Spaceship the spaceship +---@param travel_speed number speed at which to move +---@param destination_stellar_position Position the target location +function Spaceship.move_instant_interstellar_position(spaceship, travel_speed, destination_stellar_position) + spaceship.stellar_position = table.deepcopy(destination_stellar_position) + spaceship.space_distortion = 1 - travel_speed / Zone.travel_cost_space_distortion + spaceship.travel_message = {"space-exploration.spaceship-travel-message-spatial-distortions"} +end + +--- Move towards the anomaly +---@param spaceship Spaceship the spaceship +---@param travel_speed number speed at which to move +---@param destination_space_distorion number the distortion of the target (does not have to be 1 / at the anomaly) +function Spaceship.move_to_anomaly(spaceship, travel_speed, destination_space_distorion) + spaceship.near_stellar_object = nil + local delta_space_distortion = destination_space_distorion - spaceship.space_distortion + if delta_space_distortion == 0 then + spaceship.near = table.deepcopy(spaceship.destination) + spaceship.stopped = true + else + local space_distortion_travel = travel_speed / Zone.travel_cost_space_distortion + -- step towards destination + spaceship.space_distortion = spaceship.space_distortion + + math.min(math.max(delta_space_distortion, -space_distortion_travel), space_distortion_travel) + spaceship.travel_message = {"space-exploration.spaceship-travel-message-spatial-distortions"} + end +end + +--- Move away from the anomaly +---@param spaceship Spaceship the spaceship +---@param travel_speed number speed at which to move +function Spaceship.move_from_anomaly(spaceship, travel_speed) + spaceship.space_distortion = spaceship.space_distortion - travel_speed / Zone.travel_cost_space_distortion + spaceship.travel_message = {"space-exploration.spaceship-travel-message-spatial-distortions"} +end + +--- Move the spaceship through space conventionally (i.e. no teleportation/spatial distortion) +---@param spaceship Spaceship the spaceship +---@param travel_speed number speed at which to move +---@param target_zone any +---@param destination_stellar_position any +---@param destination_star_gravity_well any +---@param destination_planet_gravity_well any +function Spaceship.move_conventional(spaceship, travel_speed, target_zone, destination_stellar_position, destination_star_gravity_well, destination_planet_gravity_well) + local interstellar_distance = Util.vectors_delta_length(spaceship.stellar_position, destination_stellar_position) + if interstellar_distance == 0 then -- same system + if spaceship.type == "spaceship" then -- not needed on spaceship-lookahead + spaceship.near_star = Zone.get_star_from_child(target_zone) or Zone.get_star_from_position(target_zone) + spaceship.near_stellar_object = Zone.get_stellar_object_from_child(target_zone) or Zone.get_stellar_object_from_position(target_zone) + end + if spaceship.star_gravity_well == destination_star_gravity_well then -- same planet system + if spaceship.planet_gravity_well == destination_planet_gravity_well then -- we're here + spaceship.near = table.deepcopy(spaceship.destination) + spaceship.stopped = true + else + local delta_planet_gravity = destination_planet_gravity_well - spaceship.planet_gravity_well + local planet_gravity_travel = travel_speed / Zone.travel_cost_planet_gravity + spaceship.planet_gravity_well = spaceship.planet_gravity_well + + math.min(math.max(delta_planet_gravity, -planet_gravity_travel), planet_gravity_travel) + spaceship.travel_message = {"space-exploration.spaceship-travel-message-navigating-planet-gravity"} + end + else + if spaceship.planet_gravity_well > 0 then + spaceship.planet_gravity_well = math.max(0, spaceship.planet_gravity_well - travel_speed / Zone.travel_cost_planet_gravity) + spaceship.travel_message = {"space-exploration.spaceship-travel-message-exiting-planet-gravity"} + else + local delta_star_gravity = destination_star_gravity_well - spaceship.star_gravity_well + local star_gravity_travel = travel_speed / Zone.travel_cost_star_gravity + spaceship.star_gravity_well = spaceship.star_gravity_well + + math.min(math.max(delta_star_gravity, -star_gravity_travel), star_gravity_travel) + spaceship.travel_message = {"space-exploration.spaceship-travel-message-navigating-star-gravity"} + end + end + else -- different systems + if spaceship.planet_gravity_well > 0 then -- leave the planet gravity well + Spaceship.move_from_planet(spaceship, travel_speed) + elseif spaceship.star_gravity_well > 0 then -- leave the star gravity well + Spaceship.move_from_star(spaceship, travel_speed) + else -- match interstellar position + Spaceship.move_towards_interstellar_position(spaceship, travel_speed, destination_stellar_position) + end + end +end + +--- Moves the spaceship from its current position towards its destination +---@param spaceship Spaceship the spaceship +---@param time_passed number amount of time passed since the position of the spaceship was last updated +function Spaceship.move_to_destination(spaceship, time_passed) + if not spaceship.destination then return end + + local target_zone = Spaceship.get_destination_zone(spaceship) + if not target_zone then + spaceship.destination = nil + spaceship.travel_message = "No destination." + Log.trace("Spaceship destination invalid") + return + end + + --Log.trace(game.tick .. " moving to destination.") + -- move away from current zone + if spaceship.near and not Spaceship.is_near_destination(spaceship) then + --Log.trace(game.tick .. "Leaving zone.") + spaceship.near = nil + -- close any scouting views + for _, player in pairs(game.connected_players) do + local playerdata = get_make_playerdata(player) + if playerdata.anchor_scouting_for_spaceship_index == spaceship.index then + Spaceship.stop_anchor_scouting(player) + player.print("Cannot anchor, spaceship has departed for a different destination.") + end + end + end + + Spaceship.move_to_destination_basic(spaceship, target_zone, time_passed) + + local ship_surface = Spaceship.get_own_surface(spaceship) + Spaceship.set_light(spaceship, ship_surface) +end + +--- Moves a spaceship or spaceship +---@param spaceship Spaceship the spaceship or spaceship-lookahead +---@param target_zone Zone or Spaceship +---@param time_passed number amount of time passed since the position of the spaceship was last updated +function Spaceship.move_to_destination_basic(spaceship, target_zone, time_passed) + + -- step towards destination + local travel_speed = spaceship.speed * Spaceship.travel_speed_multiplier * time_passed + local destination_space_distorion = Zone.get_space_distortion(target_zone) + local destination_stellar_position = Zone.get_stellar_position(target_zone) + local destination_star_gravity_well = Zone.get_star_gravity_well(target_zone) + local destination_planet_gravity_well = Zone.get_planet_gravity_well(target_zone) + + if destination_space_distorion == 1 then -- target is anomaly (or spaceship at anomaly) + if spaceship.planet_gravity_well > 0 then -- leave the planet gravity well + Spaceship.move_from_planet(spaceship, travel_speed) + elseif spaceship.star_gravity_well > 0 then -- leave the star gravity well + Spaceship.move_from_star(spaceship, travel_speed) + else -- move towards the anomaly + Spaceship.move_to_anomaly(spaceship, travel_speed, destination_space_distorion) + end + elseif spaceship.space_distortion == 1 then -- at the anomaly so the stellar position can be anywhere instantly + Spaceship.move_instant_interstellar_position(spaceship, travel_speed, destination_stellar_position) + elseif destination_space_distorion > 0 then -- target is spaceship on way to/from anomaly + local interstellar_distance = Util.vectors_delta_length(spaceship.stellar_position, destination_stellar_position) + if spaceship.planet_gravity_well > 0 then -- leave the planet gravity well + Spaceship.move_from_planet(spaceship, travel_speed) + elseif spaceship.star_gravity_well > 0 then -- leave the star gravity well + Spaceship.move_from_star(spaceship, travel_speed) + elseif interstellar_distance > 0 then -- match interstellar position + Spaceship.move_towards_interstellar_position(spaceship, travel_speed, destination_stellar_position) + else -- move towards the anomaly + Spaceship.move_to_anomaly(spaceship, travel_speed, destination_space_distorion) + end + elseif spaceship.space_distortion > 0 then -- leaving the anomaly + Spaceship.move_from_anomaly(spaceship, travel_speed) + else -- conventional travel to planet/star/spaceship + Spaceship.move_conventional(spaceship, travel_speed, target_zone, destination_stellar_position, destination_star_gravity_well, destination_planet_gravity_well) + end + +end + +function Spaceship.spaceship_tick(spaceship) + if not (spaceship.console and spaceship.console.valid) then + spaceship.check_message= {"space-exploration.spaceship-check-message-no-console"} + spaceship.integrity_valid = false + end + + -- Pause inserters, workaround for https://forums.factorio.com/viewtopic.php?f=58&t=89035 + -- Note: production machines should NOT be included as some are supposed to be disabled on specific surfaces. + if spaceship.entities_to_restore and spaceship.entities_to_restore_tick < game.tick then + for _, storedState in pairs(spaceship.entities_to_restore) do + if storedState.entity and storedState.entity.valid then + storedState.entity.active = storedState.active + end + end + spaceship.entities_to_restore = nil + end + + if Spaceship.is_on_own_surface(spaceship) or (spaceship.console and spaceship.console.valid) then + -- integrity check + if spaceship.is_doing_check then + if Spaceship.is_on_own_surface(spaceship) and spaceship.known_floor_tiles and not spaceship.is_doing_check_slowly then + -- need to tick faster on bigger ships + for i = 0, math.ceil(spaceship.known_floor_tiles / 1000) do + -- tick once for each 1000 tiles + if spaceship.is_doing_check then + Spaceship.integrity_check_tick(spaceship) + end + end + else + Spaceship.integrity_check_tick(spaceship) + end + elseif spaceship.console and spaceship.console.valid and (game.tick + spaceship.console.unit_number) % (Spaceship.integrity_pulse_interval) == 0 and spaceship.console.energy > 0 then + Spaceship.start_slow_integrity_check(spaceship) + end + + if spaceship.console and spaceship.console.valid and (game.tick + spaceship.console.unit_number) % 60 == 0 then + -- read signals + local red = spaceship.console.get_circuit_network(defines.wire_type.red) + local green = spaceship.console.get_circuit_network(defines.wire_type.green) + + -- set speed + if spaceship.target_speed_source ~= "manual-override" then + local signal_target_speed = util.signal_from_wires(red, green, Spaceship.signal_for_speed) + if signal_target_speed > 0 then + spaceship.target_speed = signal_target_speed + 0.5 + spaceship.target_speed_source = "circuit" + elseif signal_target_speed < 0 then + spaceship.stopped = true + spaceship.target_speed = nil + spaceship.target_speed_source = "circuit" + elseif not spaceship.stopped then + -- 0 means use set targets + local last_target_speed = spaceship.target_speed + local asteroid_density = spaceship.asteroid_density or SpaceshipObstacles.default_asteroid_density + if spaceship.future_asteroid_density and spaceship.future_asteroid_density > asteroid_density then + asteroid_density = spaceship.future_asteroid_density + end + if asteroid_density == SpaceshipObstacles.default_asteroid_density then + spaceship.target_speed = spaceship.target_speed_normal + spaceship.target_speed_source = "normal" + elseif asteroid_density == SpaceshipObstacles.asteroid_density_by_zone_type['asteroid-belt'] then + spaceship.target_speed = spaceship.target_speed_belt or spaceship.target_speed_normal + spaceship.target_speed_source = "asteroid-belt" + elseif asteroid_density == SpaceshipObstacles.asteroid_density_by_zone_type['asteroid-field'] then + spaceship.target_speed = spaceship.target_speed_field or spaceship.target_speed_belt or spaceship.target_speed_normal + spaceship.target_speed_source = "asteroid-field" + end + -- target speed was set to nil which means the fields are empty and target speed should be unlimited + if not spaceship.target_speed then + if last_target_speed and spaceship.is_moving then Spaceship.activate_engines(spaceship) end -- if spaceship was being speed throttled then need to fire all engines now that it's unlimited (but only once) + spaceship.target_speed_source = nil + end + end + end + + -- set destination + for signal_name, type in pairs(Zone.signal_to_zone_type) do + local value = util.signal_from_wires(red, green, {type = "virtual", name = signal_name}) + if value > 0 then + local zone = Zone.from_zone_index(value) + if zone and zone.type == type then + if Zone.is_visible_to_force(zone, spaceship.force_name) or global.debug_view_all_zones then + if (not spaceship.destination) or (spaceship.destination.type == "zone" and spaceship.destination.index ~= value) then + spaceship.destination = { type = "zone", index = value } + Spaceship.update_output_combinator(spaceship) + end + break + end + end + end + end + -- TODO: allow spacwhip as destination + + -- launch + if not spaceship.own_surface_index and not spaceship.entities_to_restore then + if (red and red.get_signal(Spaceship.signal_for_launch) > 0) + or (green and green.get_signal(Spaceship.signal_for_launch) > 0) then + spaceship.is_launching = true + spaceship.is_launching_automatically = true + spaceship.is_landing = false + Spaceship.start_integrity_check(spaceship) + end + end + + -- land + if Spaceship.is_on_own_surface(spaceship) + and not spaceship.entities_to_restore + and spaceship.destination + and spaceship.destination.type == "zone" + and Spaceship.is_near_destination(spaceship) then + SpaceshipClamp.attempt_anchor_spaceship(spaceship, red, green) + end + + end + + -- delayed launch (either until the number of waiting chunk requests is finished or a maximum delay is reached) + if spaceship.awaiting_requests and (spaceship.requests_made <= 0 or (game.tick - spaceship.await_start_tick) >= Spaceship.tick_max_await) then + local params = spaceship.clone_params + SpaceshipClone.clone(spaceship, params.clone_from, params.clone_to, params.clone_delta) + spaceship.awaiting_requests = false + spaceship.clone_params = nil + end + + -- don't upkeep the ship as if it is in-transit until it has actually cloned to the own_surface_index surface + -- maybe use Spaceship.is_on_own_surface(spaceship) instead + if spaceship.own_surface_index and not spaceship.awaiting_requests then + -- space upkeep + if game.tick % Spaceship.tick_interval_move == 0 then + Spaceship.surface_tick(spaceship, Spaceship.tick_interval_move) + end + + if spaceship.target_speed and spaceship.is_moving == false and spaceship.stopped then + spaceship.stopped = false + end + + -- this has to be done every tick for seamless movement + local surface = Spaceship.get_own_surface(spaceship) + SpaceshipObstacles.tick_entity_obstacles(spaceship, surface) + + -- navigation + if spaceship.integrity_valid + and spaceship.destination + and not spaceship.stopped + and not Spaceship.is_near_destination(spaceship) then + -- wants to move and can move + if not spaceship.is_moving then + spaceship.is_moving = true + Spaceship.activate_engines(spaceship) + Spaceship.start_integrity_check(spaceship) + end + + if (game.tick % 6) == 0 then + if spaceship.target_speed and spaceship.is_moving and spaceship.engines then + if spaceship.speed > spaceship.target_speed then + for _, engine in pairs(spaceship.engines) do + if engine.entity.valid and math.random() < 1/table_size(spaceship.engines) then + engine.entity.active = false + Spaceship.update_smoke(spaceship, engine) + end + end + else + for _, engine in pairs(spaceship.engines) do + if engine.entity.valid and math.random() < 1/table_size(spaceship.engines) then + engine.entity.active = true + Spaceship.update_smoke(spaceship, engine) + end + end + end + end + end + + if game.tick % Spaceship.tick_interval_move == 0 then + Spaceship.apply_engine_thust(spaceship, Spaceship.tick_interval_move) + Spaceship.apply_drag(spaceship, Spaceship.tick_interval_move) + Spaceship.move_to_destination(spaceship, Spaceship.tick_interval_move) + end + else + -- can't move + if spaceship.is_moving then + spaceship.is_moving = false + Spaceship.deactivate_engines(spaceship) + end + if Spaceship.is_near_destination(spaceship) then + spaceship.speed = 0 + spaceship.travel_message = {"space-exploration.spaceship-travel-message-at-destination"} + end + if spaceship.speed > 0 then + local drag = Spaceship.space_drag * (2 - (spaceship.streamline or 0)) + spaceship.speed = math.max(0, spaceship.speed * (1 - Spaceship.space_drag) - (spaceship.stopped and 0.1 or 0.02)) + end + end + end + + + else + Spaceship.destroy(spaceship) + return + end + + if game.tick % 60 == 0 then + Spaceship.update_output_combinator(spaceship) + end + +end + +function Spaceship.update_output_combinator(spaceship) + + if not (spaceship.console and spaceship.console.valid) then return end + if not (spaceship.console_output and spaceship.console_output.valid) then + -- spawn the console output + local console = spaceship.console + local output_position = util.vectors_add(console.position, Spaceship.console_output_offset) + local output = util.find_entity_or_revive_ghost(console.surface, Spaceship.name_spaceship_console_output, output_position) + if not output then + output = console.surface.create_entity{ + name = Spaceship.name_spaceship_console_output, + position = util.vectors_add(console.position, Spaceship.console_output_offset), + force = console.force + } + end + spaceship.console_output = output + end + if spaceship.console_output and spaceship.console_output.valid then + local ctrl = spaceship.console_output.get_or_create_control_behavior() + + local slot = 1 + -- Spaceship ID + ctrl.set_signal(slot, {signal=Spaceship.signal_for_own_spaceship_id, count=spaceship.index}) + slot = slot + 1 + -- Speed + if spaceship.is_moving and spaceship.speed > 0 then + ctrl.set_signal(slot, {signal=Spaceship.signal_for_speed, count=math.max(1, spaceship.speed)}) + elseif Spaceship.is_on_own_surface(spaceship) then + ctrl.set_signal(slot, {signal=Spaceship.signal_for_speed, count=-1}) -- stopped + else + ctrl.set_signal(slot, {signal=Spaceship.signal_for_speed, count=-2}) -- anchored + end + slot = slot + 1 + + -- Distance + if (not spaceship.distance_to_destination_tick) or spaceship.distance_to_destination_tick + 60 < game.tick then + spaceship.distance_to_destination = Spaceship.get_distance_to_destination(spaceship) + spaceship.distance_to_destination_tick = game.tick + end + + if spaceship.destination and Spaceship.is_near_destination(spaceship) then + ctrl.set_signal(slot, {signal=Spaceship.signal_for_distance, count=-1}) + elseif spaceship.destination and Spaceship.is_at_destination(spaceship) then + ctrl.set_signal(slot, {signal=Spaceship.signal_for_distance, count=-2}) + elseif spaceship.distance_to_destination and spaceship.distance_to_destination > 0 then + ctrl.set_signal(slot, {signal=Spaceship.signal_for_distance, count=math.max(1, spaceship.distance_to_destination)}) + else --no destination + ctrl.set_signal(slot, {signal=Spaceship.signal_for_distance, count=-3}) + end + slot = slot + 1 + + -- Destination + if spaceship.destination then + if spaceship.destination.type == "spaceship" then + ctrl.set_signal(slot, {signal=Spaceship.signal_for_destination_spaceship, count=spaceship.destination.index}) + elseif spaceship.destination.type == "zone" then + local zone = Spaceship.get_destination_zone(spaceship) + local signal_name = Zone.get_signal_name(zone) + ctrl.set_signal(slot, {signal={type="virtual", name=signal_name}, count=zone.index}) + else + ctrl.set_signal(slot, {signal=Spaceship.signal_for_destination_spaceship, count=0}) + end + else + ctrl.set_signal(slot, {signal=Spaceship.signal_for_destination_spaceship, count=0}) + end + slot = slot + 1 + + -- Asteroid Density + if spaceship.asteroid_density then + ctrl.set_signal(slot, {signal={type = "virtual", name = "signal-D"}, count=spaceship.asteroid_density * 100}) + else + ctrl.set_signal(slot, {signal={type = "virtual", name = "signal-D"}, count=SpaceshipObstacles.default_asteroid_density * 100}) + end + slot = slot + 1 + + -- Anchor (only change if the ship is not in the middle of launching) + if not spaceship.awaiting_requests then + if spaceship.zone_index then + ctrl.set_signal(slot, {signal={type = "virtual", name = "signal-A"}, count=spaceship.zone_index}) + else + ctrl.set_signal(slot, {signal={type = "virtual", name = "signal-A"}, count=0}) + end + slot = slot + 1 + end + end +end + +--- Updates all spaceships, potentially launching/landing them or spawning/destroying/changing speed of obstacles +--- or updating their guis or updating anchor scoutin +---@param event any +function Spaceship.on_tick(event) + -- update asteroid density + for _, spaceship in pairs(global.spaceships) do + if spaceship.console and spaceship.console.valid and Spaceship.is_on_own_surface(spaceship) then + if (game.tick + spaceship.console.unit_number) % Spaceship.tick_interval_density == 0 then + spaceship.asteroid_density = 0 + if spaceship.speed > 5 then + local target_zone = Spaceship.get_destination_zone(spaceship) + if target_zone then + local spaceship_lookahead = { + type = "spaceship-lookahead", + speed = spaceship.speed, + stellar_position = spaceship.stellar_position, + space_distortion = spaceship.space_distortion, + star_gravity_well = spaceship.star_gravity_well, + planet_gravity_well = spaceship.planet_gravity_well, + } + Spaceship.move_to_destination_basic(spaceship_lookahead, target_zone, 5 * 60) -- 5 seconds + spaceship.future_asteroid_density = SpaceshipObstacles.get_asteroid_density(spaceship_lookahead) + end + end + spaceship.asteroid_density = SpaceshipObstacles.get_asteroid_density(spaceship) + end + end + end + + -- update spaceships + if global.spaceships then + for _, spaceship in pairs(global.spaceships) do + Spaceship.spaceship_tick(spaceship) + end + end + + -- update guis + if game.tick % Spaceship.tick_interval_gui == 0 then + for _, player in pairs(game.connected_players) do + SpaceshipGUI.gui_update(player) + end + end + + -- update obstacles + SpaceshipObstacles.tick_projectile_speeds() + + -- update anchoring + if game.tick % Spaceship.tick_interval_anchor == 0 then + for _, player in pairs(game.connected_players) do + local playerdata = get_make_playerdata(player) + if playerdata and playerdata.anchor_scouting_for_spaceship_index then + Spaceship.anchor_scouting_tick(player, Spaceship.from_index(playerdata.anchor_scouting_for_spaceship_index)) + end + end + end +end +Event.addListener(defines.events.on_tick, Spaceship.on_tick) + +--[[ +function Spaceship.on_chunk_generated(event) + local area = event.area + local surface = event.surface + local spaceship = Spaceship.from_own_surface_index(surface.index) + if spaceship then + area.right_bottom.x = area.right_bottom.x + 0.99 + area.right_bottom.y = area.right_bottom.y + 0.99 + entities = surface.find_entities_filtered{ + area = area + } + for _, entity in pairs(entities) do -- rocks + entity.destroy() + end + local bad_tiles = surface.find_tiles_filtered{name={name_asteroid_tile, "out-of-map"}} + local set_tiles = {} + for _, tile in pairs(bad_tiles) do + table.insert(set_tiles, {position = tile.position, name=name_space_tile}) + surface.set_hidden_tile(tile.position, name_space_tile) + end + surface.set_tiles(set_tiles) + end +end +Event.addListener(defines.events.on_chunk_generated, Spaceship.on_chunk_generated) +]]-- + +function Spaceship.flash_tile(surface, position, color, time) + local a = (color.a or 1) + rendering.draw_rectangle{ + color = {r = color.r * a, g = color.g * a, b = color.b * a, a = a}, + filled = true, + left_top = position, + right_bottom = {(position.x or position[1])+1, (position.y or position[2])+1}, + surface = surface, + time_to_live = time + } +end + +function Spaceship.calculate_integrity_stress(spaceship, area) + + spaceship.integrity_stress_structure = 0 + spaceship.integrity_stress_container = 0 + + -- use all tiles for the cost even if they are not connected + -- get walls for an integrity discount + local surface = Spaceship.get_current_surface(spaceship) + if not surface then surface = spaceship.console.surface end + + if not area then --- whole surface + spaceship.tile_count = surface.count_tiles_filtered{name = Spaceship.names_spaceship_floors} + spaceship.wall_count = surface.count_entities_filtered{name = Spaceship.names_spaceship_walls} + else + spaceship.tile_count = spaceship.known_floor_tiles + spaceship.known_bulkhead_tiles + spaceship.wall_count = 0 + local walls = surface.find_entities_filtered{name = Spaceship.names_spaceship_walls, area = area} + for _, wall in pairs(walls) do + local tile_pos = Util.position_to_tile(wall.position) + if spaceship.known_tiles[tile_pos.x] and spaceship.known_tiles[tile_pos.x][tile_pos.y] == Spaceship.tile_status.bulkhead_console_connected then + spaceship.wall_count = spaceship.wall_count + 1 + end + end + end + + -- Find weakpoints in the design + -- If very narrow sections are used in the middle those are not strong, + -- so we need to increase the cost not decrease it if it gets too narrow. + -- Scan from front and back so decorative pointy bits are not a problem + -- don't increase width in jump, follow the edge more loosely. + -- phantom tiles start at the 50% reduced with mark. + -- They should not have full effect immediatly. + local widths = {} + for x, x_tiles in pairs(spaceship.known_tiles) do + for y, state in pairs(x_tiles) do + if state == Spaceship.tile_status.floor_console_connected or state == Spaceship.tile_status.bulkhead_console_connected then + widths[y] = (widths[y] or 0) + 1 + end + end + end + local front_y = spaceship.known_bounds.left_top.y + local back_y = spaceship.known_bounds.right_bottom.y + + local front_max_width = 0 + local back_max_width = 0 + + local phantom_tiles = 0 + + local widths_total = 0 + for _, width in pairs(widths) do + widths_total = widths_total + width + end + local width_average = widths_total / table_size(widths) + + while front_y <= back_y do + if front_max_width <= back_max_width then + if widths[front_y] then + local width = widths[front_y] + if front_max_width < width then + front_max_width = math.min(width, front_max_width + 2) + end + if width < front_max_width / 2 then + -- tiles in more extreme hollows count more + local hollow = (front_max_width / 2 - width) + phantom_tiles = phantom_tiles + hollow * hollow / (front_max_width / 2) + end + end + front_y = front_y + 1 + else + if widths[back_y] then + local width = widths[back_y] + if back_max_width < width then + back_max_width = math.min(width, back_max_width + 2) + end + if width < back_max_width / 2 then + local hollow = (back_max_width / 2 - width) + phantom_tiles = phantom_tiles + hollow * hollow / (front_max_width / 2) + end + end + back_y = back_y - 1 + end + end + if phantom_tiles > 0 then + Log.trace("phantom_tiles " .. phantom_tiles) + end + + spaceship.container_slot_count = 0 + + local containers = surface.find_entities_filtered{ type = {"container", "logistic-container", "car", "spider-vehicle", "locomotive", "cargo-wagon"}, area = area} + + for _, container in pairs(containers) do + local tile_pos = Util.position_to_tile(container.position) + if area == nil or (spaceship.known_tiles[tile_pos.x] and spaceship.known_tiles[tile_pos.x][tile_pos.y] == Spaceship.tile_status.floor_console_connected) then + local container_size = container.prototype.get_inventory_size(defines.inventory.car_trunk) or (container.prototype.get_inventory_size(defines.inventory.chest) or 0) + if container.type == "car" or container.type == "spider-vehicle" then + spaceship.container_slot_count = spaceship.container_slot_count + container_size + elseif container.type == "locomotive" or container.type == "cargo-wagon" then + spaceship.container_slot_count = spaceship.container_slot_count + container_size / 10 + else + spaceship.container_slot_count = spaceship.container_slot_count + container_size + end + if container.type == "car" or container.type == "spider-vehicle" or container.type == "locomotive" or container.type == "cargo-wagon" then + if container.grid then + local grid_usage = 0 + for _, equipment in pairs(container.grid.equipment) do + if equipment and equipment.shape and equipment.shape.width and equipment.shape.height then + grid_usage = grid_usage + equipment.shape.width * equipment.shape.height + end + end + spaceship.integrity_stress_structure = spaceship.integrity_stress_structure + grid_usage + spaceship.integrity_stress_container = spaceship.integrity_stress_container + grid_usage + end + end + end + end + + spaceship.container_fluid_capacity = 0 + + local containers = surface.find_entities_filtered{type = {"storage-tank", "fluid-wagon"}, area = area} + for _, container in pairs(containers) do + if container.name ~= BigTurbine.name_big_turbine_tank and container.name ~= CondenserTurbine.name_condenser_turbine_tank and (not string.starts(container.name, "se-space-pipe")) then + local mult = 2 + if container.type == "fluid-wagon" then + mult = 0.1 + else + if string.find(container.name, "booster", 1, true) then mult = 0.5 end + if container.name == "storage-tank" then mult = 1 end + end + local tile_pos = Util.position_to_tile(container.position) + if area == nil or (spaceship.known_tiles[tile_pos.x] and spaceship.known_tiles[tile_pos.x][tile_pos.y] == Spaceship.tile_status.floor_console_connected) then + if container.fluidbox and #container.fluidbox > 0 then + local i = 1 + for i = 1, #container.fluidbox do + if container.fluidbox[1] and container.fluidbox[1].name == "steam" then + spaceship.container_fluid_capacity = spaceship.container_fluid_capacity + 2 * mult * container.fluidbox.get_capacity(i) + else + spaceship.container_fluid_capacity = spaceship.container_fluid_capacity + mult * container.fluidbox.get_capacity(i) + end + end + end + end + end + end + + spaceship.speed_multiplier = 1 + + -- name-based entity modifiers + local names = {} + local name_effects = {} + for _, ia_name in pairs(Spaceship.integrity_affecting_names) do + if ia_name.mod == nil or game.active_mods[ia_name.mod] then + table.insert(names, ia_name.name) + name_effects[ia_name.name] = ia_name + end + end + local entities = surface.find_entities_filtered{name = names, area = area} + for _, entity in pairs(entities) do + local tile_pos = Util.position_to_tile(entity.position) + if area == nil or (spaceship.known_tiles[tile_pos.x] and spaceship.known_tiles[tile_pos.x][tile_pos.y] == Spaceship.tile_status.floor_console_connected) then + local name_effect_set = name_effects[entity.name] + if name_effect_set.integrity_stress_container then + spaceship.integrity_stress_container = spaceship.integrity_stress_container + name_effect_set.integrity_stress_container + end + if name_effect_set.integrity_stress_structure then + spaceship.integrity_stress_structure = spaceship.integrity_stress_structure + name_effect_set.integrity_stress_structure + end + if name_effect_set.max_speed_multiplier then + spaceship.speed_multiplier = math.min(spaceship.speed_multiplier, name_effect_set.max_speed_multiplier) + end + end + end + + -- type-based entity modifiers + local types = {} + local type_effects = {} + for _, ia_type in pairs(Spaceship.integrity_affecting_types) do + if ia_type.mod == nil or game.active_mods[ia_type.mod] then + table.insert(types, ia_type.type) + type_effects[ia_type.type] = ia_type + end + end + local entities = surface.find_entities_filtered{type = types, area = area} + for _, entity in pairs(entities) do + local tile_pos = Util.position_to_tile(entity.position) + if area == nil or (spaceship.known_tiles[tile_pos.x] and spaceship.known_tiles[tile_pos.x][tile_pos.y] == Spaceship.tile_status.floor_console_connected) then + local type_effect_set = type_effects[entity.type] + if type_effect_set.integrity_stress_container then + spaceship.integrity_stress_container = spaceship.integrity_stress_container + type_effect_set.integrity_stress_container + end + if type_effect_set.integrity_stress_structure then + spaceship.integrity_stress_structure = spaceship.integrity_stress_structure + type_effect_set.integrity_stress_structure + end + if type_effect_set.max_speed_multiplier then + spaceship.speed_multiplier = math.min(spaceship.speed_multiplier, type_effect_set.max_speed_multiplier) + end + end + end + + -- container slot is 0.5 or 24 for a normal container 4800 ish items. Cost is 24 + -- container can caryy 48 * 10 barrels = 24k fluid + -- storage tank is 5, 25k fluids = 250 effective items. Cost is 12.5 (50% discount) + -- booster tanks cost50% less + --Log.trace((spaceship.count_empty_tiles or 0) .." / "..(spaceship.tile_count - spaceship.wall_count)) + local empty_tiles = spaceship.count_empty_tiles or 0 + spaceship.integrity_stress_structure = + spaceship.integrity_stress_structure + + spaceship.tile_count + + phantom_tiles * 0.25 + - spaceship.wall_count * 0.75 + + spaceship.integrity_stress_container = + spaceship.integrity_stress_container + + spaceship.container_slot_count/2 + + spaceship.container_fluid_capacity / 2000 + + -- if the ship is very long and thin start taking integrity penalties. + local length = spaceship.known_bounds.right_bottom.y - spaceship.known_bounds.left_top.y + -- over 4:1 length gets a penalty of 5% per additional length + local integrity_multiplier = math.max(1, 1 + 0.05 * (length / width_average - 4)) + spaceship.integrity_stress_structure = spaceship.integrity_stress_structure * integrity_multiplier + spaceship.integrity_stress_container = spaceship.integrity_stress_container + + -- corridor allowance + spaceship.integrity_stress_structure_max = spaceship.integrity_stress_structure + spaceship.integrity_stress_structure = spaceship.integrity_stress_structure_max + -- this encourages keeping 10% of the tital size empty. + - math.min(spaceship.tile_count * 0.1, empty_tiles) + -- this encourages keeping 20% of the internal space empty. + -- math.min((spaceship.tile_count - spaceship.wall_count) * 0.2, empty_tiles) + -- this has the first empty tile discounted by 1, the last by 0, if 20% of the ship is empty they are discouted by 80% + -- empty_tiles * math.max(0, 1 - empty_tiles / (spaceship.tile_count - spaceship.wall_count)) + + spaceship.integrity_stress = math.max(spaceship.integrity_stress_structure, spaceship.integrity_stress_container) + + if spaceship.integrity_stress > spaceship.integrity_limit then + spaceship.integrity_valid = false + spaceship.check_message = {"space-exploration.spaceship-check-message-failed-stress"} + end + +end + +function Spaceship.check_integrity_stress(spaceship) + spaceship.integrity_limit = Spaceship.get_integrity_limit(game.forces[spaceship.force_name]) + if Spaceship.is_on_own_surface(spaceship) then + -- use all tiles + Spaceship.calculate_integrity_stress(spaceship, nil) -- whole area + elseif not (spaceship.console and spaceship.console.valid) then + spaceship.integrity_valid = false + spaceship.check_message= {"space-exploration.spaceship-check-message-no-console"} + elseif not spaceship.integrity_valid then + -- already invalid + elseif not spaceship.known_bounds then + spaceship.integrity_valid = false + spaceship.check_message= {"space-exploration.spaceship-check-message-failed-unknown-bounds"} + elseif spaceship.integrity_valid and spaceship.known_bounds and spaceship.known_tiles then + Spaceship.calculate_integrity_stress(spaceship, spaceship.known_bounds) -- limited area + + --[[ TODO: use improved know tiles approach + and spaceship.known_tile_count and spaceship.known_wall_count then + spaceship.integrity_stress = spaceship.known_tile_count - spaceship.known_wall_count / 2 + if spaceship.integrity_stress > spaceship.integrity_limit then + spaceship.integrity_valid = false + spaceship.check_message = "Fail: Structural integrity stress exceeds technology limit." + end + ]]-- + end + +end + +function Spaceship.start_slow_integrity_check(spaceship, alpha) + spaceship.is_doing_check_slowly = true + Spaceship.start_integrity_check(spaceship, alpha) +end + +function Spaceship.start_integrity_check(spaceship, alpha) + if alpha then + spaceship.check_flash_alpha = alpha + end + spaceship.is_doing_check = true +end + +function Spaceship.stop_integrity_check(spaceship) + spaceship.check_flash_alpha = nil + spaceship.is_doing_check = nil + spaceship.is_doing_check_slowly = nil + spaceship.check_stage = nil + spaceship.pending_tiles = nil + spaceship.streamline = nil + if spaceship.integrity_valid and spaceship.check_tiles then + -- success + spaceship.count_empty_tiles = spaceship.check_count_empty_tiles + spaceship.check_count_empty_tiles = nil + + spaceship.known_tiles = table.deepcopy(spaceship.check_tiles) + spaceship.check_tiles = nil + + -- get the average for surface transfer + local min_x = nil + local max_x = nil + local min_y = nil + local max_y = nil + local floor_tiles = 0 + local bulkhead_tiles = 0 + local front_tiles = {} -- x:y + for x, x_tiles in pairs(spaceship.known_tiles) do + if min_x == nil or x < min_x then min_x = x end + if max_x == nil or x > max_x then max_x = x end + for y, status in pairs(x_tiles) do + if status == Spaceship.tile_status.floor_console_connected + or status == Spaceship.tile_status.bulkhead_console_connected then + if min_y == nil or y < min_y then min_y = y end + if max_y == nil or y > max_y then max_y = y end + if status == Spaceship.tile_status.floor_console_connected then + floor_tiles = floor_tiles + 1 + else + bulkhead_tiles = bulkhead_tiles + 1 + end + if (not front_tiles[x]) or y < front_tiles[x] then + front_tiles[x] = y + end + end + end + end + max_x = max_x + 1 -- whole tile + max_y = max_y + 1 -- whole tile + spaceship.known_floor_tiles = floor_tiles + spaceship.known_bulkhead_tiles = bulkhead_tiles + spaceship.known_bounds = {left_top = {x = min_x, y = min_y}, right_bottom={x = max_x, y = max_y}} + spaceship.known_tiles_average_x = math.floor((min_x + max_x)/2) + spaceship.known_tiles_average_y = math.floor((min_y + max_y)/2) + local front_tiles_by_y = {} -- y:count + local front_tiles_by_y_left = {} -- y:count + local front_tiles_by_y_right = {} -- y:count + local max_flat = 0 + for x, y in pairs(front_tiles) do + front_tiles_by_y[y] = (front_tiles_by_y[y] or 0) + 1 + if front_tiles_by_y[y] > max_flat then + max_flat = front_tiles_by_y[y] + end + if x < spaceship.known_tiles_average_x then + front_tiles_by_y_left[y] = (front_tiles_by_y_left[y] or 0) + 1 + else + front_tiles_by_y_right[y] = (front_tiles_by_y_right[y] or 0) + 1 + end + end + local width = max_x - min_x + -- max_flat == width = 0 + -- max_flat == width / 3 = 1 + local streamline_flatness = math.min(1, (1 - (max_flat-2) / (width-2)) * 1.5) + local streamline_left = math.min(1, 2 * (table_size(front_tiles_by_y_left)-1) / (math.max(0.5, (width-1) / 2.5))) + local streamline_right = math.min(1, 2 * (table_size(front_tiles_by_y_right)-1) / (math.max(0.5, (width-1) / 2.5))) + spaceship.streamline = (streamline_flatness + streamline_left + streamline_right + + 3 * math.min(streamline_flatness, math.min(streamline_left, streamline_right))) / 6 + --spaceship.streamline = math.min(1, 3.5 * (table_size(front_tiles_by_y)-1) / width) + -- if it is symetrical then 1/2 would be max (excluding the -1) + -- use 1/3.5 as max so there can be a few flat areas + Log.trace("streamline flat "..streamline_flatness.." left "..streamline_left.." right "..streamline_right) + --Log.trace("streamline "..spaceship.streamline ) + if Spaceship.is_on_own_surface(spaceship) then + Spaceship.find_own_surface_engines(spaceship) + end + else + spaceship.integrity_valid = false + spaceship.check_tiles = nil + spaceship.check_message = {"space-exploration.spaceship-check-message-failed-empty"} + end + + --spaceship.check_message = nil + if spaceship.console and spaceship.console.valid then + --spaceship.console.force.print("Spaceship integrity check complete.") + end + + Spaceship.check_integrity_stress(spaceship) + + if spaceship.is_launching then + Spaceship.launch(spaceship) + end +end + +function Spaceship.integrity_check_tick(spaceship) + if not(spaceship.console and spaceship.console.valid) then + spaceship.check_message= {"space-exploration.spaceship-check-message-no-console"} + spaceship.integrity_valid = false + Spaceship.stop_integrity_check(spaceship) + return + end + + local surface = spaceship.console.surface + -- check if the player is around + local player_is_here = not SpaceshipObstacles.surface_has_no_players(surface) + + if not (spaceship.check_stage and spaceship.check_tiles and spaceship.pending_tiles) then + local start_tile = surface.get_tile(spaceship.console.position) + if Spaceship.is_floor(start_tile.name) then + Spaceship.check_message = nil + Spaceship.is_doing_check = true + -- floor tiles is a 2d array x then y + spaceship.check_count_empty_tiles = 0 + spaceship.check_tiles = {} + spaceship.check_tiles[start_tile.position.x] = {} + spaceship.check_tiles[start_tile.position.x][start_tile.position.y] = Spaceship.tile_status.floor + spaceship.pending_tiles = {} + spaceship.pending_tiles[start_tile.position.x] = {} + spaceship.pending_tiles[start_tile.position.x][start_tile.position.y] = true + spaceship.check_stage = "floor-connectivity" + spaceship.check_message= {"space-exploration.spaceship-check-message-checking-console-floor"} + else + spaceship.check_message= {"space-exploration.spaceship-check-message-failed-console-floor"} + spaceship.integrity_valid = false + Spaceship.stop_integrity_check(spaceship) + return + end + end + if not (spaceship.check_tiles and spaceship.pending_tiles) then return end + + local alpha = spaceship.check_flash_alpha or 0.05 + + -- do a round of checking + -- check_tiles. List of tiles to check this tick. + + -- pending_tiles should always exists in check_tiles + -- it basically justs keeps a lst of which ones to search + + local next_pending_tiles = {} + local changed = false + + if spaceship.check_stage == "floor-connectivity" then + local position_table = {} + for x, x_tiles in pairs(spaceship.pending_tiles) do + for y, yes in pairs(x_tiles) do + local value = spaceship.check_tiles[x][y] + if value == Spaceship.tile_status.floor or value == Spaceship.tile_status.bulkhead then + for d = 1, 4 do -- 4 way direction + local cx = x + (d == 2 and 1 or (d == 4 and -1 or 0)) + local cy = y + (d == 1 and -1 or (d == 3 and 1 or 0)) + if not (spaceship.check_tiles[cx] and spaceship.check_tiles[cx][cy]) then -- unknown tile + changed = true + local tile = surface.get_tile({cx, cy}) + position_table.x = cx + 0.5 + position_table.y = cy + 0.5 + local wall_count = surface.count_entities_filtered{ + position = position_table, + name = Spaceship.names_spaceship_bulkheads + } + if tile.valid and Spaceship.is_floor(tile.name) then + spaceship.check_tiles[cx] = spaceship.check_tiles[cx] or {} + if wall_count > 0 then + spaceship.check_tiles[cx][cy] = Spaceship.tile_status.bulkhead + if player_is_here and not spaceship.is_doing_check_slowly then + Spaceship.flash_tile(surface, {cx, cy}, {r = 0, g = 0, b = 1, a = alpha}, 5) + end + else + spaceship.check_tiles[cx][cy] = Spaceship.tile_status.floor + if player_is_here and not spaceship.is_doing_check_slowly then + Spaceship.flash_tile(surface, {cx, cy}, {r = 0, g = 1, b = 0, a = alpha}, 5) + end + end + next_pending_tiles[cx] = next_pending_tiles[cx] or {} + next_pending_tiles[cx][cy] = true + else + spaceship.check_tiles[cx] = spaceship.check_tiles[cx] or {} + if wall_count > 0 then + position_table.x = cx + 0.5 + position_table.y = cy + 0.5 + local clamps = surface.count_entities_filtered{ + position = position_table, + name = SpaceshipClamp.name_spaceship_clamp_keep + } + if clamps > 0 then + -- if it is a clamp sticking out of the craft treat it as exterior, + -- otherwise it is treated as unstaeble bulkhead and takes damage + spaceship.check_tiles[cx][cy] = Spaceship.tile_status.exterior + if player_is_here and not spaceship.is_doing_check_slowly then + Spaceship.flash_tile(surface, {cx, cy}, {r = 1, g = 0, b = 1, a = alpha}, 5) + end + else + spaceship.check_tiles[cx][cy] = Spaceship.tile_status.bulkhead_exterior + if player_is_here and not spaceship.is_doing_check_slowly then + Spaceship.flash_tile(surface, {cx, cy}, {r = 1, g = 0, b = 0, a = alpha}, 5) + end + end + else + spaceship.check_tiles[cx][cy] = Spaceship.tile_status.exterior + if player_is_here and not spaceship.is_doing_check_slowly then + Spaceship.flash_tile(surface, {cx, cy}, {r = 1, g = 0, b = 1, a = alpha}, 5) + end + end + end + end + end + end + end + end + if changed == false then + -- all connected tiles have been found + -- if in space and if moving detach disconnected tiles + if spaceship.is_moving then + local surface = Spaceship.get_own_surface(spaceship) + if surface then + local set_tiles = {} + local all_tiles = surface.find_tiles_filtered{name=Spaceship.names_spaceship_floors} + for _, tile in pairs(all_tiles) do + if not (spaceship.check_tiles[tile.position.x] and spaceship.check_tiles[tile.position.x][tile.position.y]) then + local stack = tile.prototype.items_to_place_this[1] + table.insert(set_tiles, {name = name_space_tile, position = tile.position, ghost_name = tile.name, stack = stack}) + if player_is_here then + Spaceship.flash_tile(surface, tile.position, {r = 1, g = 0, b = 0, a = alpha}, 120) + end + end + end + if #set_tiles > 0 then + surface.set_tiles(set_tiles) + for _, tile in pairs(set_tiles) do + if Util.table_contains(Spaceship.names_spaceship_floors, tile.ghost_name) then + surface.create_entity{name = "tile-ghost", inner_name = tile.ghost_name, force = spaceship.force_name, position=tile.position} + end + end + end + end + end + + changed = true + spaceship.check_stage = "containment" + spaceship.check_message = {"space-exploration.spaceship-check-message-checking-containment"} + for x, x_tiles in pairs(spaceship.check_tiles) do + for y, status in pairs(x_tiles) do + if status == Spaceship.tile_status.exterior + or status == Spaceship.tile_status.bulkhead_exterior then + next_pending_tiles[x] = next_pending_tiles[x] or {} + next_pending_tiles[x][y] = true + end + end + end + + end + elseif spaceship.check_stage == "containment" then + for x, x_tiles in pairs(spaceship.pending_tiles) do + for y, yes in pairs(x_tiles) do + local value = spaceship.check_tiles[x][y] + if value == Spaceship.tile_status.exterior + or value == Spaceship.tile_status.bulkhead_exterior + or value == Spaceship.tile_status.floor_exterior then + for cx = x-1, x+1 do + for cy = y-1, y+1 do + if spaceship.check_tiles[cx] and spaceship.check_tiles[cx][cy] + and spaceship.check_tiles[cx][cy] == Spaceship.tile_status.floor then + spaceship.check_tiles[cx][cy] = Spaceship.tile_status.floor_exterior + changed = true + next_pending_tiles[cx] = next_pending_tiles[cx] or {} + next_pending_tiles[cx][cy] = true + if player_is_here and not spaceship.is_doing_check_slowly then + Spaceship.flash_tile(surface, {cx, cy}, {r = 1, g = 1, b = 0, a = alpha}, 30) + end + end + end + end + end + end + end + if changed == false then + changed = true + -- convert non-exterior floor to interior + for x, x_tiles in pairs(spaceship.check_tiles) do + for y, status in pairs(x_tiles) do + if status == Spaceship.tile_status.floor then + spaceship.check_tiles[x][y] = Spaceship.tile_status.floor_interior + if player_is_here and not spaceship.is_doing_check_slowly then + Spaceship.flash_tile(surface, {x, y}, {r = 0, g = 0, b = 1, a = alpha}, 40) + end + end + end + end + local console_tile_x = math.floor(spaceship.console.position.x) + local console_tile_y = math.floor(spaceship.console.position.y) + if spaceship.check_tiles and spaceship.check_tiles[console_tile_x] and spaceship.check_tiles[console_tile_x][console_tile_y] == Spaceship.tile_status.floor_interior then + spaceship.check_tiles[console_tile_x][console_tile_y] = Spaceship.tile_status.floor_console_connected + next_pending_tiles[console_tile_x] = {} + next_pending_tiles[console_tile_x][console_tile_y] = true + spaceship.check_stage = "console-connectivity" + spaceship.check_message = {"space-exploration.spaceship-check-message-checking-connectivity"} + else + for x, x_tiles in pairs(spaceship.check_tiles) do + for y, status in pairs(x_tiles) do + if status == Spaceship.tile_status.exterior + or status == Spaceship.tile_status.bulkhead_exterior then + if player_is_here then + Spaceship.flash_tile(surface, {x, y}, {r = 1, g = 0, b = 0, a = alpha}, 120) + end + end + end + end + spaceship.integrity_valid = false + spaceship.check_message = {"space-exploration.spaceship-check-message-failed-containment"} + return Spaceship.stop_integrity_check(spaceship) + end + end + elseif spaceship.check_stage == "console-connectivity" then + for x, x_tiles in pairs(spaceship.pending_tiles) do + for y, yes in pairs(x_tiles) do + local value = spaceship.check_tiles[x][y] + if value == Spaceship.tile_status.floor_console_connected then + local blockers = surface.count_entities_filtered{ + position = {x + 0.5, y + 0.5}, + collision_mask = {"object-layer"} + } + if blockers == 0 then -- this tile is clear, add to corridor allowance. + spaceship.check_count_empty_tiles = (spaceship.check_count_empty_tiles or 0) + 1 + end + end + if value == Spaceship.tile_status.floor_console_connected + or value == Spaceship.tile_status.bulkhead_console_connected then + + for d = 1, 4 do -- 4 way direction + local cx = x + (d == 2 and 1 or (d == 4 and -1 or 0)) + local cy = y + (d == 1 and -1 or (d == 3 and 1 or 0)) + if spaceship.check_tiles[cx] and spaceship.check_tiles[cx][cy] and + (spaceship.check_tiles[cx][cy] == Spaceship.tile_status.floor_interior + or spaceship.check_tiles[cx][cy] == Spaceship.tile_status.bulkhead) then + if spaceship.check_tiles[cx][cy] == Spaceship.tile_status.floor_interior then + spaceship.check_tiles[cx][cy] = Spaceship.tile_status.floor_console_connected + else + spaceship.check_tiles[cx][cy] = Spaceship.tile_status.bulkhead_console_connected + end + if player_is_here and not spaceship.is_doing_check_slowly then + Spaceship.flash_tile(surface, {cx, cy}, {r = 0, g = 1, b = 1, a = alpha}, 5) + end + changed = true + next_pending_tiles[cx] = next_pending_tiles[cx] or {} + next_pending_tiles[cx][cy] = true + end + end + end + end + end + if changed == false then + -- completed the check + + spaceship.check_message = {"space-exploration.spaceship-check-message-passed"} + spaceship.integrity_valid = true + local set_tiles = {} + local reset = false + for x, x_tiles in pairs(spaceship.check_tiles) do + for y, status in pairs(x_tiles) do + if not (status == Spaceship.tile_status.floor_console_connected + or status == Spaceship.tile_status.bulkhead_console_connected + or status == Spaceship.tile_status.exterior) then + spaceship.check_message = {"space-exploration.spaceship-check-message-unstable"} + if player_is_here then + Spaceship.flash_tile(surface, {x, y}, {r = 1, g = 0, b = 0, a = alpha}, 120) + end + -- detatch + if Spaceship.is_on_own_surface(spaceship) and spaceship.is_moving then + local support = 1 -- it will count self + for cx = x-1, x+1 do + for cy = y-1, y+1 do + if spaceship.check_tiles[cx] and spaceship.check_tiles[cx][cy] then + if spaceship.check_tiles[cx][cy] ~= Spaceship.tile_status.exterior then + support = support + 1 + if spaceship.check_tiles[cx][cy] == Spaceship.bulkhead_console_connected then + support = support + 2 + end + end + end + end + end + if support <= 6 then -- has a chance to be removed + reset = true + if support - math.random(2) <= 4 then + local entities = surface.find_entities({{x,y}, {x+1,y+1}}) + local remove = true + for _, entity in pairs(entities) do + if entity and entity.valid and entity.type ~= "character" and entity.health then + entity.damage(150, "neutral", "explosion") + remove = false + end + end + if remove then + local tile = surface.get_tile(x,y) + table.insert(set_tiles, {name = name_space_tile, ghost_name=tile.name, position = {x,y}}) + end + end + end + end + end + end + end + if #set_tiles > 0 then + spaceship.check_message = {"space-exploration.spaceship-check-message-valid-but-disconnecting"} + surface.print({"space-exploration.spaceship-warning-sections-disconnecting"}) + surface.set_tiles(set_tiles) + for _, tile in pairs(set_tiles) do + if Spaceship.is_floor(tile.ghost_name) then + surface.create_entity{name = "tile-ghost", inner_name = tile.ghost_name, force = spaceship.force_name, position=tile.position} + end + end + end + + Spaceship.stop_integrity_check(spaceship) + + if reset then + Spaceship.start_integrity_check(spaceship) + return + else + Spaceship.get_compute_launch_energy(spaceship) + return + end + end + + end + + if changed then + spaceship.pending_tiles = next_pending_tiles + else + spaceship.integrity_valid = false + spaceship.check_message = {"space-exploration.spaceship-check-message-did-not-complete"} + return Spaceship.stop_integrity_check(spaceship) + end +end + +function Spaceship.on_init(event) + global.spaceships = {} +end +Event.addListener("on_init", Spaceship.on_init, true) + +return Spaceship diff --git a/space-exploration_0.5.80/space-exploration/scripts/universe-raw.lua b/space-exploration_0.5.80/space-exploration/scripts/universe-raw.lua new file mode 100644 index 0000000..35bbb2a --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/universe-raw.lua @@ -0,0 +1,937 @@ +--[[ +zone.controls = { + water = {frequency, size}, -- size is 0 to 6 + moisture = {frequency, bias},-- bias is +/- 0.5 + aux = {frequency, bias}, -- bias is +/- 0.5 + hot = {frequency, size}, -- size is 0 to 6 + cold = {frequency, size}, -- size is 0 to 6 + -other_controls = {frequency, size, richness}, -- size is 0 to 6, for resources and stuff +} +zone.climate_tags = {} +]]-- +-- climate presets + + + +-- raw universe data +local UniverseRaw = {} + +UniverseRaw.universe = { + stars = { + { + name = "Calidus", -- means hot, warm, brisk, prompt, impetuous, new + children = { + { name = "Nauvis", radius_multiplier = 0.5, children = {}} -- this is overwritten by map gen settings anyway + } + }, + {name="Astermore"}, + {name="Statarius"}, -- (Septem Statarius) Septem = seven. Statarius = stationary, standing, steady, calm, even-minded, sedate + {name="Nalara"}, + {name="Errioni"}, + {name="Kalmaia"}, + {name="Merlime"}, + {name="Halsian"}, + {name="Cordova"}, + {name="Alacrity"}, + {name="Auriel"}, + {name="Penthus"}, + {name="Angelus"}, + {name="Basilius"}, + {name="Auphorus"}, + {name="Pontus"}, + {name="Sargus"}, + {name="Rigelus"}, + {name="Tanius"}, + {name="Terebellus"}, + {name="Capellus"}, + {name="Hankorus"}, + {name="Brunnus"}, + {name="Vozanus"}, + {name="Teamagus"}, + {name="Wexovis"}, + {name="Electra"}, + {name="Sephi"}, + {name="Assimius"}, + {name="Argus"}, + {name="Calamity"}, + }, + anomaly = { -- only 1 of these, not in the 2d layer, equal disance in 3rd layer + type = "anomaly", + name = "Foenestra" -- window, loophole, Hole, breach, opening + }, + space_zones = { -- other places in the same 2d layer as stars, mostly asteroid fields: 44 + { name = "Asteroidia" }, + { name = "Astral Snow", primary_resource="se-water-ice"}, + { name = "Breadcrumbs" }, + { name = "Broken Mirror"}, + { name = "Black Mirror", primary_resource="se-naquium-ore" }, + { name = "Bumperfield"}, + { name = "Caltrops" }, + { name = "Crystal Collective"}, + { name = "Creepy Hollow" }, + { name = "Cosmic Dustlands"}, + { name = "Dark Assemblage", primary_resource="se-naquium-ore" }, + { name = "Darkflare", primary_resource="se-naquium-ore" }, + { name = "Deadspace", primary_resource="uranium-ore" }, + { name = "Dusty Voids"}, + { name = "Ephemeral Expanse", primary_resource="se-methane-ice"}, + { name = "Felleim"}, + { name = "Galactic Gravel"}, + { name = "Godash"}, + { name = "Grapeshot" }, + { name = "Galactic Graveyard" }, + { name = "Haunted Hollows" }, + { name = "Hailstorm", primary_resource="se-water-ice" }, + { name = "Interstellar Grotto" }, + { name = "Interstellar Barrens" }, + { name = "Ice Field", primary_resource="se-water-ice" }, + { name = "Kaleidoscope" }, + { name = "Meloncholia", primary_resource="se-naquium-ore" }, + { name = "Oblongglobulata", primary_resource="se-methane-ice" }, + { name = "Poltergeist" }, + { name = "Pebbles" }, + { name = "Rocky Ridge" }, + { name = "Razor Field", primary_resource="iron-ore" }, + { name = "Realm of Shadows", primary_resource="se-naquium-ore" }, + { name = "Sands of Time", primary_resource="se-naquium-ore" }, + { name = "Shadeland" }, + { name = "Sea of Sorrows" }, + { name = "Shattered Skies"}, + { name = "Stardew", primary_resource="se-water-ice" }, + { name = "Stardust", primary_resource="se-naquium-ore"}, + { name = "Stone Circles" }, + { name = "Solar Entrails", primary_resource="se-methane-ice" }, + { name = "Slumberland" }, + { name = "Starcorpse" }, + { name = "Sky Fragments" }, + { name = "Specter"}, + } +} +-- red +-- violet +-- purple +-- mauve +-- blue +-- turquoise +-- green +-- olive +-- yellow +-- orange +-- white +-- black +-- grey +-- snow + +-- these planets are shuffled in as homeworlds +UniverseRaw.multiplayer_homeworlds = { + { name="Ekida"}, --2 + { name="Dosam" }, --3 + { name="Nacar" }, --4 + { name="Panji" }, --5 + { name="Jitah" }, --6 + { name="Sathex" }, --7 + { name="Waxak" }, --8 + { name="Bolon" }, --9 + { name="Lahuna" }, --10 + { name="Matalac" }, --11 + { name="Eeldo" }, --12 +} + +UniverseRaw.haven_moons = { + { name="Greyhaven", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --1 + { name="Solsolace", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --2 + { name="Respitia", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --3 + { name="Dusku", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --4 + { name="Sanctunimo", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --5 + { name="Gradshiem", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --6 + { name="Ismet", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --7 + { name="Meditato", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --8 + { name="Remedy", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --9 + { name="Curaga", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --10 + { name="Medjed", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --11 + { name="Aesseilia", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --12 + { name="Seren", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --13 + { name="Serapis", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --14 + { name="Eshu", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --15 + { name="Molli", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --16 + { name="Veles", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --17 + { name="Erio", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --18 + { name="Arawn", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --19 + { name="Cichol", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --20 + { name="Donn", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --21 + { name="Mannanan", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --22 + { name="Morrigan", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --23 + { name="Ran", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --24 + { name="Culga", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --25 + { name="Mantus", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --26 + { name="Orcus", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --27 + { name="Vanth", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --28 + { name="Erebus", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --29 + { name="Mors", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --30 + { name="Mara", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --31 + { name="Degei", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --32 + { name="Pana", radius_multiplier = 0.3, primary_resource="crude-oil", tags={"enemy_none", "temperature_cool", "water_high", "trees_med", "moisture_high", "aux_very_low"} }, --33 +} +UniverseRaw.cryonite_moons = { + { name="Shakok", radius_multiplier = 0.8, primary_resource="se-cryonite", tags={"enemy_none", "temperature_frozen", "water_low", "trees_none", "moisture_med", "aux_med"} }, --1 + { name="Vionette", radius_multiplier = 0.8, primary_resource="se-cryonite", tags={"enemy_none", "temperature_frozen", "water_low", "trees_none", "moisture_med", "aux_med"} }, --2 + { name="Snowdrop", radius_multiplier = 0.8, primary_resource="se-cryonite", tags={"enemy_none", "temperature_frozen", "water_low", "trees_none", "moisture_med", "aux_med"} }, --3 + { name="Glacier", radius_multiplier = 0.8, primary_resource="se-cryonite", tags={"enemy_none", "temperature_frozen", "water_low", "trees_none", "moisture_med", "aux_med"} }, --4 + { name="Hagen", radius_multiplier = 0.8, primary_resource="se-cryonite", tags={"enemy_none", "temperature_frozen", "water_low", "trees_none", "moisture_med", "aux_med"} }, --5 + { name="Hothier", radius_multiplier = 0.8, primary_resource="se-cryonite", tags={"enemy_none", "temperature_frozen", "water_low", "trees_none", "moisture_med", "aux_med"} }, --6 + { name="Calippo", radius_multiplier = 0.8, primary_resource="se-cryonite", tags={"enemy_none", "temperature_frozen", "water_low", "trees_none", "moisture_med", "aux_med"} }, --7 + { name="Pastille", radius_multiplier = 0.8, primary_resource="se-cryonite", tags={"enemy_none", "temperature_frozen", "water_low", "trees_none", "moisture_med", "aux_med"} }, --8 + { name="Cornetto", radius_multiplier = 0.8, primary_resource="se-cryonite", tags={"enemy_none", "temperature_frozen", "water_low", "trees_none", "moisture_med", "aux_med"} }, --9 + { name="Frost", radius_multiplier = 0.8, primary_resource="se-cryonite", tags={"enemy_none", "temperature_frozen", "water_low", "trees_none", "moisture_med", "aux_med"} }, --10 + { name="Cryonia", radius_multiplier = 0.8, primary_resource="se-cryonite", tags={"enemy_none", "temperature_frozen", "water_low", "trees_none", "moisture_med", "aux_med"} }, --11 + { name="Beira", radius_multiplier = 0.8, primary_resource="se-cryonite", tags={"enemy_none", "temperature_frozen", "water_low", "trees_none", "moisture_med", "aux_med"} }, --12 + { name="Khione", radius_multiplier = 0.8, primary_resource="se-cryonite", tags={"enemy_none", "temperature_frozen", "water_low", "trees_none", "moisture_med", "aux_med"} }, --13 + { name="Marzanna", radius_multiplier = 0.8, primary_resource="se-cryonite", tags={"enemy_none", "temperature_frozen", "water_low", "trees_none", "moisture_med", "aux_med"} }, --14 + { name="Morozko", radius_multiplier = 0.8, primary_resource="se-cryonite", tags={"enemy_none", "temperature_frozen", "water_low", "trees_none", "moisture_med", "aux_med"} }, --15 + { name="Boreas", radius_multiplier = 0.8, primary_resource="se-cryonite", tags={"enemy_none", "temperature_frozen", "water_low", "trees_none", "moisture_med", "aux_med"} }, --16 +} +UniverseRaw.vulcanite_planets = { + { name="Aine", radius_multiplier = 0.2, primary_resource="se-vulcanite", tags={"enemy_none", "temperature_volcanic", "water_none", "moisture_none", "trees_none", "aux_very_low"} }, --1 + { name="Theros", radius_multiplier = 0.2, primary_resource="se-vulcanite", tags={"enemy_none", "temperature_volcanic", "water_none", "moisture_none", "trees_none", "aux_very_low"} }, --2 + { name="Aestas", radius_multiplier = 0.2, primary_resource="se-vulcanite", tags={"enemy_none", "temperature_volcanic", "water_none", "moisture_none", "trees_none", "aux_very_low"} }, --3 + { name="Damia", radius_multiplier = 0.2, primary_resource="se-vulcanite", tags={"enemy_none", "temperature_volcanic", "water_none", "moisture_none", "trees_none", "aux_very_low"} }, --4 + { name="Ruamati", radius_multiplier = 0.2, primary_resource="se-vulcanite", tags={"enemy_none", "temperature_volcanic", "water_none", "moisture_none", "trees_none", "aux_very_low"} }, --5 + { name="Miochin", radius_multiplier = 0.2, primary_resource="se-vulcanite", tags={"enemy_none", "temperature_volcanic", "water_none", "moisture_none", "trees_none", "aux_very_low"} }, --6 + { name="Hephaestus", radius_multiplier = 0.2, primary_resource="se-vulcanite", tags={"enemy_none", "temperature_volcanic", "water_none", "moisture_none", "trees_none", "aux_very_low"} }, --7 + { name="Ogun", radius_multiplier = 0.2, primary_resource="se-vulcanite", tags={"enemy_none", "temperature_volcanic", "water_none", "moisture_none", "trees_none", "aux_very_low"} }, --8 + { name="Shennong", radius_multiplier = 0.2, primary_resource="se-vulcanite", tags={"enemy_none", "temperature_volcanic", "water_none", "moisture_none", "trees_none", "aux_very_low"} }, --9 + { name="Agni", radius_multiplier = 0.2, primary_resource="se-vulcanite", tags={"enemy_none", "temperature_volcanic", "water_none", "moisture_none", "trees_none", "aux_very_low"} }, --10 + { name="Agneya", radius_multiplier = 0.2, primary_resource="se-vulcanite", tags={"enemy_none", "temperature_volcanic", "water_none", "moisture_none", "trees_none", "aux_very_low"} }, --11 + { name="Fuji", radius_multiplier = 0.2, primary_resource="se-vulcanite", tags={"enemy_none", "temperature_volcanic", "water_none", "moisture_none", "trees_none", "aux_very_low"} }, --12 + { name="Odqan", radius_multiplier = 0.2, primary_resource="se-vulcanite", tags={"enemy_none", "temperature_volcanic", "water_none", "moisture_none", "trees_none", "aux_very_low"} }, --13 + { name="Turgmam", radius_multiplier = 0.2, primary_resource="se-vulcanite", tags={"enemy_none", "temperature_volcanic", "water_none", "moisture_none", "trees_none", "aux_very_low"} }, --14 + { name="Alaz", radius_multiplier = 0.2, primary_resource="se-vulcanite", tags={"enemy_none", "temperature_volcanic", "water_none", "moisture_none", "trees_none", "aux_very_low"} }, --15 + { name="Kamar", radius_multiplier = 0.2, primary_resource="se-vulcanite", tags={"enemy_none", "temperature_volcanic", "water_none", "moisture_none", "trees_none", "aux_very_low"} }, --16 + { name="Grannus", radius_multiplier = 0.2, primary_resource="se-vulcanite", tags={"enemy_none", "temperature_volcanic", "water_none", "moisture_none", "trees_none", "aux_very_low"} }, --17 + { name="Mariel", radius_multiplier = 0.2, primary_resource="se-vulcanite", tags={"enemy_none", "temperature_volcanic", "water_none", "moisture_none", "trees_none", "aux_very_low"} }, --18 +} +UniverseRaw.iridium_moons = { + { name="Kothar", radius_multiplier = 0.8, primary_resource="se-iridium-ore", tags={"enemy_none", "temperature_wild", "aux_low", "moisture_low", "trees_none", "water_low"} }, --1 + { name="Ptah", radius_multiplier = 0.8, primary_resource="se-iridium-ore", tags={"enemy_none", "temperature_wild", "aux_low", "moisture_low", "trees_none", "water_low"} }, --2 + { name="Goibniu", radius_multiplier = 0.8, primary_resource="se-iridium-ore", tags={"enemy_none", "temperature_wild", "aux_low", "moisture_low", "trees_none", "water_low"} }, --3 + { name="Anvil", radius_multiplier = 0.8, primary_resource="se-iridium-ore", tags={"enemy_none", "temperature_wild", "aux_low", "moisture_low", "trees_none", "water_low"} }, --4 + { name="Sethlans", radius_multiplier = 0.8, primary_resource="se-iridium-ore", tags={"enemy_none", "temperature_wild", "aux_low", "moisture_low", "trees_none", "water_low"} }, --5 + { name="Svarog", radius_multiplier = 0.8, primary_resource="se-iridium-ore", tags={"enemy_none", "temperature_wild", "aux_low", "moisture_low", "trees_none", "water_low"} }, --6 + { name="Gibil", radius_multiplier = 0.8, primary_resource="se-iridium-ore", tags={"enemy_none", "temperature_wild", "aux_low", "moisture_low", "trees_none", "water_low"} }, --7 + { name="Fornax", radius_multiplier = 0.8, primary_resource="se-iridium-ore", tags={"enemy_none", "temperature_wild", "aux_low", "moisture_low", "trees_none", "water_low"} }, --8 + { name="Forgehammer", radius_multiplier = 0.8, primary_resource="se-iridium-ore", tags={"enemy_none", "temperature_wild", "aux_low", "moisture_low", "trees_none", "water_low"} }, --9 + { name="Wayland", radius_multiplier = 0.8, primary_resource="se-iridium-ore", tags={"enemy_none", "temperature_wild", "aux_low", "moisture_low", "trees_none", "water_low"} }, --10 + { name="Ilmarinen", radius_multiplier = 0.8, primary_resource="se-iridium-ore", tags={"enemy_none", "temperature_wild", "aux_low", "moisture_low", "trees_none", "water_low"} }, --11 + { name="Lugh", radius_multiplier = 0.8, primary_resource="se-iridium-ore", tags={"enemy_none", "temperature_wild", "aux_low", "moisture_low", "trees_none", "water_low"} }, --12 + { name="Seker", radius_multiplier = 0.8, primary_resource="se-iridium-ore", tags={"enemy_none", "temperature_wild", "aux_low", "moisture_low", "trees_none", "water_low"} }, --13 + { name="Cyclops", radius_multiplier = 0.8, primary_resource="se-iridium-ore", tags={"enemy_none", "temperature_wild", "aux_low", "moisture_low", "trees_none", "water_low"} }, --14 + { name="Hadur", radius_multiplier = 0.8, primary_resource="se-iridium-ore", tags={"enemy_none", "temperature_wild", "aux_low", "moisture_low", "trees_none", "water_low"} }, --15 + { name="Ikenga", radius_multiplier = 0.8, primary_resource="se-iridium-ore", tags={"enemy_none", "temperature_wild", "aux_low", "moisture_low", "trees_none", "water_low"} }, --16 +} +UniverseRaw.holmium_moons = { + { name="Enlil", radius_multiplier = 0.8, primary_resource="se-holmium-ore", tags={"enemy_none", "temperature_bland", "aux_very_high", "moisture_high", "trees_med", "water_med"}}, --1 + { name="Amun", radius_multiplier = 0.8, primary_resource="se-holmium-ore", tags={"enemy_none", "temperature_bland", "aux_very_high", "moisture_high", "trees_med", "water_med"} }, --2 + { name="Henkhisesui", radius_multiplier = 0.8, primary_resource="se-holmium-ore", tags={"enemy_none", "temperature_bland", "aux_very_high", "moisture_high", "trees_med", "water_med"} }, --3 + { name="Shu", radius_multiplier = 0.8, primary_resource="se-holmium-ore", tags={"enemy_none", "temperature_bland", "aux_very_high", "moisture_high", "trees_med", "water_med"} }, --4 + { name="Ninlil", radius_multiplier = 0.8, primary_resource="se-holmium-ore", tags={"enemy_none", "temperature_bland", "aux_very_high", "moisture_high", "trees_med", "water_med"} }, --5 + { name="Holmera", radius_multiplier = 0.8, primary_resource="se-holmium-ore", tags={"enemy_none", "temperature_bland", "aux_very_high", "moisture_high", "trees_med", "water_med"} }, --6 + { name="Pazu", radius_multiplier = 0.8, primary_resource="se-holmium-ore", tags={"enemy_none", "temperature_bland", "aux_very_high", "moisture_high", "trees_med", "water_med"} }, --7 + { name="Tazer", radius_multiplier = 0.8, primary_resource="se-holmium-ore", tags={"enemy_none", "temperature_bland", "aux_very_high", "moisture_high", "trees_med", "water_med"} }, --8 + { name="Verbti", radius_multiplier = 0.8, primary_resource="se-holmium-ore", tags={"enemy_none", "temperature_bland", "aux_very_high", "moisture_high", "trees_med", "water_med"} }, --9 + { name="Shurdhi", radius_multiplier = 0.8, primary_resource="se-holmium-ore", tags={"enemy_none", "temperature_bland", "aux_very_high", "moisture_high", "trees_med", "water_med"} }, --10 + { name="Varpulis", radius_multiplier = 0.8, primary_resource="se-holmium-ore", tags={"enemy_none", "temperature_bland", "aux_very_high", "moisture_high", "trees_med", "water_med"} }, --11 + { name="Egoi", radius_multiplier = 0.8, primary_resource="se-holmium-ore", tags={"enemy_none", "temperature_bland", "aux_very_high", "moisture_high", "trees_med", "water_med"} }, --12 + { name="Borroum", radius_multiplier = 0.8, primary_resource="se-holmium-ore", tags={"enemy_none", "temperature_bland", "aux_very_high", "moisture_high", "trees_med", "water_med"} }, --13 + { name="Sidhe", radius_multiplier = 0.8, primary_resource="se-holmium-ore", tags={"enemy_none", "temperature_bland", "aux_very_high", "moisture_high", "trees_med", "water_med"} }, --14 + { name="Njord", radius_multiplier = 0.8, primary_resource="se-holmium-ore", tags={"enemy_none", "temperature_bland", "aux_very_high", "moisture_high", "trees_med", "water_med"} }, --15 + { name="Kari", radius_multiplier = 0.8, primary_resource="se-holmium-ore", tags={"enemy_none", "temperature_bland", "aux_very_high", "moisture_high", "trees_med", "water_med"} }, --16 +} +UniverseRaw.vitamelange_moons = { + { name="Freyr", radius_multiplier = 0.8, primary_resource="se-vitamelange", tags={"enemy_low", "temperature_bland", "aux_very_low", "moisture_high", "trees_high", "water_med"} }, --1 + { name="Bigrid", radius_multiplier = 0.8, primary_resource="se-vitamelange", tags={"enemy_low", "temperature_bland", "aux_very_low", "moisture_high", "trees_high", "water_med"} }, --2 + { name="Eostre", radius_multiplier = 0.8, primary_resource="se-vitamelange", tags={"enemy_low", "temperature_bland", "aux_very_low", "moisture_high", "trees_high", "water_med"} }, --3 + { name="Daisy", radius_multiplier = 0.8, primary_resource="se-vitamelange", tags={"enemy_low", "temperature_bland", "aux_very_low", "moisture_high", "trees_high", "water_med"} }, --4 + { name="Ver", radius_multiplier = 0.8, primary_resource="se-vitamelange", tags={"enemy_low", "temperature_bland", "aux_very_low", "moisture_high", "trees_high", "water_med"} }, --5 + { name="Jura", radius_multiplier = 0.8, primary_resource="se-vitamelange", tags={"enemy_low", "temperature_bland", "aux_very_low", "moisture_high", "trees_high", "water_med"} }, --6 + { name="Buttercup", radius_multiplier = 0.8, primary_resource="se-vitamelange", tags={"enemy_low", "temperature_bland", "aux_very_low", "moisture_high", "trees_high", "water_med"} }, --7 + { name="Eiar", radius_multiplier = 0.8, primary_resource="se-vitamelange", tags={"enemy_low", "temperature_bland", "aux_very_low", "moisture_high", "trees_high", "water_med"} }, --8 + { name="Morityema", radius_multiplier = 0.8, primary_resource="se-vitamelange", tags={"enemy_low", "temperature_bland", "aux_very_low", "moisture_high", "trees_high", "water_med"} }, --9 + { name="Gardinia", radius_multiplier = 0.8, primary_resource="se-vitamelange", tags={"enemy_low", "temperature_bland", "aux_very_low", "moisture_high", "trees_high", "water_med"} }, --10 + { name="Shire", radius_multiplier = 0.8, primary_resource="se-vitamelange", tags={"enemy_low", "temperature_bland", "aux_very_low", "moisture_high", "trees_high", "water_med"} }, --11 + { name="Mossgarden", radius_multiplier = 0.8, primary_resource="se-vitamelange", tags={"enemy_low", "temperature_bland", "aux_very_low", "moisture_high", "trees_high", "water_med"} }, --12 + { name="Fern", radius_multiplier = 0.8, primary_resource="se-vitamelange", tags={"enemy_low", "temperature_bland", "aux_very_low", "moisture_high", "trees_high", "water_med"} }, --13 + { name="Lilly", radius_multiplier = 0.8, primary_resource="se-vitamelange", tags={"enemy_low", "temperature_bland", "aux_very_low", "moisture_high", "trees_high", "water_med"} }, --14 + { name="Rose", radius_multiplier = 0.8, primary_resource="se-vitamelange", tags={"enemy_low", "temperature_bland", "aux_very_low", "moisture_high", "trees_high", "water_med"} }, --15 + { name="Tulip", radius_multiplier = 0.8, primary_resource="se-vitamelange", tags={"enemy_low", "temperature_bland", "aux_very_low", "moisture_high", "trees_high", "water_med"} }, --16 + { name="Everglade", radius_multiplier = 0.8, primary_resource="se-vitamelange", tags={"enemy_low", "temperature_bland", "aux_very_low", "moisture_high", "trees_high", "water_med"} }, --17 +} + +UniverseRaw.unassigned_planets = { + {name="Arendel", radius_multiplier = 1, tags={"water_high", "aux_low", "trees_high", "moisture_high", "temperature_bland"}, primary_resource="uranium-ore"}, + {name="Orchid", tags={"water_low", "aux_high", "trees_high", "moisture_high", "temperature_balanced"}, primary_resource="copper-ore", + biome_replacements={ -- blue, turquoise, white + {replace={ "vegetation-purple", }, with="vegetation-violet"}, + {replace={"vegetation-mauve", "vegetation-blue", "vegetation-olive", "vegetation-yellow", "vegetation-orange",}, with="vegetation-red"}, + {replace={"all-dirt"}, with="dirt-white"}, + {replace={"all-sand"}, with="sand-white"}, + {replace={"all-volcanic"}, with="volcanic-purple"} } + }, -- : Red Forestmin_aux = 0.7, min_water = 0.7, min_tempeature = 50, max_temperature = 100 + {name="Anathema", tags={"water_low", "aux_high", "trees_none", "moisture_med", "temperature_vhot"}, primary_resource="iron-ore", + biome_replacements={ --: Blue Volcanic + {replace={"all-vegetation"}, with="vegetation-blue"}, + {replace={"all-dirt"}, with="dirt-black"}, + {replace={"all-sand"}, with="sand-black"}, + {replace={"all-volcanic"}, with="volcanic-blue"} } }, + {name="Tigris", tags={"water_low", "aux_low", "trees_low", "moisture_low", "temperature_warm"}, primary_resource="stone", + biome_replacements={ -- Endless Stone: Yellow deserts and plains + {replace={"vegetation-red", "vegetation-violet", "vegetation-turquoise", }, with="vegetation-orange"}, + {replace={"vegetation-blue", "vegetation-mauve", "vegetation-purple", "vegetation-olive", "vegetation-green",}, with="vegetation-yellow"}, + {replace={"dirt-purple", "dirt-violet", "dirt-red", "dirt-aubergine", "dirt-dustyrose", "dirt-black", "dirt-grey", "dirt-white"}, with="dirt-tan"}, + {replace={"sand-purple", "sand-violet", "sand-red", "sand-aubergine", "sand-dustyrose", "sand-black", "sand-grey", "sand-white"}, with="sand-tan"}, + {replace={"all-volcanic"}, with="volcanic-orange"} } }, + {name="Bellerophon"}, + {name="Theseus"}, + {name="Snek", radius_multiplier = 0.9, tags={"water_low", "aux_low", "trees_none", "moisture_none", "temperature_hot"}}, -- either a super-earth or a gas dwarf? ^^ + {name="Maelstrom", primary_resource="iron-ore", tags={"water_med", "aux_med", "trees_med", "moisture_med", "temperature_balanced"}, + biome_replacements={ -- blue, turquoise, white + {replace={"vegetation-green", "vegetation-olive", "vegetation-yellow", "vegetation-orange"}, with="vegetation-turquoise"}, + {replace={"vegetation-red", "vegetation-violet", "vegetation-purple", "vegetation-mauve"}, with="vegetation-blue"}, + {replace={"all-dirt"}, with="dirt-white"}, + {replace={"all-sand"}, with="sand-white"}, + {replace={"all-volcanic"}, with="volcanic-blue"} } }, + {name="Crystalys", tags={"water_med", "aux_high", "trees_med", "moisture_med", "temperature_vcold"}}, + {name="Nostos", tags={"water_low", "aux_low", "trees_none", "moisture_low", "temperature_balanced"}, primary_resource="uranium-ore", + biome_replacements={ -- : Endless concrete and ruins. If you explore you find nuclear bombs. You might also find a unique artefact: power armour with a huge equipment grid. Always planet 55? + {replace={"all-vegetation"}, with="vegetation-turquoise"}, + {replace={"sand-purple", "sand-violet", "sand-red", "sand-brown", "sand-tan", "sand-aubergine", "sand-dustyrose", "sand-cream", "sand-white"}, with="sand-black"}, + {replace={"dirt-purple", "dirt-violet", "dirt-red", "dirt-brown", "dirt-tan", "dirt-aubergine", "dirt-dustyrose", "dirt-cream", "dirt-white"}, with="dirt-black"}, + {replace={"sand-white"}, with="sand-grey"}, + {replace={"dirt-white"}, with="dirt-grey"}, + {replace={"all-volcanic"}, with="volcanic-green"} } }, + {name="Raegis", tags={"water_none", "aux_low", "trees_low", "moisture_med", "temperature_hot"}, primary_resource="copper-ore", + biome_replacements={ + {replace={"dirt-purple", "dirt-violet", "dirt-aubergine", "dirt-dustyrose", "dirt-cream", "dirt-grey", "dirt-white"}, with="dirt-red"}, + {replace={"dirt-tan", "dirt-beige", "dirt-black", }, with="dirt-brown"}, + {replace={"sand-purple", "sand-violet", "sand-aubergine", "sand-dustyrose", "sand-cream", "sand-grey", "sand-white"}, with="sand-red"}, + {replace={"sand-tan", "sand-beige", }, with="sand-brown"}, + {replace={"all-frozen"}, with="sand-black"}, + {replace={"vegetation-green", "vegetation-olive", "vegetation-violet", "vegetation-purple", "vegetation-mauve", "vegetation-blue", "vegetation-turquoise"}, with="vegetation-red"}, + {replace={"vegetation-yellow"}, with="vegetation-orange"}, + {replace={"all-volcanic"}, with="volcanic-orange"} } }, -- Endless copper. Red deserts and forests. + {name="Poseidon", radius_multiplier = 0.9, tags={"water_max", "moisture_max", "temperature_bland"}, primary_resource="crude-oil"}, + {name="Wilde", radius_multiplier = 0.9, tags={"water_max", "temperature_wild"}}, -- : Huge planet + {name="Zegul", tags={"temperature_balanced", "water_med", "trees_high", "aux_med", "moisture_high", "enemy_max"}, primary_resource="coal", + biome_replacements={ -- red, orange, + {replace={"vegetation-green", "vegetation-olive", "vegetation-yellow", -- not orange + "vegetation-violet", "vegetation-purple", "vegetation-mauve", "vegetation-blue", "vegetation-turquoise" }, with="vegetation-red"}, + {replace={"dirt-purple", "dirt-violet", "dirt-brown", "dirt-tan"}, with="dirt-red"}, + {replace={"dirt-aubergine", "dirt-beige", "dirt-cream", "dirt-black", "dirt-grey", "dirt-white"}, with="dirt-dustyrose"}, + {replace={"sand-purple", "sand-violet", "sand-brown", "sand-tan"}, with="sand-red"}, + {replace={"sand-aubergine", "sand-beige", "sand-cream", "sand-black", "sand-grey", "sand-white"}, with="sand-dustyrose"}, + {replace={"all-volcanic"}, with="volcanic-orange"} } }, -- is a biter death world with rich resources near the middle + {name="Charon", tags={"temperature_volcanic", "water_low"}, primary_resource="copper-ore"}, -- a lava planet with rich copper deposit near the landing site. + {name="Titan", radius_multiplier = 0.9}, -- : Big +} + +UniverseRaw.unassigned_moons = { + {name="Feluna", tags={"water_none", "moisture_none", "aux_low", "temperature_cool"}, primary_resource="iron-ore", + biome_replacements={ + {replace={"all-vegetation", "all-dirt"}, with="sand-white"}, + {replace={"all-sand"}, with="sand-grey"}, + {replace={"all-volcanic", "water"}, with="sand-black"} } }, -- has a rich iron depoit near the landing site but is otherwise like the moon. + {name="Eris"}, + {name="Segel"}, + {name="Leto"}, + {name="Mixin"}, + {name="Albion"}, + {name="Husky", tags={"temperature_vcold"}},-- : Ice World + {name="Butterfly", tags={"trees_max", "enemy_none"}}, + {name="Bluna", tags={"aux_high", "water_none", "moisture_none", "temperature_hot"}}, -- : Blue moon + {name="Auberge", tags={"aux_high", "water_none", "moisture_none", "temperature_bland"}}, -- Aubergine Moon + {name="Harbistaz", tags={"water_none", "moisture_none"}}, -- : moon + {name="Minkey", tags={"water_high", "enemy_high"}}, + {name="Pengwing", tags={"water_high", "temperature_cold", "aux_low", "moisture_high"}}, + {name="Jackneevle", tags={"water_low", "moisture_low"}}, -- : Moon + {name="Yetermoon", tags={"water_none", "moisture_none"}}, +} + +UniverseRaw.unassigned_planets_or_moons = { + {name="Lendiana ", tags={"temperature_temperate", "enemy_low", "water_high", "moisture_med", "aux_med", "trees_med"}, + primary_resource="uranium-ore", + }, -- should ahve a ruin. 🕇Polish Deathcare🕇 on Linux + {name="Coniferous ", tags={"temperature_temperate", "enemy_low", "water_high", "moisture_high", "aux_low", "trees_high"}, + primary_resource="se-vitamelange", + }, -- Coniferous + {name="Mirage ", tags={"temperature_wild", "enemy_low", "water_med", "moisture_med", "aux_very_high", "trees_med"}, + primary_resource="iron-ore", + preset_resource_bias={["uranium-ore"] = 0.03, ["crude-oil"] = 0.02, ["coal"] = 0.01}, + biome_replacements={ -- yellow, purple, green, + {replace={"all-vegetation", "dirt-purple", "dirt-violet", "dirt-red", "dirt-brown", "dirt-tan", "dirt-dustyrose", "dirt-beige", "dirt-cream", "dirt-black", "dirt-grey", "dirt-white", "dirt-aubergine"}, with="vegetation-blue"}, + {replace={"sand-purple", "sand-violet", "sand-red", "sand-brown"}, with="sand-black"}, + {replace={"sand-tan", "sand-dustyrose", "sand-beige", "sand-cream", "sand-grey", "sand-aubergine"}, with="sand-white"}, + {replace={"all-volcanic"}, with="volcanic-blue"} + } + }, -- Shylo132 + {name="Noveria", tags={"temperature_frozen", "enemy_high", "water_high", "moisture_high", "aux_very_high", "trees_low"}, primary_resource="se-beryllium-ore", preset_resource_bias={["crude-oil"] = 0.99}}, -- Luckay + {name="Vorlon", tags={"temperature_midrange", "enemy_none", "water_med", "moisture_med", "aux_med", "trees_low"}, primary_resource="se-iridium-ore", + biome_replacements={ -- yellow, purple, green, + {replace={"vegetation-blue", "dirt-cream" }, with="vegetation-yellow"}, + {replace={"vegetation-red" }, with="vegetation-olive"}, + {replace={"vegetation-orange", "all-frozen"}, with="vegetation-violet"}, + {replace={"vegetation-turquoise", }, with="vegetation-purple"}, + {replace={"dirt-violet", "dirt-brown", "dirt-red"}, with="dirt-purple"}, + {replace={"dirt-beige", "dirt-black", "dirt-grey", "dirt-white", "dirt-dustyrose"}, with="dirt-tan"}, + {replace={"sand-brown"}, with="sand-aubergine"}, + {replace={"sand-violet", "sand-black", "sand-red"}, with="sand-purple"}, + {replace={"sand-beige", "sand-grey", "sand-white", "sand-dustyrose"}, with="sand-tan"}, + {replace={"all-volcanic"}, with="volcanic-purple"} } + }, -- SirVorlon + {name="Marquardt", tags={"temperature_frozen", "enemy_med", "water_med", "moisture_low", "aux_very_low", "trees_none"}, primary_resource="stone"}, -- Andree + {name="Tarn", tags={"temperature_cold", "enemy_low", "water_med", "moisture_low", "aux_high", "trees_low"}, primary_resource="se-cryonite"}, -- Tarn + {name="Ketobar", tags={"temperature_temperate", "enemy_none", "water_none", "moisture_high", "aux_low", "trees_low"}, primary_resource="se-iridium-ore"}, -- Valanna + {name="Horaerratum", tags={"temperature_extreme", "enemy_low", "water_low", "moisture_max", "aux_very_high", "trees_max"}, + primary_resource="se-vitamelange", preset_resource_bias={["se-cryonite"] = 0.99, ["se-vulcanite"] = 0.98}}, -- slipsec + {name="Katalos", tags={"temperature_extreme", "enemy_max", "water_med", "moisture_max", "aux_low", "moisture_high", "cliff_low", "trees_med"}, + primary_resource="se-beryllium-ore", preset_resource_bias={["se-cryonite"] = 0.99, ["se-vulcanite"] = 0.98, ["iron-ore"] = 0.02, ["stone"] = 0.01}, + biome_replacements={ -- yellow, purple, green, + {replace={"vegetation-violet", "vegetation-purple", "vegetation-mauve", "vegetation-blue"}, with="vegetation-green"}, + {replace={"dirt-violet", "dirt-purple", "dirt-aubergine"}, with="dirt-brown"}, + {replace={"sand-violet", "sand-purple", "sand-aubergine"}, with="sand-brown"}, + {replace={"volcanic-purple", "volcanic-blue"}, with="volcanic-orange"} } + }, -- PeterHan5 + {name="Drakkett", tags={"temperature_frozen", "enemy_low", "water_low", "aux_very_high", "trees_low"}, primary_resource="se-cryonite"}, + {name="Xiada", tags={"temperature_cold", "enemy_med", "water_med", "moisture_high", "aux_med", "trees_high"}, primary_resource="se-vitamelange", preset_resource_bias={["crude-oil"] = 0.99}, + biome_replacements={ + {replace={"all-dirt"}, with="volcanic-blue"}, + {replace={"all-sand"}, with="sand-black"}, + {replace={"all-vegetation"}, with="vegetation-blue"}, + {replace={"all-volcanic"}, with="volcanic-blue"} } }, -- CrushedIce + {name="Sparky", tags={"temperature_temperate", "enemy_very_low", "water_high", "moisture_max", "aux_very_low", "trees_high"}, primary_resource="se-holmium-ore", preset_resource_bias={["uranium-ore"] = 0.99}}, -- sparky + --radiation/wind: very very high + --secondary resource: uranium + --weather: perpetual thunderstorm (or as close as possible) + {name="Trelos", tags={"temperature_frozen", "enemy_med", "water_med", "moisture_high", "aux_very_low", "trees_med"}, primary_resource="crude-oil"}, -- madman + {name="Sandro", tags={"temperature_hot", "water_none", "moisture_none", "aux_high", "trees_none"}, primary_resource="iron-ore", + biome_replacements={-- red black orange + {replace={"all-dirt"}, with="dirt-red"}, + {replace={"all-sand"}, with="sand-red"}, + {replace={"all-frozen"}, with="sand-black"}, + {replace={"all-vegetation"}, with="vegetation-red"}, + {replace={"all-volcanic"}, with="volcanic-orange"} } }, + {name="Neenuvar", tags={"temperature_cool", "water_high", "moisture_max", "aux_high", "trees_max"}}, + {name="Kamsta", tags={"temperature_cool", "water_med", "moisture_high", "aux_high", "trees_high"}, primary_resource="iron-ore", + biome_replacements={ + {replace={"all-dirt"}, with="dirt-purple"}, + {replace={"all-sand"}, with="sand-purple"}, + {replace={"all-vegetation"}, with="vegetation-purple"}, + {replace={"all-volcanic"}, with="volcanic-purple"} } }, + {name="Jasbury"}, + {name="Atropos"}, + {name="Mormo"}, + {name="Viken"}, + {name="Katar"}, + {name="Liko"}, + {name="Plato"}, + {name="Talos"}, + {name="Capritos"}, + {name="Yaegner"}, + {name="Gigei"}, + {name="Kujaku"}, + {name="Aciszar"}, + {name="Toxinora", tags={"temperature_vhot", "aux_high", "water_high"}, primary_resource="crude-oil"}, + {name="Hestia"}, + {name="Avorion"}, + {name="Mercutio"}, + {name="Elolis"}, + {name="Horkos"}, + {name="Riven", tags={"enemy_none"}}, + {name="Techne"}, + {name="Bomore"}, + {name="Prabhava"}, + {name="Anemoi"}, + {name="Ismene"}, + {name="Owleye", tags={"enemy_none"}}, + {name="Theia"}, + {name="Isabella"}, + {name="Thanatos"}, + {name="Nechrophos"}, + {name="Morpheus"}, + {name="Eleusis"}, + {name="Nike"}, + {name="Pollus"}, + {name="Hadrian"}, + {name="Meleager"}, + {name="Sapperious"}, + {name="Arkazious"}, + {name="Hyratel"}, + {name="Atonoy"}, + {name="Dafdee"}, + {name="Bordoli"}, + {name="Dinotress"}, + {name="Helburn"}, + {name="Horae"}, + {name="Hybris"}, + {name="Fodius"}, + {name="Petra"}, + {name="Zafis"}, + {name="Kerel"}, + {name="Claustry"}, + {name="Anson"}, + {name="Reaver", tags={"enemy_max"}}, + {name="Arae"}, + {name="Magaera"}, + {name="Dagon", tags={"enemy_high"}}, + {name="Glasties"}, + {name="Phoebe"}, + {name="Vestrian"}, + {name="Rovecutio"}, + {name="Hexagee"}, + {name="Unilix"}, + {name="Eirene", tags={"enemy_none"}}, + {name="Rouk"}, + {name="Rupel"}, + {name="Dyton"}, + {name="Miranda"}, + {name="Aghanim"}, + {name="Octarine"}, + {name="Veden"}, + {name="Mireska"}, + {name="Tarrasque"}, + {name="Parth"}, + {name="Jenova"}, + {name="Lich", tags={"temperature_frozen"}}, + {name="Farangis", tags={"temperature_cool", "moisture_high", "aux_low", "trees_med"}}, + {name="Pelorum"}, + {name="Hera"}, + {name="Vyse"}, + {name="Argenta"}, + {name="Rooftrellen", tags={"temperature_warm", "moisture_high", "aux_low", "trees_med"}}, -- : Forest + {name="Avez"}, + {name="Theoden"}, + {name="Nookryme"}, + {name="Lyralei"}, + {name="Agon"}, + {name="Eshone"}, + {name="Rolium"}, + {name="Exorrion"}, + {name="Sage"}, + {name="Persophone"}, + {name="Hemera"}, + {name="Shashi"}, + {name="Skadi", tags={"temperature_frozen", "enemy_high"}},-- : Ice World + {name="Geryon"}, + {name="Juliette"}, + {name="Dolos"}, + {name="Druanga"}, + {name="Aquila", tags={"water_max", "temperature_warm", "aux_low", "moisture_max", "trees_max"}}, -- : Water world + {name="Krobelus", tags={"temperature_extreme", "aux_high", "trees_low"}}, + {name="Neuranto"}, + {name="Trostaurus", tags={"temperature_extreme", "aux_high", "trees_low"}}, -- : Hot and cold + {name="Lothar"}, + {name="Styx", tags={"water_high", "temperature_cool"}}, -- : Water + {name="Sooten", tags={"water_low", "temperature_vhot", "trees_high", "aux_low", "moisture_med"}, primary_resource="iron-ore"}, + {name="Karura"}, + {name="Magi"}, + {name="Momus"}, + {name="Chronos"}, + {name="Ganymede", tags={"enemy_none"}}, + {name="Gerhaift"}, + {name="Heinlein"}, + {name="Chrodon"}, + {name="Ettenor", tags={"water_low", "moisture_high", "trees_max", "aux_low", "temperature_bland"}}, -- has a rich oil near the landing site. and is a forest planet + {name="Numrah"}, + {name="Snagle"}, + {name="Noventede"}, + {name="Minos"}, + {name="Amebris"}, + {name="Lath"}, + {name="Haka"}, + {name="Adul"}, + {name="Lethe"}, + {name="Furion", tags={"temperature_hot"}}, -- : Hot + {name="Alfonso"}, + {name="Bandoch"}, + {name="Daedelus"}, + {name="Acheron"}, + {name="Minoa"}, + {name="Angelos"}, + {name="Tartarus"}, + {name="Whittier"}, + {name="Ethoria"}, + {name="Acisrind"}, + {name="Rokenharr"}, + {name="Haze"}, + {name="Vekars"}, + {name="Kitsune", tags={"water_low", "moisture_high", "trees_max", "aux_high", "temperature_bland"}}, + {name="Pentto"}, + {name="Enigma"}, + {name="Tycho"}, + {name="Aporia"}, + {name="Orphne"}, + {name="Gearofen"}, + {name="Akasha"}, + {name="Sofurna"}, + {name="Hermes"}, + {name="Swoxter"}, + {name="Manta"}, + {name="Zion"}, + {name="Oneiros"}, + {name="Nexus"}, + {name="Jelt"}, + {name="Kratos", tags={"temperature_volcanic"}, primary_resource="iron-ore"}, + {name="Claymore"}, + {name="Avakis", tags={"temperature_warm", "water_none", "moisture_none", "trees_low", "enemy_med"}, primary_resource="coal"}, -- : Dune + {name="Shara"}, + {name="Oeris"}, + {name="Tresdin"}, + {name="Hedone"}, + {name="Lilac"}, + {name="Tango", tags={"temperature_warm", "water_high", "moisture_high", "trees_high"}, primary_resource="crude-oil"}, + {name="Dolentea"}, + {name="Apate"}, + {name="Warrus"}, + {name="Esenudreus"}, + {name="Joenus"}, + {name="Narsus"}, + {name="Weylop"}, + {name="Warlock"}, + {name="Tieneo"}, + {name="Znok"}, + {name="Rinoto"}, + {name="Azure", tags={"temperature_hot", "aux_high"}, primary_resource="crude-oil"}, + {name="Zakhol"}, + {name="Ashura"}, + {name="Krubidium"}, + {name="Silverhorn"}, + {name="Alecto"}, + {name="Osis", tags={"water_high", "moisture_low", "temperature_warm"}}, -- Endless water (and fish): Land is very rare. + {name="Morus"}, + {name="Selemaenae"}, + {name="Empha"}, + {name="Midas"}, + {name="Akerty"}, + {name="Lotuslana", tags={"aux_high", "water_max", "temperature_cool", "moisture_max", "trees_max"}}, -- : Water + {name="Spiriso"}, + {name="Imbrium"}, + {name="Quillion"}, + {name="Alba"}, + {name="Zendia"}, + {name="Linken"}, + {name="Konan"}, + {name="Tolubai"}, + {name="Magmin"}, + {name="Sange", tags={"water_low", "temperature_hot", "aux_med", "trees_low", "moisture_none"}, primary_resource="copper-ore"}, + {name="Dionysus"}, + {name="Bishamonten"}, + {name="Bunkle"}, + {name="Memnon"}, + {name="Nomos"}, + {name="Kokytos"}, + {name="Crixalis"}, -- : Dune + {name="Andragora"}, + {name="Ryuo"}, + {name="Rivos"}, -- : River planet + {name="Constance"}, + {name="Stromhurst"}, + {name="Feaora"}, + {name="Paquin"}, + {name="Heechgata"}, + {name="Mercurial"}, + {name="Hyperion"}, + {name="Xandra"}, + {name="Delune"}, + {name="Adalind"}, + {name="Vioress"}, + {name="Crean"}, + {name="Alban"}, + {name="Lamia"}, + {name="Melancholia"}, + {name="Kaya"}, + {name="Heliolyte"}, + {name="Tanzan", tags={"aux_high", "temperature_cool", "trees_high", "moisture_high"}, primary_resource="crude-oil"}, -- Endless Oil: Purple forests. losts of water + {name="Jakiro", tags={"temperature_extreme", "aux_low"}}, -- : Fire and Ice + {name="Juno", tags={"aux_high"}}, + {name="Vobis"}, + {name="Corsol"}, + {name="Elezar"}, + {name="Lamplika", tags={"aux_high"}}, -- : Red + {name="Taras"}, + {name="Atengam"}, + {name="Tentei"}, + {name="Shellabby"}, + {name="Ezra"}, + {name="Persephone", tags={"aux_high", "water_high", "moisture_high", "trees_med"}}, + {name="Chiron"}, + {name="Neevus"}, + {name="Rampart"}, + {name="Hades", tags={"moisture_low", "trees_low", "aux_low"}, primary_resource="coal"}, + {name="Santo"}, + {name="Abyssal"}, + {name="Deurus"}, + {name="Koskomino"}, + {name="Hypnos"}, + {name="Moirai"}, + {name="Selene", tags={"enemy_none"}}, + {name="Zed"}, + {name="Tisiphone"}, + {name="Thrasos"}, + {name="Beaumont"}, + {name="Indarl"}, + {name="Kerkon"}, + {name="Rhadaman"}, + {name="Verbena"}, + {name="Benthai"}, + {name="Boros"}, + {name="Aizen"}, + {name="Galvania"}, + {name="Prism"}, + {name="Berky"}, + {name="Tenou"}, + {name="Aeolus"}, + {name="Faerie", tags={"water_high", "temperature_cool", "moisture_high", "aux_high", "trees_max"}, primary_resource="crude-oil"}, -- : Forest + {name="Ophion"}, + {name="Mobius"}, + {name="Peitho"}, + {name="Greenleaf", tags={"water_low", "temperature_cool", "moisture_high", "aux_low", "trees_max"}, primary_resource="coal"}, -- : Forest + {name="Vesper", tags={"trees_med", "moisture_med", "temperature_hot"}, primary_resource="crude-oil"}, + {name="Rubik"}, + {name="Riza"}, + {name="Geive"}, + {name="Palto"}, + {name="Alke"}, + {name="Elysium"}, + {name="Eaglesong", tags={"water_med", "temperature_temperate", "moisture_high", "aux_low", "trees_high"}, primary_resource="coal"}, -- : Forest + {name="Daryun"}, + {name="Achilles"}, + {name="Brion"}, + {name="Grilla"}, + {name="Ermintrude"}, + {name="Naden"}, + {name="Evadome"}, + {name="Amechania"}, + {name="Antaeus"}, + {name="Ender"}, + {name="Demeter", tags={"enemy_none"}}, + {name="Athina"}, + {name="Caerus"}, + {name="Witfalla"}, + {name="Starfury"}, + {name="Muir"}, + {name="Jeroen"}, + {name="Ourea"}, + {name="Jespur"}, + {name="Jetenury"}, + {name="Manelscot"}, + {name="Marmo", tags={"temperature_cold", "moisture_none", "water_none", "aux_med"}, + biome_replacements={-- Has red deserts and snow (mars) and a small deserted mining base. + {replace={"all-dirt"}, with="dirt-dustyrose"}, + {replace={"all-sand"}, with="sand-dustyrose"}, + {replace={"all-vegetation"}, with="sand-dustyrose"}, + {replace={"all-volcanic"}, with="volcanic-orange"} } }, + {name="Emiir", tags={"water_med", "temperature_cold", "moisture_high", "aux_low", "trees_high"}, primary_resource="crude-oil"}, -- : Forest + {name="Castor"}, + {name="Petussia"}, + {name="Androgun"}, + {name="Chimera"}, + {name="Semiele"}, + {name="Lyssa"}, + {name="Jetnova"}, + {name="Soma"}, + {name="Beylix"}, + {name="Rylai"}, + {name="Eulstave"}, + {name="Liono"}, + {name="Infernox"}, + {name="Paulara"}, + {name="Algea"}, + {name="Gapleon"}, + {name="Tetracat"}, + {name="Alastor"}, + {name="Bolina"}, + {name="Penium"}, + {name="Shiva", tags={"temperature_frozen"}, primary_resource="iron-ore"}, -- : Ice World + {name="Arturius"}, + {name="Traxex", tags={"temperature_cold", "moisture_none", "water_low", "trees_none"}}, -- black + {name="Itnora"}, + {name="Luxitania"}, + {name="Taishakuten"}, + {name="Bloodthorn", tags={"aux_high"}}, -- : Red + {name="Amadeo"}, + {name="Plenai"}, + {name="Koma"}, + {name="Ishmere"}, + {name="Criopta"}, + {name="Thalassa"}, + {name="Thoon"}, + {name="Ozwulf"}, + {name="Thule"}, + {name="Vietera"}, + {name="Kunkri"}, + {name="Aion"}, + {name="Kael"}, + {name="Ixion"}, + {name="Metapilla"}, + {name="Mavarix"}, + {name="Voxnova"}, + {name="Karik"}, + {name="Sturata"}, + {name="Bernadette"}, + {name="Legogene"}, + {name="Ecludies"}, + {name="Abaddon"}, + {name="Miturion"}, + {name="Gorgyra"}, + {name="Cinrad"}, + {name="Orion"}, + {name="Kendapoa", tags={"enemy_none"}}, + {name="Spatha"}, + {name="Indigo", tags={"temperature_cold", "aux_high"}, primary_resource="iron-ore"}, -- : Endless iron, Blue forest, snow, grey desert + {name="Corus"}, + {name="Harmonia"}, + {name="Arkoth", tags={"temperature_cold", "aux_low"}, primary_resource="coal"}, -- is a snow wasteland with rich coal near the landing site + {name="Bromwinkle"}, + {name="Nikara"}, + {name="Ajax"}, + {name="Kaliphos"}, + {name="Mordiggian"}, + {name="Kuyou"}, + {name="Exavier"}, + {name="Zauber"}, + {name="Cerberus"}, + {name="Manearth"}, + {name="Umbra"}, + {name="Ranolin"}, + {name="Slithice", tags={"water_high", "temperature_vcold"}},-- : water and Ice World + {name="Cadmus"}, + {name="Adikia"}, + {name="Perodome"}, + {name="Geras"}, + {name="Typhon"}, + {name="Termina"}, + {name="Oliran"}, + {name="Deadrim"}, + {name="Hyrean", tags={"water_max", "temperature_warm", "moisture_med"}}, -- is 100% ocean + {name="Gorgon", tags={"water_low", "temperature_balanced", "trees_med"}, primary_resource="uranium-ore", + biome_replacements={-- : Endless uranium, and black landscape yellow and green forest and plains + {replace={"all-dirt"}, with="dirt-black"}, + {replace={"all-sand"}, with="sand-black"}, + {replace={"vegetation-mauve", "vegetation-blue", "vegetation-turquoise"}, with="vegetation-green"}, + {replace={"vegetation-violet", "vegetation-purple"}, with="vegetation-olive"}, + {replace={"vegetation-orange", "vegetation-red"}, with="vegetation-yellow"}, + {replace={"all-volcanic"}, with="volcanic-green"} } }, + {name="Chrothurn"}, + {name="Sladeshon"}, + {name="Nonagaz"}, + {name="Sihnon"}, + {name="Bombato"}, + {name="Mordred"}, + {name="Jiangyin"}, + {name="Akkolon"}, + {name="Alfrind"}, + {name="Sworn"}, + {name="Hexen"}, + {name="Falconsabre"}, + {name="Roma"}, + {name="Ganus"}, + {name="Aiakos"}, + {name="Ourus"}, + {name="Deadwood", tags={"water_med", "temperature_wild", "moisture_med", "aux_low", "trees_med"}, primary_resource="coal"}, + {name="Windlace", tags={"temperature_cold", "aux_med", "enemy_none"}}, + {name="Aberdon", tags={"water_high"}},-- : water + {name="Kara"}, + {name="Koolimon"}, + {name="Rutadam"}, + {name="Pandion"}, + {name="Shinzo"}, + {name="Anax"}, + {name="Hecate"}, + {name="Rumba"}, + {name="Zomble", tags={"water_med", "temperature_hot", "moisture_med", "aux_med", "trees_low"}, + biome_replacements={-- orange and purple + {replace={"dirt-red", "dirt-dustyrose", "dirt-beige"}, with="dirt-brown"}, + {replace={"dirt-violet", "dirt-cream", "dirt-grey", "dirt-white"}, with="dirt-aubergine"}, + {replace={"sand-red", "sand-dustyrose", "sand-beige"}, with="sand-brown"}, + {replace={"sand-violet", "sand-cream", "sand-grey", "sand-white"}, with="sand-aubergine"}, + {replace={"vegetation-yellow", "vegetation-red", "vegetation-olive", "vegetation-green" }, with="vegetation-orange"}, + {replace={"vegetation-violet", "vegetation-mauve", "vegetation-blue", "vegetation-turquoise" }, with="vegetation-purple"}, + {replace={"volcanic-green"}, with="volcanic-orange"}, + {replace={"volcanic-blue"}, with="volcanic-purple"} } }, + {name="Atos"}, + {name="Throix", tags={"temperature_volcanic"}}, -- : Green lava + {name="Zelos", tags={"aux_high"}}, + {name="Razor", primary_resource="iron-ore"}, + {name="Mythulu"}, + {name="Katski"}, + {name="Morgana"}, + {name="Ester"}, + {name="Vares"}, + {name="Balanar"}, + {name="Impetus"}, + {name="Soteria"}, + {name="Arislan", tags={"temperature_temperate", "moisture_high", "aux_low"}}, + {name="Tintavis"}, + {name="Melione"}, + {name="Clotho"}, + {name="Aidos"}, + {name="Vexo"}, + {name="Sakimi"}, + {name="Stijio", tags={"temperature_wild", "aux_low"}}, + {name="Regina"}, + {name="Erinyes"}, + {name="Lynx"}, + {name="Wyvern"}, + {name="Nestor"}, + {name="Noctis", tags={"temperature_cool", "moisture_none"}}, -- : black + {name="Osiris"}, + {name="Ariel"}, + {name="Erebos"}, + {name="Alessandro"}, + {name="Gelos"}, + {name="Yasha"}, + {name="Empusa"}, + {name="Esluna"}, + {name="Hermione"}, + {name="Orpheus"}, + {name="Limos"}, + {name="Karas"}, + {name="Nissaria"}, + {name="Harmonette"}, + {name="Piccard", tags={"aux_low", "trees_low"}}, + {name="Redril", tags={"aux_high"}}, -- red + {name="Avernus", tags={"temperature_vcold", "aux_high"}}, + {name="Infamani"}, + {name="Perseus"}, + {name="Loliento"}, + {name="Elpis"}, + {name="Tyche"}, + {name="Whinstone"}, + {name="Budkai"}, + {name="Phanto"}, + {name="Toucan"}, + {name="Demios"}, +} + +UniverseRaw.prototypes_by_name = {} +for _, proto_zone_group in pairs({ + UniverseRaw.universe.stars, + UniverseRaw.universe.space_zones, + {UniverseRaw.universe.anomaly}, + UniverseRaw.unassigned_planets, + UniverseRaw.unassigned_moons, + UniverseRaw.unassigned_planets_or_moons, + UniverseRaw.haven_moons, + UniverseRaw.vulcanite_planets, + UniverseRaw.cryonite_moons, + UniverseRaw.iridium_moons, + UniverseRaw.holmium_moons, + UniverseRaw.vitamelange_moons, +}) do + for _, proto_zone in pairs(proto_zone_group) do + if UniverseRaw.prototypes_by_name[proto_zone.name] then + error(proto_zone.name.." is defined twice") + end + UniverseRaw.prototypes_by_name[proto_zone.name] = proto_zone + end +end + +return UniverseRaw diff --git a/space-exploration_0.5.80/space-exploration/scripts/universe.lua b/space-exploration_0.5.80/space-exploration/scripts/universe.lua new file mode 100644 index 0000000..e53f545 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/universe.lua @@ -0,0 +1,2119 @@ +local Universe = {} + +-- stellar cluster inflation code +-- universe-data.lua has base stellar cluster model and unassigned data +-- the model gets inflated by assigning the unassigned data in a deterministic-pseudo-random pattern based on nauvis's map gen seed + +-- the list is used in control.lua for space mechanics +-- resource picker selects which core fragments the planet generates +-- the data gets saved to global on init + +-- A group of close in a stellar cluster, each with many planets, each with many moons + +-- 30 ish stars + -- 120-150 planets, min of 3 per star + -- the rest are moons (350-380) + +-- Nauvis is a planet +-- Nauvis orbits the star called... Calidus + +-- general concepts: +--[[ +star (inaccessable) + star orbit + asteroid belt + planet + planet orbit + moon + moon orbit +asteroid field +deep space + +leaving a planet is hard +leaving a moon is less hard +leaving orbit is easy +leaving an asteroid belt is easy +leaving deep space / asteroid fields is free + +travel from within a planetary system (planet-moon, moon-moon) is easy +travel from between a planetary systems (or to the star) is difficult +travel between solar systems is very hard +travel to-from deep space difficult + +Of just have a generic asteroid field that is the deep space option and is the bridge between all. + +it is easier to go from star to deep space to star than star to star +]]-- + + +Universe.planet_max_radius = 10000 +-- average is 4000 +-- moon max_radius is 50% of it's own planet's actual radius +-- average is 1600 + +-- NOTE: there are limited numbers of names so more moons means less planets +Universe.average_moons_per_planet = 3 +Universe.max_asteroid_belts = 2 +Universe.stellar_average_separation = 50 +Universe.stellar_min_separation = 25 + +Universe.temperature_tags = {"temperature_bland", "temperature_temperate", "temperature_midrange", "temperature_balanced", "temperature_wild", "temperature_extreme", + "temperature_cool", "temperature_cold", "temperature_vcold", "temperature_frozen", + "temperature_warm", "temperature_hot", "temperature_vhot", "temperature_volcanic"} +Universe.water_tags = {"water_none", "water_low", "water_med", "water_high", "water_max"} +Universe.moisture_tags = {"moisture_none", "moisture_low", "moisture_med", "moisture_high", "moisture_max"} +Universe.trees_tags = {"trees_none", "trees_low", "trees_med", "trees_high", "trees_max"} +Universe.aux_tags = {"aux_very_low", "aux_low", "aux_med", "aux_high", "aux_very_high"} +Universe.cliff_tags = {"cliff_none", "cliff_low", "cliff_med", "cliff_high", "cliff_max"} +Universe.enemy_tags = {"enemy_none", "enemy_very_low", "enemy_low", "enemy_med", "enemy_high", "enemy_very_high", "enemy_max"} + +Universe.default_resource_order = { + "iron-ore", "copper-ore", "uranium-ore", + "coal", "crude-oil", "stone", + mod_prefix.."vulcanite", mod_prefix.."cryonite", mod_prefix.."vitamelange", + mod_prefix.."naquium-ore", mod_prefix.."methane-ice", mod_prefix.."water-ice", + mod_prefix.."beryllium-ore", mod_prefix.."iridium-ore", mod_prefix.."holmium-ore" +} + +Universe.resource_word_rules = { + not_space = { + "oil", "coal", "bio", "wood", "petro", -- anything biological + "gas", "vent", "water", "liquid", "hydro", "thermal", -- anything liquid, gas, or hot + "imersite", "menarite", -- krastorio + "vitamelange", "vulcanite", "cryonite", "iridium", "holmium" + }, + not_orbit = { + "naquium", "beryllium" + }, + not_asteroid_belt = { + "naquium" + }, + not_asteroid_field = { + "beryllium" + }, + not_planet = { + "helium", "space", "asteroid", + mod_prefix.."water-ice", mod_prefix.."methane-ice", mod_prefix.."naquium-ore" + }, + not_homeworld = { + "vitamelange", "vulcanite", "cryonite", "beryllium", "iridium", "holmium", "naquium", + "imersite" + } +} + +Universe.resource_setting_overrides = { + [mod_prefix.."water-ice"] = { -- becuase water keyword gets excluded from space + allowed_for_zone = { + ["asteroid-orbit"] = true, + ["asteroid-belt"] = true, + ["asteroid-field"] = true, + } + }, + [mod_prefix.."vulcanite"] = { + tags_required_for_presence = {"temperature_extreme", "temperature_warm", "temperature_hot", "temperature_vhot", "temperature_volcanic"}, + tags_required_for_primary = {"temperature_vhot", "temperature_volcanic"}, + yeild_affected_by = {temperature = 1} + }, + [mod_prefix.."cryonite"] = { + tags_required_for_presence = {"temperature_extreme", "temperature_cool", "temperature_cold", "temperature_vcold", "temperature_frozen"}, + tags_required_for_primary = {"temperature_vcold", "temperature_frozen"}, + yeild_affected_by = {temperature = -1} + }, + [mod_prefix.."vitamelange"] = { + tags_required_for_presence = {"moisture_med", "moisture_high", "moisture_max"}, + tags_required_for_primary = {"moisture_high", "moisture_max"}, + yeild_affected_by = {moisture = 1}, + excludes = {mod_prefix .. "beryllium-ore", mod_prefix .. "iridium-ore", mod_prefix .. "holmium-ore"}, -- excludes should mutually agree exclusion + }, + [mod_prefix.."beryllium-ore"] = { + excludes = {mod_prefix .. "iridium-ore", mod_prefix .. "holmium-ore", mod_prefix .. "vitamelange"}, -- excludes should mutually agree exclusion + }, + [mod_prefix.."iridium-ore"] = { + excludes = {mod_prefix .. "beryllium-ore", mod_prefix .. "holmium-ore", mod_prefix .. "vitamelange"}, -- excludes should mutually agree exclusion + }, + [mod_prefix.."holmium-ore"] = { + excludes = {mod_prefix .. "beryllium-ore", mod_prefix .. "iridium-ore", mod_prefix .. "vitamelange"}, -- excludes should mutually agree exclusion + }, +} + +Universe.special_type_to_resource = { + beryllium = mod_prefix.."beryllium-ore", + holmium = mod_prefix.."holmium-ore", + iridium = mod_prefix.."iridium-ore", + vitamelange = mod_prefix.."vitamelange", + cryonite = mod_prefix.."cryonite", + vulcanite = mod_prefix.."vulcanite", + haven = "crude-oil", +} + +Universe.resource_min_change_to_regenerate = 0.1 +Universe.resource_max_change_to_regenerate = 10 + +Universe.resource_primary_boost = 0.5 -- added to the base bias of 100%. Applied before resource power. +Universe.resource_secondary_irregularity = 0.75 +Universe.resource_power = 1.5 -- the curve of resource bias. the resource value is put to this power. + +-- Note: These ranges apply based on 0% being the first value, 100% being the second value +-- The primary resource is oevr 100%, based on Universe.resource_primary_boost +Universe.category_resource_properties = { + homeworld = { + primary_boost = Universe.resource_primary_boost, + secondary_irregularity = Universe.resource_secondary_irregularity, + power = Universe.resource_power, + frequency = {0.2, 1}, + size = {0, 2}, + richness = {0.1, 2}, + }, + planet = { + primary_boost = Universe.resource_primary_boost, + secondary_irregularity = Universe.resource_secondary_irregularity, + power = Universe.resource_power, + frequency = {0.2, 1}, + size = {0, 2}, + richness = {0.1, 2}, + }, + ["asteroid-belt"] = { + primary_boost = Universe.resource_primary_boost, + secondary_irregularity = Universe.resource_secondary_irregularity, + power = Universe.resource_power, + frequency = {1, 10}, + size = {0, 10}, + richness = {0.2, 10}, + }, + anomaly = { + primary_boost = Universe.resource_primary_boost, + secondary_irregularity = Universe.resource_secondary_irregularity, + power = Universe.resource_power, + frequency = {1, 4}, + size = {0, 4}, + richness = {0.2, 2}, + }, + ["asteroid-field"] = { + primary_boost = Universe.resource_primary_boost, + secondary_irregularity = Universe.resource_secondary_irregularity, + power = Universe.resource_power, + frequency = {1, 4}, + size = {0, 4}, + richness = {0.2, 2}, + }, + orbit = { + primary_boost = Universe.resource_primary_boost, + secondary_irregularity = Universe.resource_secondary_irregularity, + power = Universe.resource_power, + frequency = {1, 4}, + size = {0, 4}, + richness = {0.2, 2}, + }, +} + +function Universe.rebuild_resource_assignments() + global.resources_and_controls_compare_string = nil + Universe.load_resource_data() +end + +function Universe.build () + log("Building Universe.") + + global.rng = game.create_random_generator() + -- Creates a deterministic standalone random generator with the given seed or if a seed is not provided the initial map seed is used. + -- rng() + -- If no parameters are given a number in the [0, 1) range is returned. + -- If a single parameter is given a floored number in the [0, N] range is returned. + -- If 2 parameters are given a floored number in the [N1, N2] range is returned. + + ------------------------------------------------------------------------------ + -- structure variables + + local protouniverse = table.deepcopy(UniverseRaw.universe) + local unassigned_planets = table.deepcopy(UniverseRaw.unassigned_planets) + local unassigned_moons = table.deepcopy(UniverseRaw.unassigned_moons) + local unassigned_planets_or_moons = table.deepcopy(UniverseRaw.unassigned_planets_or_moons) + + local n_stars = #protouniverse.stars + local npm_names = #unassigned_planets + #unassigned_moons + #unassigned_planets_or_moons + + local average_planets_per_star = npm_names / (Universe.average_moons_per_planet + 1) / n_stars + + local requested_planets = global.rng(math.floor(average_planets_per_star * 0.9 * n_stars), math.ceil(average_planets_per_star * 1.1 * n_stars)) + local requested_moons = #unassigned_moons + #unassigned_planets_or_moons - requested_planets + + local min_planets_per_star = math.max(2, math.floor(average_planets_per_star / 2)) + local high_planets_per_star = average_planets_per_star * 1.5 -- less likely to be above this + local high_moons_per_planet = Universe.average_moons_per_planet * 1.5 -- less likely to be above this + + ------------------------------------------------------------------------------ + -- build srtucture + + local all_planets = {} + table.insert(all_planets, protouniverse.stars[1].children[1]) -- nauvis + protouniverse.stars[1].children[1].is_homeworld = true + Log.debug_log("Universe.build protouniverse.stars[1].children[1].name=" .. protouniverse.stars[1].children[1].name, "universe") + + local all_moons = {} + + Universe.shuffle(unassigned_moons) + Universe.shuffle(protouniverse.stars) + Universe.shuffle(unassigned_planets) + Universe.shuffle(unassigned_planets_or_moons) + + for _, star in pairs(protouniverse.stars) do + star.children = star.children or {} + end + + -- add the unassigned planets to random stars + for _, proto_planet in pairs(unassigned_planets) do + local planet = {name = proto_planet.name} + table.insert(protouniverse.stars[global.rng(1, #protouniverse.stars)].children, planet) + table.insert(all_planets, planet) + end + unassigned_planets = {} + + -- fill minimum of # planets per star + for _, star in pairs(protouniverse.stars) do + while #star.children < min_planets_per_star and #unassigned_planets_or_moons > 0 do + local proto_planet = unassigned_planets_or_moons[#unassigned_planets_or_moons] + unassigned_planets_or_moons[#unassigned_planets_or_moons] = nil + local planet = {name = proto_planet.name} + table.insert(star.children, planet) + table.insert(all_planets, planet) + end + end + + -- build remaining planets + while #all_planets < requested_planets and #unassigned_planets_or_moons > 0 do + local star = protouniverse.stars[global.rng(1, #protouniverse.stars)] + if #star.children < high_planets_per_star or global.rng() < 0.25 then -- 25% to ignore limit + local proto_planet = unassigned_planets_or_moons[#unassigned_planets_or_moons] + unassigned_planets_or_moons[#unassigned_planets_or_moons] = nil + local planet = {name = proto_planet.name} + table.insert(star.children, planet) + table.insert(all_planets, planet) + end + end + + -- add the unassigned moons to random planets + for _, proto_moon in pairs(unassigned_moons) do + local planet = all_planets[global.rng(1, #all_planets)] + planet.children = planet.children or {} + local moon = {name = proto_moon.name} + table.insert(planet.children, moon) + table.insert(all_moons, moon) + end + unassigned_moons = {} + + -- min 1 moon per planet + for _, planet in pairs(all_planets) do + planet.children = planet.children or {} + if #planet.children < high_moons_per_planet then + local proto_moon = unassigned_planets_or_moons[#unassigned_planets_or_moons] + unassigned_planets_or_moons[#unassigned_planets_or_moons] = nil + local moon = {name = proto_moon.name} + table.insert(planet.children, moon) + table.insert(all_moons, moon) + end + end + + -- build remaining moons + while #all_moons < requested_moons and #unassigned_planets_or_moons > 0 do + local planet = all_planets[global.rng(1, #all_planets)] + planet.children = planet.children or {} + if #planet.children < high_moons_per_planet or global.rng() < 0.25 then -- 25% to ignore limit + local proto_moon = unassigned_planets_or_moons[#unassigned_planets_or_moons] + unassigned_planets_or_moons[#unassigned_planets_or_moons] = nil + local moon = {name = proto_moon.name} + table.insert(planet.children, moon) + table.insert(all_moons, moon) + end + end + + -- position the stars + -- global.universe_scale is effectivly the width of the universe + global.universe_scale = math.sqrt(#protouniverse.stars + #protouniverse.space_zones) * Universe.stellar_average_separation + + local function random_stellar_position(zone, distance_multiplier) + distance_multiplier = distance_multiplier or 1 + local orientation = global.rng() + local distance = global.rng() * global.universe_scale * distance_multiplier + local position = Util.orientation_to_vector(orientation, distance) + zone.stellar_position = Util.orientation_to_vector(orientation, distance) + end + + local zone_index = {} + local zones_by_name = {} + + table.insert(zone_index, protouniverse.anomaly) + protouniverse.anomaly.index = #zone_index + zones_by_name[protouniverse.anomaly.name] = protouniverse.anomaly + + -- stellar cluster seeded, now shuffle and build: + for s, star in pairs(protouniverse.stars) do + + star.type = "star" + if star.name == "Calidus" then + random_stellar_position(star, 0.1) + else + random_stellar_position(star) + end + star.orbit = { + type = "orbit", + name = star.name .. " Orbit", + parent = star + } + + table.insert(zone_index, star) + star.index = #zone_index + zones_by_name[star.name] = star + + table.insert(zone_index, star.orbit) + star.orbit.index = #zone_index + zones_by_name[star.orbit.name] = star.orbit + + -- Insert asteroid belts + local add_asteroid_belts = global.rng(1, Universe.max_asteroid_belts) + star.star_gravity_well = 10 + #star.children + add_asteroid_belts + + Universe.shuffle(star.children) + + for i = 1, add_asteroid_belts do + table.insert(star.children, math.floor(0.4 + global.rng() + #star.children * i / add_asteroid_belts), + { + type = "asteroid-belt", + name = star.name .. " Asteroid Belt " .. i -- Warning, must be updated after shuffle + }) + end + + for p, planet in pairs(star.children) do -- make Nauvis the first planet + if planet.name == "Nauvis" and p > 1 then -- swap positions + local was_index = p + local other = star.children[1] + star.children[1] = planet + star.children[was_index] = other + end + end + + local asteroid_belts = 0 + for p, planet in pairs(star.children) do + planet.star_gravity_well = star.star_gravity_well * (0.5 + 0.8 * (#star.children - p) / #star.children) + if planet.name == "Nauvis" then + Log.debug_log("Nauvis is homeworld","universe") + planet.is_homeworld = true + planet.surface_index = 1 + end + + table.insert(zone_index, planet) + planet.index = #zone_index + zones_by_name[planet.name] = planet + + if planet.type == "asteroid-belt" then + asteroid_belts = asteroid_belts + 1 + planet.name = star.name .. " Asteroid Belt " .. asteroid_belts + planet.parent = star + else + local planet_prototype = Universe.get_zone_prototype(planet.name) + planet.children = planet.children or {} + planet.type = "planet" + planet.radius_multiplier = 0.4 + 0.6 * math.pow(global.rng(), 2) -- need to consistently call rng even if prototype.radius_multiplier is defined + if planet_prototype and planet_prototype.radius_multiplier then + planet.radius_multiplier = planet_prototype.radius_multiplier + end + planet.radius = Universe.planet_max_radius * planet.radius_multiplier + planet.planet_gravity_well = 10 * (1 + planet.radius_multiplier) + #planet.children -- 12-20 + n_children = 13 to 26 + planet.climate = planet.climate or {} + planet.parent = star + planet.orbit = { + type = "orbit", + name = planet.name .. " Orbit", + parent = planet + } + + table.insert(zone_index, planet.orbit) + planet.orbit.index = #zone_index + zones_by_name[planet.orbit.name] = planet.orbit + + Universe.shuffle(planet.children) + Universe.planet_gravity_well_distribute(planet) + for m, moon in pairs(planet.children) do + local moon_prototype = Universe.get_zone_prototype(moon.name) + moon.type = "moon" + --moon.star_gravity_well = planet.star_gravity_well + --moon.planet_gravity_well = planet.planet_gravity_well * (0.1 + 0.5 * (#planet.children - m) / #planet.children) + moon.radius_multiplier = 0.2 + 0.8 * math.pow(global.rng(), 2) + if moon_prototype and moon_prototype.radius_multiplier then + moon.radius_multiplier = moon_prototype.radius_multiplier + end + moon.radius = planet.radius / 2 * moon.radius_multiplier + moon.climate = moon.climate or {} + moon.parent = planet + moon.orbit = { + type = "orbit", + name = moon.name .. " Orbit", + parent = moon + } + + table.insert(zone_index, moon) + moon.index = #zone_index + zones_by_name[moon.name] = moon + + table.insert(zone_index, moon.orbit) + moon.orbit.index = #zone_index + zones_by_name[moon.orbit.name] = moon.orbit + end + end + end + end + + Universe.shuffle(protouniverse.space_zones) + for z, zone in pairs(protouniverse.space_zones) do + zone.type = zone.type or "asteroid-field" + table.insert(zone_index, zone) + zone.index = #zone_index + zones_by_name[zone.name] = zone + random_stellar_position(zone) + end + + -- Assign seeds and climates + for _, zone in pairs(zone_index) do + zone.seed = global.rng(4294967295) + Universe.inflate_climate_controls(zone) + end + + --log("Compiled universe Data: " .. serpent.block( protouniverse, {comment = false, numformat = '%1.8g' } )) + + -- enforce separation + if protouniverse then + global.universe = protouniverse + global.zone_index = zone_index + global.zones_by_name = zones_by_name + global.zones_by_surface = {} + end + + Universe.separate_stellar_position() + -- once the above is done do the remaining home system validation. This is so the same code can be used for multipleyer home system initialisation. + Universe.make_validate_homesystem(global.zones_by_name["Nauvis"]) + + -- resource assignment + global.resources_and_controls_compare_string = nil -- force udpate + Universe.load_resource_data() + + for _, star in pairs(global.universe.stars) do + Universe.star_gravity_well_distribute(star) + end + + + log("Building Universe complete.") +end + +function Universe.separate_stellar_position() + + local stellar_positions = {} + for _, zone in pairs(global.zone_index) do + if zone.type == "star" or zone.type == "asteroid-field" then + table.insert(stellar_positions, zone.stellar_position) + end + end + stellar_positions = Util.separate_points(stellar_positions, Universe.stellar_min_separation) + local i = 0 + for _, zone in pairs(global.zone_index) do + if zone.type == "star" or zone.type == "asteroid-field" then + i = i + 1 + if zone.stellar_position.x ~= stellar_positions[i].x or zone.stellar_position.y ~= stellar_positions[i].y then + if global.spaceships then -- if spaceship positions are not also changed they end up in a virtual gravity well. + for _, spaceship in pairs(global.spaceships) do + if spaceship.stellar_position and spaceship.stellar_position.x == zone.stellar_position.x and spaceship.stellar_position.y == zone.stellar_position.y then + spaceship.stellar_position = table.deepcopy(stellar_positions[i]) + end + end + end + log(zone.name .." moved from "..zone.stellar_position.x..", "..zone.stellar_position.y.." to "..stellar_positions[i].x..", "..stellar_positions[i].y) + zone.stellar_position = stellar_positions[i] + end + end + end +end + +function Universe.build_resources() + Log.debug_log("build_resources: start.", "universe") + + -- Don't affect zone.controls, zone.resource_controls, or zone.primary_resource, zone.fragment_name + -- use zone.new_controls, zone.new_resource_controls zone.new_primary_resource, zone.new_fragment_name + -- need to separate controls and resource controls. + + local resource_settings = global.resources_and_controls.resource_settings + + -- Define a set resource processing order for less variablity on data changes. + -- Order is the secondary sorting order. + -- resources have selection priority if they have criteria, they will choose zones first. + --The resource rolling order should start with all vanilla and SE resources first so their values are most consistent. + local resource_order = table.deepcopy(Universe.default_resource_order) + for resource_name, resource_setting in pairs(resource_settings) do + if not util.table_contains(resource_order, resource_name) then + table.insert(resource_order, resource_name) + end + end + Log.debug_log("build_resources: resource_order is:", "universe") + Log.debug_log(serpent.block(resource_order), "universe") + + -- get the seed + if not global.seed then + global.seed = game.surfaces[1].map_gen_settings.seed + end + + -- make a rng for any missing zone seeds + -- all zones need seeds + -- can't be consecutive do to similar map gen seeds having nearly identical results. + local zone_seed_rng = game.create_random_generator(global.seed) + for _, zone in pairs(global.zone_index) do + Zone.validate_controls(zone.controls) -- somehow non-string keys ended up in previos versions, they cause errors later + if not zone.seed then + zone.seed = zone_seed_rng(4294967295) + end + Zone.delete_surface(zone) -- try + Universe.inflate_climate_controls(zone) + zone.new_primary_resource = nil + zone.new_fragment_name = nil + zone.strong_claims = {} + end + + -- Calculate random resource bias (0-1) values for each resource type on each zone. Still roll even for invalid resources so if settings change it wont skew everything. + -- Make an ordered bias value set whwere the resources are ordered based on base bias and the divided evenly over the 1-0 range, then add the original bias at 1/100 as a minor factor. + for _, zone in pairs(global.zone_index) do + local zone_resource_bias_nrg = game.create_random_generator(zone.seed) + zone.ordered_resource_bias = {} -- indexed + zone.resource_bias = {} -- named + -- DO NOT skip resources that aren't needed otherwise turning on/off a resource changes the results of others. + -- DO NOT check if vanilla/SE resource are still valid is that will also affect other rolls. + for _, resource_name in pairs(resource_order) do + local bias = { + resource_name = resource_name, + base_bias = zone_resource_bias_nrg(), + } + table.insert(zone.ordered_resource_bias, bias) + zone.resource_bias[resource_name] = bias + local prototype = Universe.get_zone_prototype(zone.name) + if prototype and prototype.preset_resource_bias and prototype.preset_resource_bias[resource_name] then + Log.debug_log("build_resources: "..zone.name.." has preset bias for "..resource_name.." " ..prototype.preset_resource_bias[resource_name], "universe") + bias.base_bias = prototype.preset_resource_bias[resource_name] + end + end + table.sort(zone.ordered_resource_bias, function(a,b) return a.base_bias > b.base_bias end) + -- zone.resource_bias sorted highest first + for i = 1, #zone.ordered_resource_bias do + zone.ordered_resource_bias[i].ordered_bias = (#zone.ordered_resource_bias-i)/#zone.ordered_resource_bias + zone.ordered_resource_bias[i].base_bias / #zone.ordered_resource_bias + -- ordered_bias means less variablity during later selection step + -- ordered_bias is the minor basis for resource claiming zone + -- major basis is whether it qualifies based on tags. + end + end + Log.debug_log("build_resources: example of zone.ordered_resource_bias:", "universe") + Log.debug_log(serpent.block(global.zone_index[1].ordered_resource_bias), "universe") + -- Mark each resource's claim. The major part is if it is part of resource requirements, the minor part is the random fsr. + + + -- build the list of resource categories + global.zones_by_resource_balance_categories = { + homeworld = {}, + planet = {}, -- and moons, not homeworlds + anomaly = {}, + ["asteroid-belt"] = {}, + ["asteroid-field"] = {}, + orbit = {}, -- any orbit type or star + } + Log.debug_log("build_resources: resource_balance_categories are:", "universe") + Log.debug_log(serpent.block(global.zones_by_resource_balance_categories), "universe") + for category_name, zrbc in pairs(global.zones_by_resource_balance_categories) do + zrbc.quota = {} -- zone count targets per resource are added here + zrbc.assigned = {} -- zones qith valid primay resources get put here in a subtable of the resource + zrbc.assigned_special = {} -- special assignement is ignored by the whole assigment system. + zrbc.unassigned = {} -- zones needing a primary resource go here + zrbc.zones_normal_total = 0 + zrbc.primary_resource_options = {} + if category_name == "homeworld" or category_name == "anomaly" then + zrbc.primary_resource_options = {"stone"} + zrbc.assigned["stone"] = {} + zrbc.assigned_special["stone"] = {} + else + for resource_name, resource_setting in pairs(resource_settings) do + if resource_setting.can_be_primary and resource_setting.allowed_for_zone[category_name] and (resource_setting.core_fragment or category_name ~= "planet") then + table.insert(zrbc.primary_resource_options, resource_name) + zrbc.quota[resource_name] = 0 + zrbc.assigned[resource_name] = {} + zrbc.assigned_special[resource_name] = {} + end + end + end + end + + -- split all zones into their resource_balance_categories + -- if a zone has a fixed primary resource, set that and put into an assigned pile. + for _, zone in pairs(global.zone_index) do + local resource_balance_category = Universe.get_zone_resource_balance_category(zone) + local zrbc = global.zones_by_resource_balance_categories[resource_balance_category] + local assigned_by_special = false + if resource_balance_category == "anomaly" then + zone.new_primary_resource = "stone" + Log.debug_log("build_resources: zone "..zone.name.." ("..resource_balance_category..") is locked to primary: "..zone.new_primary_resource , "universe") + elseif resource_balance_category == "homeworld" then + zone.new_primary_resource = "stone" + Log.debug_log("build_resources: zone "..zone.name.." ("..resource_balance_category..") is locked to primary: "..zone.new_primary_resource , "universe") + else + if zone.special_type then -- note: this is mainly for the beryllium asteroid belt, the moons already have the resource in the prototype + local resource = Universe.special_type_to_resource[zone.special_type] + if resource then + if util.table_contains(zrbc.primary_resource_options, resource) then + assigned_by_special = true + zone.new_primary_resource = resource + Log.debug_log("build_resources: zone "..zone.name.." ("..resource_balance_category..") has special link to primary: "..zone.new_primary_resource , "universe") + else + Log.debug_log("build_resources: zone "..zone.name.." ("..resource_balance_category..") has special link to primary ("..resource..") but the resource is not valid", "universe") + end + end + end + if not assigned_by_special then + local prototype = Universe.get_zone_prototype(zone.name) + if prototype and prototype.primary_resource then + if util.table_contains(zrbc.primary_resource_options, prototype.primary_resource) then + zone.new_primary_resource = prototype.primary_resource + Log.debug_log("build_resources: zone "..zone.name.." ("..resource_balance_category..") is prototyped to primary: "..zone.new_primary_resource , "universe") + else + Log.debug_log("build_resources: zone "..zone.name.." ("..resource_balance_category..") is prototyped to primary ("..prototype.primary_resource ..") but the resource is not valid", "universe") + end + end + end + end + if resource_balance_category == "homeworld" then + zone.new_fragment_name = util.mod_prefix .. "core-fragment-omni" + Log.debug_log("build_resources: zone "..zone.name.." ("..resource_balance_category..") is locked to fragment: "..zone.new_fragment_name , "universe") + end + if not assigned_by_special then + zrbc.zones_normal_total = zrbc.zones_normal_total + 1 -- exclude special + end + -- either add to the an assigned pool or the unassigned pool + if zone.new_primary_resource then + if not assigned_by_special then + table.insert(zrbc.assigned[zone.new_primary_resource], zone) + else + table.insert(zrbc.assigned_special[zone.new_primary_resource], zone) + end + else + table.insert(zrbc.unassigned, zone) + end + end + + -- Zone-Resource assignement + for resource_balance_category, zrbc in pairs(global.zones_by_resource_balance_categories) do + + Log.debug_log( "build_resources: begin for zone resource_balance_category (zrbc): " .. resource_balance_category, "universe") + Log.debug_log( "build_resources: " .. resource_balance_category.." total zones in category: ("..zrbc.zones_normal_total..")", "universe") + --Log.debug_log( "build_resources: " .. resource_balance_category.." list of unassigned zones: ("..#zrbc.unassigned..")", "universe") + --for _, zone in pairs(zrbc.unassigned) do + -- Log.debug_log( "build_resources: " .. resource_balance_category.." unassigned zone "..zone.name, "universe") + --end + + -- anomaly and homeworld already should have all zones assigned + if resource_balance_category ~= "anomaly" and resource_balance_category ~= "homeworld" then + + -- Next decide how many zones get each resource type. + local zones_per_resource_min = math.floor(zrbc.zones_normal_total / #zrbc.primary_resource_options) + Log.debug_log( "build_resources: " .. resource_balance_category.." min zones per resource : "..zones_per_resource_min, "universe") + local remainder = zrbc.zones_normal_total % #zrbc.primary_resource_options + Log.debug_log( "build_resources: " .. resource_balance_category.." remainder : "..remainder, "universe") + + local quotas_total = 0 + local quota_index = 0 + for i, resource_name in pairs(resource_order) do + if zrbc.quota[resource_name] then + quota_index = quota_index + 1 + zrbc.quota[resource_name] = zones_per_resource_min + (quota_index <= remainder and 1 or 0) + quotas_total = quotas_total + zrbc.quota[resource_name] + Log.debug_log( "build_resources: "..resource_balance_category.." quota for " .. resource_name.." = " .. zrbc.quota[resource_name], "universe") + + -- First, if any resource is above quota, drop resources. + if #zrbc.assigned[resource_name] > zrbc.quota[resource_name] then + Log.debug_log( "build_resources: "..resource_balance_category.." has " .. resource_name.." assigned: " .. #zrbc.assigned[resource_name], "universe") + local resource_assigned = zrbc.assigned[resource_name] + table.sort(resource_assigned, function(a,b) return a.resource_bias[resource_name].ordered_bias > b.resource_bias[resource_name].ordered_bias end) -- lowest bias is last + while #zrbc.assigned[resource_name] > zrbc.quota[resource_name] do + local last_zone = resource_assigned[#resource_assigned] + Log.debug_log( "build_resources: "..resource_balance_category.." unassign " .. resource_name.." from: " .. last_zone.name, "universe") + table.remove(resource_assigned, #resource_assigned) + table.insert(zrbc.unassigned, last_zone) + end + end + end + end + + + Log.debug_log( "build_resources: " .. resource_balance_category.." quotas total : "..quotas_total, "universe") + if quotas_total ~= zrbc.zones_normal_total then + error("build_resources: " .. resource_balance_category.." quotas total : "..quotas_total.." does not equal "..zrbc.zones_normal_total) + end + + Log.debug_log( "build_resources: " .. resource_balance_category.." currently unassigned: "..#zrbc.unassigned, "universe") + for resource_name, quota in pairs(zrbc.quota) do + Log.debug_log( "build_resources: " .. resource_balance_category.." "..resource_name.." "..#zrbc.assigned[resource_name].." / "..quota, "universe") + end + + Log.debug_log( "build_resources: begin assign uncontested strong claims", "universe") + --On the first pass. do only resources with strict requirements. Only assign based on uncontested major claims. + local has_strong_claims = false + local uncontested_claimed_zones = {} -- split by resource name + local all_strong_claims = {} -- single list of zones + + for _, zone in pairs(zrbc.unassigned) do + -- make strong claims + for _, resource_name in pairs(resource_order) do + local resource_setting = resource_settings[resource_name] + if zrbc.assigned[resource_name] and #zrbc.assigned[resource_name] < zrbc.quota[resource_name] then -- validates resource_name + -- don't bother with resources already at quota + local tags_required = resource_setting.tags_required_for_primary or resource_setting.tags_required_for_presence + if tags_required then + local has_required_tag = false + for _, tag in pairs(tags_required) do + if Util.table_contains(zone.tags, tag) then + has_required_tag = true + break + end + end + if has_required_tag then + zone.strong_claims = zone.strong_claims or {} + zone.strong_claims[resource_name] = 1 -- TODO maybe can weight this more, + has_strong_claims = true + Log.debug_log( "build_resources: "..resource_balance_category.." has strong claim " .. resource_name.." for: " .. zone.name, "universe") + end + end + end + end + if zone.strong_claims then + if table_size(zone.strong_claims) == 1 then + for resource_name, weight in pairs(zone.strong_claims) do + uncontested_claimed_zones[resource_name] = uncontested_claimed_zones[resource_name] or {} + table.insert(uncontested_claimed_zones[resource_name], zone) + Log.debug_log( "build_resources: "..resource_balance_category.." has uncontested claim " .. resource_name.." for: " .. zone.name, "universe") + end + end + if table_size(zone.strong_claims) > 0 then + table.insert(all_strong_claims, zone) + end + end + end + + if has_strong_claims then + Log.debug_log( "build_resources: "..resource_balance_category.." # strong claims: "..#all_strong_claims, "universe") + for resource_name, zones in pairs(uncontested_claimed_zones) do + table.sort(zones, function(a,b) return a.resource_bias[resource_name].ordered_bias > b.resource_bias[resource_name].ordered_bias end) -- highest first + while #zones > 0 and #zrbc.assigned[resource_name] < zrbc.quota[resource_name] do + local zone = zones[1] + zone.new_primary_resource = resource_name + if resource_balance_category == "planet" then + zone.new_fragment_name = resource_settings[resource_name].core_fragment + end + table.remove(zones, 1) + util.remove_from_table(zrbc.unassigned, zone) + util.remove_from_table(all_strong_claims, zone) + table.insert(zrbc.assigned[resource_name], zone) + Log.debug_log( "build_resources: "..resource_balance_category.." assign " .. resource_name.." to: " .. zone.name .. " (uncontested)", "universe") + end + end + + end + + Log.debug_log( "build_resources: end assign uncontested strong claims", "universe") + + Log.debug_log( "build_resources: " .. resource_balance_category.." currently unassigned: "..#zrbc.unassigned, "universe") + for resource_name, quota in pairs(zrbc.quota) do + Log.debug_log( "build_resources: " .. resource_balance_category.." "..resource_name.." "..#zrbc.assigned[resource_name].." / "..quota, "universe") + end + --On the 2nd pass. do only resources with strict requirements. Do the contested major claims. + -- loop repeatedly beased on whichever resource has the fewest assigned zones so far. Go with yout highest claim. + Log.debug_log( "build_resources: begin assign strong claims", "universe") + + if has_strong_claims then + if #all_strong_claims > 0 then + local max_zones = 0 + local resource_pointer = 1 + while #all_strong_claims > 0 and max_zones <= zones_per_resource_min do + local resource_name = resource_order[resource_pointer] + local resource_setting = resource_settings[resource_name] + if resource_setting and (resource_setting.tags_required_for_primary or resource_setting.tags_required_for_presence) + and zrbc.assigned[resource_name] and #zrbc.assigned[resource_name] < zrbc.quota[resource_name] and #zrbc.assigned[resource_name] <= max_zones then + table.sort(all_strong_claims, function(a,b) return a.resource_bias[resource_name].ordered_bias > b.resource_bias[resource_name].ordered_bias end) -- highest bias is first + local zone = all_strong_claims[1] + zone.new_primary_resource = resource_name + if resource_balance_category == "planet" then + zone.new_fragment_name = resource_settings[resource_name].core_fragment + end + table.remove(all_strong_claims, 1) + util.remove_from_table(zrbc.unassigned, zone) + table.insert(zrbc.assigned[resource_name], zone) + Log.debug_log( "build_resources: "..resource_balance_category.." assign " .. resource_name.." to: " .. zone.name .. " (contested strong claim)", "universe") + end + resource_pointer = resource_pointer + 1 + if resource_pointer > #resource_order then + resource_pointer = 1 + max_zones = max_zones + 1 + end + end + else + Log.debug_log( "build_resources: "..resource_balance_category.." have no remaining strong claims.", "universe") + end + + end + + Log.debug_log( "build_resources: end assign strong claims", "universe") + + Log.debug_log( "build_resources: " .. resource_balance_category.." currently unassigned: "..#zrbc.unassigned, "universe") + for resource_name, quota in pairs(zrbc.quota) do + Log.debug_log( "build_resources: " .. resource_balance_category.." "..resource_name.." "..#zrbc.assigned[resource_name].." / "..quota, "universe") + end + + Log.debug_log( "build_resources: begin assign resources with strict requirement", "universe") + --On the 3rd pass, if there are resources with strict requirements that still need to meet a quota, climate needs to be changed. + -- Make a pool of all the zones with no fixed climate tags. + -- Find the zone with the highest rolled bias. Change that ones climate to fill the quota. + local max_zones = zones_per_resource_min + 1 + local criteria_resources_lacking_zones = {} -- resource_names + for _, resource_name in pairs(resource_order) do + local resource_setting = resource_settings[resource_name] + if resource_setting and (resource_setting.tags_required_for_primary or resource_setting.tags_required_for_presence) + and zrbc.assigned[resource_name] and #zrbc.assigned[resource_name] < zrbc.quota[resource_name] then + table.insert(criteria_resources_lacking_zones, resource_name) + max_zones = math.min(max_zones, #zrbc.assigned[resource_name]) + end + end + + local resource_pointer = 1 + while #all_strong_claims > 0 and max_zones <= zones_per_resource_min do + local resource_name = criteria_resources_lacking_zones[resource_pointer] + if #zrbc.assigned[resource_name] <= max_zones and #zrbc.assigned[resource_name] < zrbc.quota[resource_name] then + -- try to add + table.sort(zrbc.unassigned, function(a,b) return a.resource_bias[resource_name].ordered_bias > b.resource_bias[resource_name].ordered_bias end) -- highest bias is first + local zone = zrbc.unassigned[1] + zone.new_primary_resource = resource_name + if resource_balance_category == "planet" then + zone.new_fragment_name = resource_settings[resource_name].core_fragment + end + util.remove_from_table(zrbc.unassigned, zone) + table.insert(zrbc.assigned[resource_name], zone) + Log.debug_log( "build_resources: "..resource_balance_category.." assign " .. resource_name.." to: " .. zone.name .. " (forced climate change)", "universe") + Universe.fit_climate_to_primary_resource(zone) + end + resource_pointer = resource_pointer + 1 + if resource_pointer > #criteria_resources_lacking_zones then + resource_pointer = 1 + max_zones = max_zones + 1 + end + end + + local resources_below_quota = {} + for _, resource_name in pairs(resource_order) do + if zrbc.assigned[resource_name] and #zrbc.assigned[resource_name] < zrbc.quota[resource_name] then + table.insert(resources_below_quota, resource_name) + end + end + + Log.debug_log( "build_resources: end assign resources with strict requirement", "universe") + + Log.debug_log( "build_resources: " .. resource_balance_category.." currently unassigned: "..#zrbc.unassigned, "universe") + for resource_name, quota in pairs(zrbc.quota) do + Log.debug_log( "build_resources: " .. resource_balance_category.." "..resource_name.." "..#zrbc.assigned[resource_name].." / "..quota, "universe") + end + + Log.debug_log( "build_resources: begin assign resources based on bias winners", "universe") + --On the 4th pass, for each resource, get all the zones where the bias wins over all other. Sort them based on bias value. Assign up to quota as the limit. + for _, resource_name in pairs(resource_order) do + if zrbc.assigned[resource_name] and #zrbc.assigned[resource_name] < zrbc.quota[resource_name] then + local zones_where_resource_won = {} + for _, zone in pairs(zrbc.unassigned) do + if zone.ordered_resource_bias[1].resource_name == resource_name then + table.insert(zones_where_resource_won, zone) + end + end + table.sort(zones_where_resource_won, function(a,b) return a.resource_bias[resource_name].ordered_bias > b.resource_bias[resource_name].ordered_bias end) -- highest bias is first + while #zones_where_resource_won > 0 and #zrbc.assigned[resource_name] < zrbc.quota[resource_name] do + local zone = zones_where_resource_won[1] + zone.new_primary_resource = resource_name + if resource_balance_category == "planet" then + zone.new_fragment_name = resource_settings[resource_name].core_fragment + end + table.remove(zones_where_resource_won, 1) + util.remove_from_table(zrbc.unassigned, zone) + table.insert(zrbc.assigned[resource_name], zone) + Log.debug_log( "build_resources: "..resource_balance_category.." assign " .. resource_name.." to: " .. zone.name .. " (bias won)", "universe") + end + end + end + Log.debug_log( "build_resources: end assign resources based on bias winners", "universe") + + Log.debug_log( "build_resources: " .. resource_balance_category.." currently unassigned: "..#zrbc.unassigned, "universe") + for resource_name, quota in pairs(zrbc.quota) do + Log.debug_log( "build_resources: " .. resource_balance_category.." "..resource_name.." "..#zrbc.assigned[resource_name].." / "..quota, "universe") + end + + Log.debug_log( "build_resources: begin assign resources in turns by highest remaining bias", "universe") + --On the 5th pass, loop through resources based on the fewest assigned zones. Choose the available zone with the highest bias. + local max_zones = zones_per_resource_min + 1 + local resources_lacking_zones = {} -- resource_names + for _, resource_name in pairs(resource_order) do + if zrbc.assigned[resource_name] and #zrbc.assigned[resource_name] < zrbc.quota[resource_name] then + table.insert(resources_lacking_zones, resource_name) + max_zones = math.min(max_zones, #zrbc.assigned[resource_name]) + Log.debug_log( "build_resources: " .. resource_balance_category.." "..resource_name.." still needs "..(zrbc.quota[resource_name]-#zrbc.assigned[resource_name]).." zones", "universe") + end + end + + local resource_pointer = 1 + while #zrbc.unassigned > 0 and max_zones <= zones_per_resource_min + 1 do + local resource_name = resources_lacking_zones[resource_pointer] + if resource_name and #zrbc.assigned[resource_name] <= max_zones and #zrbc.assigned[resource_name] < zrbc.quota[resource_name] then + -- try to add + table.sort(zrbc.unassigned, function(a,b) return a.resource_bias[resource_name].ordered_bias > b.resource_bias[resource_name].ordered_bias end) -- highest bias is first + local zone = zrbc.unassigned[1] + zone.new_primary_resource = resource_name + if resource_balance_category == "planet" then + zone.new_fragment_name = resource_settings[resource_name].core_fragment + end + util.remove_from_table(zrbc.unassigned, zone) + table.insert(zrbc.assigned[resource_name], zone) + Log.debug_log( "build_resources: "..resource_balance_category.." assign " .. resource_name.." to: " .. zone.name .. " (highest remaining bias)", "universe") + end + resource_pointer = resource_pointer + 1 + if resource_pointer > #resources_lacking_zones then + resource_pointer = 1 + max_zones = max_zones + 1 + end + end + Log.debug_log( "build_resources: end assign resources in turns by highest remaining bias", "universe") + + Log.debug_log( "build_resources: " .. resource_balance_category.." currently unassigned: "..#zrbc.unassigned, "universe") + for resource_name, quota in pairs(zrbc.quota) do + Log.debug_log( "build_resources: " .. resource_balance_category.." "..resource_name.." "..#zrbc.assigned[resource_name].." / "..quota, "universe") + end + + -- Primary resource assignment complete + if #zrbc.unassigned > 0 then + error("build_resources: "..resource_balance_category.." assign resources failed: "..#zrbc.unassigned.." are unassigned") + end + Log.debug_log( "build_resources: "..resource_balance_category.." assign resources complete: "..#zrbc.unassigned.." are unassigned", "universe") + end + + end + + Log.debug_log( "build_resources: update zones based on assignments", "universe") + + for _, zone in pairs(global.zone_index) do + local resource_balance_category = Universe.get_zone_resource_balance_category(zone) + Log.debug_log( "build_resources: update zone based on assignments: "..zone.name.."("..resource_balance_category..")", "universe") + if zone.new_fragment_name then + if zone.fragment_name ~= zone.new_fragment_name then + Log.debug_log( "build_resources: zone fragment changed from "..(zone.fragment_name or "nil").. " to ".. zone.new_fragment_name, "universe") + end + zone.fragment_name = zone.new_fragment_name + Coreminer.update_zone_fragment_resources(zone) + end + + local resource_to_regenerate = {} -- list of resource_name + local resource_to_rescale = {} -- dictionary of resource_name = multiplier + if zone.new_primary_resource ~= zone.primary_resource then + Log.debug_log( "build_resources: zone primary_resource changed from "..(zone.primary_resource or "nil").. " to ".. zone.new_primary_resource, "universe resource_changed") + zone.primary_resource = zone.new_primary_resource + end + + -- Recalculate the biases list using the new primary and excluded resourecs information. + -- Get the list of all excluded resources, including excluded by type. + -- specify 0 controls for excluded. + -- update controls for others. + -- compare with existng fsr if any. + zone.ordered_resource_bias = {} + local invalid_resources = {} + + for _, resource_bias in pairs(zone.resource_bias) do + local resource_name = resource_bias.resource_name + local resource_setting = resource_settings[resource_name] + -- check if it is valid + if resource_setting and resource_setting.allowed_for_zone[resource_balance_category] then + local allowed = true + if resource_name ~= zone.new_primary_resource then + -- Apply strict resources restrictions + if resource_setting.tags_required_for_presence then + local has_required_tag = false + local tags_required = resource_setting.tags_required_for_presence + for _, tag in pairs(tags_required) do + if Util.table_contains(zone.tags, tag) then + has_required_tag = true + break + end + end + if not has_required_tag then + allowed = false + table.insert(invalid_resources, resource_name) + Log.debug_log( "build_resources: secondary resource "..resource_name.." excluded by tag requirements from "..zone.name, "universe") + end + end + end + if allowed then + table.insert(zone.ordered_resource_bias, resource_bias) -- important that this is only valid ones now + resource_bias.ordered_bias = resource_bias.base_bias + if resource_name == zone.primary_resource then + resource_bias.ordered_bias = resource_bias.ordered_bias + 1 -- puts at the top + end + end + else + table.insert(invalid_resources, resource_name) + end + end + table.sort(zone.ordered_resource_bias, function(a,b) return a.ordered_bias > b.ordered_bias end) + + -- Apply incompatible resources exclusions + for i = 1, #zone.ordered_resource_bias do + if zone.ordered_resource_bias[i] then + local resource_name = zone.ordered_resource_bias[i].resource_name + local resource_setting = resource_settings[resource_name] + if resource_setting.excludes then + for _, exclude in pairs(resource_setting.excludes) do + for j = i+1, #zone.ordered_resource_bias do + if zone.ordered_resource_bias[j] then + if zone.ordered_resource_bias[j].resource_name == exclude then + Log.debug_log( "build_resources: secondary resource "..exclude.." excluded by higher resource "..resource_name.." from "..zone.name, "universe") + table.insert(invalid_resources, exclude) + table.remove(zone.ordered_resource_bias, j) + j = j - 1 + end + end + end + end + end + end + end + + + local surface = Zone.get_surface(zone) + + if resource_balance_category ~= "homeworld" then + for i = 1, #zone.ordered_resource_bias do + local category_resource_properties = Universe.category_resource_properties[resource_balance_category] + local resource_name = zone.ordered_resource_bias[i].resource_name + local base_bias = zone.ordered_resource_bias[i].base_bias + if i == 1 then + base_bias = 1 + end + local ordered_bias = (#zone.ordered_resource_bias-i)/#zone.ordered_resource_bias + local resource_value = category_resource_properties.secondary_irregularity * base_bias + (1 - category_resource_properties.secondary_irregularity) * ordered_bias + if i == 1 then + resource_value = 1 + category_resource_properties.primary_boost + end + resource_value = math.pow(resource_value, category_resource_properties.power) + zone.ordered_resource_bias[i].resource_value = resource_value + local old_fsr + if surface and zone.controls[resource_name] then + old_fsr = zone.controls[resource_name].frequency * zone.controls[resource_name].size * zone.controls[resource_name].richness + end + zone.controls[resource_name] = { + frequency = category_resource_properties.frequency[1] + resource_value * (category_resource_properties.frequency[2] - category_resource_properties.frequency[1]), + size = category_resource_properties.size[1] + resource_value * (category_resource_properties.size[2] - category_resource_properties.size[1]), + richness = category_resource_properties.richness[1] + resource_value * (category_resource_properties.richness[2] - category_resource_properties.richness[1]) + } + if surface then + if old_fsr == nil then + table.insert(resource_to_regenerate, resource_name) + else + local new_fsr = zone.controls[resource_name].frequency * zone.controls[resource_name].size * zone.controls[resource_name].richness + local fsr_multiplier = new_fsr / old_fsr + Log.debug_log( "build_resources: resource changed "..zone.name .." ("..resource_balance_category..") "..resource_name.." multiplier = "..fsr_multiplier, "universe") + if fsr_multiplier > Universe.resource_max_change_to_regenerate or fsr_multiplier < Universe.resource_min_change_to_regenerate then + table.insert(resource_to_regenerate, resource_name) + else + -- close enough to rescale + resource_to_rescale[resource_name] = fsr_multiplier + end + end + end + end + else -- homeworlds only + -- Save the mapgen settings to controls for quick reading + zone.controls = {} + if surface then + local mapgen = surface.map_gen_settings + for _, resource_name in pairs(resource_order) do + local resource_setting = resource_settings[resource_name] + if resource_setting and resource_setting.allowed_for_zone[resource_balance_category] then + if mapgen.autoplace_controls and mapgen.autoplace_controls[resource_name] then + zone.controls[resource_name] = mapgen.autoplace_controls[resource_name] + end + else + if not util.table_contains(invalid_resources, resource_name) then + error("Homeworld ("..zone.name..") has invalid resource: " .. resource_name) + end + end + end + else + error("Homeworld ("..zone.name..") has no surface") + end + end + Log.debug_log( "build_resources: resource values for: "..zone.name, "universe") + Log.debug_log( serpent.block(zone.ordered_resource_bias), "universe") + + -- remove all invalid + zone.controls = zone.controls or {} + for _, resource_name in pairs(invalid_resources) do + zone.controls[resource_name] = {frequency = 0, size = -1, richness = -1} + Log.debug_log( "build_resources: invalid resource " .. resource_name.." on "..resource_balance_category.." "..zone.name, "universe") + Universe.remove_resource_from_zone_surface(zone, resource_name) + end + + if zone.plague_used then + if zone.controls["se-vitamelange"] and zone.controls["se-vitamelange"].richness > 0 then + zone.controls["se-vitamelange"] = {frequency = 0, size = -1, richness = -1} + Universe.remove_resource_from_zone_surface(zone, resource_name) + end + zone.controls["enemy-base"] = {frequency = 0, size = -1, richness = -1} + zone.controls["trees"] = {frequency = 0, size = -1, richness = -1} + if zone.primary_resource == "se-vitamelange" then + zone.primary_resource = "coal" + zone.fragment_name = Coreminer.resource_to_fragment_name(zone.primary_resource) + Coreminer.update_zone_fragment_resources(zone) + end + end + + if zone.controls["se-vitamelange"] and zone.controls["se-vitamelange"].richness > 0 then + -- min threat, they like the spice + zone.controls["enemy-base"]=zone.controls["enemy-base"] or {frequency=0.5, size=0.5, richness = 0.5} + zone.controls["enemy-base"].frequency = math.max(zone.controls["enemy-base"].frequency, 0.5) + zone.controls["enemy-base"].size = math.max(zone.controls["enemy-base"].size, 0.5) + zone.controls["enemy-base"].richness = math.max(zone.controls["enemy-base"].richness, 0.5) + end + + -- if there's still a surface, regenerate those that need it (found earlier) + if surface then + local mapgen = surface.map_gen_settings + Log.debug_log( "build_resources: apply controls to " ..zone.name.." mapgen", "universe") + Log.debug_log( serpent.block(zone.controls), "universe") + Zone.apply_controls_to_mapgen(zone, zone.controls, mapgen) + --Log.debug_log( serpent.block(mapgen), "universe") + surface.map_gen_settings = mapgen + if game.tick < 2 then + for _, resource in pairs(resource_order) do + Universe.remove_resource_from_zone_surface(zone, resource_name) + surface.regenerate_entity(resource_name) + end + else + for resource_name, fsr_multiplier in pairs(resource_to_rescale) do + Log.debug_log( "build_resourcess: rescale resource " .. resource_name.." on "..resource_balance_category.." "..zone.name, "universe") + Universe.rescale_or_regenerate_resource(zone, resource_name, fsr_multiplier) + end + for _, resource_name in pairs(resource_to_regenerate) do + Log.debug_log( "build_resourcess: regenerate resource " .. resource_name.." on "..resource_balance_category.." "..zone.name, "universe") + for _, resource in pairs(surface.find_entities_filtered{name = resource_name}) do + resource.destroy() + end + surface.regenerate_entity(resource_name) + end + end + end + + zone.new_primary_resource = nil + zone.new_fragment_name = nil + zone.resource_bias = nil + zone.ordered_resource_bias = nil + zone.strong_claims = nil + + end + Log.debug_log("build_resources: end.", "universe") +end + + +function Universe.load_resource_data() + -- called during Universe.build() as part of initial setup + -- calles as part of on_configuration_changed to see if resource settings have changed. + -- load data and save to global for reuse and tracking changes + + local resources_and_controls = { + resource_controls = Universe.list_resource_controls(), + core_fragments = Universe.list_core_fragments(), + resource_settings = Universe.load_resource_settings(), + category_resource_properties = table.deepcopy(Universe.category_resource_properties) + } + local compare_string = util.table_to_string(resources_and_controls) + + if global.resources_and_controls_compare_string ~= compare_string then + if global.resources_and_controls -- if there are no old settings don't display the message + --or (global.resources_and_controls and global.resources_and_controls.planet_resources) -- change is expected, old settings are legacy + then + game.print({"space-exploration.universe-resources-changed-warning"}) + end + log( "Resource settings mismatch: Resource rebuild required. (Destructive)") + Log.debug_log( "Old settings: " .. (global.resources_and_controls_compare_string or "nil"),"universe") + Log.debug_log( "New settings: " .. compare_string,"universe") + + --game.write_file("space-exploration.old_resources_and_controls_compare_string.lua", serpent.dump(global.resources_and_controls_compare_string, {comment=false, sparse=true, indent = "\t", nocode=true, name="old_resources_and_controls_compare_string"}), false) + + --game.write_file("space-exploration.new_resources_and_controls.lua", serpent.dump(resources_and_controls, {comment=false, sparse=true, indent = "\t", nocode=true, name="global"}), false) + + -- keep a record of old value for comparison + local old_resources_and_controls = global.resources_and_controls + local old_resources_and_controls_compare_string = global.compare_string + global.resources_and_controls = resources_and_controls + global.resources_and_controls_compare_string = compare_string + + Universe.build_resources() + + else + global.resources_and_controls = resources_and_controls + global.resources_and_controls_compare_string = compare_string + end + +end + +function Universe.estimate_resource_fsr(zone_control) + -- estimate the resource yeild. + local f = zone_control.frequency or 1 + local s = zone_control.size or 1 + local r = zone_control.richness or 1 + return f * s * r +end + +function Universe.add_tag(zone_tags, new_tag, override) + local u = string.find(new_tag, "_") + local tag_domain = string.sub(new_tag, 1, u-1) + if override or not zone_tags[tag_domain] then + zone_tags[tag_domain] = new_tag + end +end + +function Universe.apply_control_tags(controls, tags) + if not tags then return controls end + for _, tag in pairs(tags) do + + if tag == "water_none" then + controls.water = {size = 0} + elseif tag == "water_low" then + controls.water = {frequency=0.5, size = 0.3} + elseif tag == "water_med" then + controls.water = {frequency=1, size = 1} + elseif tag == "water_high" then + controls.water = {frequency=1, size = 4} + elseif tag == "water_max" then + controls.water = {frequency=0.5, size = 10} + + elseif tag == "moisture_none" then + controls.moisture={frequency=2, bias=-1} + elseif tag == "moisture_low" then + controls.moisture={frequency=1, bias=-0.15} + elseif tag == "moisture_med" then + controls.moisture={frequency=1, bias=0} + elseif tag == "moisture_high" then + controls.moisture={frequency=1, bias=0.15} + elseif tag == "moisture_max" then + controls.moisture={frequency=2, bias=0.5} + + elseif tag == "aux_very_low" then + controls.aux={frequency=1, bias=-0.5} + elseif tag == "aux_low" then + controls.aux={frequency=1, bias=-0.3} + elseif tag == "aux_med" then + controls.aux={frequency=1, bias=-0.1} + elseif tag == "aux_high" then + controls.aux={frequency=1, bias=0.2} + elseif tag == "aux_very_high" then + controls.aux={frequency=1, bias=0.5} + + elseif tag == "temperature_bland" then + controls.hot={frequency=0.5, size=0} + controls.cold={frequency=0.5, size=0} + elseif tag == "temperature_temperate" then + controls.hot={frequency=1, size=0.25} + controls.cold={frequency=1, size=0.25} + elseif tag == "temperature_midrange" then + controls.hot={frequency=1, size=0.65} + controls.cold={frequency=1, size=0.65} + elseif tag == "temperature_balanced" then + controls.hot={frequency=1, size=1} + controls.cold={frequency=1, size=1} + elseif tag == "temperature_wild" then + controls.hot={frequency=1, size=3} + controls.cold={frequency=1, size=3} + elseif tag == "temperature_extreme" then + controls.hot={frequency=1, size=6} + controls.cold={frequency=1, size=6} + + elseif tag == "temperature_cool" then + controls.hot={frequency=0.75, size=0} + controls.cold={frequency=0.75, size=0.5} + elseif tag == "temperature_cold" then + controls.hot={frequency=0.5, size=0} + controls.cold={frequency=0.5, size=1} + elseif tag == "temperature_vcold" then + controls.hot={frequency=0.5, size=0} + controls.cold={frequency=0.5, size=3} + elseif tag == "temperature_frozen" then + controls.hot={frequency=0.5, size=0} + controls.cold={frequency=0.5, size=6} + + elseif tag == "temperature_warm" then + controls.hot={frequency=0.75, size=0.5} + controls.cold={frequency=0.75, size=0} + elseif tag == "temperature_hot" then + controls.hot={frequency=0.5, size=1} + controls.cold={frequency=0.5, size=0} + elseif tag == "temperature_vhot" then + controls.hot={frequency=0.5, size=3} + controls.cold={frequency=0.5, size=0} + elseif tag == "temperature_volcanic" then + controls.hot={frequency=0.5, size=6} + controls.cold={frequency=0.5, size=0} + + elseif tag == "trees_none" then + controls.trees={frequency=0.25, size=0, richness = 0} + elseif tag == "trees_low" then + controls.trees={frequency=0.6, size=0.35, richness = 0.8} + elseif tag == "trees_med" then + controls.trees={frequency=0.8, size=0.66, richness = 1} + elseif tag == "trees_high" then + controls.trees={frequency=1, size=1, richness = 1} + elseif tag == "trees_max" then + controls.trees={frequency=3, size=1, richness = 1} + + elseif tag == "cliff_none" then + controls.cliff={frequency=0.01, richness = 0} + elseif tag == "cliff_low" then + controls.cliff={frequency=0.3, richness = 0.3} + elseif tag == "cliff_med" then + controls.cliff={frequency=1, richness = 1} + elseif tag == "cliff_high" then + controls.cliff={frequency=2, richness = 2} + elseif tag == "cliff_max" then + controls.cliffs={frequency=6, richness = 2} + + elseif tag == "enemy_none" then + controls["enemy-base"]={frequency=0.000001, size=-1, richness = -1} + elseif tag == "enemy_very_low" then + controls["enemy-base"]={frequency=0.1, size=0.1, richness = 0.1} + elseif tag == "enemy_low" then + controls["enemy-base"]={frequency=0.2, size=0.2, richness = 0.2} + elseif tag == "enemy_med" then + controls["enemy-base"]={frequency=0.5, size=0.5, richness = 0.5} + elseif tag == "enemy_high" then + controls["enemy-base"]={frequency=1, size=1, richness = 1} + elseif tag == "enemy_very_high" then + controls["enemy-base"]={frequency=1.5, size=2, richness = 1.5} + elseif tag == "enemy_max" then + controls["enemy-base"]={frequency=2, size=6, richness = 2} + else + log("invalid climate tag: " .. tag) + end + end + return controls +end + +function Universe.process_unordered_tags(unorded_tags) + local ordered_tags = {} + for _, tag in pairs(unorded_tags) do + local u = string.find(tag, "_") + local tag_domain = string.sub(tag, 1, u-1) + ordered_tags[tag_domain] = tag + end + return ordered_tags +end + +function Universe.multiply_sfr(control, fsr_multiplier) + local split_mult = math.sqrt(fsr_multiplier) + control.size = control.size * split_mult + control.richness = control.richness * split_mult +end + +function Universe.get_zone_resource_balance_category(zone) -- used to balance resource specilisations within zones that can support them + if zone.is_homeworld then return "homeworld" end + if Zone.is_solid(zone) then return "planet" end + if zone.type == "orbit" or zone.type == "star" then return "orbit" end + if zone.type == "anomaly" then return "anomaly" end + if zone.type == "asteroid-belt" then return "asteroid-belt" end + if zone.type == "asteroid-field" then return "asteroid-field" end + error("unknown zone_resource_balance_category for zone.type: " .. zone.type) +end + +function Universe.get_zone_prototype(name) + return UniverseRaw.prototypes_by_name[name] or {} +end + +function Universe.inflate_climate_controls(zone) + -- avoid resource stuff here. + if not global.rng then global.rng = game.create_random_generator() end + if not zone.seed then zone.seed = global.rng(4294967295) end + local crng = game.create_random_generator(zone.seed) + + if zone.is_homeworld then return end + + if zone.type == "planet" or zone.type == "moon" then + + local prototype = Universe.get_zone_prototype(zone.name) + + -- nauvis is 25000 + if not zone.ticks_per_day then + zone.ticks_per_day = 25000 -- nauvis + if (zone.name ~= "Nauvis" and zone.is_homeworld ~= true) then + if crng() < 0.5 then + zone.ticks_per_day = 60*60 + crng(60*60*59) -- 1 - 60 minutes + else + zone.ticks_per_day = 60*60 + crng(60*60*19) -- 1 - 20 minutes + end + end + end + + if not zone.biome_replacements then + zone.biome_replacements = prototype.biome_replacements and table.deepcopy(prototype.biome_replacements) or {} + end + if zone.biome_replacements and not zone.tile_replacements then + Zone.build_tile_replacements(zone) + end + + + -- apply prototype settings + if not (zone.tags and zone.tags.temperature) then -- not new format + if zone.tags and zone.tags[0] then -- has tags in new format + zone.tags = Universe.process_unordered_tags(zone.tags) + elseif prototype.tags then + zone.tags = Universe.process_unordered_tags(table.deepcopy(prototype.tags)) + else + zone.tags = {} + end + end + + if not zone.tags.temperature then + zone.tags.temperature = Universe.temperature_tags[crng(#Universe.temperature_tags)] + end + if not (zone.tags.water and zone.tags.moisture and zone.tags.trees) then + + -- water, moisture and trees are usually linked but not always + local rng_water = 1 + local rng_moisture = 1 + local rng_trees = 1 + if crng() < 0.75 then + rng_water = crng(1, 5) + rng_moisture = rng_water + if crng() < 0.5 then + rng_moisture = crng(1, 5) + end + rng_trees = rng_moisture + if crng() < 0.5 then + rng_trees = crng(1, 5) + end + end + rng_trees = math.min(rng_trees, crng(1, 5)) + + if not zone.tags.water then + zone.tags.water = Universe.water_tags[rng_water] + end + if not zone.tags.moisture then + zone.tags.moisture = Universe.moisture_tags[rng_moisture] + end + if not zone.tags.trees then + zone.tags.trees = Universe.trees_tags[rng_trees] + end + end + if not zone.tags.enemy then + zone.tags.enemy = Universe.enemy_tags[crng(#Universe.enemy_tags)] + end + if not zone.tags.aux then + zone.tags.aux = Universe.aux_tags[crng(#Universe.aux_tags)] + end + if not zone.tags.cliff then + zone.tags.cliff = Universe.cliff_tags[crng(#Universe.cliff_tags)] + end + + if not zone.controls then + zone.controls = {} + end + local tag_controls = Universe.apply_control_tags({}, zone.tags) + zone.controls = util.overwrite_table(zone.controls, tag_controls) -- climate controls win + if prototype.controls then + util.overwrite_table(zone.controls, table.deepcopy(prototype.controls)) -- prototype controls win + end + + -- fallback + for _, control in pairs(game.autoplace_control_prototypes) do + if control.category == "resource" and not zone.controls[control] then + zone.controls[control] = {frequency = 1, size = 0, richness = 0} + end + end + + else -- some sort of space place + ------------------------------------------------------------------------------ + local prototype = Universe.get_zone_prototype(zone.name) + if zone.type == "orbit" then + prototype = Universe.get_zone_prototype(zone.parent.name) + end + + if not zone.controls then + zone.controls = prototype.controls and table.deepcopy(prototype.controls) or {} + end + local tag_controls = Universe.apply_control_tags({}, zone.tags) + zone.controls = util.overwrite_table(tag_controls, zone.controls) -- exisitng controls win + zone.controls.tree = {frequency = 1, size = 0, richness = 0} + + -- fallback + for _, control in pairs(game.autoplace_control_prototypes) do + if control.category == "resource" and not zone.controls[control] then + zone.controls[control] = {frequency = 1, size = 0, richness = 0} + end + end + + end + +end + +function Universe.list_resource_controls() + local resource_controls = {} + for _, control in pairs(game.autoplace_control_prototypes) do + if control.category == "resource" then + table.insert(resource_controls, control.name) + end + end + return resource_controls +end + +function Universe.list_core_fragments() + local core_fragments = {} + for _, item_proto in pairs(game.item_prototypes ) do + if item_proto.localised_name and item_proto.localised_name[1] and item_proto.localised_name[1] == "item-name.core-fragment" then + table.insert(core_fragments, item_proto.name) + end + end + return core_fragments +end + +function Universe.load_resource_settings() + local resource_settings = {} + for _, resource_proto in pairs(game.entity_prototypes) do + if resource_proto.type == "resource" then + if resource_proto.autoplace_specification + and not Util.table_contains(Shared.resources_with_shared_controls, resource_proto.name) -- pretend it is not here if based on something else + then -- not disabled + + if not game.autoplace_control_prototypes[resource_proto.name] then + error("Error: autoplace_control not found for " .. resource_proto.name .. ".") + end + + local resource_setting = { + name = resource_proto.name, + allowed_for_zone = { + ["homeworld"] = true, + ["planet"] = true, -- includes moons + ["orbit"] = true, + ["asteroid-belt"] = true, + ["asteroid-field"] = true + }, + core_fragment = nil, -- fragment name if matches pattern + can_be_primary = true, --provided by override. -- only false for things like water pools + tags_required_for_presence = nil, --provided by override. + tags_required_for_primary = nil, --provided by override. + yeild_affected_by = nil --provided by override. if climate affects yeild (eg. only appears on snow) + } + + for _, word in pairs(Universe.resource_word_rules.not_space) do + if string.find(resource_proto.name, word, 1, true) then + resource_setting.allowed_for_zone["orbit"] = false + resource_setting.allowed_for_zone["asteroid-belt"] = false + resource_setting.allowed_for_zone["asteroid-field"] = false + end + end + if resource_setting.allowed_for_zone["orbit"] then + for _, word in pairs(Universe.resource_word_rules.not_orbit) do + if string.find(resource_proto.name, word, 1, true) then + resource_setting.allowed_for_zone["orbit"] = false + end + end + end + if resource_setting.allowed_for_zone["asteroid-belt"] then + for _, word in pairs(Universe.resource_word_rules.not_asteroid_belt) do + if string.find(resource_proto.name, word, 1, true) then + resource_setting.allowed_for_zone["asteroid-belt"] = false + end + end + end + if resource_setting.allowed_for_zone["asteroid-field"] then + for _, word in pairs(Universe.resource_word_rules.not_asteroid_field) do + if string.find(resource_proto.name, word, 1, true) then + resource_setting.allowed_for_zone["asteroid-field"] = false + end + end + end + + for _, word in pairs(Universe.resource_word_rules.not_planet) do + if string.find(resource_proto.name, word, 1, true) then + resource_setting.allowed_for_zone["planet"] = false + resource_setting.allowed_for_zone["homeworld"] = false + end + end + if resource_setting.allowed_for_zone["homeworld"] then + for _, word in pairs(Universe.resource_word_rules.not_homeworld) do + if string.find(resource_proto.name, word, 1, true) then + resource_setting.allowed_for_zone["homeworld"] = false + end + end + end + + if game.item_prototypes[util.mod_prefix .. "core-fragment-" .. resource_setting.name] then + resource_setting.core_fragment = util.mod_prefix .. "core-fragment-" .. resource_setting.name + end + + if Universe.resource_setting_overrides[resource_setting.name] then + for key, override in pairs(Universe.resource_setting_overrides[resource_setting.name]) do + if key == "allowed_for_zone" then -- don't overwite table with partial table + for key2, override2 in pairs(override) do + resource_setting[key][key2] = override2 + end + else + resource_setting[key] = override + end + end + end + + resource_settings[resource_setting.name] = resource_setting + end + end + end + return resource_settings +end + +function Universe.remove_resource_from_zone_surface(zone, resource) + if resource and game.entity_prototypes[resource] then + local surface = Zone.get_surface(zone) + if surface then + Log.debug_log("remove_resource_from_zone_surface: " .. zone.name .. " (" .. zone.type .. ") ".. resource,"universe") + for _, resource in pairs(surface.find_entities_filtered{name = resource}) do + resource.destroy() + end + end + end +end + +function Universe.rescale_or_regenerate_resource(zone, resource_name, fsr_multiplier) + local surface = Zone.get_surface(zone) + if not surface and resource_name then + Log.debug_log("rescale_or_regenerate_resource: " .. zone.name .. " (" .. zone.type .. ") " .. resource_name .. " (no surface to update)","universe") + return + end + + local entities = surface.find_entities_filtered{type = "resource", name=resource_name} + if #entities > 0 then + Log.debug_log("rescale_or_regenerate_resource: ".. zone.name .. " (" .. zone.type .. ") " .. resource_name .. " * " .. fsr_multiplier,"universe") + for _, entity in pairs(entities) do + local amount = math.ceil(entity.amount * fsr_multiplier) + if amount > 0 then + entity.amount = amount + else + entity.destroy() + end + end + else + Log.debug_log("rescale_or_regenerate_resource: " .. zone.name .. " (" .. zone.type .. ") " .. resource_name .. " (regenerate)","universe") + surface.regenerate_entity(resource_name) + end +end + +function Universe.shuffle(tbl) + -- global.rng should always be re-assigned at the start of Universe.build + size = #tbl + for i = size, 1, -1 do + local rand = global.rng(1, size) + tbl[i], tbl[rand] = tbl[rand], tbl[i] + end + return tbl +end + +function Universe.fit_climate_to_primary_resource(zone) + local crng = game.create_random_generator(zone.seed) + local resource_setting = global.resources_and_controls.resource_settings[zone.primary_resource] + local tags_required = resource_setting.tags_required_for_primary or resource_setting.tags_required_for_presence + local new_tag = tags_required[crng(#tags_required)] + Universe.add_tag(zone.tags, new_tag, true) + local override_climate_tags = {} + Universe.add_tag(override_climate_tags, new_tag, true) + local tag_controls = Universe.apply_control_tags({}, override_climate_tags) + zone.controls = util.overwrite_table(zone.controls, tag_controls) -- climate controls win + local surface = Zone.get_surface(zone) + if surface then + Zone.delete_surface(zone) + surface = Zone.get_surface(zone) + if surface then -- can't delete + local mapgen = surface.map_gen_settings + Zone.apply_controls_to_mapgen(zone, tag_controls, mapgen) + surface.map_gen_settings = mapgen + game.print(zone.name.." primary resource changed and the climate has been affected. If hard edges appear in the terrain generation use the Regenerate Terrain mod on the surface.") + end + end +end + +function Universe.make_validate_homesystem(planet) + Log.debug_log("make_validate_homesystem - Planet: ".. planet.name, "universe") + + -- make sure planet is marked as homeworld + planet.is_homeworld = true + planet.special_type = "homeworld" + + -- make sure system is marked as home system + local star = planet.parent + star.special_type = "homesystem" + Log.debug_log("make_validate_homesystem - Star: ".. star.name, "universe") + + -- make sure there are at least 6 planets in the solar systems. + -- first is small volcanic planet with no moons + -- second is homeworld + -- third has vitamelange moon + -- beryllium asteroid belt + -- fourth has iridium moon + -- fifth has holmium moon + -- RANDOM EXCESS + -- last (6th?) has a cryonite moon + -- random asteroid belt 2 + + local beryllium_asteroid_belt = nil + local other_asteroid_belts = {} + local vulcanite_planet = nil + local vitamelange_parent_planet = nil + local holmium_parent_planet = nil + local iridium_parent_planet = nil + local cryonite_parent_planet = nil + local other_planets = {} + local homeworld_index = nil + for i, child in pairs(star.children) do + if child.type == "asteroid-belt" then + if child.special_type == "beryllium" then + beryllium_asteroid_belt = child + Log.debug_log("make_validate_homesystem - already has beryllium belt ".. child.name, "universe") + else + table.insert(other_asteroid_belts, child) + Log.debug_log("make_validate_homesystem - generic asteroid belt located ".. child.name, "universe") + end + else + if child.special_type == "vulcanite" then + vulcanite_planet = child + Log.debug_log("make_validate_homesystem - already has vulcanite planet ".. child.name, "universe") + elseif child.children and child.children[1] and child.children[1].special_type == "vitamelange" then + vitamelange_parent_planet = child + Log.debug_log("make_validate_homesystem - already has vitamelange moon ".. child.name .. " > " .. child.children[1].name, "universe") + elseif child.children and child.children[1] and child.children[1].special_type == "iridium" then + iridium_parent_planet = child + Log.debug_log("make_validate_homesystem - already has iridium moon ".. child.name .. " > " .. child.children[1].name, "universe") + elseif child.children and child.children[1] and child.children[1].special_type == "holmium" then + holmium_parent_planet = child + Log.debug_log("make_validate_homesystem - already has holmium moon ".. child.name .. " > " .. child.children[1].name, "universe") + elseif child.children and child.children[1] and child.children[1].special_type == "cryonite" then + cryonite_parent_planet = child + Log.debug_log("make_validate_homesystem - already has cryonite moon ".. child.name .. " > " .. child.children[1].name, "universe") + elseif child.is_homeworld then + Log.debug_log("make_validate_homesystem - homeworld located ".. child.name, "universe") + else + table.insert(other_planets, child) + Log.debug_log("make_validate_homesystem - generic planet located ".. child.name, "universe") + end + end + end + + -- make sure the planet has a safe haven moon to escape to + local first_moon = planet.children[1] + if first_moon.special_type == "haven" then + Log.debug_log("make_validate_homesystem - homeworld has a haven moon.", "universe") + else + -- add a haven moon + Log.debug_log("make_validate_homesystem - homeworld does not have a haven moon.", "universe") + Universe.add_special_moon(planet, "haven", UniverseRaw.haven_moons) + end + + if not vulcanite_planet then + -- make a new planet 1. + Log.debug_log("make_validate_homesystem - homesystem does not have a vulcanite planet", "universe") + local protoplanets = table.deepcopy(UniverseRaw.vulcanite_planets) + Universe.shuffle(protoplanets) + local new_planet = nil + for i = 1, #protoplanets do + if protoplanets[i] and not global.zones_by_name[protoplanets[i].name] then + new_planet = protoplanets[i] + end + end + if new_planet then + Log.debug_log("make_validate_homesystem - Making new planet for vulcanite", "universe") + vulcanite_planet = new_planet + table.insert(star.children, 1, new_planet) + new_planet.type = "planet" + new_planet.special_type = "vulcanite" + new_planet.parent = star + new_planet.radius_multiplier = new_planet.radius_multiplier or 0.3 + new_planet.radius = Universe.planet_max_radius * new_planet.radius_multiplier + new_planet.index = #global.zone_index + 1 + new_planet.climate = new_planet.climate or {} + new_planet.seed = global.rng(4294967295) + new_planet.children = {} + global.zone_index[new_planet.index] = new_planet + global.zones_by_name[new_planet.name] = new_planet + + new_planet.orbit = { + type = "orbit", + name = new_planet.name .. " Orbit", + parent = new_planet, + seed = global.rng(4294967295), + index = #global.zone_index + 1 + } + global.zone_index[new_planet.orbit.index] = new_planet.orbit + global.zones_by_name[new_planet.orbit.name] = new_planet.orbit + end + end + + if not vitamelange_parent_planet then + Log.debug_log("make_validate_homesystem - homesystem does not have a vitamelange moon", "universe") + if #other_planets > 0 then + vitamelange_parent_planet = other_planets[1] + table.remove(other_planets, 1) + Log.debug_log("make_validate_homesystem - Selecting existing planet for vitamelange moon: "..vitamelange_parent_planet.name, "universe") + else + Log.debug_log("make_validate_homesystem - No existing planet available for vitamelange moon, creating new one.", "universe") + vitamelange_parent_planet = Universe.make_generic_planet(star, index) + end + Universe.add_special_moon(vitamelange_parent_planet, "vitamelange", UniverseRaw.vitamelange_moons) + end + + if not iridium_parent_planet then + Log.debug_log("make_validate_homesystem - homesystem does not have a iridium moon", "universe") + if #other_planets > 0 then + iridium_parent_planet = other_planets[1] + table.remove(other_planets, 1) + Log.debug_log("make_validate_homesystem - Selecting existing planet for iridium moon: "..iridium_parent_planet.name, "universe") + else + Log.debug_log("make_validate_homesystem - No existing planet available for iridium moon, creating new one.", "universe") + iridium_parent_planet = Universe.make_generic_planet(star, index) + end + Universe.add_special_moon(iridium_parent_planet, "iridium", UniverseRaw.iridium_moons) + end + + if not holmium_parent_planet then + Log.debug_log("make_validate_homesystem - homesystem does not have a holmium moon", "universe") + if #other_planets > 0 then + holmium_parent_planet = other_planets[1] + table.remove(other_planets, 1) + Log.debug_log("make_validate_homesystem - Selecting existing planet for holmium moon: "..holmium_parent_planet.name, "universe") + else + Log.debug_log("make_validate_homesystem - No existing planet available for holmium moon, creating new one.", "universe") + holmium_parent_planet = Universe.make_generic_planet(star, index) + end + Universe.add_special_moon(holmium_parent_planet, "holmium", UniverseRaw.holmium_moons) + end + + if not cryonite_parent_planet then + Log.debug_log("make_validate_homesystem - homesystem does not have a cryonite moon", "universe") + if #other_planets > 0 then + cryonite_parent_planet = other_planets[1] + table.remove(other_planets, 1) + Log.debug_log("make_validate_homesystem - Selecting existing planet for cryonite moon: "..cryonite_parent_planet.name, "universe") + else + Log.debug_log("make_validate_homesystem - No existing planet available for cryonite moon, creating new one.", "universe") + cryonite_parent_planet = Universe.make_generic_planet(star, index) + end + Universe.add_special_moon(cryonite_parent_planet, "cryonite", UniverseRaw.cryonite_moons) + end + + while #other_asteroid_belts < (beryllium_asteroid_belt and 1 or 2) do + Log.debug_log("make_validate_homesystem - Not enough asteroid belts, creating new one.", "universe") + local new_belt = { + type = "asteroid-belt", + name = star.name .. " Asteroid Belt ".. (#other_asteroid_belts + (beryllium_asteroid_belt and 0 or 1)), + seed = global.rng(4294967295), + index = #global.zone_index + 1, + parent = star + } + global.zone_index[new_belt.index] = new_belt + global.zones_by_name[new_belt.name] = new_belt + table.insert(other_asteroid_belts, new_belt) + end + if not beryllium_asteroid_belt then + Log.debug_log("make_validate_homesystem - homesystem does not have a beryllium belt", "universe") + beryllium_asteroid_belt = other_asteroid_belts[1] + beryllium_asteroid_belt.special_type = "beryllium" + table.remove(other_asteroid_belts, 1) + end + + -- put the solar system back together + star.children = {} + table.insert(star.children, vulcanite_planet) + table.insert(star.children, planet) + table.insert(star.children, vitamelange_parent_planet) + table.insert(star.children, beryllium_asteroid_belt) + table.insert(star.children, iridium_parent_planet) + table.insert(star.children, holmium_parent_planet) + for i, p in pairs(other_planets) do + table.insert(star.children, p) + end + table.insert(star.children, cryonite_parent_planet) + for i, b in pairs(other_asteroid_belts) do + table.insert(star.children, b) + end + Universe.star_gravity_well_distribute(star) +end + +function Universe.make_generic_planet(star, index) + Log.debug_log("make_generic_planet - New planet for star: "..star.name, "universe") + local protoplanets = table.deepcopy(UniverseRaw.unassigned_planets_or_moons) + Universe.shuffle(protoplanets) + local new_planet = nil + for i = 1, #protoplanets do + if protoplanets[i] and not global.zones_by_name[protoplanets[i].name] then + new_planet = protoplanets[i] + end + end + if new_planet then + local planet_prototype = table.deepcopy(new_planet) + if index then + table.insert(star.children, index, new_planet) + else + table.insert(star.children, new_planet) + end + new_planet.type = "planet" + new_planet.parent = star + new_planet.radius_multiplier = 0.4 + 0.6 * math.pow(global.rng(), 2) -- need to consistently call rng even if prototype.radius_multiplier is defined + if planet_prototype and planet_prototype.radius_multiplier then + new_planet.radius_multiplier = planet_prototype.radius_multiplier + end + new_planet.radius = Universe.planet_max_radius * new_planet.radius_multiplier + new_planet.index = #global.zone_index + 1 + new_planet.climate = new_planet.climate or {} + new_planet.seed = global.rng(4294967295) + new_planet.children = {} + global.zone_index[new_planet.index] = new_planet + global.zones_by_name[new_planet.name] = new_planet + Log.debug_log("make_generic_planet - New planet: "..new_planet.name.." index: "..new_planet.index, "universe") + + new_planet.orbit = { + type = "orbit", + name = new_planet.name .. " Orbit", + parent = new_planet, + seed = global.rng(4294967295), + index = #global.zone_index + 1 + } + global.zone_index[new_planet.orbit.index] = new_planet.orbit + global.zones_by_name[new_planet.orbit.name] = new_planet.orbit + Log.debug_log("make_generic_planet - New plane orbitt: "..new_planet.orbit.name.." index: "..new_planet.orbit.index, "universe") + + Universe.star_gravity_well_distribute(star) + return new_planet + end +end + +function Universe.add_special_moon(parent_planet, special_type, special_list) + Log.debug_log("add_special_moon - New special moon for planet: "..parent_planet.name.." ("..special_type..")", "universe") + local protomoons = table.deepcopy(special_list) + Universe.shuffle(protomoons) + local new_moon = nil + for i = 1, #protomoons do + if protomoons[i] and not global.zones_by_name[protomoons[i].name] then + new_moon = protomoons[i] + end + end + if new_moon then + table.insert(parent_planet.children, 1, new_moon) + new_moon.type = "moon" + new_moon.special_type = special_type + new_moon.parent = parent_planet + new_moon.radius_multiplier = new_moon.radius_multiplier or 0.3 + new_moon.radius = (0.5 * parent_planet.radius + math.min(parent_planet.radius, Universe.planet_max_radius / 2)) / 2 * new_moon.radius_multiplier -- special moons can't be as big + new_moon.index = #global.zone_index + 1 + new_moon.climate = new_moon.climate or {} + new_moon.seed = global.rng(4294967295) + global.zone_index[new_moon.index] = new_moon + global.zones_by_name[new_moon.name] = new_moon + Log.debug_log("add_special_moon - New special moon: "..new_moon.name.." index: "..new_moon.index, "universe") + + new_moon.orbit = { + type = "orbit", + name = new_moon.name .. " Orbit", + parent = new_moon, + seed = global.rng(4294967295), + index = #global.zone_index + 1 + } + global.zone_index[new_moon.orbit.index] = new_moon.orbit + global.zones_by_name[new_moon.orbit.name] = new_moon.orbit + Log.debug_log("add_special_moon - New special moon orbit "..new_moon.orbit.name.." index: "..new_moon.orbit.index, "universe") + Universe.planet_gravity_well_distribute(parent_planet) + end +end + +function Universe.star_gravity_well_distribute(star) + star.star_gravity_well = 10 + #star.children + star.index / 1000 + Log.debug_log("star_gravity_well_distribute " .. star.name .." star_gravity_well "..star.star_gravity_well, "universe") + for c, child in pairs(star.children) do + child.star_gravity_well = star.star_gravity_well * (0.05 + 0.8 * (#star.children - c) / #star.children) + Log.debug_log("star_gravity_well_distribute " .. child.name .." star_gravity_well "..child.star_gravity_well , "universe") + if child.children then + Universe.planet_gravity_well_distribute(child) + end + end +end + +function Universe.planet_gravity_well_distribute(planet) + planet.planet_gravity_well = 10 * (1 + planet.radius_multiplier) + #planet.children -- 12-20 + n_children = 13 to 26 + for m, moon in pairs(planet.children) do + moon.star_gravity_well = planet.star_gravity_well + moon.planet_gravity_well = planet.planet_gravity_well * (#planet.children - m + 1) / (#planet.children + 2) + end +end + +function Universe.set_hierarchy_values() + -- zone.hierarchy_index for quick sorting in zone lists + local list = {} + table.insert(list, global.universe.anomaly) + local temp = {} + for _, star in pairs(global.universe.stars) do + table.insert(temp, star) + end + table.sort(temp, function(a,b) return a.name < b.name end) + for _, star in pairs(temp) do + table.insert(list, star) + table.insert(list, star.orbit) + for _, planet_or_belt in pairs(star.children) do + table.insert(list, planet_or_belt) + if planet_or_belt.orbit then + table.insert(list, planet_or_belt.orbit) + end + if planet_or_belt.children then + for _, moon in pairs(planet_or_belt.children) do + table.insert(list, moon) + table.insert(list, moon.orbit) + end + end + end + end + temp = {} + for _, zone in pairs(global.universe.space_zones) do + table.insert(temp, zone) + end + table.sort(temp, function(a,b) return a.name < b.name end) + for _, zone in pairs(temp) do + table.insert(list, zone) + end + for i, zone in pairs(list) do + zone.hierarchy_index = i + end +end + +function Universe.update_zone_minimum_threat(zone) + if zone.controls["se-vitamelange"] and zone.controls["se-vitamelange"].richness > 0 then + -- min threat, they like the spice + zone.controls["enemy-base"]=zone.controls["enemy-base"] or {frequency=0.5, size=0.5, richness = 0.5} + zone.controls["enemy-base"].frequency = math.max(zone.controls["enemy-base"].frequency, 0.5) + zone.controls["enemy-base"].size = math.max(zone.controls["enemy-base"].size, 0.5) + zone.controls["enemy-base"].richness = math.max(zone.controls["enemy-base"].richness, 0.5) + end + local surface = Zone.get_surface(zone) + if surface then + local mapgen = surface.map_gen_settings + Zone.apply_controls_to_mapgen(zone, zone.controls, mapgen) + surface.map_gen_settings = mapgen + end +end + +function Universe.update_zones_minimum_threat(update_existing_surfaces) + for _, zone in pairs(global.zone_index) do + if update_existing_surfaces ~= false or not zone.surface_index then + Universe.update_zone_minimum_threat(zone) + end + end +end + +return Universe diff --git a/space-exploration_0.5.80/space-exploration/scripts/util.lua b/space-exploration_0.5.80/space-exploration/scripts/util.lua new file mode 100644 index 0000000..6155263 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/util.lua @@ -0,0 +1,948 @@ +local util = {} + +util.mod_prefix = "se-" -- update strings.cfg + +util.min = math.min +util.max = math.max +util.floor = math.floor +util.abs = math.abs +util.sqrt = math.sqrt +util.sin = math.sin +util.cos = math.cos +util.atan = math.atan +util.atan2 = math.atan2 +util.pi = math.pi +util.remove = table.remove +util.insert = table.insert +util.str_gsub = string.gsub + +function string.starts(String,Start) + return string.sub(String,1,string.len(Start))==Start +end + +function util.deep_copy (t) + return table.deepcopy(t) +end + +function util.shallow_copy (t) -- shallow-copy a table + if type(t) ~= "table" then return t end + local meta = getmetatable(t) + local target = {} + for k, v in pairs(t) do target[k] = v end + setmetatable(target, meta) + return target +end + +function util.remove_from_table(list, item) + local index = 0 + for _,_item in ipairs(list) do + if item == _item then + index = _ + break + end + end + if index > 0 then + util.remove(list, index) + end +end + +function util.shuffle (tbl) + size = #tbl + for i = size, 1, -1 do + --local rand = 1 + math.floor(size * (math.random() - 0.0000001)) + local rand = math.random(size) + tbl[i], tbl[rand] = tbl[rand], tbl[i] + end + return tbl +end + +function util.random_from_array (tbl) + --return tbl[1 + math.floor(#tbl * (math.random() - 0.0000001))] + return tbl[math.random(#tbl)] +end + +function util.transfer_burner (entity_a, entity_b) + if entity_a.burner and entity_a.burner.currently_burning and entity_b.burner then + entity_b.burner.currently_burning = entity_a.burner.currently_burning.name + entity_b.burner.remaining_burning_fuel = entity_a.burner.remaining_burning_fuel + end +end + +function util.copy_inventory (inv_a, inv_b, probability) + if not probability then probability = 1 end + if inv_a and inv_b then + local contents = inv_a.get_contents() + for item_type, item_count in pairs(contents) do + if probability == 1 or probability > math.random() then + inv_b.insert({name=item_type, count=item_count}) + end + end + end +end + +function util.move_inventory_items (inv_a, inv_b) + -- move all items from inv_a to inv_b + -- preserves item data but inv_b MUST be able to accept the items or they are lost. + -- inventory A is cleared. + for i = 1, util.min(#inv_a, #inv_b) do + if inv_a[i] and inv_a[i].valid then + inv_b.insert(inv_a[i]) + end + end + inv_a.clear() +end + +function util.transfer_inventory_filters_direct(inv_a, inv_b) + if inv_a.supports_filters() and inv_b.supports_filters() then + for i = 1, util.min(#inv_a, #inv_b) do + local filter = inv_a.get_filter(i) + if filter then + inv_b.set_filter(i, filter) + end + end + end +end + +function util.transfer_inventory_filters (entity_a, entity_b, inventory_type) + local inv_a = entity_a.get_inventory(inventory_type) + local inv_b = entity_b.get_inventory(inventory_type) + util.transfer_inventory_filters_direct(inv_a, inv_b) +end + +function util.transfer_equipment_grid (entity_a, entity_b) -- NOTE: entity can be an item + if not (entity_a.grid and entity_b.grid) then return end + local grid_a = entity_a.grid + local grid_b = entity_b.grid + local equipment = grid_a.equipment + for _, item in pairs(equipment) do + local new_item = grid_b.put({ + name=item.name, + position=item.position}) + if new_item then + if item.shield and item.shield > 0 then + new_item.shield = item.shield + end + if item.energy and item.energy > 0 then + new_item.energy = item.energy + end + else + util.send_message("Error transfering "..item.name) + end + end +end + +function util.area_contains_position(area, position) + local px = position.x or position[1] + local py = position.y or position[2] + for k1, v1 in pairs(area) do + if k1 == 1 or k1 == "left_top" then + for k2, v2 in pairs(v1) do + if k2 == 1 or k2 == "x" then + if px < v2 then return false end + elseif k2 == 2 or k2 == "y" then + if py < v2 then return false end + end + end + elseif k1 == 2 or k1 == "right_bottom" then + for k2, v2 in pairs(v1) do + if k2 == 1 or k2 == "x" then + if px > v2 then return false end + elseif k2 == 2 or k2 == "y" then + if py > v2 then return false end + end + end + end + end + return true +end + +function util.area_add_position(area, position) + local area2 = table.deepcopy(area) + for k1, v1 in pairs(area2) do + for k2, v2 in pairs(v1) do + if k2 == 1 or k2 == "x" then + v1[k2] = v2 + (position.x or position[1]) + elseif k2 == 2 or k2 == "y" then + v1[k2] = v2 + (position.y or position[2]) + end + end + end + return area2 +end + +function util.area_extend(area, range) + local area2 = table.deepcopy(area) + for k1, v1 in pairs(area2) do + local m = 1 + if k1 == 1 or k1 == "left_top" then + m = -1 + end + for k2, v2 in pairs(v1) do + v1[k2] = v2 + range * m + end + end + return area2 +end + +function util.position_to_area(position, radius) + return {{x = position.x - radius, y = position.y - radius}, + {x = position.x + radius, y = position.y + radius}} +end + +function util.position_to_tile(position) + return {x = math.floor(position.x or position[1]), y = math.floor(position.y or position[2])} +end + +function util.tile_to_position(tile_position) + return {x = math.floor(tile_position.x)+0.5, y = math.floor(tile_position.y)+0.5} +end + +function util.tile_to_area(tile_position, margin) + tile_position = {x = math.floor(tile_position.x or tile_position[1]), y = math.floor(tile_position.y or tile_position[2])} + margin = margin or 0.01 + return { + {tile_position.x+margin, tile_position.y+margin}, + {tile_position.x+1-margin, tile_position.y+1-margin} + } +end + +function util.position_equal(position1, position2, epsilon) + epsilon = epsilon or 1e-6 + if math.abs(position1.x - position2.x) > epsilon then return false end + if math.abs(position1.y - position2.y) > epsilon then return false end + return true +end + +--[[ +Compute a ray AABB intersection. +Algorithm from https://tavianator.com/2011/ray_box.html +""" +Axis-aligned bounding boxes (AABBs) are universally used to bound finite objects in ray-tracing. +Ray/AABB intersections are usually faster to calculate than exact ray/object intersections, +and allow the construction of bounding volume hierarchies (BVHs) which reduce the number of objects that need to be considered for each ray. +(More on BVHs in a later post.) +This means that a ray-tracer spends a lot of its time calculating ray/AABB intersections, and therefore this code ought to be highly optimised. + +The fastest method for performing ray/AABB intersections is the slab method. +The idea is to treat the box as the space inside of three pairs of parallel planes. +The ray is clipped by each pair of parallel planes, and if any portion of the ray remains, it intersected the box. +""" +]] +function util.intersects_ray_aabb(ray_origin, orientation, aabb) + -- ray_vector will never be the zero-vector + local ray_vector = util.orientation_to_vector(orientation, 1) + + local tmin = -math.huge + local tmax = math.huge + if (ray_vector.x ~= 0) then + local tx1 = (aabb.min_x - ray_origin.x) / ray_vector.x + local tx2 = (aabb.max_x - ray_origin.x) / ray_vector.x + + tmin = math.max(tmin, math.min(tx1, tx2)) + tmax = math.min(tmax, math.max(tx1, tx2)) + else -- ray is going exactly vertically + return ray_origin.x >= aabb.min_x and ray_origin.x <= aabb.max_x + end + if (ray_vector.y ~= 0) then + local ty1 = (aabb.min_y - ray_origin.y) / ray_vector.y + local ty2 = (aabb.max_y - ray_origin.y) / ray_vector.y + + tmin = math.max(tmin, math.min(ty1, ty2)) + tmax = math.min(tmax, math.max(ty1, ty2)) + else -- ray is going exactly horizontally + return ray_origin.y >= aabb.min_y and ray_origin.y <= aabb.max_y + end + return tmax >= tmin +end + +function util.position_to_xy_string(position) + return util.xy_to_string(position.x, position.y) +end + +function util.xy_to_string(x, y) + return util.floor(x) .. "_" .. util.floor(y) +end + +function util.lerp(a, b, alpha) + return a + (b - a) * alpha +end + +function util.lerp_angles(a, b, alpha) + local da = b - a + + if da < -0.5 then + da = da + 1 + elseif da > 0.5 then + da = da - 1 + end + local na = a + da * alpha + if na < 0 then + na = na + 1 + elseif na > 1 then + na = na - 1 + end + return na +end + +function util.array_to_vector(array) + return {x = array[1], y = array[2]} +end + +function util.vectors_delta(a, b) -- from a to b + if not a and b then return 0 end + return {x = b.x - a.x, y = b.y - a.y} +end + +function util.nvectors_delta(a, b) -- from a to b + local delta = {} + for i, coordinate in pairs(a) do + delta[i] = b[i] - a[i] + end + return delta +end + +function util.vectors_delta_length(a, b) + return util.vector_length_xy(b.x - a.x, b.y - a.y) +end + +function util.nvectors_delta_length(a, b) + return util.nvector_length(util.nvectors_delta(a, b)) +end + +function util.vector_length(a) + return util.sqrt(a.x * a.x + a.y * a.y) +end + +function util.nvector_length(a) + local d = 0 + for _, c in pairs(a) do + d = d + c * c + end + return util.sqrt(d) +end + +function util.vector_length_xy(x, y) + return util.sqrt(x * x + y * y) +end + +function util.vector_dot(a, b) + return a.x * b.x + a.y * b.y +end +function util.nvector_dot(a, b) + local d = 0 + for i, c in pairs(a) do + d = d + a[i] * b[i] + end + return d +end + +function util.vector_multiply(a, multiplier) + return {x = a.x * multiplier, y = a.y * multiplier} +end +function util.nvector_multiply(a, multiplier) + local d = {} + for i, c in pairs(a) do + d[i] = c*multiplier + end + return d +end + +function util.vector_dot_projection(a, b) + local n = util.vector_normalise(a) + local d = util.vector_dot(n, b) + return {x = n.x * d, y = n.y * d} +end + +function util.vector_normalise(a) + local length = util.vector_length(a) + return {x = a.x/length, y = a.y/length} +end +function util.nvector_normalise(a) + local length = util.nvector_length(a) + local d = {} + for i, c in pairs(a) do + d[i] = c/length + end + return d +end + +function util.nvector_normalise(a) + local length = util.nvector_length(a) + local normalised = {} + for i, coordinate in pairs(a) do + normalised[i] = coordinate / length + end + return normalised +end + +function util.vector_set_length(a, length) + local old_length = util.vector_length(a) + if old_length == 0 then return {x = 0, y = -length} end + return {x = a.x/old_length*length, y = a.y/old_length*length} +end + +function util.vector_cross(a, b) + -- N = i(a2b3 - a3b2) + j(a3b1 - a1b3) + k(a1b2 - a2b1) + return { + x = (a.y or a[2]) * (b.z or b[3]) - (a.z or a[3]) * (b.y or b[2]), + y = (a.z or a[3]) * (b.x or b[1]) - (a.x or a[1]) * (b.z or b[3]), + z = (a.x or a[1]) * (b.y or b[2]) - (a.y or a[2]) * (b.x or b[1]), + } +end + +function util.orientation_from_to(a, b) + return util.vector_to_orientation_xy(b.x - a.x, b.y - a.y) +end + +function util.orientation_to_vector(orientation, length) + return {x = length * util.sin(orientation * 2 * util.pi), y = -length * util.cos(orientation * 2 * util.pi)} +end + +function util.rotate_vector(orientation, a) + if orientation == 0 then + return {x = a.x, y = a.y} + else + return { + x = -a.y * util.sin(orientation * 2 * util.pi) + a.x * util.sin((orientation + 0.25) * 2 * util.pi), + y = a.y * util.cos(orientation * 2 * util.pi) -a.x * util.cos((orientation + 0.25) * 2 * util.pi)} + + end +end + +function util.vectors_add(a, b) + return {x = a.x + b.x, y = a.y + b.y} +end + +function util.vectors_add3(a, b, c) + return {x = a.x + b.x + c.x, y = a.y + b.y + c.y} +end + +function util.lerp_vectors(a, b, alpha) + return {x = a.x + (b.x - a.x) * alpha, y = a.y + (b.y - a.y) * alpha} +end + +function util.move_to(a, b, max_distance, eliptical) + -- move from a to b with max_distance. + -- if eliptical, reduce y change (i.e. turret muzzle flash offset) + local eliptical_scale = 0.9 + local delta = util.vectors_delta(a, b) + if eliptical then + delta.y = delta.y / eliptical_scale + end + local length = util.vector_length(delta) + if (length > max_distance) then + local partial = max_distance / length + delta = {x = delta.x * partial, y = delta.y * partial} + end + if eliptical then + delta.y = delta.y * eliptical_scale + end + return {x = a.x + delta.x, y = a.y + delta.y} +end + +function util.vector_to_orientation(v) + return util.vector_to_orientation_xy(v.x, v.y) +end + +function util.vector_to_orientation_xy(x, y) + return util.atan2(y, x) / util.pi / 2 +end + +function util.direction_to_orientation(direction) + if direction == defines.direction.north then + return 0 + elseif direction == defines.direction.northeast then + return 0.125 + elseif direction == defines.direction.east then + return 0.25 + elseif direction == defines.direction.southeast then + return 0.375 + elseif direction == defines.direction.south then + return 0.5 + elseif direction == defines.direction.southwest then + return 0.625 + elseif direction == defines.direction.west then + return 0.75 + elseif direction == defines.direction.northwest then + return 0.875 + end + return 0 +end + +function util.direction_to_string(direction) + if direction == defines.direction.north then + return "north" + elseif direction == defines.direction.northeast then + return "northeast" + elseif direction == defines.direction.east then + return "east" + elseif direction == defines.direction.southeast then + return "southeast" + elseif direction == defines.direction.south then + return "south" + elseif direction == defines.direction.southwest then + return "southwest" + elseif direction == defines.direction.west then + return "west" + elseif direction == defines.direction.northwest then + return "northwest" + end + return 0 +end + +function util.signal_to_string(signal) + return signal.type .. "__" .. signal.name +end + +function util.signal_container_add(container, signal, count) + if signal then + if not container[signal.type] then + container[signal.type] = {} + end + if container[signal.type][signal.name] then + container[signal.type][signal.name].count = container[signal.type][signal.name].count + count + else + container[signal.type][signal.name] = {signal = signal, count = count} + end + end +end + +function util.signal_container_add_inventory(container, entity, inventory) + local inv = entity.get_inventory(inventory) + if inv then + local contents = inv.get_contents() + for item_type, item_count in pairs(contents) do + util.signal_container_add(container, {type="item", name=item_type}, item_count) + end + end +end + +function util.signal_container_get(container, signal) + if container[signal.type] and container[signal.type][signal.name] then + return container[signal.type][signal.name] + end +end + +function util.signal_from_wires(red, green, signal) + local value = 0 + if red then value = value + red.get_signal(signal) or 0 end + if green then value = value + green.get_signal(signal) or 0 end + return value +end + +util.char_to_multiplier = { + m = 0.001, + c = 0.01, + d = 0.1, + h = 100, + k = 1000, + M = 1000000, + G = 1000000000, + T = 1000000000000, + P = 1000000000000000, +} + +function util.string_to_number(str) + str = ""..str + local number_string = "" + local last_char = nil + for i = 1, #str do + local c = str:sub(i,i) + if c == "." or (c == "-" and i == 1) or tonumber(c) ~= nil then + number_string = number_string .. c + else + last_char = c + break + end + end + if last_char and util.char_to_multiplier[last_char] then + return tonumber(number_string) * util.char_to_multiplier[last_char] + end + return tonumber(number_string) +end + +function util.replace(str, what, with) + what = util.str_gsub(what, "[%(%)%.%+%-%*%?%[%]%^%$%%]", "%%%1") -- escape pattern + with = util.str_gsub(with, "[%%]", "%%%%") -- escape replacement + str = util.str_gsub(str, what, with) + return str --only return the first variable from str_gsub +end + +function util.split(s, delimiter) + result = {}; + for match in (s..delimiter):gmatch("(.-)"..delimiter) do + table.insert(result, match); + end + return result; +end + +function util.string_join (str_table, sep) + local str = "" + for _, str_part in pairs(str_table) do + if str ~= "" then + str = str .. sep + end + str = str .. str_part + end + return str +end + +function util.parse_with_prefix(s, prefix) + if string.sub(s, 1, string.len(prefix)) == prefix then + return string.sub(s, string.len(prefix)+1) + end +end + +function util.overwrite_table(table_weak, table_strong) + for k,v in pairs(table_strong) do table_weak[k] = v end + return table_weak +end + +function util.table_contains(table, check) + for k,v in pairs(table) do if v == check then return true end end + return false +end + +function util.table_to_string(table) + return serpent.block( table, {comment = false, numformat = '%1.8g' } ) +end + +function util.values_to_string(table) + local string = "" + for _, value in pairs(table) do + string = ((string == "") and "" or ", ") .. string .. value + end + return string +end + +function util.math_log(value, base) + --logb(a) = logc(a) / logc(b) + return math.log(value)/math.log(base) +end + +function util.seconds_to_clock(seconds, use_days) + local seconds = tonumber(seconds) + + if seconds <= 0 then + return "0"; + else + local days = 0 + if use_days then days = math.floor(seconds/3600/24) end + local hours = math.floor(seconds/3600 - days*24) + local mins = math.floor(seconds/60 - hours*60 - days*1440) + local secs = math.floor(seconds - mins *60 - hours*3600 - days*86400) + local s_hours = string.format("%02.f",hours); + local s_mins = string.format("%02.f", mins); + local s_secs = string.format("%02.f", secs); + if days > 0 then + return days.."d:"..s_hours..":"..s_mins..":"..s_secs + end + if hours > 0 then + return s_hours..":"..s_mins..":"..s_secs + end + if mins > 0 then + return s_mins..":"..s_secs + end + if secs == 0 then + return "0" + end + return s_secs + end +end + +function util.to_rail_grid(number_or_position) + if type(number_or_position) == "table" then + return {x = util.to_rail_grid(number_or_position.x), y = util.to_rail_grid(number_or_position.y)} + end + return math.floor(number_or_position / 2) * 2 +end + +function util.format_fuel(fuel, ceil) + return string.format("%.2f",(fuel or 0) / 1000).."k" +end + +function util.format_energy(fuel, ceil) + if ceil then + return math.ceil((fuel or 0) / 1000000000).."GJ" + else + return math.floor((fuel or 0) / 1000000000).."GJ" + end +end + +function util.direction_to_vector (direction) + if direction == defines.direction.east then return {x=1,y=0} end + if direction == defines.direction.north then return {x=0,y=-1} end + if direction == defines.direction.northeast then return {x=1,y=-1} end + if direction == defines.direction.northwest then return {x=-1,y=-1} end + if direction == defines.direction.south then return {x=0,y=1} end + if direction == defines.direction.southeast then return {x=1,y=1} end + if direction == defines.direction.southwest then return {x=-1,y=1} end + if direction == defines.direction.west then return {x=-1,y=0} end +end + +function util.sign(x) + if x<0 then + return -1 + elseif x>0 then + return 1 + else + return 0 + end +end + +function util.find_first_descendant_by_name(gui_element, name) + for _, child in pairs(gui_element.children) do + if child.name == name then + return child + end + local found = util.find_first_descendant_by_name(child, name) + if found then return found end + end +end + +function util.find_descendants_by_name(gui_element, name, all_found) + local found = all_found or {} + for _, child in pairs(gui_element.children)do + if child.name == name then + table.insert(found, child) + end + util.find_descendants_by_name(child, name, found) + end + return found +end + +function util.swap_entity_inventories(entity_a, entity_b, inventory) + util.swap_inventories(entity_a.get_inventory(inventory), entity_b.get_inventory(inventory)) +end + +function util.swap_inventories(inv_a, inv_b) + if inv_a.is_filtered() then + for i = 1, math.min(#inv_a, #inv_b) do + inv_b.set_filter(i, inv_a.get_filter(i)) + end + end + for i = 1, math.min(#inv_a, #inv_b)do + inv_b[i].swap_stack(inv_a[i]) + end +end + +function util.find_damage_types_from_trigger_items(trigger_items) + local damage_types = {} + for _, trigger_item in pairs(trigger_items) do + if trigger_item.action_delivery then + for _, action_delivery in pairs(trigger_item.action_delivery) do + if action_delivery.target_effects then --action_delivery.type == "instant" + for _, target_effect in pairs(action_delivery.target_effects) do + if target_effect.type == "damage" and target_effect.damage and target_effect.damage.type then + damage_types[target_effect.damage.type] = true + end + end + end + --"instant", "projectile", "flame-thrower", "beam", "stream", "artillery". + local beam_or_projectile + if action_delivery.beam then + beam_or_projectile = game.entity_prototypes[action_delivery.beam] + end + if action_delivery.projectile then + beam_or_projectile = game.entity_prototypes[action_delivery.projectile] + end + if beam_or_projectile then + if beam_or_projectile.attack_result then + local damage_types_2 = util.find_damage_types_from_trigger_items(beam_or_projectile.attack_result) + for damage_type, b in pairs(damage_types_2) do + damage_types[damage_type] = true + end + end + if beam_or_projectile.final_attack_result then + local damage_types_2 = util.find_damage_types_from_trigger_items(beam_or_projectile.final_attack_result) + for damage_type, b in pairs(damage_types_2) do + damage_types[damage_type] = true + end + end + end + end + end + end + return damage_types +end + +function util.separate_points(positions, separation, max_iterations) + positions = table.deepcopy(positions) + --if true then return positions end + if not max_iterations then max_iterations = 20 end + local overshoot = 1.05 -- increse slightly to allow early finish + local i = 1 + local continue = true + while i <= max_iterations and continue do + i = i + 1 + continue = false + local forces = {} + for a, pos_a in pairs(positions) do + for b, pos_b in pairs(positions) do + if a ~= b then + local delta = Util.vectors_delta(pos_a, pos_b) + local length = Util.vector_length(delta) + if length < separation then + local force = Util.vector_set_length(delta, (separation - length) / 2) + if forces[a] then + forces[a].x = forces[a].x + force.x + forces[a].y = forces[a].y + force.y + else + forces[a] = force + end + end + end + end + end + for a, pos_a in pairs(positions) do + local force = forces[a] + if force then + local length = Util.vector_length(force) + if length > separation / 2 then + force = Util.vector_set_length(force, separation / 2) + end + pos_a.x = pos_a.x - force.x * overshoot + pos_a.y = pos_a.y - force.y * overshoot + continue = true + end + end + end + return positions +end + +function util.safe_destroy(entity) + if not entity.valid then return end + if entity.type == "linked-container" then + entity.link_id = 0 + entity.destroy({raise_destroy=true}) + else + entity.destroy({raise_destroy=true}) + end +end + +function util.HSVToRGB( hue, saturation, value ) + --https://gist.github.com/GigsD4X/8513963 + -- Returns the RGB equivalent of the given HSV-defined color + -- (adapted from some code found around the web) + + -- If it's achromatic, just return the value + if saturation == 0 then + return value; + end; + + -- Get the hue sector + local hue_sector = math.floor( hue / 60 ); + local hue_sector_offset = ( hue / 60 ) - hue_sector; + + local p = value * ( 1 - saturation ); + local q = value * ( 1 - saturation * hue_sector_offset ); + local t = value * ( 1 - saturation * ( 1 - hue_sector_offset ) ); + + if hue_sector == 0 then + return value, t, p; + elseif hue_sector == 1 then + return q, value, p; + elseif hue_sector == 2 then + return p, value, t; + elseif hue_sector == 3 then + return p, q, value; + elseif hue_sector == 4 then + return t, p, value; + elseif hue_sector == 5 then + return value, p, q; + end; +end; + +function util.setup_blueprint(event, names, serialize_fn) + if type(names) == 'string' then names = {names} end + local player_index = event.player_index + if player_index and game.players[player_index] and game.players[player_index].connected then + local player = game.players[player_index] + + -- this setup code and checks is a workaround for the fact that the event doesn't specify the blueprint on the event + -- and the player.blueprint_to_setup isn't actually set in the case of copy/paste or blueprint library or select new contents + local blueprint = nil + if player and player.blueprint_to_setup and player.blueprint_to_setup.valid_for_read then blueprint = player.blueprint_to_setup + elseif player and player.cursor_stack.valid_for_read and player.cursor_stack.is_blueprint then blueprint = player.cursor_stack end + if blueprint and blueprint.is_blueprint_setup() then + + + local mapping = event.mapping.get() + local blueprint_entities = blueprint.get_blueprint_entities() + if blueprint_entities then + for _, blueprint_entity in pairs(blueprint_entities) do + if util.table_contains(names, blueprint_entity.name) then + local entity = mapping[blueprint_entity.entity_number] + if entity then + local tags = serialize_fn(entity) + if tags then + blueprint.set_blueprint_entity_tags(blueprint_entity.entity_number, tags) + end + end + end + end + end + end + end +end + +function util.settings_pasted(event, names, serialize_fn, deserialize_fn, cb) + if type(names) == 'string' then names = {names} end + local player_index = event.player_index + if player_index and game.players[player_index] and game.players[player_index].connected + and event.source and event.source.valid and event.destination and event.destination.valid then + if not util.table_contains(names, event.source.name) then return end + if not util.table_contains(names, event.destination.name) then return end + local tags = serialize_fn(event.source) + if tags then + deserialize_fn(event.destination, tags) + if cb then cb(event.destination, player_index) end + end + end +end + +function util.get_entity_from_event(event) + local entity + if event.entity and event.entity.valid then + entity = event.entity + end + if event.created_entity and event.created_entity.valid then + entity = event.created_entity + end + if event.destination and event.destination.valid then + entity = event.destination + end + return entity +end + +function util.get_tags_from_event(event, serialize_fn) + local tags = event.tags + if not tags then + if event.source and event.source.valid then + tags = serialize_fn(event.source) + end + end + return tags +end + +function util.find_entity_or_revive_ghost(surface, name, position, radius) + local entities = surface.find_entities_filtered{ + name = name, + position = position, + radius = radius + } + if entities[1] and entities[1].valid then + return entities[1] + end + local entity_ghosts = surface.find_entities_filtered{ + ghost_name = name, + position = position, + radius = radius + } + if entity_ghosts[1] and entity_ghosts[1].valid then + local collisions, entity = entity_ghosts[1].revive({}) + if entity then return entity end + end +end + +return util diff --git a/space-exploration_0.5.80/space-exploration/scripts/weapon.lua b/space-exploration_0.5.80/space-exploration/scripts/weapon.lua new file mode 100644 index 0000000..211f337 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/weapon.lua @@ -0,0 +1,365 @@ +Weapon = {} + +-- constants +Weapon.tesla_base_damage = 25 +Weapon.tesla_ammo_category = "tesla" +Weapon.cryogun_freeze_time_min = 300 +Weapon.cryogun_freeze_time_max = 1200 +Weapon.cryogun_ice_radius = 1 +Weapon.cryogun_freeze_radius = 4 +Weapon.name_cryogun_ice = mod_prefix.."cryogun-ice" +Weapon.name_cryogun_ice_spacer = mod_prefix.."cryogun-ice-spacer" + +--[[ +plague new plan. +Limit to 1 acive per chunk? + Have a table of chunks and expiration date? + +Get all entities, sort by distance, destroy 1 per frame? + +Get a chunk, get entities, destroy, get neighbors. +Choose a random chunk nearby to infect, repeat. +Limit to X active chunks. +]] + +function Weapon.on_trigger_created_entity(event) + if not event.entity and event.entity.valid then return end + if event.entity.name == mod_prefix.."tesla-gun-trigger" then + if event.source and event.source.valid then + local tick_task = new_tick_task("chain-beam") + tick_task.surface = event.entity.surface + tick_task.beam = mod_prefix.."tesla-gun-beam" + tick_task.max_bounces = 10 + math.random() * 20 + tick_task.range = 10 + tick_task.instigator = event.source + tick_task.instigator_force = event.source.force + tick_task.initial_vector = util.vector_normalise(util.vectors_delta(event.source.position, event.entity.position)) + local first_hit = util.move_to(event.source.position, event.entity.position, 3, false) + tick_task.affected_locations = {{position = first_hit}} + local source = event.source.position + -- gun graphic offset + source.y = source.y - 1 + source = util.move_to(source, util.vectors_add(source, tick_task.initial_vector), 0.7, true) + + tick_task.surface.create_entity{ + name = tick_task.beam, + position = first_hit, + target_position = first_hit, + source_position = source, + duration = 10, + } + end + elseif event.entity.name == mod_prefix .. "plague-cloud"then + local surface_index = event.entity.surface.index + local zone = Zone.from_surface_index(surface_index) + if zone and Zone.is_solid(zone) and not zone.plague_tick_task then + if not zone.plague_used then + zone.plague_used = game.tick + end + local surface = event.entity.surface + local map_gen_settings = surface.map_gen_settings + zone.controls["enemy-base"] = {frequency = 0, size = -1, richness = -1} + zone.controls["trees"] = {frequency = 0, size = -1, richness = -1} + map_gen_settings.autoplace_controls["enemy-base"] = {frequency = 0, size = -1, richness = -1} + map_gen_settings.autoplace_controls["trees"] = {frequency = 0, size = -1, richness = -1} + if map_gen_settings.autoplace_controls["se-vitamelange"] then + zone.controls["se-vitamelange"] = {frequency = 0, size = -1, richness = -1} + map_gen_settings.autoplace_controls["se-vitamelange"] = {frequency = 0, size = -1, richness = -1} + Universe.remove_resource_from_zone_surface(zone, "se-vitamelange") + end + if zone.primary_resource == "se-vitamelange" then + zone.primary_resource = "coal" + zone.fragment_name = Coreminer.resource_to_fragment_name(zone.primary_resource) + Coreminer.update_zone_fragment_resources(zone) + end + surface.map_gen_settings = map_gen_settings + local tick_task = new_tick_task("plague-tick") + tick_task.surface_index = surface_index + tick_task.position = event.entity.position + tick_task.zone = zone + if event.entity.force then + tick_task.force_name = event.entity.force.name + end + tick_task.started = game.tick + zone.plague_tick_task = tick_task + end + elseif event.entity.name == mod_prefix.."cryogun-trigger" then + local pos = event.entity.position + local surface = event.entity.surface + local spaceship = Spaceship.from_own_surface_index(surface.index) + local safe_pos = surface.find_non_colliding_position(Weapon.name_cryogun_ice_spacer, pos, Weapon.cryogun_ice_radius, 0.1, false) + local ice_entities = {} + if safe_pos then + local ice = surface.create_entity{name = Weapon.name_cryogun_ice, position = safe_pos, force = "neutral"} + table.insert(ice_entities, ice) + if spaceship then + SpaceshipObstacles.add_moveable_entity(spaceship, ice, "ice") + end + end + local freeze_entities = surface.find_entities_filtered{ + type = {"unit", "turret", "ammo-turret", "electric-turret", "fluid-turret"}, + position = safe_pos or pos, + radius = Weapon.cryogun_freeze_radius + } + local reactivate_entities = {} + for _, entity in pairs(freeze_entities) do + if entity.active then + entity.active = false + table.insert(reactivate_entities, entity) + table.insert(ice_entities, surface.create_entity{name = Weapon.name_cryogun_ice, position = entity.position, force = "neutral"}) + end + end + if #ice_entities > 0 or #reactivate_entities > 0 then + local tick_task = new_tick_task("cryogun-unfreeze") + tick_task.ice_entities = ice_entities + tick_task.reactivate_entities = reactivate_entities + tick_task.freeze_tick = game.tick + tick_task.unfreeze_tick = game.tick + math.random(Weapon.cryogun_freeze_time_min, Weapon.cryogun_freeze_time_max) + end + elseif event.entity.name == mod_prefix.."pheromone-trigger" then + local units = event.entity.surface.find_entities_filtered{type="unit", position = event.entity.position} + if event.source and event.source.valid then + for _, unit in pairs(units) do + if unit.force ~= event.source.force then + if string.find(unit.name, "biter", 1, true) or string.find(unit.name, "spitter", 1, true) then + unit.force = event.source.force + unit.set_command({type = defines.command.wander}) + end + end + end + end + + end +end +Event.addListener(defines.events.on_trigger_created_entity, Weapon.on_trigger_created_entity) + +function Weapon.cryogun_unfreeze(tick_task) + if game.tick >= tick_task.unfreeze_tick then + tick_task.valid = false + for _, e in pairs(tick_task.ice_entities) do + if e.valid then e.destroy() end + end + for _, e in pairs(tick_task.reactivate_entities) do + if e.valid then e.active = true end + end + end +end + +function Weapon.plague_end(tick_task) + tick_task.valid = false + tick_task.zone.plague_tick_task = nil + local surface = game.surfaces[tick_task.surface_index] + if surface then + local enemies = surface.find_entities_filtered{ force = "enemy" } + for _, entity in pairs(enemies) do + entity.destroy() + end + local plague = surface.find_entities_filtered{ name={ + mod_prefix .. "plague-cloud", + mod_prefix .. "plague-wave"} } + for _, entity in pairs(plague) do + entity.destroy() + end + local trees = surface.find_entities_filtered{ type = "tree" } + for _, entity in pairs(trees) do + entity.destroy() + end + end +end + +function Weapon.plague_tick(tick_task) + --game.print((game.tick - (tick_task.started + 10 * 60 * 60)) / 60) + if game.tick > tick_task.started + settings.global["se-plague-max-runtime-2"].value * 60 * 60 then -- 15 minutes + Weapon.plague_end(tick_task) + end + + if not tick_task.death_range then + tick_task.death_range = 32 + end + local surface = game.surfaces[tick_task.surface_index] + if not surface then Weapon.plague_end(tick_task) end + if (not tick_task.death_list) or #tick_task.death_list <= (tick_task.death_quota or 0) then + if tick_task.death_range > tick_task.zone.radius * 4 then + Weapon.plague_end(tick_task) + else + if (tick_task.death_quota or 0) > 1000 then + tick_task.death_range = tick_task.death_range + 1 + else + tick_task.death_range = tick_task.death_range + 32 + end + tick_task.death_list = surface.find_entities_filtered{ + position = tick_task.position or {0,0}, + radius = tick_task.death_range, + type = { + "unit", + "unit-spawner", + "turret", + "tree", + "fish" + } } + tick_task.death_quota = math.ceil(#tick_task.death_list*0.1) + if #tick_task.death_list < 10 then + tick_task.death_range = tick_task.death_range * 2 + end + end + else + local m = math.min(10, math.ceil(#tick_task.death_list / 100)) + for i = 1, m do + local entity = table.remove(tick_task.death_list, math.random(#tick_task.death_list)) + if entity and entity.valid then + if entity.type == "unit-spawner" then + local enemy = surface.find_nearest_enemy{ + position = entity.position, + max_distance = 2000, + force = entity.force} + if enemy and enemy.valid then + entity.damage(200, tick_task.force_name, "poison", enemy) + else + entity.damage(200, tick_task.force_name, "poison") + end + if entity.valid then + entity.die() + end + elseif entity.type == "unit" then + if #tick_task.death_list % 20 == 0 then + entity.die() + end + else + entity.die() + end + end + end + end + +end + +function Weapon.chain_beam(tick_task) + if not (tick_task.surface and tick_task.surface.valid) then + tick_task.valid = false + return + end + local branch_chance = tick_task.branch_chance or 0.1 + local emanate_from = nil + if math.random() < branch_chance then + emanate_from = tick_task.affected_locations[math.random(#tick_task.affected_locations)] -- branching bouncing beam + else + emanate_from = tick_task.affected_locations[#tick_task.affected_locations] -- single bouncing beam + end + + local entities = tick_task.surface.find_entities_filtered{ + area = util.position_to_area(emanate_from.position, tick_task.range), + collision_mask = {"object-layer", "player-layer"}, + } + + local valids = {} + for _, entity in pairs(entities) do + if entity.valid and entity.is_entity_with_health and entity.type ~= "cliff" and entity.force ~= tick_task.instigator_force then + local already_affected = false + for _, affected in pairs(tick_task.affected_locations) do + if entity == affected.entity then + already_affected = true + end + end + if not already_affected then + table.insert(valids, entity) + end + end + end + + local desired_pos = util.vectors_add(emanate_from.position, util.vector_multiply(util.vector_normalise(tick_task.initial_vector), 2)) + + local chosen = nil + + if #valids > 0 then + + local closest_dist = 10000 + for _, valid in pairs(valids) do + local dist = (1 + util.vectors_delta_length(desired_pos, valid.position)) * 0.5 + math.random() + if dist < closest_dist then + closest_dist = dist + chosen = valid + end + end + + end + + if chosen then + table.insert(tick_task.affected_locations, {position = chosen.position, entity = chosen}) + + if chosen.type == "simple-entity" and string.find(chosen.name, "rock") then + chosen.health = math.max(0.01, chosen.health - chosen.prototype.max_health / 50) + end + + local target_position = chosen.position + + local force = tick_task.instigator_force + local bonus_damage = Weapon.tesla_base_damage * force.get_ammo_damage_modifier(Weapon.tesla_ammo_category) + if bonus_damage > 0 then + chosen.damage(bonus_damage, force, "electric") + end + + local target = nil + if chosen and chosen.valid then + target = chosen + end + + tick_task.surface.create_entity{ + name = tick_task.beam, + position = emanate_from.position, + target = target, + force = force, + target_position = target_position, + source_position = emanate_from.position, + duration = 10, + } + else + -- hit ground + local ground = {x = desired_pos.x + ((math.random() - 0.5) * 0.25 * tick_task.range), + y = desired_pos.y + ((math.random() - 0.5) * 0.25 * tick_task.range)} + + table.insert(tick_task.affected_locations, {position = ground}) + + tick_task.surface.create_entity{ + name = tick_task.beam, + position = emanate_from.position, + target_position = ground, + source_position = emanate_from.position, + duration = 10, + } + end + + if #tick_task.affected_locations >= (tick_task.max_bounces or 2) then + tick_task.valid = false + end + +end + +function Weapon.on_entity_died(event) + if event.entity and event.entity.valid and event.entity.type == "unit"then + local entity = event.entity + if entity.stickers then + for _, sticker in pairs(entity.stickers) do + if sticker.name == mod_prefix .. "bloater-sticker" then + local max_health = entity.prototype.max_health + local remain = max_health + while remain > 0 do + local done = false + for _, e in pairs({10000, 4000, 1000, 400, 100, 40, 10}) do + done = true + remain = remain - e + entity.surface.create_entity{ + name= mod_prefix .. "bloater-burst-"..e, + position = entity.position, + force = "player" + } + end + if not done then remain = 0 end + end + end + end + end + end +end +Event.addListener(defines.events.on_entity_died, Weapon.on_entity_died) + +return Weapon diff --git a/space-exploration_0.5.80/space-exploration/scripts/zone.lua b/space-exploration_0.5.80/space-exploration/scripts/zone.lua new file mode 100644 index 0000000..2384b8b --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/zone.lua @@ -0,0 +1,2028 @@ +local Zone = {} + +-- constants +Zone.solar_multiplier = 1 + +Zone.discovery_scan_radius = 32 +Zone.clear_enemies_radius = 512 + +Zone.travel_cost_interstellar = 400 -- stellar position distance, roughly 50 distance between stars, can be up to 300 apart +Zone.travel_cost_star_gravity = 500 -- roughly 10-20 base for a star +Zone.travel_cost_planet_gravity = 100 -- roughly 10-20 base for a planet +Zone.travel_cost_space_distortion = Zone.travel_cost_interstellar * 25 -- based on 0-1 range + +Zone.name_tech_discover_random = mod_prefix.."zone-discovery-random" +Zone.name_tech_discover_targeted = mod_prefix.."zone-discovery-targeted" +Zone.name_tech_discover_deep = mod_prefix.."zone-discovery-deep" + +-- based on alien biomes, unsure as to how ti make this more dynamic +-- biome name = {tilenames} +Zone.biome_tiles = { + ["out-of-map"] = {"out-of-map"}, -- always allowed + ["water"] = {"water", "deepwater", "water-green", "deepwater-green", "water-shallow", "water-mud"}, + + ["dirt-purple"] = {"mineral-purple-dirt-1", "mineral-purple-dirt-2", "mineral-purple-dirt-3", "mineral-purple-dirt-4", "mineral-purple-dirt-5", "mineral-purple-dirt-6"}, + ["dirt-violet"] = {"mineral-violet-dirt-1", "mineral-violet-dirt-2", "mineral-violet-dirt-3", "mineral-violet-dirt-4", "mineral-violet-dirt-5", "mineral-violet-dirt-6"}, + ["dirt-red"] = {"mineral-red-dirt-1", "mineral-red-dirt-2", "mineral-red-dirt-3", "mineral-red-dirt-4", "mineral-red-dirt-5", "mineral-red-dirt-6"}, + ["dirt-brown"] = {"mineral-brown-dirt-1", "mineral-brown-dirt-2", "mineral-brown-dirt-3", "mineral-brown-dirt-4", "mineral-brown-dirt-5", "mineral-brown-dirt-6"}, + ["dirt-tan"] = {"mineral-tan-dirt-1", "mineral-tan-dirt-2", "mineral-tan-dirt-3", "mineral-tan-dirt-4", "mineral-tan-dirt-5", "mineral-tan-dirt-6"}, + ["dirt-aubergine"] = {"mineral-aubergine-dirt-1", "mineral-aubergine-dirt-2", "mineral-aubergine-dirt-3", "mineral-aubergine-dirt-4", "mineral-aubergine-dirt-5", "mineral-aubergine-dirt-6"}, + ["dirt-dustyrose"] = {"mineral-dustyrose-dirt-1", "mineral-dustyrose-dirt-2", "mineral-dustyrose-dirt-3", "mineral-dustyrose-dirt-4", "mineral-dustyrose-dirt-5", "mineral-dustyrose-dirt-6"}, + ["dirt-beige"] = {"mineral-beige-dirt-1", "mineral-beige-dirt-2", "mineral-beige-dirt-3", "mineral-beige-dirt-4", "mineral-beige-dirt-5", "mineral-beige-dirt-6"}, + ["dirt-cream"] = {"mineral-cream-dirt-1", "mineral-cream-dirt-2", "mineral-cream-dirt-3", "mineral-cream-dirt-4", "mineral-cream-dirt-5", "mineral-cream-dirt-6"}, + ["dirt-black"] = {"mineral-black-dirt-1", "mineral-black-dirt-2", "mineral-black-dirt-3", "mineral-black-dirt-4", "mineral-black-dirt-5", "mineral-black-dirt-6"}, + ["dirt-grey"] = {"mineral-grey-dirt-1", "mineral-grey-dirt-2", "mineral-grey-dirt-3", "mineral-grey-dirt-4", "mineral-grey-dirt-5", "mineral-grey-dirt-6"}, + ["dirt-white"] = {"mineral-white-dirt-1", "mineral-white-dirt-2", "mineral-white-dirt-3", "mineral-white-dirt-4", "mineral-white-dirt-5", "mineral-white-dirt-6"}, + + ["sand-purple"] = {"mineral-purple-sand-1", "mineral-purple-sand-2", "mineral-purple-sand-3"}, + ["sand-violet"] = {"mineral-violet-sand-1", "mineral-violet-sand-2", "mineral-violet-sand-3"}, + ["sand-red"] = {"mineral-red-sand-1", "mineral-red-sand-2", "mineral-red-sand-3"}, + ["sand-brown"] = {"mineral-brown-sand-1", "mineral-brown-sand-2", "mineral-brown-sand-3"}, + ["sand-tan"] = {"mineral-tan-sand-1", "mineral-tan-sand-2", "mineral-tan-sand-3"}, + ["sand-aubergine"] = {"mineral-aubergine-sand-1", "mineral-aubergine-sand-2", "mineral-aubergine-sand-3"}, + ["sand-dustyrose"] = {"mineral-dustyrose-sand-1", "mineral-dustyrose-sand-2", "mineral-dustyrose-sand-3"}, + ["sand-beige"] = {"mineral-beige-sand-1", "mineral-beige-sand-2", "mineral-beige-sand-3"}, + ["sand-cream"] = {"mineral-cream-sand-1", "mineral-cream-sand-2", "mineral-cream-sand-3"}, + ["sand-black"] = {"mineral-black-sand-1", "mineral-black-sand-2", "mineral-black-sand-3"}, + ["sand-grey"] = {"mineral-grey-sand-1", "mineral-grey-sand-2", "mineral-grey-sand-3"}, + ["sand-white"] = {"mineral-white-sand-1", "mineral-white-sand-2", "mineral-white-sand-3"}, + + ["vegetation-green"] = {"vegetation-green-grass-1", "vegetation-green-grass-2", "vegetation-green-grass-3", "vegetation-green-grass-4"}, + ["vegetation-olive"] = {"vegetation-olive-grass-1", "vegetation-olive-grass-2"}, + ["vegetation-yellow"] = {"vegetation-yellow-grass-1", "vegetation-yellow-grass-2"}, + ["vegetation-orange"] = {"vegetation-orange-grass-1", "vegetation-orange-grass-2"}, + ["vegetation-red"] = {"vegetation-red-grass-1", "vegetation-red-grass-2"}, + ["vegetation-violet"] = {"vegetation-violet-grass-1", "vegetation-violet-grass-2"}, + ["vegetation-purple"] = {"vegetation-purple-grass-1", "vegetation-purple-grass-2"}, + ["vegetation-mauve"] = {"vegetation-mauve-grass-1", "vegetation-mauve-grass-2"}, + ["vegetation-blue"] = {"vegetation-blue-grass-1", "vegetation-blue-grass-2"}, + ["vegetation-turquoise"] = {"vegetation-turquoise-grass-1", "vegetation-turquoise-grass-2"}, + + ["volcanic-orange"] = {"volcanic-orange-heat-1", "volcanic-orange-heat-2", "volcanic-orange-heat-3", "volcanic-orange-heat-4"}, + ["volcanic-green"] = {"volcanic-green-heat-1", "volcanic-green-heat-2", "volcanic-green-heat-3", "volcanic-green-heat-4"}, + ["volcanic-blue"] = {"volcanic-blue-heat-1", "volcanic-blue-heat-2", "volcanic-blue-heat-3", "volcanic-blue-heat-4"}, + ["volcanic-purple"] = {"volcanic-purple-heat-1", "volcanic-purple-heat-2", "volcanic-purple-heat-3", "volcanic-purple-heat-4"}, + + ["frozen-snow"] = {"frozen-snow-0", "frozen-snow-1", "frozen-snow-2", "frozen-snow-3", "frozen-snow-4"}, + ["frozen-ice"] = {"frozen-snow-5", "frozen-snow-6", "frozen-snow-7", "frozen-snow-8", "frozen-snow-9"}, +} +Zone.biome_collections = { + ["all-sand"] = {"sand-purple", "sand-violet", "sand-red", "sand-brown", "sand-tan", "sand-aubergine", "sand-dustyrose", "sand-beige", "sand-cream", "sand-black", "sand-grey", "sand-white"}, + ["all-dirt"] = {"dirt-purple", "dirt-violet", "dirt-red", "dirt-brown", "dirt-tan", "dirt-aubergine", "dirt-dustyrose", "dirt-beige", "dirt-cream", "dirt-black", "dirt-grey", "dirt-white"}, + ["all-vegetation"] = {"vegetation-green", "vegetation-olive", "vegetation-yellow", "vegetation-orange", "vegetation-red", + "vegetation-violet", "vegetation-purple", "vegetation-mauve", "vegetation-blue", "vegetation-turquoise" }, + ["all-volcanic"] = {"volcanic-orange", "volcanic-green", "volcanic-blue", "volcanic-purple"}, + ["all-frozen"] = {"frozen-snow", "frozen-ice"}, +} +Zone.signal_to_zone_type = { + [mod_prefix.."planet"] = "planet", + [mod_prefix.."moon"] = "moon", + [mod_prefix.."planet-orbit"] = "orbit", + [mod_prefix.."moon-orbit"] = "orbit", + [mod_prefix.."star"] = "orbit", + [mod_prefix.."asteroid-belt"] = "asteroid-belt", + [mod_prefix.."asteroid-field"] = "asteroid-field", + [mod_prefix.."anomaly"] = "anomaly", +} +Zone.controls_without_frequency_multiplier = { + "trees", + "enemy-base" +} +-- NOTE: cliff and base terrain sliders have special settings, + +--[[ eg: +biome_replacements = { + {replace={"all-dirt", "all-sand", "all-volcanic"}, with="sand-red"}, + {replace={"all-vegetation", "all-frozen"}, with="vegetation-red"} +} ]]-- + +function Zone.get_default() + return Zone.from_name("Nauvis") +end + +function Zone.get_force_home_zone(force_name) + if global.forces[force_name] and global.forces[force_name].homeworld_index then + return Zone.from_zone_index(global.forces[force_name].homeworld_index) + end +end + +function Zone.type_title(zone) + if zone.type == "planet" then + return {"space-exploration.planet"} + elseif zone.type == "moon" then + return {"space-exploration.moon"} + elseif zone.type == "star" then + return {"space-exploration.star"} + elseif zone.type == "asteroid-field" then + return {"space-exploration.asteroid-field"} + elseif zone.type == "asteroid-belt" then + return {"space-exploration.asteroid-belt"} + elseif zone.type == "anomaly" then + return {"space-exploration.anomaly"} + elseif zone.type == "spaceship" then + return {"space-exploration.spaceship"} + elseif zone.type == "orbit" then + return {"space-exploration.something_orbit", Zone.type_title(zone.parent)} + end +end + +function Zone.get_signal_name(zone) + -- used for rich text + if zone.type == "orbit" and zone.parent.type == "star" then + return mod_prefix.."star" + elseif zone.type == "orbit" and zone.parent.type == "planet" then + return mod_prefix.."planet-orbit" + elseif zone.type == "orbit" and zone.parent.type == "moon" then + return mod_prefix.."moon-orbit" + else + return mod_prefix..zone.type + end +end + +function Zone.get_icon(zone) + -- used for rich text + return "virtual-signal/" .. Zone.get_signal_name(zone) +end + +function Zone.is_solid(zone) + return zone.type == "planet" or zone.type == "moon" +end + +function Zone.is_space(zone) + return not Zone.is_solid(zone) +end + +function Zone.from_zone_index(zone_index) + return global.zone_index[zone_index] +end + +function Zone.from_name(name) + return global.zones_by_name[name] +end + +function Zone.from_surface_index(surface_index) + return global.zones_by_surface[surface_index] +end + +function Zone.from_surface(surface) + local from_index = Zone.from_surface_index(surface.index) + if from_index then return from_index end + -- maybe a spaceship + return Spaceship.from_own_surface_index(surface.index) +end + +function Zone.get_stellar_position(zone) + if not zone then return nil end + if zone.type == "anomaly" then return {x = 0, y = 0} end + -- everything else should have a stellar position + return zone.stellar_position or Zone.get_stellar_position(zone.parent) +end + +function Zone.get_star_gravity_well(zone) + if zone.type == "orbit" then + return Zone.get_star_gravity_well(zone.parent) + end + return zone.star_gravity_well or 0 +end + +function Zone.get_planet_gravity_well(zone) + if zone.type == "orbit" then + if zone.parent.type == "star" then + return 0 + elseif zone.parent.type == "planet" then + return Zone.get_planet_gravity_well(zone.parent) - 1 + else + return Zone.get_planet_gravity_well(zone.parent) - 0.5 + end + end + return zone.planet_gravity_well or 0 +end + +function Zone.get_space_distortion(zone) -- anomaly + if zone.space_distortion then + return zone.space_distortion + end + return zone.type == "anomaly" and 1 or 0 +end + +function Zone.find_parent_star(zone) + if zone.type == "star" then + return zone + elseif zone.parent then + return Zone.find_parent_star(zone.parent) + end +end + +function Zone.apply_markers(zone) + for force_name, force_data in pairs(global.forces) do + local force = game.forces[force_name] + if force and force_data.zones_discovered[zone.index] then + if not (force_data.zones_discovered[zone.index].marker and force_data.zones_discovered[zone.index].marker.valid) then + local surface = Zone.get_surface(zone) + if surface then + force_data.zones_discovered[zone.index].marker = force.add_chart_tag(surface, { + icon = {type = "virtual", name = Zone.get_signal_name(zone)}, + position = {0,0}, + text = zone.name + }) + end + end + end + end +end + +function Zone.validate_controls_and_error(controls) + if controls then + for name, control in pairs(controls) do + if type(name) ~= "string" then + error(serpent.block(name)) + end + end + end +end + +function Zone.validate_controls(controls) + if controls then + for name, control in pairs(controls) do + if type(name) ~= "string" then + controls[name] = nil + end + end + end +end + +function Zone.apply_controls_to_mapgen(zone, controls, mapgen) + Zone.validate_controls(controls) + local frequency_multiplier = Zone.get_frequency_multiplier(zone) + for name, control in pairs(controls) do + if type(name) == "string" then + if name == "moisture" then + mapgen.property_expression_names = mapgen.property_expression_names or {} + if control.frequency then + mapgen.property_expression_names["control-setting:moisture:frequency:multiplier"] = control.frequency + end + if control.bias then + mapgen.property_expression_names["control-setting:moisture:bias"] = control.bias + end + elseif name == "aux" then + mapgen.property_expression_names = mapgen.property_expression_names or {} + if control.frequency then + mapgen.property_expression_names["control-setting:aux:frequency:multiplier"] = control.frequency + end + if control.bias then + mapgen.property_expression_names["control-setting:aux:bias"] = control.bias + end + elseif name == "water" then + if control.frequency then + mapgen.terrain_segmentation = control.frequency + end + if control.size then + mapgen.water = control.size + end + elseif name == "cliff" then + mapgen.cliff_settings = mapgen.cliff_settings or { + name="cliff", + cliff_elevation_0=10, -- default + cliff_elevation_interval=400, -- when set from the GUI the value is 40 / frequency. + richness=0, -- 0.17 to 6. + } + if control.frequency then + mapgen.cliff_settings.cliff_elevation_interval = 40 / control.frequency + mapgen.cliff_settings.cliff_elevation_0 = mapgen.cliff_settings.cliff_elevation_interval / 4 + end + if control.richness then + mapgen.cliff_settings.richness = richness + end + else + if game.autoplace_control_prototypes[name] then + mapgen.autoplace_controls[name] = table.deepcopy(control) + if mapgen.autoplace_controls[name].frequency and not Util.table_contains(Zone.controls_without_frequency_multiplier, name) then + mapgen.autoplace_controls[name].frequency = mapgen.autoplace_controls[name].frequency * frequency_multiplier + end + else + log("Zone.apply_controls_to_mapgen: Attempt to apply invalid control name to mapgen: "..name) + controls[name] = nil + end + end + end + end +end + +function Zone.get_frequency_multiplier(zone) + if zone.radius then + return 5000 / zone.radius + end + return 1 +end + +function Zone.create_surface(zone) + + if not zone.surface_index then + + Universe.inflate_climate_controls(zone, false) + + -- TODO planets should have customised controls + + local map_gen_settings = table.deepcopy(game.default_map_gen_settings) + map_gen_settings.width = 0 + map_gen_settings.height = 0 + if not zone.seed then zone.seed = math.random(4294967295) end + map_gen_settings.seed = zone.seed + + local autoplace_controls = map_gen_settings.autoplace_controls + zone.controls = zone.controls or {} + Universe.update_zone_minimum_threat(zone) + if zone.plague_used then + zone.controls["trees"] = {frequency = 0, size = -1, richness = -1} + end + + local frequency_multiplier = Zone.get_frequency_multiplier(zone) -- increase for small planets and moons + + -- For all possible controls set values so it can be regenreated consistently. + for control_name, control_prototype in pairs(game.autoplace_control_prototypes) do + if control_name ~= "planet-size" and game.autoplace_control_prototypes[control_name] then + zone.controls[control_name] = zone.controls[control_name] or {} + zone.controls[control_name].frequency = (zone.controls[control_name].frequency or (0.17 + math.random() * math.random() * 2)) + zone.controls[control_name].size = zone.controls[control_name].size or (0.1 + math.random() * 0.8) + zone.controls[control_name].richness = zone.controls[control_name].richness or (0.1 + math.random() * 0.8) + end + end + + zone.controls.moisture = zone.controls.moisture or {} + zone.controls.moisture.frequency = (zone.controls.moisture.frequency or (0.17 + math.random() * math.random() * 2)) + zone.controls.moisture.bias = zone.controls.moisture.bias or (math.random() - 0.5) + + zone.controls.aux = zone.controls.aux or {} + zone.controls.aux.frequency = (zone.controls.aux.frequency or (0.17 + math.random() * math.random() * 2)) + zone.controls.aux.bias = zone.controls.aux.bias or (math.random() - 0.5) + + zone.controls.cliff = zone.controls.cliff or {} + zone.controls.cliff.frequency = (zone.controls.cliff.frequency or (0.17 + math.random() * math.random() * 10)) -- + zone.controls.cliff.richness = zone.controls.cliff.richness or (math.random() * 1.25) + + --[[ + map_gen_settings.property_expression_names = { + ["control-setting:moisture:frequency:multiplier"] = zone.controls.moisture.frequency * frequency_multiplier, + ["control-setting:moisture:bias"] = zone.controls.moisture.bias, + ["control-setting:aux:frequency:multiplier"] = zone.controls.aux.frequency * frequency_multiplier, + ["control-setting:aux:bias"] = zone.controls.aux.bias, + } + zone.controls.water = zone.controls.water or {} + zone.controls.water.size = zone.controls.water.size or 0.01 -- high is 6, low is 0 + zone.controls.water.frequency = (zone.controls.water.frequency or 1) -- low is 0.17 + zone.controls.water.frequency = 0.5 + zone.controls.water.frequency / 2 + map_gen_settings.water = zone.controls.water.size + map_gen_settings.terrain_segmentation = zone.controls.water.frequency + ]]-- + Zone.apply_controls_to_mapgen(zone, zone.controls, map_gen_settings) + + autoplace_controls["planet-size"] = { frequency = 1, size = 1 } -- default + -- planet_radius = 10000 / 6 * (6 + log(1/planet_frequency/6, 2)) + -- planet_frequency = 1 / 6 / 2 ^ (planet_radius * 6 / 10000 - 6) + local planet_size_frequency = 1/6 -- 10000 radius planet + if Zone.is_solid(zone) then + map_gen_settings.width = zone.radius*2+32 + map_gen_settings.height = zone.radius*2+32 + -- planet or moon + --planet_size_frequency = 1 / (zone.radius / 10000) + planet_size_frequency = 1 / 6 / 2 ^ (zone.radius * 6 / 10000 - 6) + local penalty = -100000 + if zone.tags and util.table_contains(zone.tags, "water_none") then + map_gen_settings.property_expression_names["tile:deepwater:probability"] = penalty + map_gen_settings.property_expression_names["tile:water:probability"] = penalty + map_gen_settings.property_expression_names["tile:water-shallow:probability"] = penalty + map_gen_settings.property_expression_names["tile:water-mud:probability"] = penalty + end + map_gen_settings.property_expression_names["decorative:se-crater3-huge:probability"] = penalty + if not zone.is_homeworld then + map_gen_settings.starting_area = 0.5 + end + else + if zone.type == "orbit" then + autoplace_controls["planet-size"].size = zone.parent.radius and (zone.parent.radius / 200) or 50 + elseif zone.type == "asteroid-belt" then + autoplace_controls["planet-size"].size = 200 + elseif zone.type == "asteroid-field" then + autoplace_controls["planet-size"].size = 10000 + end + + planet_size_frequency = 1/1000 + map_gen_settings.cliff_settings={ + name="cliff", + cliff_elevation_0=10, -- default + cliff_elevation_interval=400, -- when set from the GUI the value is 40 / frequency. + richness=0, -- 0.17 to 6. + } + zone.controls.cliff.frequency = 0 + zone.controls.cliff.richness = 0 + + map_gen_settings.property_expression_names = { + ["control-setting:moisture:frequency:multiplier"] = 10, + ["control-setting:moisture:bias"] = -1, + ["control-setting:aux:frequency:multiplier"] = 0, + ["control-setting:aux:bias"] = 0, + } + map_gen_settings.starting_area = 0 + end + autoplace_controls["planet-size"].frequency = planet_size_frequency + + Log.debug_log("Creating surface " .. zone.name .. " with map_gen_settings:") + Log.debug_log(util.table_to_string(map_gen_settings)) + if Zone.is_space(zone) then + -- Speed up terrain generation by excluding everything not specifically allowed to spawn + --map_gen_settings.default_enable_all_autoplace_controls = false + map_gen_settings.autoplace_settings={ + ["decorative"]={ + treat_missing_as_default=false, + settings={ + ["se-crater3-huge"] ={}, + ["se-crater1-large-rare"] ={}, + ["se-crater1-large"] ={}, + ["se-crater2-medium"] ={}, + ["se-crater4-small"] ={}, + ["se-sand-decal-space"] ={}, + ["se-stone-decal-space"] ={}, + ["se-rock-medium-asteroid"] ={}, + ["se-rock-small-asteroid"] ={}, + ["se-rock-tiny-asteroid"] ={}, + ["se-sand-rock-medium-asteroid"] ={}, + ["se-sand-rock-small-asteroid"] ={} + } + }, + --[[["entity"]={ + treat_missing_as_default=false, + settings={ + ["se-rock-huge-asteroid"] ={}, + ["se-rock-big-asteroid"] ={}, + ["se-sand-rock-big-asteroid"] ={}, + ["se-rock-huge-space"] ={}, + ["se-rock-big-space"] ={}, + } + },]]-- + ["tile"]={ + treat_missing_as_default=false, + settings={ + ["se-asteroid"]={}, + ["se-space"]={} + } + }, + } + else + -- speed up terrain generation by specifying specific things not to spawn + local penalty = -100000 + map_gen_settings.property_expression_names["decorative:se-crater3-huge:probability"] = penalty + map_gen_settings.property_expression_names["decorative:se-crater1-large-rare:probability"] = penalty + map_gen_settings.property_expression_names["decorative:se-crater1-large:probability"] = penalty + map_gen_settings.property_expression_names["decorative:se-crater2-medium:probability"] = penalty + map_gen_settings.property_expression_names["decorative:se-crater4-small:probability"] = penalty + map_gen_settings.property_expression_names["decorative:se-sand-decal-space:probability"] = penalty + map_gen_settings.property_expression_names["decorative:se-stone-decal-space:probability"] = penalty + map_gen_settings.property_expression_names["decorative:se-rock-medium-asteroid:probability"] = penalty + map_gen_settings.property_expression_names["decorative:se-rock-small-asteroid:probability"] = penalty + map_gen_settings.property_expression_names["decorative:se-rock-tiny-asteroid:probability"] = penalty + map_gen_settings.property_expression_names["decorative:se-sand-rock-medium-asteroid:probability"] = penalty + map_gen_settings.property_expression_names["decorative:se-sand-rock-small-asteroid:probability"] = penalty + + map_gen_settings.property_expression_names["entity:se-rock-huge-asteroid:probability"] = penalty + map_gen_settings.property_expression_names["entity:se-rock-big-asteroid:probability"] = penalty + map_gen_settings.property_expression_names["entity:se-sand-rock-big-asteroid:probability"] = penalty + map_gen_settings.property_expression_names["entity:se-rock-huge-space:probability"] = penalty + map_gen_settings.property_expression_names["entity:se-rock-big-space:probability"] = penalty + + map_gen_settings.property_expression_names["tile:se-asteroid:probability"] = penalty + map_gen_settings.property_expression_names["tile:se-space:probability"] = penalty + end + + local surface + if not game.surfaces[zone.name] then + surface = game.create_surface(zone.name, map_gen_settings) + surface.force_generate_chunk_requests() + + else + -- this happens if the mod was uninstalled and reinstalled. The surface will be invalid and unfaxable. + -- game.delete_surface(zone.name) -- does not work in time to re make the surface + surface = game.surfaces[zone.name] + surface.clear(false) + + end + + zone.surface_index = surface.index + global.zones_by_surface = global.zones_by_surface or {} + global.zones_by_surface[surface.index] = zone + + Zone.set_solar_and_daytime(zone) + + if zone.type == "planet" and not zone.is_homeworld then + + -- Vault planet + if (not zone.ruins) and not zone.glyph then + Ancient.assign_zone_next_glyph(zone) + end + Ancient.make_vault_exterior(zone) -- only makes the vault if glyph exists + + -- Interburbulator planet + if (not zone.glyph) and (not zone.ruins) and not global.interburbulator then + Interburbulator.make_interburbulator(zone) + end + if zone.interburbulator then + Interburbulator.build_platform() + end + + end + + if not zone.is_homeworld then + -- Unique ruins + Ruin.zone_assign_unique_ruins(zone) + Ruin.zone_build_ruins(zone, surface) + end + + if zone.type == "anomaly" then + Ancient.make_gate(Ancient.gate_default_position) + Ruin.build({ruin_name = "galaxy-ship", surface_index = surface.index, position = Ancient.galaxy_ship_default_position}) + end + + end +end + + +function Zone.get_star_from_child(zone) + if zone.type == "star" then + return zone + elseif zone.parent then + return Zone.get_star_from_child(zone.parent) + end +end + +function Zone.get_stellar_object_from_child(zone) + if zone.type == "asteroid-field" then + return zone + else + return Zone.get_star_from_child(zone) + end +end + +function Zone.get_star_from_position(zone) + if not zone.stellar_position then return end + for _, star in pairs(global.universe.stars) do + if star.stellar_position.x == zone.stellar_position.x and star.stellar_position.y == zone.stellar_position.y then + return star + end + end +end + +function Zone.get_stellar_object_from_position(zone) + local star = Zone.get_star_from_position(zone) + if star then return star end + for _, asteroid_field in pairs(global.universe.space_zones) do + if asteroid_field.stellar_position.x == zone.stellar_position.x and asteroid_field.stellar_position.y == zone.stellar_position.y then + return asteroid_field + end + end +end + +function Zone.get_solar(zone) -- can be spaceship too + -- return the actual expected light % including daytime for space zones and spaceships. + -- return peak expected light % space solid zones. + + if zone.type == "anomaly" then + return 0 + end + + local star + local star_gravity_well = 0 + + if zone.type == "spaceship" then + star = zone.near_star + star_gravity_well = zone.star_gravity_well or 0 + else + star = Zone.get_star_from_child(zone) + star_gravity_well = Zone.get_star_gravity_well(zone) + end + + local light_percent = 0 + + if star then + light_percent = 1.6 * star_gravity_well / (star.star_gravity_well + 1) + end + + if Zone.is_space(zone) then + if(zone.type == "orbit" and zone.parent and zone.parent.type == "star") then -- star + light_percent = light_percent * 10 -- x20 + elseif zone.type == "asteroid-belt" then + light_percent = light_percent * 2.5 -- x5 + else + light_percent = light_percent * 5 -- x10 + if zone.parent and zone.parent.radius then + light_percent = light_percent * (1 - 0.1 * zone.parent.radius / 10000) + end + end + light_percent = light_percent + 0.01 + else + if zone.radius then + light_percent = light_percent * (1 - 0.1 * zone.radius / 10000) + if zone.is_homeworld then + light_percent = 1 + end + end + end + + if zone.space_distortion and zone.space_distortion > 0 then + + light_percent = light_percent * (1 - zone.space_distortion) + + if zone.is_homeworld then + light_percent = 1 + end + end + return light_percent +end + +function Zone.get_display_light_percent(zone) + return Zone.get_solar(zone) +end + +function Zone.set_solar_and_daytime(zone) + local surface = Zone.get_surface(zone) + if not surface then return end + + if zone.type == "anomaly" then + surface.solar_power_multiplier = 0 + surface.daytime = 0.5 + return + end + + local light_percent = Zone.get_solar(zone) + + if Zone.is_space(zone) then + + -- light_percent is the total output + -- but we have most space zones daylight ranging from mid evening to night so that lights are active. + -- so that is the main driving factor. + -- except stars. + + surface.freeze_daytime = true + + if zone.type == "orbit" and zone.parent.type == "star" then + + surface.daytime = 0 -- very bright + surface.solar_power_multiplier = Zone.solar_multiplier * light_percent + + else + + if light_percent >= 0.5 then + surface.daytime = 0.35 -- half light + surface.solar_power_multiplier = Zone.solar_multiplier * light_percent * 2 -- x2 compensate for half light + else + -- for now all zone surfaces are syneced so that daytime 0 is at game.tick 0 + surface.daytime = 0.45 - 0.2 * light_percent + surface.solar_power_multiplier = Zone.solar_multiplier -- x2 compensate for half light max + -- light_percent of 1 would be 0.35 (half-light), + -- light_percent of 0 would be 0.45 (dark) + end + + end + + else + -- planet or moon + -- has daytime + + surface.daytime = (game.tick / zone.ticks_per_day) % 1 + surface.solar_power_multiplier = Zone.solar_multiplier * light_percent + + if zone.ticks_per_day then + surface.ticks_per_day = zone.ticks_per_day + end + + end + + if zone.type == "anomaly" then + surface.solar_power_multiplier = 0 + surface.daytime = 0.5 + end + +end + +function Zone.get_flags_weight(zone, force_name, playerdata) + local weight = ( + ((playerdata.track_glyphs and zone.glyph) and 0.96 or 0) + + ((zone.interburbulator or zone.ruins) and 0.95 or 0) + + ((playerdata.visited_zone and playerdata.visited_zone[zone.index]) and 0.97 or 0) + + ((global.forces[force_name].zone_assets and global.forces[force_name].zone_assets[zone.index] and table_size(global.forces[force_name].zone_assets[zone.index].rocket_landing_pad_names) > 0) and 0.98 or 0) + + ((global.forces[force_name].zone_assets and global.forces[force_name].zone_assets[zone.index] and table_size(global.forces[force_name].zone_assets[zone.index].rocket_launch_pad_names) > 0) and 1 or 0) + ) + Log.debug_log("Zone.get_flags_weight " .. zone.name.." " ..weight, "zone") + return weight +end + +function Zone.get_surface(zone) -- returns surface but does not build + if zone.type == "spaceship" then + return Spaceship.get_current_surface(zone) + end + if zone.surface_index then + return game.get_surface(zone.surface_index) + end + return nil +end + +function Zone.get_surface_name(zone) + local surface = Zone.get_surface(zone) + if surface then return surface.name end +end + +function Zone.get_make_surface(zone) + if zone.type == "spaceship" then + return Spaceship.get_current_surface(zone) + end + if not zone.surface_index then Zone.create_surface(zone) end + return game.get_surface(zone.surface_index) +end + +function Zone.discover(force_name, zone, source) -- source could be "Satellite " + global.forces[force_name] = global.forces[force_name] or {} + global.forces[force_name].zones_discovered = global.forces[force_name].zones_discovered or {} + global.forces[force_name].zones_discovered_count = global.forces[force_name].zones_discovered_count or 0 + + if not global.forces[force_name].zones_discovered[zone.index] then + + Universe.inflate_climate_controls(zone, false) + + global.forces[force_name].zones_discovered[zone.index] = { + discovered_at = game.tick, + marker = nil + } + global.forces[force_name].zones_discovered_count = global.forces[force_name].zones_discovered_count + 1 + if zone.type == "planet" and (not zone.is_homeworld) and (not zone.ruins) and (not zone.glyph) then + Ancient.assign_zone_next_glyph(zone) + end + + -- Unique ruins + Ruin.zone_assign_unique_ruins(zone) + + local message = nil + if source then + message = {"space-exploration.source-discovered-zone", source, Zone.type_title(zone), Zone.get_icon(zone), zone.name} + --game.forces[force_name].print(source .. " discovered a new " .. Zone.type_title(zone) .. ": " .. zone.name) + else + message = {"space-exploration.discovered-zone", source, Zone.type_title(zone), Zone.get_icon(zone), zone.name} + --game.forces[force_name].print("Discovered a new " .. Zone.type_title(zone) .. ": " .. zone.name) + end + local tick_task = new_tick_task("force-message") + tick_task.force_name = force_name + tick_task.message = message + + Zone.apply_markers(zone) -- in case the surface exists + + for _, player in pairs(game.connected_players) do + if Zonelist.get_main_window(player.index) then + Zonelist.gui_update_list(player.index) + end + end + + if zone.type == "anomaly" then + local tick_task = new_tick_task("force-message") + tick_task.force_name = force_name + tick_task.message = {"space-exploration.discovered-anomaly-additional"} + tick_task.delay_until = game.tick + 300 --5s + end + + if zone.glyph then + local force = game.forces[force_name] + for _, player in pairs(force.players) do + if player.connected then + local playerdata = get_make_playerdata(player) + if playerdata.track_glyphs then + player.print({"space-exploration.discovered-glyph-vault", zone.name}) + end + end + end + end + + return true + + end + return false +end + +function Zone.discover_next_research(force_name, source, allow_targeted) + global.forces[force_name] = global.forces[force_name] or {} + global.forces[force_name].zones_discovered = global.forces[force_name].zones_discovered or {} + global.forces[force_name].zones_discovered_count = global.forces[force_name].zones_discovered_count or 0 + + local target_resource = "n/a" + if allow_targeted then + target_resource = global.forces[force_name].search_for_resource + end + + local can_discover = {} + local can_discover_targeted = {} + + -- star and deep space discovery should be bias to nearer positions + local closest_1 = nil + local closest_stellar_distance = 1000000 + local pos1 = {x = 0, y = 0} -- focus on aeras close to the center of the star map + + for _, star in pairs(global.universe.stars) do + if not global.forces[force_name].zones_discovered[star.index] then + local pos2 = Zone.get_stellar_position(star) + local distance = util.vectors_delta_length(pos1, pos2) + if distance < closest_stellar_distance then + closest_stellar_distance = distance + closest_1 = star + end + end + end + + if closest_1 then + -- x5 + table.insert(can_discover, closest_1) + table.insert(can_discover, closest_1) + table.insert(can_discover, closest_1) + table.insert(can_discover, closest_1) + table.insert(can_discover, closest_1) + end + + for _, star in pairs(global.universe.stars) do + if global.forces[force_name].zones_discovered[star.index] then + for _, planet in pairs(star.children) do + if not global.forces[force_name].zones_discovered[planet.index] then + if planet.primary_resource == target_resource then + table.insert(can_discover_targeted, planet) + if planet.type == "planet" then + --x5 bias towards planets + table.insert(can_discover_targeted, planet) + table.insert(can_discover_targeted, planet) + table.insert(can_discover_targeted, planet) + table.insert(can_discover_targeted, planet) + end + else + table.insert(can_discover, planet) + if planet.type == "planet" then + --x5 bias towards planets + table.insert(can_discover, planet) + table.insert(can_discover, planet) + table.insert(can_discover, planet) + table.insert(can_discover, planet) + end + end + else + if planet.children then + for _, moon in pairs(planet.children) do + if not global.forces[force_name].zones_discovered[moon.index] then + if moon.primary_resource == target_resource then + table.insert(can_discover_targeted, moon) + else + table.insert(can_discover, moon) + end + end + end + end + end + end + end + end + + if #can_discover_targeted > 0 then + return Zone.discover(force_name, Util.random_from_array(can_discover_targeted), source) + end + if #can_discover > 0 then + return Zone.discover(force_name, Util.random_from_array(can_discover), source) + end + +end + +function Zone.discover_next_research_deep_space(force_name, source, allow_targeted) + global.forces[force_name] = global.forces[force_name] or {} + global.forces[force_name].zones_discovered = global.forces[force_name].zones_discovered or {} + global.forces[force_name].zones_discovered_count = global.forces[force_name].zones_discovered_count or 0 + + if game.forces[force_name].technologies[Zone.name_tech_discover_deep].level > 11 then + -- should have discovered multiple stars at this point + if not global.forces[force_name].zones_discovered[global.universe.anomaly.index] then + return Zone.discover(force_name, global.universe.anomaly, source) + end + end + + local target_resource = "n/a" + if allow_targeted then + target_resource = global.forces[force_name].search_for_resource + end + + local can_discover = {} + local can_discover_targeted = {} + for _, zone in pairs(global.universe.space_zones) do + if not global.forces[force_name].zones_discovered[zone.index] then + if zone.primary_resource == target_resource then + table.insert(can_discover_targeted, zone) + else + table.insert(can_discover, zone) + end + end + end + + if #can_discover_targeted > 0 then + return Zone.discover(force_name, Util.random_from_array(can_discover_targeted), source) + end + if #can_discover > 0 then + return Zone.discover(force_name, Util.random_from_array(can_discover), source) + end +end + +function Zone.discover_next_satellite(force_name, source, system_restriction) + global.forces[force_name] = global.forces[force_name] or {} + global.forces[force_name].zones_discovered = global.forces[force_name].zones_discovered or {} + global.forces[force_name].zones_discovered_count = global.forces[force_name].zones_discovered_count or 0 + + if system_restriction then + local star = system_restriction + while star.parent do + star = star.parent + end + local last_valid + if star.children then + for _, planet in pairs(star.children) do + if not global.forces[force_name].zones_discovered[planet.index] then + if math.random() < 0.5 then -- skip it + last_valid = planet + else + return Zone.discover(force_name, planet, source) + end + elseif planet.children then + for _, moon in pairs(planet.children) do + if not global.forces[force_name].zones_discovered[moon.index] then + if math.random() < 0.5 then -- skip it + last_valid = moon + else + return Zone.discover(force_name, moon, source) + end + end + end + end + end + end + --skipped too much + if last_valid then + return Zone.discover(force_name, last_valid, source) + end + -- find stars now + local closest_1 = nil + local closest_stellar_distance = 1000000 + local pos1 = Zone.get_stellar_position(star) + + for _, star2 in pairs(global.universe.stars) do + if not global.forces[force_name].zones_discovered[star2.index] then + local pos2 = Zone.get_stellar_position(star2) + local distance = util.vectors_delta_length(pos1, pos2) + if distance < closest_stellar_distance then + closest_stellar_distance = distance + closest_1 = star2 + end + end + end + if closest_1 then + return Zone.discover(force_name, closest_1, source) + end + return false + end + +end + +function Zone.find_nearest_stellar_object(stellar_position) + local closest_distance = math.huge + local closest = nil + + for _, star in pairs(global.universe.stars) do + local distance = util.vectors_delta_length(star.stellar_position, stellar_position) + if distance < closest_distance then + closest_distance = distance + closest = star + end + end + + for _, space_zone in pairs(global.universe.space_zones) do + local distance = util.vectors_delta_length(space_zone.stellar_position, stellar_position) + if distance < closest_distance then + closest_distance = distance + closest = space_zone + end + end + return closest +end + +function Zone.find_nearest_star(stellar_position) + local closest_distance = math.huge + local closest = nil + + for _, star in pairs(global.universe.stars) do + local distance = util.vectors_delta_length(star.stellar_position, stellar_position) + if distance < closest_distance then + closest_distance = distance + closest = star + end + end + return closest +end + +function Zone.find_nearest_zone(space_distortion, stellar_position, star_gravity_well, planet_gravity_well) + + if space_distortion > 0.4 then return global.universe.anomaly end -- default from the anomaly + + local star = Zone.find_nearest_stellar_object(stellar_position) -- can be asteroid field + if star_gravity_well > 0 then + local closest_zone = star + local closest_distance = math.abs((star.star_gravity_well or 0) - star_gravity_well) + if closest_zone.type == "star" then + for _, planet in pairs(star.children) do + local distance = math.abs(planet.star_gravity_well - star_gravity_well) + if distance < closest_distance then + closest_distance = distance + closest_zone = planet + end + end + end + + if closest_zone.type == "planet" then + local closest_zone2 = closest_zone + closest_distance = math.abs(closest_zone.planet_gravity_well - planet_gravity_well) + for _, moon in pairs(closest_zone.children) do + if moon.type == "moon" then + local distance = math.abs(moon.planet_gravity_well - planet_gravity_well) + if distance < closest_distance then + closest_distance = distance + closest_zone2 = moon + end + end + end + return closest_zone2 + end + return closest_zone + else + if not star then return global.universe.anomaly end + if not star.children then return star end + local last_child = star.children[#star.children] + if last_child.children then + last_child = last_child.children[#last_child.children] + end + return last_child + end + return Zone.get_default() + +end + +function Zone.find_nearest_solid_zone(space_distortion, stellar_position, star_gravity_well, planet_gravity_well, allow_moon) + if space_distortion == 1 then return Zone.get_default() end -- default from the anomaly + + if planet_gravity_well == 0 then -- if no moon + planet_gravity_well = 100000 -- high to land on planet + end + + if star_gravity_well == 0 then -- if no planet + star_gravity_well = 100000 -- high to land on planet with high solar + end + + local star = Zone.find_nearest_star(stellar_position) + if not star then return Zone.get_default() end + + local closest_planet = nil + local closest_distance = math.huge + for _, planet in pairs(star.children) do + if planet.type == "planet" then -- not an asteroid belt + local distance = math.abs(planet.star_gravity_well - star_gravity_well) + if distance < closest_distance then + closest_distance = distance + closest_planet = planet + end + end + end + + if not closest_planet then return Zone.get_default() end + + local closest_body = closest_planet -- default to planet + + if allow_moon then + closest_distance = math.abs(closest_body.planet_gravity_well - planet_gravity_well) + -- see if a moon is closer + for _, moon in pairs(closest_planet.children) do + if moon.type == "moon" then + local distance = math.abs(moon.planet_gravity_well - planet_gravity_well) + if distance < closest_distance then + closest_distance = distance + closest_body = moon + end + end + end + end + + return closest_body + +end + +function Zone.find_nearest_solid_zone_from_zone(zone) + -- typically used for escape pod + if Zone.is_solid(zone) then return nil end -- already there + + if zone.type == "orbit" and Zone.is_solid(zone.parent) then + return zone.parent -- drop to planet / moon + end + + return Zone.find_nearest_solid_zone( + Zone.get_space_distortion(zone), + Zone.get_stellar_position(zone), + Zone.get_star_gravity_well(zone), + Zone.get_planet_gravity_well(zone), + true + ) +end + +function Zone.get_force_assets(force_name, zone_index) + if not global.forces[force_name] then + if game.forces[force_name] then + setup_force(game.forces[force_name]) + else + return + end + end + if not global.forces[force_name] then + if game.forces[force_name] then + game.forces[force_name].print("Error getting force data for invalid player force " .. force_name) + else + game.forces[force_name].print("Error getting force data for invalid force " .. force_name) + end + return -- invalid force + end + if not global.forces[force_name].zone_assets then + global.forces[force_name].zone_assets = {} + end + if not global.forces[force_name].zone_assets[zone_index] then + global.forces[force_name].zone_assets[zone_index] = { + rocket_launch_pad_names = {}, + rocket_landing_pad_names = {}, + } + end + --Log.debug_log("Zone.get_force_assets: " .. util.table_to_string(global.forces[force_name].zone_assets[zone_index])) + return global.forces[force_name].zone_assets[zone_index] +end + +function Zone.get_travel_delta_v_sub(origin, destination) + -- expected ranges: + -- 1500 planetary system + -- 15000 solar system + -- 50000 interstellarsystem + -- 50000 to/from anomaly + if origin == destination then return 0 end + + local origin_space_distorion = Zone.get_space_distortion(origin) + local origin_stellar_position = Zone.get_stellar_position(origin) + local origin_star_gravity_well = Zone.get_star_gravity_well(origin) + local origin_planet_gravity_well = Zone.get_planet_gravity_well(origin) + + local destination_space_distorion = Zone.get_space_distortion(destination) + local destination_stellar_position = Zone.get_stellar_position(destination) + local destination_star_gravity_well = Zone.get_star_gravity_well(destination) + local destination_planet_gravity_well = Zone.get_planet_gravity_well(destination) + + if origin_space_distorion > 0 and destination_space_distorion > 0 then -- spaceship partially in distortion + return Zone.travel_cost_interstellar * math.abs(origin_space_distorion - destination_space_distorion) + elseif origin_space_distorion > 0 then + return Zone.travel_cost_space_distortion + + Zone.travel_cost_star_gravity * destination_star_gravity_well + + Zone.travel_cost_planet_gravity * destination_planet_gravity_well + elseif destination_space_distorion > 0 then + return Zone.travel_cost_space_distortion + + Zone.travel_cost_star_gravity * origin_star_gravity_well + + Zone.travel_cost_planet_gravity * origin_planet_gravity_well + end + + if origin_stellar_position.x == destination_stellar_position.x and origin_stellar_position.y == destination_stellar_position.y then + -- same solar system + if origin_star_gravity_well == destination_star_gravity_well then + -- same planetary system + return Zone.travel_cost_planet_gravity * math.abs(origin_planet_gravity_well - destination_planet_gravity_well) -- the planet_gravity_well difference + else + -- different planetary systems + return Zone.travel_cost_star_gravity * math.abs(destination_star_gravity_well - origin_star_gravity_well) -- the star_gravity_well difference + + Zone.travel_cost_planet_gravity * origin_planet_gravity_well + + Zone.travel_cost_planet_gravity * destination_planet_gravity_well + end + else + -- interstellar + return Zone.travel_cost_interstellar * util.vectors_delta_length(origin_stellar_position, destination_stellar_position) + + Zone.travel_cost_star_gravity * origin_star_gravity_well + + Zone.travel_cost_planet_gravity * origin_planet_gravity_well + + Zone.travel_cost_star_gravity * destination_star_gravity_well + + Zone.travel_cost_planet_gravity * destination_planet_gravity_well + end + +end + +function Zone.get_travel_delta_v(origin, destination) + if origin and destination then + if origin.type == "spaceship" or destination.type == "spaceship" then + return Zone.get_travel_delta_v_sub(origin, destination) + end + global.cache_travel_delta_v = global.cache_travel_delta_v or {} + global.cache_travel_delta_v[origin.index] = global.cache_travel_delta_v[origin.index] or {} + if not global.cache_travel_delta_v[origin.index][destination.index] then + global.cache_travel_delta_v[origin.index][destination.index] = Zone.get_travel_delta_v_sub(origin, destination) + end + return global.cache_travel_delta_v[origin.index][destination.index] + end +end + +function Zone.get_launch_delta_v(zone) + -- 10000 to 800 for planets, 0 for in space + return 500 + (zone.radius or 50) +end + +function Zone.get_closest_zone(origin, destination_list) + if origin and destination_list then + if Util.table_contains(destination_list, origin) then return origin end + local destination = nil + local delta_v_closest = math.huge + local delta_v_current = nil + for _, zone in pairs(destination_list) do + delta_v_current = Zone.get_travel_delta_v(origin, zone) + if delta_v_current < delta_v_closest then + delta_v_closest = delta_v_current + destination = zone + end + end + return destination + end +end + +function Zone.find_zone_landing_position(zone, try_position) + Log.debug_log("Zone.find_zone_landing_position: " ..zone.name) + local surface = Zone.get_make_surface(zone) + + if not try_position then + if zone.type == "spaceship" then + try_position = Spaceship.get_boarding_position(zone) + elseif Zone.is_solid(zone) then + local try_angle = math.random() * math.pi * 2 -- rad + local try_distance = math.random() * (zone.radius / 4 or 512) + try_position = {x = math.cos(try_angle) * try_distance, y = math.sin(try_angle) * try_distance} + else + try_position = {x = math.random(-512, 512), y = math.random(-128, 128)} + end + end + surface.request_to_generate_chunks(try_position, 2) + surface.force_generate_chunk_requests() + local safe_position + if Zone.is_solid(zone) then + safe_position = surface.find_non_colliding_position(collision_rocket_destination_surface, try_position, 64, 1) + else + safe_position = surface.find_non_colliding_position(collision_rocket_destination_orbit, try_position, 64, 1) + end + if not safe_position then + local try_position_2 = {x = 64 * (math.random() - 0.5), y = 64 * (math.random() - 0.5)} + surface.request_to_generate_chunks(try_position_2, 2) + surface.force_generate_chunk_requests() + if Zone.is_solid(zone) then + safe_position = surface.find_non_colliding_position(collision_rocket_destination_surface, try_position_2, 64, 1) + else + safe_position = surface.find_non_colliding_position(collision_rocket_destination_orbit, try_position_2, 64, 1) + end + end + if safe_position then + Log.debug_log("Zone.find_zone_landing_position: safe_position found") + return safe_position + else + Log.debug_log("Zone.find_zone_landing_position: safe_position not found, falling back to try_position") + return try_position + end +end + +function Zone.dropdown_name_from_zone(zone, no_indent) + local i1 = " " + local i2 = " " + local i3 = " " + if no_indent then + i1 = "" + i2 = "" + i3 = "" + end + if zone.type == "orbit" then + if zone.parent.type == "star" then + return "[img=virtual-signal/se-star] " .. zone.name -- star orbit + elseif zone.parent.type == "planet" then + return i2.."[img=virtual-signal/se-planet-orbit] " .. zone.name -- planet orbit + elseif zone.parent.type == "moon" then + return i3.."[img=virtual-signal/se-moon-orbit] " .. zone.name -- moon orbit + end + elseif zone.type == "asteroid-belt" then + return i1 .. "[img=virtual-signal/se-asteroid-belt] " .. zone.name + elseif zone.type == "planet" then + return i1 .. "[img=virtual-signal/se-planet] " .. zone.name + elseif zone.type == "moon" then + return i2 .. "[img=virtual-signal/se-moon] " .. zone.name + elseif zone.type == "asteroid-field" then + return "[img=virtual-signal/"..mod_prefix..zone.type .. "] " .. zone.name .. " [color=black](Asteroid Field)[/color]" + elseif zone.type == "anomaly" then + return "[img=virtual-signal/"..mod_prefix..zone.type .. "] " .. zone.name .. " [color=black](Anomaly)[/color]" + elseif zone.type == "spaceship" then + return "[img=virtual-signal/"..mod_prefix..zone.type .. "] " .. zone.name .. " [color=black](Spaceship)[/color]" + end + return "[img=virtual-signal/"..mod_prefix..zone.type .. "] " .. zone.name +end + +function Zone.get_alphabetised() + local zones_alphabetised = {} + for _, zone in pairs(global.zone_index) do + table.insert(zones_alphabetised, zone) + end + for _, spaceship in pairs(global.spaceships) do + table.insert(zones_alphabetised, spaceship) + end + table.sort(zones_alphabetised, function(a,b) return a.name < b.name end) + return zones_alphabetised +end + +function Zone.is_visible_to_force(zone, force_name) + if global.debug_view_all_zones then return true end + if zone.type == "spaceship" then return zone.force_name == force_name end + if not (global.forces[force_name] and global.forces[force_name].zones_discovered) then return false end + return global.forces[force_name].zones_discovered[zone.index] or (zone.type == "orbit" and global.forces[force_name].zones_discovered[zone.parent.index]) and true or false +end +function Zone.insert_if_visible_to_force(target_table, zone, force_name) + if Zone.is_visible_to_force(zone, force_name) then table.insert(target_table, zone) end +end + +function Zone.dropdown_list_zone_destinations(force_name, current, alphabetical, filter, wildcard, star_restriction) + -- wildcard = {list = "display", value={type = "any"}} + local selected_index = 1 + local list = {""} + local values = {{type = "nil", index = nil}} -- zone indexes + local forcedata = global.forces[force_name] + if not forcedata then return list, selected_index, values end + + if wildcard then + table.insert(list, wildcard.list) + table.insert(values, wildcard.value) + end + + function conditional_add_zone_to_list(forcedata, current, zone) + if global.debug_view_all_zones + or (zone.type == "spaceship" and forcedata.force_name == zone.force_name) + or (zone.type ~= "spaceship" and (forcedata.zones_discovered[zone.index] or (zone.type == "orbit" and forcedata.zones_discovered[zone.parent.index]))) then + local allowed_system = true + if star_restriction then + allowed_system = false + if zone == star_restriction + or Zone.get_star_from_child(zone) == star_restriction then + allowed_system = true + end + end + if allowed_system then + if zone.type == "star" then + table.insert(list, Zone.dropdown_name_from_zone(zone.orbit, alphabetical or filter)) + table.insert(values, {type = "zone", index = zone.orbit.index}) + if current and zone.orbit.index == current.index then selected_index = #list end + elseif zone.type == "spaceship" then + table.insert(list, Zone.dropdown_name_from_zone(zone, alphabetical or filter)) + table.insert(values, {type = "spaceship", index = zone.index}) + if current and zone.type == current.type and zone.index == current.index then selected_index = #list end + else + table.insert(list, Zone.dropdown_name_from_zone(zone, alphabetical or filter)) + table.insert(values, {type = "zone", index = zone.index}) + if current and zone.type == current.type and zone.index == current.index then selected_index = #list end + end + end + end + end + + if alphabetical == true or filter then + for _, zone in pairs(Zone.get_alphabetised()) do + if not(zone.type == "orbit" and zone.parent.type == "star") then + if (not filter) or string.find(string.lower(zone.name), string.lower(filter), 1, true) then + conditional_add_zone_to_list(forcedata, current, zone) + end + end + end + else + conditional_add_zone_to_list(forcedata, current, global.universe.anomaly) + + for _, star in pairs(global.universe.stars) do + conditional_add_zone_to_list(forcedata, current, star) + for _, planet in pairs(star.children) do + conditional_add_zone_to_list(forcedata, current, planet) + if planet.children then + conditional_add_zone_to_list(forcedata, current, planet.orbit) + for _, moon in pairs(planet.children) do + conditional_add_zone_to_list(forcedata, current, moon) + conditional_add_zone_to_list(forcedata, current, moon.orbit) + end + end + end + end + + for _, zone in pairs(global.universe.space_zones) do + conditional_add_zone_to_list(forcedata, current, zone) + end + + for _, spaceship in pairs(global.spaceships) do + conditional_add_zone_to_list(forcedata, current, spaceship) + end + end + + if star_restriction then + if filter then + list[1] = (#list - 1) .. " matching locations in system" + else + list[1] = (#list - 1) .. " known locations in system" + end + else + if filter then + list[1] = (#list - 1) .. " matching locations" + else + list[1] = (#list - 1) .. " known locations" + end + end + + return list, selected_index, values +end + +function Zone.build_tile_replacements(zone) + -- replaces biome_collections in replace specifications with the full biome names + --[[ + convert : + biome_replacement = { + {replace={"all-dirt", "all-sand", "all-volcanic"}, with="sand-red"}, + {replace={"all-vegetation", "all-frozen"}, with="vegetation-red"} + } + to + { + ["tile-from-1"] = "tile-to-1", + ["tile-from-2"] = "tile-to-1", + } + ]]-- + if zone.biome_replacements then + + -- expand replacement collections + local biome_replacements_expanded = {} + for _, replacement in pairs(zone.biome_replacements) do + local replace_biomes = {} + for _, replace in pairs(replacement.replace) do + if Zone.biome_collections[replace] then -- this is a collection name + for _, biome_name in pairs(Zone.biome_collections[replace]) do + if biome_name ~= replacement.with then -- don't replace to iteself + table.insert(replace_biomes, biome_name) + end + end + elseif replace ~= replacement.with then -- this is a biome name + table.insert(replace_biomes, replace) + end + end + table.insert(biome_replacements_expanded, {replace = replace_biomes, with = replacement.with}) + end + -- biome_replacements_expanded now has all of the replace names being all biome names + -- build tile map + local tile_replacements = {} + for _, replacement in pairs(biome_replacements_expanded) do + local to_tiles = Zone.biome_tiles[replacement.with] + local i = 0 + for _, replace in pairs(replacement.replace) do + for _, replace_tile in pairs(Zone.biome_tiles[replace]) do + tile_replacements[replace_tile] = to_tiles[(i % #to_tiles) + 1] + i = i + 1 + end + end + end + + zone.tile_replacements = tile_replacements + end + +end + +function Zone.on_chunk_generated(event) + local area = event.area + local surface = event.surface + local zone = Zone.from_surface(surface) + if zone and Zone.is_solid(zone) then + if zone.biome_replacements then + if not zone.tile_replacements then + Zone.build_tile_replacements(zone) + end + local set_tiles = {} -- by tile name, array of positions, for the surface.set_tiles function + for x = area.left_top.x, area.right_bottom.x do + for y = area.left_top.y, area.right_bottom.y do + local tile = surface.get_tile(x, y) + if zone.tile_replacements[tile.name] then + table.insert(set_tiles, { + name = zone.tile_replacements[tile.name], + position = tile.position + }) + end + end + end + if #set_tiles > 0 then + surface.set_tiles(set_tiles, true) + surface.destroy_decoratives{area = area} + surface.regenerate_decorative(nil, {{x = math.floor((area.left_top.x+16)/32), y = math.floor((area.left_top.y+16)/32)}}) + end + end + end +end +Event.addListener(defines.events.on_chunk_generated, Zone.on_chunk_generated) + +function Zone.export_zone(zone) + if not zone then return end + -- not safe to deepcopy + -- make all object table references id references instead. + local export_zone = Util.shallow_copy(zone) + if export_zone.orbit then + export_zone.orbit_index = export_zone.orbit.index + export_zone.orbit = nil + end + if export_zone.parent then + export_zone.parent_index = export_zone.parent.index + export_zone.parent = nil + end + if export_zone.children then + export_zone.child_indexes = {} + for i, child in pairs(export_zone.children) do + export_zone.child_indexes[i] = child.index + end + export_zone.children = nil + end + -- should be safe to deepcopy now + export_zone = Util.deep_copy(export_zone) + return export_zone +end + +function Zone.get_threat(zone) + if Zone.is_solid(zone) then + if zone.is_homeworld and zone.surface_index then + local surface = Zone.get_surface(zone) + local mapgen = surface.map_gen_settings + if mapgen.autoplace_controls["enemy-base"] and mapgen.autoplace_controls["enemy-base"].size then + return math.max(0, math.min(1, mapgen.autoplace_controls["enemy-base"].size / 3)) -- 0-1 + end + end + if zone.controls and zone.controls["enemy-base"] and zone.controls["enemy-base"].size then + return math.max(0, math.min(1, zone.controls["enemy-base"].size / 3)) -- 0-1 + end + end + return 0 +end + +function Zone.get_priority(zone, force_name) + if global.forces[force_name] then + if zone.type ~= "spaceship" and global.forces[force_name].zone_priorities and global.forces[force_name].zone_priorities[zone.index] then + return global.forces[force_name].zone_priorities[zone.index] + end + if zone.type == "spaceship" and global.forces[force_name].spaceship_priorities and global.forces[force_name].spaceship_priorities[zone.index] then + return global.forces[force_name].spaceship_priorities[zone.index] + end + end + return 0 +end + +function Zone.get_attrition(zone, default_rate) + if default_rate == nil then default_rate = settings.global["robot-attrition-factor"].value end + if zone then + if zone.type == "spaceship" then + return 0 -- no attrition + elseif zone.type == "anomaly" then -- anomalies are dangerous, give them an absolute increase + return 10 + default_rate * 2 + elseif Zone.is_solid(zone) then -- planet or moon + if zone.name == "Nauvis" or zone.is_homeworld then + return default_rate + end + local enemy = 0 + if zone.controls and zone.controls["enemy-base"] and zone.controls["enemy-base"].size then + enemy = Zone.get_threat(zone) -- 0-1 + end + local rate = 0.5 * (1 - enemy * 0.9) + rate = rate + 0.5 * zone.radius / 10000 + if enemy == 0 then -- add a penalty to enemy free zones + rate = rate + 10 + end + return rate * (0.5 + 0.5 * default_rate) + else -- space + local star_gravity_well = Zone.get_star_gravity_well(zone) + local planet_gravity_well = Zone.get_planet_gravity_well(zone) + local base_rate = star_gravity_well / 20 + planet_gravity_well / 200 + local rate = 10 * (0.01 + 0.99 * base_rate) -- 0-1 + return rate * (0.5 + 0.5 * default_rate) + end + end +end + +function Zone.rebuild_surface_index() + global.zones_by_surface = {} + for _, zone in pairs(global.zone_index) do + if zone.surface_index then + if game.surfaces[zone.surface_index] then + global.zones_by_surface[zone.surface_index] = zone + else + zone.surface_index = nil + end + end + end +end + +function Zone.trim_surface(zone, player_index) + local surface = Zone.get_surface(zone) + if not surface then return end + + local protected_forces = { + friendle = "friendly", + capture = "capture", + conquest = "conquest" + } + + for force_name, forcedata in pairs(global.forces) do + if game.forces[force_name] and not is_system_force(force_name) then + protected_forces[force_name] = force_name + end + end + + local protected_entities = table.deepcopy(Ancient.vault_entrance_structures) + table.insert(protected_entities, Ancient.name_gate_blocker) + table.insert(protected_entities, Ancient.name_gate_blocker_void) + for name, stuff in pairs(Ancient.gate_fragments) do + table.insert(protected_entities, name) + end + + local min_x = 1000000 + local max_x = -1000000 + local min_y = 1000000 + local max_y = -1000000 + + local entities = surface.find_entities_filtered{name = protected_entities} + if #entities > 0 then + for _, entity in pairs(entities) do + --local p = entity.position + local b = entity.bounding_box + min_x = min_x and math.min(min_x, b.left_top.x) or b.left_top.x + min_y = min_y and math.min(min_y, b.left_top.y) or b.left_top.y + max_x = max_x and math.max(max_x, b.right_bottom.x) or b.right_bottom.x + max_y = max_y and math.max(max_y, b.right_bottom.y) or b.right_bottom.y + end + end + + + for chunk in surface.get_chunks() do + if surface.count_entities_filtered{force = protected_forces, area = chunk.area} > 0 then + min_x = min_x and math.min(min_x, chunk.area.left_top.x) or chunk.area.left_top.x + min_y = min_y and math.min(min_y, chunk.area.left_top.y) or chunk.area.left_top.y + max_x = max_x and math.max(max_x, chunk.area.right_bottom.x) or chunk.area.right_bottom.x + max_y = max_y and math.max(max_y, chunk.area.right_bottom.y) or chunk.area.right_bottom.y + end + end + + local chunk_min_x = math.floor(min_x/32) -1 + local chunk_max_x = math.floor(max_x/32) +1 + local chunk_min_y = math.ceil(min_y/32) -1 + local chunk_max_y = math.ceil(max_y/32) +1 + + local chunks_deleted = 0 + for chunk in surface.get_chunks() do + if chunk.x < chunk_min_x + or chunk.x > chunk_max_x + or chunk.y < chunk_min_y + or chunk.y > chunk_max_y then + chunks_deleted = chunks_deleted + 1 + surface.delete_chunk(chunk) + end + end + rendering.draw_rectangle{ + color = {0,0,1}, + widht = 1, + filled = false, + left_top = {min_x, min_y}, + right_bottom = {max_x, max_y}, + surface = surface, + time_to_live = 60 + } + rendering.draw_rectangle{ + color = {1,0,0}, + widht = 1, + filled = false, + left_top = {chunk_min_x*32, chunk_min_y*32}, + right_bottom = {chunk_max_x*32, chunk_max_y*32}, + surface = surface, + time_to_live = 60 + } + game.print({"space-exploration.trim-zone-results", chunks_deleted, zone.name, chunk_min_x, chunk_max_x, chunk_min_y, chunk_max_y}) + --game.print("Deleted "..chunks_deleted.." from "..zone.name ..". Trimmed X ["..chunk_min_x.." to "..chunk_max_x.."] Y ["..chunk_min_y.." to "..chunk_max_y.."]") + +end + +function Zone.delete_surface(zone, player_index) + local player + if player_index then + player = game.players[player_index] + end + if zone.surface_index == 1 then + if player then player.print("Game cannot delete surface 1.") end + return + end + if zone.is_homeworld then + if player then player.print("Cannot delete homeworlds.") end + return + end + if zone.type == "anomaly" then + if player then player.print("Cannot delete anomalies.") end + return + end + if zone.type == "spaceship" then + if player then player.print("Cannot delete spaceships. They must be landed and dismantled.") end + return + end + if not zone.surface_index then + if player then player.print("Zone has no surface.") end + return + end + local surface = Zone.get_surface(zone) + if not surface then + --error(Zone.name.." has a surface but it was missing.") + zone.surface_index = nil + Zone.rebuild_surface_index() + return + end + local force_names = {} + for force_name, force in pairs(global.forces) do + if force.has_players and game.forces[force_name] then + table.insert(force_names, force_name) + end + end + local count_entities = surface.count_entities_filtered{force=force_names, type={"character", "electric-pole", "container", "logistic-container"}} + if count_entities > 0 then + if player then player.print("Cannot delete a zone with player entities.") end + else + log("Deleting surface for zone: " .. zone.name) + -- find all players viewing that surface + for _, player in pairs(game.connected_players) do + if player.surface == surface then + local force = player.force + local home_zone + if global.forces[force.name] and global.forces[force.name].homeworld_index then + home_zone = Zone.from_zone_index(global.forces[force.name].homeworld_index) + end + if not home_zone then home_zone = Zone.from_name("Nauvis") end + player.teleport({0,0}, Zone.get_make_surface(home_zone)) + end + end + game.delete_surface(surface) + zone.surface_index = nil + zone.deleted_surface = {tick = game.tick, player_index = player_index} + Zone.rebuild_surface_index() + end +end + + +function Zone.on_surface_created(surface_index) + local zone = Zone.from_surface_index(surface_index) + if not zone then + game.surfaces[surface_index].solar_power_multiplier = Zone.solar_multiplier * 0.5 + end +end +Event.addListener(defines.events.on_surface_created, on_surface_created) + +function Zone.on_research_finished(event) + + local force = event.research.force + + if event.research.name == Zone.name_tech_discover_random then + local dicovered_something = Zone.discover_next_research(force.name, "Telescope data analysis", false) + if not dicovered_something then + force.print({"space-exploration.tech-discovered-nothing"}) + end + elseif event.research.name == Zone.name_tech_discover_targeted then + local dicovered_something = Zone.discover_next_research(force.name, "Telescope data analysis", true) + if not dicovered_something then + force.print({"space-exploration.tech-discovered-nothing"}) + end + elseif event.research.name == Zone.name_tech_discover_deep then + local dicovered_something = Zone.discover_next_research_deep_space(force.name, "Telescope data analysis", false) + if not dicovered_something then + force.print({"space-exploration.tech-deep-discovered-nothing"}) + end + end +end +Event.addListener(defines.events.on_research_finished, Zone.on_research_finished) + + +function Zone.zone_fix_all_tiles(zone) -- or spaceship + --/c p = game.player po = p.position for x = -5,5 do for y = -5,5 do p.surface.set_tiles{{name = "dirt-1", position = {x+po.x, y=y+po.y}}} end end + local surface = Zone.get_surface(zone) + if surface then + if Zone.is_space(zone) then + if zone.type ~= "spaceship" or zone.own_surface_index then + -- remove all tiles not allowd in space + local tiles = surface.find_tiles_filtered{ + collision_mask = {"ground-tile", "water-tile"}, + } + local set_tiles = {} + for _, tile in pairs(tiles) do + if not Util.table_contains(tiles_allowed_in_space, tile.name) then + -- remove the tile + table.insert(set_tiles, {name = name_space_tile, position = tile.position}) + surface.set_hidden_tile(tile.position, nil) + end + end + + if #set_tiles > 0 then + surface.set_tiles( + set_tiles, + true, -- corect tiles + true, -- remove_colliding_entities + true, -- remove_colliding_decoratives + true -- raise_event + ) + end + + log("Zone.zone_fix_all_tiles: " .. zone.type.." " .. zone.name.." is_space "..#set_tiles.." tiles changed surface_index "..surface.index.." surface_name " .. surface.name) + else + log("Zone.zone_fix_all_tiles: " .. zone.type.." " .. zone.name.." anchored surface_index "..surface.index.." surface_name " .. surface.name) + end + else + -- remove space tiles + local tiles = surface.find_tiles_filtered{ + collision_mask = global.named_collision_masks.space_collision_layer + } + local set_tiles = {} + for _, tile in pairs(tiles) do + if not Util.table_contains(Spaceship.names_spaceship_floors, tile.name) then -- spacehip floor is allowed + -- remove the tile + table.insert(set_tiles, {name = "nuclear-ground", position = tile.position}) + surface.set_hidden_tile(tile.position, nil) + end + end + + if #set_tiles > 0 then + surface.set_tiles( + set_tiles, + true, -- corect tiles + true, -- remove_colliding_entities + true, -- remove_colliding_decoratives + true -- raise_event + ) + end + + log("Zone.zone_fix_all_tiles: " .. zone.type.." " ..zone.name.." is_land "..#set_tiles.." tiles changed surface_index "..surface.index.." surface_name " .. surface.name) + + end + end +end + +function Zone.zones_fix_all_tiles() + for _, zone in pairs(global.zone_index) do + Zone.zone_fix_all_tiles(zone) + end + if global.spaceships then + for _, spaceship in pairs(global.spaceships) do + Zone.zone_fix_all_tiles(spaceship) + end + end +end + + +function Zone.set_zone_as_homeworld(data) + local zone = Zone.from_name(data.zone_name) + local nauvis = Zone.from_name("Nauvis") + if not zone then + game.print("No zone found") + else + if zone.type ~= "planet" then + game.print("Zone type must be planet, selected zone is: " .. zone.type) + return + else + zone.is_homeworld = true + zone.inflated = true + zone.resources = {} + zone.ticks_per_day = 25000 + zone.fragment_name = "se-core-fragment-omni" + zone.radius = nauvis.radius + + local nauvis_map_gen = table.deepcopy(game.surfaces[1].map_gen_settings) + + if not zone.original_seed then + zone.original_seed = zone.seed + end + if data.match_nauvis_seed then + zone.seed = nauvis_map_gen.seed + else + nauvis_map_gen.seed = zone.seed + end + + local surface = Zone.get_surface(zone) + if surface and reset_surface ~= false then + surface.map_gen_settings = nauvis_map_gen + surface.clear() + else + surface = Zone.get_make_surface(zone) + surface.map_gen_settings = nauvis_map_gen + end + + Universe.make_validate_homesystem(zone) + global.resources_and_controls_compare_string = nil -- force udpate resources + Universe.load_resource_data() + + surface.request_to_generate_chunks({0,0}, 4) + surface.force_generate_chunk_requests() + + if settings.startup[mod_prefix.."spawn-small-resources"].value then + Zone.spawn_small_resources(surface) + end + + end + end + + return Zone.export_zone(Zone.from_name(data.zone_name)) +end + +function Zone.spawn_small_resources(surface) + + local seed = surface.map_gen_settings.seed + local rng = game.create_random_generator(seed) + -- The starting resourecs of the map generation are inconsistent and spread out. + -- Add some tiny patches to reduce the amount of running around at the start. + -- We only care about super-early game, so just iron, copper, stone, and coal. + -- If there are other resources added to the game then the naturally spawned resources will have to do for now. + -- These resources are not designed to replace the normal starting resources at all. + local valid_position_search_range = 256 + local cluster_primary_radius = 50 -- get away from crash site + local cluster_secondary_radius = 25 + local resources = {} + if game.entity_prototypes["iron-ore"] then table.insert(resources, { name = "iron-ore", tiles = 200, amount = 100000}) end + if game.entity_prototypes["copper-ore"] then table.insert(resources, { name = "copper-ore", tiles = 150, amount = 80000}) end + if game.entity_prototypes["stone"] then table.insert(resources, { name = "stone", tiles = 150, amount = 80000}) end + if game.entity_prototypes["coal"] then table.insert(resources, { name = "coal", tiles = 150, amount = 80000}) end + + local cluster_orientation = rng() + local secondary_orientation = rng() + local cluster_position = Util.orientation_to_vector(cluster_orientation, cluster_primary_radius) + surface.request_to_generate_chunks(cluster_position, 4) + surface.force_generate_chunk_requests() + + Log.trace("[gps="..math.floor(cluster_position.x)..","..math.floor(cluster_position.y).."]") + local closed_tiles = {} -- 2d disctionary + local open_tiles = {} -- 1d array + local function close_tile(position) + closed_tiles[position.x] = closed_tiles[position.x] or {} + closed_tiles[position.x][position.y] = true + end + local function open_tile(set, position) -- don't open if closed + if not (closed_tiles[position.x] and closed_tiles[position.x][position.y]) then + table.insert(set, position) + close_tile(position) + end + end + local function open_neighbour_tiles(set, position) + open_tile(set, Util.vectors_add(position, {x=0,y=-1})) + open_tile(set, Util.vectors_add(position, {x=1,y=0})) + open_tile(set, Util.vectors_add(position, {x=0,y=1})) + open_tile(set, Util.vectors_add(position, {x=-1,y=0})) + end + for i, resource in pairs(resources) do + resource.orientation = secondary_orientation + rng() + local offset = Util.orientation_to_vector(resource.orientation, rng(cluster_secondary_radius/2, cluster_secondary_radius)) + local position = Util.tile_to_position(Util.vectors_add(offset, cluster_position)) + local valid = surface.find_non_colliding_position(resource.name, position, valid_position_search_range, 1, true) + if not valid then Log.trace("no valid position found") end + resource.start_point = surface.find_non_colliding_position(resource.name, position, valid_position_search_range, 1, true) or position + resource.open_tiles = {resource.start_point} + resource.entities = {} + resource.amount_placed = 0 + end + local continue = true + local repeats = 0 + while continue and repeats < 1000 do + repeats = repeats + 1 + continue = false + for _, resource in pairs(resources) do + --if #resource.entities < resource.tiles then + if resource.amount_placed < resource.amount then + continue = true + local try_tile + if #resource.open_tiles > 0 then + local choose = rng(#resource.open_tiles) + try_tile = resource.open_tiles[choose] + close_tile(try_tile) + end + if not try_tile then -- handle tiny island case + try_tile = resource.start_point + end + local position = surface.find_non_colliding_position(resource.name, try_tile, valid_position_search_range, 1, true) + if not position then -- exit + resource.amount_placed = resource.amount + log("Space Exploration failed to place starting resource, no valid positions in range. [".. resource.name.."]") + else + close_tile(try_tile) + close_tile(position) + local remaining = resource.amount - resource.amount_placed + local amount = math.ceil(math.min( remaining * (0.01 + rng() * 0.005) + 100 + rng() * 100, remaining)) + resource.amount_placed = resource.amount_placed + amount + table.insert(resource.entities, surface.create_entity{name = resource.name, position=position, amount=amount, enable_tree_removal=true, snap_to_tile_center =true}) + --Log.trace("Starting resource entity created "..resource.name.." ".. position.x.." "..position.y) + open_neighbour_tiles(resource.open_tiles, position) + end + end + end + end + +end + +return Zone diff --git a/space-exploration_0.5.80/space-exploration/scripts/zonelist.lua b/space-exploration_0.5.80/space-exploration/scripts/zonelist.lua new file mode 100644 index 0000000..2186eb5 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/scripts/zonelist.lua @@ -0,0 +1,1331 @@ +local Zonelist = {} +--[[ +Zonelist is an informatron style popup in the middle of the screen. +It lists zones and has a starmap link. +If you choose to view a zone it puts you into remote view mode. +]]-- + +Zonelist.name_gui_root = mod_prefix.."zonelist_main" +Zonelist.name_shortcut = mod_prefix.."universe-explorer" +Zonelist.name_event = mod_prefix.."universe-explorer" + +Zonelist.name_button_close = "zonelist_button_close" +Zonelist.name_button_starmap = "zonelist_button_starmap" +Zonelist.name_button_view_zone = "zonelist_button_view_zone" +Zonelist.name_button_overhead_explorer = mod_prefix .. "overhead_explorer" +Zonelist.name_setting_overhead_explorer = mod_prefix .. "show-overhead-button-universe-explorer" + +Zonelist.name_zonelist_headings_row = "zonelist_headings_row" +Zonelist.name_zonelist_scroll = "zonelist_scroll" +Zonelist.name_zonelist_search = "zonelist_search" +Zonelist.name_zonelist_search_clear = "zonelist_search_clear" +Zonelist.name_zonelist_filters = "zonelist_filters" +Zonelist.name_zone_content_title = "zone_content_title" +Zonelist.name_zone_content_priority_flow = "zone_content_priority_flow" +Zonelist.name_zone_content_frame = "zone_content_frame" +Zonelist.name_zone_content_pane = "zone_content_pane" +Zonelist.name_zone_content_preview_frame = "zone_content_preview_frame" +Zonelist.name_zone_priority_field = "zone_priority_field" +Zonelist.name_zone_priority_plus_button = "zone_priority_plus_button" +Zonelist.name_zone_priority_minus_button = "zone_priority_minus_button" +Zonelist.name_zone_trim_surface_button = "zone_trim_surface_button" +Zonelist.name_zone_delete_surface_button = "zone_delete_surface_button" +Zonelist.name_zone_scan_surface_button = "zone_scan_surface_button" + +Zonelist.name_color_priority_positive = {r=50/255, g=250/255, b=50/255} +Zonelist.name_color_priority_neutral = {r=255/255, g=174/255, b=0/255} +Zonelist.name_color_priority_negative = {r=250/255, g=20/255, b=20/255} + +Zonelist.min_bar_brightness = 200 + +Zonelist.priority_max = 999 + +function Zonelist.get_selected_zone_or_current(player_index) + local player = game.players[player_index] + local playerdata = get_make_playerdata(player) + local zone = playerdata.zonelist_selected_zone + if not zone then + zone = Zone.from_surface(player.surface) + end + return zone +end + +function Zonelist.get_main_window(player_index) + local player = game.players[player_index] + if player and player.connected then + return player.gui.screen[Zonelist.name_gui_root] + end +end + +function Zonelist.gui_close(player_index) + local window = Zonelist.get_main_window(player_index) + if window then window.destroy() end +end + +function Zonelist.gui_open(player_index) + local player = game.players[player_index] + if not player and player.connected then return end + + local gui = player.gui.screen + close_own_guis(player) + Zonelist.gui_close(player_index) + --gui.clear() + local playerdata = get_make_playerdata(player) + playerdata.zonelist_filter_excludes = playerdata.zonelist_filter_excludes or {} + local forcedata = global.forces[player.force.name] + + local root = gui.add{ type = "frame", name = Zonelist.name_gui_root, direction="vertical"} + root.style.bottom_padding = 10 + root.auto_center = true + + player.opened = root + + if not (root and root.valid) then return end -- setting player.opened can cause other scripts to delete UIs + local main_table = root.add{type="table", name="main_table", column_count=2, draw_horizontal_lines=false} + main_table.style.horizontally_stretchable = true + main_table.style.column_alignments[1] = "left" -- title, search, zone list table + main_table.style.column_alignments[2] = "right" -- starmap, close, selected zone info + + local main_left_flow = main_table.add{type = "flow", name="main_left_flow", direction = "vertical"} + local main_right_flow = main_table.add{type = "flow", name="main_right_flow", direction = "vertical"} + main_left_flow.style.right_margin = 10 + + local title_table = main_left_flow.add{type="table", name="title_table", column_count=2, draw_horizontal_lines=false} + title_table.drag_target = root + title_table.style.horizontally_stretchable = true + title_table.style.column_alignments[1] = "left" -- name + title_table.style.column_alignments[2] = "right" -- search + + -- LEFT TOP + local title_frame = title_table.add{type="frame", name="title_frame", caption={"space-exploration.zonelist-window-title"}, style="informatron_title_frame", ignored_by_interaction = true} + + + -- LEFT TOP (right aligned) + local filter_search_container = title_table.add{type="flow", name="filter_search_flow", direction="horizontal"} + + local filters_container = filter_search_container.add{type="flow", name=Zonelist.name_zonelist_filters, direction="horizontal"} + for _, zone_type in pairs({"star", "planet", "planet-orbit", "moon", "moon-orbit", "asteroid-belt", "asteroid-field", "anomaly", "spaceship"}) do + if zone_type ~= "anomaly" or Zone.is_visible_to_force(Zone.from_name("Foenestra"), player.force.name) then + local style = "se_zone_list_filter_down" + if playerdata.zonelist_filter_excludes[zone_type] then + style = "se_zone_list_filter" + end + local button = filters_container.add{type = "sprite-button", name=zone_type, sprite="virtual-signal/se-"..zone_type, tooltip={"space-exploration.zonelist_filter_"..zone_type}, style=style} + end + end + + local zonelist_search = filter_search_container.add{ type="textfield", name=Zonelist.name_zonelist_search} + zonelist_search.style.width = 275 + zonelist_search.style.top_margin = -4 + zonelist_search.style.left_margin = 10 + local search_button = filter_search_container.add{ type = "sprite-button", name=Zonelist.name_zonelist_search_clear, sprite="utility/search_icon", tooltip={"space-exploration.clear-search"}, style="informatron_close_button"} + search_button.style.left_margin = 5 + search_button.style.height = 28 + search_button.style.width = 28 + search_button.style.top_margin = -2 + + -- LEFT BOTTOM + local zonelist_frame = main_left_flow.add{type="frame", name="zonelist_frame", style="informatron_inside_deep_frame", direction="vertical"} + zonelist_frame.style.horizontally_stretchable = true + zonelist_frame.style.minimal_height = 300 + local zonelist_headings_row = zonelist_frame.add{type="flow", name=Zonelist.name_zonelist_headings_row, direction="horizontal"} + local zonelist_scroll = zonelist_frame.add{type="scroll-pane", name=Zonelist.name_zonelist_scroll, direction="vertical", style="zonelist_rows_pane"} + + -- TODO: Only shof if zones list is small + if ((not forcedata.satellites_launched) or forcedata.satellites_launched < 18) and (not global.debug_view_all_zones) then + local instruction = main_left_flow.add{type = "label", name="instruction", caption={"space-exploration.remote-view-instruction"}} + instruction.style.single_line = false + instruction.style.horizontally_stretchable = true + end + + + --RIGHT TOP + local title_table = main_right_flow.add{type="table", name="title_table", column_count=2, draw_horizontal_lines=false} + title_table.drag_target = root + title_table.style.horizontally_stretchable = true + title_table.style.column_alignments[1] = "left" -- blank + title_table.style.column_alignments[2] = "right" -- starmap, close + + local title_frame = title_table.add{type="frame", name="title_frame", caption=" ", style="informatron_title_frame", direction="horizontal", ignored_by_interaction = true} + title_frame.style.left_margin = -18 + + local right_flow = title_table.add{type="flow", name="title_flow_right", direction="horizontal"} + local starmap = right_flow.add{type="button", name=Zonelist.name_button_starmap, + caption={"space-exploration.simple-a-b-space", "[img=se-map-gui-starmap]", { "space-exploration.interstellar-map" } }, + style="informatron_close_button", tooltip={"space-exploration.interstellar-map"}} + starmap.style.right_margin = 6 + starmap.style.maximal_width = 200 + starmap.style.maximal_height = 32 + starmap.style.padding = 0 + starmap.style.left_padding = 5 + starmap.style.right_padding = 5 + + local close = right_flow.add{type="sprite-button", name=Zonelist.name_button_close, sprite = "utility/close_white", style="informatron_close_button"} + close.style.width = 28 + close.style.height = 28 + + --RIGHT Upper MIDDLE + local zone_content_frame = main_right_flow.add{type="flow", name="zone_content_frame", direction="vertical"} + local zone_content_title_frame = zone_content_frame.add{type="frame", name="zone_content_title_frame", style="informatron_content_title"} + zone_content_title_frame.style.horizontally_stretchable = true + zone_content_title_frame.style.margin = 0 + zone_content_title_frame.style.top_padding = 0 + zone_content_title_frame.style.bottom_padding = 0 + zone_content_title_frame.style.right_padding = 0 + zone_content_title_frame.style.left_margin = -1 + local zone_content_title_table = zone_content_title_frame.add{type="table", name="title_table", column_count=2, draw_horizontal_lines=false, draw_vertical_lines=false} + zone_content_title_table.style.horizontally_stretchable = true + zone_content_title_table.style.column_alignments[1] = "left" -- name + zone_content_title_table.style.column_alignments[2] = "right" -- priority + local zone_content_title = zone_content_title_table.add{type="label", name=Zonelist.name_zone_content_title, caption=" ", style="heading_2_label"} + zone_content_title.style.horizontally_stretchable = true + zone_content_title.style.margin = 0 + zone_content_title.style.padding = 0 + --zone_content_title.style.width = 200 + local zone_content_priority_flow = zone_content_title_table.add{type="flow", name=Zonelist.name_zone_content_priority_flow, direction="horizontal"} -- icon, -, number, + + zone_content_priority_flow.style.horizontal_align = "right" + zone_content_priority_flow.style.vertical_align = "center" + zone_content_priority_flow.style.right_padding = 0 + --zone_content_priority_flow.style.width = 200 + + Zonelist.gui_create_zone_content(player, zone_content_frame) + + Zonelist.gui_update(player_index) +end + +function Zonelist.gui_create_zone_content(player, parent) + + local zone_content_frame = parent.add{type="frame", name=Zonelist.name_zone_content_frame, style="informatron_inside_deep_frame"} + local zone_content_pane = zone_content_frame.add{type="scroll-pane", name=Zonelist.name_zone_content_pane, style="zonelist_content_pane"} + zone_content_pane.vertical_scroll_policy = "always" + zone_content_pane.style.extra_top_padding_when_activated = 0 + zone_content_pane.style.extra_bottom_padding_when_activated = 0 + zone_content_pane.style.extra_left_padding_when_activated = 0 + zone_content_pane.style.extra_right_padding_when_activated = 0 + zone_content_pane.style.extra_top_margin_when_activated = 0 + zone_content_pane.style.extra_bottom_margin_when_activated = 0 + zone_content_pane.style.extra_left_margin_when_activated = 0 + zone_content_pane.style.extra_right_margin_when_activated = 0 + zone_content_pane.style.minimal_height = 300 + zone_content_pane.style.maximal_height = 600 + zone_content_pane.style.width = 300 + zone_content_pane.style.padding = 12 + if not settings.get_player_settings(player)["se-show-zone-preview"].value then + zone_content_pane.style.minimal_height = 600 + zone_content_pane.style.maximal_height = 900 + end + + --RIGHT BOTTOM + if settings.get_player_settings(player)["se-show-zone-preview"].value then + local zone_content_preview_frame = parent.add{type="frame", name=Zonelist.name_zone_content_preview_frame, style="informatron_inside_deep_frame"} + zone_content_preview_frame.style.width = 300 + zone_content_preview_frame.style.height = 300 + zone_content_preview_frame.style.top_margin = 10 + end + + --RIGHT BOTTOM + local zone_view_button = parent.add{type="button", name=Zonelist.name_button_view_zone, style="confirm_button", caption={"space-exploration.zonelist-view-surface"}, tooltip={"space-exploration.zonelist-view-surface"}} + zone_view_button.style.top_margin = 10 + zone_view_button.style.horizontally_stretchable = true + if not RemoteView.is_unlocked(player) then + zone_view_button.enabled = false + zone_view_button.tooltip = {"space-exploration.remote-view-requires-satellite"} + end +end + +function Zonelist.gui_update(player_index) -- only call when something changed + Zonelist.gui_update_list(player_index) + Zonelist.gui_update_selected(player_index) +end + +function Zonelist.gui_update_selected(player_index) -- only call when something changed + local player = game.players[player_index] + if not player and player.connected then return end + local window = Zonelist.get_main_window(player_index) + if not window then return end + local force_name = player.force.name + local forcedata = global.forces[force_name] + local playerdata = get_make_playerdata(player) + + local selected_zone = playerdata.zonelist_selected_zone + if not selected_zone then + selected_zone = Zone.from_surface(player.surface) + end + if not selected_zone then + if forcedata and forcedata.homeworld_index then + selected_zone = Zone.from_zone_index(forcedata.homeworld_index) + end + end + if not selected_zone then + selected_zone = Zone.get_default() + end + + local zonelist_scroll = util.find_first_descendant_by_name(window, Zonelist.name_zonelist_scroll) + for _, row in pairs(zonelist_scroll.children) do + row.style = "zonelist_row_button" + if row.row_flow then + for _, child in pairs(row.row_flow.children) do + if child.name ~= "cell_priority" then + child.style.font_color = {r=1,g=1,b=1} + end + end + end + end + + local zone_content_title = util.find_first_descendant_by_name(window, Zonelist.name_zone_content_title) + local zone_content_priority_flow = util.find_first_descendant_by_name(window, Zonelist.name_zone_content_priority_flow) + + if selected_zone then + local zone = selected_zone + local row = Zonelist.find_row_for_zone(player_index, zone) + if row then + row.style = "zonelist_row_button_selected" + if row.row_flow then + for _, child in pairs(row.row_flow.children) do + if child.name ~= "cell_priority" then + child.style.font_color = {r=0,g=0,b=0} + end + end + end + end + + -- Title + if zone_content_title then zone_content_title.caption = zone.name end + -- Priority + + if zone_content_priority_flow then + zone_content_priority_flow.tooltip={"space-exploration.priority-tooltip"} + if not zone_content_priority_flow.priority_icon then + zone_content_priority_flow.add{type="label", name="priority_icon", caption={"space-exploration.priority-icon"}, tooltip={"space-exploration.priority-tooltip"}} + end + if not zone_content_priority_flow[Zonelist.name_zone_priority_field] then + local textfield = zone_content_priority_flow.add{type="textfield", name=Zonelist.name_zone_priority_field, style="zonelist_priority_textfield", + numeric = true, allow_negative = true, tooltip={"space-exploration.priority-tooltip"} + } + textfield.style.width = 30 + textfield.style.height = 30 + textfield.style.horizontal_align = "center" + textfield.style.padding = 0 + textfield.style.margin = 0 + textfield.style.right_margin = 4 + end + local priority = Zone.get_priority(zone, force_name) + local textfield = zone_content_priority_flow[Zonelist.name_zone_priority_field] + textfield.text = ""..priority + if priority > 0 then + textfield.style.font_color = Zonelist.name_color_priority_positive + elseif priority < 0 then + textfield.style.font_color = Zonelist.name_color_priority_negative + else + textfield.style.font_color = Zonelist.name_color_priority_neutral + end + if not zone_content_priority_flow["buttons_flow"] then + local buttons_flow = zone_content_priority_flow.add{type="flow", name="buttons_flow", direction = "vertical", tooltip={"space-exploration.priority-tooltip"}} + buttons_flow.style.margin = -1 + end + if not zone_content_priority_flow["buttons_flow"][Zonelist.name_zone_priority_plus_button] then + local plus = zone_content_priority_flow["buttons_flow"].add{type="button", name=Zonelist.name_zone_priority_plus_button, + caption="▲", style="zonelist_priority_button", tooltip={"space-exploration.priority-tooltip"}} + plus.style.margin = -2 + plus.style.padding = 0 + plus.style.width = 20 + plus.style.height = 20 + plus.style.font = "default-tiny-bold" + plus.style.horizontal_align = "center" + end + if not zone_content_priority_flow["buttons_flow"][Zonelist.name_zone_priority_minus_button] then + local minus = zone_content_priority_flow["buttons_flow"].add{type="button", name=Zonelist.name_zone_priority_minus_button, + caption="▼", style="zonelist_priority_button", tooltip={"space-exploration.priority-tooltip"}} + minus.style.margin = -2 + minus.style.padding = 0 + minus.style.width = 20 + minus.style.height = 20 + minus.style.font = "default-tiny-bold" + minus.style.horizontal_align = "center" + end + end + else + if zone_content_title then zone_content_title.caption = " " end + if zone_content_priority_flow then zone_content_priority_flow.clear() end + end + + Zonelist.gui_update_zone_content(player, window, selected_zone) +end + +function Zonelist.gui_update_zone_content(player, window, zone) + local force_name = player.force.name + local forcedata = global.forces[force_name] + local playerdata = get_make_playerdata(player) + local zone_force_assets = Zone.get_force_assets(force_name, zone.index) + + local zone_content_pane = util.find_first_descendant_by_name(window, Zonelist.name_zone_content_pane) + local zone_content_preview_frame = util.find_first_descendant_by_name(window, Zonelist.name_zone_content_preview_frame) + + if zone then + -- zone content + if zone_content_pane then + zone_content_pane.clear() + local zone_properties = zone_content_pane.add{type="table", name="zone_properties", column_count=2, draw_horizontal_lines=false} + zone_properties.style.width = 260 + zone_properties.style.horizontally_stretchable = true + zone_properties.style.column_alignments[1] = "left" -- name + zone_properties.style.column_alignments[2] = "right" -- priority + zone_properties.style.top_margin = -5 + zone_properties.style.bottom_margin = 5 + local label, value + + label = zone_properties.add{type="label", name="label_type", caption={"space-exploration.zone-tooltip-type"}} + label.style.horizontally_stretchable = true + label.style.font_color = {r=0.5,g=0.5,b=0.5} + value = zone_properties.add{type="label", name="value_type", caption={"", "[img=", Zone.get_icon(zone), "] ", Zone.type_title(zone)}} + value.style.horizontal_align = "right" + + if zone.parent then + label = zone_properties.add{type="label", name="label_parent", caption={"space-exploration.zone-tooltip-parent"}} + label.style.horizontally_stretchable = true + label.style.font_color = {r=0.5,g=0.5,b=0.5} + value = zone_properties.add{type="label", name="value_parent", caption=zone.parent.name} + value.style.horizontal_align = "right" + end + + if zone.radius then + label = zone_properties.add{type="label", name="label_radius", caption={"space-exploration.zone-tooltip-radius"}} + label.style.horizontally_stretchable = true + label.style.font_color = {r=0.5,g=0.5,b=0.5} + value = zone_properties.add{type="label", name="value_radius", caption=string.format("%.0f",zone.radius)} + value.style.horizontal_align = "right" + end + + if Zone.is_solid(zone) then + label = zone_properties.add{type="label", name="label_daynight", caption={"space-exploration.zone-tooltip-daynight"}} + label.style.horizontally_stretchable = true + label.style.font_color = {r=0.5,g=0.5,b=0.5} + value = zone_properties.add{type="label", name="value_daynight", caption=string.format("%.2f", zone.ticks_per_day/ 60 / 60 ).." minutes"} + value.style.horizontal_align = "right" + end + + + if zone.type ~= "spaceship" then + local interference_type = "radiation" + if zone.type == "anomaly" then + interference_type = "spacial-distortion" + elseif Zone.is_solid(zone) then + interference_type = "wind" + end + label = zone_properties.add{type="label", name="label_attrition", caption={"space-exploration.zone-tooltip-bot-attrition", {"space-exploration.attrition-type-"..interference_type}}} + label.style.horizontally_stretchable = true + label.style.font_color = {r=0.5,g=0.5,b=0.5} + value = zone_properties.add{type="label", name="value_attrition", caption=string.format("%.2f",Zone.get_attrition(zone))} + value.style.horizontal_align = "right" + end + + if zone.type ~= "spaceship" then + local threat = Zone.get_threat(zone) + label = zone_properties.add{type="label", name="label_threat", caption={"space-exploration.zone-tooltip-threat"}} + label.style.horizontally_stretchable = true + label.style.font_color = {r=0.5,g=0.5,b=0.5} + value = zone_properties.add{type="label", name="value_threat", caption=string.format("%.0f", threat*100).."%"} + value.style.horizontal_align = "right" + + end + + local origin = Zone.from_surface(player.surface) + if (not origin) and playerdata and playerdata.character and playerdata.character.valid and playerdata.character.surface then + origin = Zone.from_surface(playerdata.character.surface) + end + if origin and origin ~= zone then + local delta_v = Zone.get_travel_delta_v(origin, zone) + if delta_v > 0 then + label = zone_properties.add{type="label", name="label_delta_v", caption={"space-exploration.zone-tooltip-delta-v", origin.name}} + label.style.horizontally_stretchable = true + label.style.font_color = {r=0.5,g=0.5,b=0.5} + value = zone_properties.add{type="label", name="value_delta-v", caption=string.format("%.0f", delta_v)} + value.style.horizontal_align = "right" + end + end + + if zone.type == "spaceship" then + local spaceship = zone + + local closest = Zone.find_nearest_zone( + spaceship.space_distortion, + spaceship.stellar_position, + spaceship.star_gravity_well, + spaceship.planet_gravity_well) + label = zone_properties.add{type="label", name="label_closest", caption={"space-exploration.zone-tooltip-closest"}} + label.style.horizontally_stretchable = true + label.style.font_color = {r=0.5,g=0.5,b=0.5} + value = zone_properties.add{type="label", name="value_closest", caption=closest and ("[img="..Zone.get_icon(closest) .. "] " .. closest.name)} + value.style.horizontal_align = "right" + + local destination = Spaceship.get_destination_zone(spaceship) + label = zone_properties.add{type="label", name="label_destination", caption={"space-exploration.zone-tooltip-destination"}} + label.style.horizontally_stretchable = true + label.style.font_color = {r=0.5,g=0.5,b=0.5} + value = zone_properties.add{type="label", name="value_destination", caption=destination and ("[img="..Zone.get_icon(destination) .. "] " .. destination.name)} + value.style.horizontal_align = "right" + + end + + local solar = Zone.get_display_light_percent(zone) + label = zone_properties.add{type="label", name="label_solar", caption={"space-exploration.zone-tooltip-solar"}} + label.style.horizontally_stretchable = true + label.style.font_color = {r=0.5,g=0.5,b=0.5} + value = zone_properties.add{type="label", name="value_solar", caption=string.format("%.0f", solar*100).."%"} + value.style.horizontal_align = "right" + + if is_debug_mode or (global.spaceships and table_size(global.spaceships) > 0) then + label = zone_properties.add{type="label", name="label_signals", caption="Automation signal:"} + label.style.horizontally_stretchable = true + label.style.font_color = {r=0.5,g=0.5,b=0.5} + value = zone_properties.add{type="label", name="value_signals", caption=""} + value.style.horizontal_align = "right" + value.caption = "[img="..Zone.get_icon(zone).."] "..zone.index + value.tooltip = {"space-exploration.simple-a-b", {"virtual-signal-name."..Zone.get_signal_name(zone)}, " "..zone.index.."\nUsed for spaceship automation."} + end + + -- TODO: resources + --for k = 0, 40, 1 do -- test scrollbar + -- label = zone_properties.add{type="label", name="label_solar_"..k, caption={"space-exploration.zone-tooltip-solar"}} + --end + if zone.type ~= "spaceship" then + if zone.type ~= "orbit" then + local resources_flow = zone_content_pane.add{type="flow", name="resources_flow", direction="vertical"} + local fsrs = {} + local max_fsr = 0 + for resource_name, resource_settings in pairs(global.resources_and_controls.resource_settings) do + if zone.controls[resource_name] then + local fsr = Universe.estimate_resource_fsr(zone.controls[resource_name]) + if fsr > 0 then + max_fsr = math.max(max_fsr, fsr) + table.insert(fsrs, {name=resource_name, fsr=fsr}) + end + end + end + table.sort(fsrs, function(a,b) return a.fsr > b.fsr end) + local mapgen + if zone.surface_index then mapgen = Zone.get_make_surface(zone).map_gen_settings end + + for i = 1, #fsrs, 1 do + local resource_name = fsrs[i].name + tooltip = {"space-exploration.zonelist-resource-bar-tooltip", "[img=entity/"..resource_name.."]", {"entity-name."..resource_name}} + if mapgen then + table.insert(tooltip, string.format("%.0f", mapgen.autoplace_controls[resource_name].frequency * 100).."%") + table.insert(tooltip, string.format("%.0f", mapgen.autoplace_controls[resource_name].size * 100).."%") + table.insert(tooltip, string.format("%.0f", mapgen.autoplace_controls[resource_name].richness * 100).."%") + else + local frequency_multiplier = Zone.get_frequency_multiplier(zone) + table.insert(tooltip, string.format("%.0f", zone.controls[resource_name].frequency * frequency_multiplier * 100).."%") + table.insert(tooltip, string.format("%.0f", zone.controls[resource_name].size * 100).."%") + table.insert(tooltip, string.format("%.0f", zone.controls[resource_name].richness * 100).."%") + end + if resource_name == mod_prefix.."cryonite" or resource_name == mod_prefix.."vulcanite" or resource_name == mod_prefix.."vitamelange" then + tooltip[1] = "space-exploration.zonelist-resource-bar-tooltip-extended" + table.insert(tooltip, {"space-exploration.resource-terrain-required-"..resource_name}) + end + local row = resources_flow.add{type="flow", name=resource_name, direction="horizontal", tooltip = tooltip} + row.style.top_margin = 4 + row.style.vertical_align = "center" + local label = row.add{type="label", name="resource_icon", caption="[img=entity/"..resource_name.."]", tooltip=tooltip} + local overlap = row.add{type="flow", name="resource_bar_overlap", direction="vertical"} + local percent = math.pow(fsrs[i].fsr/max_fsr, 1/3) + local progressbar = overlap.add{type="progressbar", name="resource_bar", value=percent, tooltip=tooltip, style="zonelist_progressbar"} + progressbar.style.horizontally_stretchable = true + progressbar.style.color = Zonelist.name_color_priority_neutral + local proto = game.entity_prototypes[resource_name] + if proto and proto.map_color then + local color = proto.map_color + local rgb = color.r + color.g + color.b + if rgb < 150 then + color.r = color.r + 1 + color.g = color.g + 1 + color.b = color.b + 1 + rgb = rgb + 3 + end + --[[if rgb < 255 then + local rgb_m = 255 / rgb + color.r = math.min(255, color.r * rgb_m) + color.g = math.min(255, color.g * rgb_m) + color.b = math.min(255, color.b * rgb_m) + end]] + local rgb_max = math.max(color.r, math.max(color.g,color.b)) + if rgb_max < Zonelist.min_bar_brightness then + local rgb_m = Zonelist.min_bar_brightness / rgb_max + color.r = math.min(255, color.r * rgb_m) + color.g = math.min(255, color.g * rgb_m) + color.b = math.min(255, color.b * rgb_m) + end + progressbar.style.color = color + end + local label = overlap.add{type="label", name="resource_label", caption={"entity-name."..resource_name}, tooltip=tooltip} + label.style.top_margin = -26 + label.style.left_padding = 8 + label.style.font = "default-bold" + label.style.font_color = {} + end + if Zone.is_solid(zone) then + local resources_disclaimer = resources_flow.add{type="label", name="resources_disclaimer", caption={"space-exploration.zonelist-resources-disclaimer"}, tooltip={"space-exploration.zonelist-resources-disclaimer-tooltip"}} + resources_disclaimer.style.font_color = {r=0.5,g=0.5,b=0.5} + end + end + + -- flags + local has_glyph = playerdata.track_glyphs and (zone.glyph ~= nil) + local has_ruin = zone.interburbulator or zone.ruins + local has_visisted = playerdata.visited_zone and playerdata.visited_zone[zone.index] + local has_launchpad = table_size(zone_force_assets.rocket_launch_pad_names) > 0 + local has_landingpad = table_size(zone_force_assets.rocket_landing_pad_names) > 0 + + if has_glyph or has_visisted or has_launchpad or has_landingpad or has_ruin then + local label = zone_properties.add{type="label", name="label_flags", caption={"space-exploration.zone-tooltip-flags"}} + label.style.horizontally_stretchable = true + label.style.font_color = {r=0.5,g=0.5,b=0.5} + local flags_flow = zone_properties.add{type="flow", name="flags_flow", direction="horizontal"} + flags_flow.style.horizontal_align = "right" + if has_visisted then + flags_flow.add{type="label", name="flag_visited", caption="[img=entity/character]", tooltip="Visited in person"} + end + if has_launchpad then + flags_flow.add{type="label", name="flag_launchpad", caption="[img=entity/"..Launchpad.name_rocket_launch_pad.."]", tooltip={"entity-name."..Launchpad.name_rocket_launch_pad}} + end + if has_landingpad then + flags_flow.add{type="label", name="flag_landingpad", caption="[img=entity/"..Landingpad.name_rocket_landing_pad.."]", tooltip={"entity-name."..Landingpad.name_rocket_landing_pad}} + end + if has_glyph then + flags_flow.add{type="label", name="flag_tomb", caption="[img=entity/se-pyramid-a]", tooltip={"space-exploration.mysterious-structure"}} + end + if has_ruin then + flags_flow.add{type="label", name="flag_ruin", caption="[img=virtual-signal/se-ruin]", tooltip={"space-exploration.ruin"}} + end + end + + + -- tags + if zone.tags then + local caption = nil + for _, tag in pairs(zone.tags) do + if not string.find(tag, "enemy", 1, true) then + if caption == nil then + caption = {"space-exploration.climate_"..tag} + else + caption = {"space-exploration.simple-a-b-comma", caption, {"space-exploration.climate_"..tag}} + end + end + end + if zone.is_homeworld then + caption = {"space-exploration.climate_homeworld"} + end + local label = zone_content_pane.add{type="label", name="label_tags", caption="Climate tags:"} + label.style.top_margin = 10 + label.style.horizontally_stretchable = true + label.style.font_color = {r=0.5,g=0.5,b=0.5} + value = zone_content_pane.add{type="label", name="value_tags", caption=caption} + value.style.horizontal_align = "left" + value.style.single_line = false + end + + -- + if zone.surface_index and global.spaceships then + local zone_spaceships = {} + for _, spaceship in pairs(global.spaceships) do + if spaceship.console and spaceship.console.valid and spaceship.console.surface == zone.surface_index then + table.insert(zone_spaceships, spaceship) + end + end + if #zone_spaceships > 0 then + + end + end + + local scan_button = zone_content_pane.add{type="button", name=Zonelist.name_zone_scan_surface_button, --style="green_button", + caption={"space-exploration.scan-zone-button"}, + tooltip = {"space-exploration.scan-zone-button-tooltip"}} + scan_button.style.top_margin = 15 + if forcedata.is_scanning then + scan_button.caption={"space-exploration.stop-scan-zone-button"} + scan_button.tooltip={"space-exploration.stop-scan-zone-button-tooltip"} + elseif not RemoteView.is_unlocked(player) then + scan_button.enabled = false + scan_button.tooltip = {"space-exploration.scan-zone-button-disabled-tooltip"} + end + + local trim_button = zone_content_pane.add{type="button", name=Zonelist.name_zone_trim_surface_button, style="red_button", + caption={"space-exploration.trim-zone-button"}, + tooltip = {"space-exploration.trim-zone-button-tooltip"}} + trim_button.style.top_margin = 10 + if not zone.surface_index then + trim_button.enabled = false + trim_button.tooltip = {"space-exploration.trim-zone-button-no-surface-tooltip"} + end + + local delete_button = zone_content_pane.add{type="button", name=Zonelist.name_zone_delete_surface_button, style="red_button", + caption={"space-exploration.delete-zone-button"}, + tooltip = {"space-exploration.delete-zone-button-tooltip"}} + delete_button.style.top_margin = 10 + if not zone.surface_index then + delete_button.enabled = false + delete_button.tooltip = {"space-exploration.delete-zone-button-no-surface-tooltip"} + end + + end + + end + + -- zone preview + if zone_content_preview_frame then + zone_content_preview_frame.clear() + local surface = Zone.get_surface(zone) + if surface then + local position = {0,0} + if playerdata.surface_positions and playerdata.surface_positions[surface.index] then + position = playerdata.surface_positions[surface.index] + end + if zone.known_tiles_average_x and zone.known_tiles_average_y then + position = {zone.known_tiles_average_x, zone.known_tiles_average_y} + end + local camera = zone_content_preview_frame.add{type="camera", name="zone_content_preview_camera", position=position, zoom=0.05, surface_index=surface.index} + camera.style.horizontally_stretchable = true + camera.style.vertically_stretchable = true + else + zone_content_preview_frame.style.horizontal_align = "center" + zone_content_preview_frame.style.vertical_align = "center" + local preview_text = zone_content_preview_frame.add{type="label", name="preview_text", caption="Scan, view, or visit the selected\nsurface to enable this preview camera."} + preview_text.style.font_color = {r=0.5,g=0.5,b=0.5} + preview_text.style.single_line = false + preview_text.style.horizontal_align = "center" + end + end + else + if zone_content_pane then zone_content_pane.clear() end + if zone_content_preview_frame then zone_content_preview_frame.clear() end + end +end + +function Zonelist.get_row_name_for_zone(zone) + local name = "zone_" .. zone.index + if zone.type == "spaceship" then + name = "spaceship_" .. zone.index + end + return name +end + +function Zonelist.find_row_for_zone(player_index, zone) + local window = Zonelist.get_main_window(player_index) + if not window then return end + local zonelist_scroll = util.find_first_descendant_by_name(window, Zonelist.name_zonelist_scroll) + if not zonelist_scroll then return end + local name = Zonelist.get_row_name_for_zone(zone) + return zonelist_scroll[name] +end + +function Zonelist.gui_update_list(player_index) -- only call when something changed + local player = game.players[player_index] + if not player and player.connected then return end + local window = Zonelist.get_main_window(player_index) + if not window then return end + local force_name = player.force.name + local forcedata = global.forces[force_name] + local playerdata = get_make_playerdata(player) + local selected_zone = playerdata.zonelist_selected_zone + if not selected_zone then + selected_zone = Zone.from_surface(player.surface) + end + + local zonelist_headings_row = util.find_first_descendant_by_name(window, Zonelist.name_zonelist_headings_row) + local zonelist_scroll = util.find_first_descendant_by_name(window, Zonelist.name_zonelist_scroll) + local zonelist_search = util.find_first_descendant_by_name(window, Zonelist.name_zonelist_search) + + zonelist_headings_row.clear() + zonelist_scroll.clear() + + local zones_list = {} + -- build list in the hierarchy order as it is the most dificult to sort + Zone.insert_if_visible_to_force(zones_list, global.universe.anomaly, force_name) + for _, star in pairs(global.universe.stars) do + Zone.insert_if_visible_to_force(zones_list, star.orbit, force_name) + for _, planet_or_belt in pairs(star.children) do + Zone.insert_if_visible_to_force(zones_list, planet_or_belt, force_name) + if planet_or_belt.orbit then + Zone.insert_if_visible_to_force(zones_list, planet_or_belt.orbit, force_name) + end + if planet_or_belt.children then + for _, moon in pairs(planet_or_belt.children) do + Zone.insert_if_visible_to_force(zones_list, moon, force_name) + Zone.insert_if_visible_to_force(zones_list, moon.orbit, force_name) + end + end + end + end + for _, zone in pairs(global.universe.space_zones) do + Zone.insert_if_visible_to_force(zones_list, zone, force_name) + end + for _, spaceship in pairs(global.spaceships) do + Zone.insert_if_visible_to_force(zones_list, spaceship, force_name) + end + + -- filter + if playerdata.zonelist_filter_excludes and table_size(playerdata.zonelist_filter_excludes) > 0 then + local temp_list = zones_list + zones_list = {} + for _, zone in pairs(temp_list) do + if zone.type == "orbit" then + if zone.parent.type == "star" then + if not playerdata.zonelist_filter_excludes["star"] then + table.insert(zones_list, zone) + end + elseif zone.parent.type == "planet" then + if not playerdata.zonelist_filter_excludes["planet-orbit"] then + table.insert(zones_list, zone) + end + elseif zone.parent.type == "moon" then + if not playerdata.zonelist_filter_excludes["moon-orbit"] then + table.insert(zones_list, zone) + end + end + else + if not playerdata.zonelist_filter_excludes[zone.type] then + table.insert(zones_list, zone) + end + end + end + end + + -- search + local search = nil + if zonelist_search then + search = string.trim(zonelist_search.text) + if search == "" then + search = nil + end + end + if search then + local resource_names = {} + for resource_name, resource_settings in pairs(global.resources_and_controls.resource_settings) do + if string.find(string.lower(resource_name), string.lower(search), 1, true) then + table.insert(resource_names, resource_name) + end + end + + local temp_list = zones_list + zones_list = {} + for _, zone in pairs(temp_list) do + if string.find(string.lower(zone.name), string.lower(search), 1, true) then + table.insert(zones_list, zone) + elseif #resource_names > 0 and zone.type ~= "orbit" then + for _, resource_name in pairs(resource_names) do + if zone.controls and zone.controls[resource_name] and zone.controls[resource_name].size > 0 and zone.controls[resource_name].richness > 0 then + table.insert(zones_list, zone) + break + end + end + end + end + end + + -- sort + + local try_criteria = playerdata.sort_criteria or {} + -- set criteris in reverse order + -- eg {"name", "type"} = sort alphabetically then by type, so type has priority, then alphabetical within type + -- if "hierarchy" or "name" are in the list then later ones are removed as they won't do anything. + + local sort_criteria = {} + if #try_criteria > 0 then + for i = #try_criteria, 1, -1 do + table.insert(sort_criteria, 1, try_criteria[i]) + if try_criteria[i].name == "hierarchy" or try_criteria[i].name == "name" then + break + end + end + end + if #sort_criteria == 0 then + sort_criteria = {{name="hierarchy", direction=1}} + end + playerdata.sort_criteria = sort_criteria + + Universe.set_hierarchy_values() + for i = 1, #sort_criteria, 1 do + local mode = sort_criteria[i].name + local direction = sort_criteria[i].direction or 1 + if mode == "hierarchy" then + Universe.set_hierarchy_values() + -- nothing to do, should alredy be in this mode + table.sort(zones_list, function(a,b) + if a.type == "spaceship" then + if b.type == "spaceship" then + return a.name < b.name + end + return false + end + if b.type == "spaceship" then + return true + end + return a.hierarchy_index < b.hierarchy_index end) + elseif mode == "type" then + if direction == -1 then + table.sort(zones_list, function(a,b) + if a.type == b.type and a.type == "orbit" then return a.parent.type < b.parent.type end + return a.type < b.type + end) + else + table.sort(zones_list, function(a,b) + if a.type == b.type and a.type == "orbit" then return a.parent.type > b.parent.type end + return a.type > b.type + end) + end + elseif mode == "name" then + if direction == -1 then + table.sort(zones_list, function(a,b) return a.name > b.name end) + else + table.sort(zones_list, function(a,b) return a.name < b.name end) + end + elseif mode == "radius" then + if direction == -1 then + table.sort(zones_list, function(a,b) return (a.radius or 0) < (b.radius or 0) end) + else + table.sort(zones_list, function(a,b) return (a.radius or 0) > (b.radius or 0) end) + end + elseif mode == "resource" then + if direction == -1 then + table.sort(zones_list, function(a,b) return (a.is_homeworld and "1" or ((a.type ~= "orbit" and a.primary_resource) and a.primary_resource or "zzz")) > (b.is_homeworld and "1" or ((b.type ~= "orbit" and b.primary_resource) and b.primary_resource or "zzz")) end) + else + table.sort(zones_list, function(a,b) return (a.is_homeworld and "1" or ((a.type ~= "orbit" and a.primary_resource) and a.primary_resource or "zzz")) < (b.is_homeworld and "1" or ((b.type ~= "orbit" and b.primary_resource) and b.primary_resource or "zzz")) end) + end + elseif mode == "attrition" then + if direction == -1 then + table.sort(zones_list, function(a,b) return Zone.get_attrition(a) > Zone.get_attrition(b) end) + else + table.sort(zones_list, function(a,b) return Zone.get_attrition(a) < Zone.get_attrition(b) end) + end + elseif mode == "threat" then + if direction == -1 then + table.sort(zones_list, function(a,b) return Zone.get_threat(a) > Zone.get_threat(b) end) + else + table.sort(zones_list, function(a,b) return Zone.get_threat(a) < Zone.get_threat(b) end) + end + elseif mode == "solar" then + if direction == -1 then + table.sort(zones_list, function(a,b) return Zone.get_display_light_percent(a) < Zone.get_display_light_percent(b) end) + else + table.sort(zones_list, function(a,b) return Zone.get_display_light_percent(a) > Zone.get_display_light_percent(b) end) + end + elseif mode == "flags" then + if direction == -1 then + table.sort(zones_list, function(a,b) return Zone.get_flags_weight(a, force_name, playerdata) < Zone.get_flags_weight(b, force_name, playerdata) end) + else + table.sort(zones_list, function(a,b) return Zone.get_flags_weight(a, force_name, playerdata) > Zone.get_flags_weight(b, force_name, playerdata) end) + end + elseif mode == "priority" then + if direction == -1 then + table.sort(zones_list, function(a,b) return Zone.get_priority(a, force_name) < Zone.get_priority(b, force_name) end) + else + table.sort(zones_list, function(a,b) return Zone.get_priority(a, force_name) > Zone.get_priority(b, force_name) end) + end + end + end + + -- column names are: hierarchy, type, name, radius, resource, attrition, solar, priority + + -- build headings + local function format_cell(element, is_heading) + if is_heading then + element.style="dark_button" + end + element.style.margin = 0 + element.style.width = 68 + --element.style.horizontal_align = "center" + if element.name == "cell_name" then + element.style.width = 210 + element.style.maximal_width = 900 + --element.style.horizontally_stretchable = true + --element.style.horizontal_align = "left" + end + if element.name == "cell_flags" then + element.style.width = 100 + end + return element + end + + if zonelist_headings_row then + local cell_hierarchy = format_cell(zonelist_headings_row.add{type="button", name="cell_hierarchy", caption="[img=virtual-signal/se-hierarchy]", tooltip={"space-exploration.zonelist-heading-hierarchy"}}, true) + local cell_type = format_cell(zonelist_headings_row.add{type="button", name="cell_type", caption="[img=virtual-signal/se-planet]", tooltip={"space-exploration.zonelist-heading-type"}}, true) + local cell_name = format_cell(zonelist_headings_row.add{type="button", name="cell_name", caption={"space-exploration.name"}, tooltip={"space-exploration.zonelist-heading-name"}}, true) + cell_name.style.horizontal_align = "left" + cell_name.style.font_color = {1,1,1} + local cell_radius = format_cell(zonelist_headings_row.add{type="button", name="cell_radius", caption="[img=virtual-signal/se-radius]", tooltip={"space-exploration.zonelist-heading-radius"}}, true) + local cell_resource = format_cell(zonelist_headings_row.add{type="button", name="cell_resource", caption="[img=item/se-core-fragment-omni]", tooltip={"space-exploration.zonelist-heading-primary-resource"}}, true) + local cell_attrition = format_cell(zonelist_headings_row.add{type="button", name="cell_attrition", caption="[img=item/logistic-robot]", tooltip={"space-exploration.zonelist-heading-attrition"}}, true) + local cell_threat = format_cell(zonelist_headings_row.add{type="button", name="cell_threat", caption="[img=item/artillery-targeting-remote]", tooltip={"space-exploration.zonelist-heading-threat"}}, true) + local cell_solar = format_cell(zonelist_headings_row.add{type="button", name="cell_solar", caption="[img=item/solar-panel]", tooltip={"space-exploration.zonelist-heading-solar"}}, true) + local cell_flags = format_cell(zonelist_headings_row.add{type="button", name="cell_flags", caption="[img=item/"..Landingpad.name_rocket_landing_pad.."]", tooltip={"space-exploration.zonelist-heading-flags"}}, true) + local cell_priority = format_cell(zonelist_headings_row.add{type="button", name="cell_priority", caption="[img=virtual-signal/se-accolade]", tooltip={"space-exploration.zonelist-heading-priority"}}, true) + end + + -- build rows + if zonelist_scroll then + for i, zone in pairs(zones_list) do + -- zone row + local hierarchy = " ✖" + if zone.type == "planet" then + hierarchy = " | - ●" + elseif zone.type == "moon" then + hierarchy = " | | - ●" + elseif zone.type == "asteroid-belt" then + hierarchy = " | - ✖" + end + if zone.type == "orbit" then + if zone.parent.type == "star" then + hierarchy = "⬤" + elseif zone.parent.type == "planet" then + hierarchy = " | ○" + else + hierarchy = " | | ○" + end + end + if zone.type == "anomaly" then + hierarchy = " ?" + end + if zone.type == "spaceship" then + hierarchy = " ▴" + end + local name = Zonelist.get_row_name_for_zone(zone) + Log.debug_log("zonelist: "..zone.type.." "..zone.name.." "..zone.index, "zonelist") + local row = zonelist_scroll.add{type="button", name=name, style=(zone == selected_zone and "zonelist_row_button_selected" or "zonelist_row_button")} + --row.style.horizontally_stretchable = true + --row.style.bottom_margin = -3 + local row_flow = format_cell(row.add{type="flow", name="row_flow", direction="horizontal"}) + row_flow.ignored_by_interaction = true + local cell_hierarchy = format_cell(row_flow.add{type="label", name="cell_hierarchy", caption=hierarchy}) + cell_hierarchy.style.horizontal_align = "left" + local cell_type = format_cell(row_flow.add{type="label", name="cell_type", caption="[img="..Zone.get_icon(zone).."]", tooltip=Zone.type_title(zone)}) + cell_type.style.horizontal_align = "center" + cell_type.style.left_margin = -12 + local cell_name = format_cell(row_flow.add{type="label", name="cell_name", caption=zone.name}) + cell_name.style.horizontal_align = "left" + cell_name.style.left_padding = 16 + local cell_radius = format_cell(row_flow.add{type="label", name="cell_radius", caption=zone.radius and (string.format("%.0f", zone.radius)) or "-"}) + cell_radius.style.horizontal_align = "right" + cell_radius.style.right_padding = 16 + local cell_resource = format_cell(row_flow.add{type="label", name="cell_resource", + caption= (zone.primary_resource and zone.type ~= "orbit") and ("[img=entity/".. zone.primary_resource.."]") or "-", + tooltip= (zone.primary_resource and zone.type ~= "orbit") and ({"entity-name."..zone.primary_resource}) or nil}) + if zone.is_homeworld then + cell_resource.caption = "[img=item/se-core-fragment-omni]" + cell_resource.tooltip = {"item-name.se-core-fragment-omni"} + end + cell_resource.style.horizontal_align = "center" + local cell_attrition = format_cell(row_flow.add{type="label", name="cell_attrition", caption=string.format("%.2f", Zone.get_attrition(zone))}) + cell_attrition.style.horizontal_align = "right" + cell_attrition.style.right_padding = 16 + local cell_threat = format_cell(row_flow.add{type="label", name="cell_threat", caption=string.format("%.0f", Zone.get_threat(zone)*100).."%"}) + cell_threat.style.horizontal_align = "right" + cell_threat.style.right_padding = 16 + local cell_solar = format_cell(row_flow.add{type="label", name="cell_solar", caption=string.format("%.0f", Zone.get_display_light_percent(zone) * 100).."%"}) + cell_solar.style.horizontal_align = "right" + cell_solar.style.right_padding = 16 + local cell_flags = format_cell(row_flow.add{type="label", name="cell_flags", caption=""}) + cell_flags.style.horizontal_align = "center" + if playerdata.visited_zone and playerdata.visited_zone[zone.index] then + cell_flags.caption = cell_flags.caption .. "[img=entity/character]" + end + if global.forces[force_name].zone_assets and global.forces[force_name].zone_assets[zone.index] and table_size(global.forces[force_name].zone_assets[zone.index].rocket_launch_pad_names) > 0 then + cell_flags.caption = cell_flags.caption .. "[img=entity/"..Launchpad.name_rocket_launch_pad.."]" + end + if global.forces[force_name].zone_assets and global.forces[force_name].zone_assets[zone.index] and table_size(global.forces[force_name].zone_assets[zone.index].rocket_landing_pad_names) > 0 then + cell_flags.caption = cell_flags.caption .. "[img=entity/"..Landingpad.name_rocket_landing_pad.."]" + end + if playerdata.track_glyphs and (zone.glyph ~= nil) then + cell_flags.caption = cell_flags.caption .. "[img=entity/se-pyramid-a]" + end + if zone.interburbulator or zone.ruins then + cell_flags.caption = cell_flags.caption .. "[img=virtual-signal/se-ruin]" + end + + local priority = Zone.get_priority(zone, force_name) + local cell_priority = format_cell(row_flow.add{type="label", name="cell_priority", caption=priority}) + cell_priority.style.horizontal_align = "right" + cell_priority.style.right_padding = 30 + if priority > 0 then + cell_priority.style.font_color = Zonelist.name_color_priority_positive + elseif priority < 0 then + cell_priority.style.font_color = Zonelist.name_color_priority_negative + else + cell_priority.style.font_color = Zonelist.name_color_priority_neutral + end + end + end + +end + +function Zonelist.on_gui_closed (event) + if event.element and event.element.valid and event.element.name == Zonelist.name_gui_root then + Zonelist.gui_close(event.player_index) + end +end +Event.addListener(defines.events.on_gui_closed, Zonelist.on_gui_closed) + +function Zonelist.toggle_main_window(player_index) + local window = Zonelist.get_main_window(player_index) + if window then + window.destroy() + else + Zonelist.gui_open(player_index) + end +end + +function Zonelist.on_gui_click (event) + if not (event.element and event.element.valid) then return end + local element = event.element + local player = game.players[event.player_index] + + if event.element.name == Zonelist.name_button_overhead_explorer then + Zonelist.toggle_main_window(event.player_index) return + end + + root = gui_element_or_parent(element, Zonelist.name_gui_root) + if root then -- remote view + local map_view_zone = MapView.gui_get_zone_from_element(root) + local playerdata = get_make_playerdata(player) + if element.name == Zonelist.name_button_view_zone then + if RemoteView.is_unlocked(player) then + local zone + if root.parent then zone = MapView.gui_get_zone_from_element(root.parent) end -- try to get zone from parent + if not zone then zone = map_view_zone or Zonelist.get_selected_zone_or_current(event.player_index) end + if zone then + Zonelist.gui_close(event.player_index) + MapView.gui_close(player) + RemoteView.start(player, zone) + end + else + player.print({"space-exploration.remote-view-requires-satellite"}) + end + elseif element.parent and element.parent.name == Zonelist.name_zonelist_headings_row then + playerdata.sort_criteria = playerdata.sort_criteria or {} + local criterion = util.replace(element.name, "cell_", "") + if playerdata.sort_criteria[#playerdata.sort_criteria].name == criterion then + playerdata.sort_criteria[#playerdata.sort_criteria].direction = -1 * (playerdata.sort_criteria[#playerdata.sort_criteria].direction or 1) + else + for _, c in pairs(playerdata.sort_criteria) do + if c.name == criterion then + table.remove(playerdata.sort_criteria, _) + break + end + end + table.insert(playerdata.sort_criteria, {name=criterion, direction = 1}) + end + Zonelist.gui_update_list(event.player_index) + elseif gui_element_or_parent(element.parent, Zonelist.name_zonelist_scroll) then + if string.find(element.name, "zone_", 1, true) then + local number_string = util.replace(element.name, "zone_", "") + local zone_index = util.string_to_number(number_string) + local zone = Zone.from_zone_index(zone_index) + if zone then + playerdata.zonelist_selected_zone = zone + Zonelist.gui_update_selected(event.player_index) + end + elseif string.find(element.name, "spaceship_", 1, true) then + local number_string = util.replace(element.name, "spaceship_", "") + local spaceship_index = util.string_to_number(number_string) + local spaceship = Spaceship.from_index(spaceship_index) + if spaceship then + playerdata.zonelist_selected_zone = spaceship + Zonelist.gui_update_selected(event.player_index) + end + end + elseif element.name == Zonelist.name_button_starmap then + Zonelist.gui_close(event.player_index) + MapView.start_interstellar_map(player) + elseif element.name == Zonelist.name_zonelist_search_apply then + local textfield = util.find_first_descendant_by_name(root, Zonelist.name_zonelist_search) + if textfield then + textfield.text = "" + Zonelist.gui_update_list(event.player_index) + end + elseif element.parent and element.parent.name == Zonelist.name_zonelist_filters then + playerdata.zonelist_filter_excludes = playerdata.zonelist_filter_excludes or {} + if playerdata.zonelist_filter_excludes[element.name] then + playerdata.zonelist_filter_excludes[element.name] = nil + element.style = "se_zone_list_filter_down" + else + playerdata.zonelist_filter_excludes[element.name] = true + element.style = "se_zone_list_filter" + end + Zonelist.gui_update_list(event.player_index) + elseif element.name == Zonelist.name_zone_priority_plus_button then + local zone = Zonelist.get_selected_zone_or_current(event.player_index) + local forcedata = global.forces[player.force.name] + if zone.type ~= "spaceship" then + forcedata.zone_priorities = forcedata.zone_priorities or {} + local priority = (forcedata.zone_priorities[zone.index] or 0) + 1 + Zonelist.change_priority(player.force.name, zone, priority) + else + forcedata.spaceship_priorities = forcedata.spaceship_priorities or {} + local priority = (forcedata.spaceship_priorities[zone.index] or 0) + 1 + Zonelist.change_priority(player.force.name, zone, priority) + end + elseif element.name == Zonelist.name_zone_priority_minus_button then + local zone = Zonelist.get_selected_zone_or_current(event.player_index) + local forcedata = global.forces[player.force.name] + if zone.type ~= "spaceship" then + forcedata.zone_priorities = forcedata.zone_priorities or {} + local priority = (forcedata.zone_priorities[zone.index] or 0) - 1 + Zonelist.change_priority(player.force.name, zone, priority) + else + forcedata.spaceship_priorities = forcedata.spaceship_priorities or {} + local priority = (forcedata.spaceship_priorities[zone.index] or 0) - 1 + Zonelist.change_priority(player.force.name, zone, priority) + end + elseif element.name == Zonelist.name_zone_trim_surface_button then + local zone + if root.parent then zone = MapView.gui_get_zone_from_element(root.parent) end -- try to get zone from parent + if not zone then zone = map_view_zone or Zonelist.get_selected_zone_or_current(event.player_index) end + if zone then + Zone.trim_surface(zone, event.player_index) + end + elseif element.name == Zonelist.name_zone_delete_surface_button then + local zone + if root.parent then zone = MapView.gui_get_zone_from_element(root.parent) end -- try to get zone from parent + if not zone then zone = map_view_zone or Zonelist.get_selected_zone_or_current(event.player_index) end + if zone then + Zone.delete_surface(zone, event.player_index) + Zonelist.gui_update_selected(event.player_index) + MapView.gui_update(player) + end + elseif element.name == Zonelist.name_zone_scan_surface_button then + local forcedata = global.forces[player.force.name] + local zone + if root.parent then zone = MapView.gui_get_zone_from_element(root.parent) end -- try to get zone from parent + if not zone then zone = map_view_zone or Zonelist.get_selected_zone_or_current(event.player_index) end + local surface = Zone.get_make_surface(zone) + if forcedata.is_scanning then + forcedata.is_scanning = false + player.force.cancel_charting() + Zonelist.gui_update_selected(event.player_index) + forcedata.scanning_zone = nil + forcedata.scanning_cursor = nil + else + forcedata.is_scanning = true + forcedata.scanning_zone = zone + Zonelist.gui_update_selected(event.player_index) + end + MapView.gui_update(player) + elseif element.name == Zonelist.name_button_close then + Zonelist.gui_close(event.player_index) + end + return + end +end +Event.addListener(defines.events.on_gui_click, Zonelist.on_gui_click) + +function Zonelist.change_priority(force_name, zone, priority) + priority = math.min(math.max(priority, -Zonelist.priority_max), Zonelist.priority_max) + local forcedata = global.forces[force_name] + if zone.type == "spaceship" then + forcedata.spaceship_priorities = forcedata.spaceship_priorities or {} + forcedata.spaceship_priorities[zone.index] = priority + else + forcedata.zone_priorities = forcedata.zone_priorities or {} + forcedata.zone_priorities[zone.index] = priority + end + for _, player in pairs(game.connected_players) do + local window = Zonelist.get_main_window(player.index) + if window then + local zonelist_scroll = util.find_first_descendant_by_name(window, Zonelist.name_zonelist_scroll) + + local row = zonelist_scroll[(zone.type == "spaceship" and "spaceship" or "zone").."_"..zone.index] + if row and row.row_flow and row.row_flow.cell_priority then + local cell = row.row_flow.cell_priority + cell.caption = priority + if priority > 0 then + cell.style.font_color = Zonelist.name_color_priority_positive + elseif priority < 0 then + cell.style.font_color = Zonelist.name_color_priority_negative + else + cell.style.font_color = Zonelist.name_color_priority_neutral + end + end + local selected_zone = Zonelist.get_selected_zone_or_current(player.index) + if selected_zone == zone then + local textfield = util.find_first_descendant_by_name(window, Zonelist.name_zone_priority_field) + textfield.text = ""..priority + if priority > 0 then + textfield.style.font_color = Zonelist.name_color_priority_positive + elseif priority < 0 then + textfield.style.font_color = Zonelist.name_color_priority_negative + else + textfield.style.font_color = Zonelist.name_color_priority_neutral + end + end + end + end +end + +function Zonelist.on_gui_text_changed(event) + if not (event.element and event.element.valid) then return end + local element = event.element + local root = gui_element_or_parent(element, Zonelist.name_gui_root) + if root then -- remote view + if element.name == Zonelist.name_zonelist_search then + Zonelist.gui_update_list(event.player_index) + elseif element.name == Zonelist.name_zone_priority_field then + local player = game.players[event.player_index] + local zone = Zonelist.get_selected_zone_or_current(event.player_index) + local priority = util.string_to_number(element.text) + if priority then + Zonelist.change_priority(player.force.name, zone, priority) + end + end + end +end +Event.addListener(defines.events.on_gui_text_changed, Zonelist.on_gui_text_changed) + +function Zonelist.on_lua_shortcut (event) + if event.player_index + and game.players[event.player_index] + and game.players[event.player_index].connected then + + if event.prototype_name == Zonelist.name_shortcut then + Zonelist.toggle_main_window(event.player_index) + end + + end +end +Event.addListener(defines.events.on_lua_shortcut, Zonelist.on_lua_shortcut) + +function Zonelist.on_universe_explorer_keypress (event) + Zonelist.toggle_main_window(event.player_index) +end +Event.addListener(Zonelist.name_event, Zonelist.on_universe_explorer_keypress) + +function Zonelist.update_overhead_button(player_index) + local player = game.players[player_index] + local button_flow = mod_gui.get_button_flow(player) + if button_flow then + if settings.get_player_settings(player)[Zonelist.name_setting_overhead_explorer].value == true then + if not button_flow[Zonelist.name_button_overhead_explorer] then + button_flow.add{type="sprite-button", name=Zonelist.name_button_overhead_explorer, sprite="se-map-gui-universe-explorer", tooltip = {"space-exploration.zonelist-window-title"}} + end + else + if button_flow[Zonelist.name_button_overhead_explorer] then + button_flow[Zonelist.name_button_overhead_explorer].destroy() + end + end + end +end + +function Zonelist.on_runtime_mod_setting_changed(event) + for _, player in pairs(game.connected_players) do + Zonelist.update_overhead_button(player.index) + end +end +Event.addListener(defines.events.on_runtime_mod_setting_changed, Zonelist.on_runtime_mod_setting_changed) + +function Zonelist.on_configuration_changed() + for _, player in pairs(game.connected_players) do + Zonelist.update_overhead_button(player.index) + end +end +Event.addListener("on_configuration_changed", Zonelist.on_configuration_changed, true) + + +return Zonelist diff --git a/space-exploration_0.5.80/space-exploration/settings.lua b/space-exploration_0.5.80/space-exploration/settings.lua new file mode 100644 index 0000000..175822a --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/settings.lua @@ -0,0 +1,241 @@ +data:extend{ + { + type = "int-setting", + name = "se-meteor-interval", + setting_type = "runtime-global", + default_value = 30, + minimum_value = 1, + maximum_value = 2880, + order = "a-a" + }, + { + type = "bool-setting", + name = "se-print-meteor-info", + setting_type = "runtime-per-user", + default_value = true, + order = "a-b" + }, + { + type = "int-setting", + name = "se-plague-max-runtime-2", + setting_type = "runtime-global", + default_value = 30, + minimum_value = 5, + maximum_value = 1000, + order = "b" + }, + { + type = "bool-setting", + name = "se-print-satellite-discovered-nothing", + setting_type = "runtime-per-user", + default_value = true, + order = "c-a" + }, + { + type = "bool-setting", + name = "se-never-show-lifesupport", + setting_type = "runtime-per-user", + default_value = false, + order = "c-b" + }, + { + type = "bool-setting", + name = "se-show-zone-preview", + setting_type = "runtime-per-user", + default_value = true, + order = "d" + }, + { + type = "int-setting", + name = "se-cmes-max-frequency", + setting_type = "runtime-global", + minimum_value = 0, + maximum_value = 200, + default_value = 36, + order = "a-c" + }, + { + type = "int-setting", + name = "se-space-pipe-capacity", + setting_type = "startup", + default_value = 100, + minimum_value = 50, + maximum_value = 200, + order = "e" + }, + { + type = "string-setting", + name = "se-space-science-pack", + setting_type = "startup", + default_value = "Replace", + allowed_values = {"Remove", "Replace", "OptimisationUranium", "OptimisationFish"}, + order = "i" + }, + --[[{ + type = "bool-setting", + name = "se-electric-boiler", + setting_type = "startup", + default_value = true + }, + { + type = "bool-setting", + name = "se-deep-space-belt-black", + setting_type = "startup", + default_value = false + },]]-- + { + type = "int-setting", + name = "se-deep-space-belt-speed", + setting_type = "startup", + default_value = 64, + minimum_value = 1, + maximum_value = 512, + order = "f" + }, + { + type = "bool-setting", + name = "se-deep-space-belt-white", + setting_type = "startup", + default_value = true, + order = "g" + }, + { + type = "bool-setting", + name = "se-deep-space-belt-red", + setting_type = "startup", + default_value = true, + order = "g" + }, + { + type = "bool-setting", + name = "se-deep-space-belt-magenta", + setting_type = "startup", + default_value = true, + order = "g" + }, + { + type = "bool-setting", + name = "se-deep-space-belt-blue", + setting_type = "startup", + default_value = true, + order = "g" + }, + { + type = "bool-setting", + name = "se-deep-space-belt-cyan", + setting_type = "startup", + default_value = true, + order = "g" + }, + { + type = "bool-setting", + name = "se-deep-space-belt-green", + setting_type = "startup", + default_value = true, + order = "g" + }, + { + type = "bool-setting", + name = "se-deep-space-belt-yellow", + setting_type = "startup", + default_value = true, + order = "g" + }, + { + type = "bool-setting", + name = "se-pylon-charge-points", + setting_type = "startup", + default_value = false, + order = "e-b" + }, + { + type = "bool-setting", + name = "se-spawn-small-resources", + setting_type = "startup", + default_value = true, + order = "h" + }, + { + type = "bool-setting", + name = "se-show-overhead-button-satellite-mode", + setting_type = "runtime-per-user", + default_value = true, + order = "d-b" + }, + { + type = "bool-setting", + name = "se-show-overhead-button-interstellar-map", + setting_type = "runtime-per-user", + default_value = true, + order = "d-c" + }, + { + type = "bool-setting", + name = "se-show-overhead-button-universe-explorer", + setting_type = "runtime-per-user", + default_value = true, + order = "d-d" + }, + { + type = "bool-setting", + name = "se-show-pin-help-tooltip", + setting_type = "runtime-per-user", + default_value = true, + order = "e-a" + }, + { + type = "int-setting", + name = "se-scan-search-budget", + setting_type = "runtime-global", + default_value = 1000, + minimum_value = 1, + maximum_value = 10000, + order = "s-a" + }, + { + type = "int-setting", + name = "se-scan-chart-budget", + setting_type = "runtime-global", + default_value = 10, + minimum_value = 1, + maximum_value = 1000, + order = "s-b" + }, + { + type = "int-setting", + name = "se-scan-alert-interval", + setting_type = "runtime-global", + default_value = 60, + minimum_value = 0, + maximum_value = 1000, + order = "s-c" + }, + { + type = "int-setting", + name = "se-supercharger-individual-charge-rate", + setting_type = "startup", + default_value = 90, + minimum_value = 90, + maximum_value = 1000, + order = "e-c" + }, +} + +-- Overrides +data.raw["bool-setting"]["aai-wide-drill"] = nil +data:extend({ + { + type = "string-setting", + name = "aai-wide-drill", + setting_type = "startup", + default_value = "Enabled by Space Exploration", + allowed_values = {"Enabled by Space Exploration"}, + order = "z" + } +}) +for _, setting in pairs(data.raw["string-setting"]) do + if string.find(setting.name, "alien-biomes-include-", 1, true) and setting.name ~= "alien-biomes-include-rivers" then + setting.allowed_values = {"Enabled"} + end +end +data.raw["string-setting"]["alien-biomes-disable-vegetation"].allowed_values = {"Disabled"} diff --git a/space-exploration_0.5.80/space-exploration/shared.lua b/space-exploration_0.5.80/space-exploration/shared.lua new file mode 100644 index 0000000..519d164 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/shared.lua @@ -0,0 +1,11 @@ +local Shared = {} +-- used in data phase and control + +Shared.spaceship_victory_speed = 250 +Shared.spaceship_victory_duration = 600 + +Shared.resources_with_shared_controls = { + "lithia-water", --uses ground-water +} + +return Shared diff --git a/space-exploration_0.5.80/space-exploration/sound/canister-breath.ogg b/space-exploration_0.5.80/space-exploration/sound/canister-breath.ogg new file mode 100644 index 0000000..4f8dab1 Binary files /dev/null and b/space-exploration_0.5.80/space-exploration/sound/canister-breath.ogg differ diff --git a/space-exploration_0.5.80/space-exploration/sound/gate-button.ogg b/space-exploration_0.5.80/space-exploration/sound/gate-button.ogg new file mode 100644 index 0000000..ffbb375 Binary files /dev/null and b/space-exploration_0.5.80/space-exploration/sound/gate-button.ogg differ diff --git a/space-exploration_0.5.80/space-exploration/sound/gate-lock.ogg b/space-exploration_0.5.80/space-exploration/sound/gate-lock.ogg new file mode 100644 index 0000000..dec48c7 Binary files /dev/null and b/space-exploration_0.5.80/space-exploration/sound/gate-lock.ogg differ diff --git a/space-exploration_0.5.80/space-exploration/sound/gate-power-down.ogg b/space-exploration_0.5.80/space-exploration/sound/gate-power-down.ogg new file mode 100644 index 0000000..3d8e284 Binary files /dev/null and b/space-exploration_0.5.80/space-exploration/sound/gate-power-down.ogg differ diff --git a/space-exploration_0.5.80/space-exploration/sound/gate-power-on.ogg b/space-exploration_0.5.80/space-exploration/sound/gate-power-on.ogg new file mode 100644 index 0000000..701add0 Binary files /dev/null and b/space-exploration_0.5.80/space-exploration/sound/gate-power-on.ogg differ diff --git a/space-exploration_0.5.80/space-exploration/sound/gate-power-up.ogg b/space-exploration_0.5.80/space-exploration/sound/gate-power-up.ogg new file mode 100644 index 0000000..652faeb Binary files /dev/null and b/space-exploration_0.5.80/space-exploration/sound/gate-power-up.ogg differ diff --git a/space-exploration_0.5.80/space-exploration/sound/gate-turning.ogg b/space-exploration_0.5.80/space-exploration/sound/gate-turning.ogg new file mode 100644 index 0000000..41b68db Binary files /dev/null and b/space-exploration_0.5.80/space-exploration/sound/gate-turning.ogg differ diff --git a/space-exploration_0.5.80/space-exploration/sound/meteor-woosh.ogg b/space-exploration_0.5.80/space-exploration/sound/meteor-woosh.ogg new file mode 100644 index 0000000..e9fac5a Binary files /dev/null and b/space-exploration_0.5.80/space-exploration/sound/meteor-woosh.ogg differ diff --git a/space-exploration_0.5.80/space-exploration/sound/railgun.ogg b/space-exploration_0.5.80/space-exploration/sound/railgun.ogg new file mode 100644 index 0000000..4cd1bae Binary files /dev/null and b/space-exploration_0.5.80/space-exploration/sound/railgun.ogg differ diff --git a/space-exploration_0.5.80/space-exploration/sound/spaceship-woosh.ogg b/space-exploration_0.5.80/space-exploration/sound/spaceship-woosh.ogg new file mode 100644 index 0000000..fa3a985 Binary files /dev/null and b/space-exploration_0.5.80/space-exploration/sound/spaceship-woosh.ogg differ diff --git a/space-exploration_0.5.80/space-exploration/sound/tesla-gunshot.ogg b/space-exploration_0.5.80/space-exploration/sound/tesla-gunshot.ogg new file mode 100644 index 0000000..33a0293 Binary files /dev/null and b/space-exploration_0.5.80/space-exploration/sound/tesla-gunshot.ogg differ diff --git a/space-exploration_0.5.80/space-exploration/stdlib/area/area.lua b/space-exploration_0.5.80/space-exploration/stdlib/area/area.lua new file mode 100644 index 0000000..43d7056 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/stdlib/area/area.lua @@ -0,0 +1,243 @@ +--- Area module +-- @module Area + +local Core = require 'stdlib/core' +local Position = require 'stdlib/area/position' + +local Area = {} + +--- Creates an area from the 2 positions p1 and p2 +-- @param x1 x-position of left_top, first point +-- @param y1 y-position of left_top, first point +-- @param x2 x-position of right_bottom, second point +-- @param y2 y-position of right_bottom, second point +-- @return Area tabled area +function Area.construct(x1, y1, x2, y2) + return { left_top = Position.construct(x1, y1), right_bottom = Position.construct(x2, y2) } +end + +--- Returns the size of the space contained in the 2d area
+-- Deprecated, Area.area is misleading. See: Area.size +-- @param area the area +-- @return size of the area +function Area.area(area) + return Area.size(area) +end + +--- Returns the size of the space contained in the 2d area +-- @param area the area +-- @return size of the area +function Area.size(area) + Core.fail_if_missing(area, "missing area value") + area = Area.to_table(area) + + local left_top = Position.to_table(area.left_top) + local right_bottom = Position.to_table(area.right_bottom) + + local dx = math.abs(left_top.x - right_bottom.x) + local dy = math.abs(left_top.y - right_bottom.y) + return dx * dy +end + +--- Tests if a position {x, y} is inside (inclusive) of area +-- @param area the area +-- @param pos the position to check +-- @return true if the position is inside of the area +function Area.inside(area, pos) + Core.fail_if_missing(pos, "missing pos value") + Core.fail_if_missing(area, "missing area value") + pos = Position.to_table(pos) + area = Area.to_table(area) + + local left_top = Position.to_table(area.left_top) + local right_bottom = Position.to_table(area.right_bottom) + return pos.x >= left_top.x and pos.y >= left_top.y and pos.x <= right_bottom.x and pos.y <= right_bottom.y +end + +--- Shrinks the size of an area by the given amount +-- @param area the area +-- @param amount to shrink each edge of the area inwards by +-- @return the shrunk area +function Area.shrink(area, amount) + Core.fail_if_missing(area, "missing area value") + Core.fail_if_missing(amount, "missing amount value") + if amount < 0 then error("Can not shrunk area by a negative amount (see Area.expand)!", 2) end + area = Area.to_table(area) + + local left_top = Position.to_table(area.left_top) + local right_bottom = Position.to_table(area.right_bottom) + return {left_top = {x = left_top.x + amount, y = left_top.y + amount}, right_bottom = {x = right_bottom.x - amount, y = right_bottom.y - amount}} +end + +--- Expands the size of an area by the given amount +-- @param area the area +-- @param amount to expand each edge of the area outwards by +-- @return the expanded area +function Area.expand(area, amount) + Core.fail_if_missing(area, "missing area value") + Core.fail_if_missing(amount, "missing amount value") + if amount < 0 then error("Can not expand area by a negative amount (see Area.shrink)!", 2) end + area = Area.to_table(area) + + local left_top = Position.to_table(area.left_top) + local right_bottom = Position.to_table(area.right_bottom) + return {left_top = {x = left_top.x - amount, y = left_top.y - amount}, right_bottom = {x = right_bottom.x + amount, y = right_bottom.y + amount}} +end + +--- Calculates the center of the area and returns the position +-- @param area the area +-- @return area to find the center for +function Area.center(area) + Core.fail_if_missing(area, "missing area value") + area = Area.to_table(area) + + local dist_x = area.right_bottom.x - area.left_top.x + local dist_y = area.right_bottom.y - area.left_top.y + + return {x = area.left_top.x + (dist_x / 2), y = area.left_top.y + (dist_y / 2)} +end + +--- Offsets the area by the {x, y} values +-- @param area the area +-- @param pos the {x, y} amount to offset the area +-- @return offset area by the position values +function Area.offset(area, pos) + Core.fail_if_missing(area, "missing area value") + Core.fail_if_missing(pos, "missing pos value") + area = Area.to_table(area) + + return {left_top = Position.add(area.left_top, pos), right_bottom = Position.add(area.right_bottom, pos)} +end + +--- Converts an area to the integer representation, by taking the floor of the left_top and the ceiling of the right_bottom +-- @param area the area +-- @return the rounded integer representation +function Area.round_to_integer(area) + Core.fail_if_missing(area, "missing area value") + area = Area.to_table(area) + + local left_top = Position.to_table(area.left_top) + local right_bottom = Position.to_table(area.right_bottom) + return {left_top = {x = math.floor(left_top.x), y = math.floor(left_top.y)}, + right_bottom = {x = math.ceil(right_bottom.x), y = math.ceil(right_bottom.y)}} +end + +--- Iterates an area. +-- @usage +---for x,y in Area.iterate({{0, -5}, {3, -3}}) do +-----... +---end +-- @param area the area +-- @return iterator +function Area.iterate(area) + Core.fail_if_missing(area, "missing area value") + + local iterator = {idx = 0} + function iterator.iterate(area2) --luacheck: ignore + local rx = area.right_bottom.x - area.left_top.x + 1 + local dx = iterator.idx % rx + local dy = math.floor(iterator.idx / rx) + iterator.idx = iterator.idx + 1 + if (area.left_top.y + dy) > area.right_bottom.y then + return + end + return (area.left_top.x + dx), (area.left_top.y + dy) + end + return iterator.iterate, Area.to_table(area), 0 +end + +--- Iterates an area in a spiral inner-most to outer-most fashion. +---

Example:

+---
+---for x, y in Area.spiral_iterate({{-2, -1}, {2, 1}}) do
+---- print("(" .. x .. ", " .. y .. ")")
+---end
+--- prints: (0, 0) (1, 0) (1, 1) (0, 1) (-1, 1) (-1, 0) (-1, -1) (0, -1) (1, -1) (2, -1) (2, 0) (2, 1) (-2, 1) (-2, 0) (-2, -1)
+---
+-- iterates in the order depicted:
+-- ![](http://i.imgur.com/EwfO0Es.png) +-- @param area the area +-- @return iterator +function Area.spiral_iterate(area) + Core.fail_if_missing(area, "missing area value") + area = Area.to_table(area) + + local rx = area.right_bottom.x - area.left_top.x + 1 + local ry = area.right_bottom.y - area.left_top.y + 1 + local half_x = math.floor(rx / 2) + local half_y = math.floor(ry / 2) + local center_x = area.left_top.x + half_x + local center_y = area.left_top.y + half_y + + local x = 0 + local y = 0 + local dx = 0 + local dy = -1 + local iterator = {list = {}, idx = 1} + for _ = 1, math.max(rx, ry) * math.max(rx, ry) do + if - (half_x) <= x and x <= half_x and - (half_y) <= y and y <= half_y then + table.insert(iterator.list, {x, y}) + end + if x == y or (x < 0 and x == -y) or (x > 0 and x == 1 - y) then + local temp = dx + dx = -(dy) + dy = temp + end + x = x + dx + y = y + dy + end + + function iterator.iterate() + if #iterator.list < iterator.idx then return end + local x2, y2 = unpack(iterator.list[iterator.idx]) + iterator.idx = iterator.idx + 1 + + return (center_x + x2), (center_y + y2) + end + return iterator.iterate, Area.to_table(area), 0 +end + +--- Creates a new area, a modified copy of the original, such that left and right x, up and down y are normalized, where left.x < right.x, left.y < right.y order +-- @param area the area to adjust +-- @return a normalized area, always { left_top = {x = ..., y = ...}, right_bottom = {x = ..., y = ...} } +function Area.normalize(area) + Core.fail_if_missing(area, "missing area value") + area = Area.to_table(area) + + local left_top = Position.copy(area.left_top) + local right_bottom = Position.copy(area.right_bottom) + + if right_bottom.x < left_top.x then + local x = left_top.x + left_top.x = right_bottom.x + right_bottom.x = x + end + if right_bottom.y < left_top.y then + local y = left_top.y + left_top.y = right_bottom.y + right_bottom.y = y + end + + return Area.construct(left_top.x, left_top.y, right_bottom.x, right_bottom.y) +end + +--- Creates a new area, a modified copy of the original, such that left and right x, up and down y are normalized, where left.x < right.x, left.y < right.y order +-- Deprecated, Area.adjust is ambigious. See: Area.normalize +-- @param area the area to adjust +-- @return a adjusted area, always { left_top = {x = ..., y = ...}, right_bottom = {x = ..., y = ...} } +function Area.adjust(area) + return Area.normalize(area) +end + +--- Converts an area in the array format to an array in the table format +-- @param area_arr the area to convert +-- @return a converted area, { left_top = area_arr[1], right_bottom = area_arr[2] } +function Area.to_table(area_arr) + Core.fail_if_missing(area_arr, "missing area value") + if #area_arr == 2 then + return { left_top = Position.to_table(area_arr[1]), right_bottom = Position.to_table(area_arr[2]) } + end + return area_arr +end + +return Area diff --git a/space-exploration_0.5.80/space-exploration/stdlib/area/chunk.lua b/space-exploration_0.5.80/space-exploration/stdlib/area/chunk.lua new file mode 100644 index 0000000..fe9f497 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/stdlib/area/chunk.lua @@ -0,0 +1,108 @@ +--- Chunk module +---

A chunk represents a 32x32 area of a surface in factorio.

+-- @module Chunk + +local Core = require 'stdlib/core' +local Position = require 'stdlib/area/position' + +local Chunk = {} +local MAX_UINT = 4294967296 + +--- Calculates the chunk coordinates for the tile position given +-- @param position to calculate the chunk for +-- @return the chunk position as a table +-- @usage +----local chunk_x = Chunk.from_position(pos).x +function Chunk.from_position(position) + position = Position.to_table(position) + local x = math.floor(position.x) + local y = math.floor(position.y) + local chunk_x = bit32.arshift(x, 5) + if x < 0 then + chunk_x = chunk_x - MAX_UINT + end + local chunk_y = bit32.arshift(y, 5) + if y < 0 then + chunk_y = chunk_y - MAX_UINT + end + return {x = chunk_x, y = chunk_y} +end + +--- Converts a chunk to the area it contains +-- @param chunk_pos to convert to an area +-- @return area that chunk is valid for +function Chunk.to_area(chunk_pos) + Core.fail_if_missing(chunk_pos, "missing chunk_pos argument") + chunk_pos = Position.to_table(chunk_pos) + + local left_top = { x = chunk_pos.x * 32, y = chunk_pos.y * 32 } + return { left_top = left_top, right_bottom = Position.offset(left_top, 32, 32) } +end + +--- Gets user data from the chunk, stored in a mod's global data. +---

The data will persist between loads

+-- @param surface the surface to look up data for +-- @param chunk_pos the chunk coordinates to look up data for +-- @param default_value (optional) to set and return if no data exists +-- @return the data, or nil if no data exists for the chunk +function Chunk.get_data(surface, chunk_pos, default_value) + Core.fail_if_missing(surface, "missing surface argument") + Core.fail_if_missing(chunk_pos, "missing chunk_pos argument") + if not global._chunk_data then + if not default_value then return nil end + global._chunk_data = {} + end + + local idx = Chunk.get_index(surface, chunk_pos) + local val = global._chunk_data[idx] + if not val then + global._chunk_data[idx] = default_value + val = default_value + end + + return val, idx +end + +--- Sets user data on the chunk, stored in a mod's global data. +---

The data will persist between loads

+-- @param surface the surface to look up data for +-- @param chunk_pos the chunk coordinates to look up data for +-- @param data the data to set (or nil to erase the data for the chunk) +-- @return the previous data associated with the chunk, or nil if the chunk had no previous data +function Chunk.set_data(surface, chunk_pos, data) + Core.fail_if_missing(surface, "missing surface argument") + Core.fail_if_missing(chunk_pos, "missing chunk_pos argument") + if not global._chunk_data then global._chunk_data = {} end + + local idx = Chunk.get_index(surface, chunk_pos) + local prev = global._chunk_data[idx] + global._chunk_data[idx] = data + + return prev +end + +--- Calculates and returns a stable, deterministic, unique integer id for the given chunk_pos +---

The id will not change once calculated

+-- @param surface the chunk is on +-- @param chunk_pos of the chunk +function Chunk.get_index(surface, chunk_pos) + Core.fail_if_missing(surface, "missing surface argument") + Core.fail_if_missing(chunk_pos, "missing chunk_pos argument") + if not global._next_chunk_index then global._next_chunk_index = 0 end + if not global._chunk_indexes then global._chunk_indexes = {} end + + if type(surface) == "string" then + surface = game.surfaces[surface] + end + local surface_idx = surface.index + if not global._chunk_indexes[surface_idx] then global._chunk_indexes[surface_idx] = {} end + + local surface_chunks = global._chunk_indexes[surface_idx] + if not surface_chunks[chunk_pos.x] then surface_chunks[chunk_pos.x] = {} end + if not surface_chunks[chunk_pos.x][chunk_pos.y] then + surface_chunks[chunk_pos.x][chunk_pos.y] = global._next_chunk_index + global._next_chunk_index = global._next_chunk_index + 1 + end + + return surface_chunks[chunk_pos.x][chunk_pos.y] +end diff --git a/space-exploration_0.5.80/space-exploration/stdlib/area/position.lua b/space-exploration_0.5.80/space-exploration/stdlib/area/position.lua new file mode 100644 index 0000000..58fe60b --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/stdlib/area/position.lua @@ -0,0 +1,205 @@ +--- Position module +-- @module Position + +local Core = require 'stdlib/core' + +local Position = {} + +--- Creates a table representing the position from x and y +-- @param x x-position +-- @param y y-position +-- @return Position +function Position.construct(x, y) + Core.fail_if_missing(x, "missing x position argument") + Core.fail_if_missing(y, "missing y position argument") + return { x = x, y = y } +end + +--- Creates a position that is a copy of the given position +-- @param pos the position to copy +-- @return Position +function Position.copy(pos) + Core.fail_if_missing(pos, "missing position argument") + pos = Position.to_table(pos) + return { x = pos.x, y = pos.y } +end + +--- Creates a position that is offset by x,y coordinate pair +-- @param pos the position to offset +-- @param x the amount to offset the position in the x direction +-- @param y the amount to offset the position in the y direction +-- @return a new position, offset by the x,y coordinates +function Position.offset(pos, x, y) + Core.fail_if_missing(pos, "missing position argument") + Core.fail_if_missing(x, "missing x-coordinate value") + Core.fail_if_missing(y, "missing y-coordinate value") + + if #pos == 2 then + return { x = pos[1] + x, y = pos[2] + y } + else + return { x = pos.x + x, y = pos.y + y } + end +end + +--- Adds 2 positions +-- @param pos1 the first position +-- @param pos2 the second position +-- @return a new position +function Position.add(pos1, pos2) + Core.fail_if_missing(pos1, "missing first position argument") + Core.fail_if_missing(pos2, "missing second position argument") + + pos1 = Position.to_table(pos1) + pos2 = Position.to_table(pos2) + return { x = pos1.x + pos2.x, y = pos1.y + pos2.y} +end + +--- Subtracts 2 positions +-- @param pos1 the first position +-- @param pos2 the second position +-- @return a new position +function Position.subtract(pos1, pos2) + Core.fail_if_missing(pos1, "missing first position argument") + Core.fail_if_missing(pos2, "missing second position argument") + + pos1 = Position.to_table(pos1) + pos2 = Position.to_table(pos2) + return { x = pos1.x - pos2.x, y = pos1.y - pos2.y } +end + +--- Translates a position in the given direction +-- @param pos the position to translate +-- @param direction in which direction to translate (see defines.direction) +-- @param distance distance of the translation +-- @return the translated position +function Position.translate(pos, direction, distance) + Core.fail_if_missing(pos, "missing position argument") + Core.fail_if_missing(direction, "missing direction argument") + Core.fail_if_missing(distance, "missing distance argument") + + pos = Position.to_table(pos) + + if direction == defines.direction.north then + return { x = pos.x, y = pos.y - distance } + elseif direction == defines.direction.northeast then + return { x = pos.x + distance, y = pos.y - distance } + elseif direction == defines.direction.east then + return { x = pos.x + distance, y = pos.y } + elseif direction == defines.direction.southeast then + return { x = pos.x + distance, y = pos.y + distance } + elseif direction == defines.direction.south then + return { x = pos.x, y = pos.y + distance } + elseif direction == defines.direction.southwest then + return { x = pos.x - distance, y = pos.y + distance } + elseif direction == defines.direction.west then + return { x = pos.x - distance, y = pos.y } + elseif direction == defines.direction.northwest then + return { x = pos.x - distance, y = pos.y - distance } + end +end + +--- Expands a position to a square area +-- @param pos the position to expand into an area +-- @param radius half the side length of the area +-- @return a bounding box +function Position.expand_to_area(pos, radius) + Core.fail_if_missing(pos, "missing position argument") + Core.fail_if_missing(radius, "missing radius argument") + + if #pos == 2 then + return { left_top = { x = pos[1] - radius, y = pos[2] - radius }, right_bottom = { x = pos[1] + radius, y = pos[2] + radius } } + end + return { left_top = { x = pos.x - radius, y = pos.y - radius}, right_bottom = { x = pos.x + radius, y = pos.y + radius } } +end + +--- Calculates the Euclidean distance squared between two positions, useful when sqrt is not needed +-- @param pos1 the first position +-- @param pos2 the second position +-- @return the square of the Euclidean distance +function Position.distance_squared(pos1, pos2) + Core.fail_if_missing(pos1, "missing first position argument") + Core.fail_if_missing(pos2, "missing second position argument") + + pos1 = Position.to_table(pos1) + pos2 = Position.to_table(pos2) + local axbx = pos1.x - pos2.x + local ayby = pos1.y - pos2.y + return axbx * axbx + ayby * ayby +end + +--- Calculates the Euclidean distance between two positions +-- @param pos1 the first position +-- @param pos2 the second position +-- @return the square of the Euclidean distance +function Position.distance(pos1, pos2) + Core.fail_if_missing(pos1, "missing first position argument") + Core.fail_if_missing(pos2, "missing second position argument") + + return math.sqrt(Position.distance_squared(pos1, pos2)) +end + +--- Calculates the manhatten distance between two positions +-- @param pos1 the first position +-- @param pos2 the second position +-- @return the square of the Euclidean distance +function Position.manhattan_distance(pos1, pos2) + Core.fail_if_missing(pos1, "missing first position argument") + Core.fail_if_missing(pos2, "missing second position argument") + pos1 = Position.to_table(pos1) + pos2 = Position.to_table(pos2) + + return math.abs(pos2.x - pos1.x) + math.abs(pos2.y - pos1.y) +end + +-- see: https://en.wikipedia.org/wiki/Machine_epsilon +Position._epsilon = 1.19e-07 + +--- Whether 2 positions are equal +-- @param pos1 the first position +-- @param pos2 the second position +-- @return true if positions are equal +function Position.equals(pos1, pos2) + if not pos1 or not pos2 then return false end + -- optimize for a shallow equality check first + if pos1 == pos2 then return true end + + local epsilon = Position._epsilon + local abs = math.abs + if #pos1 == 2 and #pos2 == 2 then + return abs(pos1[1] - pos2[1]) < epsilon and abs(pos1[2] - pos2[2]) < epsilon + elseif #pos1 == 2 and #pos2 == 0 then + return abs(pos1[1] - pos2.x) < epsilon and abs(pos1[2] - pos2.y) < epsilon + elseif #pos1 == 0 and #pos2 == 2 then + return abs(pos1.x - pos2[1]) < epsilon and abs(pos1.y - pos2[2]) < epsilon + elseif #pos1 == 0 and #pos2 == 0 then + return abs(pos1.x - pos2.x) < epsilon and abs(pos1.y - pos2.y) < epsilon + end + + return false +end + +--- Converts a position in the array format to a position in the table format +-- @param pos_arr the position to convert +-- @return a converted position, { x = pos_arr[1], y = pos_arr[2] } +function Position.to_table(pos_arr) + Core.fail_if_missing(pos_arr, "missing position argument") + + if #pos_arr == 2 then + return { x = pos_arr[1], y = pos_arr[2] } + end + return pos_arr +end + +--- Converts a position to a string +-- @param pos the position to convert +-- @return string representation of pos +function Position.tostring(pos) + Core.fail_if_missing(pos, "missing position argument") + if #pos == 2 then + return "Position {x = " .. pos[1] .. ", y = " .. pos[2] .. "}" + else + return "Position {x = " .. pos.x .. ", y = " .. pos.y .. "}" + end +end + +return Position diff --git a/space-exploration_0.5.80/space-exploration/stdlib/area/tile.lua b/space-exploration_0.5.80/space-exploration/stdlib/area/tile.lua new file mode 100644 index 0000000..822010d --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/stdlib/area/tile.lua @@ -0,0 +1,121 @@ +--- Tile module +---

A tile represents a 1x1 area on a surface in factorio +-- @module Tile + +local Core = require 'stdlib/core' +local Position = require 'stdlib/area/position' +local Chunk = require 'stdlib/area/chunk' + +local Tile = {} +--local MAX_UINT = 4294967296 + +--- Calculates the tile coordinates for the position given +-- @param position to calculate the tile for +-- @return the tile position +function Tile.from_position(position) + position = Position.to_table(position) + return {x = math.floor(position.x), y = math.floor(position.y)} +end + +--- Converts a tile position to the area it contains +-- @param tile_pos to convert to an area +-- @return area that tile is valid for +function Tile.to_area(tile_pos) + Core.fail_if_missing(tile_pos, "missing tile_pos argument") + tile_pos = Tile.from_position(tile_pos) + + return { left_top = tile_pos, right_bottom = Position.offset(tile_pos, 1, 1) } +end + +--- Creates a list of tile positions for all adjacent tiles (N, E, S, W) or (N, NE, E, SE, S, SW, W, NW) if diagonal is true +-- @param surface to examine for adjacent tiles +-- @param position the center tile position, to search around +-- @param diagonal (optional: defaults to false) whether to include diagonal tiles +-- @param tile_name (optional) whether to restrict adjacent tiles to one particular tile name (e.g 'water-tile') +-- @return list of tile positions adjacent to the given position +function Tile.adjacent(surface, position, diagonal, tile_name) + Core.fail_if_missing(surface, "missing surface argument") + Core.fail_if_missing(position, "missing position argument") + + local offsets = {{0, 1}, {1, 0}, {0, - 1}, { - 1, 0}} + if diagonal then + offsets = {{0, 1}, {1, 1}, {1, 0}, { - 1, 1}, { - 1, 0}, { - 1, - 1}, {0, - 1}, {1, - 1}} + end + local adjacent_tiles = {} + for _, offset in pairs(offsets) do + local adj_pos = Position.add(position, offset) + if tile_name then + local tile = surface.get_tile(adj_pos.x, adj_pos.y) + if tile and tile.name == tile_name then + table.insert(adjacent_tiles, adj_pos) + end + else + table.insert(adjacent_tiles, adj_pos) + end + end + return adjacent_tiles +end + +--- Gets user data from the tile, stored in a mod's global data. +---

The data will persist between loads

+-- @param surface the surface to look up data for +-- @param tile_pos the tile coordinates to look up data for +-- @param default_value (optional) to set and return if no data exists +-- @return the data, or nil if no data exists for the chunk +function Tile.get_data(surface, tile_pos, default_value) + Core.fail_if_missing(surface, "missing surface argument") + Core.fail_if_missing(tile_pos, "missing tile_pos argument") + if not global._tile_data then + if not default_value then return nil end + global._tile_data = {} + end + local chunk_idx = Chunk.get_index(surface, Chunk.from_position(tile_pos)) + if not global._tile_data[chunk_idx] then + if not default_value then return nil end + global._tile_data[chunk_idx] = {} + end + + local chunk_tiles = global._tile_data[chunk_idx] + if not chunk_tiles then return nil end + + local idx = Tile.get_index(tile_pos) + local val = chunk_tiles[idx] + if not val then + chunk_tiles[idx] = default_value + val = default_value + end + + return val +end + +--- Sets user data on the tile, stored in a mod's global data. +---

The data will persist between loads

+-- @param surface the surface to look up data for +-- @param tile_pos the chunk coordinates to look up data for +-- @param data the data to set (or nil to erase the data for the tile) +-- @return the previous data associated with the tile, or nil if the tile had no previous data +function Tile.set_data(surface, tile_pos, data) + Core.fail_if_missing(surface, "missing surface argument") + Core.fail_if_missing(tile_pos, "missing tile_pos argument") + if not global._tile_data then global._tile_data = {} end + + local chunk_idx = Chunk.get_index(surface, Chunk.from_position(tile_pos)) + if not global._tile_data[chunk_idx] then global._tile_data[chunk_idx] = {} end + + local chunk_tiles = global._tile_data[chunk_idx] + local idx = Tile.get_index(tile_pos) + local prev = chunk_tiles[idx] + chunk_tiles[idx] = data + + return prev +end + +--- Calculates and returns a stable, deterministic integer id for the given tile_pos +---

Tile id will not change once calculated

+---

Tile ids are only unique for the chunk they are in, they may repeat across a surface.

+-- @param tile_pos +-- @return the tile index +function Tile.get_index(tile_pos) + Core.fail_if_missing(tile_pos, "missing tile_pos argument") + return bit32.band(bit32.bor(bit32.lshift(bit32.band(tile_pos.x, 0x1F), 5), bit32.band(tile_pos.y, 0x1F)), 0x3FF) +end diff --git a/space-exploration_0.5.80/space-exploration/stdlib/color/color.lua b/space-exploration_0.5.80/space-exploration/stdlib/color/color.lua new file mode 100644 index 0000000..153e3b2 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/stdlib/color/color.lua @@ -0,0 +1,14 @@ +--- Color module +-- @module Color + +require 'stdlib/color/defines' + +local Color = {} + +function Color.set(color, alpha) + color = color or defines.colors.white + color.a = alpha or 1 + return color +end + +return Color diff --git a/space-exploration_0.5.80/space-exploration/stdlib/color/defines.lua b/space-exploration_0.5.80/space-exploration/stdlib/color/defines.lua new file mode 100644 index 0000000..7079ebb --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/stdlib/color/defines.lua @@ -0,0 +1,38 @@ +--Global color defines. +--@usage: font_color=defines.colors.red to set a styles font color to red. + +defines.colors = { + white = {r = 1.00, g = 1.00, b = 1.00}, + black = {r = 0.00, g = 0.00, b = 0.00}, + darkgrey = {r = 0.25, g = 0.25, b = 0.25}, + grey = {r = 0.50, g = 0.50, b = 0.50}, + lightgrey = {r = 0.75, g = 0.75, b = 0.75}, + red = {r = 1.00, g = 0.00, b = 0.00}, + darkred = {r = 0.50, g = 0.00, b = 0.00}, + lightred = {r = 1.00, g = 0.50, b = 0.50}, + green = {r = 0.00, g = 1.00, b = 0.00}, + darkgreen = {r = 0.00, g = 0.50, b = 0.00}, + lightgreen = {r = 0.50, g = 1.00, b = 0.50}, + blue = {r = 0.00, g = 0.00, b = 1.00}, + darkblue = {r = 0.00, g = 0.00, b = 0.50}, + lightblue = {r = 0.50, g = 0.50, b = 1.00}, + orange = {r = 1.00, g = 0.55, b = 0.10}, + yellow = {r = 1.00, g = 1.00, b = 0.00}, + pink = {r = 1.00, g = 0.00, b = 1.00}, + purple = {r = 0.60, g = 0.10, b = 0.60}, + brown = {r = 0.60, g = 0.40, b = 0.10}, +} +defines.anticolors = { + white = defines.colors.black, black = defines.colors.white, darkgrey = defines.colors.white, + grey = defines.colors.black, lightgrey = defines.colors.black, red = defines.colors.white, + darkred = defines.colors.white, lightred = defines.colors.black, green = defines.colors.black, + darkgreen = defines.colors.white, lightgreen = defines.colors.black, blue = defines.colors.white, + darkblue = defines.colors.white, lightblue = defines.colors.black, orange = defines.colors.black, + yellow = defines.colors.black, pink = defines.colors.white, purple = defines.colors.white, + brown = defines.colors.white, +} +defines.lightcolors = { + white = defines.colors.lightgrey, grey = defines.colors.darkgrey, lightgrey = defines.colors.grey, + red = defines.colors.lightred, green = defines.colors.lightgreen, blue = defines.colors.lightblue, + yellow = defines.colors.orange, pink = defines.colors.purple, +} diff --git a/space-exploration_0.5.80/space-exploration/stdlib/config/config.lua b/space-exploration_0.5.80/space-exploration/stdlib/config/config.lua new file mode 100644 index 0000000..72d343b --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/stdlib/config/config.lua @@ -0,0 +1,180 @@ +--- Config module +-- @module Config +-- luacheck: ignore 143 options reservedCharacters value + +require 'stdlib/string' +require 'stdlib/table' + +----------------------------------------------------------------------- +--Setup repeated code for use in sub functions here +----------------------------------------------------------------------- +local reservedCharacters = '`~!@#$%^&*+=|;:/\\\'",?()[]{}<>' +local testReservedCharacters = function(path) + local reservedCharacters = reservedCharacters + for c in reservedCharacters:gmatch('.') do + if path:find(c, 1, true) then + return c + end + end + return nil +end + +Config = {} + +--- Creates a new Config object +-- to ease the management of a config table. +-- @param config_table [required] The table to be managed. +-- @return the Config instance for managing config_table +-- +-- @usage --[Use a global table for config that persists across game save/loads] +--CONFIG = Config.new(global.testtable) +-- +-- @usage --[You can also create a temporary scratch pad config] +--CONFIG = Config.new({}) -- Temporary scratch pad +-- +-- @usage --[Setting data in Config] +--CONFIG = Config.new(global.testtable) +--CONFIG.set("your.path.here", "myvalue") +-- +-- @usage --[Getting data out of Config] +--CONFIG = Config.new(global.testtable) +--my_data = CONFIG.get("your.path.here") +-- +-- @usage --[Getting data out of Config with a default to use if path is not found in Config] +--CONFIG = Config.new(global.testtable) +--my_data = CONFIG.get("your.path.here", "Your Default here") +-- +-- @usage --[Deleting a path from Config] +--CONFIG = Config.new(global.testtable) +--CONFIG.delete("your.path.here") +-- +-- @usage --[Checking if a path exists in Config] +--CONFIG = Config.new(global.testtable) +--CONFIG.is_set("your.path.here") +function Config.new(config_table) + if not config_table then + error("config_table is a required parameter.", 2) + elseif type(config_table) ~= "table" then + error("config_table must be a table. Was given [" .. type(options) .. "]", 2) + elseif type(config_table.get) == "function" then + error("Config can't manage another Config object", 2) + end + + ----------------------------------------------------------------------- + --Setup the Config object + ----------------------------------------------------------------------- + local Config = {} + + --- Get a stored config value. + -- @param path [required] a string representing the variable to retrieve + -- @param default (optional) value to be used if path is nil + -- @return value at path or nil if not found and no default given + function Config.get(path, default) + if type(path) ~= "string" or path:is_empty() then error("path is invalid", 2) end + + local config = config_table + + local c = testReservedCharacters(path) + if c ~= nil then error("path '" .. path .. "' contains the reserved character '" .. c .. "'", 2) end + + local pathParts = path:split('.') + local part = config; + local value = nil; + + for key = 1, #pathParts, 1 do + local partKey = pathParts[key] + if (type(part) ~= "table") then + value = nil; + break; + end + + value = part[partKey]; + part = part[partKey]; + end + + if (type(value) == "table") then + --Force break references. + return table.deepcopy(value); + elseif (value ~= nil) then + return value; + else + return default; + end + end + + --- Set a stored config value. + -- @param path [required] a string, config path to set + -- @param data (optional) Value to set path to. If nil it behaves identical to Config.delete() + -- @return number 0 on failure; number of affected paths on success + function Config.set(path, data) + if type(path) ~= "string" or path:is_empty() then error("path is invalid", 2) end + + local config = config_table + + local c = testReservedCharacters(path) + if c ~= nil then error("path contains the reserved character '" .. c .. "'", 2) end + + local pathParts = path:split('.') + local part = config; + local value = nil; + + for key = 1, #pathParts - 1, 1 do + local partKey = pathParts[key] + if (type(part[partKey]) ~= "table") then + part[partKey] = {}; + end + + value = part[partKey]; + part = part[partKey]; + end + + part[pathParts[#pathParts]] = data; + + return 1; + end + + --- Delete a stored config value. + -- @param path a string, config path to delete + -- @return number 0 on failure; number of affected paths on success + function Config.delete(path) + if type(path) ~= "string" or path:is_empty() then error("path is invalid", 2) end + + local config = config_table + + local c = testReservedCharacters(path) + if c ~= nil then error("path contains the reserved character '" .. c .. "'", 2) end + + local pathParts = path:split('.') + local part = config + local value = nil + + for key = 1, #pathParts - 1, 1 do + local partKey = pathParts[key] + if (type(part[partKey]) ~= "table") then + return 0 + end + + part = part[partKey] + end + + if part[pathParts[#pathParts]] == nil then + return 0 + else + part[pathParts[#pathParts]] = nil + return 1 + end + end + + --- Test the existence of a stored config value. + -- @param path a string, config path to test + -- @return boolean, true on success, false otherwise + function Config.is_set(path) + if type(path) ~= "string" or path:is_empty() then error("path is invalid", 2) end + + return Config.get(path) ~= nil + end + + return Config +end + +return Config diff --git a/space-exploration_0.5.80/space-exploration/stdlib/core.lua b/space-exploration_0.5.80/space-exploration/stdlib/core.lua new file mode 100644 index 0000000..1cb443f --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/stdlib/core.lua @@ -0,0 +1,20 @@ +--- Core module +-- @module Core + +local Core = {} + +--- Errors if the variable evaluates to false, with an optional msg +-- @param var variable to evaluate +-- @param msg (optional) message +function Core.fail_if_missing(var, msg) + if not var then + if msg then + error(msg, 3) + else + error("Missing value", 3) + end + end + return false +end + +return Core diff --git a/space-exploration_0.5.80/space-exploration/stdlib/data/data.lua b/space-exploration_0.5.80/space-exploration/stdlib/data/data.lua new file mode 100644 index 0000000..87eb70f --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/stdlib/data/data.lua @@ -0,0 +1,63 @@ +--- Data module +-- @module Data +-- luacheck: ignore selection + +local Core = require 'stdlib/core' +require 'stdlib/string' +require 'stdlib/table' + +local Data = {} + +--- Selects all data values where the key matches the selector pattern. +-- The selector pattern is divided into groups. The pattern should have a colon character `:` to denote the selection for each group. +--
The first group is for the class of the data type (item, recipe, entity-type, etc) +--
The second group is for the name of the data element, and is optional. If missing, all elements matching prior groups are returned. +--

For more granular selectors, see other modules, such as Recipe.select. +-- @usage Data.select('recipe') -- returns a table with all recipes +-- @usage Data.select('recipe:steel.*') -- returns a table with all recipes whose name matches 'steel.*' +-- @param pattern to search with +-- @return table containing the elements matching the selector pattern, or an empty table if there was no matches +function Data.select(pattern) + Core.fail_if_missing(pattern, "missing pattern argument") + + local parts = string.split(pattern, ":") + local category_pattern = table.first(parts) + local results = {} + for category, values in pairs(data.raw) do + if string.match(category, category_pattern) then + local element_pattern = #parts > 1 and parts[2] or '.*' + -- escape the '-' in names + element_pattern = string.gsub(element_pattern, "%-", "%%-") + for element_name, element in pairs(values) do + if string.match(element_name, element_pattern) then + table.insert(results, element) + end + end + end + end + setmetatable(results, Data._select_metatable.new(results)) + return results +end + +-- this metatable is set on recipes, to control access to ingredients and results +Data._select_metatable = {} +Data._select_metatable.new = function(selection) + local self = { } + self.__index = function(tbl, key) + if key == 'apply' then + return function(k, v) + table.each(tbl, function(obj) + obj[k] = v + end) + return tbl + end + end + end + self.__newindex = function(tbl, key, value) + table.each(tbl, function(obj) + obj[key] = value + end) + end + + return self +end diff --git a/space-exploration_0.5.80/space-exploration/stdlib/data/protohelpers.lua b/space-exploration_0.5.80/space-exploration/stdlib/data/protohelpers.lua new file mode 100644 index 0000000..57d94a9 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/stdlib/data/protohelpers.lua @@ -0,0 +1,199 @@ +------------------------------------------------------------------------------- +--[[Helper Proto Functions]]-- +local Proto = {} + +--Quickly duplicate an existing prototype into a new one. +function Proto.dupli_proto( type, name1, name2, adaptMiningResult ) + if data.raw[type][name1] then + local proto = table.deepcopy(data.raw[type][name1]) + proto.name = name2 + if adaptMiningResult then + if proto.minable and proto.minable.result then proto.minable.result = name2 end + end + if proto.place_result then proto.place_result = name2 end + if proto.result then proto.result = name2 end + return(proto) + else + error("prototype unknown " .. name1 ) + return(nil) + end +end + +-------------------------------------------------------------------------------------- +--Prettier monolith extracting +function Proto.extract_monolith(filename, x, y, w, h) + return { + type = "monolith", + + top_monolith_border = 0, + right_monolith_border = 0, + bottom_monolith_border = 0, + left_monolith_border = 0, + + monolith_image = { + filename = filename, + priority = "extra-high-no-scale", + width = w, + height = h, + x = x, + y = y, + }, + } +end + +--Define pipe connection pipe pictures, not all entities use these. This function needs some work though. +Proto.pipes = function (pictures, shift_north, shift_south, shift_west, shift_east) + if pictures == "turret" then + shift_north = shift_north or {0, 0} + shift_south = shift_south or {0, 0} + shift_west = shift_west or {0, 0} + shift_east = shift_east or {0, 0} + + return { + north = + { + filename = "__base__/graphics/entity/pipe/pipe-straight-vertical.png", + priority = "extra-high", + width = 44, + height = 42, + shift = shift_north + }, + south = + { + filename = "__base__/graphics/entity/pipe/pipe-straight-vertical.png", + priority = "extra-high", + width = 44, + height = 42, + shift = shift_south + }, + west = + { + filename = "__base__/graphics/entity/pipe/pipe-straight-horizontal.png", + priority = "extra-high", + width = 32, + height = 42, + shift = shift_west + }, + east = + { + filename = "__base__/graphics/entity/pipe/pipe-straight-horizontal.png", + priority = "extra-high", + width = 32, + height = 42, + shift = shift_east + }, + } + else + shift_north = shift_north or {0, 0} + shift_south = shift_south or {0, 0} + shift_west = shift_west or {0, 0} + shift_east = shift_east or {0, 0} + return + { + north = + { + filename = "__base__/graphics/entity/assembling-machine-2/pipe-north.png", + priority = "extra-high", + width = 40, + height = 45, + shift = shift_north + }, + south = + { + filename = "__base__/graphics/entity/assembling-machine-2/pipe-south.png", + priority = "extra-high", + width = 40, + height = 45, + shift = shift_south + }, + west = + { + filename = "__base__/graphics/entity/assembling-machine-2/pipe-west.png", + priority = "extra-high", + width = 40, + height = 45, + shift = shift_west + }, + east = + { + filename = "__base__/graphics/entity/assembling-machine-2/pipe-east.png", + priority = "extra-high", + width = 40, + height = 45, + shift = shift_east + }, + } + end +end + +--Quick to use empty sprite +Proto.empty_sprite ={ + filename = "__core__/graphics/empty.png", + priority = "extra-high", + width = 1, + height = 1 +} + +--Quick to use empty animation +Proto.empty_animation = { + filename = Proto.empty_sprite.filename, + width = Proto.empty_sprite.width, + height = Proto.empty_sprite.height, + line_length = 1, + frame_count = 1, + shift = { 0, 0}, + animation_speed = 1, + direction_count=1 +} + +--return pipe covers for true directions. +Proto.pipe_covers = function(n, s, e, w) + if (n == nil and s == nil and e == nil and w == nil) then + n, s, e, w = true, true, true, true + end + if n == true then n = { + filename = "__base__/graphics/entity/pipe-covers/pipe-cover-north.png", + priority = "extra-high", + width = 44, + height = 32 + } + else + n = Proto.empty_sprite + end + if e == true then + e = { + filename = "__base__/graphics/entity/pipe-covers/pipe-cover-east.png", + priority = "extra-high", + width = 32, + height = 32 + } + else + e = Proto.empty_sprite + end + if s == true then + s = + { + filename = "__base__/graphics/entity/pipe-covers/pipe-cover-south.png", + priority = "extra-high", + width = 46, + height = 52 + } + else + s = Proto.empty_sprite + end + if w == true then + w = + { + filename = "__base__/graphics/entity/pipe-covers/pipe-cover-west.png", + priority = "extra-high", + width = 32, + height = 32 + } + else + w = Proto.empty_sprite + end + + return {north = n, south = s, east = e, west = w} +end + +return Proto diff --git a/space-exploration_0.5.80/space-exploration/stdlib/data/recipe.lua b/space-exploration_0.5.80/space-exploration/stdlib/data/recipe.lua new file mode 100644 index 0000000..d88e409 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/stdlib/data/recipe.lua @@ -0,0 +1,118 @@ +--- Recipe module +-- @module Recipe +-- luacheck: ignore item + +local Core = require 'stdlib/core' +local Data = require 'stdlib/data/data' + +local Recipe = {} + +--- Selects all recipe values where the key matches the selector pattern. +-- The selector pattern is divided into groups. The pattern should have a colon character `:` to denote the selection for each group. +--
The first group is for the name of the recipe element +--
The second group is for the name of keys inside of the recipe element, and is optional. If missing, all elements matching prior groups are returned. +--
The third group is for the name of values inside of the recipe element, and is optional. If missing, all elements matching prior groups are returned. +--

Selectors without a colon `:` separator are assumed to select all values in the first group. +-- @usage Recipe.select('.*') -- returns a table with all recipes, equivalent to Data.select('recipe:.*') +-- @usage Recipe.select('steel.*') -- returns a table with all recipes whose name matches 'steel.*' +-- @usage Recipe.select('steel.*:ingredients') -- returns a table with all ingredients from all recipes whose name matches 'steel.*' +-- @usage Recipe.select('steel.*:ingredients:iron-plate') -- returns a table with all iron-plate ingredient objects, from all recipes whose name matches 'steel.*' +-- @param pattern to search with +-- @return table containing the elements matching the selector pattern, or an empty table if there was no matches +function Recipe.select(pattern) + Core.fail_if_missing(pattern, "missing pattern argument") + + local results = {} + local parts = string.split(pattern, ":") + local inner_field_pattern = #parts > 1 and parts[2] or nil + + if inner_field_pattern then + -- Data.select --> { { recipe }, { recipe } } + for _, recipe in pairs(Data.select('recipe:' .. pattern)) do + for field_key, field_value in pairs(recipe) do + -- field_key --> ingredients, field_value --> { { 'copper-ore', 1} } + if string.match(field_key, inner_field_pattern) then + local contents_field_pattern = #parts > 2 and parts[3] or nil + if contents_field_pattern then + -- escape the '-' in names + contents_field_pattern = string.gsub(contents_field_pattern, "%-", "%%-") + + -- ex: field_value --> { { 'copper-ore', 1} } + for _, content_value in pairs(field_value) do + -- ex: content_value --> { 'copper-ore', 1} + for _, content in pairs(content_value) do + -- ex: content --> 'copper-ore', 1 + if string.match(content, contents_field_pattern) then + Recipe.format_items({recipe}) + table.insert(results, content_value) + end + end + end + else + for _, value in pairs(field_value) do + setmetatable(value, Recipe._item_metatable.new(value)) + table.insert(results, value) + end + end + end + end + end + else + return Recipe.format_items(Data.select('recipe:' .. pattern)) + end + setmetatable(results, Data._select_metatable.new(results)) + return results +end + +-- this metatable is set on recipes, to control access to ingredients and results +Recipe._item_metatable = {} +Recipe._item_metatable.new = function(item) + local self = { } + self.__index = function(tbl, key) + if type(key) == 'number' then + local keys = { 'name', 'amount' } + local val = rawget(tbl, keys[key]) + -- amount defaults to one + if not val and keys[key] == 'amount' then + return 1 + end + return val + elseif type(key) == 'string' then + local keys = { name = 1, amount = 2 } + local val = rawget(tbl, keys[key]) + -- amount defaults to one + if not val and key == 'amount' then + return 1 + end + return val + end + return rawget(tbl, key) + end + + self.__newindex = function(tbl, key, value) + if type(key) == 'number' and #tbl == 0 then + local keys = { 'name', 'amount' } + rawset(tbl, keys[key], value) + elseif type(key) == 'string' and #tbl > 0 then + local keys = { name = 1, amount = 2 } + rawset(tbl, keys[key], value) + else + return rawset(tbl, key, value) + end + end + + return self +end + +function Recipe.format_items(recipes) + recipes = recipes or data.raw.recipe + table.each(recipes, function(recipe) + if recipe.ingredients and type(recipe.ingredients) == 'table' then + table.each(recipe.ingredients, function(ingredient) setmetatable(ingredient, Recipe._item_metatable.new(ingredient)) end) + end + if recipe.results and type(recipe.results) == 'table' then + table.each(recipe.results, function(result) setmetatable(result, Recipe._item_metatable.new(result)) end) + end + end) + return recipes +end diff --git a/space-exploration_0.5.80/space-exploration/stdlib/debug/console.lua b/space-exploration_0.5.80/space-exploration/stdlib/debug/console.lua new file mode 100644 index 0000000..f486b07 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/stdlib/debug/console.lua @@ -0,0 +1,63 @@ +local USE_FALLBACK_INTERFACE = false + +--Console Code from adil modified for use with STDlib +require("stdlib.gui.gui") + +local function create_gui_player(player) + if player.gui.left.console then player.gui.left.console.destroy() end + local c=player.gui.left.add{type='frame',name='console',direction='horizontal'} + local t = c.add{type='textfield',name='console_line'} + t.style.minimal_width=600 + t.style.maximal_width=600 + c.add{type='button', name='console_enter',caption='<', tooltip="Run Script"} + c.add{type='button', name='console_clear', caption='C', tooltip="Clear Input"} + c.add{type='button', name ='console_close', caption="X", tooltip="Close"} +end + +--console.create_gui = function(player) +local function create_gui(player) + --if not sent with a player, then enable for all players? + if not (player and player.valid) then + for _, cur_player in pairs(game.players) do + create_gui_player(cur_player) + end + else + create_gui_player(player) + end +end + +local function handler(event) + local i=event.element.player_index + local p=game.players[event.player_index] + --if second then second=false return end + local s=p.gui.left.console.console_line.text + assert(loadstring(s))() + game.write_file('console.log',s..'\n',true,i) +end +Gui.on_click("console_enter", handler) + +local function close(event) + local p = game.players[event.player_index] + p.gui.left.console.destroy() +end +Gui.on_click("console_close", close) + +local function clear(event) + local p = game.players[event.player_index] + p.gui.left.console.console_line.text = "" +end +Gui.on_click("console_clear", clear) + +--Fallback interface --- set USE_FALLBACK_INTERACE = true and +--just using a require("path.to.console") in your control will +--create the console interface, this interface is only recomended for local testing. +--If more then 1 mod adds it, the first mod to add it will be the enviorment used +if USE_FALLBACK_INTERFACE and not remote.interfaces.console then + remote.add_interface("console", {show = function(player) create_gui(player) end}) +end + +--return the create_gui function +--example usage: +--remote.add_interface("my_interface", {show=require("path.to.console")}) +--/c remote.call("my_interface", "show", game.player) +return create_gui diff --git a/space-exploration_0.5.80/space-exploration/stdlib/debug/debug.lua b/space-exploration_0.5.80/space-exploration/stdlib/debug/debug.lua new file mode 100644 index 0000000..070d32e --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/stdlib/debug/debug.lua @@ -0,0 +1,27 @@ +--This is horrendous.. What was I thinking + +local function print_log(msg, level) + local fullname = MOD.fullname or MOD.name or "Error" + level = math.max(level or 0, ((global and global.config and global.config.loglevel) or MOD.config.control.loglevel or 0)) + if (level > 0) then + if (level >= 1) then + if type(msg) == "table" then + MOD.logfile.log(serpent.block(msg, {comment=false})) + else + MOD.logfile.log(tostring(msg)) + end + end + if (level >= 2) then + local message = fullname .. ": " .. serpent.line(msg, {comment = false}) + if game and game.players[1] then + game.print(message) + elseif global then + global._mess_queue = global._mess_queue or {} + local queue = global._mess_queue + queue[#queue+1] = message + end + end + end +end + +return print_log diff --git a/space-exploration_0.5.80/space-exploration/stdlib/debug/quickstart.lua b/space-exploration_0.5.80/space-exploration/stdlib/debug/quickstart.lua new file mode 100644 index 0000000..c67c3de --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/stdlib/debug/quickstart.lua @@ -0,0 +1,79 @@ +--luacheck: no global +require("stdlib.event.event") +require("stdlib.config.config") + +local QS = Config.new(QS or (MOD and MOD.config and MOD.config.quickstart) or {}) + +if remote.interfaces["quickstart-script"] then + if game then game.print("Existing quickstart script - "..remote.call("quickstart-script", "creative_mode_quickstart_registered_to")) end + return remote.call("quickstart-script", "registered_to") +end +local qs_interface = {} +qs_interface.creative_mode_quickstart_registerd_to = function() + game.print(QS.get("mod_name", "not-set")) + return QS.get("mod_name", "not-set") +end +qs_interface.registered_to = function() + return (MOD and MOD.name) or QS.get("mod_name", "not-set") +end +remote.add_interface("quickstart-script", qs_interface) + +local Area=require("stdlib.area.area") +--local quickstart = {} +quickstart = {} +--quickstart.map = require("test") +function quickstart.on_player_created(event) + if #game.players == 1 then + local player = game.players[event.player_index] + + if QS.get("clear_items", false) then + player.clear_items_inside() + end + + local simple_stacks = QS.get("stacks", {}) + + for _, item in pairs(simple_stacks) do + if game.item_prototypes[item] then + player.insert(item) + end + end + + if QS.get("power_armor", true) then + --Put on power armor, install equipment + local inv = player.get_inventory(defines.inventory.player_armor) + inv.insert("power-armor-mk2") + local armor = inv[1].grid + armor.put{name="fusion-reactor-equipment"} + armor.put{name="personal-roboport-equipment"} + end + + local surface = player.surface + local area = QS.get("area_box", {{-100, -100}, {100, 100}}) + + if QS.get("disable_rso_starting", false) and remote.interfaces["RSO"] and remote.interfaces["RSO"]["disableStartingArea"] then + remote.call("RSO", "disableStartingArea") + end + if QS.get("disable_rso_chunk", false) and remote.interfaces["RSO"] and remote.interfaces["RSO"]["disableChunkHandler"] then + remote.call("RSO", "disableChunkHandler") + end + if QS.get("destroy_everything", true) then + for _, entity in pairs(surface.find_entities(area)) do + if entity.name ~= "player" then + entity.destroy() + end + end + end + + if QS.get("floor_tile", true) then + local tiles = {} + for x, y in Area.spiral_iterate(area) do + tiles[#tiles+1]={name=QS.get("floor_tile", "concrete"), position={x=x, y=y}} + end + surface.set_tiles(tiles, true) + --surface.set_tiles(quickstart.map, true) + end + end +end +Event.register(defines.events.on_player_created, quickstart.on_player_created) + +return quickstart diff --git a/space-exploration_0.5.80/space-exploration/stdlib/entity/entity.lua b/space-exploration_0.5.80/space-exploration/stdlib/entity/entity.lua new file mode 100644 index 0000000..17ceb0d --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/stdlib/entity/entity.lua @@ -0,0 +1,154 @@ +--- Entity module +-- @module Entity + +local Core = require 'stdlib/core' +local Area = require 'stdlib/area/area' + +local Entity = {} + +--- Converts an entity and its selection_box to the area around it +-- @param entity to convert to an area +-- @return area that entity selection_box is valid for +function Entity.to_selection_area(entity) + Core.fail_if_missing(entity, "missing entity argument") + + local pos = entity.position + local bb = entity.prototype.selection_box + return Area.offset(bb, pos) +end + +--- Converts an entity and its collision_box to the area around it +-- @param entity to convert to an area +-- @return area that entity collision_box is valid for +function Entity.to_collision_area(entity) + Core.fail_if_missing(entity, "missing entity argument") + + local pos = entity.position + local bb = entity.prototype.collision_box + return Area.offset(bb, pos) +end + +--- Tests whether an entity has access to the field +-- @param entity to test field access +-- @param field_name that should be tested for +-- @return true if the entity has access to the field, false if the entity threw an exception accessing the field +function Entity.has(entity, field_name) + Core.fail_if_missing(entity, "missing entity argument") + Core.fail_if_missing(field_name, "missing field name argument") + + local status = pcall(function() return entity[field_name]; end) + return status +end + +--- Gets user data from the entity, stored in a mod's global data. +---

The data will persist between loads, and will be removed for an entity when it becomes invalid

+-- @param entity the entity to look up data for +-- @return the data, or nil if no data exists for the entity +function Entity.get_data(entity) + Core.fail_if_missing(entity, "missing entity argument") + if not global._entity_data then return nil end + + local unit_number = entity.unit_number + if unit_number then + return global._entity_data[unit_number] + else + local entity_name = entity.name + if not global._entity_data[entity_name] then return nil end + + local entity_category = global._entity_data[entity_name] + for _, entity_data in pairs(entity_category) do + if Entity._are_equal(entity_data.entity, entity) then + return entity_data.data + end + end + return nil + end +end + +--- Sets user data on the entity, stored in a mod's global data. +---

The data will persist between loads, and will be removed for an entity when it becomes invalid

+-- @param entity the entity to set data for +-- @param data the data to set, or nil to delete the data associated with the entity +-- @return the previous data associated with the entity, or nil if the entity had no previous data +function Entity.set_data(entity, data) + Core.fail_if_missing(entity, "missing entity argument") + + if not global._entity_data then global._entity_data = {} end + + local unit_number = entity.unit_number + if unit_number then + local prev = global._entity_data[unit_number] + global._entity_data[unit_number] = data + return prev + else + local entity_name = entity.name + if not global._entity_data[entity_name] then + global._entity_data[entity_name] = {} + end + + local entity_category = global._entity_data[entity_name] + + for i = #entity_category, 1, -1 do + local entity_data = entity_category[i] + if not entity_data.entity.valid then + table.remove(entity_category, i) + end + if Entity._are_equal(entity_data.entity, entity) then + local prev = entity_data.data + if data then + entity_data.data = data + else + table.remove(entity_category, i) + end + return prev + end + end + table.insert(entity_category, { entity = entity, data = data }) + end + return nil +end + +--- Freezes an entity, by making it inactive, inoperable, and non-rotatable, or unfreezes by doing the reverse. +-- @param entity the entity to freeze or unfreeze +-- @param mode (optional) if true, freezes the entity, if false, unfreezes the entity. If not specified, is true. +-- @return entity passed into it +function Entity.set_frozen(entity, mode) + Core.fail_if_missing(entity, "missing entity argument") + mode = mode == false and true or false + entity.active = mode + entity.operable = mode + entity.rotatable = mode + return entity +end + +--- Makes an entity indestructible, so that it can not be damaged or mined by the player or enemy factions +-- @param entity the entity to set indestructible +-- @param mode (optional) if true, makes the entity indestructible, if false, makes the entity destructable. If not specified, is true. +-- @return entity passed into it +function Entity.set_indestructible(entity, mode) + Core.fail_if_missing(entity, "missing entity argument") + mode = mode == false and true or false + entity.minable = mode + entity.destructible = mode + return entity +end + +--- Tests if two entities are equal +--

If they don't have reference equality and entity_a has an 'equals' function, +-- it will be called with entity_b as the first argument

+-- @tparam table entity_a +-- @tparam table entity_b +-- @treturn bool +function Entity._are_equal(entity_a, entity_b) + if entity_a == nil then + return entity_a == entity_b + elseif entity_a == entity_b then + return true + elseif Entity.has(entity_a, "equals") and entity_a.equals ~= nil then + return entity_a.equals(entity_b) + else + return false + end +end + +return Entity diff --git a/space-exploration_0.5.80/space-exploration/stdlib/entity/inventory.lua b/space-exploration_0.5.80/space-exploration/stdlib/entity/inventory.lua new file mode 100644 index 0000000..ea4bbbf --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/stdlib/entity/inventory.lua @@ -0,0 +1,41 @@ +--- Inventory module +-- @module Inventory +-- luacheck: ignore cur_stack + +local Core = require 'stdlib/core' + +local Inventory = {} + +--- Copies an inventory contents to a destination inventory +-- Deprecated, refer to https://github.com/Afforess/Factorio-Stdlib/issues/66 for details. +-- @param src source inventory to copy from +-- @param dest destination inventory, to copy to +-- @return an array of SimpleItemStacks of left over items that could not be copied. +function Inventory.copy_inventory(src, dest) + Core.fail_if_missing(src, "missing source inventory") + Core.fail_if_missing(dest, "missing destination inventory") + + local left_over = {} + for i = 1, #src do + local stack = src[i] + if stack and stack.valid and stack.valid_for_read then + local copy_of_item_stack = { name = stack.name, count = stack.count, health = stack.health or nil, durability = stack.durability or nil } + -- allow valid/valid_for_read calls, without setting the real fields + setmetatable(copy_of_item_stack, { __index = { valid = true, valid_for_read = true }}) + + -- ammo is a special case field, accessing it on non-ammo itemstacks causes an exception + if stack.prototype.ammo_type then + copy_of_item_stack.ammo = stack.ammo or nil + end + + local inserted = dest.insert(copy_of_item_stack) + local amt_not_inserted = stack.count - inserted + if amt_not_inserted > 0 then + table.insert(left_over, cur_stack) + end + end + end + return left_over +end + +return Inventory diff --git a/space-exploration_0.5.80/space-exploration/stdlib/event/event.lua b/space-exploration_0.5.80/space-exploration/stdlib/event/event.lua new file mode 100644 index 0000000..d164bb7 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/stdlib/event/event.lua @@ -0,0 +1,128 @@ +--- Event module +-- @module Event + +local Core = require 'stdlib/core' +local Game = require 'stdlib/game' + +Event = { + _registry = {}, + core_events = { + init = -1, + load = -2, + configuration_changed = -3, + _register = function(id) + if id == Event.core_events.init then + script.on_init( + function() + Event.dispatch({name = Event.core_events.init, tick = game.tick}) + end + ) + elseif id == Event.core_events.load then + script.on_load( + function() + Event.dispatch({name = Event.core_events.load, tick = -1}) + end + ) + elseif id == Event.core_events.configuration_changed then + script.on_configuration_changed( + function(data) + Event.dispatch({name = Event.core_events.configuration_changed, tick = game.tick, data = data}) + end + ) + end + end + } +} + +--- Registers a function for a given event +-- @param event or array containing events to register +-- @param handler Function to call when event is triggered +-- @return #Event +function Event.register(event, handler) + Core.fail_if_missing(event, "missing event argument") + + if type(event) == "number" then + event = {event} + end + + for _, event_id in pairs(event) do + Core.fail_if_missing(event_id, "missing event id") + if handler == nil then + Event._registry[event_id] = nil + script.on_event(event_id, nil) + else + if not Event._registry[event_id] then + Event._registry[event_id] = {} + + if event_id >= 0 then + script.on_event(event_id, Event.dispatch) + else + Event.core_events._register(event_id) + end + end + table.insert(Event._registry[event_id], handler) + end + end + return Event +end + +--- Calls the registerd handlers +-- @param event LuaEvent as created by game.raise_event +function Event.dispatch(event) + Core.fail_if_missing(event, "missing event argument") + if Event._registry[event.name] then + log(event.name .. "=" .. #Event._registry[event.name]) + for _, handler in pairs(Event._registry[event.name]) do + local metatbl = { __index = function(tbl, key) if key == '_handler' then return handler else return rawget(tbl, key) end end } + setmetatable(event, metatbl) + local success, err = pcall(handler, event) + if not success then + -- may be nil in on_load + if _G.game then + if Game.print_all(err) == 0 then + -- no players received the message, force a real error so someone notices + error(err) + end + else + -- no way to handle errors cleanly when the game is not up + error(err) + end + return + end + if err then + return + end + end + end +end + +--- Removes the handler from the event +-- @param event event or array containing events to remove the handler +-- @param handler to remove +-- @return #Event +function Event.remove(event, handler) + Core.fail_if_missing(event, "missing event argument") + Core.fail_if_missing(handler, "missing handler argument") + + if type(event) == "number" then + event = {event} + end + + for _, event_id in pairs(event) do + Core.fail_if_missing(event_id, "missing event id") + if Event._registry[event_id] then + for i=#Event._registry[event_id], 1, -1 do + if Event._registry[event_id][i] == handler then + table.remove(Event._registry[event_id], i) + end + end + if #Event._registry[event_id] == 0 then + Event._registry[event_id] = nil + script.on_event(event_id, nil) + end + end + end + return Event +end + +return Event diff --git a/space-exploration_0.5.80/space-exploration/stdlib/event/time.lua b/space-exploration_0.5.80/space-exploration/stdlib/event/time.lua new file mode 100644 index 0000000..e2f3f42 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/stdlib/event/time.lua @@ -0,0 +1,76 @@ +--- Time Event module +-- @module Event.Time + +require 'stdlib/event/event' + +Event.Time = {} +--Event.Time._last_change = {} + +--All times are offset by 0.5 +--This is because both EvoGUI and MoWeather already apply that offset. +--Following the precedent to remain consistent. +--Actually, this little snippet is even borrowed from EvoGUI. +if remote.interfaces.MoWeather then + -- assume MoWeather's getdaytime is sane + function Event.Time.get_day_time(surface_name_or_index) return remote.call("MoWeather", "getdaytime", surface_name_or_index) end +else + -- 0.5 is midnight; let's make days *start* at midnight instead. + function Event.Time.get_day_time(surface_name_or_index) return game.surfaces[surface_name_or_index].daytime + 0.5 end +end + +--- @field Fires whenever it becomes midday/noon on a surface +Event.Time.midday = script.generate_event_name() +--- @field Fires whenever it becomes midnight on a surface +Event.Time.midnight = script.generate_event_name() +--- @field Fires whenever the sunrises on a surface +Event.Time.sunrise = script.generate_event_name() +--- @field Fires whenever the sunsets on a surface +Event.Time.sunset = script.generate_event_name() +--- @field Fires every hour for a surface +Event.Time.hourly = script.generate_event_name() +--- @field Fires every minute for a surface +Event.Time.minutely = script.generate_event_name() +--- @field Fires every day for a surface +Event.Time.daily = script.generate_event_name() + +Event.register(defines.events.on_tick, + function() + for idx, surface in pairs(game.surfaces) do + local day_time = math.fmod(Event.Time.get_day_time(idx), 1) + local day_time_minutes = math.floor(day_time * 24 * 60) + + global._last_time_change = global._last_time_change or {} + if day_time_minutes ~= global._last_time_change[idx] then + global._last_time_change[idx] = day_time_minutes + game.raise_event(Event.Time.minutely, {surface = surface}) + + if day_time_minutes % 60 == 0 then + game.raise_event(Event.Time.hourly, {surface = surface}) + end + + if day_time_minutes == 0 then + game.raise_event(Event.Time.daily, {surface = surface}) + game.raise_event(Event.Time.midnight, {surface = surface}) + end + + -- These are not 100% accurate but within 5-10 Nauvis minutes of the real thing. + -- 105 (1:45AM) Brightness starts to increase + -- 265 (4:25AM) Flashlight clicks off + if day_time_minutes == 265 then + game.raise_event(Event.Time.sunrise, {surface = surface}) + end + + if day_time_minutes == 720 then + game.raise_event(Event.Time.midday, {surface = surface}) + end + + -- These are not 100% accurate but within 5-10 Nauvis minutes of the real thing. + -- 1070 (5:50PM) Brightness starts to decrease + -- 1160 (7:20PM) Flashlight clicks on + if day_time_minutes == 1160 then + game.raise_event(Event.Time.sunset, {surface = surface}) + end + end + end + end +) diff --git a/space-exploration_0.5.80/space-exploration/stdlib/force.lua b/space-exploration_0.5.80/space-exploration/stdlib/force.lua new file mode 100644 index 0000000..9dd43c6 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/stdlib/force.lua @@ -0,0 +1,46 @@ +------------------------------------------------------------------------------- +--[[Force]] +------------------------------------------------------------------------------- +require("stdlib/event/event") +local Force = {} + +function Force.get_object_and_data(name) + if game.forces[name] then + return game.forces[name], global.forces[name] + end +end + +function Force.new(force_name) + local obj = { + index = force_name, + } + return obj +end + +function Force.add_data_all(data) + local fdata = global.forces + table.each(fdata, function(v) table.merge(v, table.deepcopy(data)) end) +end + +function Force.init(event, overwrite) + global.forces = global.forces or {} + local fdata = global.forces or {} + if event and event.force.name then + if not fdata[event.force.name] or (fdata[event.force.name] and overwrite) then + fdata[event.force.name] = Force.new(event.force.name) + end + else + for name in pairs(game.forces) do + if not fdata[name] or (fdata[name] and overwrite) then + fdata[name] = Force.new(name) + end + end + end +end +Event.register(defines.events.on_force_created, function(event) Force.init(event.force.name) end) + +function Force.merge() +end +Event.register(defines.events.on_forces_merging, Force.merge) + +return Force diff --git a/space-exploration_0.5.80/space-exploration/stdlib/game.lua b/space-exploration_0.5.80/space-exploration/stdlib/game.lua new file mode 100644 index 0000000..bc3fa01 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/stdlib/game.lua @@ -0,0 +1,67 @@ +--- Game module +-- @module Game + +local Game = {} + +Game.VALID_FILTER = function(v) + return v.valid +end + +--- Messages all players currently connected to the game +-- @param msg message to send to players +-- @param condition (optional) optional condition to be true for the player to be messaged +-- @return the number of players who received the message. Offline players are not counted as having received the message. +function Game.print_all(msg, condition) + local num = 0 + for _, player in pairs(game.players) do + if player.valid then + if condition == nil or select(2, pcall(condition, player)) then + player.print(msg) + if player.connected then + num = num + 1 + end + end + end + end + return num +end + +--- Messages all players with the given force connected to the game +-- Deprecated for Factorio 0.14+, see force.print(msg) instead. +-- @param force (may be force name string, or force object) the players with the given force to message +-- @param msg message to send to players +-- @return the number of players who received the message +function Game.print_force(force, msg) + local force_name + if type(force) == "string" then + force_name = force + else + force_name = force.name + end + return Game.print_all(msg, + function(player) + return player.force.name == force_name + end + ) +end + +--- Messages all players with the given surface connected to the game +-- Deprecated for Factorio 0.14+, see surface.print(msg) instead. +-- @param surface the players with the given surface to message +-- @param msg message to send to players +-- @return the number of players who received the message +function Game.print_surface(surface, msg) + local surface_name + if type(surface) == "string" then + surface_name = surface + else + surface_name = surface.name + end + return Game.print_all(msg, + function(player) + return player.surface.name == surface_name + end + ) +end + +return Game diff --git a/space-exploration_0.5.80/space-exploration/stdlib/gui/gui.lua b/space-exploration_0.5.80/space-exploration/stdlib/gui/gui.lua new file mode 100644 index 0000000..a6deda9 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/stdlib/gui/gui.lua @@ -0,0 +1,144 @@ +--- Gui module +-- @module Gui + +require 'stdlib/event/event' +local Core = require 'stdlib/core' + +Gui = {} +-- Factorio's gui events are so monolithic we need a special event system for it. +Gui.Event = { + _registry = {}, + _dispatch = {} +} + +--- Registers a function for a given event and matching gui element pattern +-- @param event Valid values are defines.event.on_gui_* +-- @param gui_element_pattern the name or string regular expression to match the gui element +-- @param handler Function to call when event is triggered +-- @return #Gui.Event +function Gui.Event.register(event, gui_element_pattern, handler) + Core.fail_if_missing(event, "missing event name argument") + Core.fail_if_missing(gui_element_pattern, "missing gui name or pattern argument") + + if type(gui_element_pattern) ~= "string" then + error("gui_element_pattern argument must be a string") + end + + if handler == nil then + Gui.Event.remove(event, gui_element_pattern) + return Gui.Event + end + + if not Gui.Event._registry[event] then + Gui.Event._registry[event] = {} + end + Gui.Event._registry[event][gui_element_pattern] = handler + + -- Use custom Gui event dispatcher to pass off the event to the correct sub-handler + if not Gui.Event._dispatch[event] then + Event.register(event, Gui.Event.dispatch) + Gui.Event._dispatch[event] = true + end + + return Gui.Event +end + +--- Calls the registered handlers +-- @param event LuaEvent as created by game.raise_event +function Gui.Event.dispatch(event) + Core.fail_if_missing(event, "missing event argument") + + local gui_element = event.element + if gui_element and gui_element.valid then + local gui_element_name = gui_element.name; + local gui_element_state = nil; + local gui_element_text = nil; + + if event.name == defines.events.on_gui_checked_state_changed then + gui_element_state = gui_element.state + end + + if event.name == defines.events.on_gui_text_changed then + gui_element_text = gui_element.text + end + + for gui_element_pattern, handler in pairs(Gui.Event._registry[event.name]) do + local match_str = string.match(gui_element_name, gui_element_pattern) + if match_str ~= nil then + local new_event = { + tick = event.tick, + name = event.name, + _handler = handler, + match = match_str, + element = gui_element, + state = gui_element_state, + text = gui_element_text, + player_index = event.player_index , + _event = event + } + local success, err = pcall(handler, new_event) + if not success then + game.print(err) + end + end + end + end +end + +--- Removes the handler with matching gui element pattern from the event +-- @param event Valid values are defines.event.on_gui_* +-- @param gui_element_pattern the name or string regular expression to remove the handler for +-- @return #Gui.Event +function Gui.Event.remove(event, gui_element_pattern) + Core.fail_if_missing(event, "missing event argument") + Core.fail_if_missing(gui_element_pattern, "missing gui_element_pattern argument") + + if type(gui_element_pattern) ~= "string" then + error("gui_element_pattern argument must be a string") + end + + local function tablelength(T) + local count = 0 + for _ in pairs(T) do count = count + 1 end + return count + end + + if Gui.Event._registry[event] then + if Gui.Event._registry[event][gui_element_pattern] then + Gui.Event._registry[event][gui_element_pattern] = nil + end + if tablelength(Gui.Event._registry[event]) == 0 then + Event.remove(event, Gui.Event.dispatch) + Gui.Event._registry[event] = nil + Gui.Event._dispatch[event] = false + end + end + return Gui.Event +end + +--- Registers a function for a given gui element name or pattern when the element is clicked +-- @param gui_element_pattern the name or string regular expression to match the gui element +-- @param handler Function to call when gui element is clicked +-- @return #Gui +function Gui.on_click(gui_element_pattern, handler) + Gui.Event.register(defines.events.on_gui_click, gui_element_pattern, handler) + return Gui +end + +--- Registers a function for a given gui element name or pattern when the element checked state changes +-- @param gui_element_pattern the name or string regular expression to match the gui element +-- @param handler Function to call when gui element checked state changes +-- @return #Gui +function Gui.on_checked_state_changed(gui_element_pattern, handler) + Gui.Event.register(defines.events.on_gui_checked_state_changed, gui_element_pattern, handler) + return Gui +end + +--- Registers a function for a given gui element name or pattern when the element text changes +-- @param gui_element_pattern the name or string regular expression to match the gui element +-- @param handler Function to call when gui element text changes +-- @return #Gui +function Gui.on_text_changed(gui_element_pattern, handler) + Gui.Event.register(defines.events.on_gui_text_changed, gui_element_pattern, handler) + return Gui +end diff --git a/space-exploration_0.5.80/space-exploration/stdlib/log/logger.lua b/space-exploration_0.5.80/space-exploration/stdlib/log/logger.lua new file mode 100644 index 0000000..2ec988d --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/stdlib/log/logger.lua @@ -0,0 +1,100 @@ +--- Logger module +-- @module Logger + +Logger = {} + +--- Creates a new logger object.

+-- In debug mode, the logger writes immediately. Otherwise the loggers buffers lines. +-- The logger flushes after 60 seconds has elapsed since the last message. +--

+-- When loggers are created, a table of options may be specified. The valid options are: +-- +-- log_ticks -- whether to include the game tick timestamp in logs. Defaults to false. +-- file_extension -- a string that overides the default 'log' file extension. +-- force_append -- each time a logger is created, it will always append, instead of +-- -- the default behavior, which is to write out a new file, then append +-- +-- +-- @usage +--LOGGER = Logger.new('cool_mod_name') +--LOGGER.log("this msg will be logged!") +-- +-- @usage +--LOGGER = Logger.new('cool_mod_name', 'test', true) +--LOGGER.log("this msg will be logged and written immediately in test.log!") +-- +-- @usage +--LOGGER = Logger.new('cool_mod_name', 'test', true, { file_extension = data }) +--LOGGER.log("this msg will be logged and written immediately in test.data!") +-- +-- @param mod_name [required] the name of the mod to create the logger for +-- @param log_name (optional, default: 'main') the name of the logger +-- @param debug_mode (optional, default: false) toggles the debug state of logger. +-- @param options (optional) table with optional arguments +-- @return the logger instance +function Logger.new(mod_name, log_name, debug_mode, options) + if not mod_name then + error("Logger must be given a mod_name as the first argument") + end + if not log_name then + log_name = "main" + end + if not options then + options = {} + end + local Logger = {mod_name = mod_name, log_name = log_name, debug_mode = debug_mode, buffer = {}, last_written = 0, ever_written = false} + + --- Logger options + Logger.options = { + log_ticks = options.log_ticks or false, -- whether to add the ticks in the timestamp, default false + file_extension = options.file_extension or 'log', -- extension of the file, default: log + force_append = options.force_append or false, -- append the file on first write, default: false + } + Logger.file_name = 'logs/' .. Logger.mod_name .. '/' .. Logger.log_name .. '.' .. Logger.options.file_extension + Logger.ever_written = Logger.options.force_append + + --- Logs a message + -- @param msg a string, the message to log + -- @return true if the message was written, false if it was queued for a later write + function Logger.log(msg) + local format = string.format + if _G.game then + local tick = game.tick + local floor = math.floor + local time_s = floor(tick/60) + local time_minutes = floor(time_s/60) + local time_hours = floor(time_minutes/60) + + if Logger.options.log_ticks then + table.insert(Logger.buffer, format("%02d:%02d:%02d.%02d: %s\n", time_hours, time_minutes % 60, time_s % 60, tick - time_s*60, msg)) + else + table.insert(Logger.buffer, format("%02d:%02d:%02d: %s\n", time_hours, time_minutes % 60, time_s % 60, msg)) + end + + -- write the log every minute + if (Logger.debug_mode or (tick - Logger.last_written) > 3600) then + return Logger.write() + end + else + table.insert(Logger.buffer, format("00:00:00: %s\n", msg)) + end + return false + end + + --- Writes out all buffered messages immediately + -- @return true if there any messages were written, false if not + function Logger.write() + if _G.game then + Logger.last_written = game.tick + game.write_file(Logger.file_name, table.concat(Logger.buffer), Logger.ever_written) + Logger.buffer = {} + Logger.ever_written = true + return true + end + return false + end + + return Logger +end + +return Logger diff --git a/space-exploration_0.5.80/space-exploration/stdlib/player.lua b/space-exploration_0.5.80/space-exploration/stdlib/player.lua new file mode 100644 index 0000000..6305014 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/stdlib/player.lua @@ -0,0 +1,50 @@ +------------------------------------------------------------------------------- +--[[Player]] +------------------------------------------------------------------------------- +require("stdlib/event/event") +local Player = {} + +function Player.get_object_and_data(index) + if game.players[index] then + return game.players[index], global.players[index] + end +end + +function Player.new(player_index) + local obj = { + index = player_index, + name = game.players[player_index].name, + } + return obj +end + +function Player.add_data_all(data) + local pdata = global.players + table.each(pdata, function(v) table.merge(v, table.deepcopy(data)) end) +end + +function Player.init(event, overwrite) + global.players = global.players or {} + local pdata = global.players or {} + if event and event.player_index then + if not game.players[event.player_index] then error("Invalid Player") end + if not pdata[event.player_index] or (pdata[event.player_index] and overwrite) then + pdata[event.player_index] = Player.new(event.player_index) + end + else + for index in pairs(game.players) do + if not pdata[index] or (pdata[index] and overwrite) then + pdata[index] = Player.new(index) + end + end + end + if global._mess_queue then + for _, msg in pairs(global._mess_queue) do + game.print(msg) + end + end + global._mess_queue = nil +end +Event.register(defines.events.on_player_created, Player.init) + +return Player diff --git a/space-exploration_0.5.80/space-exploration/stdlib/string.lua b/space-exploration_0.5.80/space-exploration/stdlib/string.lua new file mode 100644 index 0000000..3e05ec8 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/stdlib/string.lua @@ -0,0 +1,80 @@ +--- String module +-- @module string + +--- Returns a copy of the string with any leading or trailing whitespace from the string removed. +-- @param s the string to remove leading or trailing whitespace from +-- @return a copy of the string without leading or trailing whitespace +function string.trim(s) + return (s:gsub("^%s*(.-)%s*$", "%1")) +end + +--- Tests if a string starts with a given substring +-- @param s the string to check for the start substring +-- @param start the substring to test for +-- @return true if the start substring was found in the string +function string.starts_with(s, start) + return string.find(s, start, 1, true) == 1 +end + +--- Tests if a string ends with a given substring +-- @param s the string to check for the end substring +-- @param ends the substring to test for +-- @return true if the end substring was found in the string +function string.ends_with(s, ends) + return #s >= #ends and string.find(s, ends, #s - #ends + 1, true) and true or false +end + +--- Tests if a string contains a given substring +-- @param s the string to check for the substring +-- @param ends the substring to test for +-- @return true if the substring was found in the string +function string.contains(s, ends) + return s and string.find(s, ends) ~= nil +end + +--- Tests whether a string is empty +-- @param s the string to test +function string.is_empty(s) + return s == nil or s == '' +end + +--- Splits a string into a table +--

+-- Note: Empty split substrings are not included in the resulting table. +-- For example, string.split('foo.bar...', '.', false) results in the table {'foo', 'bar'} +-- @param s the string to split +-- @param sep (optional) the separator to use. The period character, `.`, is the default separator. +-- @param pattern whether to interpret the separator as a lua pattern or plaintext for the string split +-- @return the table +function string.split(s, sep, pattern) + sep = sep or "." + sep = sep ~= "" and sep or "." + sep = not pattern and string.gsub(sep, "([^%w])", "%%%1") or sep + + local fields = {} + local start_idx, end_idx = string.find(s, sep) + local last_find = 1 + while start_idx do + local substr = string.sub(s, last_find, start_idx - 1) + if string.len(substr) > 0 then + table.insert(fields, string.sub(s, last_find, start_idx - 1)) + end + last_find = end_idx + 1 + start_idx, end_idx = string.find(s, sep, end_idx + 1) + end + local substr = string.sub(s, last_find) + if string.len(substr) > 0 then + table.insert(fields, string.sub(s, last_find)) + end + return fields +end + +function string.PrettyNumber( number ) + if number < 1000 then + return string.format("%i", number) + elseif number < 1000000 then + return string.format("%.1fk", (number/1000)) + else + return string.format("%.1fm", (number/1000000)) + end +end diff --git a/space-exploration_0.5.80/space-exploration/stdlib/surface.lua b/space-exploration_0.5.80/space-exploration/stdlib/surface.lua new file mode 100644 index 0000000..67c221a --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/stdlib/surface.lua @@ -0,0 +1,102 @@ +--- Surface module +-- @module Surface + +local Core = require 'stdlib/core' +local Area = require 'stdlib/area/area' + +local Surface = {} + +--- Flexible, safe lookup function for surfaces.

+-- May be given a string, the name of a surface, or may be given a table with surface names, +-- may be given the a surface object, or may be given a table of surface objects, or +-- may be given nil.

+-- Returns an array of surface objects of all valid, existing surfaces +-- If a surface does not exist for the surface, it is ignored, if no surfaces +-- are given, an empty array is returned. +-- @param surface to lookup +-- @treturn LuaSurface[] the list of surfaces looked up +function Surface.lookup(surface) + if not surface then + return {} + end + if type(surface) == 'string' then + if game.surfaces[surface] then + return {game.surfaces[surface]} + end + return {} + end + local result = {} + for _, surface_item in pairs(surface) do + if type(surface_item) == 'string' then + if game.surfaces[surface_item] then + table.insert(result, game.surfaces[surface_item]) + end + elseif type(surface_item) == 'table' and surface_item['__self'] then + table.insert(result, surface_item) + end + end + return result +end + +--- Given search criteria, a table that contains a name or type of entity to search for, +-- and optionally surface or force, searches all loaded chunks for the entities that +-- match the critera. +-- @usage +----Surface.find_all_entities({ type = 'unit', surface = 'nauvis', area = {{-1000,20},{-153,2214}}) --returns a list containing all unit entities on the nauvis surface in the given area +-- @tparam table search_criteria a table of criteria. Must contain either the *name* or *type* or *force* of an entity. May contain *surface* or *force* or *area*. +-- @treturn table an array of all entities that matched the criteria +function Surface.find_all_entities(search_criteria) + Core.fail_if_missing(search_criteria, "missing search_criteria argument") + if search_criteria.name == nil and search_criteria.type == nil and search_criteria.force == nil and search_criteria.area == nil then + error("Missing search criteria field: name or type or force or area of entity", 2) + end + + local surface_list = Surface.lookup(search_criteria.surface) + if search_criteria.surface == nil then + surface_list = game.surfaces + end + + local result = {} + + for _, surface in pairs(surface_list) do + local entities = surface.find_entities_filtered( + { + area = search_criteria.area, + name = search_criteria.name, + type = search_criteria.type, + force = search_criteria.force + }) + for _, entity in pairs(entities) do + table.insert(result, entity) + end + end + + return result +end + +--- determine surface extension +-- returns Area covering entire extension of this surface +-- useful, if you compare total number of chunks with number of chunks of this area +-- @tparam LuaSurface surface +-- @treturn table Area +function Surface.get_surface_bounds(surface) + Core.fail_if_missing(surface, "missing surface value") + local x1, y1, x2, y2 = 0, 0, 0, 0 + + for chunk in surface.get_chunks() do + if chunk.x < x1 then + x1 = chunk.x + elseif chunk.x > x2 then + x2 = chunk.x + end + if chunk.y < y1 then + y1 = chunk.y + elseif chunk.y > y2 then + y2 = chunk.y + end + end + + return Area.construct(x1*32, y1*32, x2*32, y2*32) +end + +return Surface diff --git a/space-exploration_0.5.80/space-exploration/stdlib/table.lua b/space-exploration_0.5.80/space-exploration/stdlib/table.lua new file mode 100644 index 0000000..9040b29 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/stdlib/table.lua @@ -0,0 +1,312 @@ +--- Table module +-- @module table +-- luacheck: ignore 432 + +--- Given a mapping function, creates a transformed copy of the table +--- by calling the function for each element in the table, and using +--- the result as the new value for the key. Passes the index as second argument to the function. +--- @usage a= { 1, 2, 3, 4, 5} +---table.map(a, function(v) return v * 10 end) --produces: { 10, 20, 30, 40, 50 } +--- @usage a = {1, 2, 3, 4, 5} +---table.map(a, function(v, k, x) return v * k + x end, 100) --produces { 101, 104, 109, 116, 125} +-- @param tbl to be mapped to the transform +-- @param func to transform values +-- @param[opt] ... additional arguments passed to the function +-- @return a new table containing the keys and mapped values +function table.map(tbl, func, ...) + local newtbl = {} + for i, v in pairs(tbl) do + newtbl[i] = func(v, i, ...) + end + return newtbl +end + +--- Given a filter function, creates a filtered copy of the table +--- by calling the function for each element in the table, and +--- filtering out any key-value pairs for non-true results. Passes the index as second argument to the function. +--- @usage a= { 1, 2, 3, 4, 5} +---table.filter(a, function(v) return v % 2 == 0 end) --produces: { 2, 4 } +--- @usage a = {1, 2, 3, 4, 5} +---table.filter(a, function(v, k, x) return k % 2 == 1 end) --produces: { 1, 3, 5 } +-- @param tbl to be filtered +-- @param func to filter values +-- @param[opt] ... additional arguments passed to the function +-- @return a new table containing the filtered key-value pairs +function table.filter(tbl, func, ...) + local newtbl = {} + local insert = #tbl > 0 + for k, v in pairs(tbl) do + if func(v, k, ...) then + if insert then table.insert(newtbl, v) + else newtbl[k] = v end + end + end + return newtbl +end + +--- Given a candidate search function, iterates over the table, calling the function +--- for each element in the table, and returns the first element the search function returned true. +--- Passes the index as second argument to the function. +--- @usage a= { 1, 2, 3, 4, 5} +---table.find(a, function(v) return v % 2 == 0 end) --produces: 2 +--- @usage a = {1, 2, 3, 4, 5} +---table.find(a, function(v, k, x) return k % 2 == 1 end) --produces: 1 +-- @param tbl to be searched +-- @param func to use to search for any matching element +-- @param[opt] ... additional arguments passed to the function +-- @return the first found value, or nil if none was found +function table.find(tbl, func, ...) + for k, v in pairs(tbl) do + if func(v, k, ...) then + return v, k + end + end + return nil +end + +--- Given a candidate search function, iterates over the table, calling the function +--- for each element in the table, and returns true if search function returned true. +--- Passes the index as second argument to the function. +---
See also: table.find(...) +--- @usage a= { 1, 2, 3, 4, 5} +---table.any(a, function(v) return v % 2 == 0 end) --produces: true +--- @usage a = {1, 2, 3, 4, 5} +---table.any(a, function(v, k, x) return k % 2 == 1 end) --produces: true +-- @param tbl to be searched +-- @param func to use to search for any matching element +-- @param[opt] ... additional arguments passed to the function +-- @return true if an element was found, false if none was found +function table.any(tbl, func, ...) + return table.find(tbl, func, ...) ~= nil +end + +--- Given a function, apply it to each element in the table. Passes the index as second argument to the function. +--

Iteration is aborted if the applied function returns true for any element during iteration. +-- @param tbl to be iterated +-- @param func to apply to values +-- @param[opt] ... additional arguments passed to the function +-- @return the given table +function table.each(tbl, func, ...) + for k, v in pairs(tbl) do + if func(v, k, ...) then + break + end + end + return tbl +end + +--- Returns a new table that is a one-dimensional flattening of this array (recursively). +-- For every element that is an table, extract its elements into the new array. +-- The optional level argument determines the level of recursion to flatten. +--

Note: does not flatten associative elements, only arrays +-- @param tbl to be flattened +-- @param level (optional) recursive levels, or no limit to recursion if not supplied +-- @return a new table that represents the flattened contents of the given table +function table.flatten(tbl, level) + local flattened = {} + table.each(tbl, function(value) + if type(value) == "table" and #value > 0 then + if level then + if level > 0 then + table.merge(flattened, table.flatten(value, level - 1), true) + else + table.insert(flattened, value) + end + else + table.merge(flattened, table.flatten(value), true) + end + else + table.insert(flattened, value) + end + end) + return flattened +end + +--- Given an array, returns the first element or nil if no element exists +-- @param tbl the array +-- @return the first element +function table.first(tbl) + return tbl[1] +end + +--- Given an array, returns the last element or nil if no elements exist +-- @param tbl the array +-- @return the last element +function table.last(tbl) + local size = #tbl + if size == 0 then return nil end + return tbl[size] +end + +--- Given an array of only numeric values, returns the minimum or nil if no element exists +-- @param tbl the array +-- @return the minimum value +function table.min(tbl) + if #tbl == 0 then return nil end + + local min = tbl[1] + for _, num in pairs(tbl) do + min = num < min and num or min + end + return min +end + +--- Given an array of only numeric values, returns the maximum or nil if no element exists +-- @param tbl the array +-- @return the maximum value +function table.max(tbl) + if #tbl == 0 then return nil end + + local max = tbl[1] + for _, num in pairs(tbl) do + max = num > max and num or max + end + return max +end + +--- Given an array of only numeric values, return the sum of all values, or 0 for empty arrays +-- @param tbl the array +-- @return the sum +function table.sum(tbl) + local sum = 0 + for _, num in pairs(tbl) do + sum = sum + num + end + return sum +end + +--- Given an array of only numeric values, returns the average or nil if no element exists +-- @param tbl the array +-- @return the average value +function table.avg(tbl) + local cnt = #tbl + return cnt ~= 0 and table.sum(tbl) / cnt or nil +end + +--- Merges 2 tables, values from first get overwritten by second +--- @usage function some_func(x, y, args) +-- args = table.merge({option1=false}, args) +-- if opts.option1 == true then return x else return y end +-- end +-- some_func(1,2) --returns 2 +-- some_func(1,2,{option1=true}) --returns 1 +-- @param tblA first table +-- @param tblB second table +-- @param array_merge (optional: false) whether to merge the tables as arrays, or associatively +-- @return tblA with merged values from tblB +function table.merge(tblA, tblB, array_merge) + if not tblB then + return tblA + end + if array_merge then + for _, v in pairs(tblB) do + table.insert(tblA, v) + end + + else + for k, v in pairs(tblB) do + tblA[k] = v + end + end + return tblA +end + +-- copied from factorio/data/core/luablib/util.lua + +--- Creates a deep copy of table, not coyping Factorio objects +-- @param object the table to copy +-- @return a copy of the table +function table.deepcopy(object) + local lookup_table = {} + local function _copy(object) + if type(object) ~= "table" then + return object + elseif object.__self then + return object + elseif lookup_table[object] then + return lookup_table[object] + end + local new_table = {} + lookup_table[object] = new_table + for index, value in pairs(object) do + new_table[_copy(index)] = _copy(value) + end + return setmetatable(new_table, getmetatable(object)) + end + return _copy(object) +end + +--- Returns a copy of all of the values in the table +-- @param tbl the table to copy the keys from, or an empty table if the tbl is nil +-- @param sorted (optional) whether to sort the keys (slower) or keep the random order from pairs() +-- @param as_string (optional) whether to try and parse the values as strings, or leave them as their existing type +-- @return an array with a copy of all the values in the table +function table.values(tbl,sorted,as_string) + if not tbl then return {} end + local valueset = {} + local n = 0 + if as_string == true then --checking as_string /before/ looping is faster + for _,v in pairs(tbl) do n = n+1 ; valueset[n] = tostring(v) end + else + for _,v in pairs(tbl) do n = n+1 ; valueset[n] = v end + end + if sorted == true then + table.sort(valueset, function(x,y) --sorts tables with mixed index types. + local tx = type(x) == 'number' + local ty = type(y) == 'number' + if tx == ty then + return x < y and true or false --similar type can be compared + elseif tx == true then + return true --only x is a number and goes first + else + return false --only y is a number and goes first + end + end) + end + return valueset +end + +--- Returns a copy of all of the keys in the table +-- @param tbl the table to copy the keys from, or an empty table if the tbl is nil +-- @param sorted (optional) whether to sort the keys (slower) or keep the random order from pairs() +-- @param as_string (optional) whether to try and parse the keys as strings, or leave them as their existing type +-- @return an array with a copy of all the keys in the table +function table.keys(tbl,sorted,as_string) + if not tbl then return {} end + local keyset = {} + local n = 0 + if as_string == true then --checking as_string /before/ looping is faster + for k,_ in pairs(tbl) do n = n+1 ; keyset[n] = tostring(k) end + else + for k,_ in pairs(tbl) do n = n+1 ; keyset[n] = k end + end + if sorted == true then + table.sort(keyset, function(x,y) --sorts tables with mixed index types. + local tx = type(x) == 'number' + local ty = type(y) == 'number' + if tx == ty then + return x < y and true or false --similar type can be compared + elseif tx == true then + return true --only x is a number and goes first + else + return false --only y is a number and goes first + end + end) + end + return keyset +end + +--- Removes keys from a table (sets them to nil) +-- @usage local a = {1, 2, 3, 4} +--table.remove_keys(a, {1,3} --returns {nil, 2, nil, 4} +-- @usage local b = {k1 = 1, k2 = 'foo', old_key = 'bar'} +--table.remove_keys(b, {'old_key'}) --returns {k1 = 1, k2 = 'foo'} +-- @param tbl the table to remove the keys from +-- @param keys array with the keys to remove +-- @return tbl without the specified keys +function table.remove_keys(tbl, keys) + for i=1, #keys do + tbl[keys[i]] = nil + end + return tbl +end diff --git a/space-exploration_0.5.80/space-exploration/stdlib/time.lua b/space-exploration_0.5.80/space-exploration/stdlib/time.lua new file mode 100644 index 0000000..8f12716 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/stdlib/time.lua @@ -0,0 +1,31 @@ +--- Time module +-- @module Time + +local Time = {} + +--- @field the number of factorio ticks in a second +Time.SECOND = 60 + +--- @field the number of factorio ticks in a minute +Time.MINUTE = Time.SECOND * 60 + +--- @field the number of factorio ticks in an hour +Time.HOUR = Time.MINUTE * 60 + +--- @field the number of factorio ticks in a day +Time.DAY = Time.MINUTE * 60 + +--- @field the number of factorio ticks in a week +Time.WEEK = Time.DAY * 7 + +function Time.FormatTicksToTime( ticks ) + local seconds = ticks / 60 + local minutes = seconds / 60 + local hours = minutes / 60 + return string.format("%02d:%02d:%02d", + math.floor(hours + 0.5), + math.floor(minutes + 0.5) % 60, + math.floor(seconds + 0.5) % 60) +end + +return Time diff --git a/space-exploration_0.5.80/space-exploration/stdlib/trains/trains.lua b/space-exploration_0.5.80/space-exploration/stdlib/trains/trains.lua new file mode 100644 index 0000000..5003992 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/stdlib/trains/trains.lua @@ -0,0 +1,228 @@ +--- Trains module +--

When this module is loaded, it registers new +-- events in order to track trains as locomotives and +-- carriages are moved around. For this reason, you should use +-- this library's Event module

+-- @module Trains + +-- Event registration is performed at the bottom of this file, +-- once all other functions have been defined + +require 'stdlib/event/event' +require 'stdlib/table' +local Surface = require 'stdlib/surface' +local Entity = require 'stdlib/entity/entity' + +local Trains = {} +--- This event is fired when a train's id has changed. +--

Train id's are dervied from a property of the train's main locomotive. +-- That means when locomotives are attached/detached from carriages or other +-- locomotives, the locomotive considered the main one can change, leading to a changed +-- in train id.

+--

For example: a train with a front and back locomotive will get its id +-- from the front locomotive. If that is disconnected, the back locomotive will become +-- the main one and the train's id will change

+--

+-- Event parameters
+-- A table with the following properties: +--

+--

+-- @usage +----Event.register(Trains.on_train_id_changed, my_handler) +Trains.on_train_id_changed = script.generate_event_name() + +-- Finds the distinct trains from an array of locomotive entities +-- @tparam LuaEntity[] locomotives +-- @return List of train details tables for the distinct trains +local function find_distinct_trains(locomotives) + local train_data = {} + for _, engine in pairs(locomotives) do + local t = engine.train + local id = Trains.get_train_id(t) + + local equals_id = function(x) + return x.id == id + end + + local existing = table.filter(train_data, equals_id) + + if #existing == 0 then + table.insert(train_data, { + train = t, + id = id + }) + end + end + + return train_data +end + +--- Given search criteria (a table that contains at least a surface_name) +-- searches the given surface for trains that match the criteria +-- @usage +----Trains.find_filtered({ surface_name = "nauvis", state = defines.train_state.wait_station }) +-- @tparam Table criteria Table with any keys supported by the Surface module.

+--

If the name key isn't supplied, this will default to 'diesel-locomotive'

+--

If the surface key isn't supplied, this will default to 1

+-- @return A list of train details tables, if any are found matching the criteria. Otherwise the empty list.
train (LuaTrain)The LuaTrain instance +--
id (int)The id of the train
+function Trains.find_filtered(criteria) + criteria = criteria or {} + + -- Ensuure surface is set + criteria.surface = criteria.surface or 'nauvis' + + -- Make sure 'locomotive' is specified as the type by default + criteria.type = criteria.type or 'locomotive' + + -- Get locomotives by filter + local locomotives = Surface.find_all_entities(criteria) + + -- Distinguish trains + local train_data = find_distinct_trains(locomotives) + + --- Apply state filters + if criteria.state then + train_data = table.filter(train_data, function(data) + return data.train.state == criteria.state + end) + end + + return train_data +end + +--- Find the id of a LuaTrain instance +-- @tparam LuaTrain train +-- @treturn int +function Trains.get_train_id(train) + local loco = Trains.get_main_locomotive(train) + return loco and loco.unit_number +end + +--- Event fired when some change has happened to a locomotive +-- @return void +function Trains._on_locomotive_changed() + -- For all the known trains + local renames = {} + for id, train in pairs(global._registry) do + -- Check if their known ID is the same as the LuaTrain's dervied id + local derived_id = Trains.get_train_id(train) + -- If it's not + if (id ~= derived_id) then + -- Capture the rename + table.insert(renames, {old_id = id , new_id = derived_id, train = train }) + end + end + + -- Go over the captured renaming operations + for _, renaming in pairs(renames) do + -- Rename it in the registry + -- and dispatch a renamed event + global._registry[renaming.new_id] = renaming.train + table.remove_keys(global._registry, {renaming.old_id}) + + local event_data = { + old_id = renaming.old_id, + new_id = renaming.new_id, + name = Trains.on_train_id_changed + } + Event.dispatch(event_data) + end +end +--- Event fired when a new locomotive has been created +-- @tparam LuaEntity new_locomotive The new entity +-- @return void +function Trains._on_locomotive_created(new_locomotive) + local train_id = Trains.get_train_id(new_locomotive.train) + if (global._registry[train_id] == nil) then + global._registry[train_id] = new_locomotive.train + end +end + +--- Determines which locomotive in a train is the main one +-- @tparam LuaTrain train +-- @treturn LuaEntity the main locomotive +function Trains.get_main_locomotive(train) + if train.valid and + train.locomotives and + (#train.locomotives.front_movers > 0 or #train.locomotives.back_movers > 0) + then + return train.locomotives.front_movers and train.locomotives.front_movers[1] or train.locomotives.back_movers[1] + end +end + +--- Creates an Entity module-compatible entity from a train +-- @tparam LuaTrain train +-- @treturn table +function Trains.to_entity(train) + local name = "train-" .. Trains.get_train_id(train) + return { + name = name, + valid = train.valid, + equals = function(entity) + return name == entity.name + end + } +end + +--- Set user data on a train +--

This is a helper method around Entity.set_data

+-- @tparam LuaTrain train +-- @tparam mixed data +-- @return mixed +function Trains.set_data(train, data) + return Entity.set_data(Trains.to_entity(train), data) +end + +--- Get user data on a train +--

This is a helper method around Entity.get_data

+-- @tparam LuaTrain train +-- @return mixed +function Trains.get_data(train) + return Entity.get_data(Trains.to_entity(train)) +end + +-- Creates a registry of known trains +-- @return table A mapping of train id to LuaTrain object +local function create_train_registry() + local registry = {} + + local all_trains = Trains.find_filtered({surface_name = 1}) + for _, trainInfo in pairs(all_trains) do + registry[tonumber(trainInfo.id)] = trainInfo.train + end + + return registry +end + +-- When developers load this module, we need to +-- attach some new events + +-- Filters events related to entity_type +-- @tparam string event_parameter The event parameter to look inside to find the entity type +-- @tparam string entity_type The entity type to filter events for +-- @tparam callable callback The callback to invoke if the filter passes. The object defined in the event parameter is passed. +local function filter_event(event_parameter, entity_type, callback) + return function(evt) + if(evt[event_parameter].type == entity_type) then + callback(evt[event_parameter]) + end + end +end + +-- When a locomotive is removed .. +Event.register(defines.events.on_entity_died, filter_event('entity', 'locomotive', Trains._on_locomotive_changed)) +Event.register(defines.events.on_preplayer_mined_item, filter_event('entity', 'locomotive', Trains._on_locomotive_changed)) +Event.register(defines.events.on_robot_pre_mined, filter_event('entity', 'locomotive', Trains._on_locomotive_changed)) + +-- When a locomotive is added .. +Event.register(defines.events.on_built_entity, filter_event('created_entity', 'locomotive', Trains._on_locomotive_created)) +Event.register(defines.events.on_robot_built_entity, filter_event('created_entity', 'locomotive', Trains._on_locomotive_created)) + +-- When the mod is initialized the first time +Event.register(Event.core_events.init, function() global._registry = create_train_registry() end) + +return Trains diff --git a/space-exploration_0.5.80/space-exploration/stdlib/utils/list.lua b/space-exploration_0.5.80/space-exploration/stdlib/utils/list.lua new file mode 100644 index 0000000..fa6a49d --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/stdlib/utils/list.lua @@ -0,0 +1,51 @@ +--luacheck: globals List +List = {} + +function List.new () + return {first = 1, last = 0} +end + +function List.count(list) + if list.first > list.last then return 0 + else return list.last - list.first + 1 end +end + +function List.push_left (list, value) + local first = list.first - 1 + list.first = first + list[first] = value +end + +function List.push_right (list, value) + local last = list.last + 1 + list.last = last + list[last] = value +end + +function List.pop_left (list) + local first = list.first + if first > list.last then return nil end + local value = list[first] + list[first] = nil -- to allow garbage collection + list.first = first + 1 + return value +end + +function List.pop_right (list) + local last = list.last + if list.first > last then return nil end + local value = list[last] + list[last] = nil -- to allow garbage collection + list.last = last - 1 + return value +end + +function List.peek_left (list) + return list[list.first] +end + +function List.peek_right (list) + return list[list.last] +end + +return List diff --git a/space-exploration_0.5.80/space-exploration/stdlib/utils/queue.lua b/space-exploration_0.5.80/space-exploration/stdlib/utils/queue.lua new file mode 100644 index 0000000..c35936f --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/stdlib/utils/queue.lua @@ -0,0 +1,80 @@ +------------------------------------------------------------------------------- +--[[Queue]] +------------------------------------------------------------------------------- +local function NtoZ_c(x, y) + return (x >= 0 and x or (-0.5 - x)), (y >= 0 and y or (-0.5 - y)) +end + +local function cantorPair_v7(pos) + local x, y = NtoZ_c(math.floor(pos.x), math.floor(pos.y)) + local s = x + y + local h = s * (s + 0.5) + x + return h + h +end + +local Queue = {} + +function Queue.new() + return {_hash={}} +end + +function Queue.set_hash(t, data) + local index = data.entity.unit_number or cantorPair_v7(data.entity.position) + local hash = t._hash + hash[index] = hash[index] or {} + hash[index].count = (hash[index].count or 0) + 1 + hash[index][data.action] = data.action + return index +end + +function Queue.get_hash(t, entity) + local index = entity.unit_number or cantorPair_v7(entity.position) + return t._hash[index] +end + +function Queue.insert(t, data, tick, count) + data.hash = Queue.set_hash(t, data) + t[tick] = t[tick] or {} + t[tick][#t[tick] + 1] = data + + return t, count +end + +function Queue.next(t, _next_tick, tick_spacing, dont_combine) + tick_spacing = tick_spacing or 1 + local count = 0 + local tick = (_next_tick and _next_tick >= game.tick and _next_tick) or game.tick + local next_tick = function(really_dont_combine) + tick = tick + tick_spacing + while (dont_combine or really_dont_combine) and t[tick] do + tick = tick + 1 + end + count = count + 1 + return tick, count + end + local queue_count = function(num) + count = count + (num or 0) + return count + end + return next_tick, queue_count +end + +--Tick handler, handles executing multiple data tables in a queue +function Queue.execute(event, queue) + if queue[event.tick] then + for _, data in ipairs(queue[event.tick]) do + local hash, index = queue._hash, data.hash + if Queue[data.action] then + Queue[data.action](data) + end + hash[index][data.action] = nil + hash[index].count = hash[index].count - 1 + if hash[index].count <= 0 then + hash[index] = nil + end + end + queue[event.tick] = nil + end +end + +return Queue diff --git a/space-exploration_0.5.80/space-exploration/stdlib/utils/utils.lua b/space-exploration_0.5.80/space-exploration/stdlib/utils/utils.lua new file mode 100644 index 0000000..674fc98 --- /dev/null +++ b/space-exploration_0.5.80/space-exploration/stdlib/utils/utils.lua @@ -0,0 +1,267 @@ +--luacheck: ignore +-- utils.lua by binbinhfr, v1.0.10 + +local author_name1 = "Nexela" +local author_name2 = "Nexela" + +------------------------------------------------------------------------------- +--@return Player Object +-- function Game.get_valid_player(player_or_index) +-- if not player_or_index then +-- if game.player then return game.player +-- elseif game.players[1] then +-- return game.players[1] +-- end +-- elseif type(player_or_index) == "number" or type(player_or_index) == "string" then +-- if game.players[player_or_index] and game.players[player_or_index].valid then +-- return game.players[player_or_index] +-- end +-- elseif type(player_or_index) == "table" and player_or_index.valid then +-- return player_or_index +-- end +-- return false +-- end +-- +-- function Game.valid_force(force) +-- if type(force) == "string" and game.forces[force] and game.forces[force].valid then +-- return true +-- elseif type(force) == "table" and game.forces[force.name] and game.forces[force.name].valid then +-- return true +-- end +-- return false +-- end + +-------------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------------- +function GetNearest( objects, point ) + if #objects == 0 then + return nil + end + + local maxDist = math.huge + local nearest = objects[1] + for _, obj in ipairs(objects) do + local dist = DistanceSqr(point, obj.position) + if dist < maxDist then + maxDist = dist + nearest = obj + end + end + + return nearest +end + +-------------------------------------------------------------------------------------- +function nearest_players( params ) + local origin = params.origin + local max_distance = params.max_distance or 2 + local list = {} + + for playerIndex = 1, #game.players do + local player = game.players[playerIndex] + local distance = util.distance(player.position, origin) + if distance <= max_distance then + table.insert(list, player) + end + end + + return list +end + +-------------------------------------------------------------------------------------- +function flying_text(line, color, pos, surface) + color = color or defines.colors.red + line = line or "missing text" --If we for some reason didn't pass a message make a message + if not pos then + for _, p in pairs(game.players) do + p.surface.create_entity({name="flying-text", position=p.position, text=line, color=color}) + end + return + else + if surface then + surface.create_entity({name="flying-text", position=pos, text=line, color=color}) + end + end +end + +-------------------------------------------------------------------------------------- +function min( val1, val2 ) + if val1 < val2 then + return val1 + else + return val2 + end +end + +-------------------------------------------------------------------------------------- +function max( val1, val2 ) + if val1 > val2 then + return val1 + else + return val2 + end +end + +-------------------------------------------------------------------------------------- +function iif( cond, val1, val2 ) + if cond then + return val1 + else + return val2 + end +end + +-------------------------------------------------------------------------------------- +function table.add_list(list, obj) + -- to avoid duplicates... + for _, obj2 in pairs(list) do + if obj2 == obj then + return(false) + end + end + table.insert(list,obj) + return(true) +end + +-------------------------------------------------------------------------------------- +function table.del_list(list, obj) + for i, obj2 in pairs(list) do + if obj2 == obj then + table.remove( list, i ) + return(true) + end + end + return(false) +end + +-------------------------------------------------------------------------------------- +function table.in_list(list, obj) + for k, obj2 in pairs(list) do + if obj2 == obj then + return(k) + end + end + return(nil) +end + +function table.spairs(t, order) + -- collect the keys + local keys = {} + for k in pairs(t) do keys[#keys+1] = k end + + -- if order function given, sort by it by passing the table and keys a, b, + -- otherwise just sort the keys + if order then + table.sort(keys, function(a,b) return order(t, a, b) end) + else + table.sort(keys) + end + + -- return the iterator function + local i = 0 + return function() + i = i + 1 + if keys[i] then + return keys[i], t[keys[i]] + end + end +end + +------------------------------------------------------------------------------------ +function is_dev(player) + return( player.name == author_name1 or player.name == author_name2 ) +end + +-------------------------------------------------------------------------------------- + +----------------------------------------------------------------------------------- +--Additional Table Helpers + +function table.raw_merge(tblA, tblB, safe_merge) + --safe_merge, only merge tblB[k] does not already exsist in tblA + if safe_merge then + for k, v in pairs(tblB) do + if not rawget(tblA, k) then + rawset(tblA, k, v) + end + end + else + for k, v in pairs(tblB) do + rawset(tblA, k, v) + end + end + return tblA +end + +function table.val_to_str ( v ) + if "string" == type( v ) then + v = string.gsub( v, "\n", "\\n" ) + if string.match( string.gsub(v,"[^'\"]",""), '^"+$' ) then + return "'" .. v .. "'" + else + return '"' .. string.gsub(v,'"', '\\"' ) .. '"' + end + else + return "table" == type( v ) and table.tostring( v ) or + tostring( v ) + + end + end + + function table.key_to_str ( k ) + if "string" == type( k ) and string.match( k, "^[_%a][_%a%d]*$" ) then + return k + else + return "[" .. table.val_to_str( k ) .. "]" + end + end + + function table.tostring( tbl ) + if type(tbl) ~= "table" then return tostring(tbl) end + local result, done = {}, {} + for k, v in ipairs( tbl ) do + table.insert( result, table.val_to_str( v ) ) + done[ k ] = true + end + for k, v in pairs( tbl ) do + if not done[ k ] then + table.insert( result, + table.key_to_str( k ) .. "=" .. table.val_to_str( v ) ) + end + end + return "{" .. table.concat( result, "," ) .. "}" + end + + function table.arraytostring(...) + local s = "" + + for _, v in ipairs({...}) do + s = s .." " .. tostring(v) + end + return s + end + + function table.getvalue(value, tbl) + if tbl==nil or value == nil then return nil end + if type(tbl) ~= "table" then + if tostring(value) == tostring(tbl) then return value else return nil end + end + for _, v in ipairs(tbl) do + if v == value then return v end + end + return nil + end + + function table.add_values(tbl, key, val) + tbl[key] = (tbl[key] or 0) + val + return tbl + end + + function table.getcount(tbl) + local i = 0 + for _,_ in pairs(tbl) do + i = i + 1 + end + return i + end diff --git a/space-exploration_0.5.80/space-exploration/thumbnail.png b/space-exploration_0.5.80/space-exploration/thumbnail.png new file mode 100644 index 0000000..4799d51 Binary files /dev/null and b/space-exploration_0.5.80/space-exploration/thumbnail.png differ