forked from cacklingfiend/lignumis
		
	Balance noise and add noise cancelling tower
This commit is contained in:
		
							parent
							
								
									157ce99e08
								
							
						
					
					
						commit
						da285e7ef1
					
				
					 13 changed files with 280 additions and 27 deletions
				
			
		|  | @ -79,4 +79,8 @@ Unsorted | |||
| 
 | ||||
| [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) | ||||
							
								
								
									
										
											BIN
										
									
								
								lignumis/graphics/icons/active-noise-cancelling.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								lignumis/graphics/icons/active-noise-cancelling.png
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 4.9 KiB | 
							
								
								
									
										
											BIN
										
									
								
								lignumis/graphics/technology/active-noise-cancelling.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								lignumis/graphics/technology/active-noise-cancelling.png
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 9.3 KiB | 
|  | @ -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. | ||||
							
								
								
									
										154
									
								
								lignumis/prototypes/content/active-noise-cancelling-tower.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										154
									
								
								lignumis/prototypes/content/active-noise-cancelling-tower.lua
									
										
									
									
									
										Normal 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 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| }) | ||||
|  | @ -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") | ||||
|  |  | |||
|  | @ -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 | ||||
| }) | ||||
|  |  | |||
|  | @ -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), | ||||
|  |  | |||
|  | @ -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 | ||||
| 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) | ||||
|  | @ -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" | ||||
|  |  | |||
|  | @ -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 } | ||||
| recipe.results = { { type = "item", name = "wooden-wall", amount = 1 } } | ||||
|  | @ -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"] | ||||
|  |  | |||
							
								
								
									
										
											BIN
										
									
								
								sources/icons/active-noise-cancelling.afphoto
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								sources/icons/active-noise-cancelling.afphoto
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Simon Brodtmann
						Simon Brodtmann