diff --git a/README.md b/README.md index 67b003f..409e4e8 100644 --- a/README.md +++ b/README.md @@ -79,4 +79,8 @@ Unsorted [Krastorio 2 Assets](https://mods.factorio.com/mod/Krastorio2Assets) -- Basic radar \ No newline at end of file +- Basic radar + +[Icons8](https://icons8.com) + +- [Mute icon](https://icons8.com/icon/9414/no-audio) \ No newline at end of file diff --git a/lignumis/graphics/icons/active-noise-cancelling.png b/lignumis/graphics/icons/active-noise-cancelling.png new file mode 100644 index 0000000..c9e44c2 Binary files /dev/null and b/lignumis/graphics/icons/active-noise-cancelling.png differ diff --git a/lignumis/graphics/technology/active-noise-cancelling.png b/lignumis/graphics/technology/active-noise-cancelling.png new file mode 100644 index 0000000..b19a9c8 Binary files /dev/null and b/lignumis/graphics/technology/active-noise-cancelling.png differ diff --git a/lignumis/locale/en/strings.cfg b/lignumis/locale/en/strings.cfg index 2b65731..5186de0 100644 --- a/lignumis/locale/en/strings.cfg +++ b/lignumis/locale/en/strings.cfg @@ -32,6 +32,7 @@ wood-transport-belt=Wood transport belt wood-underground-belt=Wood underground belt wood-splitter=Wood splitter basic-radar=Basic radar +active-noise-cancelling-tower=Active noise cancelling tower [equipment-name] basic-portable-generator-equipment-gold=Basic portable generator equipment (gold) @@ -78,6 +79,7 @@ plastic-from-dead-cupriavidus-necator=Bioplastic low-density-structure-gold=Low density structure rocket-fuel-from-wood-pulp-and-peat=Bio-rocket-fuel nutrients-from-wood-pulp=Nutrients from wood pulp +active-noise-cancelling=Active noise cancelling [recipe-description] moist-stromatolite-remnant-desiccation-without-steam=Used for balancing the production of steam. @@ -105,9 +107,11 @@ automation=Electric automation tree-seeding=Basic agriculture basic-repair-pack=Basic repair pack basic-radar=Basic radar +active-noise-cancelling=Active noise cancelling [technology-description] tree-seeding=[entity=burner-agricultural-tower] allows planting seeds into seedable soil. Planted seeds grow into trees that can be harvested.\n[entity=tree-plant] can grow on grass and dirt. [entity=gold-stromatolite] can grow on [tile=natural-gold-soil]. +active-noise-cancelling=Helps handling noise. [modifier-description] basic-gun-turret-attack-bonus=Basic gun turret damage: +__1__ @@ -127,5 +131,11 @@ lignumis-inserter-progression=Enable progressive inserter recipes lignumis-belt-progression=Yellow belts will require wood belts to craft. lignumis-inserter-progression=Yellow electric inserter will require burner inserter to craft. +[surface-property-name] +pollution-type=Pollution type + +[surface-property-unit] +pollution-type=__plural_for_parameter__1__{1=Pollution|2=Spores|3=Noise|rest=-}__ + [lignumis] start-new-game=Lignumis is meant to be played in a fresh game as it extends the early game before Nauvis. \ No newline at end of file diff --git a/lignumis/prototypes/content/active-noise-cancelling-tower.lua b/lignumis/prototypes/content/active-noise-cancelling-tower.lua new file mode 100644 index 0000000..63cebfd --- /dev/null +++ b/lignumis/prototypes/content/active-noise-cancelling-tower.lua @@ -0,0 +1,154 @@ +local hit_effects = require("__base__.prototypes.entity.hit-effects") +local sounds = require("__base__.prototypes.entity.sounds") +local item_sounds = require("__base__.prototypes.item_sounds") +local item_tints = require("__base__.prototypes.item-tints") + +data:extend({ + { + type = "recipe-category", + name = "active-noise-cancelling" + }, + { + type = "assembling-machine", + name = "active-noise-cancelling-tower", + icons = { + { icon = "__base__/graphics/icons/programmable-speaker.png" }, + { icon = "__lignumis__/graphics/icons/active-noise-cancelling.png", scale = 0.25, shift = { 8, 8 } } + }, + icon_draw_specification = { shift = { 0, -1 }, scale = 0.75, scale_for_many = 0.5 }, + flags = { "placeable-neutral", "player-creation" }, + minable = { mining_time = 0.1, result = "active-noise-cancelling-tower" }, + fast_replaceable_group = "active-noise-cancelling-tower", + max_health = 150, + crafting_speed = 1, + crafting_categories = { "active-noise-cancelling" }, + energy_usage = "6MW", + energy_source = { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = { noise = -1000 }, + drain = "0W" + }, + fixed_recipe = "active-noise-cancelling", + is_military_target = true, + show_recipe_icon_on_map = true, + map_color = { r = 112, g = 61, b = 150, a = 1 }, + corpse = "programmable-speaker-remnants", + dying_explosion = "programmable-speaker-explosion", + collision_box = { { -0.3, -0.3 }, { 0.3, 0.3 } }, + selection_box = { { -0.5, -0.5 }, { 0.5, 0.5 } }, + damaged_trigger_effect = hit_effects.entity({ { -0.2, -2 }, { 0.2, 0.2 } }), + drawing_box_vertical_extension = 2, + open_sound = sounds.machine_open, + close_sound = sounds.machine_close, + graphics_set = { + animation = { + layers = { + { + filename = "__base__/graphics/entity/programmable-speaker/programmable-speaker.png", + priority = "extra-high", + width = 59, + height = 178, + shift = util.by_pixel(-2.25, -39.5), + scale = 0.5 + }, + { + filename = "__base__/graphics/entity/programmable-speaker/programmable-speaker-shadow.png", + priority = "extra-high", + width = 237, + height = 50, + shift = util.by_pixel(52.75, -3), + draw_as_shadow = true, + scale = 0.5 + } + } + } + }, + water_reflection = { + pictures = { + filename = "__base__/graphics/entity/programmable-speaker/programmable-speaker-reflection.png", + priority = "extra-high", + width = 12, + height = 24, + shift = util.by_pixel(0, 45), + variation_count = 1, + scale = 5 + }, + rotate = false, + orientation_to_variation = false + }, + surface_conditions = { { property = "pollution-type", min = 3, max = 3 } } + }, + { + type = "item", + name = "active-noise-cancelling-tower", + icons = { + { icon = "__base__/graphics/icons/programmable-speaker.png" }, + { icon = "__lignumis__/graphics/icons/active-noise-cancelling.png", scale = 0.25, shift = { 8, 8 } } + }, + subgroup = "circuit-network", + order = "d[other]-c[active-noise-cancelling-tower]", + inventory_move_sound = item_sounds.mechanical_inventory_move, + pick_sound = item_sounds.mechanical_inventory_pickup, + drop_sound = item_sounds.mechanical_inventory_move, + place_result = "active-noise-cancelling-tower", + stack_size = 10, + random_tint_color = item_tints.iron_rust + }, + { + type = "recipe", + name = "active-noise-cancelling-tower", + enabled = false, + energy_required = 20, + ingredients = { + { type = "item", name = "gold-plate", amount = 6 }, + { type = "item", name = "gold-cable", amount = 6 }, + { type = "item", name = "low-density-structure", amount = 4 }, + { type = "item", name = "processing-unit", amount = 8 } + }, + results = { { type = "item", name = "active-noise-cancelling-tower", amount = 1 } } + }, + { + type = "recipe", + name = "active-noise-cancelling", + icons = { { icon = "__lignumis__/graphics/icons/active-noise-cancelling.png" } }, + enabled = false, + energy_required = 1000000, + ingredients = {}, + results = {}, + category = "active-noise-cancelling", + hide_from_stats = true, + hide_from_player_crafting = true, + surface_conditions = { { property = "pollution-type", min = 3, max = 3 } } + }, + { + type = "technology", + name = "active-noise-cancelling", + icon = "__lignumis__/graphics/technology/active-noise-cancelling.png", + icon_size = 128, + effects = { + { + type = "unlock-recipe", + recipe = "active-noise-cancelling-tower" + }, + { + type = "unlock-recipe", + recipe = "active-noise-cancelling" + } + }, + prerequisites = { "utility-science-pack" }, + unit = { + time = 60, + count = 500, + ingredients = { + { "wood-science-pack", 1 }, + { "steam-science-pack", 1 }, + { "automation-science-pack", 1 }, + { "logistic-science-pack", 1 }, + { "chemical-science-pack", 1 }, + { "space-science-pack", 1 }, + { "utility-science-pack", 1 } + } + } + } +}) diff --git a/lignumis/prototypes/content/data.lua b/lignumis/prototypes/content/data.lua index 328d106..81fe26b 100644 --- a/lignumis/prototypes/content/data.lua +++ b/lignumis/prototypes/content/data.lua @@ -24,5 +24,6 @@ require("wood-logistics") require("basic-repair-pack") require("basic-radar") require("mid-game-recipes") +require("active-noise-cancelling-tower") require("noise") diff --git a/lignumis/prototypes/content/deep-miner.lua b/lignumis/prototypes/content/deep-miner.lua index bff55a8..671d192 100644 --- a/lignumis/prototypes/content/deep-miner.lua +++ b/lignumis/prototypes/content/deep-miner.lua @@ -5,8 +5,8 @@ local entity = DeepMiner.EntityBuilder:new():build({ resource_searching_radius = 0.49, energy_usage = "25MW", mining_speed = 15, - energySource = { - emissions_per_minute = { noise = 500 } + energy_source = { + emissions_per_minute = { noise = 2000 } }, resource_drain_rate_percent = 75 }) diff --git a/lignumis/prototypes/content/lignumis/planet.lua b/lignumis/prototypes/content/lignumis/planet.lua index 0f0305b..46f2f46 100644 --- a/lignumis/prototypes/content/lignumis/planet.lua +++ b/lignumis/prototypes/content/lignumis/planet.lua @@ -16,6 +16,11 @@ local nauvis_lignumis = { } data:extend({ + { + type = "surface-property", + name = "pollution-type", + default_value = 0 + }, { type = "planet", name = "lignumis", @@ -38,7 +43,8 @@ data:extend({ departure = { "default-rocket-a" } }, surface_properties = { - ["day-night-cycle"] = 1 * minute + ["day-night-cycle"] = 2 * minute, + ["pollution-type"] = 3 }, asteroid_spawn_influence = 1, asteroid_spawn_definitions = asteroid_util.spawn_definitions(nauvis_lignumis, 0.9), diff --git a/lignumis/prototypes/content/noise.lua b/lignumis/prototypes/content/noise.lua index f5b458c..dd45e35 100644 --- a/lignumis/prototypes/content/noise.lua +++ b/lignumis/prototypes/content/noise.lua @@ -1,3 +1,18 @@ +-- Entities added by Lignumis define noise emissions/absorption in their own file. + +local function emit(type, name, amount) + local entity = data.raw[type][name] + entity.energy_source = entity.energy_source or {} + entity.energy_source.emissions_per_minute = entity.energy_source.emissions_per_minute or {} + entity.energy_source.emissions_per_minute.noise = amount +end + +local function emit_constant(type, name, amount) + local entity = data.raw[type][name] + entity.emissions_per_second = entity.emissions_per_second or {} + entity.emissions_per_second.noise = amount / 60 +end + data:extend({ { type = "airborne-pollutant", @@ -16,25 +31,30 @@ data:extend({ } }) -data.raw["unit-spawner"]["spitter-spawner"].absorptions_per_second.noise = { absolute = 20, proportional = 0.01 } -data.raw["unit-spawner"]["biter-spawner"].absorptions_per_second.noise = { absolute = 20, proportional = 0.01 } -data.raw["unit"]["small-biter"].absorptions_to_join_attack.noise = 4 -data.raw["unit"]["medium-biter"].absorptions_to_join_attack.noise = 20 -data.raw["unit"]["big-biter"].absorptions_to_join_attack.noise = 80 -data.raw["unit"]["behemoth-biter"].absorptions_to_join_attack.noise = 400 -data.raw["unit"]["small-spitter"].absorptions_to_join_attack.noise = 4 -data.raw["unit"]["medium-spitter"].absorptions_to_join_attack.noise = 12 -data.raw["unit"]["big-spitter"].absorptions_to_join_attack.noise = 30 -data.raw["unit"]["behemoth-spitter"].absorptions_to_join_attack.noise = 200 + +-- Nauvis enemies use noise + +data.raw["unit-spawner"]["spitter-spawner"].absorptions_per_second.noise = { absolute = 200, proportional = 0.01 } +data.raw["unit-spawner"]["biter-spawner"].absorptions_per_second.noise = { absolute = 200, proportional = 0.01 } +data.raw["unit"]["small-biter"].absorptions_to_join_attack.noise = 1 +data.raw["unit"]["medium-biter"].absorptions_to_join_attack.noise = 5 +data.raw["unit"]["big-biter"].absorptions_to_join_attack.noise = 20 +data.raw["unit"]["behemoth-biter"].absorptions_to_join_attack.noise = 100 +data.raw["unit"]["small-spitter"].absorptions_to_join_attack.noise = 1 +data.raw["unit"]["medium-spitter"].absorptions_to_join_attack.noise = 3 +data.raw["unit"]["big-spitter"].absorptions_to_join_attack.noise = 8 +data.raw["unit"]["behemoth-spitter"].absorptions_to_join_attack.noise = 50 + + +-- All trees absorb noise for _, tree in pairs(data.raw.tree) do - if tree.emissions_per_second then - tree.emissions_per_second.noise = -0.1 - end + emit_constant("plant", "tree-plant", -6) end +emit_constant("plant", "tree-plant", -6) -data.raw.furnace["stone-furnace"].energy_source.emissions_per_minute.noise = 10 -data.raw["mining-drill"]["burner-mining-drill"].energy_source.emissions_per_minute.noise = 50 + +-- Tiles absorb noise local tiles = {"grass-1", "grass-2", "grass-3", "grass-4", "water", "deepwater", "natural-gold-soil"} for _, tile in pairs(tiles) do @@ -42,4 +62,58 @@ for _, tile in pairs(tiles) do data.raw.tile[tile].absorptions_per_second = {} end data.raw.tile[tile].absorptions_per_second.noise = 0.001 -end \ No newline at end of file +end + + +-- Walls absorb noise + +emit_constant("wall", "wooden-wall", -10) +emit_constant("wall", "stone-wall", -20) +emit_constant("gate", "gate", -10) + + +-- Buildings emit noise + +emit("furnace", "stone-furnace", 10) +emit("furnace", "electric-furnace", 10) +emit("mining-drill", "burner-mining-drill", 50) +emit("mining-drill", "electric-mining-drill", 100) +emit("mining-drill", "big-mining-drill", 200) +--emit("mining-drill", "deep-miner", 2000) +--emit("agricultural-tower", "burner-agricultural-tower", 100) +emit("agricultural-tower", "agricultural-tower", 100) +--emit("assembling-machine", "burner-assembling-machine", 50) +--emit("assembling-machine", "steam-assembling-machine", 50) +emit("assembling-machine", "assembling-machine-1", 10) +emit("assembling-machine", "assembling-machine-2", 15) +emit("assembling-machine", "assembling-machine-3", 20) +emit("assembling-machine", "chemical-plant", 10) +emit("boiler", "boiler", 5) +emit("generator", "steam-engine", 10) +emit("boiler", "heat-exchanger", 1) +emit("generator", "steam-turbine", 20) +--emit("rocket-silo", "provisional-rocket-silo", 10000) +--emit_constant("rocket-silo", "provisional-rocket-silo", 1000) +emit("rocket-silo", "rocket-silo", 10000) +emit_constant("rocket-silo", "rocket-silo", 1000) +--emit("lab", "wood-lab", 10) +emit("lab", "lab", 5) +emit("lab", "biolab", 20) +emit("locomotive", "locomotive", 200) +emit_constant("locomotive", "locomotive", 10) + +--emit_constant("transport-belt", "wood-transport-belt", 3) +emit_constant("transport-belt", "transport-belt", 4) +emit_constant("transport-belt", "fast-transport-belt", 8) +emit_constant("transport-belt", "express-transport-belt", 12) +emit_constant("transport-belt", "turbo-transport-belt", 16) +--emit_constant("underground-belt", "wood-underground-belt", 30) +emit_constant("underground-belt", "underground-belt", 40) +emit_constant("underground-belt", "fast-underground-belt", 50) +emit_constant("underground-belt", "express-underground-belt", 60) +emit_constant("underground-belt", "turbo-underground-belt", 80) +--emit_constant("splitter", "wood-splitter", 60) +emit_constant("splitter", "splitter", 70) +emit_constant("splitter", "fast-splitter", 80) +emit_constant("splitter", "express-splitter", 90) +emit_constant("splitter", "turbo-splitter", 100) \ No newline at end of file diff --git a/lignumis/prototypes/content/wooden-rocket-silo.lua b/lignumis/prototypes/content/wooden-rocket-silo.lua index 827dd8d..d79f84b 100644 --- a/lignumis/prototypes/content/wooden-rocket-silo.lua +++ b/lignumis/prototypes/content/wooden-rocket-silo.lua @@ -11,7 +11,7 @@ silo.energy_source = { fuel_categories = { "chemical" }, effectivity = 1, fuel_inventory_size = 1, - emissions_per_minute = { noise = 1000 }, + emissions_per_minute = { noise = 10000 }, smoke = { { name = "smoke", @@ -23,6 +23,7 @@ silo.energy_source = { } } } +silo.emissions_per_second = { noise = 1000 / 60 } silo.energy_usage = "1MW" silo.rocket_entity = "provisional-rocket" silo.fixed_recipe = "provisional-rocket-part" diff --git a/lignumis/prototypes/integrations/Wood-Walls.lua b/lignumis/prototypes/integrations/Wood-Walls.lua index 908b981..7262078 100644 --- a/lignumis/prototypes/integrations/Wood-Walls.lua +++ b/lignumis/prototypes/integrations/Wood-Walls.lua @@ -1,6 +1,3 @@ local recipe = data.raw.recipe["wooden-wall"] recipe.ingredients = { { type = "item", name = "lumber", amount = 4 } } -recipe.results = { { type = "item", name = "wooden-wall", amount = 1 } } - -local entity = data.raw.wall["wooden-wall"] -entity.emissions_per_second = { noise = -1 } \ No newline at end of file +recipe.results = { { type = "item", name = "wooden-wall", amount = 1 } } \ No newline at end of file diff --git a/lignumis/prototypes/integrations/vanilla.lua b/lignumis/prototypes/integrations/vanilla.lua index bd6844a..f08863f 100644 --- a/lignumis/prototypes/integrations/vanilla.lua +++ b/lignumis/prototypes/integrations/vanilla.lua @@ -258,11 +258,11 @@ weapon_speed_technology_4.prerequisites = { "weapon-shooting-speed-3", "military local production_science_pack_technology = Technology:new("production-science-pack") production_science_pack_technology:replacePrerequisite("advanced-material-processing-2", "space-platform-thruster") -production_science_pack_technology:addIngredients({ "wood-science-pack", "steam-science-pack" }) +production_science_pack_technology:addIngredients({ "wood-science-pack", "steam-science-pack", "space-science-pack" }) local utility_science_pack_technology = Technology:new("utility-science-pack") utility_science_pack_technology:setPrerequisites({ "space-platform-thruster" }) -utility_science_pack_technology:addIngredients({ "wood-science-pack", "steam-science-pack" }) +utility_science_pack_technology:addIngredients({ "wood-science-pack", "steam-science-pack", "space-science-pack" }) -- Equipment @@ -275,6 +275,12 @@ data.raw["equipment-grid"]["medium-equipment-grid"].width = 8 data.raw["equipment-grid"]["medium-equipment-grid"].height = 8 +-- Add pollution as surface property + +data.raw["planet"]["nauvis"].surface_properties["pollution-type"] = 1 +data.raw["planet"]["gleba"].surface_properties["pollution-type"] = 2 + + -- Always show Nauvis icon local nauvis = data.raw.planet["nauvis"] diff --git a/sources/icons/active-noise-cancelling.afphoto b/sources/icons/active-noise-cancelling.afphoto new file mode 100644 index 0000000..fcbfabb Binary files /dev/null and b/sources/icons/active-noise-cancelling.afphoto differ