Compare commits
20 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
52725edc46 | ||
|
|
31be99bdec | ||
|
|
377a703ed8 | ||
|
|
141aa9a124 | ||
|
|
15a857e689 | ||
|
|
aca569cc58 | ||
|
|
61c2d30dd7 | ||
|
|
996fd2f7c4 | ||
|
|
663779901d | ||
|
|
c6432920cf | ||
|
|
14badb6b6f | ||
|
|
df7c8bac98 | ||
|
|
bb52fad493 | ||
|
|
3c222237ce | ||
| e03f854222 | |||
|
|
b50a36d114 | ||
|
|
02cf0273d7 | ||
|
|
d8c3b5b565 | ||
|
|
fc51b26a28 | ||
|
|
21e30d2ef7 |
37 changed files with 680 additions and 363 deletions
|
|
@ -1,4 +1,4 @@
|
|||
[](https://discord.gg/ufvFUJtVwk)[](https://git.cacklingfiend.info/cacklingfiend/lignumis)[](https://mods.factorio.com/mod/lignumis/metrics?range=last_two_months&type=mod_downloads)
|
||||
[](https://discord.gg/ufvFUJtVwk)[](https://git.cacklingfiend.info/cacklingfiend/lignumis)[](https://mods.factorio.com/mod/lignumis/metrics?range=last_two_months&type=mod_downloads)[](https://ko-fi.com/cacklingfiend)
|
||||
|
||||
_________________
|
||||

|
||||
|
|
|
|||
|
|
@ -1,4 +1,43 @@
|
|||
---------------------------------------------------------------------------------------------------
|
||||
Version: 1.0.77
|
||||
Date: 14.12.2025
|
||||
Changes:
|
||||
- Integrate deep miner code into this mod
|
||||
Bug Fixes:
|
||||
- Correct description of quality assembler
|
||||
- Wood logistics: Correct lumber mill technology
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 1.0.76
|
||||
Date: 12.12.2025
|
||||
Changes:
|
||||
- Add compatibility for "Canal Excavator" (thanks jurgy)
|
||||
- Add compatibility for "Wood Logistics"
|
||||
- Diversitree: Improve compatibility
|
||||
- Use additional_categories for wood processing
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 1.0.75
|
||||
Date: 09.12.2025
|
||||
Changes:
|
||||
- Add is_satellite to PlanetsLib:extend
|
||||
- Remove default item weights as the code has been moved to PlanetsLib
|
||||
Bug Fixes:
|
||||
- Recycling in Factoriopedia: Add order to bioprocessing subgroup for compatibility (thanks jvella94)
|
||||
- Crushing Industry: Use additional_categories for quality assembling so the rocket silo recipe will use concrete mix again
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 1.0.74
|
||||
Date: 18.11.2025
|
||||
Bug Fixes:
|
||||
- Set default weight for battery
|
||||
- Don't hide worker robot speed 3 before before level 2 is researched
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 1.0.73
|
||||
Date: 16.11.2025
|
||||
Bug Fixes:
|
||||
- Add provisional-rocket-part to provisional-rocketry effects (thanks Noreja)
|
||||
Changes:
|
||||
- Add setting to restrict sciences to Lignumis
|
||||
- Update descriptions and improve settings labels
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 1.0.72
|
||||
Date: 01.11.2025
|
||||
Bug Fixes:
|
||||
|
|
@ -69,7 +108,7 @@ Version: 1.0.62
|
|||
Date: 02.09.2025
|
||||
Changes:
|
||||
- Add spanish locales (thanks DFOXpro)
|
||||
- Add compatibility for Alien Biomes (thanks Chromebomb)
|
||||
- Add compatibility for "Alien Biomes" (thanks Chromebomb)
|
||||
- The lumber mill can be built on Vulcanus again
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 1.0.61
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "lignumis",
|
||||
"version": "1.0.72",
|
||||
"version": "1.0.77",
|
||||
"title": "Lignumis",
|
||||
"description": "Dive into the world of Lignumis, a moon of Nauvis offering only the most basic technologies.\n\nThis planet mod effects other planets and space ships. Make sure to read the description on the mod portal and check the mod settings.",
|
||||
"author": "cackling fiend",
|
||||
|
|
@ -12,39 +12,40 @@
|
|||
"space-age >= 2.0.53",
|
||||
"astroponics >= 1.2.0",
|
||||
"bioprocessing-tab",
|
||||
"cf-lib >= 0.0.13",
|
||||
"cf-lib >= 1.1.0",
|
||||
"flib",
|
||||
"gleba-water-cane",
|
||||
"lignumis-assets >= 1.0.3",
|
||||
"mf-buildings >= 1.0.7",
|
||||
"mf-core >= 1.0.3",
|
||||
"mf-logistics >= 1.0.1",
|
||||
"PlanetsLib >= 1.1.26",
|
||||
"PlanetsLib >= 1.14.7",
|
||||
"pollution-as-surface-property",
|
||||
"Wood-Walls >= 1.2.0",
|
||||
"vulcanus-sulfuric-bacteria",
|
||||
"?aai-industry",
|
||||
"?aai-loaders",
|
||||
"?aai-loaders-sane",
|
||||
"?any-planet-start",
|
||||
"?atan-nuclear-science",
|
||||
"?crushing-industry",
|
||||
"?Diversitree",
|
||||
"?fulgora-coralmium-agriculture",
|
||||
"?gleba-reborn",
|
||||
"?hot-metals >= 1.1.0",
|
||||
"?Krastorio2-spaced-out",
|
||||
"?lane-splitters",
|
||||
"?metal-and-stars",
|
||||
"(?)secretas",
|
||||
"(?)Wood_Gasification_updated",
|
||||
"?wood-industry",
|
||||
"?wood-military >= 2.3.3",
|
||||
"!apm_power_ldinc",
|
||||
"!early-agriculture",
|
||||
"!planet-picker",
|
||||
"!wood-logistics",
|
||||
"!wood-universe-modpack",
|
||||
"!rso-mod"
|
||||
"? aai-industry",
|
||||
"? aai-loaders",
|
||||
"? aai-loaders-sane",
|
||||
"? any-planet-start",
|
||||
"? crushing-industry",
|
||||
"? fulgora-coralmium-agriculture",
|
||||
"? hot-metals >= 1.1.0",
|
||||
"? lane-splitters",
|
||||
"? wood-industry",
|
||||
"? wood-military >= 2.3.3",
|
||||
"? canal-excavator >= 1.9.0",
|
||||
"? wood-logistics",
|
||||
"(?) atan-nuclear-science",
|
||||
"(?) Diversitree",
|
||||
"(?) gleba-reborn",
|
||||
"(?) Krastorio2-spaced-out",
|
||||
"(?) metal-and-stars",
|
||||
"(?) secretas",
|
||||
"(?) Wood_Gasification_updated",
|
||||
"! apm_power_ldinc",
|
||||
"! early-agriculture",
|
||||
"! planet-picker",
|
||||
"! wood-universe-modpack",
|
||||
"! rso-mod"
|
||||
]
|
||||
}
|
||||
|
|
@ -52,7 +52,7 @@ lignumis-medium-wriggler-pentapod=Mittelgroßer Lignumis Fünfbein-Zapler
|
|||
|
||||
[entity-description]
|
||||
lumber-mill=Fortschrittliche Maschine zur Holzbearbeitung.
|
||||
quality-assembler=High-End-Montagemaschine, die nur die besten Maschinen herstellt. Verleiht 25% zusätzliche Qualität durch den Verbrauch von [item=gold-quality-catalyst]. Die Oberflächenbedingungen und Zutaten bleiben ansonsten unverändert.
|
||||
quality-assembler=High-End-Montagemaschine, die nur die besten Maschinen herstellt. Verleiht 35% zusätzliche Qualität durch den Verbrauch von [item=gold-quality-catalyst]. Die Oberflächenbedingungen und Zutaten bleiben ansonsten unverändert.
|
||||
gold-stromatolite-plant=Sammle Gold-Stromatolithen für Bakterien, die Gold aus dem Boden anreichern.\n__REMARK_COLOR_BEGIN__Erwarteter Ertrag:__REMARK_COLOR_END__ 1.5 [item=gold-ore]/m
|
||||
|
||||
[equipment-name]
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ burner-lamp=Burner lamp
|
|||
|
||||
[entity-description]
|
||||
lumber-mill=Advanced machine to process wood.
|
||||
quality-assembler=High-end assembler to craft only the finest quality machines. It gives 25% additional quality by consuming [item=gold-quality-catalyst]. Surface conditions and ingredients are otherwise unchanged.
|
||||
quality-assembler=High-end assembler to craft only the finest quality machines. It gives 35% additional quality by consuming [item=gold-quality-catalyst]. Surface conditions and ingredients are otherwise unchanged.
|
||||
gold-stromatolite-plant=Harvest gold stromatolites for bacteria that enrich gold from the ground.\n__REMARK_COLOR_BEGIN__Expected yield:__REMARK_COLOR_END__ 1.5 [item=gold-ore]/m
|
||||
|
||||
[equipment-name]
|
||||
|
|
@ -126,6 +126,7 @@ planet-discovery-lignumis=Moon discovery Lignumis
|
|||
iron-processing=Iron processing
|
||||
copper-processing=Copper processing
|
||||
lumber-mill=Lumber mill
|
||||
advanced-carpentry=Lumber mill
|
||||
deep-miner=Deep miner
|
||||
gold-fluid-handling=Gold fluid handling
|
||||
steam-automation=Steam automation
|
||||
|
|
@ -153,6 +154,7 @@ burner-automation=Technology for basic automation using burner machines.
|
|||
planet-discovery-nauvis=A temperate planet offering all the common resources.
|
||||
planet-discovery-lignumis=A moon orbiting Nauvis that has not much to offer besides some vegetation and a metal that might be useful.
|
||||
lumber-mill=Advanced machine to process wood.
|
||||
advanced-carpentry=Advanced machine to process wood.
|
||||
deep-miner=Gives access to huge gold deposits that were previously unreachable.
|
||||
steam-automation=Allows research of more sophisticated technologies based on wood products and gold.
|
||||
wood-liquefaction=Converting wood into a liquid offers new possibilities.
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ lignumis-medium-wriggler-pentapod=Pentápodo reptante mediano de Lignumis
|
|||
|
||||
[entity-description]
|
||||
lumber-mill=Máquina avanzada para procesar madera.
|
||||
quality-assembler=Ensamblador de alta gama para fabricar solo máquinas de la mejor calidad. Da un 25% de calidad adicional al consumir [item=gold-quality-catalyst]. Por lo demás, las condiciones de la superficie y los ingredientes no cambian.
|
||||
quality-assembler=Ensamblador de alta gama para fabricar solo máquinas de la mejor calidad. Da un 35% de calidad adicional al consumir [item=gold-quality-catalyst]. Por lo demás, las condiciones de la superficie y los ingredientes no cambian.
|
||||
gold-stromatolite-plant=Recolecte estromatolitos de oro en busca de bacterias que enriquezcan el oro del suelo.\n__REMARK_COLOR_BEGIN__Rendimiento esperado:__REMARK_COLOR_END__ 1.5 [item=gold-ore]/m
|
||||
|
||||
[equipment-name]
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ lignumis-medium-wriggler-pentapod=Средний пятиног-ползун Л
|
|||
|
||||
[entity-description]
|
||||
lumber-mill=Продвинутая машина для обработки древесины.
|
||||
quality-assembler=Высококачественный сборочный автомат, создающий только лучшие механизмы. Добавляет 25% дополнительного качества предмету, потребляя [item=gold-quality-catalyst]. Условия поверхности и ингредиенты остаются неизменными.
|
||||
quality-assembler=Высококачественный сборочный автомат, создающий только лучшие механизмы. Добавляет 35% дополнительного качества предмету, потребляя [item=gold-quality-catalyst]. Условия поверхности и ингредиенты остаются неизменными.
|
||||
gold-stromatolite-plant=Собирайте золотой строматолит для получения бактерий, обогащающих золото из почвы.\n__REMARK_COLOR_BEGIN__Ожидаемая добыча:__REMARK_COLOR_END__ 1.5 [item=gold-ore]/m
|
||||
|
||||
[equipment-name]
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ AAILoaders.make_tier({
|
|||
order = "d[loader]-a00[aai-wood-loader]"
|
||||
})
|
||||
|
||||
data.raw.recipe["aai-wood-loader"].category = "wood-processing-or-assembling"
|
||||
data.raw.recipe["aai-wood-loader"].additional_categories = { "wood-processing" }
|
||||
|
||||
if not basic_circuit_board then
|
||||
local nauvis_recipe = Recipe:new("aai-wood-loader"):clone("wood-loader-electronic-circuit")
|
||||
|
|
|
|||
14
lignumis/prototypes/compatibility/canal-excavator.lua
Normal file
14
lignumis/prototypes/compatibility/canal-excavator.lua
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
if not mods["canal-excavator"] then return end
|
||||
|
||||
data:extend({{
|
||||
type = "mod-data",
|
||||
name = "canex-lignumis-config",
|
||||
data_type = "canex-surface-config",
|
||||
data = {
|
||||
surfaceName = "lignumis",
|
||||
localisation = {"space-location-name.lignumis"},
|
||||
mineResult = "stone",
|
||||
oreStartingAmount = 10,
|
||||
tint = {r = 102, g = 78, b = 6}
|
||||
},
|
||||
}})
|
||||
|
|
@ -90,10 +90,9 @@ end
|
|||
local gold_recipe = Recipe:new("burner-crusher")
|
||||
:replaceIngredient("iron-gear-wheel", "wooden-gear-wheel")
|
||||
:replaceIngredient("iron-plate", "gold-plate")
|
||||
:assign({
|
||||
category = settings.startup["lignumis-lumber-mill-more-recipes"].value and "wood-processing-or-assembling" or
|
||||
"crafting"
|
||||
})
|
||||
if settings.startup["lignumis-lumber-mill-more-recipes"].value then
|
||||
gold_recipe.prototype.additional_categories = { "wood-processing" }
|
||||
end
|
||||
|
||||
gold_recipe:clone("burner-crusher-copper")
|
||||
:replaceIngredient("gold-plate", "copper-plate")
|
||||
|
|
|
|||
|
|
@ -6,4 +6,6 @@ require("aai-loaders")
|
|||
require("nuclear-science")
|
||||
require("lane-splitters")
|
||||
require("wood-industry")
|
||||
require("crushing-industry")
|
||||
require("crushing-industry")
|
||||
require("canal-excavator")
|
||||
require("diversitree")
|
||||
12
lignumis/prototypes/compatibility/diversitree.lua
Normal file
12
lignumis/prototypes/compatibility/diversitree.lua
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
if not mods["Diversitree"] then
|
||||
return
|
||||
end
|
||||
|
||||
data.raw.plant["s6xdvt-fake-tree"].surface_conditions[1].min = 900
|
||||
|
||||
local tree_plant = data.raw.plant["s6xdvt-fake-tree"]
|
||||
tree_plant.growth_ticks = 5 * minute
|
||||
tree_plant.minable.results = { { type = "item", name = "wood", amount = 5 } }
|
||||
tree_plant.minable.count = nil
|
||||
tree_plant.surface_conditions[1].min = 900
|
||||
table.insert(tree_plant.autoplace.tile_restriction, "natural-gold-soil")
|
||||
|
|
@ -23,7 +23,7 @@ lane_splitter.prototype.structure_patch.west.filename = data.raw.splitter["wood-
|
|||
lane_splitter.prototype.structure_patch.north.filename = data.raw.splitter["wood-splitter"].structure_patch.north.filename
|
||||
lane_splitter.item.icon = Lignumis.graphics .. "icons/wood-lane-splitter.png"
|
||||
lane_splitter.item.order = "d[lane-splitter]-0[wood-lane-splitter]"
|
||||
lane_splitter.recipe.category = "wood-processing-or-assembling"
|
||||
lane_splitter.recipe.additional_categories = { "wood-processing" }
|
||||
|
||||
data:extend({
|
||||
lane_splitter.prototype,
|
||||
|
|
|
|||
|
|
@ -19,7 +19,8 @@ data:extend({
|
|||
{
|
||||
type = "recipe",
|
||||
name = "basic-circuit-board",
|
||||
category = "wood-processing-or-assembling",
|
||||
category = "crafting",
|
||||
additional_categories = { "wood-processing" },
|
||||
icons = {
|
||||
{ icon = Lignumis.graphics .. "icons/basic-circuit-board.png" },
|
||||
{ icon = Lignumis.graphics .. "icons/gold-cable.png", scale = 0.25, shift = { 8, 8 } }
|
||||
|
|
@ -36,7 +37,8 @@ data:extend({
|
|||
type = "recipe",
|
||||
name = "basic-circuit-board-copper",
|
||||
localised_name = { "item-name.basic-circuit-board" },
|
||||
category = "wood-processing-or-assembling",
|
||||
category = "crafting",
|
||||
additional_categories = { "wood-processing" },
|
||||
icons = {
|
||||
{ icon = Lignumis.graphics .. "icons/basic-circuit-board.png" },
|
||||
{ icon = "__base__/graphics/icons/copper-cable.png", scale = 0.25, shift = { 8, 8 } }
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ local turret_recipe = {
|
|||
results = { { type = "item", name = "basic-gun-turret", amount = 1 } }
|
||||
}
|
||||
if settings.startup["lignumis-lumber-mill-more-recipes"].value then
|
||||
turret_recipe.category = "wood-processing-or-assembling"
|
||||
turret_recipe.additional_categories = { "wood-processing" }
|
||||
end
|
||||
|
||||
local turret_technology = {
|
||||
|
|
|
|||
|
|
@ -84,7 +84,8 @@ data:extend({
|
|||
{
|
||||
type = "recipe",
|
||||
name = "burner-agricultural-tower",
|
||||
category = "wood-processing-or-assembling",
|
||||
category = "crafting",
|
||||
additional_categories = { "wood-processing" },
|
||||
energy_required = 10,
|
||||
ingredients = {
|
||||
{ type = "item", name = "stone-brick", amount = 5 },
|
||||
|
|
@ -116,7 +117,8 @@ data:extend({
|
|||
{
|
||||
type = "recipe",
|
||||
name = "burner-agricultural-tower-copper",
|
||||
category = "wood-processing-or-assembling",
|
||||
category = "crafting",
|
||||
additional_categories = { "wood-processing" },
|
||||
localised_name = { "entity-name.burner-agricultural-tower" },
|
||||
icons = {
|
||||
{ icon = Lignumis.graphics .. "icons/burner-agricultural-tower.png" },
|
||||
|
|
|
|||
|
|
@ -17,7 +17,6 @@ assembling_machine.crafting_categories = {
|
|||
"crafting",
|
||||
"electronics",
|
||||
"pressing",
|
||||
"wood-processing-or-assembling",
|
||||
"organic-or-assembling",
|
||||
"electronics-or-assembling",
|
||||
"metallurgy-or-assembling"
|
||||
|
|
@ -50,8 +49,6 @@ remnants.animation[2].filename = gfx .. "burner-assembling-machine-remnants.png"
|
|||
remnants.animation[3].filename = gfx .. "burner-assembling-machine-remnants.png"
|
||||
remnants.order = "0[burner-assembling-machine]"
|
||||
|
||||
local crafting_category = settings.startup["lignumis-lumber-mill-more-recipes"].value and "wood-processing-or-assembling" or "crafting"
|
||||
|
||||
data:extend({
|
||||
assembling_machine,
|
||||
remnants,
|
||||
|
|
@ -70,7 +67,8 @@ data:extend({
|
|||
{
|
||||
type = "recipe",
|
||||
name = "burner-assembling-machine",
|
||||
category = crafting_category,
|
||||
category = "crafting",
|
||||
additional_categories = settings.startup["lignumis-lumber-mill-more-recipes"].value and { "wood-processing" } or nil,
|
||||
enabled = false,
|
||||
ingredients = {
|
||||
{ type = "item", name = "wooden-gear-wheel", amount = 5 },
|
||||
|
|
|
|||
|
|
@ -44,8 +44,6 @@ remnants.animation[3].filename = gfx .. "burner-long-handed-inserter-remnants.pn
|
|||
remnants.animation[4].filename = gfx .. "burner-long-handed-inserter-remnants.png"
|
||||
remnants.order = "a-c-0"
|
||||
|
||||
local crafting_category = settings.startup["lignumis-lumber-mill-more-recipes"].value and "wood-processing-or-assembling" or "crafting"
|
||||
|
||||
data:extend({
|
||||
long_handed_inserter,
|
||||
remnants,
|
||||
|
|
@ -65,7 +63,8 @@ data:extend({
|
|||
{
|
||||
type = "recipe",
|
||||
name = "burner-long-handed-inserter",
|
||||
category = crafting_category,
|
||||
category = "crafting",
|
||||
additional_categories = settings.startup["lignumis-lumber-mill-more-recipes"].value and { "wood-processing" } or nil,
|
||||
enabled = false,
|
||||
ingredients = {
|
||||
{ type = "item", name = "wooden-gear-wheel", amount = 1 },
|
||||
|
|
|
|||
|
|
@ -1,44 +1,197 @@
|
|||
local DeepMinerFactory = require(MF.buildings .. "CoreExtractor")
|
||||
local DeepMiner = DeepMinerFactory("deep-miner")
|
||||
local hit_effects = require("__base__.prototypes.entity.hit-effects")
|
||||
local item_sounds = require("__base__.prototypes.item_sounds")
|
||||
local sounds = require("__base__.prototypes.entity.sounds")
|
||||
local Entity = require("__cf-lib__/data/Entity")
|
||||
|
||||
local entity = DeepMiner.EntityBuilder:new():build({
|
||||
resource_searching_radius = 0.49,
|
||||
energy_usage = "25MW",
|
||||
mining_speed = 7.5,
|
||||
energy_source = {
|
||||
emissions_per_minute = { noise = 2000 }
|
||||
local gfx = Lignumis.graphics .. "entity/deep-miner/"
|
||||
local techGfx = Lignumis.graphics .. "technology/"
|
||||
local name = "deep-miner"
|
||||
|
||||
local function animationLayer()
|
||||
return {
|
||||
priority = "high",
|
||||
width = 704,
|
||||
height = 704,
|
||||
frame_count = 120,
|
||||
lines_per_file = 8,
|
||||
animation_speed = 0.3,
|
||||
scale = 0.5,
|
||||
stripes = {
|
||||
{
|
||||
filename = gfx .. "core-extractor-animation-1.png",
|
||||
width_in_frames = 8,
|
||||
height_in_frames = 8
|
||||
},
|
||||
{
|
||||
filename = gfx .. "core-extractor-animation-2.png",
|
||||
width_in_frames = 8,
|
||||
height_in_frames = 7
|
||||
}
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
data:extend({
|
||||
{
|
||||
type = "mining-drill",
|
||||
name = name,
|
||||
icon = gfx .. "core-extractor-icon.png",
|
||||
flags = { "placeable-neutral", "player-creation" },
|
||||
minable = { mining_time = 0.2, result = name },
|
||||
fast_replaceable_group = name,
|
||||
max_health = 500,
|
||||
corpse = "big-remnants",
|
||||
dying_explosion = "medium-explosion",
|
||||
collision_box = Entity.collisionBox(11, 11),
|
||||
selection_box = Entity.selectionBox(11, 11),
|
||||
damaged_trigger_effect = hit_effects.entity(),
|
||||
drawing_box_vertical_extension = 1.3,
|
||||
module_slots = 4,
|
||||
icon_draw_specification = { scale = 2, shift = { 0, -0.3 } },
|
||||
icons_positioning = {
|
||||
{ inventory_index = defines.inventory.assembling_machine_modules, shift = { 0, 1.25 } }
|
||||
},
|
||||
allowed_effects = { "consumption", "speed", "pollution", "quality", "productivity" },
|
||||
mining_speed = 7.5,
|
||||
resource_categories = { "deep-mining" },
|
||||
drops_full_belt_stacks = true,
|
||||
resource_searching_radius = 0.49,
|
||||
vector_to_place_result = { 0, -5.85 },
|
||||
resource_drain_rate_percent = 75,
|
||||
energy_source = {
|
||||
type = "electric",
|
||||
usage_priority = "secondary-input",
|
||||
emissions_per_minute = { noise = 2000 }
|
||||
},
|
||||
energy_usage = "25MW",
|
||||
perceived_performance = { minimum = 0.25, performance_to_activity_rate = 0.25, maximum = 2 },
|
||||
graphics_set = {
|
||||
animation = {
|
||||
layers = {
|
||||
{
|
||||
filename = gfx .. "core-extractor-shadow.png",
|
||||
priority = "high",
|
||||
width = 1400,
|
||||
height = 1400,
|
||||
frame_count = 1,
|
||||
line_length = 1,
|
||||
repeat_count = 120,
|
||||
animation_speed = 0.3,
|
||||
draw_as_shadow = true,
|
||||
scale = 0.5
|
||||
},
|
||||
animationLayer()
|
||||
}
|
||||
},
|
||||
working_visualisations = {
|
||||
{
|
||||
fadeout = true,
|
||||
animation = {
|
||||
layers = {
|
||||
animationLayer(),
|
||||
{
|
||||
priority = "high",
|
||||
draw_as_glow = true,
|
||||
blend_mode = "additive",
|
||||
width = 704,
|
||||
height = 704,
|
||||
frame_count = 120,
|
||||
lines_per_file = 8,
|
||||
animation_speed = 0.3,
|
||||
scale = 0.5,
|
||||
stripes = {
|
||||
{
|
||||
filename = gfx .. "core-extractor-emission-1.png",
|
||||
width_in_frames = 8,
|
||||
height_in_frames = 8
|
||||
},
|
||||
{
|
||||
filename = gfx .. "core-extractor-emission-2.png",
|
||||
width_in_frames = 8,
|
||||
height_in_frames = 7
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
open_sound = sounds.drill_open,
|
||||
close_sound = sounds.drill_close,
|
||||
working_sound = {
|
||||
main_sounds = {
|
||||
{
|
||||
sound = { filename = "__space-age__/sound/entity/big-mining-drill/big-mining-drill-loop.ogg", volume = 0.4, audible_distance_modifier = 1 },
|
||||
fade_in_ticks = 4,
|
||||
fade_out_ticks = 30
|
||||
},
|
||||
{
|
||||
sound = { filename = Lignumis.sound .. "entity/deep-miner/deep-miner-gears.ogg", volume = 0.3, audible_distance_modifier = 0.6 },
|
||||
fade_in_ticks = 15,
|
||||
fade_out_ticks = 60
|
||||
}
|
||||
},
|
||||
sound_accents = {
|
||||
{ sound = {
|
||||
filename = Lignumis.sound .. "entity/deep-miner/deep-miner-drop.ogg",
|
||||
volume = 2,
|
||||
audible_distance_modifier = 10,
|
||||
advanced_volume_control = {
|
||||
attenuation = "logarithmic",
|
||||
fades = { fade_in = { curve_type = "linear", from = { control = 0.25, volume_percentage = 70.0 }, to = { 1, 100.0 } } }
|
||||
}
|
||||
}, frame = 16 }
|
||||
},
|
||||
max_sounds_per_prototype = 4
|
||||
}
|
||||
},
|
||||
resource_drain_rate_percent = 75
|
||||
})
|
||||
entity.resource_categories = { "deep-mining" }
|
||||
data:extend({ entity })
|
||||
|
||||
DeepMiner.ItemBuilder:new()
|
||||
:itemsPerRocket(1)
|
||||
:apply({
|
||||
{
|
||||
type = "item",
|
||||
name = name,
|
||||
icon = gfx .. "core-extractor-icon.png",
|
||||
subgroup = "extraction-machine",
|
||||
order = "a[items]-d[deep-miner]"
|
||||
})
|
||||
|
||||
DeepMiner.RecipeBuilder:new()
|
||||
:ingredients({
|
||||
{ type = "item", name = "processing-unit", amount = 100 },
|
||||
{ type = "item", name = "electric-engine-unit", amount = 100 },
|
||||
{ type = "item", name = "steel-plate", amount = 200 },
|
||||
{ type = "item", name = "concrete", amount = 50 }
|
||||
})
|
||||
:apply({
|
||||
category = "metallurgy-or-assembling"
|
||||
})
|
||||
|
||||
DeepMiner.TechnologyBuilder:new()
|
||||
:prerequisites({ "space-science-pack" })
|
||||
:count(500)
|
||||
:ingredients({
|
||||
{ "automation-science-pack", 1 },
|
||||
{ "logistic-science-pack", 1 },
|
||||
{ "chemical-science-pack", 1 },
|
||||
{ "space-science-pack", 1 }
|
||||
})
|
||||
:time(60)
|
||||
:apply()
|
||||
order = "a[items]-d[deep-miner]",
|
||||
inventory_move_sound = item_sounds.mechanical_large_inventory_move,
|
||||
pick_sound = item_sounds.mechanical_large_inventory_pickup,
|
||||
drop_sound = item_sounds.mechanical_large_inventory_move,
|
||||
place_result = name,
|
||||
stack_size = 20,
|
||||
default_import_location = "nauvis",
|
||||
weight = 1000 * kg
|
||||
},
|
||||
{
|
||||
type = "recipe",
|
||||
name = name,
|
||||
category = "metallurgy-or-assembling",
|
||||
enabled = false,
|
||||
ingredients = {
|
||||
{ type = "item", name = "processing-unit", amount = 100 },
|
||||
{ type = "item", name = "electric-engine-unit", amount = 100 },
|
||||
{ type = "item", name = "steel-plate", amount = 200 },
|
||||
{ type = "item", name = "concrete", amount = 50 }
|
||||
},
|
||||
energy_required = 60,
|
||||
results = { { type = "item", name = name, amount = 1 } }
|
||||
},
|
||||
{
|
||||
type = "technology",
|
||||
name = name,
|
||||
icon = techGfx .. "core-extractor.png",
|
||||
icon_size = 256,
|
||||
effects = {
|
||||
{ type = "unlock-recipe", recipe = name }
|
||||
},
|
||||
prerequisites = { "space-science-pack" },
|
||||
unit = {
|
||||
count = 500,
|
||||
ingredients = {
|
||||
{ "automation-science-pack", 1 },
|
||||
{ "logistic-science-pack", 1 },
|
||||
{ "chemical-science-pack", 1 },
|
||||
{ "space-science-pack", 1 }
|
||||
},
|
||||
time = 60
|
||||
}
|
||||
}
|
||||
})
|
||||
|
|
@ -2,6 +2,7 @@ data:extend({
|
|||
{
|
||||
type = "item-subgroup",
|
||||
name = "lignumis-bioprocessing",
|
||||
group = "bioprocessing"
|
||||
group = "bioprocessing",
|
||||
order = "lignumis-bioprocessing"
|
||||
}
|
||||
})
|
||||
|
|
@ -39,6 +39,7 @@ PlanetsLib:extend({
|
|||
},
|
||||
},
|
||||
magnitude = 0.35,
|
||||
is_satellite = true,
|
||||
subgroup = "satellites",
|
||||
icon = Lignumis.graphics .. "icons/lignumis.png",
|
||||
starmap_icon = Lignumis.graphics .. "icons/starmap-planet-lignumis.png",
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
local Recipe = require("__cf-lib__/data/Recipe")
|
||||
local Technology = require("__cf-lib__/data/Technology")
|
||||
local LumberMillFactory = require(MF.buildings .. "LumberMill")
|
||||
local LumberMill = LumberMillFactory()
|
||||
|
|
@ -7,76 +8,131 @@ local basic_circuit_board = settings.startup["lignumis-basic-circuit-board"].val
|
|||
data:extend({
|
||||
{
|
||||
type = "recipe-category",
|
||||
name = "wood-processing-or-assembling"
|
||||
name = "wood-processing"
|
||||
}
|
||||
})
|
||||
|
||||
table.insert(data.raw["character"]["character"].crafting_categories, "wood-processing-or-assembling")
|
||||
|
||||
local has_oxygen = data.raw["surface-property"]["oxygen"] ~= nil
|
||||
|
||||
LumberMill.EntityBuilder:new()
|
||||
:burnerEnergySource({ emissions_per_minute = { noise = 100 } })
|
||||
:baseProductivity(0.5)
|
||||
:apply({
|
||||
crafting_categories = { "wood-processing-or-assembling" },
|
||||
if not mods["wood-logistics"] then
|
||||
LumberMill.EntityBuilder:new()
|
||||
:burnerEnergySource({ emissions_per_minute = { noise = 100 } })
|
||||
:baseProductivity(0.5)
|
||||
:apply({
|
||||
crafting_categories = { "wood-processing" },
|
||||
crafting_speed = 2,
|
||||
energy_usage = "1000kW",
|
||||
surface_conditions = {
|
||||
{
|
||||
property = has_oxygen and "oxygen" or "pressure",
|
||||
min = 3
|
||||
property = has_oxygen and "oxygen" or "pressure",
|
||||
min = 3
|
||||
},
|
||||
{
|
||||
property = "gravity",
|
||||
min = 1
|
||||
property = "gravity",
|
||||
min = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
local lumber_mill_item = LumberMill.ItemBuilder:new()
|
||||
:apply({
|
||||
local lumber_mill_item = LumberMill.ItemBuilder:new()
|
||||
:apply({
|
||||
default_import_location = "lignumis",
|
||||
order = "2[lumber-mill]"
|
||||
})
|
||||
|
||||
LumberMill.RecipeBuilder:new()
|
||||
:ingredients(table.trim({
|
||||
{ type = "item", name = "stone-brick", amount = 40 },
|
||||
{ type = "item", name = "lumber", amount = 50 },
|
||||
LumberMill.RecipeBuilder:new()
|
||||
:ingredients(table.trim({
|
||||
{ type = "item", name = "stone-brick", amount = 40 },
|
||||
{ type = "item", name = "lumber", amount = 50 },
|
||||
{ type = "item", name = "wooden-gear-wheel", amount = 50 },
|
||||
{ type = "item", name = "gold-plate", amount = basic_circuit_board and 20 or 40 },
|
||||
{ type = "item", name = "gold-plate", amount = basic_circuit_board and 20 or 40 },
|
||||
basic_circuit_board and { type = "item", name = "basic-circuit-board", amount = 20 } or nil,
|
||||
{ type = "item", name = "burner-assembling-machine", amount = 2 }
|
||||
}))
|
||||
:apply({
|
||||
category = "wood-processing-or-assembling"
|
||||
:apply({
|
||||
additional_categories = { "wood-processing" }
|
||||
})
|
||||
|
||||
LumberMill.TechnologyBuilder:new()
|
||||
:prerequisites({ "steam-science-pack" })
|
||||
:count(250)
|
||||
:time(15)
|
||||
:ingredients({ { "wood-science-pack", 1 }, { "steam-science-pack", 1 } })
|
||||
:apply()
|
||||
LumberMill.TechnologyBuilder:new()
|
||||
:prerequisites({ "steam-science-pack" })
|
||||
:count(250)
|
||||
:time(15)
|
||||
:ingredients({ { "wood-science-pack", 1 }, { "steam-science-pack", 1 } })
|
||||
:apply()
|
||||
|
||||
LumberMill.RecipeBuilder:new()
|
||||
:ingredients({
|
||||
{ type = "item", name = "stone-brick", amount = 40 },
|
||||
{ type = "item", name = "lumber", amount = 50 },
|
||||
{ type = "item", name = "wooden-gear-wheel", amount = 50 },
|
||||
{ type = "item", name = "copper-plate", amount = basic_circuit_board and 20 or 40 },
|
||||
LumberMill.RecipeBuilder:new()
|
||||
:ingredients({
|
||||
{ type = "item", name = "stone-brick", amount = 40 },
|
||||
{ type = "item", name = "lumber", amount = 50 },
|
||||
{ type = "item", name = "wooden-gear-wheel", amount = 50 },
|
||||
{ type = "item", name = "copper-plate", amount = basic_circuit_board and 20 or 40 },
|
||||
{ type = "item", name = basic_circuit_board and "basic-circuit-board" or "electronic-circuit", amount = 20 },
|
||||
{ type = "item", name = "assembling-machine-1", amount = 2 }
|
||||
{ type = "item", name = "assembling-machine-1", amount = 2 }
|
||||
})
|
||||
:apply({
|
||||
:apply({
|
||||
name = "lumber-mill-copper",
|
||||
localised_name = { "entity-name.lumber-mill" },
|
||||
category = "wood-processing-or-assembling",
|
||||
additional_categories = { "wood-processing" },
|
||||
icons = {
|
||||
{ icon = lumber_mill_item.icon },
|
||||
{ icon = basic_circuit_board and "__base__/graphics/icons/copper-plate.png" or "__base__/graphics/icons/electronic-circuit.png", scale = 0.25, shift = { 8, 8 } }
|
||||
}
|
||||
})
|
||||
|
||||
Technology:new(basic_circuit_board and "copper-processing" or "electronics"):addRecipe("lumber-mill-copper")
|
||||
Technology:new(basic_circuit_board and "copper-processing" or "electronics"):addRecipe("lumber-mill-copper")
|
||||
else
|
||||
table.assign(data.raw["assembling-machine"]["lumber-mill"], {
|
||||
energy_source = {
|
||||
type = "burner",
|
||||
fuel_categories = { "chemical" },
|
||||
effectivity = 1,
|
||||
fuel_inventory_size = 3,
|
||||
emissions_per_minute = { pollution = 10, noise = 100 },
|
||||
},
|
||||
crafting_categories = { "wood-processing" },
|
||||
energy_usage = "1000kW",
|
||||
module_slots = 4,
|
||||
max_health = 500,
|
||||
surface_conditions = {
|
||||
{
|
||||
property = has_oxygen and "oxygen" or "pressure",
|
||||
min = 3
|
||||
},
|
||||
{
|
||||
property = "gravity",
|
||||
min = 1
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
data.raw.item["lumber-mill"].default_import_location = "lignumis"
|
||||
|
||||
table.assign(data.raw.recipe["lumber-mill"], {
|
||||
additional_categories = { "wood-processing" },
|
||||
ingredients = table.trim({
|
||||
{ type = "item", name = "stone-brick", amount = 40 },
|
||||
{ type = "item", name = "lumber", amount = 50 },
|
||||
{ type = "item", name = "wooden-gear-wheel", amount = 50 },
|
||||
{ type = "item", name = "gold-plate", amount = basic_circuit_board and 20 or 40 },
|
||||
basic_circuit_board and { type = "item", name = "basic-circuit-board", amount = 20 } or nil,
|
||||
{ type = "item", name = "burner-assembling-machine", amount = 2 }
|
||||
})
|
||||
})
|
||||
|
||||
Recipe:new("lumber-mill")
|
||||
:clone("lumber-mill-copper")
|
||||
:assign({
|
||||
localised_name = { "entity-name.lumber-mill" },
|
||||
icons = {
|
||||
{ icon = data.raw.item["lumber-mill"].icon },
|
||||
{ icon = basic_circuit_board and "__base__/graphics/icons/copper-plate.png" or "__base__/graphics/icons/electronic-circuit.png", scale = 0.25, shift = { 8, 8 } }
|
||||
}
|
||||
})
|
||||
:replaceIngredient("gold-plate", "copper-plate")
|
||||
:apply()
|
||||
|
||||
Technology:new(basic_circuit_board and "copper-processing" or "electronics"):addRecipe("lumber-mill-copper")
|
||||
end
|
||||
|
||||
Recipe:new("wooden-chest"):addCategory("wood-processing")
|
||||
Recipe:new("small-electric-pole"):addCategory("wood-processing")
|
||||
|
|
@ -1,33 +1,39 @@
|
|||
local item_sounds = require("__base__.prototypes.item_sounds")
|
||||
local Recipe = require("__cf-lib__/data/Recipe")
|
||||
|
||||
data:extend({
|
||||
{
|
||||
type = "item",
|
||||
name = "lumber",
|
||||
icon = Lignumis.graphics .. "icons/lumber.png",
|
||||
pictures = {
|
||||
{ filename = Lignumis.graphics .. "icons/lumber.png", size = 64, scale = 0.5 },
|
||||
{ filename = Lignumis.graphics .. "icons/lumber-1.png", size = 64, scale = 0.5 },
|
||||
{ filename = Lignumis.graphics .. "icons/lumber-2.png", size = 64, scale = 0.5 },
|
||||
if not mods["wood-logistics"] then
|
||||
data:extend({
|
||||
{
|
||||
type = "item",
|
||||
name = "lumber",
|
||||
icon = Lignumis.graphics .. "icons/lumber.png",
|
||||
pictures = {
|
||||
{ filename = Lignumis.graphics .. "icons/lumber.png", size = 64, scale = 0.5 },
|
||||
{ filename = Lignumis.graphics .. "icons/lumber-1.png", size = 64, scale = 0.5 },
|
||||
{ filename = Lignumis.graphics .. "icons/lumber-2.png", size = 64, scale = 0.5 },
|
||||
},
|
||||
subgroup = "intermediate-product",
|
||||
order = "A[basic-intermediates]-c[lumber]",
|
||||
inventory_move_sound = item_sounds.wood_inventory_move,
|
||||
pick_sound = item_sounds.wood_inventory_pickup,
|
||||
drop_sound = item_sounds.wood_inventory_move,
|
||||
stack_size = 100,
|
||||
random_tint_color = { 1.0, 0.95, 0.9, 1.0 },
|
||||
fuel_category = "wood",
|
||||
fuel_value = "4MJ"
|
||||
},
|
||||
subgroup = "intermediate-product",
|
||||
order = "A[basic-intermediates]-c[lumber]",
|
||||
inventory_move_sound = item_sounds.wood_inventory_move,
|
||||
pick_sound = item_sounds.wood_inventory_pickup,
|
||||
drop_sound = item_sounds.wood_inventory_move,
|
||||
stack_size = 100,
|
||||
random_tint_color = { 1.0, 0.95, 0.9, 1.0 },
|
||||
fuel_category = "wood",
|
||||
fuel_value = "4MJ"
|
||||
},
|
||||
{
|
||||
type = "recipe",
|
||||
name = "lumber",
|
||||
category = "wood-processing-or-assembling",
|
||||
allow_productivity = true,
|
||||
allow_as_intermediate = true,
|
||||
ingredients = { { type = "item", name = "wood", amount = 2 } },
|
||||
results = { { type = "item", name = "lumber", amount = 1 } },
|
||||
energy_required = 1
|
||||
}
|
||||
})
|
||||
{
|
||||
type = "recipe",
|
||||
name = "lumber",
|
||||
category = "crafting",
|
||||
additional_categories = { "wood-processing" },
|
||||
allow_productivity = true,
|
||||
allow_as_intermediate = true,
|
||||
ingredients = { { type = "item", name = "wood", amount = 2 } },
|
||||
results = { { type = "item", name = "lumber", amount = 1 } },
|
||||
energy_required = 1
|
||||
}
|
||||
})
|
||||
else
|
||||
Recipe:new("lumber"):addCategory("wood-processing")
|
||||
end
|
||||
|
|
@ -100,17 +100,17 @@ emit("lab", "biolab", 20)
|
|||
emit("locomotive", "locomotive", 200)
|
||||
emit_constant("locomotive", "locomotive", 10)
|
||||
|
||||
--emit_constant("transport-belt", "wood-transport-belt", 2)
|
||||
emit_constant("transport-belt", "wood-transport-belt", 2)
|
||||
emit_constant("transport-belt", "transport-belt", 3)
|
||||
emit_constant("transport-belt", "fast-transport-belt", 4)
|
||||
emit_constant("transport-belt", "express-transport-belt", 6)
|
||||
emit_constant("transport-belt", "turbo-transport-belt", 8)
|
||||
--emit_constant("underground-belt", "wood-underground-belt", 7.5)
|
||||
emit_constant("underground-belt", "wood-underground-belt", 7.5)
|
||||
emit_constant("underground-belt", "underground-belt", 10)
|
||||
emit_constant("underground-belt", "fast-underground-belt", 20)
|
||||
emit_constant("underground-belt", "express-underground-belt", 30)
|
||||
emit_constant("underground-belt", "turbo-underground-belt", 40)
|
||||
--emit_constant("splitter", "wood-splitter", 20)
|
||||
emit_constant("splitter", "wood-splitter", 20)
|
||||
emit_constant("splitter", "splitter", 30)
|
||||
emit_constant("splitter", "fast-splitter", 40)
|
||||
emit_constant("splitter", "express-splitter", 50)
|
||||
|
|
|
|||
|
|
@ -77,7 +77,8 @@ QualityAssembler.EntityBuilder:new()
|
|||
crafting_speed = 4,
|
||||
module_slots = 6,
|
||||
allowed_effects = { "consumption", "pollution", "quality" },
|
||||
effect_receiver = { base_effect = { quality = 3.5 } }
|
||||
effect_receiver = { base_effect = { quality = 3.5 } },
|
||||
crafting_categories = { "quality-assembling" }
|
||||
})
|
||||
|
||||
QualityAssembler.ItemBuilder:new():apply()
|
||||
|
|
@ -91,7 +92,8 @@ QualityAssembler.RecipeBuilder:new()
|
|||
{ type = "item", name = "quantum-processor", amount = 10 }
|
||||
})
|
||||
:apply({
|
||||
category = "electromagnetics-or-quality-assembling",
|
||||
category = "electromagnetics",
|
||||
additional_categories = { "quality-assembling" }
|
||||
})
|
||||
|
||||
QualityAssembler.TechnologyBuilder:new()
|
||||
|
|
@ -147,71 +149,49 @@ data:extend({
|
|||
},
|
||||
research_trigger = { type = "craft-item", item = "gold-quality-catalyst", count = 10000 },
|
||||
prerequisites = { "experienced-quality-assembling-1" }
|
||||
},
|
||||
{
|
||||
type = "recipe-category",
|
||||
name = "quality-assembling"
|
||||
}
|
||||
})
|
||||
|
||||
local function convert_category(name)
|
||||
local quality_name = name .. "-or-quality-assembling"
|
||||
data:extend({
|
||||
{
|
||||
type = "recipe-category",
|
||||
name = quality_name
|
||||
}
|
||||
})
|
||||
|
||||
for _, assembler in pairs(data.raw["assembling-machine"]) do
|
||||
if assembler.crafting_categories and table.contains(assembler.crafting_categories, name) then
|
||||
table.insert(assembler.crafting_categories, quality_name)
|
||||
end
|
||||
end
|
||||
for _, character in pairs(data.raw["character"]) do
|
||||
if character.crafting_categories and table.contains(character.crafting_categories, name) then
|
||||
table.insert(character.crafting_categories, quality_name)
|
||||
end
|
||||
end
|
||||
table.insert(data.raw["assembling-machine"]["quality-assembler"].crafting_categories, quality_name)
|
||||
local function qa(recipeName)
|
||||
local recipe = data.raw.recipe[recipeName]
|
||||
recipe.additional_categories = recipe.additional_categories or {}
|
||||
table.insert(recipe.additional_categories, "quality-assembling")
|
||||
end
|
||||
|
||||
convert_category("wood-processing-or-assembling")
|
||||
convert_category("metallurgy-or-assembling")
|
||||
convert_category("metallurgy")
|
||||
convert_category("electronics")
|
||||
convert_category("electronics-or-assembling")
|
||||
convert_category("electromagnetics")
|
||||
convert_category("organic-or-assembling")
|
||||
convert_category("crafting")
|
||||
convert_category("cryogenics-or-assembling")
|
||||
|
||||
-- Lignumis
|
||||
data.raw.recipe["lumber-mill"].category = "wood-processing-or-assembling-or-quality-assembling"
|
||||
qa("lumber-mill")
|
||||
|
||||
-- Nauvis
|
||||
data.raw.recipe["logistic-robot"].category = "crafting-or-quality-assembling"
|
||||
data.raw.recipe["construction-robot"].category = "crafting-or-quality-assembling"
|
||||
data.raw.recipe["roboport"].category = "crafting-or-quality-assembling"
|
||||
data.raw.recipe["speed-module-3"].category = "electronics-or-quality-assembling"
|
||||
data.raw.recipe["productivity-module-3"].category = "electronics-or-quality-assembling"
|
||||
data.raw.recipe["efficiency-module-3"].category = "electronics-or-quality-assembling"
|
||||
data.raw.recipe["rocket-silo"].category = "crafting-or-quality-assembling"
|
||||
data.raw.recipe["cargo-bay"].category = "crafting-or-quality-assembling"
|
||||
data.raw.recipe["asteroid-collector"].category = "crafting-or-quality-assembling"
|
||||
data.raw.recipe["thruster"].category = "crafting-or-quality-assembling"
|
||||
qa("logistic-robot")
|
||||
qa("construction-robot")
|
||||
qa("roboport")
|
||||
qa("speed-module-3")
|
||||
qa("productivity-module-3")
|
||||
qa("efficiency-module-3")
|
||||
qa("rocket-silo")
|
||||
qa("cargo-bay")
|
||||
qa("asteroid-collector")
|
||||
qa("thruster")
|
||||
|
||||
-- Vulcanus
|
||||
data.raw.recipe["foundry"].category = "metallurgy-or-assembling-or-quality-assembling"
|
||||
data.raw.recipe["big-mining-drill"].category = "metallurgy-or-quality-assembling"
|
||||
qa("foundry")
|
||||
qa("big-mining-drill")
|
||||
|
||||
-- Fulgora
|
||||
data.raw.recipe["electromagnetic-plant"].category = "electronics-or-assembling-or-quality-assembling"
|
||||
data.raw.recipe["lightning-collector"].category = "electromagnetics-or-quality-assembling"
|
||||
data.raw.recipe["mech-armor"].category = "crafting-or-quality-assembling"
|
||||
data.raw.recipe["quality-module-3"].category = "electronics-or-quality-assembling"
|
||||
data.raw.recipe["recycler"].category = "crafting-or-quality-assembling"
|
||||
qa("electromagnetic-plant")
|
||||
qa("lightning-collector")
|
||||
qa("mech-armor")
|
||||
qa("quality-module-3")
|
||||
qa("recycler")
|
||||
|
||||
-- Gleba
|
||||
data.raw.recipe["biochamber"].category = "organic-or-assembling-or-quality-assembling"
|
||||
data.raw.recipe["stack-inserter"].category = "crafting-or-quality-assembling"
|
||||
data.raw.recipe["spidertron"].category = "crafting-or-quality-assembling"
|
||||
qa("biochamber")
|
||||
qa("stack-inserter")
|
||||
qa("spidertron")
|
||||
|
||||
-- Aquilo
|
||||
data.raw.recipe["cryogenic-plant"].category = "cryogenics-or-assembling-or-quality-assembling"
|
||||
qa("cryogenic-plant")
|
||||
|
|
@ -20,7 +20,6 @@ assembling_machine.crafting_categories = {
|
|||
"crafting",
|
||||
"electronics",
|
||||
"pressing",
|
||||
"wood-processing-or-assembling",
|
||||
"organic-or-assembling",
|
||||
"electronics-or-assembling",
|
||||
"metallurgy-or-assembling",
|
||||
|
|
|
|||
13
lignumis/prototypes/content/technology-updates.lua
Normal file
13
lignumis/prototypes/content/technology-updates.lua
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
if mods["wood-logistics"] then
|
||||
table.assign(data.raw.technology["advanced-carpentry"], {
|
||||
prerequisites = { "steam-science-pack" },
|
||||
unit = {
|
||||
count = 250,
|
||||
time = 15,
|
||||
ingredients = {
|
||||
{ "wood-science-pack", 1 },
|
||||
{ "steam-science-pack", 1 }
|
||||
}
|
||||
}
|
||||
})
|
||||
end
|
||||
|
|
@ -1,2 +1,3 @@
|
|||
require("fuel-category-updates")
|
||||
require("lignumis/planet-updates")
|
||||
require("lignumis/planet-updates")
|
||||
require("technology-updates")
|
||||
|
|
@ -144,7 +144,8 @@ data:extend({
|
|||
{
|
||||
type = "recipe",
|
||||
name = "wood-lab",
|
||||
category = "wood-processing-or-assembling",
|
||||
category = "crafting",
|
||||
additional_categories = { "wood-processing" },
|
||||
energy_required = 2,
|
||||
ingredients = {
|
||||
{ type = "item", name = "lumber", amount = 6 },
|
||||
|
|
|
|||
|
|
@ -1,104 +1,151 @@
|
|||
local BeltFactory = require(MF.logistics .. "Belts")
|
||||
local Belt = BeltFactory("wood", "brown", "slow")
|
||||
local Recipe = require("__cf-lib__/data/Recipe")
|
||||
local Item = require("__cf-lib__/data/Item")
|
||||
|
||||
local basic_circuit_board = settings.startup["lignumis-basic-circuit-board"].value
|
||||
|
||||
Belt.EntityBuilder:new()
|
||||
:itemsPerSecond(7.5)
|
||||
:nextTier("")
|
||||
:undergroundDistance(4)
|
||||
:animationSpeedMultiplier(1.01)
|
||||
:apply({
|
||||
transportBelt = {
|
||||
emissions_per_second = { noise = 2 / 60 }
|
||||
},
|
||||
undergroundBelt = {
|
||||
emissions_per_second = { noise = 7.5 / 60 },
|
||||
factoriopedia_simulation = {
|
||||
init =
|
||||
[[
|
||||
game.simulation.camera_position = {0, 0.5}
|
||||
game.simulation.camera_zoom = 1.8
|
||||
game.surfaces[1].create_entities_from_blueprint_string
|
||||
{
|
||||
string = "0eNqVUNsKgzAM/Zc81+FEBfsrYwwvQQKaltpuivjvS3Wwh8HGnkKSc0tWaIaA1hF70CtMXNvEm6R31MV+Bl0oWECfNwXUGp5AXwRGPddDBHA9Imh4GNMlgTt0vTNSkwYHD5EjsznSrwqQPXnCQ2JvlhuHsUEnAPVdSoE1k7ANv2KlpyOYVLHpyGF7bHMFfrFRidiGGOLDLPvXLP9tZoLf3eRO8jjK5P1YBXd0004oyqzKq6ooqzLNinLbnvlmf6E=",
|
||||
position = {-0.5, 0}
|
||||
if not mods["wood-logistics"] then
|
||||
Belt.EntityBuilder:new()
|
||||
:itemsPerSecond(7.5)
|
||||
:nextTier("")
|
||||
:undergroundDistance(4)
|
||||
:animationSpeedMultiplier(1.01)
|
||||
:apply({
|
||||
transportBelt = {
|
||||
emissions_per_second = { noise = 2 / 60 }
|
||||
},
|
||||
undergroundBelt = {
|
||||
emissions_per_second = { noise = 7.5 / 60 },
|
||||
factoriopedia_simulation = {
|
||||
init =
|
||||
[[
|
||||
game.simulation.camera_position = {0, 0.5}
|
||||
game.simulation.camera_zoom = 1.8
|
||||
game.surfaces[1].create_entities_from_blueprint_string
|
||||
{
|
||||
string = "0eNqVUNsKgzAM/Zc81+FEBfsrYwwvQQKaltpuivjvS3Wwh8HGnkKSc0tWaIaA1hF70CtMXNvEm6R31MV+Bl0oWECfNwXUGp5AXwRGPddDBHA9Imh4GNMlgTt0vTNSkwYHD5EjsznSrwqQPXnCQ2JvlhuHsUEnAPVdSoE1k7ANv2KlpyOYVLHpyGF7bHMFfrFRidiGGOLDLPvXLP9tZoLf3eRO8jjK5P1YBXd0004oyqzKq6ooqzLNinLbnvlmf6E=",
|
||||
position = {-0.5, 0}
|
||||
}
|
||||
]]
|
||||
}
|
||||
]]
|
||||
},
|
||||
splitter = {
|
||||
emissions_per_second = { noise = 20 / 60 }
|
||||
}
|
||||
},
|
||||
splitter = {
|
||||
emissions_per_second = { noise = 20 / 60 }
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
local splitter_item = Belt.ItemBuilder:new()
|
||||
:itemsPerRocket("transportBelt", 200)
|
||||
:itemsPerRocket("undergroundBelt", 100)
|
||||
:itemsPerRocket("splitter", 100)
|
||||
:order("0")
|
||||
:apply()
|
||||
.splitter
|
||||
local splitter_item = Belt.ItemBuilder:new()
|
||||
:itemsPerRocket("transportBelt", 200)
|
||||
:itemsPerRocket("undergroundBelt", 100)
|
||||
:itemsPerRocket("splitter", 100)
|
||||
:order("0")
|
||||
:apply()
|
||||
.splitter
|
||||
|
||||
Belt.RecipeBuilder:new()
|
||||
:beltAmount(2)
|
||||
:ingredients("transportBelt", {
|
||||
{ type = "item", name = "lumber", amount = 1 },
|
||||
{ type = "item", name = "wooden-gear-wheel", amount = 1 }
|
||||
})
|
||||
:ingredients("undergroundBelt", {
|
||||
{ type = "item", name = "lumber", amount = 1 },
|
||||
{ type = "item", name = "wood-transport-belt", amount = 4 },
|
||||
})
|
||||
:ingredients("splitter", {
|
||||
{ type = "item", name = "wood-transport-belt", amount = 2 },
|
||||
{ type = "item", name = "lumber", amount = 2 },
|
||||
basic_circuit_board and { type = "item", name = "basic-circuit-board", amount = 5 } or
|
||||
{ type = "item", name = "gold-cable", amount = 10 }
|
||||
})
|
||||
:apply({
|
||||
transportBelt = {
|
||||
category = "wood-processing-or-assembling"
|
||||
},
|
||||
undergroundBelt = {
|
||||
category = "wood-processing-or-assembling"
|
||||
},
|
||||
splitter = {
|
||||
category = "wood-processing-or-assembling"
|
||||
}
|
||||
})
|
||||
Belt.RecipeBuilder:new()
|
||||
:beltAmount(2)
|
||||
:ingredients("transportBelt", {
|
||||
{ type = "item", name = "lumber", amount = 1 },
|
||||
{ type = "item", name = "wooden-gear-wheel", amount = 1 }
|
||||
})
|
||||
:ingredients("undergroundBelt", {
|
||||
{ type = "item", name = "lumber", amount = 1 },
|
||||
{ type = "item", name = "wood-transport-belt", amount = 4 },
|
||||
})
|
||||
:ingredients("splitter", {
|
||||
{ type = "item", name = "wood-transport-belt", amount = 2 },
|
||||
{ type = "item", name = "lumber", amount = 2 },
|
||||
basic_circuit_board and { type = "item", name = "basic-circuit-board", amount = 5 } or
|
||||
{ type = "item", name = "gold-cable", amount = 10 }
|
||||
})
|
||||
:apply({
|
||||
transportBelt = {
|
||||
additional_categories = { "wood-processing" }
|
||||
},
|
||||
undergroundBelt = {
|
||||
additional_categories = { "wood-processing" }
|
||||
},
|
||||
splitter = {
|
||||
additional_categories = { "wood-processing" }
|
||||
}
|
||||
})
|
||||
|
||||
Belt.TechnologyBuilder:new()
|
||||
:prerequisites({ "wood-science-pack" })
|
||||
:ingredients({ { "wood-science-pack", 1 } })
|
||||
:count(10)
|
||||
:time(10)
|
||||
:apply()
|
||||
Belt.TechnologyBuilder:new()
|
||||
:prerequisites({ "wood-science-pack" })
|
||||
:ingredients({ { "wood-science-pack", 1 } })
|
||||
:count(10)
|
||||
:time(10)
|
||||
:apply()
|
||||
|
||||
if not basic_circuit_board then
|
||||
data:extend({
|
||||
Belt.RecipeBuilder:new()
|
||||
:ingredients("splitter", {
|
||||
{ type = "item", name = "wood-transport-belt", amount = 2 },
|
||||
{ type = "item", name = "lumber", amount = 2 },
|
||||
{ type = "item", name = "electronic-circuit", amount = 2 }
|
||||
})
|
||||
:build({
|
||||
splitter = {
|
||||
name = "wood-splitter-electronic-circuit",
|
||||
localised_name = { "entity-name.wood-splitter" },
|
||||
icons = {
|
||||
{ icon = splitter_item.icon },
|
||||
{ icon = "__base__/graphics/icons/electronic-circuit.png", scale = 0.25, shift = { 8, 8 } }
|
||||
},
|
||||
category = "wood-processing-or-assembling"
|
||||
if not basic_circuit_board then
|
||||
data:extend({
|
||||
Belt.RecipeBuilder:new()
|
||||
:ingredients("splitter", {
|
||||
{ type = "item", name = "wood-transport-belt", amount = 2 },
|
||||
{ type = "item", name = "lumber", amount = 2 },
|
||||
{ type = "item", name = "electronic-circuit", amount = 2 }
|
||||
})
|
||||
:build({
|
||||
splitter = {
|
||||
name = "wood-splitter-electronic-circuit",
|
||||
localised_name = { "entity-name.wood-splitter" },
|
||||
icons = {
|
||||
{ icon = splitter_item.icon },
|
||||
{ icon = "__base__/graphics/icons/electronic-circuit.png", scale = 0.25, shift = { 8, 8 } }
|
||||
},
|
||||
additional_categories = { "wood-processing" }
|
||||
}
|
||||
})
|
||||
.splitter
|
||||
})
|
||||
|
||||
table.insert(data.raw.technology["electronics"].effects, {
|
||||
type = "unlock-recipe",
|
||||
recipe = "wood-splitter-electronic-circuit"
|
||||
})
|
||||
end
|
||||
|
||||
else
|
||||
Recipe:new("wood-transport-belt")
|
||||
:replaceIngredient("copper-cable", "wooden-gear-wheel", 1)
|
||||
:assign({
|
||||
additional_categories = { "wood-processing" }
|
||||
})
|
||||
|
||||
Recipe:new("wood-underground-belt")
|
||||
:assign({
|
||||
additional_categories = { "wood-processing" }
|
||||
})
|
||||
|
||||
Recipe:new("wood-splitter")
|
||||
:replaceIngredient("copper-cable", basic_circuit_board and "basic-circuit-board" or "gold-cable", basic_circuit_board and 5 or nil)
|
||||
:assign({
|
||||
additional_categories = { "wood-processing" }
|
||||
})
|
||||
|
||||
if not basic_circuit_board then
|
||||
Recipe:new("wood-splitter")
|
||||
:clone("wood-splitter-electronic-circuit")
|
||||
:replaceIngredient(basic_circuit_board and "gold-cable" or "basic-circuit-board", "electronic-circuit", 2)
|
||||
:assign({
|
||||
localised_name = { "entity-name.wood-splitter" },
|
||||
icons = {
|
||||
{ icon = data.raw.item["wood-splitter"].icon },
|
||||
{ icon = "__base__/graphics/icons/electronic-circuit.png", scale = 0.25, shift = { 8, 8 } }
|
||||
}
|
||||
})
|
||||
.splitter
|
||||
})
|
||||
:unlockedByTechnology("electronics")
|
||||
:apply()
|
||||
end
|
||||
|
||||
table.insert(data.raw.technology["electronics"].effects, {
|
||||
type = "unlock-recipe",
|
||||
recipe = "wood-splitter-electronic-circuit"
|
||||
})
|
||||
end
|
||||
Item:new("wood-transport-belt")
|
||||
:itemsPerRocket(200)
|
||||
:defaultImportLocation("lignumis")
|
||||
Item:new("wood-underground-belt")
|
||||
:itemsPerRocket(100)
|
||||
:defaultImportLocation("lignumis")
|
||||
Item:new("wood-splitter")
|
||||
:itemsPerRocket(100)
|
||||
:defaultImportLocation("lignumis")
|
||||
end
|
||||
|
|
@ -82,7 +82,8 @@ data:extend({
|
|||
{
|
||||
type = "recipe",
|
||||
name = "wood-darts-magazine",
|
||||
category = "wood-processing-or-assembling",
|
||||
category = "crafting",
|
||||
additional_categories = { "wood-processing" },
|
||||
energy_required = 1,
|
||||
ingredients = { { type = "item", name = "wood", amount = 2 } },
|
||||
results = { { type = "item", name = "wood-darts-magazine", amount = 1 } }
|
||||
|
|
|
|||
|
|
@ -17,7 +17,8 @@ data:extend({
|
|||
{
|
||||
type = "recipe",
|
||||
name = "wooden-gear-wheel",
|
||||
category = "wood-processing-or-assembling",
|
||||
category = "crafting",
|
||||
additional_categories = { "wood-processing" },
|
||||
ingredients = { { type = "item", name = "lumber", amount = 1 } },
|
||||
results = { { type = "item", name = "wooden-gear-wheel", amount = 2 } },
|
||||
allow_productivity = true
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
local recipe = data.raw.recipe["wooden-wall"]
|
||||
recipe.ingredients = { { type = "item", name = "lumber", amount = 4 } }
|
||||
recipe.results = { { type = "item", name = "wooden-wall", amount = 1 } }
|
||||
recipe.category = "wood-processing-or-assembling"
|
||||
recipe.additional_categories = { "wood-processing" }
|
||||
|
|
@ -21,7 +21,8 @@ local drill_item = data.raw["item"]["burner-mining-drill"]
|
|||
drill_item.icon = Lignumis.graphics .. "icons/burner-mining-drill.png"
|
||||
|
||||
local drill_recipe = data.raw["recipe"]["burner-mining-drill"]
|
||||
drill_recipe.category = "wood-processing-or-assembling"
|
||||
drill_recipe.category = "crafting"
|
||||
drill_recipe.additional_categories = { "wood-processing" }
|
||||
drill_recipe.ingredients = {
|
||||
{ type = "item", name = "stone-furnace", amount = 1 },
|
||||
{ type = "item", name = "wooden-gear-wheel", amount = basic_circuit_board and 2 or 3 },
|
||||
|
|
@ -48,7 +49,7 @@ burner_inserter_recipe.ingredients = {
|
|||
{ type = "item", name = "lumber", amount = 1 }
|
||||
}
|
||||
if settings.startup["lignumis-lumber-mill-more-recipes"].value then
|
||||
burner_inserter_recipe.category = "wood-processing-or-assembling"
|
||||
burner_inserter_recipe.additional_categories = { "wood-processing" }
|
||||
end
|
||||
|
||||
|
||||
|
|
@ -110,7 +111,7 @@ for _, tree in pairs(data.raw.tree) do
|
|||
if not isRegularTree then goto continue end
|
||||
tree.minable.result = nil
|
||||
tree.minable.count = nil
|
||||
local woodResult = { type = "item", name = "wood", amount = nil, amount_min = 2, amount_max = 10 }
|
||||
local woodResult = { type = "item", name = "wood", amount = nil, amount_min = 2, amount_max = 8 }
|
||||
if minable.results and #woodResults > 0 then
|
||||
table.assign(woodResults[1], woodResult)
|
||||
woodResults[1].amount = nil
|
||||
|
|
@ -127,14 +128,7 @@ tree_plant.minable.count = nil
|
|||
tree_plant.surface_conditions[1].min = 900
|
||||
table.insert(tree_plant.autoplace.tile_restriction, "natural-gold-soil")
|
||||
|
||||
if mods["Diversitree"] then
|
||||
data.raw.plant["s6xdvt-fake-tree"].surface_conditions[1].min = 900
|
||||
end
|
||||
|
||||
table.insert(data.raw["assembling-machine"]["assembling-machine-1"].crafting_categories, "wood-processing-or-assembling")
|
||||
table.insert(data.raw["assembling-machine"]["assembling-machine-1"].crafting_categories, "organic-or-assembling")
|
||||
table.insert(data.raw["assembling-machine"]["assembling-machine-2"].crafting_categories, "wood-processing-or-assembling")
|
||||
table.insert(data.raw["assembling-machine"]["assembling-machine-3"].crafting_categories, "wood-processing-or-assembling")
|
||||
|
||||
|
||||
-- Disable vanilla early game recipes
|
||||
|
|
@ -224,6 +218,7 @@ robots_speed_technology_3.unit = {
|
|||
ingredients = { { "automation-science-pack", 1 }, { "logistic-science-pack", 1 }, { "chemical-science-pack", 1 } },
|
||||
time = 30
|
||||
}
|
||||
robots_speed_technology_3.upgrade = false
|
||||
|
||||
local robots_speed_technology_4 = data.raw.technology["worker-robots-speed-4"]
|
||||
robots_speed_technology_4.prerequisites = { "worker-robots-speed-3", "utility-science-pack" }
|
||||
|
|
@ -334,35 +329,4 @@ if settings.startup["lignumis-fulgora-wood"].value then
|
|||
if recycler.result_inventory_size < recycling_result_count then
|
||||
recycler.result_inventory_size = recycling_result_count
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- Fix item weights
|
||||
|
||||
local function set_default_weight(item, items_per_rocket, type)
|
||||
data.raw[type or "item"][item].weight = data.raw[type or "item"][item].weight or 1000 * kg / items_per_rocket
|
||||
end
|
||||
set_default_weight("electronic-circuit", 2000)
|
||||
set_default_weight("advanced-circuit", 1000)
|
||||
set_default_weight("processing-unit", 300)
|
||||
set_default_weight("low-density-structure", 200)
|
||||
set_default_weight("rocket-fuel", 100)
|
||||
set_default_weight("inserter", 50)
|
||||
set_default_weight("fast-inserter", 50)
|
||||
set_default_weight("electric-mining-drill", 50)
|
||||
set_default_weight("pumpjack", 20)
|
||||
set_default_weight("repair-pack", 100, "repair-tool")
|
||||
set_default_weight("big-electric-pole", 50)
|
||||
set_default_weight("assembling-machine-1", 50)
|
||||
set_default_weight("assembling-machine-2", 50)
|
||||
set_default_weight("oil-refinery", 10)
|
||||
set_default_weight("accumulator", 50)
|
||||
set_default_weight("steam-engine", 10)
|
||||
set_default_weight("substation", 50)
|
||||
set_default_weight("radar", 50)
|
||||
set_default_weight("storage-tank", 50)
|
||||
set_default_weight("fast-transport-belt", 100)
|
||||
set_default_weight("fast-underground-belt", 50)
|
||||
set_default_weight("fast-splitter", 50)
|
||||
set_default_weight("steel-plate", 400)
|
||||
set_default_weight("steam-turbine", 10)
|
||||
end
|
||||
|
|
@ -1 +1,2 @@
|
|||
require("wood-logistics")
|
||||
require("wood-military")
|
||||
20
lignumis/settings/wood-logistics.lua
Normal file
20
lignumis/settings/wood-logistics.lua
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
if not mods["wood-logistics"] then
|
||||
return
|
||||
end
|
||||
|
||||
local Settings = require("__cf-lib__/settings/Settings")
|
||||
local force = Settings.force
|
||||
local default = Settings.default
|
||||
|
||||
force("wood-logistics-lumber", true)
|
||||
force("wood-logistics-lumber-mill", true)
|
||||
force("wood-logistics-woodtronics", false)
|
||||
force("wood-logistics-belts", true)
|
||||
force("wood-logistics-belts-modify", false)
|
||||
default("wood-logistics-belts-circuits", true)
|
||||
force("wood-logistics-inserter", false)
|
||||
default("wood-logistics-rail-cost", 0)
|
||||
default("wood-logistics-cargo-wagon", false)
|
||||
force("wood-logistics-assembling-machine", false)
|
||||
default("wood-logistics-nerf-small-electric-pole", false)
|
||||
force("wood-logistics-repair-pack-cost", 0)
|
||||
|
|
@ -2,10 +2,12 @@ if not mods["wood-military"] then
|
|||
return
|
||||
end
|
||||
|
||||
data.raw["bool-setting"]["wood-military-rockets"].default_value = false
|
||||
data.raw["bool-setting"]["wood-military-artillery"].default_value = false
|
||||
data.raw["bool-setting"]["wood-military-damage-buff"].default_value = false
|
||||
data.raw["bool-setting"]["wood-military-armor"].hidden = true
|
||||
data.raw["bool-setting"]["wood-military-armor"].forced_value = true
|
||||
data.raw["bool-setting"]["wood-military-nerf-start"].hidden = true
|
||||
data.raw["bool-setting"]["wood-military-nerf-start"].forced_value = true
|
||||
local Settings = require("__cf-lib__/settings/Settings")
|
||||
local force = Settings.force
|
||||
local default = Settings.default
|
||||
|
||||
default("wood-military-rockets", false)
|
||||
default("wood-military-artillery", false)
|
||||
default("wood-military-damage-buff", false)
|
||||
force("wood-military-armor", true)
|
||||
force("wood-military-nerf-start", true)
|
||||
Loading…
Add table
Add a link
Reference in a new issue