Compare commits
52 commits
spage_comp
...
main
Author | SHA1 | Date | |
---|---|---|---|
![]() |
345d5dbe12 | ||
e04da93439 | |||
![]() |
1d66d36bed | ||
![]() |
1600710d28 | ||
![]() |
56593eb6f7 | ||
![]() |
606bcedb5b | ||
![]() |
861a878e6e | ||
![]() |
31ea5d4309 | ||
![]() |
44816587a8 | ||
![]() |
970da5fb36 | ||
![]() |
53114d0c55 | ||
![]() |
50c84220f8 | ||
![]() |
dc32c012ba | ||
![]() |
d654107186 | ||
![]() |
5f33d46370 | ||
![]() |
10ef5d2390 | ||
![]() |
51341b99d5 | ||
![]() |
97cb6fa40a | ||
![]() |
cd82d589da | ||
![]() |
01bf94d2f2 | ||
![]() |
15427d0fff | ||
![]() |
d02452bdeb | ||
![]() |
c9bce1c6d9 | ||
![]() |
7905b45347 | ||
![]() |
551bbf5ac2 | ||
![]() |
7f941cb5b6 | ||
![]() |
9c41d843b4 | ||
![]() |
1272dd41e4 | ||
![]() |
159c479f96 | ||
![]() |
0ed01e7dc9 | ||
![]() |
fbb44a2b22 | ||
![]() |
f848e3cf98 | ||
![]() |
77e4bc1106 | ||
![]() |
66cfcf53c6 | ||
![]() |
c9ef722995 | ||
![]() |
b18c75a35b | ||
![]() |
031f3ab102 | ||
![]() |
91ea733958 | ||
![]() |
e9b2aa368a | ||
![]() |
662f05a1ea | ||
![]() |
fe30affb28 | ||
![]() |
b452aea465 | ||
![]() |
0d2ca52091 | ||
![]() |
bac183d1c1 | ||
![]() |
7134f437e5 | ||
![]() |
9144d7492f | ||
32c3dcadbe | |||
![]() |
6b957759d5 | ||
![]() |
8b3d372b57 | ||
![]() |
7ca55d0e7a | ||
![]() |
721f6f271f | ||
![]() |
04fbdf540c |
|
@ -1,85 +0,0 @@
|
|||
----- Just used for Testing
|
||||
|
||||
|
||||
function Test_Spawn()
|
||||
local surface = game.surfaces['nauvis']
|
||||
|
||||
surface.create_entity({name = "tree-01", position = {2, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-02", position = {4, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-02-red", position = {6, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-03", position = {8, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-04", position = {10, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-05", position = {12, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-06", position = {14, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-06-brown", position = {16, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-07", position = {18, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-08", position = {20, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-08-brown", position = {22, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-09", position = {24, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-09-brown", position = {26, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-09-red", position = {28, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-desert-a", position = {30, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-desert-b", position = {32, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-desert-c", position = {34, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-desert-d", position = {36, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-desert-e", position = {38, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-desert-f", position = {40, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-desert-g", position = {42, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-desert-h", position = {44, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-desert-i", position = {46, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-desert-j", position = {48, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-desert-k", position = {50, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-desert-l", position = {52, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-desert-m", position = {54, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-desert-n", position = {56, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-dryland-a", position = {58, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-dryland-b", position = {60, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-dryland-c", position = {62, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-dryland-d", position = {64, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-dryland-e", position = {66, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-dryland-f", position = {68, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-dryland-g", position = {70, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-dryland-h", position = {72, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-dryland-i", position = {74, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-dryland-j", position = {76, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-dryland-k", position = {78, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-dryland-l", position = {80, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-dryland-m", position = {82, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-dryland-n", position = {84, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-dryland-o", position = {86, 10}, force = game.forces.player})
|
||||
--surface.create_entity({name = "tree-grassland-0", position = {88, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-grassland-a", position = {90, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-grassland-b", position = {92, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-grassland-c", position = {94, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-grassland-d", position = {96, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-grassland-e", position = {98, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-grassland-f", position = {100, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-grassland-g", position = {102, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-grassland-h", position = {104, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-grassland-h2", position = {106, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-grassland-h3", position = {108, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-grassland-i", position = {110, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-grassland-k", position = {112, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-grassland-l", position = {114, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-grassland-m", position = {116, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-grassland-n", position = {118, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-grassland-p", position = {120, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-grassland-q", position = {122, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-snow-a", position = {124, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-volcanic-a", position = {126, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-wetland-a", position = {128, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-wetland-b", position = {130, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-wetland-c", position = {132, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-wetland-d", position = {134, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-wetland-e", position = {136, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-wetland-f", position = {138, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-wetland-g", position = {140, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-wetland-h", position = {142, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-wetland-i", position = {144, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-wetland-j", position = {146, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-wetland-k", position = {148, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-wetland-l", position = {150, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-wetland-m", position = {152, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-wetland-n", position = {154, 10}, force = game.forces.player})
|
||||
surface.create_entity({name = "tree-wetland-o", position = {156, 10}, force = game.forces.player})
|
||||
end
|
|
@ -1,4 +1,145 @@
|
|||
---------------------------------------------------------------------------------------------------
|
||||
Version: 2.0.0
|
||||
Date: 05.07.2025
|
||||
Initial 2.0 release
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 2.0.26
|
||||
Date: 21.10.2025
|
||||
Changes:
|
||||
- Add Brazilian translations (thanks Slondo)
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 2.0.25
|
||||
Date: 18.10.2025
|
||||
Bug Fixes:
|
||||
- More mod compatibility fixes
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 2.0.24
|
||||
Date: 18.10.2025
|
||||
Bug Fixes:
|
||||
- Krastorio2: Compatibility fixes
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 2.0.23
|
||||
Date: 17.10.2025
|
||||
Bug Fixes:
|
||||
- Fixed crash when placing bio gardens
|
||||
- Match bio garden pollution reduction by the amount of trees equivalent the description states
|
||||
- Correct typo in internal recipe name to fix the localisation
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 2.0.22
|
||||
Date: 16.10.2025
|
||||
Bug Fixes:
|
||||
- Krastorio2: Compatibility fixes
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 2.0.21
|
||||
Date: 11.10.2025
|
||||
Bug Fixes:
|
||||
- Krastorio2: Compatibility fixes
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 2.0.20
|
||||
Date: 12.09.2025
|
||||
Changes:
|
||||
- Code Clean up
|
||||
- More Updates to Bob's Compatibility
|
||||
- Added a few milestones
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 2.0.19
|
||||
Date: 11.09.2025
|
||||
Bug Fixes:
|
||||
- Fix Bio Reactor graphic shift when selecting a recipe with 3 fluid inputs.
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 2.0.18
|
||||
Date: 10.09.2025
|
||||
Bug Fixes:
|
||||
- Fix crash with Krastorio 2 (Spaced Out)
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 2.0.17
|
||||
Date: 10.09.2025
|
||||
Changes:
|
||||
- More Updates to Bob's Compatibility
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 2.0.16
|
||||
Date: 09.09.2025
|
||||
Bug Fixes:
|
||||
- Fixed missing fertilizer icon, attempt 2
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 2.0.15
|
||||
Date: 09.09.2025
|
||||
Bug Fixes:
|
||||
- Fixed missing icon "Bio_Industries_2/graphics/icons/fluid_advanced_fertilizer_recipe_64.png not found"
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 2.0.14
|
||||
Date: 09.09.2025
|
||||
Bug Fixes:
|
||||
- Fixed missing 'liquid-air' in not playing with Bob's
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 2.0.13
|
||||
Date: 09.09.2025
|
||||
Changes:
|
||||
- Updated Rail to remove Decorative when placed
|
||||
- Updated Bob's Compatibility
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 2.0.12
|
||||
Date: 05.09.2025
|
||||
Changes:
|
||||
- Updated Wood Rail Graphic. No more ugly Tint. (Thanks Snouz!)
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 2.0.11
|
||||
Date: 04.09.2025
|
||||
Bug Fixes:
|
||||
- Fixed (I hope) Wood Rail
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 2.0.10
|
||||
Date: 02.09.2025
|
||||
Bug Fixes:
|
||||
- Fix working visualisations for Bio Nursery
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 2.0.9
|
||||
Date: 02.09.2025
|
||||
Bug Fixes:
|
||||
- Fix working visualisations for Bio Farm
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 2.0.8
|
||||
Date: 31.08.2025
|
||||
Bug Fixes:
|
||||
- Fix icon path
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 2.0.7
|
||||
Date: 31.08.2025
|
||||
Bug Fixes:
|
||||
- Fix file names
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 2.0.6
|
||||
Date: 31.08.2025
|
||||
Bug Fixes:
|
||||
- Add missing subgroups (put icons in correct tab)
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 2.0.5
|
||||
Date: 31.08.2025
|
||||
Bug Fixes:
|
||||
- Fixed Wood Underground pipe graphic (TheSAguy)
|
||||
- Fixed Prototype Artillery (TheSAguy)
|
||||
- Fixed Dart Turret ammo (TheSAguy)
|
||||
Changes:
|
||||
- Updated Vanilla Rail Recipe (TheSAguy)
|
||||
- Added Wooden Rail (TheSAguy)
|
||||
- Updated some graphics (TheSAguy; BIG thanks to Snouz!)
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 2.0.4
|
||||
Date: 28.07.2025
|
||||
Bug Fixes:
|
||||
- Fix Bio Boiler
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 2.0.3
|
||||
Date: 13.07.2025
|
||||
Bug Fixes:
|
||||
- Fix several entities
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 2.0.2
|
||||
Date: 07.07.2025
|
||||
Bug Fixes:
|
||||
- Fix compatibility with Krastorio2
|
||||
Changes:
|
||||
- Add compatibility with Space Age
|
||||
- Add compatibility with Krastorio2 Spaced Out
|
||||
---------------------------------------------------------------------------------------------------
|
||||
Version: 2.0.1
|
||||
Date: 06.07.2025
|
||||
Bug Fixes:
|
||||
- Fix locales
|
||||
- Fix Musk floor
|
|
@ -1,261 +1,302 @@
|
|||
|
||||
BioInd.writeDebug("Entered control_arboretum.lua")
|
||||
|
||||
---Arboretum Stuff
|
||||
|
||||
local Event = require('__kry_stdlib__/stdlib/event/event').set_protected_mode(false)
|
||||
|
||||
-- If a recipe with NORMAL FERTILIZER is used, don't fertilize tiles set have "true"
|
||||
-- set! (Fertile tiles set to true in this table can't be made more fertile with
|
||||
-- normal fertilizer, and nothing should grow on the other tiles.)
|
||||
local Terrain_Check_1 = {
|
||||
["grass-1"] = true, -- Fertility: 100%
|
||||
["grass-3"] = true, -- Fertility: 85%
|
||||
["vegetation-green-grass-1"] = true, -- Fertility: 100%
|
||||
["vegetation-green-grass-3"] = true, -- Fertility: 85%
|
||||
}
|
||||
|
||||
-- If a recipe with ADVANCED FERTILIZER is used, don't fertilize tiles set have "true" set!
|
||||
-- (Fertile tiles in this table can't be made more fertile, and nothing should grow on the
|
||||
-- the others tiles!)
|
||||
local Terrain_Check_2 = {
|
||||
["grass-1"] = true, -- Fertility: 100%
|
||||
["vegetation-green-grass-1"] = true, -- Fertility: 100%
|
||||
}
|
||||
|
||||
local plant_radius = 75
|
||||
|
||||
-- Different tiles are used if AlienBiomes is active
|
||||
local AB, terrain_name_g1, terrain_name_g3
|
||||
|
||||
-- OmniFluid replaces all fluids with items, so the arboretum won't have a fluidbox!
|
||||
|
||||
|
||||
local function get_new_position(pos)
|
||||
pos = BioInd.normalize_position(pos) or BioInd.arg_err("nil", position)
|
||||
local xxx = math.random(-plant_radius, plant_radius)
|
||||
local yyy = math.random(-plant_radius, plant_radius)
|
||||
|
||||
return {x = pos.x + xxx, y = pos.y + yyy}
|
||||
end
|
||||
|
||||
|
||||
-- Check that all ingredients are available!
|
||||
local function check_ingredients(arboretum)
|
||||
local recipe = arboretum.get_recipe()
|
||||
local need = recipe and storage.bi_arboretum_recipe_table[recipe.name]
|
||||
|
||||
local function check(need, have)
|
||||
for name, amount in pairs(need or {}) do
|
||||
if not (have and have[name]) or (have[name] < amount) then
|
||||
BioInd.writeDebug("Missing ingredient %s (have %s of %s)", {name, have[name] or 0, amount})
|
||||
return false
|
||||
end
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
local inventory = arboretum.get_inventory(defines.inventory.assembling_machine_input)
|
||||
return need and
|
||||
check(need.items, inventory and inventory.get_contents()) and
|
||||
check(need.fluids, arboretum.get_fluid_contents()) and
|
||||
{ingredients = need, name = recipe.name} or nil
|
||||
end
|
||||
|
||||
|
||||
local function consume_ingredients(arboretum, need)
|
||||
local inventory = arboretum.get_inventory(defines.inventory.assembling_machine_input)
|
||||
for item, i in pairs(need.items or {}) do
|
||||
inventory.remove({name = item, count = i})
|
||||
BioInd.writeDebug("Removed %s (%s)", {item, i})
|
||||
end
|
||||
BioInd.show("Inventory", inventory.get_contents() or "nil")
|
||||
|
||||
for fluid, f in pairs(need.fluids or {}) do
|
||||
arboretum.remove_fluid({name = fluid, amount = f})
|
||||
BioInd.writeDebug("Removed %s (%s)", {fluid, f})
|
||||
end
|
||||
BioInd.show("Fluid contents", arboretum.get_fluid_contents() or "nil")
|
||||
end
|
||||
|
||||
|
||||
local function set_tile(current, target, surface, position)
|
||||
if current ~= target then
|
||||
surface.set_tiles(
|
||||
{{name = target, position = position}},
|
||||
true, -- correct_tiles
|
||||
true, -- remove_colliding_entities
|
||||
true, -- remove_colliding_decoratives
|
||||
true -- raise_event
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
function Get_Arboretum_Recipe(ArboretumTable, event)
|
||||
BioInd.writeDebug("Entered function Get_Arboretum_Recipe(%s, %s)", {ArboretumTable, event})
|
||||
if not ArboretumTable then
|
||||
BioInd.writeDebug("%s is not a valid ArboretumTable. Leaving immediately!")
|
||||
return
|
||||
end
|
||||
|
||||
local arboretum = ArboretumTable.base
|
||||
local new_position, currentTilename
|
||||
local pos, surface, Inventory, stack
|
||||
|
||||
-- 'AlienBiomes' is a bool value -- we don't want to read it again if it's false,
|
||||
-- but only if it hasn't been set yet!
|
||||
AB = storage.compatible.AlienBiomes
|
||||
terrain_name_g1 = terrain_name_g1 or (AB and "vegetation-green-grass-1" or "grass-1")
|
||||
terrain_name_g3 = terrain_name_g3 or (AB and "vegetation-green-grass-3" or "grass-3")
|
||||
|
||||
|
||||
local check = check_ingredients(arboretum)
|
||||
local ingredients, recipe_name
|
||||
if check then
|
||||
ingredients, recipe_name = check.ingredients, check.name
|
||||
end
|
||||
|
||||
if ingredients then
|
||||
local create_seedling, new_plant
|
||||
pos = BioInd.normalize_position(arboretum.position) or
|
||||
BioInd.arg_err("nil", "position")
|
||||
surface = arboretum.surface
|
||||
|
||||
-- Just plant a tree and hope the ground is fertile!
|
||||
if recipe_name == "bi-arboretum-r1" then
|
||||
BioInd.writeDebug(tostring(recipe_name) .. ": Just plant a tree")
|
||||
|
||||
--- 10 attempts to find a random spot to plant a tree and/or change terrain
|
||||
for k = 1, 10 do
|
||||
new_position = get_new_position(pos)
|
||||
new_plant = {
|
||||
name= "seedling",
|
||||
position = new_position,
|
||||
force = "neutral"
|
||||
}
|
||||
|
||||
if surface.can_place_entity(new_plant) then
|
||||
consume_ingredients(arboretum, ingredients)
|
||||
create_seedling = surface.create_entity(new_plant)
|
||||
seed_planted_arboretum(event, create_seedling)
|
||||
--- After sucessfully planting a tree, break out of the loop.
|
||||
break
|
||||
else
|
||||
BioInd.writeDebug("Can't plant here (attempt %s)", k)
|
||||
end
|
||||
end
|
||||
-- Fertilize the ground with normal fertilizer. Ignore tiles listed in Terrain_Check_1!
|
||||
elseif recipe_name == "bi-arboretum-r2" then
|
||||
BioInd.writeDebug(tostring(recipe_name) .. ": Just change terrain to grass-3 (basic)")
|
||||
|
||||
for k = 1, 10 do --- 10 attempts to find a random spot to plant a tree and / or change terrain
|
||||
new_position = get_new_position(pos)
|
||||
currentTilename = surface.get_tile(new_position.x, new_position.y).name
|
||||
|
||||
-- We need to fertilize the ground!
|
||||
if Bi_Industries.fertility[currentTilename] and not Terrain_Check_1[currentTilename] then
|
||||
consume_ingredients(arboretum, ingredients)
|
||||
BioInd.writeDebug("%s: Changing terrain from %s to %s (%s)",
|
||||
{k, currentTilename or "unknown tile",
|
||||
terrain_name_g3, serpent.line(new_position)})
|
||||
set_tile(currentTilename, terrain_name_g3, surface, new_position)
|
||||
--- After sucessfully changing the terrain, break out of the loop.
|
||||
break
|
||||
else
|
||||
BioInd.writeDebug("%s: Can't change terrain (%s)",
|
||||
{k, currentTilename or "unknown tile"})
|
||||
end
|
||||
end
|
||||
-- Fertilize the ground with advanced fertilizer. Ignore tiles listed in Terrain_Check_2!
|
||||
elseif recipe_name == "bi-arboretum-r3" then
|
||||
BioInd.writeDebug(tostring(recipe_name) .. ": Just change terrain to grass-1 (advanced)")
|
||||
|
||||
for k = 1, 10 do --- 10 attempts to find a random spot to plant a tree and / or change terrain
|
||||
new_position = get_new_position(pos)
|
||||
currentTilename = surface.get_tile(new_position.x, new_position.y).name
|
||||
|
||||
if Bi_Industries.fertility[currentTilename] and currentTilename ~= terrain_name_g1 then
|
||||
consume_ingredients(arboretum, ingredients)
|
||||
BioInd.writeDebug("%s: Changing terrain from %s to %s (%s)",
|
||||
{k, currentTilename or "unknown tile",
|
||||
terrain_name_g1, serpent.line(new_position)})
|
||||
set_tile(currentTilename, terrain_name_g1, surface, new_position)
|
||||
--- After sucessfully changing the terrain, break out of the loop.
|
||||
break
|
||||
else
|
||||
BioInd.writeDebug("%s: Can't change terrain (%s)",
|
||||
{k, currentTilename or "unknown tile"})
|
||||
end
|
||||
end
|
||||
-- Fertilize the ground with normal fertilizer. Ignore tiles listed in Terrain_Check_1!
|
||||
-- Also plant a tree.
|
||||
elseif recipe_name == "bi-arboretum-r4" then
|
||||
BioInd.writeDebug(tostring(recipe_name) .. ": Plant Tree AND change the terrain to grass-3 (basic)")
|
||||
|
||||
for k = 1, 10 do --- 10 attempts to find a random spot to plant a tree and / or change terrain
|
||||
new_position = get_new_position(pos)
|
||||
currentTilename = surface.get_tile(new_position.x, new_position.y).name
|
||||
new_plant = {
|
||||
name= "seedling",
|
||||
position = new_position,
|
||||
force = "neutral"
|
||||
}
|
||||
|
||||
-- Test to see if we can plant
|
||||
if surface.can_place_entity(new_plant) and Bi_Industries.fertility[currentTilename] then
|
||||
consume_ingredients(arboretum, ingredients)
|
||||
-- Refund fertilizer -- no need to waste it on fertile ground!
|
||||
if Terrain_Check_1[currentTilename] then
|
||||
arboretum.insert({name = "fertilizer", count = ingredients.items.fertilizer})
|
||||
BioInd.writeDebug("Refunded fertilizer!")
|
||||
end
|
||||
|
||||
set_tile(currentTilename, terrain_name_g3, surface, new_position)
|
||||
create_seedling = surface.create_entity(new_plant)
|
||||
seed_planted_arboretum(event, create_seedling)
|
||||
--- After sucessfully planting a tree or changing the terrain, break out of the loop.
|
||||
break
|
||||
else
|
||||
BioInd.writeDebug("%s: Can't change terrain and plant a tree (%s)",
|
||||
{k, currentTilename or "unknown tile"})
|
||||
end
|
||||
end
|
||||
-- Fertilize the ground with advanced fertilizer. Ignore tiles listed in Terrain_Check_2!
|
||||
-- Also plant a tree.
|
||||
elseif recipe_name == "bi-arboretum-r5" then
|
||||
BioInd.writeDebug(tostring(recipe_name) .. ": Plant Tree and change the terrain to grass-1 (advanced)")
|
||||
|
||||
for k = 1, 10 do --- 10 attempts to find a random spot to plant a tree and / or change terrain
|
||||
new_position = get_new_position(pos)
|
||||
currentTilename = surface.get_tile(new_position.x, new_position.y).name
|
||||
new_plant = {
|
||||
name= "seedling",
|
||||
position = new_position,
|
||||
force = "neutral"
|
||||
}
|
||||
|
||||
if surface.can_place_entity(new_plant) and Bi_Industries.fertility[currentTilename] then
|
||||
consume_ingredients(arboretum, ingredients)
|
||||
-- Refund fertilizer -- no need to waste it on fertile ground!
|
||||
if Terrain_Check_2[currentTilename] then
|
||||
arboretum.insert({
|
||||
name = "bi-adv-fertilizer", count = ingredients.items["bi-adv-fertilizer"]
|
||||
})
|
||||
BioInd.writeDebug("Refunded advanced fertilizer!")
|
||||
end
|
||||
|
||||
set_tile(currentTilename, terrain_name_g1, surface, new_position)
|
||||
create_seedling = surface.create_entity(new_plant)
|
||||
seed_planted_arboretum (event, create_seedling)
|
||||
--- After sucessfully planting a tree or changing the terrain, break out of the loop.
|
||||
break
|
||||
else
|
||||
BioInd.writeDebug("%s: Can't change terrain and plant a tree (%s)",
|
||||
{k, currentTilename or "unknown tile"})
|
||||
end
|
||||
end
|
||||
else
|
||||
BioInd.writeDebug("Terraformer has no recipe!")
|
||||
end
|
||||
end
|
||||
end
|
||||
BioInd.writeDebug("Entered control_arboretum.lua")
|
||||
|
||||
---Arboretum Stuff
|
||||
|
||||
local Event = require('__kry_stdlib__/stdlib/event/event').set_protected_mode(false)
|
||||
|
||||
-- If a recipe with NORMAL FERTILIZER is used, don't fertilize tiles set have "true"
|
||||
-- set! (Fertile tiles set to true in this table can't be made more fertile with
|
||||
-- normal fertilizer, and nothing should grow on the other tiles.)
|
||||
local Terrain_Check_1 = {
|
||||
["grass-1"] = true, -- Fertility: 100%
|
||||
["grass-3"] = true, -- Fertility: 85%
|
||||
["vegetation-green-grass-1"] = true, -- Fertility: 100%
|
||||
["vegetation-green-grass-3"] = true, -- Fertility: 85%
|
||||
}
|
||||
|
||||
-- If a recipe with ADVANCED FERTILIZER is used, don't fertilize tiles set have "true" set!
|
||||
-- (Fertile tiles in this table can't be made more fertile, and nothing should grow on the
|
||||
-- the others tiles!)
|
||||
local Terrain_Check_2 = {
|
||||
["grass-1"] = true, -- Fertility: 100%
|
||||
["vegetation-green-grass-1"] = true, -- Fertility: 100%
|
||||
}
|
||||
|
||||
local plant_radius = 75
|
||||
|
||||
-- Different tiles are used if AlienBiomes is active
|
||||
local AB, terrain_name_g1, terrain_name_g3
|
||||
|
||||
-- OmniFluid replaces all fluids with items, so the arboretum won't have a fluidbox!
|
||||
|
||||
|
||||
local function get_new_position(pos)
|
||||
pos = BioInd.normalize_position(pos) or BioInd.arg_err("nil", position)
|
||||
local xxx = math.random(-plant_radius, plant_radius)
|
||||
local yyy = math.random(-plant_radius, plant_radius)
|
||||
|
||||
return { x = pos.x + xxx, y = pos.y + yyy }
|
||||
end
|
||||
|
||||
|
||||
-- Check that all ingredients are available!
|
||||
local function check_ingredients(arboretum)
|
||||
local recipe = arboretum.get_recipe()
|
||||
if not recipe then
|
||||
--game.print("No recipe set on arboretum")
|
||||
return nil
|
||||
end
|
||||
--game.print("Recipe name: " .. recipe.name)
|
||||
local need = storage.bi_arboretum_recipe_table[recipe.name]
|
||||
if not need then
|
||||
--game.print("No recipe data found for " .. recipe.name)
|
||||
return nil
|
||||
end
|
||||
|
||||
local function check(need, have)
|
||||
for name, amount in pairs(need or {}) do
|
||||
if not (have and have[name]) or (have[name] < amount) then
|
||||
--game.print("Missing ingredient " .. name .. " (have " .. (have[name] or 0) .. " of " .. amount .. ")")
|
||||
return false
|
||||
end
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
local inventory = arboretum.get_inventory(defines.inventory.assembling_machine_input)
|
||||
local inv_contents_raw = inventory and inventory.get_contents() or {}
|
||||
|
||||
-- Check if inv_contents_raw is a map or list, convert if needed
|
||||
local function is_map(t)
|
||||
if type(t) ~= "table" then return false end
|
||||
for k, v in pairs(t) do
|
||||
if type(k) ~= "string" or type(v) ~= "number" then
|
||||
return false
|
||||
end
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
local inv_contents
|
||||
if is_map(inv_contents_raw) then
|
||||
inv_contents = inv_contents_raw
|
||||
else
|
||||
-- Convert list of item stacks to map
|
||||
inv_contents = {}
|
||||
for _, item in pairs(inv_contents_raw) do
|
||||
inv_contents[item.name] = (inv_contents[item.name] or 0) + item.count
|
||||
end
|
||||
end
|
||||
|
||||
local fluid_contents = arboretum.get_fluid_contents() or {}
|
||||
|
||||
--game.print("Inventory contents (map): " .. serpent.line(inv_contents))
|
||||
--game.print("Fluid contents: " .. serpent.line(fluid_contents))
|
||||
|
||||
return need and
|
||||
check(need.items, inv_contents) and
|
||||
check(need.fluids, fluid_contents) and
|
||||
{ ingredients = need, name = recipe.name } or nil
|
||||
end
|
||||
|
||||
|
||||
local function consume_ingredients(arboretum, need)
|
||||
local inventory = arboretum.get_inventory(defines.inventory.assembling_machine_input)
|
||||
for item, i in pairs(need.items or {}) do
|
||||
inventory.remove({ name = item, count = i })
|
||||
BioInd.writeDebug("Removed %s (%s)", { item, i })
|
||||
end
|
||||
BioInd.show("Inventory", inventory.get_contents() or "nil")
|
||||
|
||||
for fluid, f in pairs(need.fluids or {}) do
|
||||
arboretum.remove_fluid({ name = fluid, amount = f })
|
||||
BioInd.writeDebug("Removed %s (%s)", { fluid, f })
|
||||
end
|
||||
BioInd.show("Fluid contents", arboretum.get_fluid_contents() or "nil")
|
||||
end
|
||||
|
||||
|
||||
local function set_tile(current, target, surface, position)
|
||||
if current ~= target then
|
||||
surface.set_tiles(
|
||||
{ { name = target, position = position } },
|
||||
true, -- correct_tiles
|
||||
true, -- remove_colliding_entities
|
||||
true, -- remove_colliding_decoratives
|
||||
true -- raise_event
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
function Get_Arboretum_Recipe(ArboretumTable, event)
|
||||
BioInd.writeDebug("Entered function Get_Arboretum_Recipe(%s, %s)", { ArboretumTable, event })
|
||||
if not ArboretumTable then
|
||||
BioInd.writeDebug("%s is not a valid ArboretumTable. Leaving immediately!")
|
||||
return
|
||||
end
|
||||
|
||||
local arboretum = ArboretumTable.base
|
||||
local new_position, currentTilename
|
||||
local pos, surface, Inventory, stack
|
||||
|
||||
-- 'AlienBiomes' is a bool value -- we don't want to read it again if it's false,
|
||||
-- but only if it hasn't been set yet!
|
||||
AB = storage.compatible.AlienBiomes
|
||||
terrain_name_g1 = terrain_name_g1 or (AB and "vegetation-green-grass-1" or "grass-1")
|
||||
terrain_name_g3 = terrain_name_g3 or (AB and "vegetation-green-grass-3" or "grass-3")
|
||||
|
||||
|
||||
local check = check_ingredients(arboretum)
|
||||
local ingredients, recipe_name
|
||||
if check then
|
||||
--game.print("There are ingredients")
|
||||
ingredients, recipe_name = check.ingredients, check.name
|
||||
else
|
||||
--game.print("No ingredients")
|
||||
end
|
||||
|
||||
if ingredients then
|
||||
|
||||
local create_seedling, new_plant
|
||||
pos = BioInd.normalize_position(arboretum.position) or
|
||||
BioInd.arg_err("nil", "position")
|
||||
surface = arboretum.surface
|
||||
|
||||
-- Just plant a tree and hope the ground is fertile!
|
||||
if recipe_name == "bi-arboretum-r1" then
|
||||
BioInd.writeDebug(tostring(recipe_name) .. ": Just plant a tree")
|
||||
|
||||
--- 10 attempts to find a random spot to plant a tree and/or change terrain
|
||||
for k = 1, 10 do
|
||||
new_position = get_new_position(pos)
|
||||
new_plant = {
|
||||
name = "seedling",
|
||||
position = new_position,
|
||||
force = "neutral"
|
||||
}
|
||||
|
||||
if surface.can_place_entity(new_plant) then
|
||||
consume_ingredients(arboretum, ingredients)
|
||||
create_seedling = surface.create_entity(new_plant)
|
||||
seed_planted_arboretum(event, create_seedling)
|
||||
--- After sucessfully planting a tree, break out of the loop.
|
||||
break
|
||||
else
|
||||
BioInd.writeDebug("Can't plant here (attempt %s)", k)
|
||||
end
|
||||
end
|
||||
-- Fertilize the ground with normal fertilizer. Ignore tiles listed in Terrain_Check_1!
|
||||
elseif recipe_name == "bi-arboretum-r2" then
|
||||
BioInd.writeDebug(tostring(recipe_name) .. ": Just change terrain to grass-3 (basic)")
|
||||
|
||||
for k = 1, 10 do --- 10 attempts to find a random spot to plant a tree and / or change terrain
|
||||
new_position = get_new_position(pos)
|
||||
currentTilename = surface.get_tile(new_position.x, new_position.y).name
|
||||
|
||||
-- We need to fertilize the ground!
|
||||
if Bi_Industries.fertility[currentTilename] and not Terrain_Check_1[currentTilename] then
|
||||
consume_ingredients(arboretum, ingredients)
|
||||
BioInd.writeDebug("%s: Changing terrain from %s to %s (%s)",
|
||||
{ k, currentTilename or "unknown tile",
|
||||
terrain_name_g3, serpent.line(new_position) })
|
||||
set_tile(currentTilename, terrain_name_g3, surface, new_position)
|
||||
--- After sucessfully changing the terrain, break out of the loop.
|
||||
break
|
||||
else
|
||||
BioInd.writeDebug("%s: Can't change terrain (%s)",
|
||||
{ k, currentTilename or "unknown tile" })
|
||||
end
|
||||
end
|
||||
-- Fertilize the ground with advanced fertilizer. Ignore tiles listed in Terrain_Check_2!
|
||||
elseif recipe_name == "bi-arboretum-r3" then
|
||||
BioInd.writeDebug(tostring(recipe_name) .. ": Just change terrain to grass-1 (advanced)")
|
||||
|
||||
for k = 1, 10 do --- 10 attempts to find a random spot to plant a tree and / or change terrain
|
||||
new_position = get_new_position(pos)
|
||||
currentTilename = surface.get_tile(new_position.x, new_position.y).name
|
||||
|
||||
if Bi_Industries.fertility[currentTilename] and currentTilename ~= terrain_name_g1 then
|
||||
consume_ingredients(arboretum, ingredients)
|
||||
BioInd.writeDebug("%s: Changing terrain from %s to %s (%s)",
|
||||
{ k, currentTilename or "unknown tile",
|
||||
terrain_name_g1, serpent.line(new_position) })
|
||||
set_tile(currentTilename, terrain_name_g1, surface, new_position)
|
||||
--- After sucessfully changing the terrain, break out of the loop.
|
||||
break
|
||||
else
|
||||
BioInd.writeDebug("%s: Can't change terrain (%s)",
|
||||
{ k, currentTilename or "unknown tile" })
|
||||
end
|
||||
end
|
||||
-- Fertilize the ground with normal fertilizer. Ignore tiles listed in Terrain_Check_1!
|
||||
-- Also plant a tree.
|
||||
elseif recipe_name == "bi-arboretum-r4" then
|
||||
BioInd.writeDebug(tostring(recipe_name) .. ": Plant Tree AND change the terrain to grass-3 (basic)")
|
||||
|
||||
for k = 1, 10 do --- 10 attempts to find a random spot to plant a tree and / or change terrain
|
||||
new_position = get_new_position(pos)
|
||||
currentTilename = surface.get_tile(new_position.x, new_position.y).name
|
||||
new_plant = {
|
||||
name = "seedling",
|
||||
position = new_position,
|
||||
force = "neutral"
|
||||
}
|
||||
|
||||
-- Test to see if we can plant
|
||||
if surface.can_place_entity(new_plant) and Bi_Industries.fertility[currentTilename] then
|
||||
consume_ingredients(arboretum, ingredients)
|
||||
-- Refund fertilizer -- no need to waste it on fertile ground!
|
||||
if Terrain_Check_1[currentTilename] then
|
||||
arboretum.insert({ name = "fertilizer", count = ingredients.items.fertilizer })
|
||||
BioInd.writeDebug("Refunded fertilizer!")
|
||||
end
|
||||
|
||||
set_tile(currentTilename, terrain_name_g3, surface, new_position)
|
||||
create_seedling = surface.create_entity(new_plant)
|
||||
seed_planted_arboretum(event, create_seedling)
|
||||
--- After sucessfully planting a tree or changing the terrain, break out of the loop.
|
||||
break
|
||||
else
|
||||
BioInd.writeDebug("%s: Can't change terrain and plant a tree (%s)",
|
||||
{ k, currentTilename or "unknown tile" })
|
||||
end
|
||||
end
|
||||
-- Fertilize the ground with advanced fertilizer. Ignore tiles listed in Terrain_Check_2!
|
||||
-- Also plant a tree.
|
||||
elseif recipe_name == "bi-arboretum-r5" then
|
||||
BioInd.writeDebug(tostring(recipe_name) .. ": Plant Tree and change the terrain to grass-1 (advanced)")
|
||||
|
||||
for k = 1, 10 do --- 10 attempts to find a random spot to plant a tree and / or change terrain
|
||||
new_position = get_new_position(pos)
|
||||
currentTilename = surface.get_tile(new_position.x, new_position.y).name
|
||||
new_plant = {
|
||||
name = "seedling",
|
||||
position = new_position,
|
||||
force = "neutral"
|
||||
}
|
||||
|
||||
if surface.can_place_entity(new_plant) and Bi_Industries.fertility[currentTilename] then
|
||||
consume_ingredients(arboretum, ingredients)
|
||||
-- Refund fertilizer -- no need to waste it on fertile ground!
|
||||
if Terrain_Check_2[currentTilename] then
|
||||
arboretum.insert({
|
||||
name = "bi-adv-fertilizer", count = ingredients.items["bi-adv-fertilizer"]
|
||||
})
|
||||
BioInd.writeDebug("Refunded advanced fertilizer!")
|
||||
end
|
||||
|
||||
set_tile(currentTilename, terrain_name_g1, surface, new_position)
|
||||
create_seedling = surface.create_entity(new_plant)
|
||||
seed_planted_arboretum(event, create_seedling)
|
||||
--- After sucessfully planting a tree or changing the terrain, break out of the loop.
|
||||
break
|
||||
else
|
||||
BioInd.writeDebug("%s: Can't change terrain and plant a tree (%s)",
|
||||
{ k, currentTilename or "unknown tile" })
|
||||
end
|
||||
end
|
||||
else
|
||||
BioInd.writeDebug("Terraformer has no recipe!")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,448 +1,465 @@
|
|||
local BioInd = require('common')('Bio_Industries_2')
|
||||
local ICONPATH = "__Bio_Industries_2__/graphics/icons/"
|
||||
|
||||
-- If OwnlyMe's or Tral'a "Robot Tree Farm" mods are active, they will create variatons
|
||||
-- of our variations of tree prototypes. Remove them!
|
||||
local ignore_trees = BioInd.get_tree_ignore_list()
|
||||
local removed = 0
|
||||
|
||||
for name, _ in pairs(ignore_trees or {}) do
|
||||
if name:match("rtf%-bio%-tree%-.+%-%d-%d+") then
|
||||
data.raw.tree[name] = nil
|
||||
ignore_trees[name] = nil
|
||||
removed = removed + 1
|
||||
BioInd.show("Removed tree prototype", name)
|
||||
end
|
||||
end
|
||||
BioInd.writeDebug("Removed %g tree prototypes. Number of trees to ignore now: %g", {removed, table_size(ignore_trees)})
|
||||
|
||||
BI.Settings.BI_Game_Tweaks_Emissions_Multiplier = settings.startup["BI_Game_Tweaks_Emissions_Multiplier"].value
|
||||
|
||||
---- Game Tweaks ---- Tree
|
||||
if BI.Settings.BI_Game_Tweaks_Tree then
|
||||
|
||||
local new_results = {
|
||||
{
|
||||
type = "item",
|
||||
name = "wood",
|
||||
amount_min = 1,
|
||||
amount_max = 6
|
||||
}
|
||||
}
|
||||
|
||||
for tree_name, tree in pairs(data.raw["tree"] or {}) do
|
||||
if tree.minable and not ignore_trees[tree_name] then
|
||||
BioInd.writeDebug("Tree name: %s\tminable.result: %s\tminable.count: %s", {tree.name, (tree.minable and tree.minable.result or "nil"), (tree.minable and tree.minable.count or "nil")}, "line")
|
||||
BioInd.writeDebug("Tree name: %s\tminable.results: %s", {tree.name, (tree.minable and tree.minable.results or "nil")}, "line")
|
||||
--CHECK FOR SINGLE RESULTS
|
||||
-- mining.result may be set although mining.results exists (mining.result
|
||||
-- will be ignored in that case; happens, for example with IR2's rubber
|
||||
-- trees). In this case, overwriting mining.results with the data from
|
||||
-- mining.result could break other mods (e.g. IR2's rubber trees should
|
||||
-- yield "rubber-wood" instead of "wood").
|
||||
if tree.minable.result and not tree.minable.results then
|
||||
BioInd.writeDebug("Tree has minable.result")
|
||||
--CHECK FOR VANILLA TREES WOOD x 4
|
||||
if tree.minable.result == "wood" and tree.minable.count == 4 then
|
||||
BioInd.writeDebug("Changing wood yield of %s to random value.", {tree.name})
|
||||
tree.minable.mining_particle = "wooden-particle"
|
||||
tree.minable.mining_time = 1.5
|
||||
tree.minable.results = new_results
|
||||
-- CONVERT RESULT TO RESULTS
|
||||
else
|
||||
BioInd.writeDebug("Converting tree.minable.result to tree.minable.results!")
|
||||
tree.minable.mining_particle = "wooden-particle"
|
||||
tree.minable.results = {
|
||||
{
|
||||
type = "item",
|
||||
name = tree.minable.result,
|
||||
amount = tree.minable.count,
|
||||
}
|
||||
}
|
||||
end
|
||||
--CHECK FOR RESULTS TABLE
|
||||
elseif tree.minable.results then
|
||||
BioInd.writeDebug("Checking minable.results!")
|
||||
for r, result in pairs(tree.minable.results) do
|
||||
--CHECK FOR RESULT WOOD x 4
|
||||
if result.name == "wood" and result.amount == 4 then
|
||||
BioInd.writeDebug("Changing result %s: %s", {r, result}, "line")
|
||||
result.amount = nil
|
||||
result.amount_min = 1
|
||||
result.amount_max = 6
|
||||
end
|
||||
end
|
||||
tree.minable.result = nil
|
||||
tree.minable.count = nil
|
||||
-- NEITHER RESULT NOR RESULTS EXIST -- CREATE RESULTS!
|
||||
else
|
||||
BioInd.writeDebug("Creating minable.results!")
|
||||
tree.minable.results = new_results
|
||||
end
|
||||
BioInd.writeDebug("New minable.results: %s",
|
||||
{tree.minable and tree.minable.results or "nil"}, "line")
|
||||
else
|
||||
BioInd.writeDebug("Won't change results of %s!", {tree.name})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
---- Game Tweaks ---- Player (Changed for 0.18.34/1.1.4!)
|
||||
if BI.Settings.BI_Game_Tweaks_Player then
|
||||
-- There may be more than one character in the game! Here's a list of
|
||||
-- the character prototype names or patterns matching character prototype
|
||||
-- names we want to ignore.
|
||||
local blacklist = {
|
||||
------------------------------------------------------------------------------------
|
||||
-- Known dummies --
|
||||
------------------------------------------------------------------------------------
|
||||
-- Autodrive
|
||||
"autodrive-passenger",
|
||||
-- AAI Programmable Vehicles
|
||||
"^.+%-_%-driver$",
|
||||
-- Minime
|
||||
"minime_character_dummy",
|
||||
-- Water Turret (currently the dummies are not characters -- but things may change!)
|
||||
"^WT%-.+%-dummy$",
|
||||
------------------------------------------------------------------------------------
|
||||
-- Other characters --
|
||||
------------------------------------------------------------------------------------
|
||||
-- Bob's Classes and Multiple characters mod
|
||||
"^.*bob%-character%-.+$",
|
||||
}
|
||||
|
||||
local whitelist = {
|
||||
-- Default character
|
||||
"^character$",
|
||||
-- Characters compatible with Minime
|
||||
"^.*skin.*$",
|
||||
}
|
||||
|
||||
local tweaks = {
|
||||
loot_pickup_distance = 5, -- default 2
|
||||
build_distance = 20, -- Vanilla 6
|
||||
drop_item_distance = 20, -- Vanilla 6
|
||||
reach_distance = 20, -- Vanilla 6
|
||||
item_pickup_distance = 6, -- Vanilla 1
|
||||
reach_resource_distance = 6, -- Vanilla 2.7
|
||||
}
|
||||
|
||||
local found, ignore
|
||||
for char_name, character in pairs(data.raw.character) do
|
||||
BioInd.show("Checking character", char_name)
|
||||
found = false
|
||||
|
||||
for w, w_pattern in ipairs(whitelist) do
|
||||
if char_name == w_pattern or char_name:match(w_pattern) then
|
||||
ignore = false
|
||||
BioInd.show("Found whitelisted character name", char_name)
|
||||
for b, b_pattern in ipairs(blacklist) do
|
||||
|
||||
if char_name == b_pattern or char_name:match(b_pattern) then
|
||||
BioInd.writeDebug("%s is on the ignore list!", char_name)
|
||||
-- Mark character as found
|
||||
ignore = true
|
||||
break
|
||||
end
|
||||
end
|
||||
if not ignore then
|
||||
found = true
|
||||
break
|
||||
end
|
||||
end
|
||||
if found then
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
-- Apply tweaks
|
||||
if found then
|
||||
for tweak_name, tweak in pairs(tweaks) do
|
||||
if character[tweak_name] < tweak then
|
||||
BioInd.writeDebug("Changing %s from %s to %s", {tweak_name, character[tweak_name], tweak})
|
||||
character[tweak_name] = tweak
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- Moved to data-updates.lua for 0.18.34/1.1.4!
|
||||
|
||||
|
||||
---- Game Tweaks ---- Production science pack recipe
|
||||
if data.raw.recipe["bi-production-science-pack"] then
|
||||
BI_Functions.lib.allow_productivity("bi-production-science-pack")
|
||||
thxbob.lib.tech.add_recipe_unlock("production-science-pack", "bi-production-science-pack")
|
||||
BioInd.writeDebug("Unlock for recipe \"bi-production-science-pack\" added.")
|
||||
end
|
||||
|
||||
---- Game Tweaks ---- Bots
|
||||
if BI.Settings.BI_Game_Tweaks_Bot then
|
||||
-- Logistic & Construction bots can't catch fire or be mined
|
||||
local function immunify(bot)
|
||||
-- Changed for 0.18.34/1.1.4!
|
||||
local can_insert = true
|
||||
bot.flags = bot.flags or {}
|
||||
bot.resistances = bot.resistances or {}
|
||||
for f, flag in pairs(bot.flags) do
|
||||
if flag == "not-flammable" then
|
||||
can_insert = false
|
||||
break
|
||||
end
|
||||
end
|
||||
if can_insert then
|
||||
table.insert(bot.flags, "not-flammable")
|
||||
BioInd.writeDebug("Added flag \"not-flammable\" to %s", {bot.name})
|
||||
end
|
||||
|
||||
can_insert = true
|
||||
for r, resistance in pairs(bot.resistances) do
|
||||
if resistance.type == "fire" and resistance.percent ~= 100 then
|
||||
BioInd.writeDebug("Change resistance against \"fire\" from %s to 100 %% for %s", {resistance.percent or "nil", bot.name})
|
||||
bot.resistances[r] = {type = "fire", percent = 100}
|
||||
can_insert = false
|
||||
break
|
||||
end
|
||||
end
|
||||
if can_insert then
|
||||
table.insert(bot.resistances, {type = "fire", percent = 100})
|
||||
BioInd.writeDebug("Added resistance against \"fire\" to %s", {bot.name})
|
||||
end
|
||||
|
||||
bot.minable = nil
|
||||
BioInd.writeDebug("Made %s unminable", {bot.name})
|
||||
end
|
||||
|
||||
--catches modded bots too
|
||||
for _, bot in pairs(data.raw['construction-robot']) do
|
||||
immunify(bot)
|
||||
end
|
||||
|
||||
for _, bot in pairs(data.raw['logistic-robot']) do
|
||||
immunify(bot)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
---- Game Tweaks stack size ----
|
||||
if BI.Settings.BI_Game_Tweaks_Stack_Size then
|
||||
-- Changed for 0.18.34/1.1.4
|
||||
local tweaks = {
|
||||
["wood"] = {value = 400, se_limit = 200},
|
||||
["stone"] = {value = 400, se_limit = 50},
|
||||
["stone-crushed"] = {value = 800, se_limit = 200},
|
||||
["concrete"] = {value = 400, se_limit = 200},
|
||||
["slag"] = {value = 800, se_limit = 200},
|
||||
}
|
||||
local item
|
||||
local five_dim = BioInd.get_startup_setting("5d-change-stack")
|
||||
|
||||
for tweak_name, tweak in pairs(tweaks) do
|
||||
item = data.raw.item[tweak_name]
|
||||
if item then
|
||||
-- Only adjust stack_size if 5Dim sets multiplier of 1 or is not active!
|
||||
if item.stack_size < tweak.value and (five_dim == 1 or not five_dim) then
|
||||
BioInd.writeDebug("Changing stacksize of %s from %s to %s",
|
||||
{item.name, item.stack_size, tweak.value})
|
||||
item.stack_size = tweak.value
|
||||
end
|
||||
if mods["space-exploration"] then
|
||||
item.stack_size = math.min(tweak.se_limit, item.stack_size)
|
||||
BioInd.show("Adjusted stack_size on account of SE", item.stack_size )
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--- Update fuel_emissions_multiplier values
|
||||
if BI.Settings.BI_Game_Tweaks_Emissions_Multiplier then
|
||||
for item, factor in pairs({
|
||||
["pellet-coke"] = 0.80,
|
||||
["enriched-fuel"] = 0.90,
|
||||
["solid-fuel"] = 1.00,
|
||||
["solid-carbon"] = 1.05,
|
||||
["carbon"] = 1.05,
|
||||
["wood-bricks"] = 1.20,
|
||||
["rocket-fuel"] = 1.20,
|
||||
["bi-seed"] = 1.30,
|
||||
["seedling"] = 1.30,
|
||||
["bi-wooden-pole-big"] = 1.30,
|
||||
["bi-wooden-pole-huge"] = 1.30,
|
||||
["bi-wooden-fence"] = 1.30,
|
||||
["bi-wood-pipe"] = 1.30,
|
||||
["bi-wood-pipe-to-ground"] = 1.30,
|
||||
["bi-wooden-chest-large"] = 1.30,
|
||||
["bi-wooden-chest-huge"] = 1.30,
|
||||
["bi-wooden-chest-giga"] = 1.30,
|
||||
["bi-ash"] = 1.30,
|
||||
["ash"] = 1.30,
|
||||
["wood-charcoal"] = 1.25,
|
||||
["cellulose-fiber"] = 1.40,
|
||||
["bi-woodpulp"] = 1.40,
|
||||
["solid-coke"] = 1.40,
|
||||
["wood-pellets"] = 1.40,
|
||||
["coal-crushed"] = 1.50,
|
||||
["wood"] = 1.60,
|
||||
["coal"] = 2.00,
|
||||
-- Removed in 0.17.48/0.18.16
|
||||
}) do
|
||||
BI_Functions.lib.fuel_emissions_multiplier_update(item, factor)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
-- Make vanilla and Bio boilers exchangeable
|
||||
if BI.Settings.BI_Bio_Fuel then
|
||||
local boiler = data.raw["boiler"]["boiler"]
|
||||
local boiler_group = boiler.fast_replaceable_group or "boiler"
|
||||
|
||||
boiler.fast_replaceable_group = boiler_group
|
||||
data.raw["boiler"]["bi-bio-boiler"].fast_replaceable_group = boiler_group
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
if mods["Krastorio2"] then
|
||||
-- Krastorio² needs much more wood than usually provided by Bio Industries. If Krastorio² is
|
||||
-- active, BI should produce much more wood/wood pulp. For better baĺancing, our recipes should
|
||||
-- also be changed to require more wood/wood pulp as ingredients.
|
||||
-- Recipes for making wood should also use/produce more seeds, seedlings, and water. It shouldn't
|
||||
-- be necessary to increase the input of ash and fertilizer in these recipes as they already
|
||||
-- require more wood/wood pulp.
|
||||
local update = {
|
||||
"wood", "bi-woodpulp",
|
||||
"bi-seed", "seedling", "water",
|
||||
}
|
||||
for _, recipe in pairs(data.raw.recipe) do
|
||||
BioInd.writeDebug("Recipe has \"mod\" property: %s", {recipe.mod and true or false})
|
||||
if recipe.mod == "Bio_Industries_2" then
|
||||
krastorio.recipes.multiplyIngredients(recipe.name, update, 4)
|
||||
krastorio.recipes.multiplyProducts(recipe.name, update, 4)
|
||||
BioInd.writeDebug("Changed ingredients for %s: %s", {recipe and recipe.name or "nil", recipe and recipe.ingredients or "nil"})
|
||||
BioInd.writeDebug("Changed results for %s: %s", {recipe and recipe.name or "nil", recipe and recipe.results or "nil"})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
-- Make sure fertilizers have the "place_as_tile" property!
|
||||
local AlienBiomes = data.raw.tile["vegetation-green-grass-3"] and
|
||||
data.raw.tile["vegetation-green-grass-1"] and true or false
|
||||
|
||||
-- We've already set place_as_tile. If it doesn't exist, our fertilizer definition has
|
||||
-- been overwritten by some other mod, so we restore icons and localization and add
|
||||
-- place_as_tile again!
|
||||
local fertilizer = data.raw.item["fertilizer"]
|
||||
if not fertilizer.place_as_tile then
|
||||
fertilizer.place_as_tile = {
|
||||
result = AlienBiomes and "vegetation-green-grass-3" or "grass-3",
|
||||
condition_size = 1,
|
||||
condition = { layers = { water_tile = true }}
|
||||
}
|
||||
fertilizer.icon = ICONPATH .. "fertilizer_64.png"
|
||||
fertilizer.icon_size = 64
|
||||
fertilizer.icons = {
|
||||
{
|
||||
icon = ICONPATH .. "fertilizer_64.png",
|
||||
icon_size = 64,
|
||||
}
|
||||
}
|
||||
fertilizer.localised_name = {"BI-item-name.fertilizer"}
|
||||
fertilizer.localised_description = {"BI-item-description.fertilizer"}
|
||||
end
|
||||
|
||||
data.raw.item["bi-adv-fertilizer"].place_as_tile = {
|
||||
result = AlienBiomes and "vegetation-green-grass-1" or "grass-1",
|
||||
condition_size = 1,
|
||||
condition = { layers = { water_tile = true }}
|
||||
}
|
||||
|
||||
if mods["pycoalprocessing"] and BI.Settings.BI_Bio_Fuel then
|
||||
-- Bio_Fuel/recipe.lua:30: {type = "item", name = "bi-ash", amount = 15}
|
||||
thxbob.lib.recipe.remove_result ("bi-basic-gas-processing", "bi-ash")
|
||||
thxbob.lib.recipe.add_result("bi-basic-gas-processing", {
|
||||
type = "item",
|
||||
name = "ash",
|
||||
amount = 15
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
-- Moved to data-updates.lua for 0.18.34/1.1.4!
|
||||
|
||||
|
||||
--- If Space Exploration Mod is installed.
|
||||
if mods["space-exploration"] then
|
||||
-- Space Exploration Mod likes Stack Sizes to be 200 max.
|
||||
-- Changed in 1.1.11
|
||||
local tweaks = {
|
||||
["bi-solar-mat"] = 400,
|
||||
["bi-seed"] = 800,
|
||||
["seedling"] = 400,
|
||||
["bi-woodpulp"] = 800,
|
||||
["bi-ash"] = 400,
|
||||
["wood-charcoal"] = 400,
|
||||
["pellet-coke"] = 400,
|
||||
["stone-crushed"] = 400,
|
||||
}
|
||||
local item
|
||||
|
||||
for tweak_name, tweak in pairs(tweaks) do
|
||||
item = data.raw.item[tweak_name]
|
||||
if item and item.stack_size then
|
||||
item.stack_size = 200
|
||||
end
|
||||
end
|
||||
|
||||
if not mods["Natural_Evolution_Buildings"] then
|
||||
|
||||
local ammo_tweaks = {
|
||||
["bi-dart-magazine-basic"] = 400,
|
||||
["bi-dart-magazine-standard"] = 400,
|
||||
["bi-dart-magazine-enhanced"] = 400,
|
||||
["bi-dart-magazine-poison"] = 400,
|
||||
}
|
||||
local item
|
||||
|
||||
for tweak_name, tweak in pairs(ammo_tweaks) do
|
||||
item = data.raw.ammo[tweak_name]
|
||||
item.stack_size = 200
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if BI.Settings.Bio_Cannon then
|
||||
local default_target_masks = data.raw["utility-constants"].default.default_trigger_target_mask_by_type
|
||||
default_target_masks["unit-spawner"] = default_target_masks["unit-spawner"] or {"common"} -- everything should have "common", unless there is specific reason not to
|
||||
table.insert(default_target_masks["unit-spawner"], "Bio_Cannon_Ammo")
|
||||
|
||||
for w, worm in pairs(data.raw.turret) do
|
||||
worm.trigger_target_mask = worm.trigger_target_mask or default_target_masks["turret"] or {"common"}
|
||||
table.insert(worm.trigger_target_mask, "Bio_Cannon_Ammo")
|
||||
end
|
||||
end
|
||||
|
||||
------------------------------------------------------------------------------------
|
||||
-- Add icons to our prototypes
|
||||
BioInd.BI_add_icons()
|
||||
|
||||
|
||||
---TESTING!
|
||||
|
||||
|
||||
for k, v in pairs(data.raw) do
|
||||
for t, p in pairs(v) do
|
||||
if p.se_allow_in_space then
|
||||
BioInd.writeDebug("%s (%s) can be built in space!", {p.name, t})
|
||||
end
|
||||
end
|
||||
end
|
||||
local BioInd = require('common')('Bio_Industries_2')
|
||||
local ICONPATH = "__Bio_Industries_2__/graphics/icons/"
|
||||
|
||||
-- If OwnlyMe's or Tral'a "Robot Tree Farm" mods are active, they will create variatons
|
||||
-- of our variations of tree prototypes. Remove them!
|
||||
local ignore_trees = BioInd.get_tree_ignore_list()
|
||||
local removed = 0
|
||||
|
||||
for name, _ in pairs(ignore_trees or {}) do
|
||||
if name:match("rtf%-bio%-tree%-.+%-%d-%d+") then
|
||||
data.raw.tree[name] = nil
|
||||
ignore_trees[name] = nil
|
||||
removed = removed + 1
|
||||
BioInd.show("Removed tree prototype", name)
|
||||
end
|
||||
end
|
||||
BioInd.writeDebug("Removed %g tree prototypes. Number of trees to ignore now: %g", { removed, table_size(ignore_trees) })
|
||||
|
||||
BI.Settings.BI_Game_Tweaks_Emissions_Multiplier = settings.startup["BI_Game_Tweaks_Emissions_Multiplier"].value
|
||||
|
||||
---- Game Tweaks ---- Tree
|
||||
if BI.Settings.BI_Game_Tweaks_Tree then
|
||||
local new_results = {
|
||||
{
|
||||
type = "item",
|
||||
name = "wood",
|
||||
amount_min = 1,
|
||||
amount_max = 6
|
||||
}
|
||||
}
|
||||
|
||||
for tree_name, tree in pairs(data.raw["tree"] or {}) do
|
||||
if tree.minable and not ignore_trees[tree_name] then
|
||||
BioInd.writeDebug("Tree name: %s\tminable.result: %s\tminable.count: %s",
|
||||
{ tree.name, (tree.minable and tree.minable.result or "nil"), (tree.minable and tree.minable.count or "nil") },
|
||||
"line")
|
||||
BioInd.writeDebug("Tree name: %s\tminable.results: %s",
|
||||
{ tree.name, (tree.minable and tree.minable.results or "nil") }, "line")
|
||||
--CHECK FOR SINGLE RESULTS
|
||||
-- mining.result may be set although mining.results exists (mining.result
|
||||
-- will be ignored in that case; happens, for example with IR2's rubber
|
||||
-- trees). In this case, overwriting mining.results with the data from
|
||||
-- mining.result could break other mods (e.g. IR2's rubber trees should
|
||||
-- yield "rubber-wood" instead of "wood").
|
||||
if tree.minable.result and not tree.minable.results then
|
||||
BioInd.writeDebug("Tree has minable.result")
|
||||
--CHECK FOR VANILLA TREES WOOD x 4
|
||||
if tree.minable.result == "wood" and tree.minable.count == 4 then
|
||||
BioInd.writeDebug("Changing wood yield of %s to random value.", { tree.name })
|
||||
tree.minable.mining_particle = "wooden-particle"
|
||||
tree.minable.mining_time = 1.5
|
||||
tree.minable.results = new_results
|
||||
-- CONVERT RESULT TO RESULTS
|
||||
else
|
||||
BioInd.writeDebug("Converting tree.minable.result to tree.minable.results!")
|
||||
tree.minable.mining_particle = "wooden-particle"
|
||||
tree.minable.results = {
|
||||
{
|
||||
type = "item",
|
||||
name = tree.minable.result,
|
||||
amount = tree.minable.count,
|
||||
}
|
||||
}
|
||||
end
|
||||
--CHECK FOR RESULTS TABLE
|
||||
elseif tree.minable.results then
|
||||
BioInd.writeDebug("Checking minable.results!")
|
||||
for r, result in pairs(tree.minable.results) do
|
||||
--CHECK FOR RESULT WOOD x 4
|
||||
if result.name == "wood" and result.amount == 4 then
|
||||
BioInd.writeDebug("Changing result %s: %s", { r, result }, "line")
|
||||
result.amount = nil
|
||||
result.amount_min = 1
|
||||
result.amount_max = 6
|
||||
end
|
||||
end
|
||||
tree.minable.result = nil
|
||||
tree.minable.count = nil
|
||||
-- NEITHER RESULT NOR RESULTS EXIST -- CREATE RESULTS!
|
||||
else
|
||||
BioInd.writeDebug("Creating minable.results!")
|
||||
tree.minable.results = new_results
|
||||
end
|
||||
BioInd.writeDebug("New minable.results: %s",
|
||||
{ tree.minable and tree.minable.results or "nil" }, "line")
|
||||
else
|
||||
BioInd.writeDebug("Won't change results of %s!", { tree.name })
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
---- Game Tweaks ---- Player (Changed for 0.18.34/1.1.4!)
|
||||
if BI.Settings.BI_Game_Tweaks_Player then
|
||||
-- There may be more than one character in the game! Here's a list of
|
||||
-- the character prototype names or patterns matching character prototype
|
||||
-- names we want to ignore.
|
||||
local blacklist = {
|
||||
------------------------------------------------------------------------------------
|
||||
-- Known dummies --
|
||||
------------------------------------------------------------------------------------
|
||||
-- Autodrive
|
||||
"autodrive-passenger",
|
||||
-- AAI Programmable Vehicles
|
||||
"^.+%-_%-driver$",
|
||||
-- Minime
|
||||
"minime_character_dummy",
|
||||
-- Water Turret (currently the dummies are not characters -- but things may change!)
|
||||
"^WT%-.+%-dummy$",
|
||||
------------------------------------------------------------------------------------
|
||||
-- Other characters --
|
||||
------------------------------------------------------------------------------------
|
||||
-- Bob's Classes and Multiple characters mod
|
||||
"^.*bob%-character%-.+$",
|
||||
}
|
||||
|
||||
local whitelist = {
|
||||
-- Default character
|
||||
"^character$",
|
||||
-- Characters compatible with Minime
|
||||
"^.*skin.*$",
|
||||
}
|
||||
|
||||
local tweaks = {
|
||||
loot_pickup_distance = 5, -- default 2
|
||||
build_distance = 20, -- Vanilla 6
|
||||
drop_item_distance = 20, -- Vanilla 6
|
||||
reach_distance = 20, -- Vanilla 6
|
||||
item_pickup_distance = 6, -- Vanilla 1
|
||||
reach_resource_distance = 6, -- Vanilla 2.7
|
||||
}
|
||||
|
||||
local found, ignore
|
||||
for char_name, character in pairs(data.raw.character) do
|
||||
BioInd.show("Checking character", char_name)
|
||||
found = false
|
||||
|
||||
for w, w_pattern in ipairs(whitelist) do
|
||||
if char_name == w_pattern or char_name:match(w_pattern) then
|
||||
ignore = false
|
||||
BioInd.show("Found whitelisted character name", char_name)
|
||||
for b, b_pattern in ipairs(blacklist) do
|
||||
if char_name == b_pattern or char_name:match(b_pattern) then
|
||||
BioInd.writeDebug("%s is on the ignore list!", char_name)
|
||||
-- Mark character as found
|
||||
ignore = true
|
||||
break
|
||||
end
|
||||
end
|
||||
if not ignore then
|
||||
found = true
|
||||
break
|
||||
end
|
||||
end
|
||||
if found then
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
-- Apply tweaks
|
||||
if found then
|
||||
for tweak_name, tweak in pairs(tweaks) do
|
||||
if character[tweak_name] < tweak then
|
||||
BioInd.writeDebug("Changing %s from %s to %s", { tweak_name, character[tweak_name], tweak })
|
||||
character[tweak_name] = tweak
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
---- Game Tweaks ---- Production science pack recipe
|
||||
if data.raw.recipe["bi-production-science-pack"] then
|
||||
BI_Functions.lib.allow_productivity("bi-production-science-pack")
|
||||
thxbob.lib.tech.add_recipe_unlock("production-science-pack", "bi-production-science-pack")
|
||||
BioInd.writeDebug("Unlock for recipe \"bi-production-science-pack\" added.")
|
||||
end
|
||||
|
||||
---- Game Tweaks ---- Bots
|
||||
if BI.Settings.BI_Game_Tweaks_Bot then
|
||||
-- Logistic & Construction bots can't catch fire or be mined
|
||||
local function immunify(bot)
|
||||
local can_insert = true
|
||||
bot.flags = bot.flags or {}
|
||||
bot.resistances = bot.resistances or {}
|
||||
for f, flag in pairs(bot.flags) do
|
||||
if flag == "not-flammable" then
|
||||
can_insert = false
|
||||
break
|
||||
end
|
||||
end
|
||||
if can_insert then
|
||||
table.insert(bot.flags, "not-flammable")
|
||||
BioInd.writeDebug("Added flag \"not-flammable\" to %s", { bot.name })
|
||||
end
|
||||
|
||||
can_insert = true
|
||||
for r, resistance in pairs(bot.resistances) do
|
||||
if resistance.type == "fire" and resistance.percent ~= 100 then
|
||||
BioInd.writeDebug("Change resistance against \"fire\" from %s to 100 %% for %s",
|
||||
{ resistance.percent or "nil", bot.name })
|
||||
bot.resistances[r] = { type = "fire", percent = 100 }
|
||||
can_insert = false
|
||||
break
|
||||
end
|
||||
end
|
||||
if can_insert then
|
||||
table.insert(bot.resistances, { type = "fire", percent = 100 })
|
||||
BioInd.writeDebug("Added resistance against \"fire\" to %s", { bot.name })
|
||||
end
|
||||
|
||||
bot.minable = nil
|
||||
BioInd.writeDebug("Made %s unminable", { bot.name })
|
||||
end
|
||||
|
||||
--catches modded bots too
|
||||
for _, bot in pairs(data.raw['construction-robot']) do
|
||||
immunify(bot)
|
||||
end
|
||||
|
||||
for _, bot in pairs(data.raw['logistic-robot']) do
|
||||
immunify(bot)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
---- Game Tweaks stack size ----
|
||||
if BI.Settings.BI_Game_Tweaks_Stack_Size then
|
||||
-- Changed for 0.18.34/1.1.4
|
||||
local tweaks = {
|
||||
["wood"] = { value = 400, se_limit = 200 },
|
||||
["stone"] = { value = 400, se_limit = 50 },
|
||||
["stone-crushed"] = { value = 800, se_limit = 200 },
|
||||
["concrete"] = { value = 400, se_limit = 200 },
|
||||
["slag"] = { value = 800, se_limit = 200 },
|
||||
}
|
||||
local item
|
||||
local five_dim = BioInd.get_startup_setting("5d-change-stack")
|
||||
|
||||
for tweak_name, tweak in pairs(tweaks) do
|
||||
item = data.raw.item[tweak_name]
|
||||
if item then
|
||||
-- Only adjust stack_size if 5Dim sets multiplier of 1 or is not active!
|
||||
if item.stack_size < tweak.value and (five_dim == 1 or not five_dim) then
|
||||
BioInd.writeDebug("Changing stacksize of %s from %s to %s",
|
||||
{ item.name, item.stack_size, tweak.value })
|
||||
item.stack_size = tweak.value
|
||||
end
|
||||
if mods["space-exploration"] then
|
||||
item.stack_size = math.min(tweak.se_limit, item.stack_size)
|
||||
BioInd.show("Adjusted stack_size on account of SE", item.stack_size)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--- Update fuel_emissions_multiplier values
|
||||
if BI.Settings.BI_Game_Tweaks_Emissions_Multiplier then
|
||||
for item, factor in pairs({
|
||||
["pellet-coke"] = 0.80,
|
||||
["enriched-fuel"] = 0.90,
|
||||
["solid-fuel"] = 1.00,
|
||||
["solid-carbon"] = 1.05,
|
||||
["carbon"] = 1.05,
|
||||
["bob-carbon"] = 1.05,
|
||||
["wood-bricks"] = 1.10,
|
||||
["rocket-fuel"] = 1.20,
|
||||
["bi-seed"] = 1.30,
|
||||
["tree-seed"] = 1.30,
|
||||
["seedling"] = 1.30,
|
||||
["bi-wooden-pole-big"] = 1.30,
|
||||
["bi-wooden-pole-huge"] = 1.30,
|
||||
["bi-wooden-fence"] = 1.30,
|
||||
["bi-wood-pipe"] = 1.30,
|
||||
["bi-wood-pipe-to-ground"] = 1.30,
|
||||
["bi-wooden-chest-large"] = 1.30,
|
||||
["bi-wooden-chest-huge"] = 1.30,
|
||||
["bi-wooden-chest-giga"] = 1.30,
|
||||
["bi-ash"] = 1.30,
|
||||
["ash"] = 1.30,
|
||||
["wood-charcoal"] = 1.25,
|
||||
["cellulose-fiber"] = 1.40,
|
||||
["bi-woodpulp"] = 1.40,
|
||||
["solid-coke"] = 1.40,
|
||||
["wood-pellets"] = 1.40,
|
||||
["coal-crushed"] = 1.50,
|
||||
["wood"] = 1.60,
|
||||
["coal"] = 2.00,
|
||||
}) do
|
||||
BI_Functions.lib.fuel_emissions_multiplier_update(item, factor)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
-- Make vanilla and Bio boilers exchangeable
|
||||
if BI.Settings.BI_Bio_Fuel then
|
||||
local boiler = data.raw["boiler"]["boiler"]
|
||||
local boiler_group = boiler.fast_replaceable_group or "boiler"
|
||||
|
||||
boiler.fast_replaceable_group = boiler_group
|
||||
data.raw["boiler"]["bi-bio-boiler"].fast_replaceable_group = boiler_group
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
if mods["Krastorio2"] or mods["Krastorio2-spaced-out"] then
|
||||
-- Krastorio² needs much more wood than usually provided by Bio Industries. If Krastorio² is
|
||||
-- active, BI should produce much more wood/wood pulp. For better baĺancing, our recipes should
|
||||
-- also be changed to require more wood/wood pulp as ingredients.
|
||||
-- Recipes for making wood should also use/produce more seeds, seedlings, and water. It shouldn't
|
||||
-- be necessary to increase the input of ash and fertilizer in these recipes as they already
|
||||
-- require more wood/wood pulp.
|
||||
local update = {
|
||||
"wood", "bi-woodpulp",
|
||||
"bi-seed", "tree-seed","seedling", "water"
|
||||
}
|
||||
local multiply = function(items)
|
||||
for _, item in pairs(items) do
|
||||
for _, updateItem in pairs(update) do
|
||||
if item.name == updateItem then
|
||||
if item.amount then
|
||||
item.amount = item.amount * 4
|
||||
end
|
||||
if item.amount_min then
|
||||
item.amount_min = item.amount_min * 4
|
||||
end
|
||||
if item.amount_max then
|
||||
item.amount_max = item.amount_max * 4
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
for _, recipe in pairs(data.raw.recipe) do
|
||||
BioInd.writeDebug("Recipe has \"mod\" property: %s", { recipe.mod and true or false })
|
||||
if recipe.mod == "Bio_Industries_2" then
|
||||
multiply(recipe.ingredients)
|
||||
multiply(recipe.results)
|
||||
BioInd.writeDebug("Changed ingredients for %s: %s",
|
||||
{ recipe and recipe.name or "nil", recipe and recipe.ingredients or "nil" })
|
||||
BioInd.writeDebug("Changed results for %s: %s",
|
||||
{ recipe and recipe.name or "nil", recipe and recipe.results or "nil" })
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
-- Make sure fertilizers have the "place_as_tile" property!
|
||||
local AlienBiomes = data.raw.tile["vegetation-green-grass-3"] and
|
||||
data.raw.tile["vegetation-green-grass-1"] and true or false
|
||||
|
||||
-- We've already set place_as_tile. If it doesn't exist, our fertilizer definition has
|
||||
-- been overwritten by some other mod, so we restore icons and localization and add
|
||||
-- place_as_tile again!
|
||||
local fertilizer = data.raw.item["fertilizer"]
|
||||
if not fertilizer.place_as_tile then
|
||||
fertilizer.place_as_tile = {
|
||||
result = AlienBiomes and "vegetation-green-grass-3" or "grass-3",
|
||||
condition_size = 1,
|
||||
condition = { layers = { water_tile = true } }
|
||||
}
|
||||
fertilizer.icon = ICONPATH .. "fertilizer.png"
|
||||
fertilizer.icon_size = 64
|
||||
fertilizer.icons = {
|
||||
{
|
||||
icon = ICONPATH .. "fertilizer.png",
|
||||
icon_size = 64,
|
||||
}
|
||||
}
|
||||
fertilizer.localised_name = { "BI-item-name.fertilizer" }
|
||||
fertilizer.localised_description = { "BI-item-description.fertilizer" }
|
||||
end
|
||||
|
||||
data.raw.item["bi-adv-fertilizer"].place_as_tile = {
|
||||
result = AlienBiomes and "vegetation-green-grass-1" or "grass-1",
|
||||
condition_size = 1,
|
||||
condition = { layers = { water_tile = true } }
|
||||
}
|
||||
|
||||
if mods["pycoalprocessing"] and BI.Settings.BI_Bio_Fuel then
|
||||
-- Bio_Fuel/recipe.lua:30: {type = "item", name = "bi-ash", amount = 15}
|
||||
thxbob.lib.recipe.remove_result("bi-basic-gas-processing", "bi-ash")
|
||||
thxbob.lib.recipe.add_result("bi-basic-gas-processing", {
|
||||
type = "item",
|
||||
name = "ash",
|
||||
amount = 15
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
--- If Space Exploration Mod is installed.
|
||||
if mods["space-exploration"] then
|
||||
-- Space Exploration Mod likes Stack Sizes to be 200 max.
|
||||
-- Changed in 1.1.11
|
||||
local tweaks = {
|
||||
["bi-solar-mat"] = 400,
|
||||
["bi-seed"] = 800,
|
||||
["tree-seed"] = 800,
|
||||
["seedling"] = 400,
|
||||
["bi-woodpulp"] = 800,
|
||||
["bi-ash"] = 400,
|
||||
["wood-charcoal"] = 400,
|
||||
["pellet-coke"] = 400,
|
||||
["stone-crushed"] = 400,
|
||||
}
|
||||
local item
|
||||
|
||||
for tweak_name, tweak in pairs(tweaks) do
|
||||
item = data.raw.item[tweak_name]
|
||||
if item and item.stack_size then
|
||||
item.stack_size = 200
|
||||
end
|
||||
end
|
||||
|
||||
if not mods["Natural_Evolution_Buildings"] then
|
||||
local ammo_tweaks = {
|
||||
["bi-dart-magazine-basic"] = 400,
|
||||
["bi-dart-magazine-standard"] = 400,
|
||||
["bi-dart-magazine-enhanced"] = 400,
|
||||
["bi-dart-magazine-poison"] = 400,
|
||||
}
|
||||
local item
|
||||
|
||||
for tweak_name, tweak in pairs(ammo_tweaks) do
|
||||
item = data.raw.ammo[tweak_name]
|
||||
item.stack_size = 200
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if BI.Settings.Bio_Cannon then
|
||||
local default_target_masks = data.raw["utility-constants"].default.default_trigger_target_mask_by_type
|
||||
default_target_masks["unit-spawner"] = default_target_masks["unit-spawner"] or
|
||||
{ "common" } -- everything should have "common", unless there is specific reason not to
|
||||
table.insert(default_target_masks["unit-spawner"], "Bio_Cannon_Ammo")
|
||||
|
||||
for w, worm in pairs(data.raw.turret) do
|
||||
worm.trigger_target_mask = worm.trigger_target_mask or default_target_masks["turret"] or { "common" }
|
||||
table.insert(worm.trigger_target_mask, "Bio_Cannon_Ammo")
|
||||
end
|
||||
end
|
||||
|
||||
------------------------------------------------------------------------------------
|
||||
-- Add icons to our prototypes
|
||||
BioInd.BI_add_icons()
|
||||
|
||||
|
||||
---TESTING!
|
||||
|
||||
|
||||
for k, v in pairs(data.raw) do
|
||||
for t, p in pairs(v) do
|
||||
if p.se_allow_in_space then
|
||||
BioInd.writeDebug("%s (%s) can be built in space!", { p.name, t })
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,126 +1,123 @@
|
|||
local BioInd = require('common')('Bio_Industries_2')
|
||||
|
||||
if not BI then BI = {} end
|
||||
if not BI.Settings then BI.Settings = {} end
|
||||
|
||||
if not BI_Functions then BI_Functions = {} end
|
||||
if not BI_Functions.lib then BI_Functions.lib = {} end
|
||||
|
||||
if not thxbob then thxbob = {} end
|
||||
if not thxbob.lib then thxbob.lib = {} end
|
||||
|
||||
for var, name in pairs({
|
||||
Bio_Cannon = "BI_Bio_Cannon",
|
||||
BI_Bio_Fuel = "BI_Bio_Fuel",
|
||||
BI_Easy_Bio_Gardens = "BI_Easy_Bio_Gardens",
|
||||
BI_Bigger_Wooden_Chests = "BI_Bigger_Wooden_Chests",
|
||||
BI_Game_Tweaks_Stack_Size = "BI_Game_Tweaks_Stack_Size",
|
||||
BI_Game_Tweaks_Recipe = "BI_Game_Tweaks_Recipe",
|
||||
BI_Game_Tweaks_Tree = "BI_Game_Tweaks_Tree",
|
||||
BI_Game_Tweaks_Small_Tree_Collisionbox = "BI_Game_Tweaks_Small_Tree_Collisionbox",
|
||||
BI_Game_Tweaks_Player = "BI_Game_Tweaks_Player",
|
||||
BI_Game_Tweaks_Disassemble = "BI_Game_Tweaks_Disassemble",
|
||||
BI_Game_Tweaks_Bot = "BI_Game_Tweaks_Bot",
|
||||
BI_Solar_Additions = "BI_Solar_Additions"
|
||||
}) do
|
||||
BI.Settings[var] = BioInd.get_startup_setting(name)
|
||||
end
|
||||
|
||||
--- Help Files
|
||||
require ("libs.item-functions") -- From Bob's Libary
|
||||
require ("libs.recipe-functions") -- From Bob's Libary
|
||||
require ("libs.technology-functions") -- From Bob's Libary
|
||||
require ("libs.functions") -- From Bob's Libary
|
||||
require ("libs.category-functions") -- From Bob's Libary
|
||||
require ("libs.bi_functions") -- Functions
|
||||
|
||||
require ("prototypes.category")
|
||||
|
||||
|
||||
|
||||
|
||||
--- Bio Farm
|
||||
require ("prototypes.Bio_Farm.entities")
|
||||
require ("prototypes.Bio_Farm.item")
|
||||
require ("prototypes.Bio_Farm.recipe")
|
||||
require ("prototypes.Bio_Farm.liquids")
|
||||
require ("prototypes.Bio_Farm.recipe-categories")
|
||||
require ("prototypes.Bio_Farm.pipeConnectors")
|
||||
require ("prototypes.Bio_Farm.technology")
|
||||
require ("prototypes.Bio_Farm.tree_entities")
|
||||
|
||||
-- Bio Garden
|
||||
require ("prototypes.Bio_Garden.entities")
|
||||
require ("prototypes.Bio_Garden.item")
|
||||
require ("prototypes.Bio_Garden.recipe")
|
||||
require ("prototypes.Bio_Garden.recipe-categories")
|
||||
|
||||
|
||||
--- Bio Solar Farm
|
||||
require ("prototypes.Bio_Solar_Farm.entities")
|
||||
require ("prototypes.Bio_Solar_Farm.item")
|
||||
require ("prototypes.Bio_Solar_Farm.recipe")
|
||||
|
||||
|
||||
--- Wood Products
|
||||
require ("prototypes.Wood_Products.entities")
|
||||
require ("prototypes.Wood_Products.item")
|
||||
require ("prototypes.Wood_Products.recipe")
|
||||
require ("prototypes.Wood_Products.containers-entities")
|
||||
require ("prototypes.Wood_Products.containers-item")
|
||||
require ("prototypes.Wood_Products.containers-recipe")
|
||||
|
||||
|
||||
if not mods["Natural_Evolution_Buildings"] then
|
||||
--- Dart Turret (Bio turret)
|
||||
require ("prototypes.Bio_Turret.item-group")
|
||||
require ("prototypes.Bio_Turret.damage-type")
|
||||
require ("prototypes.Bio_Turret.item")
|
||||
require ("prototypes.Bio_Turret.recipe")
|
||||
require ("prototypes.Bio_Turret.entity")
|
||||
|
||||
|
||||
--- Bio Cannon
|
||||
|
||||
|
||||
-- Items Groups
|
||||
require ("prototypes.Bio_Cannon.item-group")
|
||||
|
||||
-- Cannon
|
||||
require ("prototypes.Bio_Cannon.item")
|
||||
require ("prototypes.Bio_Cannon.recipe")
|
||||
require ("prototypes.Bio_Cannon.entity")
|
||||
require ("prototypes.Bio_Cannon.technology")
|
||||
|
||||
-- Projectiles
|
||||
require ("prototypes.Bio_Cannon.projectiles-item")
|
||||
require ("prototypes.Bio_Cannon.projectiles-recipe")
|
||||
require ("prototypes.Bio_Cannon.projectiles-entity")
|
||||
|
||||
end
|
||||
|
||||
---- Add Bio Fuel & Plastic, etc.
|
||||
require("prototypes.Bio_Fuel.item")
|
||||
require("prototypes.Bio_Fuel.recipe")
|
||||
require("prototypes.Bio_Fuel.entities")
|
||||
require("prototypes.Bio_Fuel.technology")
|
||||
|
||||
|
||||
|
||||
-- Create the hidden entities (Moved here so we can be sure the base
|
||||
-- entities already exist and their properties can be read.)
|
||||
require("prototypes.compound_entities.hidden_entities")
|
||||
|
||||
|
||||
------------------------------------------------------------------------------------
|
||||
-- Alien Biomes will degrade tiles to "landfill" if more than 255 tiles are defined
|
||||
-- in the game. We can register the musk-floor tiles with Alien Biomes so it will
|
||||
-- try to prioritize the tiles if they exist.
|
||||
alien_biomes_priority_tiles = alien_biomes_priority_tiles or {}
|
||||
table.insert(alien_biomes_priority_tiles, "bi-solar-mat")
|
||||
|
||||
|
||||
|
||||
------------------------------------------------------------------------------------
|
||||
-- Add icons to our prototypes
|
||||
BioInd.BI_add_icons()
|
||||
local BioInd = require('common')('Bio_Industries_2')
|
||||
|
||||
if not BI then BI = {} end
|
||||
if not BI.Settings then BI.Settings = {} end
|
||||
|
||||
if not BI_Functions then BI_Functions = {} end
|
||||
if not BI_Functions.lib then BI_Functions.lib = {} end
|
||||
|
||||
if not thxbob then thxbob = {} end
|
||||
if not thxbob.lib then thxbob.lib = {} end
|
||||
|
||||
for var, name in pairs({
|
||||
Bio_Cannon = "BI_Bio_Cannon",
|
||||
BI_Bio_Fuel = "BI_Bio_Fuel",
|
||||
BI_Easy_Bio_Gardens = "BI_Easy_Bio_Gardens",
|
||||
BI_Bigger_Wooden_Chests = "BI_Bigger_Wooden_Chests",
|
||||
BI_Game_Tweaks_Stack_Size = "BI_Game_Tweaks_Stack_Size",
|
||||
BI_Game_Tweaks_Recipe = "BI_Game_Tweaks_Recipe",
|
||||
BI_Game_Tweaks_Tree = "BI_Game_Tweaks_Tree",
|
||||
BI_Game_Tweaks_Small_Tree_Collisionbox = "BI_Game_Tweaks_Small_Tree_Collisionbox",
|
||||
BI_Game_Tweaks_Player = "BI_Game_Tweaks_Player",
|
||||
BI_Game_Tweaks_Disassemble = "BI_Game_Tweaks_Disassemble",
|
||||
BI_Game_Tweaks_Bot = "BI_Game_Tweaks_Bot",
|
||||
BI_Solar_Additions = "BI_Solar_Additions"
|
||||
}) do
|
||||
BI.Settings[var] = BioInd.get_startup_setting(name)
|
||||
end
|
||||
|
||||
|
||||
--- Help Files
|
||||
require("libs.functions") -- From Bob's Libary
|
||||
require("libs.error-functions") -- From Bob's Libary
|
||||
require("libs.item-functions") -- From Bob's Libary
|
||||
require("libs.recipe-functions") -- From Bob's Libary
|
||||
require("libs.technology-functions") -- From Bob's Libary
|
||||
require("libs.category-functions") -- From Bob's Libary
|
||||
require("libs.bi_functions") -- Functions
|
||||
require("prototypes.category")
|
||||
|
||||
|
||||
|
||||
|
||||
--- Bio Farm
|
||||
require("prototypes.Bio_Farm.entities")
|
||||
require("prototypes.Bio_Farm.item")
|
||||
require("prototypes.Bio_Farm.recipe")
|
||||
require("prototypes.Bio_Farm.liquids")
|
||||
require("prototypes.Bio_Farm.recipe-categories")
|
||||
require("prototypes.Bio_Farm.technology")
|
||||
require("prototypes.Bio_Farm.tree_entities")
|
||||
|
||||
-- Bio Garden
|
||||
require("prototypes.Bio_Garden.entities")
|
||||
require("prototypes.Bio_Garden.item")
|
||||
require("prototypes.Bio_Garden.recipe")
|
||||
require("prototypes.Bio_Garden.recipe-categories")
|
||||
|
||||
|
||||
--- Bio Solar Farm
|
||||
require("prototypes.Bio_Solar_Farm.entities")
|
||||
require("prototypes.Bio_Solar_Farm.item")
|
||||
require("prototypes.Bio_Solar_Farm.recipe")
|
||||
|
||||
|
||||
--- Wood Products
|
||||
require("prototypes.Wood_Products.entities")
|
||||
require("prototypes.Wood_Products.item")
|
||||
require("prototypes.Wood_Products.recipe")
|
||||
require("prototypes.Wood_Products.containers-entities")
|
||||
require("prototypes.Wood_Products.containers-item")
|
||||
require("prototypes.Wood_Products.containers-recipe")
|
||||
require("prototypes.Wood_Products.rail")
|
||||
|
||||
|
||||
if not mods["Natural_Evolution_Buildings"] then
|
||||
--- Dart Turret (Bio turret)
|
||||
require("prototypes.Bio_Turret.item-group")
|
||||
require("prototypes.Bio_Turret.damage-type")
|
||||
require("prototypes.Bio_Turret.item")
|
||||
require("prototypes.Bio_Turret.recipe")
|
||||
require("prototypes.Bio_Turret.entity")
|
||||
|
||||
--- Bio Cannon
|
||||
-- Items Groups
|
||||
require("prototypes.Bio_Cannon.item-group")
|
||||
|
||||
-- Cannon
|
||||
require("prototypes.Bio_Cannon.item")
|
||||
require("prototypes.Bio_Cannon.recipe")
|
||||
require("prototypes.Bio_Cannon.entity")
|
||||
require("prototypes.Bio_Cannon.technology")
|
||||
|
||||
-- Projectiles
|
||||
require("prototypes.Bio_Cannon.projectiles-item")
|
||||
require("prototypes.Bio_Cannon.projectiles-recipe")
|
||||
require("prototypes.Bio_Cannon.projectiles-entity")
|
||||
end
|
||||
|
||||
---- Add Bio Fuel & Plastic, etc.
|
||||
require("prototypes.Bio_Fuel.item")
|
||||
require("prototypes.Bio_Fuel.recipe")
|
||||
require("prototypes.Bio_Fuel.entities")
|
||||
require("prototypes.Bio_Fuel.technology")
|
||||
|
||||
|
||||
|
||||
-- Create the hidden entities (Moved here so we can be sure the base
|
||||
-- entities already exist and their properties can be read.)
|
||||
require("prototypes.compound_entities.hidden_entities")
|
||||
|
||||
|
||||
------------------------------------------------------------------------------------
|
||||
-- Alien Biomes will degrade tiles to "landfill" if more than 255 tiles are defined
|
||||
-- in the game. We can register the musk-floor tiles with Alien Biomes so it will
|
||||
-- try to prioritize the tiles if they exist.
|
||||
alien_biomes_priority_tiles = alien_biomes_priority_tiles or {}
|
||||
table.insert(alien_biomes_priority_tiles, "bi-solar-mat")
|
||||
|
||||
|
||||
|
||||
------------------------------------------------------------------------------------
|
||||
-- Add icons to our prototypes
|
||||
BioInd.BI_add_icons()
|
||||
|
|
After Width: | Height: | Size: 53 KiB |
After Width: | Height: | Size: 79 KiB |
After Width: | Height: | Size: 382 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 1.2 KiB |
BIN
Bio_Industries_2/graphics/entities/bio_boiler/boiler-E-idle.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
Bio_Industries_2/graphics/entities/bio_boiler/boiler-N-idle.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
Bio_Industries_2/graphics/entities/bio_boiler/boiler-S-idle.png
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
Bio_Industries_2/graphics/entities/bio_boiler/boiler-W-idle.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
Bio_Industries_2/graphics/entities/bio_cokery/cokery_anim.png
Normal file
After Width: | Height: | Size: 54 KiB |
BIN
Bio_Industries_2/graphics/entities/bio_cokery/cokery_idle.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
Bio_Industries_2/graphics/entities/bio_cokery/cokery_shadow.png
Normal file
After Width: | Height: | Size: 698 B |
BIN
Bio_Industries_2/graphics/entities/bio_farm/bio_farm.png
Normal file
After Width: | Height: | Size: 225 KiB |
BIN
Bio_Industries_2/graphics/entities/bio_farm/bio_farm_light.png
Normal file
After Width: | Height: | Size: 170 KiB |
BIN
Bio_Industries_2/graphics/entities/bio_farm/bio_farm_shadow.png
Normal file
After Width: | Height: | Size: 8.5 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 9.8 KiB |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 89 KiB |
After Width: | Height: | Size: 678 KiB |
After Width: | Height: | Size: 2.3 MiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 54 KiB |
After Width: | Height: | Size: 258 KiB |
After Width: | Height: | Size: 62 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 4.8 KiB |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 185 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 2 KiB |
After Width: | Height: | Size: 4.9 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 2 KiB |
BIN
Bio_Industries_2/graphics/entities/bio_musk_floor/solarfloor.png
Normal file
After Width: | Height: | Size: 538 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 5.9 KiB |
After Width: | Height: | Size: 402 B |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 96 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 838 B |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 8.6 KiB |
After Width: | Height: | Size: 153 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 689 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 1 KiB |
After Width: | Height: | Size: 133 KiB |
After Width: | Height: | Size: 64 KiB |
After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 8 KiB |
Before Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 8.2 KiB |
Before Width: | Height: | Size: 196 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 152 KiB |
Before Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 154 KiB |
After Width: | Height: | Size: 265 B |
Before Width: | Height: | Size: 7.2 KiB |
Before Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 5.6 KiB |
Before Width: | Height: | Size: 8.3 KiB |
Before Width: | Height: | Size: 914 B |
Before Width: | Height: | Size: 713 B |
Before Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 53 KiB |
After Width: | Height: | Size: 8.3 KiB |
After Width: | Height: | Size: 405 B |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 2.4 KiB |
BIN
Bio_Industries_2/graphics/entities/bio_terraformer/arboretum.png
Normal file
After Width: | Height: | Size: 123 KiB |
After Width: | Height: | Size: 45 KiB |
After Width: | Height: | Size: 42 KiB |
After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 155 KiB |