Compare commits
16 commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
b2ac4793c6 | ||
![]() |
4ed26b5b9d | ||
![]() |
d41cc3c822 | ||
![]() |
ad56704b52 | ||
![]() |
c481394e55 | ||
![]() |
c334459db2 | ||
![]() |
e1c40fcd33 | ||
![]() |
da50f85b5b | ||
![]() |
3b26f3a754 | ||
![]() |
0bfda7246f | ||
![]() |
f91f364c8d | ||
![]() |
8e1c774e2a | ||
![]() |
1b117be9c6 | ||
![]() |
67055378c8 | ||
![]() |
0fb21cf2ea | ||
![]() |
db9dd1c252 |
15
README.md
|
@ -2,8 +2,6 @@ This mod extends the early game of Space Age by putting you on the moon "Lignumi
|
||||||
|
|
||||||
The duration of the stay on Lignumis will be rather short. The impact of the later game will still be substantial (once implemented).
|
The duration of the stay on Lignumis will be rather short. The impact of the later game will still be substantial (once implemented).
|
||||||
|
|
||||||
**If you start a new game, check out the setting for adding Basic circuit boards.**
|
|
||||||
|
|
||||||
## Mod recommendations
|
## Mod recommendations
|
||||||
|
|
||||||
The following mods can be a great addition for this mod:
|
The following mods can be a great addition for this mod:
|
||||||
|
@ -63,6 +61,7 @@ The following planet mods are tested for (at least technical) compatibility:
|
||||||
## Problematic / incompatible mods
|
## Problematic / incompatible mods
|
||||||
|
|
||||||
* Mods that let you start on a different planet: They are supported, but you are missing half of the content of this mod.
|
* Mods that let you start on a different planet: They are supported, but you are missing half of the content of this mod.
|
||||||
|
* The combination of AAI Industry and Any planet start is currently not supported.
|
||||||
* Alien Biomes: Lignumis won't have any trees. It's playable, but not as intended.
|
* Alien Biomes: Lignumis won't have any trees. It's playable, but not as intended.
|
||||||
* The rest of the Wooden Universe: I marked the ones incompatible that don't make sense to combine or that wouldn't add more that is not already included.
|
* The rest of the Wooden Universe: I marked the ones incompatible that don't make sense to combine or that wouldn't add more that is not already included.
|
||||||
|
|
||||||
|
@ -115,9 +114,6 @@ If your modded lab is special and it should not support these science packs, use
|
||||||
- Add information in Factoriopedia
|
- Add information in Factoriopedia
|
||||||
- Compatibility with [On Wayward Seas](https://mods.factorio.com/mod/wayward-seas)
|
- Compatibility with [On Wayward Seas](https://mods.factorio.com/mod/wayward-seas)
|
||||||
- Compatibility with [Noble Metals](https://mods.factorio.com/mod/bzgold) once it's updated
|
- Compatibility with [Noble Metals](https://mods.factorio.com/mod/bzgold) once it's updated
|
||||||
- Check if creating a separate group for Lignumis recipes/items makes sense
|
|
||||||
- Only create 1 cutscene per game in multiplayer
|
|
||||||
- Think about moving Lumber mill to later and let it use electricity.
|
|
||||||
|
|
||||||
## Credits
|
## Credits
|
||||||
|
|
||||||
|
@ -126,7 +122,7 @@ If your modded lab is special and it should not support these science packs, use
|
||||||
- Simplified chinese (zh-CN): cyx2015s
|
- Simplified chinese (zh-CN): cyx2015s
|
||||||
- Polish (pl): StarGazer
|
- Polish (pl): StarGazer
|
||||||
|
|
||||||
### Assets
|
### Assets / Code
|
||||||
|
|
||||||
[Hurricane](https://mods.factorio.com/user/Hurricane046)
|
[Hurricane](https://mods.factorio.com/user/Hurricane046)
|
||||||
|
|
||||||
|
@ -186,4 +182,9 @@ If your modded lab is special and it should not support these science packs, use
|
||||||
|
|
||||||
[Pixabay](https://pixabay.com)
|
[Pixabay](https://pixabay.com)
|
||||||
|
|
||||||
- [AudioPapkin: Forest ambience](https://pixabay.com/sound-effects/forest-ambience-296528/)
|
- [AudioPapkin: Forest ambience](https://pixabay.com/sound-effects/forest-ambience-296528/)
|
||||||
|
|
||||||
|
[SafTheLamb](https://mods.factorio.com/user/SafTheLamb)
|
||||||
|
|
||||||
|
- [Early Agriculture](https://mods.factorio.com/mod/early-agriculture): Fix for trees not being plantable on Nauvis with Alien Biomes active.
|
||||||
|
- [Wooden Logistics](https://mods.factorio.com/mod/wood-logistics): Code for AAI Loader.
|
|
@ -1,4 +1,35 @@
|
||||||
---------------------------------------------------------------------------------------------------
|
---------------------------------------------------------------------------------------------------
|
||||||
|
Version: 1.0.30
|
||||||
|
Date: 06.03.2025
|
||||||
|
Bug Fixes:
|
||||||
|
- Any planet start: Fix startup crash
|
||||||
|
---------------------------------------------------------------------------------------------------
|
||||||
|
Version: 1.0.29
|
||||||
|
Date: 05.03.2025
|
||||||
|
Breaking Changes:
|
||||||
|
- Nerf quality assembler to +25% quality
|
||||||
|
Changes:
|
||||||
|
- Set default for setting "Basic circuit boards" to true
|
||||||
|
- Alien Biomes: Add warning when the game starts that AB is not supported
|
||||||
|
Bug Fixes:
|
||||||
|
- Fix Burner agricultural tower not having a Nauvis recipe when "Basic circuit boards" is active
|
||||||
|
---------------------------------------------------------------------------------------------------
|
||||||
|
Version: 1.0.28
|
||||||
|
Date: 04.03.2025
|
||||||
|
Changes:
|
||||||
|
- Steam assembler technology should not ignore tech cost multiplier
|
||||||
|
Bug Fixes:
|
||||||
|
- AAI Loaders: Add missing translation
|
||||||
|
- Prevent possible errors on player initialization
|
||||||
|
---------------------------------------------------------------------------------------------------
|
||||||
|
Version: 1.0.27
|
||||||
|
Date: 02.03.2025
|
||||||
|
Changes:
|
||||||
|
- Add compatibility for "Any planet start"
|
||||||
|
- Add compatibility for "Lane splitters"
|
||||||
|
Bug Fixes:
|
||||||
|
- AAI Industry: Fix basic circuit board recipe unlock
|
||||||
|
---------------------------------------------------------------------------------------------------
|
||||||
Version: 1.0.26
|
Version: 1.0.26
|
||||||
Date: 28.02.2025
|
Date: 28.02.2025
|
||||||
Bug Fixes:
|
Bug Fixes:
|
||||||
|
|
Before Width: | Height: | Size: 8.6 KiB |
Before Width: | Height: | Size: 9.5 KiB |
Before Width: | Height: | Size: 6.9 KiB |
Before Width: | Height: | Size: 7.4 KiB |
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "lignumis",
|
"name": "lignumis",
|
||||||
"version": "1.0.26",
|
"version": "1.0.30",
|
||||||
"title": "Lignumis",
|
"title": "Lignumis",
|
||||||
"description": "Dive into the world of Lignumis, a moon of Nauvis offering only the most basic technologies.",
|
"description": "Dive into the world of Lignumis, a moon of Nauvis offering only the most basic technologies.",
|
||||||
"author": "cackling fiend",
|
"author": "cackling fiend",
|
||||||
|
@ -28,6 +28,7 @@
|
||||||
"?Diversitree",
|
"?Diversitree",
|
||||||
"?aai-loaders",
|
"?aai-loaders",
|
||||||
"?atan-nuclear-science",
|
"?atan-nuclear-science",
|
||||||
|
"?lane-splitters",
|
||||||
"!apm_power_ldinc",
|
"!apm_power_ldinc",
|
||||||
"!wood-logistics",
|
"!wood-logistics",
|
||||||
"!early-agriculture",
|
"!early-agriculture",
|
||||||
|
|
|
@ -45,6 +45,7 @@ basic-radar=Basic radar
|
||||||
active-noise-cancelling-tower=Active noise cancelling tower
|
active-noise-cancelling-tower=Active noise cancelling tower
|
||||||
quality-assembler=Quality assembler
|
quality-assembler=Quality assembler
|
||||||
aai-wood-loader=Wood loader
|
aai-wood-loader=Wood loader
|
||||||
|
wood-lane-splitter=Wood lane splitter
|
||||||
|
|
||||||
[entity-description]
|
[entity-description]
|
||||||
lumber-mill=Advanced machine to process wood.
|
lumber-mill=Advanced machine to process wood.
|
||||||
|
@ -128,6 +129,7 @@ basic-repair-pack=Basic repair pack
|
||||||
basic-radar=Basic radar
|
basic-radar=Basic radar
|
||||||
active-noise-cancelling=Active noise cancelling
|
active-noise-cancelling=Active noise cancelling
|
||||||
quality-assembler=Quality assembler
|
quality-assembler=Quality assembler
|
||||||
|
aai-wood-loader=Wood loader
|
||||||
|
|
||||||
[technology-description]
|
[technology-description]
|
||||||
wood-science-pack=Allows research of basic technologies based on wood products.
|
wood-science-pack=Allows research of basic technologies based on wood products.
|
||||||
|
|
|
@ -5,10 +5,12 @@ if not mods["aai-industry"] then return end
|
||||||
data.raw.recipe["wood-science-pack"].allow_hand_crafting = true
|
data.raw.recipe["wood-science-pack"].allow_hand_crafting = true
|
||||||
|
|
||||||
local burner_mechanics = Technology:new("burner-mechanics")
|
local burner_mechanics = Technology:new("burner-mechanics")
|
||||||
burner_mechanics:addPrerequisite("iron-processing")
|
|
||||||
burner_mechanics:removeRecipe("burner-inserter")
|
burner_mechanics:removeRecipe("burner-inserter")
|
||||||
burner_mechanics:removeRecipe("burner-mining-drill")
|
burner_mechanics:removeRecipe("burner-mining-drill")
|
||||||
burner_mechanics:removeRecipe("burner-assembling-machine")
|
burner_mechanics:removeRecipe("burner-assembling-machine")
|
||||||
|
if not mods["planet-picker"] and not mods["any-planet-start"] then
|
||||||
|
burner_mechanics:addPrerequisite("iron-processing")
|
||||||
|
end
|
||||||
|
|
||||||
data.raw.recipe["burner-inserter"].enabled = true
|
data.raw.recipe["burner-inserter"].enabled = true
|
||||||
data.raw.recipe["burner-mining-drill"].enabled = true
|
data.raw.recipe["burner-mining-drill"].enabled = true
|
||||||
|
@ -29,4 +31,8 @@ if settings.startup["lignumis-basic-circuit-board"].value then
|
||||||
table.insert(data.raw["recipe"]["inserter"].ingredients, { type = "item", name = "basic-circuit-board", amount = 1 })
|
table.insert(data.raw["recipe"]["inserter"].ingredients, { type = "item", name = "basic-circuit-board", amount = 1 })
|
||||||
table.insert(data.raw["recipe"]["burner-lab"].ingredients, { type = "item", name = "basic-circuit-board", amount = 10 })
|
table.insert(data.raw["recipe"]["burner-lab"].ingredients, { type = "item", name = "basic-circuit-board", amount = 10 })
|
||||||
table.insert(data.raw["recipe"]["assembling-machine-1"].ingredients, { type = "item", name = "basic-circuit-board", amount = 5 })
|
table.insert(data.raw["recipe"]["assembling-machine-1"].ingredients, { type = "item", name = "basic-circuit-board", amount = 5 })
|
||||||
|
|
||||||
|
-- AAI Industry messes with the basic circuit board recipe
|
||||||
|
Technology:new("electronics"):removeRecipe("basic-circuit-board")
|
||||||
|
data.raw.recipe["basic-circuit-board"].enabled = true
|
||||||
end
|
end
|
|
@ -4,4 +4,5 @@ require("metal-and-stars")
|
||||||
require("alien-biomes")
|
require("alien-biomes")
|
||||||
require("planet-picker")
|
require("planet-picker")
|
||||||
require("aai-loaders")
|
require("aai-loaders")
|
||||||
require("nuclear-science")
|
require("nuclear-science")
|
||||||
|
require("lane-splitters")
|
32
lignumis/prototypes/compatibility/lane-splitters.lua
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
if not mods["lane-splitters"] then return end
|
||||||
|
|
||||||
|
local lane_splitter = make_tier({
|
||||||
|
name = "wood-lane-splitter",
|
||||||
|
base_belt = "wood-transport-belt",
|
||||||
|
base_splitter = "wood-splitter",
|
||||||
|
health = 150,
|
||||||
|
next_upgrade = "lane-splitter",
|
||||||
|
})
|
||||||
|
|
||||||
|
lane_splitter.prototype.icon = Lignumis.graphics .. "icons/wood-lane-splitter.png"
|
||||||
|
lane_splitter.prototype.dying_explosion = "transport-belt-explosion"
|
||||||
|
lane_splitter.prototype.structure.east.filename = data.raw.splitter["wood-splitter"].structure.east.filename
|
||||||
|
lane_splitter.prototype.structure.south.filename = data.raw.splitter["wood-splitter"].structure.south.filename
|
||||||
|
lane_splitter.prototype.structure.west.filename = data.raw.splitter["wood-splitter"].structure.west.filename
|
||||||
|
lane_splitter.prototype.structure.north.filename = data.raw.splitter["wood-splitter"].structure.north.filename
|
||||||
|
lane_splitter.prototype.structure_patch.east.filename = data.raw.splitter["wood-splitter"].structure_patch.east.filename
|
||||||
|
lane_splitter.prototype.structure_patch.south.filename = data.raw.splitter["wood-splitter"].structure_patch.south.filename
|
||||||
|
lane_splitter.prototype.structure_patch.west.filename = data.raw.splitter["wood-splitter"].structure_patch.west.filename
|
||||||
|
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"
|
||||||
|
|
||||||
|
data:extend({
|
||||||
|
lane_splitter.prototype,
|
||||||
|
lane_splitter.item,
|
||||||
|
lane_splitter.recipe,
|
||||||
|
})
|
||||||
|
|
||||||
|
table.insert(data.raw["technology"]["wood-logistics"].effects, {
|
||||||
|
type = "unlock-recipe",
|
||||||
|
recipe = "wood-lane-splitter"
|
||||||
|
})
|
|
@ -51,7 +51,11 @@ data:extend({
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
Technology:new("copper-processing"):addRecipe("basic-circuit-board-copper")
|
if not mods["planet-picker"] and not mods["any-planet-start"] then
|
||||||
|
Technology:new("copper-processing"):addRecipe("basic-circuit-board-copper")
|
||||||
|
else
|
||||||
|
Technology:new("electronics"):addRecipe("basic-circuit-board-copper")
|
||||||
|
end
|
||||||
|
|
||||||
if settings.startup["lignumis-circuit-progression"].value then
|
if settings.startup["lignumis-circuit-progression"].value then
|
||||||
table.insert(data.raw.recipe["electronic-circuit"].ingredients, { type = "item", name = "basic-circuit-board", amount = 1 })
|
table.insert(data.raw.recipe["electronic-circuit"].ingredients, { type = "item", name = "basic-circuit-board", amount = 1 })
|
|
@ -1,4 +1,5 @@
|
||||||
local item_sounds = require("__base__.prototypes.item_sounds")
|
local item_sounds = require("__base__.prototypes.item_sounds")
|
||||||
|
local Technology = require("__cf-lib__/data/Technology")
|
||||||
|
|
||||||
local basic_circuit_board = settings.startup["lignumis-basic-circuit-board"].value
|
local basic_circuit_board = settings.startup["lignumis-basic-circuit-board"].value
|
||||||
local gfx = Lignumis.graphics .. "entity/burner-agricultural-tower/"
|
local gfx = Lignumis.graphics .. "entity/burner-agricultural-tower/"
|
||||||
|
@ -109,30 +110,30 @@ tech.ignore_tech_cost_multiplier = true
|
||||||
|
|
||||||
data.raw.technology["fish-breeding"].prerequisites = { "agricultural-science-pack" }
|
data.raw.technology["fish-breeding"].prerequisites = { "agricultural-science-pack" }
|
||||||
|
|
||||||
if not basic_circuit_board then
|
data:extend({
|
||||||
data:extend({
|
{
|
||||||
{
|
type = "recipe",
|
||||||
type = "recipe",
|
name = "burner-agricultural-tower-copper",
|
||||||
name = "burner-agricultural-tower-electronic-circuit",
|
localised_name = { "entity-name.burner-agricultural-tower" },
|
||||||
localised_name = { "entity-name.burner-agricultural-tower" },
|
icons = {
|
||||||
icons = {
|
{ icon = Lignumis.graphics .. "icons/burner-agricultural-tower.png" },
|
||||||
{ icon = Lignumis.graphics .. "icons/burner-agricultural-tower.png" },
|
{ icon = "__base__/graphics/icons/copper-plate.png", scale = 0.25, shift = { 8, 8 } }
|
||||||
{ icon = "__base__/graphics/icons/electronic-circuit.png", scale = 0.25, shift = { 8, 8 } }
|
},
|
||||||
},
|
energy_required = 10,
|
||||||
energy_required = 10,
|
ingredients = {
|
||||||
ingredients = {
|
{ type = "item", name = "stone-brick", amount = 5 },
|
||||||
{ type = "item", name = "stone-brick", amount = 5 },
|
{ type = "item", name = "wooden-gear-wheel", amount = 20 },
|
||||||
{ type = "item", name = "wooden-gear-wheel", amount = 20 },
|
{ type = "item", name = "lumber", amount = 20 },
|
||||||
{ type = "item", name = "lumber", amount = 20 },
|
{ type = "item", name = "copper-plate", amount = 10 },
|
||||||
{ type = "item", name = "electronic-circuit", amount = 10 }
|
{ type = "item", name = basic_circuit_board and "basic-circuit-board" or "electronic-circuit", amount = 10 }
|
||||||
},
|
},
|
||||||
results = { { type = "item", name = "burner-agricultural-tower", amount = 1 } },
|
results = { { type = "item", name = "burner-agricultural-tower", amount = 1 } },
|
||||||
enabled = false
|
enabled = false
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
table.insert(data.raw.technology["electronics"].effects, {
|
if not mods["planet-picker"] and not mods["any-planet-start"] then
|
||||||
type = "unlock-recipe",
|
Technology:new("copper-processing"):addRecipe("burner-agricultural-tower-copper")
|
||||||
recipe = "burner-agricultural-tower-electronic-circuit"
|
else
|
||||||
})
|
Technology:new("electronics"):addRecipe("burner-agricultural-tower-copper")
|
||||||
end
|
end
|
||||||
|
|
|
@ -29,7 +29,6 @@ require("active-noise-cancelling-tower")
|
||||||
require("quality-assembler")
|
require("quality-assembler")
|
||||||
require("decoratives")
|
require("decoratives")
|
||||||
require("wood-military")
|
require("wood-military")
|
||||||
require("basic-circuit-boards")
|
require("basic-circuit-board")
|
||||||
require("enemies")
|
|
||||||
|
|
||||||
require("noise")
|
require("noise")
|
||||||
|
|
|
@ -1,534 +0,0 @@
|
||||||
local particle_animations = require("__space-age__/prototypes/particle-animations")
|
|
||||||
local base_sounds = require("__base__.prototypes.entity.sounds")
|
|
||||||
local space_age_sounds = require("__space-age__.prototypes.entity.sounds")
|
|
||||||
local simulations = require("__space-age__.prototypes.factoriopedia-simulations")
|
|
||||||
local enemy_autoplace = require("__base__.prototypes.entity.enemy-autoplace-utils")
|
|
||||||
local biter_ai_settings = require ("__base__.prototypes.entity.biter-ai-settings")
|
|
||||||
|
|
||||||
local blood_particles = {
|
|
||||||
"blood-particle-small",
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, particle_name in ipairs(blood_particles) do
|
|
||||||
local new_particle = table.deepcopy(data.raw["optimized-particle"][particle_name])
|
|
||||||
local scale = new_particle.pictures.sheet.scale
|
|
||||||
local shift = new_particle.pictures.sheet.shift
|
|
||||||
new_particle.name = "lignumis-" .. particle_name
|
|
||||||
new_particle.pictures = {
|
|
||||||
sheet = {
|
|
||||||
filename = "__space-age__/graphics/particle/gleba-blood-particle/gleba-blood-particle.png",
|
|
||||||
line_length = 12,
|
|
||||||
width = 32,
|
|
||||||
height = 24,
|
|
||||||
frame_count = 12,
|
|
||||||
variation_count = 7,
|
|
||||||
scale = scale * 0.25,
|
|
||||||
shift = shift
|
|
||||||
}
|
|
||||||
}
|
|
||||||
data:extend({ new_particle })
|
|
||||||
end
|
|
||||||
|
|
||||||
function gleba_hit_effects(offset_deviation, offset)
|
|
||||||
local offset = offset or { 0, 0 }
|
|
||||||
return {
|
|
||||||
type = "create-entity",
|
|
||||||
entity_name = "gleba-enemy-damaged-explosion",
|
|
||||||
offset_deviation = offset_deviation or { { -0.5, -0.5 }, { 0.5, 0.5 } },
|
|
||||||
offsets = { offset },
|
|
||||||
damage_type_filters = "fire"
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
function wriggler_spritesheet(name, frames, speed, scale, tint, flag)
|
|
||||||
speed = speed or 1.0
|
|
||||||
local is_shadow = string.sub(name, -string.len("-shadow")) == "-shadow"
|
|
||||||
local is_decay = string.find(name, "decay")
|
|
||||||
if is_decay and is_shadow then return nil end
|
|
||||||
return util.sprite_load("__space-age__/graphics/entity/wriggler/wriggler-" .. name,
|
|
||||||
{
|
|
||||||
slice = 5,
|
|
||||||
frame_count = frames,
|
|
||||||
direction_count = 16,
|
|
||||||
scale = 0.5 * 1.2 * scale,
|
|
||||||
multiply_shift = scale,
|
|
||||||
animation_speed = speed,
|
|
||||||
draw_as_shadow = is_shadow,
|
|
||||||
tint_as_overlay = tint and true or nil,
|
|
||||||
tint = tint,
|
|
||||||
flags = (not is_shadow) and { flag } or nil,
|
|
||||||
surface = "gleba",
|
|
||||||
usage = "enemy"
|
|
||||||
}
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
function wriggler_corpse_spritesheet(name, frames, speed, scale, tint)
|
|
||||||
return wriggler_spritesheet(name, frames, speed, scale, tint, "corpse-decay")
|
|
||||||
end
|
|
||||||
|
|
||||||
local default_ended_in_water_trigger_effect = function()
|
|
||||||
return {
|
|
||||||
{
|
|
||||||
type = "create-particle",
|
|
||||||
probability = 1,
|
|
||||||
affects_target = false,
|
|
||||||
show_in_tooltip = false,
|
|
||||||
particle_name = "tintable-water-particle",
|
|
||||||
apply_tile_tint = "secondary",
|
|
||||||
offset_deviation = { { -0.05, -0.05 }, { 0.05, 0.05 } },
|
|
||||||
initial_height = 0,
|
|
||||||
initial_height_deviation = 0.02,
|
|
||||||
initial_vertical_speed = 0.05,
|
|
||||||
initial_vertical_speed_deviation = 0.05,
|
|
||||||
speed_from_center = 0.01,
|
|
||||||
speed_from_center_deviation = 0.006,
|
|
||||||
frame_speed = 1,
|
|
||||||
frame_speed_deviation = 0,
|
|
||||||
tail_length = 2,
|
|
||||||
tail_length_deviation = 1,
|
|
||||||
tail_width = 3
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type = "create-particle",
|
|
||||||
repeat_count = 10,
|
|
||||||
repeat_count_deviation = 6,
|
|
||||||
probability = 0.03,
|
|
||||||
affects_target = false,
|
|
||||||
show_in_tooltip = false,
|
|
||||||
particle_name = "tintable-water-particle",
|
|
||||||
apply_tile_tint = "primary",
|
|
||||||
offsets = {
|
|
||||||
{ 0, 0 },
|
|
||||||
{ 0.01563, -0.09375 },
|
|
||||||
{ 0.0625, 0.09375 },
|
|
||||||
{ -0.1094, 0.0625 }
|
|
||||||
},
|
|
||||||
offset_deviation = { { -0.2969, -0.1992 }, { 0.2969, 0.1992 } },
|
|
||||||
initial_height = 0,
|
|
||||||
initial_height_deviation = 0.02,
|
|
||||||
initial_vertical_speed = 0.053,
|
|
||||||
initial_vertical_speed_deviation = 0.005,
|
|
||||||
speed_from_center = 0.02,
|
|
||||||
speed_from_center_deviation = 0.006,
|
|
||||||
frame_speed = 1,
|
|
||||||
frame_speed_deviation = 0,
|
|
||||||
tail_length = 9,
|
|
||||||
tail_length_deviation = 0,
|
|
||||||
tail_width = 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type = "play-sound",
|
|
||||||
sound = base_sounds.small_splash
|
|
||||||
}
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
local make_particle = function(params)
|
|
||||||
if not params then error("No params given to make_particle function") end
|
|
||||||
local name = params.name or error("No name given")
|
|
||||||
|
|
||||||
local ended_in_water_trigger_effect = params.ended_in_water_trigger_effect or default_ended_in_water_trigger_effect()
|
|
||||||
if params.ended_in_water_trigger_effect == false then
|
|
||||||
ended_in_water_trigger_effect = nil
|
|
||||||
end
|
|
||||||
|
|
||||||
local particle = {
|
|
||||||
type = "optimized-particle",
|
|
||||||
name = name,
|
|
||||||
life_time = params.life_time or (60 * 15),
|
|
||||||
fade_away_duration = params.fade_away_duration,
|
|
||||||
render_layer = params.render_layer or "projectile",
|
|
||||||
render_layer_when_on_ground = params.render_layer_when_on_ground or "corpse",
|
|
||||||
regular_trigger_effect_frequency = params.regular_trigger_effect_frequency or 2,
|
|
||||||
regular_trigger_effect = params.regular_trigger_effect,
|
|
||||||
ended_in_water_trigger_effect = ended_in_water_trigger_effect,
|
|
||||||
pictures = params.pictures,
|
|
||||||
shadows = params.shadows,
|
|
||||||
draw_shadow_when_on_ground = params.draw_shadow_when_on_ground,
|
|
||||||
movement_modifier_when_on_ground = params.movement_modifier_when_on_ground,
|
|
||||||
movement_modifier = params.movement_modifier,
|
|
||||||
vertical_acceleration = params.vertical_acceleration,
|
|
||||||
mining_particle_frame_speed = params.mining_particle_frame_speed,
|
|
||||||
}
|
|
||||||
return particle
|
|
||||||
end
|
|
||||||
|
|
||||||
local function lerp_color(a, b, amount)
|
|
||||||
return {
|
|
||||||
a[1] + amount * (b[1] - a[1]),
|
|
||||||
a[2] + amount * (b[2] - a[2]),
|
|
||||||
a[3] + amount * (b[3] - a[3]),
|
|
||||||
a[4] + amount * (b[4] - a[4]),
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
function make_wriggler(prefix, scale, health, damage, tints, factoriopedia_simulation, factoriopedia_simulation_premature,
|
|
||||||
sounds)
|
|
||||||
-- Premature version loses health so that the swarm will get removed (more efficient).
|
|
||||||
-- Spawner-spawned versions are stable so that the area is not full of corpses.
|
|
||||||
local tint_mask = tints.mask
|
|
||||||
local tint_body = tints.body
|
|
||||||
|
|
||||||
local function attack_parameters(lifesteal)
|
|
||||||
local cooldown = 26
|
|
||||||
return {
|
|
||||||
ammo_category = "melee",
|
|
||||||
ammo_type = {
|
|
||||||
target_type = "entity",
|
|
||||||
action = {
|
|
||||||
type = "direct",
|
|
||||||
action_delivery = {
|
|
||||||
type = "instant",
|
|
||||||
source_effects = lifesteal and {
|
|
||||||
{
|
|
||||||
type = "damage",
|
|
||||||
damage = { amount = -health / 50 / 60 * cooldown * 1.1, type = "poison" } -- offsets negative regeneration when attacking
|
|
||||||
}
|
|
||||||
} or nil,
|
|
||||||
target_effects = {
|
|
||||||
{
|
|
||||||
type = "damage",
|
|
||||||
damage = { amount = 5 * damage, type = "physical" }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type = "damage",
|
|
||||||
damage = { amount = 5 * damage, type = "poison" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
animation = {
|
|
||||||
layers = {
|
|
||||||
wriggler_spritesheet("attack", 19, 0.48, scale, tint_body),
|
|
||||||
wriggler_spritesheet("attack-tint", 19, 0.48, scale, tint_mask),
|
|
||||||
wriggler_spritesheet("attack-shadow", 19, 0.48, scale),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
cooldown = cooldown,
|
|
||||||
cooldown_deviation = 0.1,
|
|
||||||
range = 1.8 * scale,
|
|
||||||
range_mode = "bounding-box-to-bounding-box",
|
|
||||||
sound = sounds.attack_sound,
|
|
||||||
type = "projectile"
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
local wriggler = {
|
|
||||||
type = "unit",
|
|
||||||
name = prefix .. "wriggler-pentapod-premature",
|
|
||||||
icon = "__lignumis__/graphics/icons/" .. prefix .. "wriggler.png",
|
|
||||||
subgroup = "enemies",
|
|
||||||
order = "gleba-a-wriggler-" .. tostring(scale),
|
|
||||||
factoriopedia_simulation = factoriopedia_simulation_premature,
|
|
||||||
collision_box = { { -0.2 * scale, -0.2 * scale }, { 0.2 * scale, 0.2 * scale } },
|
|
||||||
sticker_box = { { -0.5 * scale, -0.5 * scale }, { 0.5 * scale, 0.5 * scale } },
|
|
||||||
selection_box = { { -0.9 * scale, -0.9 * scale }, { 0.9 * scale, 0.9 * scale } },
|
|
||||||
collision_mask = { layers = { player = true, train = true, is_object = true }, not_colliding_with_itself = true },
|
|
||||||
flags = { "placeable-player", "placeable-enemy", "placeable-off-grid", "not-repairable", "breaths-air" },
|
|
||||||
absorptions_to_join_attack = { noise = 1 },
|
|
||||||
ai_settings = biter_ai_settings,
|
|
||||||
attack_parameters = attack_parameters(true),
|
|
||||||
corpse = prefix .. "wriggler-pentapod-corpse",
|
|
||||||
damaged_trigger_effect = gleba_hit_effects(),
|
|
||||||
distance_per_frame = 0.125,
|
|
||||||
distraction_cooldown = 300,
|
|
||||||
dying_explosion = prefix .. "wriggler-die",
|
|
||||||
dying_sound = sounds.dying_sound,
|
|
||||||
healing_per_tick = -health / 50 / 60,
|
|
||||||
impact_category = "organic",
|
|
||||||
max_health = health,
|
|
||||||
max_pursue_distance = 50,
|
|
||||||
min_pursue_time = 600,
|
|
||||||
movement_speed = 0.2 * (1 + (scale - 1) / 2),
|
|
||||||
resistances = {
|
|
||||||
{
|
|
||||||
percent = 50,
|
|
||||||
type = "laser"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
run_animation = {
|
|
||||||
layers = {
|
|
||||||
wriggler_spritesheet("run", 21, 0.48, scale, tint_body),
|
|
||||||
wriggler_spritesheet("run-tint", 21, 0.48, scale, tint_mask),
|
|
||||||
wriggler_spritesheet("run-shadow", 21, 0.48, scale),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
running_sound_animation_positions = { 2 },
|
|
||||||
vision_distance = 20,
|
|
||||||
water_reflection = {
|
|
||||||
orientation_to_variation = false,
|
|
||||||
rotate = true,
|
|
||||||
pictures = {
|
|
||||||
filename = "__base__/graphics/entity/biter/biter-reflection.png",
|
|
||||||
height = 28,
|
|
||||||
priority = "extra-high",
|
|
||||||
scale = 2.5 * scale,
|
|
||||||
shift = { 0.15625, 0.46875 },
|
|
||||||
variation_count = 1,
|
|
||||||
width = 20
|
|
||||||
}
|
|
||||||
},
|
|
||||||
walking_sound = sounds.walking_sound,
|
|
||||||
working_sound = sounds.working_sound,
|
|
||||||
warcry = sounds.warcry,
|
|
||||||
}
|
|
||||||
|
|
||||||
local wriggler_stable = table.deepcopy(wriggler)
|
|
||||||
wriggler_stable.name = prefix .. "wriggler-pentapod"
|
|
||||||
wriggler_stable.factoriopedia_simulation = factoriopedia_simulation
|
|
||||||
wriggler_stable.healing_per_tick = health / 500 / 60
|
|
||||||
wriggler_stable.absorptions_to_join_attack = { noise = 1 }
|
|
||||||
wriggler_stable.attack_parameters = attack_parameters(false)
|
|
||||||
|
|
||||||
local wriggler_corpse = {
|
|
||||||
type = "corpse",
|
|
||||||
name = prefix .. "wriggler-pentapod-corpse",
|
|
||||||
icon = "__lignumis__/graphics/icons/" .. prefix .. "wriggler-corpse.png",
|
|
||||||
subgroup = "corpses",
|
|
||||||
order = "c[corpse]-d[gleba-enemies-corpses]-d[wriggler]" .. tostring(scale),
|
|
||||||
hidden_in_factoriopedia = true,
|
|
||||||
selection_box = { { -0.8, -0.8 }, { 0.8, 0.8 } },
|
|
||||||
selectable_in_game = false,
|
|
||||||
animation = {
|
|
||||||
layers = {
|
|
||||||
wriggler_corpse_spritesheet("death", 17, 0.48, scale, tint_body),
|
|
||||||
wriggler_corpse_spritesheet("death-tint", 17, 0.48, scale, tint_mask),
|
|
||||||
wriggler_corpse_spritesheet("death-shadow", 17, 0.48, scale),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
decay_animation = {
|
|
||||||
layers = {
|
|
||||||
wriggler_corpse_spritesheet("decay", 9, nil, scale, tint_body),
|
|
||||||
wriggler_corpse_spritesheet("decay-tint", 9, nil, scale, tint_mask),
|
|
||||||
wriggler_corpse_spritesheet("decay-shadow", 9, nil, scale),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
dying_speed = 0.015 / scale,
|
|
||||||
decay_frame_transition_duration = 150,
|
|
||||||
time_before_removed = 1 * 60 * 60, -- 1 minute
|
|
||||||
use_decay_layer = true,
|
|
||||||
|
|
||||||
direction_shuffle = { { 1, 2, 3, 16 }, { 4, 5, 6, 7 }, { 8, 9, 10, 11 }, { 12, 13, 14, 15 } },
|
|
||||||
shuffle_directions_at_frame = 0,
|
|
||||||
final_render_layer = "lower-object-above-shadow",
|
|
||||||
flags = {
|
|
||||||
"placeable-neutral",
|
|
||||||
"placeable-off-grid",
|
|
||||||
"building-direction-8-way",
|
|
||||||
"not-repairable",
|
|
||||||
"not-on-map"
|
|
||||||
},
|
|
||||||
ground_patch = {
|
|
||||||
sheet =
|
|
||||||
util.sprite_load("__space-age__/graphics/entity/wriggler/blood-puddle-var-main",
|
|
||||||
{
|
|
||||||
flags = { "low-object" },
|
|
||||||
variation_count = 4,
|
|
||||||
scale = 0.4 * scale,
|
|
||||||
multiply_shift = 0.125,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
},
|
|
||||||
ground_patch_fade_in_delay = 20,
|
|
||||||
ground_patch_fade_in_speed = 0.002,
|
|
||||||
ground_patch_fade_out_duration = 50 * 60 / 7.5,
|
|
||||||
ground_patch_fade_out_start = 50 * 60 / 7.5,
|
|
||||||
ground_patch_render_layer = "decals"
|
|
||||||
}
|
|
||||||
|
|
||||||
local wrigger_explosion = {
|
|
||||||
type = "explosion",
|
|
||||||
name = prefix .. "wriggler-die",
|
|
||||||
scale = 0.25,
|
|
||||||
icon = "__space-age__/graphics/icons/medium-wriggler-corpse.png",
|
|
||||||
order = "a[corpse]-f[wriggler]",
|
|
||||||
flags = { "not-on-map" },
|
|
||||||
hidden = true,
|
|
||||||
subgroup = "enemy-death-explosions",
|
|
||||||
animations = util.empty_sprite(),
|
|
||||||
created_effect = {
|
|
||||||
type = "direct",
|
|
||||||
action_delivery = {
|
|
||||||
type = "instant",
|
|
||||||
target_effects = {
|
|
||||||
{
|
|
||||||
type = "create-particle",
|
|
||||||
repeat_count = 13,
|
|
||||||
repeat_count_deviation = 1,
|
|
||||||
probability = 1,
|
|
||||||
affects_target = false,
|
|
||||||
show_in_tooltip = false,
|
|
||||||
particle_name = "lignumis-blood-particle-small",
|
|
||||||
offsets = { { 0, 0 } },
|
|
||||||
offset_deviation = { { -0.5, -0.5 }, { 0.5, 0.5 } },
|
|
||||||
initial_height = 0.1,
|
|
||||||
initial_height_deviation = 0.1,
|
|
||||||
initial_vertical_speed = 0.009,
|
|
||||||
initial_vertical_speed_deviation = 0.009,
|
|
||||||
speed_from_center = 0.05,
|
|
||||||
speed_from_center_deviation = 0.05,
|
|
||||||
frame_speed = 1,
|
|
||||||
frame_speed_deviation = 0,
|
|
||||||
tail_length = 5,
|
|
||||||
tail_length_deviation = 5,
|
|
||||||
tail_width = 3,
|
|
||||||
rotate_offsets = false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type = "create-particle",
|
|
||||||
repeat_count = 12,
|
|
||||||
repeat_count_deviation = 3,
|
|
||||||
probability = 1,
|
|
||||||
affects_target = false,
|
|
||||||
show_in_tooltip = false,
|
|
||||||
particle_name = "lignumis-blood-particle-small",
|
|
||||||
offsets = {
|
|
||||||
{ 0, -0.4 },
|
|
||||||
{ 0, 0.5 },
|
|
||||||
{ 0, 0.6 }
|
|
||||||
},
|
|
||||||
offset_deviation = { { -0.25, -0.25 }, { 0.25, 0.25 } },
|
|
||||||
initial_height = 0.1,
|
|
||||||
initial_height_deviation = 0.1,
|
|
||||||
initial_vertical_speed = 0.055,
|
|
||||||
initial_vertical_speed_deviation = 0.075,
|
|
||||||
speed_from_center = 0.03,
|
|
||||||
speed_from_center_deviation = 0.03,
|
|
||||||
frame_speed = 1,
|
|
||||||
frame_speed_deviation = 0,
|
|
||||||
tail_length = 52,
|
|
||||||
tail_length_deviation = 25,
|
|
||||||
tail_width = 3,
|
|
||||||
rotate_offsets = false
|
|
||||||
},
|
|
||||||
--{
|
|
||||||
-- type = "create-particle",
|
|
||||||
-- repeat_count = 2,
|
|
||||||
-- repeat_count_deviation = 0,
|
|
||||||
-- probability = 1,
|
|
||||||
-- affects_target = false,
|
|
||||||
-- show_in_tooltip = false,
|
|
||||||
-- particle_name = "pentapod-entrails-particle-small",
|
|
||||||
-- offsets = {
|
|
||||||
-- { 0, -0.4 }
|
|
||||||
-- },
|
|
||||||
-- offset_deviation = { { -0.5, -0.5 }, { 0.5, 0.5 } },
|
|
||||||
-- initial_height = 0.1,
|
|
||||||
-- initial_height_deviation = 0.1,
|
|
||||||
-- initial_vertical_speed = 0.06,
|
|
||||||
-- initial_vertical_speed_deviation = 0.05,
|
|
||||||
-- speed_from_center = 0.07,
|
|
||||||
-- speed_from_center_deviation = 0,
|
|
||||||
-- frame_speed = 1,
|
|
||||||
-- frame_speed_deviation = 0,
|
|
||||||
-- rotate_offsets = false
|
|
||||||
--},
|
|
||||||
--{
|
|
||||||
-- type = "create-particle",
|
|
||||||
-- repeat_count = 10,
|
|
||||||
-- repeat_count_deviation = 0,
|
|
||||||
-- probability = 1,
|
|
||||||
-- affects_target = false,
|
|
||||||
-- show_in_tooltip = false,
|
|
||||||
-- particle_name = prefix .. "wriggler-skin-particle",
|
|
||||||
-- offsets = {
|
|
||||||
-- { 0, -0.4 }
|
|
||||||
-- },
|
|
||||||
-- offset_deviation = { { -0.5, -0.5 }, { 0.5, 0.5 } },
|
|
||||||
-- initial_height = 0.1,
|
|
||||||
-- initial_height_deviation = 0.1,
|
|
||||||
-- initial_vertical_speed = 0.05,
|
|
||||||
-- initial_vertical_speed_deviation = 0.02,
|
|
||||||
-- speed_from_center = 0.02,
|
|
||||||
-- speed_from_center_deviation = 0.1,
|
|
||||||
-- frame_speed = 1,
|
|
||||||
-- frame_speed_deviation = 0,
|
|
||||||
-- rotate_offsets = false
|
|
||||||
--},
|
|
||||||
{
|
|
||||||
type = "play-sound",
|
|
||||||
sound = base_sounds.medium_gore
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
data:extend {
|
|
||||||
--wriggler,
|
|
||||||
wriggler_stable,
|
|
||||||
wriggler_corpse,
|
|
||||||
wrigger_explosion,
|
|
||||||
make_particle
|
|
||||||
{
|
|
||||||
name = prefix .. "wriggler-skin-particle",
|
|
||||||
life_time = 300,
|
|
||||||
pictures = particle_animations.get_pentpod_skin_particles_small({ scale = 1 * scale, tint = lerp_color(tint_mask, { 255, 255, 255, 255 }, 0.7) }),
|
|
||||||
shadows = particle_animations.get_pentpod_skin_particles_small({ scale = 1 * scale, tint = shadowtint(), shift = util.by_pixel(1, 0) }),
|
|
||||||
ended_in_water_trigger_effect = default_ended_in_water_trigger_effect(),
|
|
||||||
render_layer_when_on_ground = "lower-object-above-shadow"
|
|
||||||
},
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
local function fade(tint, amount) -- fades to minimal opacity grey. Low opacity is good for the mask to let the base layer show htough (instead of having a grey mask)
|
|
||||||
return lerp_color(tint, { 1, 1, 1, 2 }, amount)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function grey_overlay(tint, amount) -- fades to opaque grey. Full opacity is required for body.
|
|
||||||
return lerp_color(tint, { 127, 127, 127, 255 }, amount)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- mask tint is vibrant and only on the mask
|
|
||||||
-- body tint applies to the whole body and should be near 127 grey, just adds a hint of saturation
|
|
||||||
local gleba_small_mask_tint = { 103, 151, 11, 255 }
|
|
||||||
local gleba_small_body_tint = { 125, 124, 111, 255 }
|
|
||||||
|
|
||||||
make_wriggler("lignumis-small-", 0.2, 20, 0.1,
|
|
||||||
{
|
|
||||||
mask = fade(lerp_color(gleba_small_mask_tint, { 255, 200, 0, 255 }, 0.2), 0.2),
|
|
||||||
body = grey_overlay(lerp_color(gleba_small_body_tint, { 255, 0, 0, 255 }, 0.2), 0.2)
|
|
||||||
},
|
|
||||||
simulations.factoriopedia_gleba_enemy_small_wriggler,
|
|
||||||
simulations.factoriopedia_gleba_enemy_small_wriggler_premature,
|
|
||||||
space_age_sounds.wriggler_pentapod.small
|
|
||||||
)
|
|
||||||
|
|
||||||
make_wriggler("lignumis-medium-", 0.4, 40, 0.2,
|
|
||||||
{
|
|
||||||
mask = fade(lerp_color(gleba_small_mask_tint, { 255, 200, 0, 255 }, 0.4), 0.2),
|
|
||||||
body = grey_overlay(lerp_color(gleba_small_body_tint, { 255, 0, 0, 255 }, 0.4), 0.2)
|
|
||||||
},
|
|
||||||
simulations.factoriopedia_gleba_enemy_small_wriggler,
|
|
||||||
simulations.factoriopedia_gleba_enemy_small_wriggler_premature,
|
|
||||||
space_age_sounds.wriggler_pentapod.small
|
|
||||||
)
|
|
||||||
|
|
||||||
local spawner = table.deepcopy(data.raw["unit-spawner"]["gleba-spawner-small"])
|
|
||||||
table.assign(spawner, {
|
|
||||||
name = "lignumis-spawner-small",
|
|
||||||
result_units = {
|
|
||||||
{ "lignumis-small-wriggler-pentapod", { { 0.0, 0.9 }, { 0.5, 0.9 }, { 0.6, 0.5 } } },
|
|
||||||
{ "lignumis-medium-wriggler-pentapod", { { 0.1, 0 }, { 0.4, 0 }, { 1, 0.9 } } }
|
|
||||||
},
|
|
||||||
max_count_of_owned_units = 7,
|
|
||||||
max_friends_around_to_spawn = 5,
|
|
||||||
spawning_cooldown = { 360, 150 },
|
|
||||||
spawning_radius = 10,
|
|
||||||
spawning_spacing = 3,
|
|
||||||
max_spawn_shift = 0,
|
|
||||||
max_richness_for_spawn_shift = 100,
|
|
||||||
call_for_help_radius = 50,
|
|
||||||
--spawning_cooldown = { 60, 20 },
|
|
||||||
--spawning_radius = 4,
|
|
||||||
--call_for_help_radius = 20,
|
|
||||||
autoplace = enemy_autoplace.enemy_spawner_autoplace("enemy_autoplace_base(0, 6)"),
|
|
||||||
absorptions_per_second = { noise = { absolute = 20, proportional = 0.01 } },
|
|
||||||
})
|
|
||||||
spawner.collision_mask = nil
|
|
||||||
spawner.loot = nil
|
|
||||||
spawner.dying_trigger_effect[1].entity_name = "lignumis-small-wriggler-pentapod"
|
|
||||||
|
|
||||||
data:extend({ spawner })
|
|
|
@ -77,7 +77,7 @@ QualityAssembler.EntityBuilder:new()
|
||||||
crafting_speed = 4,
|
crafting_speed = 4,
|
||||||
module_slots = 6,
|
module_slots = 6,
|
||||||
allowed_effects = { "pollution", "quality" },
|
allowed_effects = { "pollution", "quality" },
|
||||||
effect_receiver = { base_effect = { quality = 10 } }
|
effect_receiver = { base_effect = { quality = 2.5 } }
|
||||||
})
|
})
|
||||||
|
|
||||||
QualityAssembler.ItemBuilder:new():apply()
|
QualityAssembler.ItemBuilder:new():apply()
|
||||||
|
|
|
@ -106,6 +106,6 @@ data:extend({
|
||||||
ingredients = { { "wood-science-pack", 1 } },
|
ingredients = { { "wood-science-pack", 1 } },
|
||||||
time = 15
|
time = 15
|
||||||
},
|
},
|
||||||
ignore_tech_cost_multiplier = true
|
ignore_tech_cost_multiplier = false
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -22,10 +22,10 @@ end
|
||||||
-- Teleport to Lignumis and give some starting items
|
-- Teleport to Lignumis and give some starting items
|
||||||
local function init_player(event)
|
local function init_player(event)
|
||||||
local player = game.get_player(event.player_index)
|
local player = game.get_player(event.player_index)
|
||||||
|
|
||||||
if not player.character then return end
|
|
||||||
|
|
||||||
local surface = storage.surface or game.planets["lignumis"].surface
|
local surface = storage.surface or game.planets["lignumis"].surface
|
||||||
|
|
||||||
|
if not player.character or not surface then return end
|
||||||
|
|
||||||
player.teleport(surface.find_non_colliding_position("character", { 0, 0 }, 0, 1), "lignumis")
|
player.teleport(surface.find_non_colliding_position("character", { 0, 0 }, 0, 1), "lignumis")
|
||||||
player.character.destructible = false
|
player.character.destructible = false
|
||||||
local main_inventory = player.character.get_main_inventory()
|
local main_inventory = player.character.get_main_inventory()
|
||||||
|
@ -80,6 +80,11 @@ Init.events[defines.events.on_player_created] = function(event)
|
||||||
if storage.init[event.player_index] then return end
|
if storage.init[event.player_index] then return end
|
||||||
|
|
||||||
storage.init[event.player_index] = true
|
storage.init[event.player_index] = true
|
||||||
|
|
||||||
|
if script.active_mods["alien-biomes"] then
|
||||||
|
game.print("While Alien Biomes is playable with Lignumis, it is not recommended as it prevents trees from being generated on Lignumis.")
|
||||||
|
end
|
||||||
|
|
||||||
init_player(event)
|
init_player(event)
|
||||||
init_freeplay(event)
|
init_freeplay(event)
|
||||||
end
|
end
|
||||||
|
|
|
@ -31,7 +31,7 @@ data:extend({
|
||||||
type = "bool-setting",
|
type = "bool-setting",
|
||||||
name = "lignumis-basic-circuit-board",
|
name = "lignumis-basic-circuit-board",
|
||||||
setting_type = "startup",
|
setting_type = "startup",
|
||||||
default_value = false,
|
default_value = true,
|
||||||
order = "e"
|
order = "e"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
Before Width: | Height: | Size: 8.6 KiB |
Before Width: | Height: | Size: 9.5 KiB |
Before Width: | Height: | Size: 6.9 KiB |
Before Width: | Height: | Size: 7.4 KiB |