Compare commits

..

112 commits

Author SHA1 Message Date
f782707c90 Update ru locale 2025-06-01 12:14:33 +02:00
Simon Brodtmann
68903532bf 1.0.47 2025-05-31 22:58:50 +02:00
Simon Brodtmann
07cb973c00 Correct Factoriopedia simulation for wooden underground belts 2025-05-30 22:35:49 +02:00
Simon Brodtmann
f8671cf738 Fix crash when the on_rocket_launched event doesn't have a rocket_silo 2025-05-30 21:54:11 +02:00
Simon Brodtmann
81214f2a46 Fix crash when there is a tree that has no minable property 2025-05-30 21:48:47 +02:00
Simon Brodtmann
415054ae2b 1.0.46 2025-05-23 21:07:47 +02:00
Simon Brodtmann
8da7d0cea7 Balance basic robots battery usage 2025-05-23 21:02:16 +02:00
Simon Brodtmann
c968a7e437 Correct items per rocket for belts 2025-05-23 21:02:16 +02:00
Simon Brodtmann
f98bbebdab Solar power is orbiting planet +20% 2025-05-23 13:58:20 +02:00
Simon Brodtmann
9f924c3aea 1.0.45 2025-05-03 23:00:57 +02:00
Simon Brodtmann
90a59a7f47 Any Planet Start: Fix planet discovery being disabled 2025-05-03 23:00:02 +02:00
Simon Brodtmann
596077912f 1.0.44 2025-04-20 23:20:09 +02:00
Simon Brodtmann
60a5e37647 1.0.43 2025-04-20 23:10:31 +02:00
Simon Brodtmann
3fffc31f2d Crushing Industry: Move compatibility code to updates phase 2025-04-20 23:08:58 +02:00
Simon Brodtmann
67b4ec0a09 Any planet start (Vulcanus): Add some fixes to not get stuck 2025-04-20 16:58:57 +02:00
Simon Brodtmann
a6a1461581 Correct description of the Quality Assembler 2025-04-20 16:58:12 +02:00
Simon Brodtmann
58da2ed2d4 Any planet start: Move code to updates stage 2025-04-15 18:08:19 +02:00
Simon Brodtmann
656a151075 1.0.42 2025-04-14 15:42:11 +02:00
Simon Brodtmann
d03dfeb643 Crushing Industry: Fix wrong ingredient amount for gold from crushed gold 2025-04-14 14:22:31 +02:00
Simon Brodtmann
e7077ef65b Helmod: Fix bug with steam assembler
(now really)
2025-04-13 22:50:16 +02:00
Simon Brodtmann
77685f2a3e 1.0.41 2025-04-13 15:11:42 +02:00
Simon Brodtmann
7416b4a505 Prevent broken icons 2025-04-13 15:09:36 +02:00
Simon Brodtmann
e18619c807 Add setting for even earlier personal robots 2025-04-13 13:42:42 +02:00
Simon Brodtmann
c8959290c0 Wood Gasification updated: Fix amount of wood per tree 2025-04-13 00:14:47 +02:00
Simon Brodtmann
5bdde48ef1 Any planet start: Fix circular dependency 2025-04-12 23:53:47 +02:00
Simon Brodtmann
aa44117a49 Any planet start: Fix prerequisites for "Tree seeding" 2025-04-12 20:17:25 +02:00
Simon Brodtmann
667678098d Require cf-lib 0.0.12 2025-04-12 20:13:14 +02:00
Simon Brodtmann
22e3f9709e Helmod: Fix bug with steam assembler 2025-04-12 16:27:11 +02:00
Simon Brodtmann
45f245d422 1.0.40 2025-04-06 16:49:05 +02:00
Simon Brodtmann
dffaa99173 Add setting for wood on Fulgora and make Wooden Fulgora optional again 2025-04-06 16:41:10 +02:00
Simon Brodtmann
51e9682125 Remove inventory of provisional rocket silo 2025-04-06 11:27:55 +02:00
Simon Brodtmann
17c2795b3d Add fix for duplicate ready rocket silo 2025-04-06 11:27:12 +02:00
Simon Brodtmann
0353f91144 1.0.39 2025-04-03 18:40:03 +02:00
Simon Brodtmann
bcc4c7a18f Add Space Age flag 2025-04-03 18:31:39 +02:00
Simon Brodtmann
0bbd830068 AAI Loaders: Adhere belt progression setting 2025-04-03 18:19:12 +02:00
Simon Brodtmann
087c30ffcc AAI loaders, Lane splitters: Apply recipe changes only when AAI Industry is active 2025-03-29 23:10:05 +01:00
Simon Brodtmann
7f67e0eff6 1.0.38 2025-03-28 21:28:06 +01:00
Simon Brodtmann
a78bcb75df Any planet start: Change internal name of the space connection to Lignumis depending on the selected planet 2025-03-28 21:28:01 +01:00
Simon Brodtmann
044e058784 Any planet start (Vulcanus) + Crushing Industry: Move iron crushing to fix soft-lock 2025-03-28 21:13:32 +01:00
Simon Brodtmann
2f01c16cda Readme 2025-03-28 19:05:36 +01:00
Simon Brodtmann
6f0fb8cf6f 1.0.37 2025-03-28 18:53:55 +01:00
Simon Brodtmann
bf2f46512e Any planet start (Fulgora): Medium electric pole is unlocked together with the recycler 2025-03-28 18:43:29 +01:00
Simon Brodtmann
151337c116 Add compatibility for "Gleba reborn" 2025-03-28 10:06:13 +01:00
Simon Brodtmann
6f4e8dcda8 Add compatibility for "Any planet start" (Gleba) 2025-03-28 10:06:13 +01:00
Simon Brodtmann
5ca6eb9b3d Wood mods for Vulcanus and Fulgora are mandatory
Sort mods alphabetically
2025-03-28 10:06:13 +01:00
Simon Brodtmann
8ca02c341c Add compatibility for "Any planet start" (Fulgora) 2025-03-28 09:23:01 +01:00
Simon Brodtmann
c5d94ec0b9 Add compatibility for "Any planet start" (Vulcanus) 2025-03-28 00:33:08 +01:00
Simon Brodtmann
d15f877fe1 readme 2025-03-25 20:21:16 +01:00
Simon Brodtmann
2b847f5cd3 Add descriptions with gold per minute from plants and seeds 2025-03-25 20:21:10 +01:00
Simon Brodtmann
a7490b6277 Crushing Industry: Burner Cusher can be crafted in Lumber Mill 2025-03-25 19:47:39 +01:00
Simon Brodtmann
799e22b90a Switch to "Inserter Fuel Leech" 2025-03-25 19:47:39 +01:00
Simon Brodtmann
ea7c652875 Crushing Industry: Fix name of burner crusher copper recipe 2025-03-24 01:26:07 +01:00
Simon Brodtmann
d7f5d0ca67 1.0.36 2025-03-24 01:18:09 +01:00
Simon Brodtmann
8eca5c0952 Add compatibility for "Crushing Industry" 2025-03-24 01:12:56 +01:00
Simon Brodtmann
07afca839c Wood Industry: Woodchips have "wood" fuel category 2025-03-23 22:50:41 +01:00
Simon Brodtmann
cfe22bf13d AAI Industry: Add "wood" fuel category to burner generator and fuel processor 2025-03-23 22:39:55 +01:00
Simon Brodtmann
2a8a2e3562 Fix recylce recipe being generated for rocket parts 2025-03-23 22:30:32 +01:00
Simon Brodtmann
75570cd460 AAI Loaders: Correct item/recipe order 2025-03-23 22:28:45 +01:00
Simon Brodtmann
d68d0c1087 Lane Splitters: Correct item order 2025-03-23 22:28:27 +01:00
Simon Brodtmann
1bda174426 Basic construction robots copper recipe uses basic circuit boards and wooden gear wheels 2025-03-19 00:27:56 +01:00
Simon Brodtmann
ed170d2d4d 1.0.35 2025-03-18 20:38:16 +01:00
Simon Brodtmann
7bc50df763 Regular lab recipe always uses wood belt 2025-03-18 20:36:49 +01:00
Simon Brodtmann
be06f702fb Add russian translation (thanks Fr_Dae) 2025-03-18 20:02:52 +01:00
Simon Brodtmann
843117dfc9 Readme 2025-03-17 21:59:31 +01:00
Simon Brodtmann
21875da7b1 1.0.34 2025-03-17 21:53:34 +01:00
Simon Brodtmann
a60a63135b Make Burner leech fork mandatory 2025-03-17 21:51:53 +01:00
Simon Brodtmann
a546b14d09 Add new enemies 2025-03-17 21:51:53 +01:00
Simon Brodtmann
ac60c67999 Make the second planet after Lignumis configurable by other mods 2025-03-17 18:02:53 +01:00
Simon Brodtmann
8982b1bf82 Balance basic construction robots 2025-03-17 17:15:04 +01:00
Simon Brodtmann
b2b992af5b Corect Date 2025-03-16 22:24:16 +01:00
Simon Brodtmann
981c74aa73 1.0.33 2025-03-16 22:23:00 +01:00
Simon Brodtmann
d1b780636e AAI Loaders: Reduce basic circuit boards to match other tiers 2025-03-16 18:52:44 +01:00
Simon Brodtmann
6f453071ea Lane splitters: Yellow lane splitter uses basic circuit board instead of electronic circuit 2025-03-16 18:52:17 +01:00
Simon Brodtmann
aae06ac132 AAI Loaders: Yellow loader uses basic circuit board instead of electronic circuit 2025-03-16 18:51:59 +01:00
Simon Brodtmann
9b736073a3 Nerf basic portable generator from 200 kW to 100 kW 2025-03-16 10:45:08 +01:00
Simon Brodtmann
d35e86755a Remove temporary fix for crash due to "Wood Walls and floors" 2025-03-16 00:05:23 +01:00
Simon Brodtmann
12fdcbcb90 AAI Industry: Basic construction robot copper recipe uses basic circuit board instead of electronic circuit 2025-03-16 00:04:39 +01:00
Simon Brodtmann
70d22cb121 Replace iron gear weel with wooden gear weel in lumber mill copper recipe 2025-03-15 16:06:43 +01:00
Simon Brodtmann
1e219ba4ad AAI Industry: Lumber mill copper recipe uses burner assembler instead of electrical assembler 1 2025-03-15 10:33:04 +01:00
Simon Brodtmann
fda2a82b5e AAI Industry: Remove technology "Basic logistics" 2025-03-15 10:04:55 +01:00
Simon Brodtmann
9edaf14f93 AAI Industry: Move copper cable recipe to copper processing 2025-03-15 00:02:21 +01:00
Simon Brodtmann
b0ee9f94bc 1.0.32 2025-03-14 18:50:18 +01:00
Simon Brodtmann
86f8c55506 Fix players after the first not attackable 2025-03-14 18:46:05 +01:00
Simon Brodtmann
34d3b4a1a5 Add setting for assembler recipe progression and move some lumber mill recipes to a setting 2025-03-14 18:28:27 +01:00
Simon Brodtmann
1b622ffa05 Restrict provisional rocket silo to Lignumis 2025-03-14 12:01:37 +01:00
Simon Brodtmann
cbba8dddf2 Balance noise 2025-03-14 00:37:50 +01:00
Simon Brodtmann
598d6a241f Readme 2025-03-13 16:07:54 +01:00
Simon Brodtmann
56974406d7 1.0.31 2025-03-13 14:17:42 +01:00
Simon Brodtmann
41a84a503f Add copper recipe for lumber mill 2025-03-13 14:14:09 +01:00
Simon Brodtmann
3eb14395ac Add more recipes to lumber mill 2025-03-13 13:57:16 +01:00
Simon Brodtmann
eb849de427 AAI Loaders: Yellow loader recipe uses wood loader 2025-03-12 20:44:17 +01:00
Simon Brodtmann
5e22624330 AAI Loader: Adjust recipe 2025-03-12 20:31:48 +01:00
Nydaleclya
6186bf68ad lignumis/prototypes/compatibility/aai-loaders.lua aktualisiert 2025-03-12 20:29:55 +01:00
Simon Brodtmann
24a33546d5 Possibly fix problems with Wooden rocket silo in remote view 2025-03-12 20:24:51 +01:00
Simon Brodtmann
c7885afe34 Mark Any planet start and Planet picker as incompatible 2025-03-12 20:16:43 +01:00
Simon Brodtmann
9a89515b81 Add missing translation 2025-03-12 20:09:22 +01:00
Simon Brodtmann
b2ac4793c6 1.0.30 2025-03-06 22:49:06 +01:00
Simon Brodtmann
4ed26b5b9d Any planet start: Fix startup crash 2025-03-06 22:45:51 +01:00
Simon Brodtmann
d41cc3c822 1.0.29 2025-03-05 09:49:28 +01:00
Simon Brodtmann
ad56704b52 Fix Burner agricultural tower not having a Nauvis recipe 2025-03-05 09:47:03 +01:00
Simon Brodtmann
c481394e55 Alien Biomes: Add warning 2025-03-05 00:12:54 +01:00
Simon Brodtmann
c334459db2 readme 2025-03-04 21:31:06 +01:00
Simon Brodtmann
e1c40fcd33 Nerf quality assembler to +25% quality 2025-03-04 21:28:24 +01:00
Simon Brodtmann
da50f85b5b Set default for setting "Basic circuit boards" to true 2025-03-04 20:46:42 +01:00
Simon Brodtmann
3b26f3a754 readme 2025-03-04 20:46:14 +01:00
Simon Brodtmann
0bfda7246f 1.0.28 2025-03-04 10:17:22 +01:00
Simon Brodtmann
f91f364c8d Prevent possible errors on player initialization 2025-03-04 09:56:59 +01:00
Simon Brodtmann
8e1c774e2a Steam assembler technology should not ignore tech cost multiplier 2025-03-03 18:41:20 +01:00
Simon Brodtmann
1b117be9c6 AAI Loaders: Add missing translation 2025-03-03 18:40:55 +01:00
Simon Brodtmann
67055378c8 1.0.27 2025-03-02 23:49:55 +01:00
Simon Brodtmann
0fb21cf2ea AAI Industry: Fix basic circuit board recipe unlock 2025-03-02 23:44:01 +01:00
Simon Brodtmann
db9dd1c252 Add compatibility for "Lane splitters" 2025-03-02 23:19:45 +01:00
56 changed files with 1410 additions and 521 deletions

View file

@ -2,15 +2,15 @@ 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.** **Warning when adding to existing games:** With the default settings, this mod will break a few things in your existing bases and space ships. Check out the settings to disable what you don't like.
## 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:
#### [Burner Leech Fork](https://mods.factorio.com/mod/Burner-Leech-Fork) #### [Any Planet Start](https://mods.factorio.com/mod/any-planet-start)
There will be fewer inserters that need to be fueled manually. Allows you to choose the planet that Lignumis orbits. You can continue on Vulcanus, Fulgora or Gleba after leaving Lignumis.
#### [Diversitree](https://mods.factorio.com/mod/Diversitree) #### [Diversitree](https://mods.factorio.com/mod/Diversitree)
@ -28,9 +28,14 @@ If you want more of it than Lignumis offers, add this mod. It adds ammo for shot
If you like go more into the charcoal direction. It has no overlap with Lignumis and starts to get relevant on Nauvis. If you like go more into the charcoal direction. It has no overlap with Lignumis and starts to get relevant on Nauvis.
#### [Wooden Fulgora: Coralmium Agriculture](https://mods.factorio.com/mod/fulgora-coralmium-agriculture), [Wooden Vulcanus: Sulfuric Bacteria](https://mods.factorio.com/mod/vulcanus-sulfuric-bacteria) and [Wooden Aquilo: Seabloom Algaculture](https://mods.factorio.com/mod/aquilo-seabloom-algaculture) #### [Wooden Aquilo: Seabloom Algaculture](https://mods.factorio.com/mod/aquilo-seabloom-algaculture)
For wood on the other planets. For wood on Aquilo.
#### [Crushing Industry](https://mods.factorio.com/mod/crushing-industry)
Recommended with high science cost settings. It adds crushers and crushed ores to increase productivity.
Lignumis adds crushed gold ore and a technology to unlock the crusher with wood and steam science packs.
#### [AAI Loaders](https://mods.factorio.com/mod/aai-loaders) #### [AAI Loaders](https://mods.factorio.com/mod/aai-loaders)
@ -62,7 +67,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. * 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.
@ -104,20 +109,29 @@ Don't touch inputs for labs in this list.
Lignumis adds wood and steam science packs to all labs' inputs in `data-updates.lua` so modded labs will support them. Lignumis adds wood and steam science packs to all labs' inputs in `data-updates.lua` so modded labs will support them.
If your modded lab is special and it should not support these science packs, use this list or set the inputs in `data-final-fixes.lua`. If your modded lab is special and it should not support these science packs, use this list or set the inputs in `data-final-fixes.lua`.
#### Chaning the second planet (a.k.a. transition to Nauvis)
If you want to create a mod that moves Lignumis to another planet, there is a hidden setting for the scripted transition to teleport the player not to Nauvis but to any planet you like.
This doesn't change any technologies or the location of Lignumis on the map. Make sure you adjust the prototypes as well on your end.
In `settings-updates.lua` add the following to switch to Gleba as the second planet:
```lua
data.raw["string-setting"]["lignumis-second-planet"].allowed_values = { "gleba" }
data.raw["string-setting"]["lignumis-second-planet"].default_value = "gleba"
```
## Todo ## Todo
- Fix pipe graphics on desiccation furnace and quality assembler - Fix pipe graphics on desiccation furnace and quality assembler
- Trees must not die when absorbing noise - Trees must not die when absorbing noise
- https://lua-api.factorio.com/latest/types/TreeVariation.html - https://lua-api.factorio.com/latest/types/TreeVariation.html
- Improve transition to Nauvis a bit more - Improve transition to Nauvis a bit more
- Add late-game recipe for oil from wood pulp
- Find a better message when transitioning to Nauvis
- 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 [Exotic Space Industries](https://mods.factorio.com/mod/exotic-space-industries)
- 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 - "Hardcore Lignumis"
- Only create 1 cutscene per game in multiplayer
- Think about moving Lumber mill to later and let it use electricity.
## Credits ## Credits
@ -125,8 +139,9 @@ 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
- Russian (ru): Fr_Dae
### Assets ### Assets / Code
[Hurricane](https://mods.factorio.com/user/Hurricane046) [Hurricane](https://mods.factorio.com/user/Hurricane046)
@ -187,3 +202,8 @@ 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.

View file

@ -1,4 +1,185 @@
--------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------
Version: 1.0.47
Date: 31.05.2025
Bug Fixes:
- Fix crash when there is a tree that has no minable property
- Fix crash when the on_rocket_launched event doesn't have a rocket_silo
- Correct Factoriopedia simulation for wooden underground belts
---------------------------------------------------------------------------------------------------
Version: 1.0.46
Date: 23.05.2025
Changes:
- Set solar power to orbiting planet's +20%
- Balance basic robots battery usage
Bug Fixes:
- Correct some item weights
---------------------------------------------------------------------------------------------------
Version: 1.0.45
Date: 03.05.2025
Bug Fixes:
- Any Planet Start: Fix planet discovery being disabled
---------------------------------------------------------------------------------------------------
Version: 1.0.44
Date: 20.04.2025
Bug Fixes:
- Add Secretas optional dependency to fix loading order
---------------------------------------------------------------------------------------------------
Version: 1.0.43
Date: 20.04.2025
Changes:
- Any planet start: Move code to updates stage
Bug Fixes:
- Correct description of the Quality Assembler
- Any planet start (Vulcanus): Add some fixes to not get stuck
- Crushing Industry: Move compatibility code to updates phase to prevent crash
---------------------------------------------------------------------------------------------------
Version: 1.0.42
Date: 14.04.2025
Bug Fixes:
- Helmod: Fix bug with steam assembler (now really)
- Crushing Industry: Fix wrong ingredient amount for gold from crushed gold (BREAKING)
---------------------------------------------------------------------------------------------------
Version: 1.0.41
Date: 13.04.2025
Changes:
- Add setting for even earlier personal robots
Bug Fixes:
- Prevent broken icons
- Helmod: Fix bug with steam assembler
- Any planet start: Fix prerequisites for "Tree seeding"
- Any planet start: Fix circular dependency
- Wood Gasification updated: Fix amount of wood per tree
---------------------------------------------------------------------------------------------------
Version: 1.0.40
Date: 06.04.2025
Changes:
- Add setting for wood on Fulgora and make Wooden Fulgora optional again
Bug Fixes:
- Add fix for duplicate ready rocket silo
- Remove inventory of provisional rocket silo
---------------------------------------------------------------------------------------------------
Version: 1.0.39
Date: 28.03.2025
Changes:
- Add Space Age flag
Breaking changes:
- AAI loaders, Lane splitters: Apply recipe changes only when AAI Industry is active
- AAI Loaders: Adhere belt progression setting
---------------------------------------------------------------------------------------------------
Version: 1.0.38
Date: 28.03.2025
Changes:
- Any planet start: Change internal name of the space connection to Lignumis depending on the selected planet
Bug Fixes:
- Any planet start (Vulcanus) + Crushing Industry: Move iron crushing to fix soft-lock
---------------------------------------------------------------------------------------------------
Version: 1.0.37
Date: 28.03.2025
Changes:
- Switch from "Burner leech fork" to "Inserter Fuel Leech"
- "Wooden Vulcanus" and "Wooden Fulgora" are now mandatory ("Wooden Gleba" is currently being made)
- Crushing Industry: Burner Crusher can be crafted in Lumber Mill (with more Lumber Mill recipes enabled)
- Add compatibility for "Any planet start" - Now it is used to determine the planet after Lignumis and will move the moon accordingly
- Add compatibility for "Gleba reborn"
Bug Fixes:
- Crushing Industry: Fix name of Burner Crusher copper recipe
---------------------------------------------------------------------------------------------------
Version: 1.0.36
Date: 24.03.2025
Changes:
- Basic construction robots copper recipe uses basic circuit boards and wooden gear wheels
- AAI Industry: Add "wood" fuel category to burner generator and fuel processor
- Wood Industry: Woodchips have "wood" fuel category
- Add compatibility for "Crushing Industry"
Bug Fixes:
- Lane Splitters: Correct item order
- AAI Loaders: Correct item/recipe order
- Fix recylce recipe being generated for rocket parts
---------------------------------------------------------------------------------------------------
Version: 1.0.35
Date: 18.03.2025
Changes:
- Add russian translation (thanks Fr_Dae)
- Regular lab recipe always uses wood belt
---------------------------------------------------------------------------------------------------
Version: 1.0.34
Date: 17.03.2025
Changes:
- Balance basic construction robots (reduced energy buffer and usage)
- Make the second planet after Lignumis configurable by other mods
- Add new enemies (only for new games)
- Burner leech fork is now a mandatory dependency
---------------------------------------------------------------------------------------------------
Version: 1.0.33
Date: 16.03.2025
Breaking Changes:
- Replace iron gear wheel with wooden gear wheel in lumber mill copper recipe
- AAI Industry: Lumber mill copper recipe uses burner assembler instead of electrical assembler 1
- AAI Industry: Basic construction robot copper recipe uses basic circuit board instead of electronic circuit
- AAI Loaders: Yellow loader uses basic circuit board instead of electronic circuit
- Lane splitters: Yellow lane splitter uses basic circuit board instead of electronic circuit
Changes:
- Nerf basic portable generator from 200 kW to 100 kW
- AAI Industry: Move copper cable recipe to copper processing
- AAI Industry: Remove technology "Basic logistics"
- AAI Loaders: Reduce basic circuit boards to match other tiers
- Remove temporary fix for crash due to "Wood Walls and floors"
---------------------------------------------------------------------------------------------------
Version: 1.0.32
Date: 14.03.2025
Breaking Changes:
- Some newly added recipes for the lumber mill have been moved to a setting that is off by default
Changes:
- Reduce noise
- Restrict provisional rocket silo to Lignumis
- Add setting for assembler recipe progression
Bug Fixes:
- Fix players after the first not attackable
---------------------------------------------------------------------------------------------------
Version: 1.0.31
Date: 13.03.2025
Breaking Changes:
- Any planet start/Planet picker: Mark as incompatible
Changes:
- Add more recipes to lumber mill
- AAI Loaders: Expensive mode recipe uses basic circuit boards (thanks Nydaleclya)
- AAI Loaders: Yellow loader recipe uses wood loader
Bug Fixes:
- Add missing translation
- Possibly fix problems with Wooden rocket silo in remote view
- Add copper recipe for the lumber mill
---------------------------------------------------------------------------------------------------
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:

View file

@ -8,5 +8,3 @@ handler.add_libraries({
require("scripts/to-nauvis"), require("scripts/to-nauvis"),
require("scripts/wooden-rocket-silo") require("scripts/wooden-rocket-silo")
}) })

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

View file

@ -1,36 +1,49 @@
{ {
"name": "lignumis", "name": "lignumis",
"version": "1.0.26", "version": "1.0.47",
"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",
"homepage": "https://discord.gg/5bevXf5W", "homepage": "https://discord.gg/5bevXf5W",
"factorio_version": "2.0", "factorio_version": "2.0",
"space_travel_required": true,
"dependencies": [ "dependencies": [
"base", "base",
"space-age >= 2.0.28", "space-age >= 2.0.33",
"lignumis-assets",
"flib",
"PlanetsLib >= 1.1.26",
"astroponics >= 1.2.0", "astroponics >= 1.2.0",
"cf-lib >= 0.0.8",
"mf-core >= 1.0.3",
"mf-buildings >= 1.0.7",
"mf-logistics >= 1.0.1",
"Wood-Walls >= 1.2.0",
"pollution-as-surface-property",
"bioprocessing-tab", "bioprocessing-tab",
"?hot-metals >= 1.1.0", "cf-lib >= 0.0.13",
"?wood-military >= 2.3.3", "flib",
"?metal-and-stars", "InserterFuelLeech",
"lignumis-assets >= 1.0.3",
"mf-buildings >= 1.0.7",
"mf-core >= 1.0.3",
"mf-logistics >= 1.0.1",
"PlanetsLib >= 1.1.26",
"pollution-as-surface-property",
"Wood-Walls >= 1.2.0",
"vulcanus-sulfuric-bacteria",
"?aai-industry", "?aai-industry",
"?planet-picker",
"?Diversitree",
"?aai-loaders", "?aai-loaders",
"?aai-loaders-sane",
"?any-planet-start",
"?atan-nuclear-science", "?atan-nuclear-science",
"?crushing-industry",
"?Diversitree",
"?fulgora-coralmium-agriculture",
"?gleba-reborn",
"?hot-metals >= 1.1.0",
"?lane-splitters",
"(?)metal-and-stars",
"(?)secretas",
"(?)Wood_Gasification_updated",
"?wood-industry",
"?wood-military >= 2.3.3",
"!apm_power_ldinc", "!apm_power_ldinc",
"!wood-logistics", "!Burner-Leech-Fork",
"!early-agriculture", "!early-agriculture",
"!planet-picker",
"!wood-logistics",
"!wood-universe-modpack" "!wood-universe-modpack"
] ]
} }

View file

@ -45,10 +45,15 @@ 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
lignumis-spawner-small=Lignumis egg raft
lignumis-small-wriggler-pentapod=Lignumis small wiggler pentapod
lignumis-medium-wriggler-pentapod=Lignumis medium wiggler pentapod
[entity-description] [entity-description]
lumber-mill=Advanced machine to process wood. lumber-mill=Advanced machine to process wood.
quality-assembler=High-end assembler to craft only the finest quality machines. It gives one free quality tier to the crafted item 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 25% 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] [equipment-name]
basic-portable-generator-equipment-gold=Basic portable generator equipment (gold) basic-portable-generator-equipment-gold=Basic portable generator equipment (gold)
@ -76,11 +81,12 @@ gold-quality-catalyst=Gold quality catalyst
wood-armor=Wood armor wood-armor=Wood armor
wood-darts-magazine=Wood darts magazine wood-darts-magazine=Wood darts magazine
basic-circuit-board=Basic circuit board basic-circuit-board=Basic circuit board
crushed-gold-ore=Crushed gold ore
[item-description] [item-description]
wooden-wall=Use wooden walls to protect your base from the locals and to reduce noise levels. wooden-wall=Use wooden walls to protect your base from the locals and to reduce noise levels.
stone-wall=Better acoustic and physical protection than the wooden counterpart. stone-wall=Better acoustic and physical protection than the wooden counterpart.
destination-nauvis=Insert this item into a rocket to travel to Nauvis. Notice that you won`t come back for a while.\n__REMARK_COLOR_BEGIN__BETA notice: Keep at most 40 item stack in your inventory before leaving as the current transition to Nauvis is a temporary implementation. Be sure to take material to jumpstart your iron, copper and wood production.__REMARK_COLOR_END__ gold-stromatolite-seed=Plant the seed to grow gold stromatolites. They house bacteria that enrich gold from the ground.\n__REMARK_COLOR_BEGIN__Expected yield:__REMARK_COLOR_END__ 1.5 [item=gold-ore]/m
[fluid-name] [fluid-name]
wood-pulp=Wood pulp wood-pulp=Wood pulp
@ -99,6 +105,8 @@ low-density-structure-gold=Low density structure
rocket-fuel-from-wood-pulp-and-peat=Bio-rocket-fuel rocket-fuel-from-wood-pulp-and-peat=Bio-rocket-fuel
nutrients-from-wood-pulp=Nutrients from wood pulp nutrients-from-wood-pulp=Nutrients from wood pulp
active-noise-cancelling=Active noise cancelling active-noise-cancelling=Active noise cancelling
casting-gold=Casting gold
gold-ore-crushing=Gold ore crushing
[recipe-description] [recipe-description]
moist-stromatolite-remnant-desiccation-without-steam=Used for balancing the production of steam. moist-stromatolite-remnant-desiccation-without-steam=Used for balancing the production of steam.
@ -128,6 +136,8 @@ 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
basic-ore-crushing=Basic ore crushing
[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.
@ -166,6 +176,10 @@ lignumis-ammo-progression=Enable progressive ammo recipes
lignumis-technology-progression=Enable progressive technologies lignumis-technology-progression=Enable progressive technologies
lignumis-basic-circuit-board=Enable basic circuit board lignumis-basic-circuit-board=Enable basic circuit board
lignumis-circuit-progression=Enable progressive circuit recipes lignumis-circuit-progression=Enable progressive circuit recipes
lignumis-assembler-progression=Enable progressive assembler recipes
lignumis-lumber-mill-more-recipes=Enable more recipes for the lumber mill
lignumis-fulgora-wood=Add wood to Fulgora
lignumis-early-robots=Even earlier personal robots
[mod-setting-description] [mod-setting-description]
lignumis-belt-progression=Yellow belts will require wood belts to craft. lignumis-belt-progression=Yellow belts will require wood belts to craft.
@ -174,6 +188,13 @@ lignumis-ammo-progression=Firearm magazines will require wooden darts magazines
lignumis-technology-progression=Adds wood and steam science packs to most late game technologies. Disabling this removes the relevance of Lignumis' science packs in the late game. lignumis-technology-progression=Adds wood and steam science packs to most late game technologies. Disabling this removes the relevance of Lignumis' science packs in the late game.
lignumis-basic-circuit-board=Recipes use basic circuit boards instead of gold cables and gold plates where appropriate. Both gold and copper recipes will be added. lignumis-basic-circuit-board=Recipes use basic circuit boards instead of gold cables and gold plates where appropriate. Both gold and copper recipes will be added.
lignumis-circuit-progression=Electric circuits will require basic circuit boards to craft. lignumis-circuit-progression=Electric circuits will require basic circuit boards to craft.
lignumis-assembler-progression=Assembling machine 1 will require burner assembling machines to craft.
lignumis-lumber-mill-more-recipes=The lumber mill can also craft basic turrets, burner assemblers and burner inserters. Improves balancing wood usage when all progressive recipes are enabled and helps with marathon games.
lignumis-fulgora-wood=This adds wooden gear wheels to scrap recycling as the main source of wood. Disable this is you have a different source of wood or import everything from other planets.
lignumis-early-robots=Personal robots are moved from steam to wood science and are a tiny bit faster.
[autoplace-control-names]
lignumis_enemy_base=Lignumis enemy bases
[entity-status] [entity-status]
no-quality-catalyst=No quality catalyst no-quality-catalyst=No quality catalyst
@ -186,8 +207,8 @@ quality-catalyst-energy-value=Quality value
quality-catalyst=Quality catalyst quality-catalyst=Quality catalyst
[lignumis] [lignumis]
start-new-game=Lignumis is meant to be played in a fresh game as it extends the early game before Nauvis. start-new-game=Lignumis is meant to be played in a fresh game as it extends the early game.
provisional-rocket-silo-button=Escape to Nauvis provisional-rocket-silo-button=Escape to __1__
provisional-rocket-silo-button-tooltip-inventory=Your personal inventory must be empty! provisional-rocket-silo-button-tooltip-inventory=Your personal inventory must be empty!
provisional-rocket-silo-button-tooltip-nauvis=You don't know yet where to go! provisional-rocket-silo-button-tooltip-target=You don't know yet where to go!
provisional-rocket-silo-description=Fill the rocket inventory and launch the rocket to escape to Nauvis.\nBe sure to take material to jumpstart your iron, copper and wood production. provisional-rocket-silo-description=Fill the rocket inventory and launch the rocket to escape to __1__.\nBe sure to take material to jumpstart your iron, copper and wood production.

View file

@ -0,0 +1,214 @@
[mod-name]
lignumis=○ Лигнумис
[mod-description]
lignumis=Погрузитесь в мир Лигнумиса — луны Наувиса, предлагающей лишь самые базовые технологии.
[space-location-name]
lignumis=Лигнумис
[space-location-description]
lignumis=Лигнумис — это луна, вращающаяся вокруг Наувиса. Она во многом похожа на Наувис, но кажется моложе и беднее ресурсами.
[airborne-pollutant-name]
noise=Шум
[airborne-pollutant-name-with-amount]
noise=__1__ шума
[entity-name]
wood-lab=Деревянная лаборатория
peat=Торф
burner-agricultural-tower=Твердотопливная сельскохозяйственная башня
burner-assembling-machine=Твердотопливный сборочный автомат
burner-long-handed-inserter=Твердотопливный длинный манипулятор
lumber-mill=Лесопильня
gold-stromatolite=Золотой строматолит
gold-stromatolite-plant=Золотой строматолит (растение)
gold-stromatolite-lignumis=Золотой строматолит
gold-patch=Золотое месторождение
deep-miner=Глубинный бур
gold-pipe=Золотая труба
gold-pipe-to-ground=Золотая подземная труба
gold-storage-tank=Золотой резервуар
desiccation-furnace=Печь для высушивания
steam-assembling-machine=Паровой сборочный автомат
provisional-rocket-silo=Импровизированная ракетная шахта
provisional-rocket-silo-ready=Импровизированная ракетная шахта (готово)
basic-gun-turret=Базовая пулемётная турель
basic-construction-robot-gold=Базовый строительный дрон (золот)
basic-construction-robot-copper=Базовый строительный дрон (медь)
wood-transport-belt=Деревянный конвейер
wood-underground-belt=Деревянный подземный конвейер
wood-splitter=Деревянный разделитель
basic-radar=Базовый радар
active-noise-cancelling-tower=Башня активного шумоподавления
quality-assembler=Качественный сборочный автомат
aai-wood-loader=Деревянный погрузчик
wood-lane-splitter=Деревянный распределитель лент
lignumis-spawner-small=Яичная кладка Лигнумиса
lignumis-small-wriggler-pentapod=Малый пятиног-ползун Лигнумиса
lignumis-medium-wriggler-pentapod=Средний пятиног-ползун Лигнумиса
[entity-description]
lumber-mill=Продвинутая машина для обработки древесины.
quality-assembler=Высококачественный сборочный автомат, создающий только лучшие механизмы. Добавляет 25% дополнительного качества предмету, потребляя [item=gold-quality-catalyst]. Условия поверхности и ингредиенты остаются неизменными.
gold-stromatolite-plant=Собирайте золотой строматолит для получения бактерий, обогащающих золото из почвы.\n__REMARK_COLOR_BEGIN__Ожидаемая добыча:__REMARK_COLOR_END__ 1.5 [item=gold-ore]/m
[equipment-name]
basic-portable-generator-equipment-gold=Базовый портативный генератор (золото)
basic-portable-generator-equipment-copper=Базовый портативный генератор (медь)
basic-personal-roboport-equipment-gold=Базовая персональная дронстанция (золото)
basic-personal-roboport-equipment-copper=Базовая персональная дронстанция (медь)
[item-name]
wooden-gear-wheel=Деревянная шестерня
wood-science-pack=Деревянный исследовательский пакет
peat=Торф
gold-stromatolite-seed=Семя золотого строматолита
gold-ore=Золотая руда
gold-bacteria=Золотобактерия
gold-plate=Золотая плита
gold-cable=Золотой кабель
moist-stromatolite-remnant=Влажный остаток строматолита
steam-science-pack=Паровой исследовательский пакет
destination-nauvis=Путешествие на Наувис
lumber=Пиломатериалы
basic-repair-pack=Базовый ремонтный комплект
cupriavidus-necator=Cupriavidus necator
dead-cupriavidus-necator=Мёртвая cupriavidus necator
gold-quality-catalyst=Золотой катализатор качества
wood-armor=Деревянная броня
wood-darts-magazine=Магазин с деревянными дротиками
basic-circuit-board=Базовая схема
crushed-gold-ore=Дроблёная золотая руда
[item-description]
wooden-wall=Используйте деревянные стены для защиты базы и снижения уровня шума.
stone-wall=Обеспечивает лучшую акустическую и физическую защиту, чем деревянный аналог.
gold-stromatolite-seed=Посадите семя для выращивания золотого строматолита. Он содержит бактерии, обогащающие золото из почвы.\n__REMARK_COLOR_BEGIN__Ожидаемая добыча:__REMARK_COLOR_END__ 1.5 [item=gold-ore]/m
[fluid-name]
wood-pulp=Древесная масса
molten-gold=Расплавленное золото
[recipe-name]
moist-stromatolite-remnant-desiccation=Высушивание влажного строматолита
moist-stromatolite-remnant-desiccation-without-steam=Высушивание влажного строматолита
gold-stromatolite-seed-to-peat=Обработка семян золотого строматолита
wood-liquefaction=Сжижение древесины
provisional-rocket-part=Импровизированная деталь ракеты
cupriavidus-necator-starter=Cupriavidus necator (стартовая культура)
plastic-from-cupriavidus-necator=Биопластик
plastic-from-dead-cupriavidus-necator=Биопластик
low-density-structure-gold=Конструкция малой плотности
rocket-fuel-from-wood-pulp-and-peat=Био-ракетное топливо
nutrients-from-wood-pulp=Питательные вещества из древесной массы
active-noise-cancelling=Активное шумоподавление
casting-gold=Литьё золота
gold-ore-crushing=Дробление золотой руды
[recipe-description]
moist-stromatolite-remnant-desiccation-without-steam=Используется для балансировки производства пара.
gold-stromatolite-seed-to-peat=Используется для удаления излишков семян золотого строматолита.
[technology-name]
wood-science-pack=Деревянный исследовательский пакет
burner-automation=Твердотопливная автоматизация
planet-discovery-nauvis=Открытие планеты Наувис
planet-discovery-lignumis=Открытие луны Лигнумис
iron-processing=Обработка железа
copper-processing=Обработка меди
lumber-mill=Лесопильня
deep-miner=Глубинный бур
gold-fluid-handling=Золотая транспортировка и хранение жидкостей
steam-automation=Паровая автоматизация
steam-science-pack=Паровой исследовательский пакет
wood-liquefaction=Сжижение древесины
provisional-rocketry=Импровизированное ракетостроение
basic-gun-turret=Базовая пулемётная турель
basic-construction-robotics-gold=Базовый строительная робототехника (золото)
basic-construction-robotics-copper=Базовый строительная робототехника (медь)
wood-logistics=Деревянная логистика
automation=Электрическая автоматизация
tree-seeding=Базовое сельское хозяйство
basic-repair-pack=Базовый ремонтный комплект
basic-radar=Базовый радар
active-noise-cancelling=Активное шумоподавление
quality-assembler=Качественный сборочный автомат
aai-wood-loader=Деревянный погрузчик
basic-ore-crushing=Базовое дробление руды
[technology-description]
wood-science-pack=Позволяет исследовать базовые технологии на основе древесины.
burner-automation=Технология для базовой автоматизации с использованием твердотопливных машин.
planet-discovery-nauvis=Планета с умеренным климатом, предлагающая все необходимые ресурсы.
planet-discovery-lignumis=Луна на орбите Наувиса, которая мало что может предложить, кроме растительности и металла, который может быть полезен.
lumber-mill=Передовой станок для обработки древесины.
deep-miner=Открывает доступ к огромным месторождениям золота, которые ранее были недоступны.
steam-automation=Позволяет исследовать более сложные технологии на основе древесины и золота.
wood-liquefaction=Превращение дерева в жидкость открывает новые возможности.
provisional-rocketry=Нам нужно как-то убраться с этой луны. Это наш единственный шанс!
basic-gun-turret=Самая простая автоматическая защита. Это немного, но пока этого должно хватить.
basic-construction-robotics-gold=Самая базовая помощь в личных строительных нуждах.
basic-construction-robotics-copper=Самая базовая помощь в личных строительных нуждах.
wood-logistics=Медленная, но всё же автоматическая транспортировка предметов.
tree-seeding=[entity=burner-agricultural-tower] позволяет высаживать семена в пригодную для посева почву. Посаженные семена вырастают в деревья, которые можно собирать.\n[entity=tree-plant] может расти на траве и земле. [entity=gold-stromatolite] может расти на [tile=natural-gold-soil].
active-noise-cancelling=Помогает справляться с шумом.
quality-assembler=Высококлассный сборочный автомат, создающий машины только самого высокого качества, используя особые ресурсы, которые можно найти только на Лигнумисе.
automation-science-pack=Покиньте Лигнумис для исследования продвинутых технологий.
[modifier-description]
basic-gun-turret-attack-bonus=Урон базовой турели: +__1__
[tile-name]
wood-floor=Деревянный пол
natural-gold-soil=Золотосодержащая почва
[fuel-category-name]
wood=Древесное топливо
quality-catalyst=Катализатор качества
[mod-setting-name]
lignumis-belt-progression=Включить прогрессивные рецепты конвейеров
lignumis-inserter-progression=Включить прогрессивные рецепты манипуляторов
lignumis-ammo-progression=Включить прогрессивные рецепты патронов
lignumis-technology-progression=Включить прогрессивные технологии
lignumis-basic-circuit-board=Включить базовую схему
lignumis-circuit-progression=Включить прогрессивные рецепты электросхем
lignumis-assembler-progression=Включить прогрессивные рецепты сборочных автоматов
lignumis-lumber-mill-more-recipes=Добавить дополнительные рецепты для лесопильни
lignumis-fulgora-wood=Добавить древесину на Фульгору
lignumis-early-robots=Ещё более ранние персональные дроны
[mod-setting-description]
lignumis-belt-progression=Жёлтые конвейеры будут требовать деревянные конвейеры для создания.
lignumis-inserter-progression=Жёлтые манипуляторы будут требовать твердотопливные манипуляторы для создания.
lignumis-ammo-progression=Магазины огнестрельного оружия будут требовать магазин с деревянными дротиками для создания.
lignumis-technology-progression=Добавляет деревянные и паровые исследовательские пакеты к большинству поздних технологий. Отключение этого параметра снижает их значимость в поздней игре.
lignumis-basic-circuit-board=Рецепты используют базовые схемы вместо золотых кабелей и золотых плит, где это возможно. Будут добавлены и золотой, и медный рецепты создания.
lignumis-circuit-progression=Электросхемы будут требовать базовые схемы для создания.
lignumis-assembler-progression=Сборочный автомат 1 будет трубовать твердотопливный сборочный автомат для создания.
lignumis-lumber-mill-more-recipes=Лесопильня может создавать базовые турели, твердотопливные сборочные атоматы и твердотопливные манипуляторы. При включении всех прогрессивных рецептов улучшается баланс использования древесины и помогает в играх-марафонах.
lignumis-fulgora-wood=Добавляет деревянные шестерни в переработку металлолома как источник древесины. Отключите, если у вас есть другой источник древесины или вы отправляете её с других планет.
lignumis-early-robots=Персональные дроны будут передвинуты из паровых в деревянные исследовательские пакеты и получат небольшое ускорение.
[autoplace-control-names]
lignumis_enemy_base=Вражеские базы Лигнумиса
[entity-status]
no-quality-catalyst=Нет катализатора качества
[description]
accepted-catalysts=Разрешённые катализаторы
quality-catalyst-energy-value=Значение качества
[gui]
quality-catalyst=Катализатор качества
[lignumis]
start-new-game=Лигнумис рассчитан на игру с нуля, так как он удлиняет ранний этап перед Наувисом.
provisional-rocket-silo-button=Сбежать на __1__
provisional-rocket-silo-button-tooltip-inventory=Ваш инвентарь должен быть пустой!
provisional-rocket-silo-button-tooltip-target=Вы ещё не знаете куда сбежать!
provisional-rocket-silo-description=Заполните ракету ресурсами и запустите её, чтобы сбежать на __1__.\nНе забудьте взять материалы для запуска производства железа, меди и древесины.

View file

@ -0,0 +1,5 @@
for _, player in pairs(game.players) do
if player.character then
player.character.destructible = true
end
end

View file

@ -0,0 +1,5 @@
storage.target_planet = settings.startup["lignumis-second-planet"].value or "nauvis"
if script.active_mods["any-planet-start"] then
storage.target_planet = settings.startup["aps-planet"].value ~= "none" and settings.startup["aps-planet"].value or storage.target_planet
end

View file

@ -1,14 +1,17 @@
local Technology = require("__cf-lib__/data/Technology") local Technology = require("__cf-lib__/data/Technology")
local Recipe = require("__cf-lib__/data/Recipe")
if not mods["aai-industry"] then return end 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
-- Technologies / Recipe unlocks
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")
burner_mechanics:addPrerequisite("iron-processing")
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
@ -16,6 +19,15 @@ data.raw.recipe["burner-mining-drill"].enabled = true
local burner_automation = Technology:new("burner-automation") local burner_automation = Technology:new("burner-automation")
burner_automation:addRecipe("burner-assembling-machine") burner_automation:addRecipe("burner-assembling-machine")
Technology:new("basic-logistics"):removeRecipe("transport-belt")
Technology:new("logistics"):addRecipe("transport-belt")
-- Electrics comes later with AAI Industry active
Recipe:new("lumber-mill-copper"):replaceIngredient("assembling-machine-1", "burner-assembling-machine")
Recipe:new("basic-construction-robot-copper"):replaceIngredient("electronic-circuit", "basic-circuit-board")
-- Entities
local wall = data.raw["wall"]["concrete-wall"] local wall = data.raw["wall"]["concrete-wall"]
wall.emissions_per_second = wall.emissions_per_second or {} wall.emissions_per_second = wall.emissions_per_second or {}
wall.emissions_per_second.noise = -30 / 60 wall.emissions_per_second.noise = -30 / 60
@ -24,9 +36,18 @@ data.raw["lab"]["wood-lab"].next_upgrade = "burner-lab"
table.insert(data.raw["agricultural-tower"]["burner-agricultural-tower"].energy_source.fuel_categories, "processed-chemical") table.insert(data.raw["agricultural-tower"]["burner-agricultural-tower"].energy_source.fuel_categories, "processed-chemical")
table.insert(data.raw["assembling-machine"]["fuel-processor"].energy_source.fuel_categories, "wood")
if settings.startup["lignumis-basic-circuit-board"].value then if settings.startup["lignumis-basic-circuit-board"].value then
table.insert(data.raw["recipe"]["electric-mining-drill"].ingredients, { type = "item", name = "basic-circuit-board", amount = 2 }) table.insert(data.raw["recipe"]["electric-mining-drill"].ingredients, { type = "item", name = "basic-circuit-board", amount = 2 })
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
Technology:new("electricity"):removeRecipe("copper-cable")
Technology:new("copper-processing"):addRecipe("copper-cable")
end end

View file

@ -0,0 +1,13 @@
local Recipe = require("__cf-lib__/data/Recipe")
if not mods["aai-loaders"] then return end
local recipe = Recipe:new("aai-loader")
if settings.startup["lignumis-belt-progression"].value then
recipe:replaceIngredient("transport-belt", "aai-wood-loader", 1)
end
if mods["aai-industry"] and settings.startup["lignumis-basic-circuit-board"].value then
recipe:replaceIngredient("electronic-circuit", "basic-circuit-board")
end

View file

@ -8,7 +8,7 @@ local basic_circuit_board = settings.startup["lignumis-basic-circuit-board"].val
local recipe = { local recipe = {
ingredients = { ingredients = {
{ type = "item", name = "lumber", amount = 5 }, { type = "item", name = "lumber", amount = 5 },
basic_circuit_board and { type = "item", name = "basic-circuit-board", amount = 10 } or basic_circuit_board and { type = "item", name = "basic-circuit-board", amount = 5 } or
{ type = "item", name = "gold-cable", amount = 10 }, { type = "item", name = "gold-cable", amount = 10 },
{ type = "item", name = "wood-transport-belt", amount = 1 } { type = "item", name = "wood-transport-belt", amount = 1 }
}, },
@ -34,15 +34,19 @@ AAILoaders.make_tier({
unlubricated_recipe = mods["aai-loaders-sane"] and recipe or { unlubricated_recipe = mods["aai-loaders-sane"] and recipe or {
ingredients = { ingredients = {
{ type = "item", name = "lumber", amount = 50 }, { type = "item", name = "lumber", amount = 50 },
basic_circuit_board and { type = "item", name = "basic-circuit-board", amount = 50 } or
{ type = "item", name = "gold-cable", amount = 100 }, { type = "item", name = "gold-cable", amount = 100 },
{ type = "item", name = "wood-transport-belt", amount = 1 } { type = "item", name = "wood-transport-belt", amount = 1 }
}, },
energy_required = 5 energy_required = 5
}, },
next_upgrade = "aai-loader", next_upgrade = "aai-loader",
localise = false localise = false,
order = "d[loader]-a00[aai-wood-loader]"
}) })
data.raw.recipe["aai-wood-loader"].category = "wood-processing-or-assembling"
if not basic_circuit_board then if not basic_circuit_board then
local nauvis_recipe = Recipe:new("aai-wood-loader"):clone("wood-loader-electronic-circuit") local nauvis_recipe = Recipe:new("aai-wood-loader"):clone("wood-loader-electronic-circuit")
nauvis_recipe:replaceIngredient("gold-cable", "electronic-circuit") nauvis_recipe:replaceIngredient("gold-cable", "electronic-circuit")

View file

@ -0,0 +1,14 @@
local Technology = require("__cf-lib__/data/Technology")
if not mods["any-planet-start"] then return end
local target_planet = settings.startup["aps-planet"].value
if target_planet == "none" or target_planet == "nauvis" then return end
-- Switch planet discovery technology to the new planet
Technology:new("planet-discovery-" .. target_planet)
:assign({
enabled = true,
hidden = false
})

View file

@ -0,0 +1,79 @@
local Technology = require("__cf-lib__/data/Technology")
if not mods["any-planet-start"] then return end
local target_planet = settings.startup["aps-planet"].value
if target_planet == "none" or target_planet == "nauvis" then return end
Technology:new("tree-seeding"):setPrerequisites({ "wood-science-pack" })
-- Switch planet discovery technology to the new planet
Technology:new("planet-discovery-" .. target_planet)
:assign({
enabled = true,
hidden = false,
unit = {
count = 100,
ingredients = {
{ "wood-science-pack", 1 },
{ "steam-science-pack", 1 }
},
time = 30
}
})
:setPrerequisites({ "provisional-rocketry" })
Technology:new("iron-processing"):replacePrerequisite("planet-discovery-nauvis", "planet-discovery-" .. target_planet)
Technology:new("copper-processing"):replacePrerequisite("planet-discovery-nauvis", "planet-discovery-" .. target_planet)
-- Vulcanus
if target_planet == "vulcanus" then
Technology:new("automation"):addPrerequisite("iron-processing")
Technology:new("steel-processing"):addPrerequisite("iron-processing")
Technology:new("tungsten-carbide"):addPrerequisite("planet-discovery-vulcanus")
Technology:new("iron-processing").prototype.research_trigger.entity = "big-volcanic-rock"
Technology:new("copper-processing").prototype.research_trigger.entity = "big-volcanic-rock"
data.raw.resource["tungsten-ore"].category = "basic-solid"
if mods["bztitanium"] and mods["crushing-industry"] then
Technology:new("foundry"):addRecipe("crushed-titanium-ore")
data.raw.recipe["crushed-titanium-ore"].category = "basic-crushing"
end
end
-- Fulgora
if target_planet == "fulgora" then
data.raw.recipe["medium-electric-pole"].enabled = false
Technology:new("recycling")
:addPrerequisite("planet-discovery-fulgora")
:addRecipe("medium-electric-pole")
Technology:new("iron-processing").prototype.research_trigger.entity = "scrap"
Technology:new("copper-processing").prototype.research_trigger.entity = "scrap"
if mods["fulgora-coralmium-agriculture"] then
Technology:new("coralmium-recycling")
:addPrerequisite("recycling")
:removeRecipe("agricultural-tower")
end
end
-- Gleba
if target_planet == "gleba" then
Technology:new("landfill")
:setPrerequisites({ "burner-automation" })
:assign({
unit = {
count = 50,
ingredients = { { "wood-science-pack", 1 } },
time = 15
}
})
.prototype.research_trigger = nil
Technology:new("iron-processing").prototype.research_trigger.entity = "iron-stromatolite"
Technology:new("copper-processing").prototype.research_trigger.entity = "copper-stromatolite"
end

View file

@ -0,0 +1,112 @@
local item_sounds = require("__base__.prototypes.item_sounds")
local Technology = require("__cf-lib__/data/Technology")
local Recipe = require("__cf-lib__/data/Recipe")
if not mods["crushing-industry"] then return end
if not settings.startup["crushing-industry-ore"].value then return end
data:extend({
{
type = "item",
name = "crushed-gold-ore",
icon = Lignumis.graphics .. "icons/crushed-gold-ore.png",
pictures = {
{ size = 64, filename = Lignumis.graphics .. "icons/crushed-gold-ore.png", scale = 0.5, mipmap_count = 4 },
{ size = 64, filename = Lignumis.graphics .. "icons/crushed-gold-ore-1.png", scale = 0.5, mipmap_count = 4 },
{ size = 64, filename = Lignumis.graphics .. "icons/crushed-gold-ore-2.png", scale = 0.5, mipmap_count = 4 },
},
subgroup = "raw-resource",
color_hint = { text = "C" },
order = "f[gold-ore]-c[crushed]",
inventory_move_sound = item_sounds.resource_inventory_move,
pick_sound = item_sounds.resource_inventory_pickup,
drop_sound = item_sounds.resource_inventory_move,
stack_size = 100,
weight = 2 * kg
},
{
type = "recipe",
name = "crushed-gold-ore",
localised_name = { "recipe-name.gold-ore-crushing" },
icons = CrushingIndustry.make_crushing_icons("gold-ore"),
category = "basic-crushing",
enabled = false,
allow_productivity = true,
auto_recycle = false,
energy_required = 1.2,
ingredients = { { type = "item", name = "gold-ore", amount = 1 } },
results = { { type = "item", name = "crushed-gold-ore", amount = 1, extra_count_fraction = 0.5 } },
main_product = "crushed-gold-ore"
},
{
type = "recipe",
name = "crushed-gold-smelting",
localised_name = { "recipe-name.crushed-smelting", { "item-name.gold-plate" } },
icons = {
{ icon = Lignumis.graphics .. "icons/crushed-gold-ore.png", shift = { -12, -12 }, scale = 0.4 },
{ icon = Lignumis.graphics .. "icons/gold-plate.png", draw_background = true }
},
category = "smelting",
order = "a[smelting]-b[gold-plate]-c[crushed]",
enabled = false,
allow_productivity = true,
auto_recycle = false,
hide_from_player_crafting = settings.startup["crushing-industry-hide-player-crafting"].value,
energy_required = 3.2,
ingredients = { { type = "item", name = "crushed-gold-ore", amount = 2 } },
results = { { type = "item", name = "gold-plate", amount = 1 } },
main_product = "gold-plate",
},
{
type = "technology",
name = "basic-ore-crushing",
icon = Lignumis.graphics .. "technology/basic-ore-crushing.png",
icon_size = 256,
effects = {
{ type = "unlock-recipe", recipe = "burner-crusher" },
{ type = "unlock-recipe", recipe = "crushed-gold-ore" },
{ type = "unlock-recipe", recipe = "crushed-gold-smelting" }
},
prerequisites = { "steam-science-pack" },
unit = {
count = 100,
ingredients = {
{ "wood-science-pack", 1 },
{ "steam-science-pack", 1 }
},
time = 15
}
}
})
if settings.startup["crushing-industry-byproducts"].value then
table.insert(data.raw["recipe"]["crushed-gold-ore"].results, { type = "item", name = "gold-ore", amount = 1, probability = 0.05 })
table.insert(data.raw["recipe"]["crushed-gold-ore"].results, { type = "item", name = "sand", amount = 1, probability = 0.02 })
end
if mods["aai-industry"] then
Technology:new("burner-mechanics"):removeRecipe("burner-crusher")
else
Technology:new("steam-power"):removeRecipe("burner-crusher")
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"
})
gold_recipe:clone("burner-crusher-copper")
:replaceIngredient("gold-plate", "copper-plate")
:assign({
localised_name = { "entity-name.burner-crusher" },
icons = {
{ icon = data.raw.item["burner-crusher"].icon },
{ icon = "__base__/graphics/icons/copper-plate.png", scale = 0.25, shift = { 8, 8 } }
}
})
:unlockedByTechnology("copper-processing")
:apply()

View file

@ -2,6 +2,7 @@ require("hot-metals")
require("wood-military") require("wood-military")
require("metal-and-stars") require("metal-and-stars")
require("alien-biomes") require("alien-biomes")
require("planet-picker")
require("aai-loaders") require("aai-loaders")
require("nuclear-science") require("nuclear-science")
require("lane-splitters")
require("wood-industry")

View file

@ -1,3 +1,6 @@
require("aai-loaders-final")
require("any-planet-start-final")
if not data.raw.technology["legendary-quality"] then if not data.raw.technology["legendary-quality"] then
table.removeValue(data.raw.technology["quality-assembler"].prerequisites, "legendary-quality") table.removeValue(data.raw.technology["quality-assembler"].prerequisites, "legendary-quality")
end end

View file

@ -0,0 +1,16 @@
local Technology = require("__cf-lib__/data/Technology")
if not mods["gleba-reborn"] then return end
Technology:new("tree-seeding")
:setPrerequisites({ "wood-science-pack" })
:assign({
unit = {
count = 10,
ingredients = {
{ "wood-science-pack", 1 }
},
time = 10
}
})
.prototype.research_trigger = nil

View file

@ -0,0 +1,38 @@
local Recipe = require("__cf-lib__/data/Recipe")
local Technology = require("__cf-lib__/data/Technology")
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"
lane_splitter.item.order = "d[lane-splitter]-0[wood-lane-splitter]"
lane_splitter.recipe.category = "wood-processing-or-assembling"
data:extend({
lane_splitter.prototype,
lane_splitter.item,
lane_splitter.recipe,
})
Technology:new("wood-logistics"):addRecipe("wood-lane-splitter")
if mods["aai-industry"] and settings.startup["lignumis-basic-circuit-board"].value then
Recipe:new("lane-splitter"):replaceIngredient("electronic-circuit", "basic-circuit-board")
end

View file

@ -1,7 +0,0 @@
local Technology = require("__cf-lib__/data/Technology")
if not mods["planet-picker"] and not mods["any-planet-start"] then return end
local technology = Technology:new("planet-discovery-lignumis")
technology:setPrerequisites({ "space-platform-thruster" })
technology:addIngredients({ "logistic-science-pack", "chemical-science-pack", "space-science-pack" })

View file

@ -1 +1,4 @@
require("aai-industry") require("aai-industry")
require("gleba-reborn")
require("any-planet-start")
require("crushing-industry")

View file

@ -0,0 +1,3 @@
if not mods["wood-industry"] then return end
data.raw.item["woodchips"].fuel_category = "wood"

View file

@ -7,7 +7,7 @@ data:extend({
{ {
type = "item", type = "item",
name = "basic-circuit-board", name = "basic-circuit-board",
icon = Lignumis.graphics .. "icons/basic-circuit-board.png", icons = { { icon = Lignumis.graphics .. "icons/basic-circuit-board.png", icon_size = 64 } },
subgroup = "intermediate-product", subgroup = "intermediate-product",
order = "c[circuits]-0[basic-circuit-board]", order = "c[circuits]-0[basic-circuit-board]",
inventory_move_sound = item_sounds.electric_small_inventory_move, inventory_move_sound = item_sounds.electric_small_inventory_move,

View file

@ -2,6 +2,7 @@ local item_sounds = require("__base__.prototypes.item_sounds")
local item_tints = require("__base__.prototypes.item-tints") local item_tints = require("__base__.prototypes.item-tints")
local basic_circuit_board = settings.startup["lignumis-basic-circuit-board"].value local basic_circuit_board = settings.startup["lignumis-basic-circuit-board"].value
local early_robots = settings.startup["lignumis-early-robots"].value
local function robot(color) local function robot(color)
local result = table.deepcopy(data.raw["construction-robot"]["construction-robot"]) local result = table.deepcopy(data.raw["construction-robot"]["construction-robot"])
@ -9,8 +10,10 @@ local function robot(color)
result.icon = Lignumis.graphics .. "icons/basic-construction-robot-" .. color .. ".png" result.icon = Lignumis.graphics .. "icons/basic-construction-robot-" .. color .. ".png"
result.minable.result = "basic-construction-robot-" .. color result.minable.result = "basic-construction-robot-" .. color
result.max_health = 50 result.max_health = 50
result.speed = 0.04 result.speed = early_robots and 0.05 or 0.04
result.max_energy = "2MJ" result.max_energy = early_robots and "1.5MJ" or "1MJ"
result.energy_per_tick = early_robots and "0.03kJ" or "0.04kJ"
result.energy_per_move = early_robots and "2kJ" or "2.5kJ"
result.idle.filename = Lignumis.graphics .. "entity/basic-construction-robot/basic-construction-robot-" .. result.idle.filename = Lignumis.graphics .. "entity/basic-construction-robot/basic-construction-robot-" ..
color .. ".png" color .. ".png"
result.in_motion.filename = Lignumis.graphics .. "entity/basic-construction-robot/basic-construction-robot-" .. result.in_motion.filename = Lignumis.graphics .. "entity/basic-construction-robot/basic-construction-robot-" ..
@ -83,9 +86,10 @@ local function generator(color)
energy_source = { energy_source = {
type = "electric", type = "electric",
usage_priority = "secondary-output", usage_priority = "secondary-output",
output_flow_limit = "200kW" output_flow_limit = "100kW",
buffer_capacity = "5MJ"
}, },
power = "200kW", power = "100kW",
categories = { "armor" } categories = { "armor" }
} }
end end
@ -177,15 +181,16 @@ local gold_robot_technology = {
modifier = true modifier = true
} }
}, },
prerequisites = { "steam-science-pack" }, prerequisites = { early_robots and "wood-science-pack" or "steam-science-pack" },
unit = { unit = {
count = 200, count = 200,
ingredients = { ingredients = early_robots and { { "wood-science-pack", 1 } } or {
{ "wood-science-pack", 1 }, { "wood-science-pack", 1 },
{ "steam-science-pack", 1 } { "steam-science-pack", 1 }
}, },
time = 15 time = 15
} },
ignore_tech_cost_multiplier = early_robots
} }
local copper_robot_technology = { local copper_robot_technology = {
@ -246,21 +251,21 @@ data:extend({
robot_item("copper", 1), robot_item("copper", 1),
robot_recipe("copper", { robot_recipe("copper", {
{ type = "item", name = "copper-plate", amount = 2 }, { type = "item", name = "copper-plate", amount = 2 },
{ type = "item", name = "iron-gear-wheel", amount = 5 }, { type = "item", name = "wooden-gear-wheel", amount = 5 },
{ type = "item", name = "electronic-circuit", amount = 5 } { type = "item", name = basic_circuit_board and "basic-circuit-board" or "electronic-circuit", amount = 5 }
}), }),
generator("copper"), generator("copper"),
generator_item("copper", 1), generator_item("copper", 1),
generator_recipe("copper", { generator_recipe("copper", {
{ type = "item", name = "copper-plate", amount = 10 }, { type = "item", name = "copper-plate", amount = 10 },
{ type = "item", name = "iron-gear-wheel", amount = 10 } { type = "item", name = "wooden-gear-wheel", amount = 10 }
}), }),
roboport("copper"), roboport("copper"),
roboport_item("copper", 1), roboport_item("copper", 1),
roboport_recipe("copper", { roboport_recipe("copper", {
{ type = "item", name = "copper-plate", amount = 5 }, { type = "item", name = "copper-plate", amount = 5 },
{ type = "item", name = "electronic-circuit", amount = 10 }, { type = "item", name = basic_circuit_board and "basic-circuit-board" or "electronic-circuit", amount = 10 },
{ type = "item", name = "iron-gear-wheel", amount = 10 } { type = "item", name = "wooden-gear-wheel", amount = 10 }
}), }),
-- Technology -- Technology

View file

@ -57,6 +57,9 @@ local turret_recipe = {
}, },
results = { { type = "item", name = "basic-gun-turret", amount = 1 } } 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"
end
local turret_technology = { local turret_technology = {
type = "technology", type = "technology",

View file

@ -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/"
@ -8,7 +9,7 @@ agricultural_tower.name = "burner-agricultural-tower"
agricultural_tower.minable.result = "burner-agricultural-tower" agricultural_tower.minable.result = "burner-agricultural-tower"
agricultural_tower.next_upgrade = "agricultural-tower" agricultural_tower.next_upgrade = "agricultural-tower"
agricultural_tower.corpses = "burner-agricultural-tower-remnants" agricultural_tower.corpses = "burner-agricultural-tower-remnants"
agricultural_tower.icon = Lignumis.graphics .. "icons/burner-agricultural-tower.png" agricultural_tower.icons = { { icon = Lignumis.graphics .. "icons/burner-agricultural-tower.png", icon_size = 64 } }
agricultural_tower.graphics_set.animation.layers[1].filename = gfx .. "burner-agricultural-tower-base.png" agricultural_tower.graphics_set.animation.layers[1].filename = gfx .. "burner-agricultural-tower-base.png"
agricultural_tower.graphics_set.working_visualisations[1].animation.filename = gfx .. agricultural_tower.graphics_set.working_visualisations[1].animation.filename = gfx ..
"burner-agricultural-tower-base.png" "burner-agricultural-tower-base.png"
@ -17,7 +18,7 @@ agricultural_tower.energy_source = {
fuel_categories = { "chemical" }, fuel_categories = { "chemical" },
effectivity = 1, effectivity = 1,
fuel_inventory_size = 1, fuel_inventory_size = 1,
emissions_per_minute = { noise = 100 } emissions_per_minute = { noise = 75 }
} }
agricultural_tower.resistances = nil agricultural_tower.resistances = nil
agricultural_tower.input_inventory_size = 1 agricultural_tower.input_inventory_size = 1
@ -82,6 +83,7 @@ data:extend({
{ {
type = "recipe", type = "recipe",
name = "burner-agricultural-tower", name = "burner-agricultural-tower",
category = "wood-processing-or-assembling",
energy_required = 10, energy_required = 10,
ingredients = { ingredients = {
{ type = "item", name = "stone-brick", amount = 5 }, { type = "item", name = "stone-brick", amount = 5 },
@ -109,30 +111,27 @@ 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-electronic-circuit", name = "burner-agricultural-tower-copper",
category = "wood-processing-or-assembling",
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/electronic-circuit.png", scale = 0.25, shift = { 8, 8 } } { icon = basic_circuit_board and "__base__/graphics/icons/copper-plate.png" or "__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 = "electronic-circuit", amount = 10 } { type = "item", name = "copper-plate", 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, { Technology:new(basic_circuit_board and "copper-processing" or "electronics"):addRecipe("burner-agricultural-tower-copper")
type = "unlock-recipe",
recipe = "burner-agricultural-tower-electronic-circuit"
})
end

View file

@ -5,7 +5,7 @@ local gfx = Lignumis.graphics .. "entity/burner-assembling-machine/"
local assembling_machine = table.deepcopy(data.raw["assembling-machine"]["assembling-machine-1"]) local assembling_machine = table.deepcopy(data.raw["assembling-machine"]["assembling-machine-1"])
assembling_machine.name = "burner-assembling-machine" assembling_machine.name = "burner-assembling-machine"
assembling_machine.icon = Lignumis.graphics .. "icons/burner-assembling-machine.png" assembling_machine.icons = { { icon = Lignumis.graphics .. "icons/burner-assembling-machine.png", icon_size = 64 } }
assembling_machine.minable.result = "burner-assembling-machine" assembling_machine.minable.result = "burner-assembling-machine"
assembling_machine.next_upgrade = "steam-assembling-machine" assembling_machine.next_upgrade = "steam-assembling-machine"
assembling_machine.corpse = "burner-assembling-machine-remnants" assembling_machine.corpse = "burner-assembling-machine-remnants"
@ -50,6 +50,8 @@ remnants.animation[2].filename = gfx .. "burner-assembling-machine-remnants.png"
remnants.animation[3].filename = gfx .. "burner-assembling-machine-remnants.png" remnants.animation[3].filename = gfx .. "burner-assembling-machine-remnants.png"
remnants.order = "0[burner-assembling-machine]" 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({ data:extend({
assembling_machine, assembling_machine,
remnants, remnants,
@ -68,6 +70,7 @@ data:extend({
{ {
type = "recipe", type = "recipe",
name = "burner-assembling-machine", name = "burner-assembling-machine",
category = crafting_category,
enabled = false, enabled = false,
ingredients = { ingredients = {
{ type = "item", name = "wooden-gear-wheel", amount = 5 }, { type = "item", name = "wooden-gear-wheel", amount = 5 },
@ -108,6 +111,7 @@ if not basic_circuit_board then
{ {
type = "recipe", type = "recipe",
name = "burner-assembling-machine-electronic-circuit", name = "burner-assembling-machine-electronic-circuit",
category = crafting_category,
localised_name = { "entity-name.burner-assembling-machine" }, localised_name = { "entity-name.burner-assembling-machine" },
icons = { icons = {
{ icon = Lignumis.graphics .. "icons/burner-assembling-machine.png" }, { icon = Lignumis.graphics .. "icons/burner-assembling-machine.png" },

View file

@ -44,6 +44,8 @@ remnants.animation[3].filename = gfx .. "burner-long-handed-inserter-remnants.pn
remnants.animation[4].filename = gfx .. "burner-long-handed-inserter-remnants.png" remnants.animation[4].filename = gfx .. "burner-long-handed-inserter-remnants.png"
remnants.order = "a-c-0" 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({ data:extend({
long_handed_inserter, long_handed_inserter,
remnants, remnants,
@ -63,6 +65,7 @@ data:extend({
{ {
type = "recipe", type = "recipe",
name = "burner-long-handed-inserter", name = "burner-long-handed-inserter",
category = crafting_category,
enabled = false, enabled = false,
ingredients = { ingredients = {
{ type = "item", name = "wooden-gear-wheel", amount = 1 }, { type = "item", name = "wooden-gear-wheel", amount = 1 },

View file

@ -29,7 +29,7 @@ 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("enemies")
require("noise") require("noise")

View file

@ -2,7 +2,6 @@ local particle_animations = require("__space-age__/prototypes/particle-animation
local base_sounds = require("__base__.prototypes.entity.sounds") local base_sounds = require("__base__.prototypes.entity.sounds")
local space_age_sounds = require("__space-age__.prototypes.entity.sounds") local space_age_sounds = require("__space-age__.prototypes.entity.sounds")
local simulations = require("__space-age__.prototypes.factoriopedia-simulations") 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 biter_ai_settings = require("__base__.prototypes.entity.biter-ai-settings")
local blood_particles = { local blood_particles = {
@ -170,7 +169,7 @@ function make_wriggler(prefix, scale, health, damage, tints, factoriopedia_simul
local tint_mask = tints.mask local tint_mask = tints.mask
local tint_body = tints.body local tint_body = tints.body
local function attack_parameters(lifesteal) local function attack_parameters()
local cooldown = 26 local cooldown = 26
return { return {
ammo_category = "melee", ammo_category = "melee",
@ -180,20 +179,10 @@ function make_wriggler(prefix, scale, health, damage, tints, factoriopedia_simul
type = "direct", type = "direct",
action_delivery = { action_delivery = {
type = "instant", 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 = { target_effects = {
{ {
type = "damage", type = "damage",
damage = { amount = 5 * damage, type = "physical" } damage = { amount = 5 * damage, type = "physical" }
},
{
type = "damage",
damage = { amount = 5 * damage, type = "poison" }
} }
} }
} }
@ -218,7 +207,7 @@ function make_wriggler(prefix, scale, health, damage, tints, factoriopedia_simul
local wriggler = { local wriggler = {
type = "unit", type = "unit",
name = prefix .. "wriggler-pentapod-premature", name = prefix .. "wriggler-pentapod-premature",
icon = "__lignumis__/graphics/icons/" .. prefix .. "wriggler.png", icon = Lignumis.graphics .. "icons/" .. prefix .. "wriggler.png",
subgroup = "enemies", subgroup = "enemies",
order = "gleba-a-wriggler-" .. tostring(scale), order = "gleba-a-wriggler-" .. tostring(scale),
factoriopedia_simulation = factoriopedia_simulation_premature, factoriopedia_simulation = factoriopedia_simulation_premature,
@ -229,25 +218,19 @@ function make_wriggler(prefix, scale, health, damage, tints, factoriopedia_simul
flags = { "placeable-player", "placeable-enemy", "placeable-off-grid", "not-repairable", "breaths-air" }, flags = { "placeable-player", "placeable-enemy", "placeable-off-grid", "not-repairable", "breaths-air" },
absorptions_to_join_attack = { noise = 1 }, absorptions_to_join_attack = { noise = 1 },
ai_settings = biter_ai_settings, ai_settings = biter_ai_settings,
attack_parameters = attack_parameters(true), attack_parameters = attack_parameters(),
corpse = prefix .. "wriggler-pentapod-corpse", corpse = prefix .. "wriggler-pentapod-corpse",
damaged_trigger_effect = gleba_hit_effects(), damaged_trigger_effect = gleba_hit_effects(),
distance_per_frame = 0.125, distance_per_frame = 0.125,
distraction_cooldown = 300, distraction_cooldown = 300,
dying_explosion = prefix .. "wriggler-die", dying_explosion = prefix .. "wriggler-die",
dying_sound = sounds.dying_sound, dying_sound = sounds.dying_sound,
healing_per_tick = -health / 50 / 60, healing_per_tick = -health / 1 / 60,
impact_category = "organic", impact_category = "organic",
max_health = health, max_health = health,
max_pursue_distance = 50, max_pursue_distance = 30,
min_pursue_time = 600, min_pursue_time = 300,
movement_speed = 0.2 * (1 + (scale - 1) / 2), movement_speed = 0.15 * (1 + (scale - 1) / 2),
resistances = {
{
percent = 50,
type = "laser"
}
},
run_animation = { run_animation = {
layers = { layers = {
wriggler_spritesheet("run", 21, 0.48, scale, tint_body), wriggler_spritesheet("run", 21, 0.48, scale, tint_body),
@ -280,12 +263,12 @@ function make_wriggler(prefix, scale, health, damage, tints, factoriopedia_simul
wriggler_stable.factoriopedia_simulation = factoriopedia_simulation wriggler_stable.factoriopedia_simulation = factoriopedia_simulation
wriggler_stable.healing_per_tick = health / 500 / 60 wriggler_stable.healing_per_tick = health / 500 / 60
wriggler_stable.absorptions_to_join_attack = { noise = 1 } wriggler_stable.absorptions_to_join_attack = { noise = 1 }
wriggler_stable.attack_parameters = attack_parameters(false) wriggler_stable.attack_parameters = attack_parameters()
local wriggler_corpse = { local wriggler_corpse = {
type = "corpse", type = "corpse",
name = prefix .. "wriggler-pentapod-corpse", name = prefix .. "wriggler-pentapod-corpse",
icon = "__lignumis__/graphics/icons/" .. prefix .. "wriggler-corpse.png", icon = Lignumis.graphics .. "icons/" .. prefix .. "wriggler-corpse.png",
subgroup = "corpses", subgroup = "corpses",
order = "c[corpse]-d[gleba-enemies-corpses]-d[wriggler]" .. tostring(scale), order = "c[corpse]-d[gleba-enemies-corpses]-d[wriggler]" .. tostring(scale),
hidden_in_factoriopedia = true, hidden_in_factoriopedia = true,
@ -403,50 +386,6 @@ function make_wriggler(prefix, scale, health, damage, tints, factoriopedia_simul
tail_width = 3, tail_width = 3,
rotate_offsets = false 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", type = "play-sound",
sound = base_sounds.medium_gore sound = base_sounds.medium_gore
@ -486,7 +425,7 @@ end
local gleba_small_mask_tint = { 103, 151, 11, 255 } local gleba_small_mask_tint = { 103, 151, 11, 255 }
local gleba_small_body_tint = { 125, 124, 111, 255 } local gleba_small_body_tint = { 125, 124, 111, 255 }
make_wriggler("lignumis-small-", 0.2, 20, 0.1, make_wriggler("lignumis-small-", 0.2, 10, 0.1,
{ {
mask = fade(lerp_color(gleba_small_mask_tint, { 255, 200, 0, 255 }, 0.2), 0.2), 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) body = grey_overlay(lerp_color(gleba_small_body_tint, { 255, 0, 0, 255 }, 0.2), 0.2)
@ -496,7 +435,7 @@ make_wriggler("lignumis-small-", 0.2, 20, 0.1,
space_age_sounds.wriggler_pentapod.small space_age_sounds.wriggler_pentapod.small
) )
make_wriggler("lignumis-medium-", 0.4, 40, 0.2, make_wriggler("lignumis-medium-", 0.4, 20, 0.2,
{ {
mask = fade(lerp_color(gleba_small_mask_tint, { 255, 200, 0, 255 }, 0.4), 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) body = grey_overlay(lerp_color(gleba_small_body_tint, { 255, 0, 0, 255 }, 0.4), 0.2)
@ -506,6 +445,79 @@ make_wriggler("lignumis-medium-", 0.4, 40, 0.2,
space_age_sounds.wriggler_pentapod.small space_age_sounds.wriggler_pentapod.small
) )
data:extend({
{
type = "noise-expression",
name = "enemy_lignumis_intensity",
-- biter placement stops increasing in "intensity" after 75 chunks (2400 tiles)
expression = "clamp(distance, 0, 2400) / 325"
},
{
type = "noise-expression",
name = "enemy_lignumis_radius",
expression = "sqrt(var('control:lignumis_enemy_base:size')) * (15 + 4 * enemy_lignumis_intensity)"
},
{
type = "noise-expression",
name = "enemy_lignumis_frequency",
-- bases_per_km2 = 10 + 3 * enemy_lignumis_intensity
expression = "(0.00001 + 0.000003 * enemy_lignumis_intensity) * var('control:lignumis_enemy_base:frequency')"
},
{
type = "noise-expression",
name = "enemy_lignumis_probability",
expression = "spot_noise{x = x,\z
y = y,\z
density_expression = spot_quantity_expression * max(0, enemy_lignumis_frequency),\z
spot_quantity_expression = spot_quantity_expression,\z
spot_radius_expression = spot_radius_expression,\z
spot_favorability_expression = 1,\z
seed0 = map_seed,\z
seed1 = 123,\z
region_size = 512,\z
candidate_point_count = 100,\z
hard_region_target_quantity = 0,\z
basement_value = -1000,\z
maximum_spot_basement_radius = 128} + \z
(blob(1/8, 1) + blob(1/24, 1) + blob(1/64, 2) - 0.5) * spot_radius_expression / 150 * \z
(0.1 + 0.9 * clamp(distance / 3000, 0, 1)) - 0.3 + min(0, 20 / starting_area_radius * distance - 20)",
local_expressions =
{
spot_radius_expression = "max(0, enemy_lignumis_radius)",
spot_quantity_expression = "pi/90 * spot_radius_expression ^ 3"
},
local_functions =
{
blob =
{
parameters = { "input_scale", "output_scale" },
expression =
"basis_noise{x = x, y = y, seed0 = map_seed, seed1 = 123, input_scale = input_scale, output_scale = output_scale}"
}
}
},
{
type = "noise-function",
name = "enemy_autoplace_lignumis",
parameters = { "distance_factor", "seed" },
expression = "random_penalty{x = x + seed,\z
y = y,\z
source = min(enemy_lignumis_probability * max(0, 1 + 0.002 * distance_factor * (-312 * distance_factor - starting_area_radius + distance)),\z
0.25 + distance_factor * 0.05),\z
amplitude = 0.1}"
}
})
local function lignumis_spawner_autoplace(probability_expression, order)
return {
control = "lignumis_enemy_base",
order = order,
force = "enemy",
probability_expression = probability_expression,
richness_expression = 1
}
end
local spawner = table.deepcopy(data.raw["unit-spawner"]["gleba-spawner-small"]) local spawner = table.deepcopy(data.raw["unit-spawner"]["gleba-spawner-small"])
table.assign(spawner, { table.assign(spawner, {
name = "lignumis-spawner-small", name = "lignumis-spawner-small",
@ -515,17 +527,16 @@ table.assign(spawner, {
}, },
max_count_of_owned_units = 7, max_count_of_owned_units = 7,
max_friends_around_to_spawn = 5, max_friends_around_to_spawn = 5,
spawning_cooldown = { 360, 150 },
spawning_radius = 10,
spawning_spacing = 3, spawning_spacing = 3,
max_spawn_shift = 0, max_spawn_shift = 0,
max_richness_for_spawn_shift = 100, max_richness_for_spawn_shift = 100,
call_for_help_radius = 50, resistances = {},
--spawning_cooldown = { 60, 20 }, healing_per_tick = 1 / 60,
--spawning_radius = 4, spawning_cooldown = { 60, 20 },
--call_for_help_radius = 20, spawning_radius = 4,
autoplace = enemy_autoplace.enemy_spawner_autoplace("enemy_autoplace_base(0, 6)"), call_for_help_radius = 20,
absorptions_per_second = { noise = { absolute = 20, proportional = 0.01 } }, autoplace = lignumis_spawner_autoplace("enemy_autoplace_lignumis(0, 548)", "b[enemy]-0[spawner]"),
absorptions_per_second = { noise = { absolute = 40, proportional = 0.01 } },
}) })
spawner.collision_mask = nil spawner.collision_mask = nil
spawner.loot = nil spawner.loot = nil

View file

@ -35,3 +35,4 @@ update_fuel_categories(data.raw["reactor"])
update_fuel_categories(data.raw["car"]) update_fuel_categories(data.raw["car"])
update_fuel_categories(data.raw["locomotive"]) update_fuel_categories(data.raw["locomotive"])
update_fuel_categories(data.raw["generator-equipment"]) update_fuel_categories(data.raw["generator-equipment"])
update_fuel_categories(data.raw["burner-generator"])

View file

@ -12,7 +12,8 @@ data:extend({
inventory_move_sound = item_sounds.metal_small_inventory_move, inventory_move_sound = item_sounds.metal_small_inventory_move,
pick_sound = item_sounds.metal_small_inventory_pickup, pick_sound = item_sounds.metal_small_inventory_pickup,
drop_sound = item_sounds.metal_small_inventory_move, drop_sound = item_sounds.metal_small_inventory_move,
stack_size = 100 stack_size = 100,
enabled = true
}, },
{ {
type = "recipe", type = "recipe",

View file

@ -19,5 +19,13 @@ data:extend({
richness = true, richness = true,
order = "0-c", order = "0-c",
category = "resource" category = "resource"
},
{
type = "autoplace-control",
name = "lignumis_enemy_base",
richness = false,
order = "0-a",
category = "enemy",
can_be_disabled = true
} }
}) })

View file

@ -17,7 +17,7 @@ return {
["stone"] = { richness = 1/6, frequency = 4, size = 4 }, ["stone"] = { richness = 1/6, frequency = 4, size = 4 },
["water"] = {}, ["water"] = {},
["trees"] = { richness = 3, frequency = 4, size = 3 }, ["trees"] = { richness = 3, frequency = 4, size = 3 },
["enemy-base"] = {}, ["lignumis_enemy_base"] = { frequency = 0.75, size = 0.75 },
["rocks"] = {}, ["rocks"] = {},
["starting_area_moisture"] = { size = 1, richness = 6 }, ["starting_area_moisture"] = { size = 1, richness = 6 },
["nauvis_cliff"] = { frequency = 2, size = 2 } ["nauvis_cliff"] = { frequency = 2, size = 2 }

View file

@ -3,6 +3,11 @@ local effects = require("__core__/lualib/surface-render-parameter-effects")
local procession_graphic_catalogue_types = require("__base__/prototypes/planet/procession-graphic-catalogue-types") local procession_graphic_catalogue_types = require("__base__/prototypes/planet/procession-graphic-catalogue-types")
local asteroid_util = require("__space-age__/prototypes/planet/asteroid-spawn-definitions") local asteroid_util = require("__space-age__/prototypes/planet/asteroid-spawn-definitions")
local target_planet = settings.startup["lignumis-second-planet"].value or "nauvis"
if mods["any-planet-start"] then
target_planet = settings.startup["aps-planet"].value ~= "none" and settings.startup["aps-planet"].value or target_planet
end
local lignumis_chunks = 0.025 local lignumis_chunks = 0.025
local lignumis_ratio = {1, 1, 1 , 0} local lignumis_ratio = {1, 1, 1 , 0}
local nauvis_lignumis = { local nauvis_lignumis = {
@ -16,6 +21,11 @@ local nauvis_lignumis = {
} }
} }
local solar_power = data.raw.planet[target_planet].surface_properties["solar-power"] or 100
local solar_power_in_space = data.raw.planet[target_planet].solar_power_in_space or 300
solar_power = solar_power * 1.2
solar_power_in_space = solar_power_in_space * 1.2
PlanetsLib:extend({ PlanetsLib:extend({
{ {
type = "planet", type = "planet",
@ -23,7 +33,7 @@ PlanetsLib:extend({
orbit = { orbit = {
parent = { parent = {
type = "planet", type = "planet",
name = "nauvis" name = target_planet
}, },
distance = 2, distance = 2,
orientation = 0.16, orientation = 0.16,
@ -43,7 +53,7 @@ PlanetsLib:extend({
map_seed_offset = 100, map_seed_offset = 100,
map_gen_settings = planet_map_gen, map_gen_settings = planet_map_gen,
pollutant_type = "noise", pollutant_type = "noise",
solar_power_in_space = 300, solar_power_in_space = solar_power_in_space,
draw_orbit = false, draw_orbit = false,
planet_procession_set = { planet_procession_set = {
arrival = { "default-b" }, arrival = { "default-b" },
@ -53,7 +63,7 @@ PlanetsLib:extend({
["day-night-cycle"] = 2 * minute, ["day-night-cycle"] = 2 * minute,
["gravity"] = 4, ["gravity"] = 4,
["pressure"] = 900, ["pressure"] = 900,
["solar-power"] = 120 ["solar-power"] = solar_power
}, },
asteroid_spawn_influence = 1, asteroid_spawn_influence = 1,
asteroid_spawn_definitions = asteroid_util.spawn_definitions(nauvis_lignumis, 0.9), asteroid_spawn_definitions = asteroid_util.spawn_definitions(nauvis_lignumis, 0.9),
@ -114,9 +124,9 @@ PlanetsLib:extend({
data:extend({ data:extend({
{ {
type = "space-connection", type = "space-connection",
name = "nauvis-lignumis", name = target_planet .. "-lignumis",
subgroup = "planet-connections", subgroup = "planet-connections",
from = "nauvis", from = target_planet,
to = "lignumis", to = "lignumis",
order = "0", order = "0",
length = 2000, length = 2000,

View file

@ -1,3 +1,4 @@
local Technology = require("__cf-lib__/data/Technology")
local LumberMillFactory = require(MF.buildings .. "LumberMill") local LumberMillFactory = require(MF.buildings .. "LumberMill")
local LumberMill = LumberMillFactory() local LumberMill = LumberMillFactory()
@ -47,27 +48,23 @@ LumberMill.TechnologyBuilder:new()
:ingredients({ { "wood-science-pack", 1 }, { "steam-science-pack", 1 } }) :ingredients({ { "wood-science-pack", 1 }, { "steam-science-pack", 1 } })
:apply() :apply()
if not basic_circuit_board then
LumberMill.RecipeBuilder:new() LumberMill.RecipeBuilder:new()
:ingredients({ :ingredients({
{ type = "item", name = "stone-brick", amount = 40 }, { type = "item", name = "stone-brick", amount = 40 },
{ type = "item", name = "lumber", amount = 50 }, { type = "item", name = "lumber", amount = 50 },
{ type = "item", name = "iron-gear-wheel", amount = 50 }, { type = "item", name = "wooden-gear-wheel", amount = 50 },
{ type = "item", name = "electronic-circuit", amount = 20 }, { type = "item", name = "copper-plate", amount = basic_circuit_board and 30 or 60 },
{ type = "item", name = basic_circuit_board and "basic-circuit-board" or "electronic-circuit", amount = 30 },
{ type = "item", name = "assembling-machine-1", amount = 2 } { type = "item", name = "assembling-machine-1", amount = 2 }
}) })
:apply({ :apply({
name = "lumber-mill-electronic-circuit", name = "lumber-mill-copper",
localised_name = { "entity-name.lumber-mill" }, localised_name = { "entity-name.lumber-mill" },
category = "wood-processing-or-assembling", category = "wood-processing-or-assembling",
icons = { icons = {
{ icon = lumber_mill_item.icon }, { icon = lumber_mill_item.icon },
{ icon = "__base__/graphics/icons/electronic-circuit.png", scale = 0.25, shift = { 8, 8 } } { icon = basic_circuit_board and "__base__/graphics/icons/copper-plate.png" or "__base__/graphics/icons/electronic-circuit.png", scale = 0.25, shift = { 8, 8 } }
} }
}) })
table.insert(data.raw.technology["electronics"].effects, { Technology:new(basic_circuit_board and "copper-processing" or "electronics"):addRecipe("lumber-mill-copper")
type = "unlock-recipe",
recipe = "lumber-mill-electronic-circuit"
})
end

View file

@ -65,9 +65,9 @@ end
-- Walls absorb noise -- Walls absorb noise
emit_constant("wall", "wooden-wall", -10) emit_constant("wall", "wooden-wall", -15)
emit_constant("wall", "stone-wall", -20) emit_constant("wall", "stone-wall", -25)
emit_constant("gate", "gate", -10) emit_constant("gate", "gate", -20)
-- Buildings emit noise -- Buildings emit noise
@ -78,8 +78,8 @@ emit("mining-drill", "burner-mining-drill", 50)
emit("mining-drill", "electric-mining-drill", 100) emit("mining-drill", "electric-mining-drill", 100)
emit("mining-drill", "big-mining-drill", 200) emit("mining-drill", "big-mining-drill", 200)
--emit("mining-drill", "deep-miner", 2000) --emit("mining-drill", "deep-miner", 2000)
--emit("agricultural-tower", "burner-agricultural-tower", 100) --emit("agricultural-tower", "burner-agricultural-tower", 75)
emit("agricultural-tower", "agricultural-tower", 100) emit("agricultural-tower", "agricultural-tower", 75)
--emit("assembling-machine", "burner-assembling-machine", 50) --emit("assembling-machine", "burner-assembling-machine", 50)
--emit("assembling-machine", "steam-assembling-machine", 50) --emit("assembling-machine", "steam-assembling-machine", 50)
emit("assembling-machine", "assembling-machine-1", 10) emit("assembling-machine", "assembling-machine-1", 10)
@ -100,18 +100,18 @@ emit("lab", "biolab", 20)
emit("locomotive", "locomotive", 200) emit("locomotive", "locomotive", 200)
emit_constant("locomotive", "locomotive", 10) emit_constant("locomotive", "locomotive", 10)
--emit_constant("transport-belt", "wood-transport-belt", 3) --emit_constant("transport-belt", "wood-transport-belt", 2.4)
emit_constant("transport-belt", "transport-belt", 4) emit_constant("transport-belt", "transport-belt", 3)
emit_constant("transport-belt", "fast-transport-belt", 8) emit_constant("transport-belt", "fast-transport-belt", 4)
emit_constant("transport-belt", "express-transport-belt", 12) emit_constant("transport-belt", "express-transport-belt", 6)
emit_constant("transport-belt", "turbo-transport-belt", 16) emit_constant("transport-belt", "turbo-transport-belt", 8)
--emit_constant("underground-belt", "wood-underground-belt", 30) --emit_constant("underground-belt", "wood-underground-belt", 15)
emit_constant("underground-belt", "underground-belt", 40) emit_constant("underground-belt", "underground-belt", 20)
emit_constant("underground-belt", "fast-underground-belt", 50) emit_constant("underground-belt", "fast-underground-belt", 30)
emit_constant("underground-belt", "express-underground-belt", 60) emit_constant("underground-belt", "express-underground-belt", 40)
emit_constant("underground-belt", "turbo-underground-belt", 80) emit_constant("underground-belt", "turbo-underground-belt", 50)
--emit_constant("splitter", "wood-splitter", 60) --emit_constant("splitter", "wood-splitter", 30)
emit_constant("splitter", "splitter", 70) emit_constant("splitter", "splitter", 40)
emit_constant("splitter", "fast-splitter", 80) emit_constant("splitter", "fast-splitter", 50)
emit_constant("splitter", "express-splitter", 90) emit_constant("splitter", "express-splitter", 60)
emit_constant("splitter", "turbo-splitter", 100) emit_constant("splitter", "turbo-splitter", 80)

View file

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

View file

@ -6,7 +6,7 @@ local gfx = Lignumis.graphics .. "entity/steam-assembling-machine/"
local assembling_machine = table.deepcopy(data.raw["assembling-machine"]["assembling-machine-2"]) local assembling_machine = table.deepcopy(data.raw["assembling-machine"]["assembling-machine-2"])
assembling_machine.name = "steam-assembling-machine" assembling_machine.name = "steam-assembling-machine"
assembling_machine.icon = Lignumis.graphics .. "icons/steam-assembling-machine.png" assembling_machine.icons = { { icon = Lignumis.graphics .. "icons/steam-assembling-machine.png", icon_size = 64 } }
assembling_machine.minable.result = "steam-assembling-machine" assembling_machine.minable.result = "steam-assembling-machine"
assembling_machine.next_upgrade = "assembling-machine-1" assembling_machine.next_upgrade = "assembling-machine-1"
assembling_machine.module_slots = nil assembling_machine.module_slots = nil
@ -30,11 +30,11 @@ assembling_machine.crafting_speed = 0.5
assembling_machine.energy_usage = "25kW" assembling_machine.energy_usage = "25kW"
assembling_machine.energy_source = { assembling_machine.energy_source = {
type = "fluid", type = "fluid",
fuel_categories = { "steam" }, maximum_temperature = 165,
effectivity = 1, effectivity = 1,
emissions_per_minute = { noise = 50 }, emissions_per_minute = { noise = 50 },
scale_fluid_usage = true,
fluid_box = { fluid_box = {
filter = "steam",
production_type = "input", production_type = "input",
pipe_picture = machinepipes(), pipe_picture = machinepipes(),
pipe_covers = pipecovers(), pipe_covers = pipecovers(),
@ -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
} }
}) })

View file

@ -83,7 +83,6 @@ data:extend({
} }
}) })
if not mods["planet-picker"] and not mods["any-planet-start"] then
data:extend({ data:extend({
{ {
type = "technology", type = "technology",
@ -162,4 +161,3 @@ if not mods["planet-picker"] and not mods["any-planet-start"] then
} }
} }
}) })
end

View file

@ -144,6 +144,7 @@ data:extend({
{ {
type = "recipe", type = "recipe",
name = "wood-lab", name = "wood-lab",
category = "wood-processing-or-assembling",
energy_required = 2, energy_required = 2,
ingredients = { ingredients = {
{ type = "item", name = "lumber", amount = 10 }, { type = "item", name = "lumber", amount = 10 },

View file

@ -10,17 +10,32 @@ Belt.EntityBuilder:new()
:animationSpeedMultiplier(1.01) :animationSpeedMultiplier(1.01)
:apply({ :apply({
transportBelt = { transportBelt = {
emissions_per_second = { noise = 0.05 } emissions_per_second = { noise = 0.04 }
}, },
undergroundBelt = { undergroundBelt = {
emissions_per_second = { noise = 0.5 } emissions_per_second = { noise = 0.25 },
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 = { splitter = {
emissions_per_second = { noise = 1 } emissions_per_second = { noise = 0.5 }
} }
}) })
local splitter_item = Belt.ItemBuilder:new() local splitter_item = Belt.ItemBuilder:new()
:itemsPerRocket("transportBelt", 100)
:itemsPerRocket("undergroundBelt", 50)
:itemsPerRocket("splitter", 50)
:order("0") :order("0")
:apply() :apply()
.splitter .splitter
@ -41,7 +56,17 @@ Belt.RecipeBuilder:new()
basic_circuit_board and { type = "item", name = "basic-circuit-board", amount = 5 } or basic_circuit_board and { type = "item", name = "basic-circuit-board", amount = 5 } or
{ type = "item", name = "gold-cable", amount = 10 } { type = "item", name = "gold-cable", amount = 10 }
}) })
:apply() :apply({
transportBelt = {
category = "wood-processing-or-assembling"
},
undergroundBelt = {
category = "wood-processing-or-assembling"
},
splitter = {
category = "wood-processing-or-assembling"
}
})
Belt.TechnologyBuilder:new() Belt.TechnologyBuilder:new()
:prerequisites({ "wood-science-pack" }) :prerequisites({ "wood-science-pack" })
@ -65,7 +90,8 @@ if not basic_circuit_board then
icons = { icons = {
{ icon = splitter_item.icon }, { icon = splitter_item.icon },
{ icon = "__base__/graphics/icons/electronic-circuit.png", scale = 0.25, shift = { 8, 8 } } { icon = "__base__/graphics/icons/electronic-circuit.png", scale = 0.25, shift = { 8, 8 } }
} },
category = "wood-processing-or-assembling"
} }
}) })
.splitter .splitter

View file

@ -81,6 +81,7 @@ data:extend({
{ {
type = "recipe", type = "recipe",
name = "wood-darts-magazine", name = "wood-darts-magazine",
category = "wood-processing-or-assembling",
energy_required = 1, energy_required = 1,
ingredients = { { type = "item", name = "wood", amount = 2 } }, ingredients = { { type = "item", name = "wood", amount = 2 } },
results = { { type = "item", name = "wood-darts-magazine", amount = 1 } } results = { { type = "item", name = "wood-darts-magazine", amount = 1 } }

View file

@ -17,6 +17,7 @@ data:extend({
{ {
type = "recipe", type = "recipe",
name = "wooden-gear-wheel", name = "wooden-gear-wheel",
category = "wood-processing-or-assembling",
ingredients = { { type = "item", name = "lumber", amount = 1 } }, ingredients = { { type = "item", name = "lumber", amount = 1 } },
results = { { type = "item", name = "wooden-gear-wheel", amount = 2 } }, results = { { type = "item", name = "wooden-gear-wheel", amount = 2 } },
allow_productivity = true allow_productivity = true

View file

@ -51,7 +51,7 @@ silo.fluid_boxes_off_when_no_fluid_recipe = true
silo.launch_to_space_platforms = false silo.launch_to_space_platforms = false
silo.rocket_parts_required = 50 silo.rocket_parts_required = 50
silo.rocket_parts_storage_cap = 50 silo.rocket_parts_storage_cap = 50
silo.to_be_inserted_to_rocket_inventory_size = 1 silo.to_be_inserted_to_rocket_inventory_size = 0
silo.clamps_on_trigger = { silo.clamps_on_trigger = {
type = "script", type = "script",
effect_id = "provisional-rocket-ready" effect_id = "provisional-rocket-ready"
@ -101,7 +101,8 @@ local rocket_part_recipe = {
{ type = "fluid", name = "wood-pulp", amount = 5 } { type = "fluid", name = "wood-pulp", amount = 5 }
}, },
results = { { type = "item", name = "rocket-part", amount = 1 } }, results = { { type = "item", name = "rocket-part", amount = 1 } },
allow_productivity = true allow_productivity = true,
auto_recycle = false,
} }
local silo_ready = { local silo_ready = {
@ -121,7 +122,7 @@ local silo_ready = {
min = 1 min = 1
} }
}, },
flags = { "not-on-map", "not-blueprintable", "not-deconstructable", "not-flammable", "not-repairable", "not-upgradable", "no-automated-item-insertion", "no-automated-item-removal", "not-in-kill-statistics" }, flags = { "not-on-map", "not-blueprintable", "not-flammable", "not-repairable", "not-upgradable", "no-automated-item-insertion", "no-automated-item-removal", "not-in-kill-statistics" },
allow_copy_paste = false, allow_copy_paste = false,
additional_pastable_entities = { "provisional-rocket-silo" }, additional_pastable_entities = { "provisional-rocket-silo" },
collision_mask = { layers = {} }, collision_mask = { layers = {} },
@ -144,3 +145,7 @@ data:extend({
silo_ready, silo_ready,
silo_ready_item silo_ready_item
}) })
PlanetsLib.restrict_to_planet(silo, "lignumis")
PlanetsLib.restrict_to_planet(silo_recipe, "lignumis")
PlanetsLib.restrict_to_planet(rocket_part_recipe, "lignumis")

View file

@ -1,6 +1,4 @@
local recipe = data.raw.recipe["wooden-wall"] local recipe = data.raw.recipe["wooden-wall"]
recipe.ingredients = { { type = "item", name = "lumber", amount = 4 } } recipe.ingredients = { { type = "item", name = "lumber", amount = 4 } }
recipe.results = { { type = "item", name = "wooden-wall", amount = 1 } } recipe.results = { { type = "item", name = "wooden-wall", amount = 1 } }
recipe.category = "wood-processing-or-assembling"
-- https://mods.factorio.com/mod/Wood-Walls/discussion/679915cbb8bf3c84c65db404
data.raw.corpse["woodenwall-remnants"].icon = "__Wood-Walls__/graphics/wooden-wall/wooden-wall.png"

View file

@ -1,5 +1,6 @@
local Technology = require("__cf-lib__/data/Technology") local Technology = require("__cf-lib__/data/Technology")
local Recipe = require("__cf-lib__/data/Recipe") 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 local basic_circuit_board = settings.startup["lignumis-basic-circuit-board"].value
@ -20,6 +21,7 @@ local drill_item = data.raw["item"]["burner-mining-drill"]
drill_item.icon = Lignumis.graphics .. "icons/burner-mining-drill.png" drill_item.icon = Lignumis.graphics .. "icons/burner-mining-drill.png"
local drill_recipe = data.raw["recipe"]["burner-mining-drill"] local drill_recipe = data.raw["recipe"]["burner-mining-drill"]
drill_recipe.category = "wood-processing-or-assembling"
drill_recipe.ingredients = { drill_recipe.ingredients = {
{ type = "item", name = "stone-furnace", amount = 1 }, { type = "item", name = "stone-furnace", amount = 1 },
{ type = "item", name = "wooden-gear-wheel", amount = basic_circuit_board and 2 or 3 }, { type = "item", name = "wooden-gear-wheel", amount = basic_circuit_board and 2 or 3 },
@ -40,10 +42,14 @@ burner_inserter.energy_source.initial_fuel_percent = 0.15
data.raw.item["burner-inserter"].icon = Lignumis.graphics .. "icons/burner-inserter.png" data.raw.item["burner-inserter"].icon = Lignumis.graphics .. "icons/burner-inserter.png"
data.raw.recipe["burner-inserter"].ingredients = { local burner_inserter_recipe = data.raw.recipe["burner-inserter"]
burner_inserter_recipe.ingredients = {
{ type = "item", name = "wooden-gear-wheel", amount = 1 }, { type = "item", name = "wooden-gear-wheel", amount = 1 },
{ type = "item", name = "lumber", amount = 1 } { type = "item", name = "lumber", amount = 1 }
} }
if settings.startup["lignumis-lumber-mill-more-recipes"].value then
burner_inserter_recipe.category = "wood-processing-or-assembling"
end
-- Stone furnace -- Stone furnace
@ -59,18 +65,12 @@ stone_furnace_remnants.animation[1].filename = Lignumis.graphics .. "entity/ston
-- Lab -- Lab
if settings.startup["lignumis-belt-progression"].value then Recipe:new("lab"):replaceIngredient("transport-belt", "wood-transport-belt")
local lab_recipe = data.raw.recipe["lab"]
for _, ingredient in pairs(lab_recipe.ingredients) do
if ingredient.name == "transport-belt" then
ingredient.name = "wood-transport-belt"
end
end
end
-- Gun turret -- Gun turret
data.raw["ammo-turret"]["gun-turret"].attack_parameters.range = 20 data.raw["ammo-turret"]["gun-turret"].attack_parameters.range = 20
Item:new("gun-turret"):itemsPerRocket(50)
-- Agricultural tower -- Agricultural tower
@ -84,6 +84,9 @@ if agricultural_tower.surface_conditions then
end end
end end
-- Solar panal
Item:new("solar-panel"):itemsPerRocket(50)
-- Wood processing -- Wood processing
@ -96,6 +99,7 @@ for _, tree in pairs(data.raw.tree) do
return result.name == "wood" return result.name == "wood"
end end
local minable = tree.minable local minable = tree.minable
if not minable then goto continue end
local woodResults = minable.results and table.filter(minable.results, isWoodResult) local woodResults = minable.results and table.filter(minable.results, isWoodResult)
local isRegularTree = (minable.result == "wood" and minable.count == 4) or (minable.results and #minable.results == 1 and #woodResults == 1 and woodResults[1].amount == 4) local isRegularTree = (minable.result == "wood" and minable.count == 4) or (minable.results and #minable.results == 1 and #woodResults == 1 and woodResults[1].amount == 4)
if not isRegularTree then goto continue end if not isRegularTree then goto continue end
@ -104,6 +108,7 @@ for _, tree in pairs(data.raw.tree) do
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 = 10 }
if minable.results and #woodResults > 0 then if minable.results and #woodResults > 0 then
table.assign(woodResults[1], woodResult) table.assign(woodResults[1], woodResult)
woodResults[1].amount = nil
else else
minable.results = { woodResult } minable.results = { woodResult }
end end
@ -129,14 +134,12 @@ table.insert(data.raw["assembling-machine"]["assembling-machine-3"].crafting_cat
-- Disable vanilla early game recipes -- Disable vanilla early game recipes
if not mods["planet-picker"] and not mods["any-planet-start"] then
data.raw.recipe["iron-plate"].enabled = false data.raw.recipe["iron-plate"].enabled = false
data.raw.recipe["iron-gear-wheel"].enabled = false data.raw.recipe["iron-gear-wheel"].enabled = false
data.raw.recipe["iron-chest"].enabled = false data.raw.recipe["iron-chest"].enabled = false
data.raw.recipe["copper-plate"].enabled = false data.raw.recipe["copper-plate"].enabled = false
data.raw.recipe["copper-cable"].enabled = false data.raw.recipe["copper-cable"].enabled = false
data.raw.recipe["transport-belt"].enabled = false data.raw.recipe["transport-belt"].enabled = false
end
-- Progressive recipes -- Progressive recipes
@ -145,19 +148,22 @@ if settings.startup["lignumis-belt-progression"].value then
Recipe:new("transport-belt"):replaceIngredient("iron-plate", "wood-transport-belt", 2) Recipe:new("transport-belt"):replaceIngredient("iron-plate", "wood-transport-belt", 2)
Recipe:new("underground-belt"):replaceIngredient("transport-belt", "wood-underground-belt", 2) Recipe:new("underground-belt"):replaceIngredient("transport-belt", "wood-underground-belt", 2)
Recipe:new("splitter"):replaceIngredient("transport-belt", "wood-splitter", 1) Recipe:new("splitter"):replaceIngredient("transport-belt", "wood-splitter", 1)
Item:new("transport-belt"):itemsPerRocket(100)
Item:new("underground-belt"):itemsPerRocket(50)
Item:new("splitter"):itemsPerRocket(50)
end end
if settings.startup["lignumis-inserter-progression"].value then if settings.startup["lignumis-inserter-progression"].value then
table.insert( Recipe:new("inserter"):addIngredient("burner-inserter", 1)
data.raw.recipe["inserter"].ingredients, end
{ type = "item", name = "burner-inserter", amount = 1 }
) if settings.startup["lignumis-assembler-progression"].value then
Recipe:new("assembling-machine-1"):addIngredient("burner-assembling-machine", 1)
end end
-- Adjust vanilla technologies -- Adjust vanilla technologies
if not mods["planet-picker"] and not mods["any-planet-start"] then
local automation_science_pack_technology = data.raw.technology["automation-science-pack"] local automation_science_pack_technology = data.raw.technology["automation-science-pack"]
automation_science_pack_technology.enabled = false automation_science_pack_technology.enabled = false
automation_science_pack_technology.visible_when_disabled = true automation_science_pack_technology.visible_when_disabled = true
@ -294,7 +300,6 @@ if not mods["planet-picker"] and not mods["any-planet-start"] then
if settings.startup["lignumis-technology-progression"].value then if settings.startup["lignumis-technology-progression"].value then
utility_science_pack_technology:addIngredients({ "wood-science-pack", "steam-science-pack" }) utility_science_pack_technology:addIngredients({ "wood-science-pack", "steam-science-pack" })
end end
end
if not mods["planet-muluna"] then -- Muluna does the same if not mods["planet-muluna"] then -- Muluna does the same
Technology:new("logistic-robotics"):addRecipe("requester-chest") Technology:new("logistic-robotics"):addRecipe("requester-chest")
@ -317,3 +322,17 @@ data.raw["equipment-grid"]["medium-equipment-grid"].height = 8
local nauvis = data.raw.planet["nauvis"] local nauvis = data.raw.planet["nauvis"]
nauvis.flags = nauvis.flags or {} nauvis.flags = nauvis.flags or {}
table.insert(nauvis.flags, "always-show") table.insert(nauvis.flags, "always-show")
-- Fulgora changes
if settings.startup["lignumis-fulgora-wood"].value then
local recycling = data.raw.recipe["scrap-recycling"]
table.insert(recycling.results, { type = "item", name = "wooden-gear-wheel", amount = 1, probability = 0.2 })
local recycling_result_count = table.count(recycling.results)
local recycler = data.raw.furnace["recycler"]
if recycler.result_inventory_size < recycling_result_count then
recycler.result_inventory_size = recycling_result_count
end
end

View file

@ -6,6 +6,12 @@ local InitExisting = {}
InitExisting.on_init = function() InitExisting.on_init = function()
if game.tick == 0 then return end if game.tick == 0 then return end
storage.target_planet = settings.startup["lignumis-second-planet"].value or "nauvis"
if script.active_mods["any-planet-start"] then
storage.target_planet = settings.startup["aps-planet"].value ~= "none" and settings.startup["aps-planet"].value or storage.target_planet
end
storage.init = {} storage.init = {}
for _, player in pairs(game.players) do for _, player in pairs(game.players) do
storage.init[player.index] = true storage.init[player.index] = true
@ -15,11 +21,11 @@ InitExisting.on_init = function()
end end
for _, force in pairs(game.forces) do for _, force in pairs(game.forces) do
force.technologies["iron-processing"].researched = true
force.technologies["copper-processing"].researched = true
if force.is_space_location_unlocked("nauvis") then if force.is_space_location_unlocked("nauvis") then
force.technologies["planet-discovery-nauvis"].researched = true force.technologies["planet-discovery-nauvis"].researched = true
end end
force.technologies["iron-processing"].researched = true
force.technologies["copper-processing"].researched = true
end end
game.print { "", { "lignumis.start-new-game" } } game.print { "", { "lignumis.start-new-game" } }

View file

@ -33,7 +33,7 @@ end
local function init_space_locations() local function init_space_locations()
local force = game.forces.player local force = game.forces.player
force.technologies["planet-discovery-lignumis"].researched = true force.technologies["planet-discovery-lignumis"].researched = true
if not force.technologies["planet-discovery-nauvis"].researched then if game.planets["nauvis"] and force.technologies["planet-discovery-nauvis"] and not force.technologies["planet-discovery-nauvis"].researched then
force.lock_space_location("nauvis") force.lock_space_location("nauvis")
end end
end end
@ -62,7 +62,13 @@ end
InitNew.on_init = function() InitNew.on_init = function()
if game.tick > 0 then return end if game.tick > 0 then return end
if script.active_mods["planet-picker"] or script.active_mods["any-planet-start"] then return end
storage.target_planet = settings.startup["lignumis-second-planet"].value or "nauvis"
if script.active_mods["any-planet-start"] then
storage.target_planet = settings.startup["aps-planet"].value ~= "none" and settings.startup["aps-planet"].value or storage.target_planet
remote.call("APS", "override_planet", "lignumis")
end
init_intro() init_intro()
init_space_locations() init_space_locations()

View file

@ -7,27 +7,15 @@ local Init = {
events = {} events = {}
} }
-- Migrate storage init as it was just a boolean before not supporting multiple players
local function migrate_0_9_6(event)
if storage.init and type(storage.init) == "boolean" then
storage.init = {
[event.player_index] = true
}
end
end
-- Initialize the player -- Initialize the player
-- 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
local main_inventory = player.character.get_main_inventory() local main_inventory = player.character.get_main_inventory()
-- Add some starting items to player inventory -- Add some starting items to player inventory
@ -37,7 +25,6 @@ end
-- Initialize the freeplay scenario -- Initialize the freeplay scenario
local function init_freeplay(event) local function init_freeplay(event)
if script.active_mods["planet-picker"] or script.active_mods["any-planet-start"] then return end
if storage.crashed_ship_lignumis then return end if storage.crashed_ship_lignumis then return end
local player = game.get_player(event.player_index) local player = game.get_player(event.player_index)
@ -74,15 +61,21 @@ end
Init.events[defines.events.on_player_created] = function(event) Init.events[defines.events.on_player_created] = function(event)
migrate_0_9_6(event)
storage.init = storage.init or {} storage.init = storage.init or {}
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
if not script.active_mods["any-planet-start"] then
init_player(event) init_player(event)
init_freeplay(event) init_freeplay(event)
end end
end
-- Watch Nauvis being visited for the first time -- Watch Nauvis being visited for the first time
@ -91,7 +84,7 @@ Init.events[defines.events.on_player_changed_surface] = function(event)
if player.controller_type ~= defines.controllers.character then return end if player.controller_type ~= defines.controllers.character then return end
if player and player.surface.name == "nauvis" then if player and player.surface.name == storage.target_planet then
storage.nauvis_visited = true storage.nauvis_visited = true
end end
@ -145,10 +138,15 @@ Init.events[defines.events.on_cutscene_cancelled] = function(event)
if player.gui.screen.skip_cutscene_label then if player.gui.screen.skip_cutscene_label then
player.gui.screen.skip_cutscene_label.destroy() player.gui.screen.skip_cutscene_label.destroy()
end end
if player.character then
player.character.destructible = true
end
player.zoom = 1.5 player.zoom = 1.5
end end
Init.on_configuration_changed = function()
storage.target_planet = settings.startup["lignumis-second-planet"].value or "nauvis"
if script.active_mods["any-planet-start"] then
storage.target_planet = settings.startup["aps-planet"].value ~= "none" and settings.startup["aps-planet"].value or storage.target_planet
end
end
return Init return Init

View file

@ -6,7 +6,6 @@ local ToNauvis = {
events = {} events = {}
} }
-- Chart the starting area for the player -- Chart the starting area for the player
local function chart_starting_area(surface, player) local function chart_starting_area(surface, player)
local r = 200 local r = 200
@ -19,7 +18,7 @@ end
-- Initialize Nauvis -- Initialize Nauvis
local function init_nauvis() local function init_nauvis()
if storage.nauvis_visited then return end if storage.nauvis_visited then return end
local nauvis = game.planets["nauvis"].create_surface() local nauvis = game.planets[storage.target_planet].create_surface()
nauvis.request_to_generate_chunks({ 0, 0 }, 3) nauvis.request_to_generate_chunks({ 0, 0 }, 3)
nauvis.force_generate_chunk_requests() nauvis.force_generate_chunk_requests()
nauvis.daytime = 0.7 nauvis.daytime = 0.7
@ -28,12 +27,11 @@ end
-- Teleport player to Nauvis and show welcome message -- Teleport player to Nauvis and show welcome message
local function teleport_player(player) local function teleport_player(player)
local nauvis = game.planets["nauvis"].surface local nauvis = game.planets[storage.target_planet].surface
if player.surface.name == "lignumis" then if player.surface.name == "lignumis" then
local position = nauvis.find_non_colliding_position("character", { 0, 0 }, 100, 1) or { 0, 0 } local position = nauvis.find_non_colliding_position("character", { 0, 0 }, 100, 1) or { 0, 0 }
player.teleport(position, "nauvis") player.teleport(position, storage.target_planet)
chart_starting_area(nauvis, player) chart_starting_area(nauvis, player)
player.print("Oh no, not again. But... Welcome to Nauvis!")
end end
end end
@ -44,7 +42,7 @@ local function init_freeplay()
if not remote.interfaces.freeplay then return end if not remote.interfaces.freeplay then return end
storage.crashed_ship_nauvis = true storage.crashed_ship_nauvis = true
local nauvis = game.planets["nauvis"].surface local nauvis = game.planets[storage.target_planet].surface
local ship_items = { local ship_items = {
["burner-mining-drill"] = 2, ["burner-mining-drill"] = 2,
["stone-furnace"] = 2, ["stone-furnace"] = 2,
@ -60,7 +58,7 @@ end
ToNauvis.events[defines.events.on_rocket_launched] = function(event) ToNauvis.events[defines.events.on_rocket_launched] = function(event)
if event.rocket_silo.name ~= "provisional-rocket-silo" then return end if not event.rocket_silo or event.rocket_silo.name ~= "provisional-rocket-silo" then return end
local rocket_entry local rocket_entry
local rocket_entry_index local rocket_entry_index

View file

@ -12,16 +12,17 @@ local function build_gui(player, rocket_silo)
position = defines.relative_gui_position.right position = defines.relative_gui_position.right
} }
local launch_button = { type = "button", name = "provisional-rocket-silo-launch-button", caption = { "lignumis.provisional-rocket-silo-button" } } local target_planet_name = { "space-location-name." .. storage.target_planet }
local launch_button = { type = "button", name = "provisional-rocket-silo-launch-button", caption = { "lignumis.provisional-rocket-silo-button", target_planet_name } }
local inventory = player.get_main_inventory() local inventory = player.get_main_inventory()
local is_inventory_empty = inventory.is_empty() local is_inventory_empty = inventory.is_empty()
local is_nauvis_researched = player.force.technologies["planet-discovery-nauvis"].researched local is_nauvis_researched = player.force.technologies["planet-discovery-" .. storage.target_planet].researched
launch_button.enabled = is_inventory_empty and is_nauvis_researched launch_button.enabled = is_inventory_empty and is_nauvis_researched
if not is_inventory_empty then if not is_inventory_empty then
launch_button.tooltip = { "lignumis.provisional-rocket-silo-button-tooltip-inventory" } launch_button.tooltip = { "lignumis.provisional-rocket-silo-button-tooltip-inventory" }
elseif not is_nauvis_researched then elseif not is_nauvis_researched then
launch_button.tooltip = { "lignumis.provisional-rocket-silo-button-tooltip-nauvis" } launch_button.tooltip = { "lignumis.provisional-rocket-silo-button-tooltip-target" }
end end
@ -35,7 +36,7 @@ local function build_gui(player, rocket_silo)
direction = "vertical", direction = "vertical",
anchor = anchor, anchor = anchor,
children = { children = {
{ type = "label", style = "frame_title", caption = { "lignumis.provisional-rocket-silo-button" }, ignored_by_interaction = true }, { type = "label", style = "frame_title", caption = { "lignumis.provisional-rocket-silo-button", target_planet_name }, ignored_by_interaction = true },
{ {
type = "frame", type = "frame",
direction = "vertical", direction = "vertical",
@ -46,7 +47,7 @@ local function build_gui(player, rocket_silo)
direction = "vertical", direction = "vertical",
style = "inset_frame_container_vertical_flow", style = "inset_frame_container_vertical_flow",
children = { children = {
{ type = "label", caption = { "lignumis.provisional-rocket-silo-description" } }, { type = "label", caption = { "lignumis.provisional-rocket-silo-description", target_planet_name } },
launch_button launch_button
} }
} }
@ -64,12 +65,13 @@ local function on_gui_opened(event)
if not entity or not entity.valid then return end if not entity or not entity.valid then return end
if entity.name ~= "provisional-rocket-silo-ready" then return end if entity.name ~= "provisional-rocket-silo-ready" then return end
local player = game.get_player(event.player_index) local player = game.get_player(event.player_index)
if player.controller_type ~= defines.controllers.character then return end
if player.gui.relative["provisional-rocket-silo-relative-frame"] then if player.gui.relative["provisional-rocket-silo-relative-frame"] then
player.gui.relative["provisional-rocket-silo-relative-frame"].destroy() player.gui.relative["provisional-rocket-silo-relative-frame"].destroy()
end end
if player.controller_type ~= defines.controllers.character then return end
build_gui(player, entity) build_gui(player, entity)
end end
@ -104,7 +106,9 @@ local function on_silo_mined(event)
local player = game.get_player(event.player_index) local player = game.get_player(event.player_index)
for i, entry in pairs(storage.rocket_silos) do for i, entry in pairs(storage.rocket_silos) do
if entry.fake_silo == fake_silo then if entry.fake_silo == fake_silo then
if entry.real_silo.valid then
player.mine_entity(entry.real_silo, true) player.mine_entity(entry.real_silo, true)
end
table.remove(storage.rocket_silos, i) table.remove(storage.rocket_silos, i)
break break
end end

View file

@ -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"
}, },
{ {
@ -40,24 +40,53 @@ data:extend({
setting_type = "startup", setting_type = "startup",
default_value = false, default_value = false,
order = "f" order = "f"
},
{
type = "bool-setting",
name = "lignumis-assembler-progression",
setting_type = "startup",
default_value = false,
order = "g"
},
{
type = "bool-setting",
name = "lignumis-lumber-mill-more-recipes",
setting_type = "startup",
default_value = false,
order = "h"
},
{
type = "bool-setting",
name = "lignumis-fulgora-wood",
setting_type = "startup",
default_value = true,
order = "i"
},
{
type = "bool-setting",
name = "lignumis-early-robots",
setting_type = "startup",
default_value = false,
order = "j"
},
{
type = "string-setting",
name = "lignumis-second-planet",
setting_type = "startup",
allowed_values = { "nauvis" },
default_value = "nauvis",
hidden = true
} }
}) })
if mods["aai-industry"] then if mods["aai-industry"] then
data.raw["bool-setting"]["lignumis-inserter-progression"].forced_value = false data.raw["bool-setting"]["lignumis-inserter-progression"].forced_value = false
data.raw["bool-setting"]["lignumis-inserter-progression"].hidden = true data.raw["bool-setting"]["lignumis-inserter-progression"].hidden = true
data.raw["bool-setting"]["lignumis-assembler-progression"].forced_value = false
data.raw["bool-setting"]["lignumis-assembler-progression"].hidden = true
end end
if mods["wood-military"] then if mods["wood-military"] then
data.raw["bool-setting"]["lignumis-ammo-progression"].forced_value = false data.raw["bool-setting"]["lignumis-ammo-progression"].forced_value = false
data.raw["bool-setting"]["lignumis-ammo-progression"].hidden = true data.raw["bool-setting"]["lignumis-ammo-progression"].hidden = true
end end
if mods["planet-picker"] or mods["any-planet-start"] then
data.raw["bool-setting"]["lignumis-belt-progression"].forced_value = false
data.raw["bool-setting"]["lignumis-belt-progression"].hidden = true
data.raw["bool-setting"]["lignumis-inserter-progression"].forced_value = false
data.raw["bool-setting"]["lignumis-inserter-progression"].hidden = true
data.raw["bool-setting"]["lignumis-ammo-progression"].forced_value = false
data.raw["bool-setting"]["lignumis-ammo-progression"].hidden = true
end