208 lines
6.4 KiB
Lua

local small_ruins = {
require("ruins/Blue-Chip-S"),
require("ruins/Con-Bot-S"),
require("ruins/Green-Chip-S"),
require("ruins/Red-Chip-S"),
require("ruins/Filter-Inserter-S"),
}
local small_ruins_RPGsystem = {
require("ruins/Craft-Potion-S"),
require("ruins/Exp-Potion-S"),
require("ruins/Heal-Potion-S"),
require("ruins/Speed-Potion-S"),
}
local small_ruins_angelsrefining = {
require("ruins/Sludge-S"),
require("ruins/Sulfuric-Acid-S"),
}
local small_ruins_robotarmy = {
require("ruins/BattleBot-S"),
require("ruins/Clockwork-S"),
require("ruins/FlameBot-S"),
require("ruins/RocketBot-S"),
require("ruins/Terminator-S"),
}
local medium_ruins = {
require("ruins/AProvider-Box-M"),
require("ruins/Blue-Red-Chips-M"),
require("ruins/Buffer-Box-M"),
require("ruins/Con-Bot-M"),
require("ruins/Logi-Bot-M"),
require("ruins/Lube-M"),
require("ruins/Nuke-Rods-M"),
require("ruins/Provider-Box-M"),
require("ruins/Red-Green-Chips-M"),
require("ruins/Req-Box-M"),
require("ruins/Storage-Box-M"),
require("ruins/Inv-Bat-M"),
require("ruins/Inv-Solar-M"),
require("ruins/Inv-Modular-M"),
require("ruins/Inv-Lpd-M"),
require("ruins/Inv-Shield-M"),
}
local medium_ruins_RPGsystem = {
require("ruins/RPG-M"),
}
local medium_ruins_angelspetrochem = {
require("ruins/Air-Filter-M"),
require("ruins/Electrolyser-M"),
require("ruins/Gas-Refinery-M"),
}
local medium_ruins_angelsrefining = {
require("ruins/Barrels-M"),
require("ruins/Hydro-plant-M"),
require("ruins/Sulfuric-Acid-M"),
require("ruins/Washing-M"),
}
local medium_ruins_robotarmy = {
require("ruins/Droids-M"),
}
local medium_ruins_Aircraft = {
require("ruins/Cargo-Plane-M"),
}
local large_ruins = {
require("ruins/Blue-L"),
require("ruins/Mil-Tech-L"),
require("ruins/Reactor-L"),
require("ruins/Roboport-L"),
require("ruins/Inv-L"),
require("ruins/Ammo-Dump-L"),
}
local large_ruins_angelspetrochem = {
require("ruins/Electric-Steam-L"),
}
local large_ruins_angelsrefining = {
require("ruins/Ore-Crush-Sort-L"),
require("ruins/Filtration-Unit-L"),
}
local large_ruins_angelssmelting = {
require("ruins/Casting-L"),
}
local large_ruins_angelsrefining_angelspetrochem = {
require("ruins/Crystalize4-L"),
require("ruins/Electrolyser-L"),
}
local large_ruins_RPGsystem_angelspetrochem = {
require("ruins/Lazors-L"),
}
local function make_ruin_set()
-- Get the base ruin set of the AbandonedRuins mod. This creates a copy of that ruin set.
local base_ruins = remote.call("AbandonedRuins", "get_ruin_set", "base")
-- Add the silly ruins to the existing ruins.
for _, ruin in pairs(small_ruins) do
table.insert(base_ruins.small, ruin)
end
for _, ruin in pairs(medium_ruins) do
table.insert(base_ruins.medium, ruin)
end
for _, ruin in pairs(large_ruins) do
table.insert(base_ruins.large, ruin)
end
if global.RPGsystem then
for _, ruin in pairs(small_ruins_RPGsystem) do
table.insert(base_ruins.small, ruin)
end
for _, ruin in pairs(medium_ruins_RPGsystem) do
table.insert(base_ruins.medium, ruin)
end
end
if global.angelspetrochem then
for _, ruin in pairs(medium_ruins_angelspetrochem) do
table.insert(base_ruins.medium, ruin)
end
for _, ruin in pairs(large_ruins_angelspetrochem) do
table.insert(base_ruins.large, ruin)
end
end
if global.angelsrefining then
for _, ruin in pairs(small_ruins_angelsrefining) do
table.insert(base_ruins.small, ruin)
end
for _, ruin in pairs(medium_ruins_angelsrefining) do
table.insert(base_ruins.medium, ruin)
end
for _, ruin in pairs(large_ruins_angelsrefining) do
table.insert(base_ruins.large, ruin)
end
end
if global.robotarmy then
for _, ruin in pairs(small_ruins_robotarmy) do
table.insert(base_ruins.small, ruin)
end
for _, ruin in pairs(medium_ruins_robotarmy) do
table.insert(base_ruins.medium, ruin)
end
end
if global.Aircraft then
for _, ruin in pairs(medium_ruins_Aircraft) do
table.insert(base_ruins.medium, ruin)
end
end
if global.angelssmelting then
for _, ruin in pairs(large_ruins_angelssmelting) do
table.insert(base_ruins.large, ruin)
end
end
if global.angelsrefining and global.angelspetrochem then
for _, ruin in pairs(large_ruins_angelsrefining_angelspetrochem) do
table.insert(base_ruins.large, ruin)
end
end
if global.RPGsystem and global.angelspetrochem then
for _, ruin in pairs(large_ruins_RPGsystem_angelspetrochem) do
table.insert(base_ruins.large, ruin)
end
end
if global.angelsrefining then
-- Replace rocks with trees, otherwise Angel replaces them with larger rocks- blocking chest placement.
replace_entity_name_in_all_ruins(base_ruins, "rock-big", "tree-04")
end
-- Provide the extended and modified ruin set as the "silly" set.
remote.call("AbandonedRuins", "add_ruin_set", "silly", base_ruins.small, base_ruins.medium, base_ruins.large)
end
local function make_optional_modlist()
global.RPGsystem = game.active_mods["RPGsystem"]
global.angelspetrochem = game.active_mods["angelspetrochem"]
global.angelsrefining = game.active_mods["angelsrefining"]
global.robotarmy = game.active_mods["robotarmy"]
global.Aircraft = game.active_mods["Aircraft"]
global.angelssmelting = game.active_mods["angelssmelting"]
end
local function handle_on_init()
make_optional_modlist()
make_ruin_set()
end
-- The ruin set is created always when the game is loaded, since the ruin sets are not save/loaded by AbandonedRuins.
-- Since this is using on_load, we must be sure that it always produces the same result for everyone.
-- Luckily, it's okay to do ruin changes based on a startup setting here since those cannot change during the game.
script.on_init(handle_on_init)
script.on_load(make_ruin_set)
script.on_configuration_changed(handle_on_init)
function replace_entity_name_in_all_ruins(ruin_set, value, replacement)
for _, ruin in pairs(ruin_set.small) do
replace_entity_name(ruin, value, replacement)
end
for _, ruin in pairs(ruin_set.medium) do
replace_entity_name(ruin, value, replacement)
end
for _, ruin in pairs(ruin_set.large) do
replace_entity_name(ruin, value, replacement)
end
end
function replace_entity_name(ruin, name, replacement)
if not (ruin.entities and next(ruin.entities) ~= nil) then return end
for _, entity in pairs(ruin.entities) do
if entity[1] and entity[1] == name then
entity[1] = replacement
end
end
end