Balance noise and add noise cancelling tower

This commit is contained in:
Simon Brodtmann 2025-01-13 00:36:14 +01:00
parent 157ce99e08
commit da285e7ef1
13 changed files with 280 additions and 27 deletions

View file

@ -80,3 +80,7 @@ Unsorted
[Krastorio 2 Assets](https://mods.factorio.com/mod/Krastorio2Assets) [Krastorio 2 Assets](https://mods.factorio.com/mod/Krastorio2Assets)
- Basic radar - Basic radar
[Icons8](https://icons8.com)
- [Mute icon](https://icons8.com/icon/9414/no-audio)

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

View file

@ -32,6 +32,7 @@ wood-transport-belt=Wood transport belt
wood-underground-belt=Wood underground belt wood-underground-belt=Wood underground belt
wood-splitter=Wood splitter wood-splitter=Wood splitter
basic-radar=Basic radar basic-radar=Basic radar
active-noise-cancelling-tower=Active noise cancelling tower
[equipment-name] [equipment-name]
basic-portable-generator-equipment-gold=Basic portable generator equipment (gold) 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 low-density-structure-gold=Low density structure
rocket-fuel-from-wood-pulp-and-peat=Bio-rocket-fuel rocket-fuel-from-wood-pulp-and-peat=Bio-rocket-fuel
nutrients-from-wood-pulp=Nutrients from wood pulp nutrients-from-wood-pulp=Nutrients from wood pulp
active-noise-cancelling=Active noise cancelling
[recipe-description] [recipe-description]
moist-stromatolite-remnant-desiccation-without-steam=Used for balancing the production of steam. moist-stromatolite-remnant-desiccation-without-steam=Used for balancing the production of steam.
@ -105,9 +107,11 @@ automation=Electric automation
tree-seeding=Basic agriculture tree-seeding=Basic agriculture
basic-repair-pack=Basic repair pack basic-repair-pack=Basic repair pack
basic-radar=Basic radar basic-radar=Basic radar
active-noise-cancelling=Active noise cancelling
[technology-description] [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]. 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] [modifier-description]
basic-gun-turret-attack-bonus=Basic gun turret damage: +__1__ 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-belt-progression=Yellow belts will require wood belts to craft.
lignumis-inserter-progression=Yellow electric inserter will require burner inserter 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] [lignumis]
start-new-game=Lignumis is meant to be played in a fresh game as it extends the early game before Nauvis. start-new-game=Lignumis is meant to be played in a fresh game as it extends the early game before Nauvis.

View file

@ -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 }
}
}
}
})

View file

@ -24,5 +24,6 @@ require("wood-logistics")
require("basic-repair-pack") require("basic-repair-pack")
require("basic-radar") require("basic-radar")
require("mid-game-recipes") require("mid-game-recipes")
require("active-noise-cancelling-tower")
require("noise") require("noise")

View file

@ -5,8 +5,8 @@ local entity = DeepMiner.EntityBuilder:new():build({
resource_searching_radius = 0.49, resource_searching_radius = 0.49,
energy_usage = "25MW", energy_usage = "25MW",
mining_speed = 15, mining_speed = 15,
energySource = { energy_source = {
emissions_per_minute = { noise = 500 } emissions_per_minute = { noise = 2000 }
}, },
resource_drain_rate_percent = 75 resource_drain_rate_percent = 75
}) })

View file

@ -16,6 +16,11 @@ local nauvis_lignumis = {
} }
data:extend({ data:extend({
{
type = "surface-property",
name = "pollution-type",
default_value = 0
},
{ {
type = "planet", type = "planet",
name = "lignumis", name = "lignumis",
@ -38,7 +43,8 @@ data:extend({
departure = { "default-rocket-a" } departure = { "default-rocket-a" }
}, },
surface_properties = { surface_properties = {
["day-night-cycle"] = 1 * minute ["day-night-cycle"] = 2 * minute,
["pollution-type"] = 3
}, },
asteroid_spawn_influence = 1, asteroid_spawn_influence = 1,
asteroid_spawn_definitions = asteroid_util.spawn_definitions(nauvis_lignumis, 0.9), asteroid_spawn_definitions = asteroid_util.spawn_definitions(nauvis_lignumis, 0.9),

View file

@ -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({ data:extend({
{ {
type = "airborne-pollutant", 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 } -- Nauvis enemies use noise
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-spawner"]["spitter-spawner"].absorptions_per_second.noise = { absolute = 200, proportional = 0.01 }
data.raw["unit"]["big-biter"].absorptions_to_join_attack.noise = 80 data.raw["unit-spawner"]["biter-spawner"].absorptions_per_second.noise = { absolute = 200, proportional = 0.01 }
data.raw["unit"]["behemoth-biter"].absorptions_to_join_attack.noise = 400 data.raw["unit"]["small-biter"].absorptions_to_join_attack.noise = 1
data.raw["unit"]["small-spitter"].absorptions_to_join_attack.noise = 4 data.raw["unit"]["medium-biter"].absorptions_to_join_attack.noise = 5
data.raw["unit"]["medium-spitter"].absorptions_to_join_attack.noise = 12 data.raw["unit"]["big-biter"].absorptions_to_join_attack.noise = 20
data.raw["unit"]["big-spitter"].absorptions_to_join_attack.noise = 30 data.raw["unit"]["behemoth-biter"].absorptions_to_join_attack.noise = 100
data.raw["unit"]["behemoth-spitter"].absorptions_to_join_attack.noise = 200 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 for _, tree in pairs(data.raw.tree) do
if tree.emissions_per_second then emit_constant("plant", "tree-plant", -6)
tree.emissions_per_second.noise = -0.1
end
end 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"} local tiles = {"grass-1", "grass-2", "grass-3", "grass-4", "water", "deepwater", "natural-gold-soil"}
for _, tile in pairs(tiles) do for _, tile in pairs(tiles) do
@ -43,3 +63,57 @@ for _, tile in pairs(tiles) do
end end
data.raw.tile[tile].absorptions_per_second.noise = 0.001 data.raw.tile[tile].absorptions_per_second.noise = 0.001
end 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)

View file

@ -11,7 +11,7 @@ silo.energy_source = {
fuel_categories = { "chemical" }, fuel_categories = { "chemical" },
effectivity = 1, effectivity = 1,
fuel_inventory_size = 1, fuel_inventory_size = 1,
emissions_per_minute = { noise = 1000 }, emissions_per_minute = { noise = 10000 },
smoke = { smoke = {
{ {
name = "smoke", name = "smoke",
@ -23,6 +23,7 @@ silo.energy_source = {
} }
} }
} }
silo.emissions_per_second = { noise = 1000 / 60 }
silo.energy_usage = "1MW" silo.energy_usage = "1MW"
silo.rocket_entity = "provisional-rocket" silo.rocket_entity = "provisional-rocket"
silo.fixed_recipe = "provisional-rocket-part" silo.fixed_recipe = "provisional-rocket-part"

View file

@ -1,6 +1,3 @@
local recipe = data.raw.recipe["wooden-wall"] local recipe = data.raw.recipe["wooden-wall"]
recipe.ingredients = { { type = "item", name = "lumber", amount = 4 } } recipe.ingredients = { { type = "item", name = "lumber", amount = 4 } }
recipe.results = { { type = "item", name = "wooden-wall", amount = 1 } } recipe.results = { { type = "item", name = "wooden-wall", amount = 1 } }
local entity = data.raw.wall["wooden-wall"]
entity.emissions_per_second = { noise = -1 }

View file

@ -258,11 +258,11 @@ weapon_speed_technology_4.prerequisites = { "weapon-shooting-speed-3", "military
local production_science_pack_technology = Technology:new("production-science-pack") 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: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") local utility_science_pack_technology = Technology:new("utility-science-pack")
utility_science_pack_technology:setPrerequisites({ "space-platform-thruster" }) 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 -- Equipment
@ -275,6 +275,12 @@ data.raw["equipment-grid"]["medium-equipment-grid"].width = 8
data.raw["equipment-grid"]["medium-equipment-grid"].height = 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 -- Always show Nauvis icon
local nauvis = data.raw.planet["nauvis"] local nauvis = data.raw.planet["nauvis"]

Binary file not shown.